Traducere automată · Originalul în engleză

Magpie-TTS Multilingual

NVIDIA Magpie-TTS Multilingual 357M în Swift pe Apple Silicon bază multi-codebook autoregresivă peste modelul lui NeMo 22.05 kHz Nano-Codec. Nouă limbi (engleză, spaniolă, germană, franceză, italiană, vietnameză, hindi, chineză mandarină, japoneză) cu cinci identităţi de vorbitor coapte. INT4 (~247 MB) sau INT8 (~411 MB). Streaming-gata, ~120 Prima latenţă.

Când să ajungă la Magpie

Magpie este alegerea potrivită atunci când aveți nevoie de un singur pachet mic, care vorbește nouă limbi cu o voce consistentă. Cei cinci vorbitori coapte stau la masa de identitate în toate limbile . Utile pentru asistenți multilingvi, aplicații de educație, sau audiobook narațiune cu cod-switching. Pentru utilizarea clonării vocale zero-shot CosyVoice3 , Qwen3-TTS Baza, sau VoxCPM2 în schimb.

Arhitectură

Magpie este o conducta de 4 bucati MLX: codor text → decodor de atenţie încrucişată → Cap de cod localTransformer → Codebook cauzal HiFi-GAN audio codec. Pachetele partajează greutăţile decodorului între prefill şi puncte de intrare în trepte pentru a se potrivi cu aranjamentul lichidului în amonte CoreML.

Etape Modul Detalii
1. TokenizareMagpieTokenizerPer-limbă G2P (IPA dict / byT5 bytes / pinyin / katakana), împărțită la 2360-token vocab cu per-tokenizer offsets, întotdeauna aplicate EOS
2. Codor textMagpieTextEncoder6 straturi cauzale de Transformer, d=768, k=3 conv FFN
3. Prefill decodorMagpieDecodor12 straturi cauzale cu atentie încrucişată. Se însămânţează context difuzor 110-cadru coapte + BOS în cache-ul KV.
4. Transformator localMagpieLocalTransformer1-strat de codebook cap, d=256. Mostrele 8 codebooks pe cadru secvențial dat de decodor ascuns.
5. Treaptă de decodorMagpieDecodorO treaptă AR per cadru până la EOS sau la 500 de cadre (~23 s).
6. NanoCodecMagpieNanoCodecFSQ invers → cauzal HiFi-GAN → 22.05 kHz monowaleform.

Limbi și G2P

Toate cele nouă limbi rotunde-trip prin Qwen3-ASR în SDK's testMultilingualRoundTrip. Fiecare dintre acestea are o conductă adaptată:

Limba Cod Conductă G2P
EnglezăenCMU IPA dict (inregistrari 125 k, grupate)
SpaniolăesIPA dilt spaniolă (grupată)
GermanădeIPA germană (grupată)
FrancezăfrbyT5 UTF-8 byte encoder
ItalianăitbyT5 UTF-8 byte encoder
VietnamezăvibyT5 UTF-8 byte encoder
HindihiDevanagari codepoint lookup + last-wins sub-vocab
Mandarin chinezesczhNLTokenizer(.simplifiedChinese) cuvânt seg + Apple .mandarinToLatin + pachetd pinyin → IPA dict + #N markeri ton
JaponezăjaCFStringTokenizer kanji reading + NFC-conservat dakuten + markeri de pas Heiban + suprascrieri de particule/de greiere

Vocabul partajat de 2360 de intrări concatenă fiecare limbă sub-tokeniser la sfârşit cu un offset per-limbă (înregistrat în MagpieSubVocab). Textul-embed adaugă două rânduri suplimentare peste vocabularul pentru BOS / EOS; eos_id = 2361 este anexat la fiecare secvenţă de intrare.

Speakeri copţi

Punctul de control include cinci contexte speaker (110 cadre × 768 dim fiecare) utilizate ca prefix al fiecărui cod AR. Identitatea speaker este consistentă în toate cele nouă limbi.

Indice Nume CLIIdentitate
0sofiaSofia (default)
1ariaAriaworld. kgm
2jasonJason.
3leoLeo.
4johnJohn Van Stan

Model Variante

VariantăDiscRAM (încarcă + decodează)HuggingFace
INT4 (default)~247 MO~1,3 GBaufklarer/Magpie-TTS-Multilingual-357M-MLX-4bit
INT8~411 MO~1,6 GBaufklarer/Magpie-TTS-Multilingual-357M-MLX-8bit

Ambele pachete utilizează MLX cuantizare plată afină (mlx_affine_flat, dimensiunea grupului 64) și dequantise to FP32 la timpul de încărcare ? Activările pe timp de funcționare sunt de precizie completă. INT4 este de necontestat INT8 pentru acest model; alege INT4 Doar dacă nu aveţi de păstrat.

Utilizarea CLI

# English, greedy decoding
speech speak "Hello, world." --engine magpie --magpie-speaker aria \
    --magpie-temperature 0 -o out.wav

# Spanish (any of the 9 languages — pick with --language)
speech speak "Hola, mundo." --engine magpie --language es \
    --magpie-speaker aria -o out.wav

