Traduzione automatica · Originale inglese
CosyVoice3
Correre CosyVoice3 localmente su Mac con MLX per la parola in nove lingue e clonazione vocale da una breve registrazione. Ascoltare gli esempi predefiniti, clonati e controllati dallo stile, quindi provare clonazione con l'audio di riferimento e la sua trascrizione esatta.
Campioni audio · Clone una voce con il CLI · Lingue supportate · Confronto e metodologia di clonazione vocale a cinque lingue
Campioni audio
Ascolti la voce predefinita esistente, il clone fatto da Kokoro af_heart, e l'esempio controllato dallo stile. L'esempio CLI qui sotto utilizza un riferimento FLEURS.
8-bit CosyVoice3 sintesi con seme fisso.
CosyVoice3 clonazione del Kokoro
Una consegna luminosa ed eccitata con --cosy-instruct.
Clone una voce con il CLI
Download Riferimento audio come riferimento.wav. Il comando utilizza la sua trascrizione esatta; sostituire sia la registrazione che la trascrizione quando si utilizza il proprio campione vocale.
speech speak "Hello from the cloned voice." \
--engine cosyvoice \
--cosyvoice-variant bf16 \
--voice-sample reference.wav \
--cosy-reference-transcript "One can only wonder what the keyboard will become when something newer comes along." \
--seed 42 \
--output clone.wav
CosyVoice 3 vs 3.5 disponibilità
Questa guida e il runtime di Soniqo supportano l'apertura Fun-CosyVoice 3-0.5B (3.0) La linea. repository open source ufficiale attualmente pubblica e documenta 3.0, compresi Fun-CosyVoice3-0.5B-2512—e non espone i pesi CosyVoice 3.5 o il codice di inferenza. cosyvoice-v3.5-plus nome è un Alibaba Cloud Model Studio API modello ID, non un checkpoint scaricabile in quel repository, quindi Soniqo non rivendica il supporto 3.5 locale.
Lingue supportate
| Lingua | Codice |
|---|---|
| Cinese | cinese |
| Inglese | inglese |
| Giapponese | Giapponese |
| Coreano | Coreano |
| Germania | tedesco |
| Spagnolo | Spa |
| Francese | French |
| Italiano | italiano |
| Russo | Russia |
Pipeline
CosyVoice3 sintetizza il discorso in tre fasi:
- LLM — La spina dorsale Qwen2.5-0.5B genera token di discorso FSQ (Finite Scalar Quantization) dal testo
- DiT Flow Matching — Un trasformatore di diffusione a 22 strati converte i token di discorso in spettriogrammi mel tramite l'integrazione di Euler ODE
- HiFi-GAN — Il vocoder del filtro della sorgente neurale converte gli spettri mel in forme d'onda 24 kHz
Architettura
LLM (Qwen2.5-0.5B)
L'attuale runtime supporta bf16 (default), 8bit e 8bit-full. Selezionare un bundle con --cosyvoice-variant. Il modello di lingua genera token discografici in modo discreto.
| Parametro | Valore |
|---|---|
| Datori di lavoro | 24 |
| Dimensione nascosta | 896 |
| Teste di query | 14 |
| Teste chiave/valore | 2 (GQA) |
| Vocabolario FSQ | 6561 |
| Quantificazione | bf16 / 8 bit |
Corrispondenza del flusso DiT
Il Diffusion Transformer perfeziona i token vocali in spettrogrammi mel utilizzando il flusso condizionale corrispondente alla guida senza classificatori.
| Parametro | Valore |
|---|---|
| Datori di lavoro | 22 |
| Dimensione | 1024 |
| Attenzione: | 16 |
| Condizionamenti | AdaLN (Adaptive Layer Norm) |
| Risolvere ODE | Euler, 10 passi |
| Tasso di CFG | 0.7 |
HiFi-GAN Vocoder
Un vocoder della sorgente neurale (NSF) che converte gli spettrogrammi mel in forme d'onda.
| Parametro | Valore |
|---|---|
| Armoniche | 8 |
| Rapporto di upsample | 480x (8 x 5 x 3 x ISTFT 4) |
| ISTFT | Traduzione:16♪4 |
| Tasso di campionamento in uscita | 24 kHz |
Peso del modello
| Variante | LLM | Divertimento | Dimensione | HuggingFace |
|---|---|---|---|---|
8bit | int8, gruppo=64 | bf16 | ~1.4 GB | aufklarer/CosyVoice3-0.5B-MLX-8bit |
8bit-full | int8, gruppo=64 | int8, gruppo=64 | ~ 1,6 GB | aufklarer/CosyVoice3-0.5B-MLX-8bit-full |
bf16 | bf16 | bf16 | 2,1 GB | aufklarer/CosyVoice3-0.5B-MLX-bf16 |
Ogni bundle include il LLM, il decoder di scorrimento DiT, il vocoder HiFi-GAN, e l'encoder di riferimento S3-Tokenizer necessario per la clonazione vocale zero-shot. bf16 quando il rumore di quantizzazione LLM/DiT diventa un problema (sintesi di forma lunga, fedeltà di clonazione vocale).
Uso CLI
# Default bf16 bundle
.build/release/speech speak "Hallo Welt" --engine cosyvoice --language german -o output.wav
# Pick a variant via --cosyvoice-variant
.build/release/speech speak "Hallo Welt" --engine cosyvoice --cosyvoice-variant bf16 --language german -o output.wav
Esempi
# English
.build/release/speech speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav
# Chinese
.build/release/speech speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav
# Spanish
.build/release/speech speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav
# French
.build/release/speech speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav
Clonazione vocale
Clone qualsiasi voce da un breve campione audio di riferimento utilizzando la bandiera --voice-sample. CosyVoice3 utilizza l'encoder del diffusore CAM++ per estrarre un 192-dim che incorpora le condizioni del modello di flusso DiT.
# Voice cloning
.build/release/speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav --cosy-reference-transcript "One can only wonder what the keyboard will become when something newer comes along." -o cloned.wav
# Cross-language: clone voice, speak in German
.build/release/speech speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --cosy-reference-transcript "One can only wonder what the keyboard will become when something newer comes along." --language german -o german.wav
Come funziona
- Encoder per diffusori CAM++ estrae un embedding 192-dim dall'audio di riferimento tramite CoreML (Neural Engine)
- Proiezione sufficiente (192 → 80) condiziona il decoder di corrispondenza del flusso DiT sulla voce di destinazione
- HiFi-GAN vocoder converte lo spettrogramma di mel climatizzato dell'altoparlante a 24kHz audio
Altoparlante Encoder
| Proprietà | Valore |
|---|---|
| Modello | CAM++ (Context-Aware Masking++) |
| Embedding | 192 dimensioni |
| Indietro | CoreML (Neural Engine, FP16) |
| Dimensione | ~ 14 MB |
| HuggingFace | aufklarer/CamPlusPlus-Speaker-CoreML |
Il modello CAM++ viene scaricato automaticamente sul primo utilizzo di --voice-sample. Vedi la guida Voice Cloning per le punte audio di riferimento e la guida Swift API
Dialogo multi-Speaker
Sincronizza le conversazioni tra più diffusori utilizzando etichette di altoparlante in linea. Ciascun diffusore viene assegnata una voce da un file audio di riferimento tramite la bandiera --speakers
# Two-speaker dialogue with voice cloning
.build/release/speech speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# Three speakers
.build/release/speech speak "[A] Welcome. [B] Thanks! [C] Glad to be here." \
--engine cosyvoice --speakers a=host.wav,b=guest1.wav,c=guest2.wav -o panel.wav
I nomi dei diffusori nei tag sono case-insensibili e abbinati ai tasti di mappatura. Un gap di silenzio configurabile (default 0.2s) viene inserito tra i giri.
| Opzione | Predefinito | Designazione |
|---|---|---|
--speakers | Mappatura del diffusore: s1=file.wav,s2=file.wav | |
--turn-gap | 0.2 | Silenzio tra le curve (secondi) |
--crossfade | 0.0 | Si sovrapposizione tra curve (secondi) |
Emozione & stile Tag
Controllare lo stile di parola per segmento utilizzando i tag di emozione in linea. CosyVoice3 utilizza il prefisso di testo prima del <|endofprompt|> token come istruzione di stile — tag di eliminazione mappa alle istruzioni di lingua naturale che sostituiscono questo prefisso.
# Emotion tags
.build/release/speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# Combined with speakers
.build/release/speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# Freeform instruction as tag
.build/release/speech speak "(Speak like a pirate) Ahoy matey!" \
--engine cosyvoice -o pirate.wav
# Global instruction (applies to all segments without emotion tags)
.build/release/speech speak "Hello world" \
--engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
Emozione integrata Tag
| Tag: | Istruzione |
|---|---|
happy / excited | Parlare felicemente e con eccitazione. |
sad | Parla tristemente con un tono malinconico. |
angry | Parla con rabbia e intensità. |
whispers / whispering | Parla con un sussurro morbido e gentile. |
laughs / laughing | Parlate mentre ridete. |
calm | Parlate con calma e tranquillità. |
surprised | Parla con sorpresa e stupore. |
serious | Parla in un tono serio e formale. |
I tag sconosciuti passano come istruzioni di forma libera, così (Speak in a slow, dramatic voice)
Token di controllo del modello ( fl_ tokens)
Internamente, la CosyVoice3 LLM utilizza token di controllo speciali — prefissati fl_ — per passare tra modalità (clonazione zero-shot, sintesi istruita, salvataggio di un altoparlante, ecc.). Questi gettoni fanno parte del tokenizzatore FunAudioLLM a monte; il runtime Soniqo emette automaticamente quello corretto in base alla bandiera CLI o Swift API che usi, quindi non li scrivi mai a mano.
| Token di controllo | Modalità | Come invocare da Soniqo |
|---|---|---|
<|fl_speaker_clone|> | clonazione vocale zero-shot da un campione audio di riferimento | Passaggio --voice-sample reference.wav sul CLI, o set voiceSample: sulla Swift API. |
<|fl_speaker_instruct|> | Istruzione- o sintesi di stile con una voce predefinita | Passaggio --cosy-instruct "Speak cheerfully" o utilizzare un inline (happy) tag senza tag --voice-sample. |
<|fl_speaker_instruct2|> | Sintesi dell'istruzione combinata con una voce di riferimento clonata | Combinare --voice-sample reference.wav con --cosy-instruct "..." |
<|fl_save_speaker|> | Persistere l'integrazione di un altoparlante per il riutilizzo senza ri-codificare l'audio di riferimento ogni chiamata | Non direttamente esposto nel Soniqo CLI — le incorporazioni sono calcolate per chiamata. Per la cache, estrarre il vettore CAM++ 192-dim tramite il modulo Speaker Embeddings e passarlo in avanti. |
<|fl_speaker_clone_zh|>, <|fl_speaker_clone_en|>, … | Appunti di clonazione a zero-shot specifici per la lingua utilizzati dal tokenizzatore a monte | Combinare --voice-sample con --language german|spanish|chinese|.... Soniqo seleziona l'accenno di lingua corretto dalla bandiera --language. |
La tabella sopra mappa ogni a monte fl_ controllo token al suo equivalente Soniqo. Non è mai necessario complice fl_ gettoni nel vostro prompt voi stessi — passare le bandiere CLI di alto livello o Swift API argomenti e il runtime emetterà la sequenza corretta: clone → istruisce → instruct2 → save_speaker.
Sampling
La fase LLM utilizza la seguente configurazione di campionamento:
| Parametro | Valore |
|---|---|
| Top-k | 25 |
| Top-p | 0.8 |
| Ripetizione Aware Sampling | Abilitato (finestra=10, tau_r=0.1) |
Ripetizione Aware Sampling (RAS), da VALL-E 2, penalizza i token che sono apparsi negli ultimi 10 token generati, impedendo artefatti audio ripetitivi e migliorando la stabilità di uscita.
Prestazioni
Su un M2 Max, CosyVoice3 raggiunge un RTF di circa 0,5 — più veloce del tempo reale.
| Fase | Lattice |
|---|---|
| LLM (compilato) | ~13 ms/token |
| Corrispondenza del flusso DiT | 370 - 520 ms |
| HiFi-GAN | 50 - 170 ms |
Le varianti LLM quantizzate (8-bit / 8 -bit-full) compile(shapeless: true) per il loop autoregressivo, che elimina la ricompilazione sopra la testa attraverso lunghezze di sequenza variabili. La variante bf16 salti che compilano — il tracer senza forma di MLX-Swift non può dedurre la forma di uscita del matmul bias-fuso che semplice Linear utilizza — e gestisce il ciclo di generazione con entusiasmo. Batch-doppiato CFG ha il numero di passi avanti DiT da 20 a 10 in tutte le varianti.
Qwen3-ASR discorso-testo · Parakeet TDT discorso-to-text · Kokoro-82M TTS