# Japanese — needs stochastic decoding (greedy gets stuck on first phrase)
speech speak "こんにちは世界、これは音声合成システムです。" \
    --engine magpie --language ja --magpie-temperature 0.6 \
    --magpie-top-k 80 --seed 42 -o out.wav

# Streaming synthesis with playback
speech speak "Streaming test" --engine magpie --stream --play

# List the 5 baked speakers
speech speak --engine magpie --list-speakers

# Pre-phonemised IPA bypasses the per-language G2P
speech speak "həˈloʊ" --engine magpie --magpie-prephonemized -o out.wav

Opțiuni

OpțiuneImplicit Descriere
--magpie-variantint4 Varianta de cuantificare: int4 sau int8
--magpie-speakersofia Vorbitor coapte: sofia, aria, jason, leo, john
--magpie-temperature0.6 Temperatura eșantionului (0 = lacom)
--magpie-top-k80 Filtru Top-K pentru eșantionare
--magpie-max-frames500Capac tare pe ramele de codec (~23 s)
--magpie-min-frames4Rame minime înainte de a permite EOS
--magpie-prephonemizedoffTratează intrarea ca flux IPA/phoneme; săriți peste fiecare limbă G2P
--languageenglish Alege conducta de tokeniser pe limba
--streamoffEmit AsyncStream<AudioChunk> în loc de un singur WAV
--seed—Mostra de eșantionare Gumbel reproductibilă
Vârf japonez de eșantionare

Intrările japoneze mai mult decât un singur cuvânt au nevoie de decodare stocastic (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 oglinzi testul de referință NeMo). Greedy devine blocat pe prima frază, deoarece heiban smoc-accent eurist deviază de la adevărul per-cuvânt.

Clonarea vocală nu este susținută

Magpie nu are difuzor zero impuscat conditionat in model; numai nava 5 identitati coapte din pachet. CLI respinge partajat --voice-sample, --speaker, și --instruct steaguri cu o eroare de acţiune care indică utilizatorii la --magpie-speaker pavilion sau motoare care sprijină clonarea ( Baza Qwen3-TTS, CosyVoice3, VoxCPM2).

Performanță (M4 Pro)

SetareAudioZidRTF
Lot, INT4, lacom, prompt scurt2.8 s0.88 s0.32
Lot INT4, lacom, propoziţie5.8 s1.35 s0.23
Lot, INT4, eșantionat, 23 s de ieșire23 s5.6 s0.24
Streaming, INT4, eșantionat23 s21.6 s0.93

Primul pachet de latență în modul de streaming este de 120 ms după sarcina model. Streaming RTF este mai mare deoarece codec este re-invocat pe tamponul de cod complet la fiecare emisie bucată (o revizuire viitoare poate cache stare codec).

Swift API

import MagpieTTS

let model = try await MagpieTTS.fromPretrained(variant: .int4)

// Batch synthesis (en/es/de/fr/it/vi/hi/zh — greedy works)
let audio = try model.synthesize(
    text: "Hello, world.",
    speaker: .aria,
    language: .english,
    params: MagpieTTSParams(temperature: 0, topK: 1, maxSteps: 500))

// Japanese — use stochastic sampling
let audioJA = try model.synthesize(
    text: "こんにちは世界、これは音声合成システムです。",
    speaker: .aria,
    language: .japanese,
    params: MagpieTTSParams(temperature: 0.6, topK: 80,
                              maxSteps: 300, seed: 42))

// Streaming (AsyncStream<AudioChunk>)
let stream = model.synthesizeStream(
    text: "Streaming text",
    speaker: .aria,
    language: .english,
    firstChunkFrames: 8,
    framesPerChunk: 25)
for try await chunk in stream {
    // chunk.samples is 22.05 kHz mono Float32
}

CoreML suport (--engine magpie-coreml)

Alături de pachetul MLX, Magpie transportă un pachet CoreML (aufklaer/Magpie-TTS-Multilingual-357M-CoreML-8bit, ~342 MB INT8). Patru .mlmodelc pachete ? text_encoder, decoder_prefill, decoder_step, nanocodec_decoder Rulați pe ANE / GPU; un invers Swift-side FSQ transformă codurile eșantionate în latentele 32-dim pe care le consumă codec.

# 8 languages (no Japanese), 5 baked speakers
speech speak "Hello world." --engine magpie-coreml --magpie-speaker aria -o hi.wav
speech speak "Hola mundo." --engine magpie-coreml --language es --magpie-speaker leo -o es.wav

# --language ja auto-routes to the MLX backend (stderr note)
speech speak "こんにちは" --engine magpie-coreml --language ja -o ja.wav

Caveats vs --engine magpie:

Ordinea speakerului se potriveşte cu pachetul CoreML speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo Diferit de MLX), și speaker-ul hărți enum intern, astfel încât numele CLI funcționează pentru ambele motoare.

Note de punere în aplicare

Trei bug-uri care merită să știe dacă sunteți portare multilingve stil NeMo TTS:

Toate cele trei soluții sunt documentate în linie în modulul Swift .

Sursă

Licență