Strojový překlad · Anglický originál
Magpie- TTS Multilingual
NVIDIA Magpie- TTS Vícejazyčné 357M v Swift na Apple Silicon - autoregresivní multi-codebook text- to- - model řeči nad NeMo je 22.05 kHz Nano-kodek. Devět jazyků (anglicky, španělsky, německy, francouzsky, italsky, vietnamsky, hindsky, mandarínsky čínsky, japonsky) s pěti pečených reproduktorů identity. INT4 (~ 247 MB) nebo INT8 (~411 MB). Streaming- ready, ~120 Slečna první-paket latency.
Straka je ten správný výběr, když potřebujete jeden malý svazek, který mluví devět jazyků s konzistentním hlasem. Pět pečených reproduktorů zůstat identity- stabilní napříč jazyky - užitečné pro vícejazyčné asistenty, vzdělávací aplikace, nebo audiokniha vypravěče s code- přepínání. Pro nulo-shot hlas klonování použití CosyVoice3, Qwen3-TTS základnanebo VoxCPM2 místo toho.
Architektura
Straka je 4-Svazek MLX ropovod: textový kodér → cross- attent dekodér → LokalTransformer codebook head → Příčinný HiFi-GAN audio kodek. Svazky sdílet dekodér hmotnosti mezi předplňte a krok vstupních bodů, aby odpovídaly proti proudu FluidInference je CoreML Rozvržení.
| Fáze | Modul | Podrobnosti |
|---|---|---|
| 1. Tokenizace | MagpieTokenizer | Per- jazyk G2P (NPP dict / byT5 bytes / pinyin / katakana), sdílený 2360-tox vocab s per- tokenizerem ofsety, vždy připojený EOS |
| 2. Textový kodér | MagpieTextEnkoder | 6 kauzálních vrstev transformátoru, d = 768, k = 3 conv FFN |
| 3. Předplňte dekodér | MagpieDecoder | 12 kauzálních vrstev s křížovou pozorností. Do kapsy KV naseje 110rámečku pečený reproduktor + BOS. |
| 4. LocalTransformer | MagpieLocalTransformer | 1vrstvý kód AR hlava, d = 256. Ukázky 8 kódů na rám postupně vzhledem k dekodéru skryté. |
| 5. Dekodér krok | MagpieDecoder | Jeden krok AR na rám až do EOS nebo 500- rám uzávěrem (~ 23 s). |
| 6. Nanokodek | MagpieNanokok | FSQ inverzní → kauzální HiFi-GAN → 22.05 kHz mono waveform. |
Jazyky a G2P
Všech devět jazyků kruhový-výlet Qwen3-ASR v SDK testMultilingualRoundTrip. Každý dostane na míru potrubí:
| Jazyk | Kód | Plynovod G2P |
|---|---|---|
| English | en | CMU NPP dict (125 k zápisy, sdružené) |
| Španělština | es | Španělské nařízení NPP (sdružené) |
| Němčina | de | Německý dekret NPP (spolčený) |
| Francouzština | fr | byT5 UTF-8 byte encoder |
| Italština | it | byT5 UTF-8 byte encoder |
| Vietnamština | vi | byT5 UTF-8 byte encoder |
| Hindština | hi | Devanagari kódové vyhledání + poslední -wins sub-vocab |
| čínština mandarínská | zh | NLTokenizer(.simplifiedChinese) word seg + Apple .mandarinToLatin + svázaný pinyin → NPP dict + #N znaménka tónu |
| japonsky | ja | CFStringTokenizer kanji čtení + NFC- konzervované dakuten + heiban markery hřiště + částice / pozdrav overrides |
Sdílený vstup 2360-Vocab ztotožňuje každý jazyk sub- tokeniser end- to- end s per- language ofsetem (zaznamenán v MagpieSubVocab). Text- Embedding přidává dva další řádky za vocab pro BOS / EOS; eos_id = 2361 je připojeno ke každé vstupní sekvenci.
Pečené reproduktory
Kontrolní bod zahrnuje pět formátů reproduktorů (110 snímků × 768 dim každý), které se používají jako předvolba každé AR dekódování. Reproduktor identity je konzistentní ve všech devíti jazycích.
| Index | Název CLI | Identita |
|---|---|---|
| 0 | sofia | Sofia (výchozí hodnota) |
| 1 | aria | Ario. |
| 2 | jason | Jasone. |
| 3 | leo | Leo. |
| 4 | john | John Van Stan |
Vzor Variantů
| Varianta | Disk | RAM (zatížení + dekódování) | HuggingFace |
|---|---|---|---|
| INT4 (přednastaveno) | ~ 247 MB | ~ 1.3 GB | aufklarer / Magpie-TTS-Multilingual-357M-MLX-4bit |
| INT8 | ~ 411 MB | ~ 1.6 GB | aufklarer / Magpie-TTS-Multilingual-357M-MLX-8bit |
Obě svazky používají MLX ploché afinové quantizace (mlx_affine_flat, group size 64) a dequantise to FP32 at load time - runtime aktivace je plná přesnost. INT4 je pro tento model zvukově nerozlišitelný od INT8; vyberte INT4, pokud nemáte skladovací rezervu.
Použití 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
Možnosti
| Možnost | Výchozí | Popis |
|---|---|---|
--magpie-variant | int4 | Varianta kvantifikace: int4 nebo int8 |
--magpie-speaker | sofia | Pečený reproduktor: sofia, aria, jason, leo, john |
--magpie-temperature | 0.6 | Teplota odběru vzorků (0 = chamtivost) |
--magpie-top-k | 80 | Filtr Top-k pro odběr vzorků |
--magpie-max-frames | 500 | Tvrdé víčko na rámech kodeku (~ 23 s) |
--magpie-min-frames | 4 | Minimální rámy před povolením EOS |
--magpie-prephonemized | vypnuto | Zacházení s vstupy jako NPP / foneme stream; přeskočit per- jazyk G2P |
--language | english | Vybere per- language tokeniser ropovod |
--stream | vypnuto | Emit AsyncStream<AudioChunk> místo jediného WAV |
--seed | — | Reprodukovatelný vzorek Gumbel |
Japonské vstupy delší než jedno slovo potřebují stochastické dekódování (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 Reference test NeMo). Greedy se zasekne na první frázi, protože heuristický heurismus heuristického heady se odchyluje od per- slova pravdy.
Hlasové klonování - nepodporováno
Straka nemá v modelu žádnou nulovou úpravu reproduktoru; pouze 5 pečená identita loď v svazku. CLI odmítá sdílené --voice-sample, --speaker, a --instruct Vlajky s napadnutelnou chybou ukazující uživatele na --magpie-speaker vlajka nebo motory, které podporují klonování (Qwen3-TTS základna, CosyVoice3, VoxCPM2).
Výkonnost (M4 Pro)
| Nastavení | Audio | Stěna | RTF |
|---|---|---|---|
| Č. šarže, INT4, hamižná, krátká výzva | 2.8 | 0.88 | 0.32 |
| Č. š., INT4, hamižný, rozsudek | 5.8 | 1.35 | 0.23 |
| Šarže, INT4, vzorkovaný, výstup 23 | 23 s | 5.6 | 0.24 |
| Streaming, INT4, odebrané | 23 s | 21.6 | 0.93 |
Latence prvních paketů v streamingu je po zatížení modelu 120 ms. Streaming RTF je vyšší, protože kodek je re- volán na full code buffer při každém vypouštění kuku (budoucí revize může cache kodek stavu).
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 backend (--engine magpie-coreml)
Vedle svazku MLX, Magpie lodě CoreML svazek (aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit, ~ 342 MB INT8). .mlmodelc balíčky - text_encoder, decoder_prefill, decoder_step, nanocodec_decoder - spuštěn na ANE / GPU; Swift- side FSQ inverzní přemění vybrané kódy na 32-dim latents kodek consumes.
# 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:
- Hybridní ropovod. V 1-vrstva LokalTransformer (skutečný kód výběrové hlavy NeMo vlaky) a 8 Audio vkládání stoly nejsou dodávány uvnitř CoreML při první syntéze CoreML motor lazy-zatížení MLX INT4 Svazek, aby poháněl obě části. ASR round-trip je bit- for- bit identický s MLX backend; rozdíl je v tom, že tento motor táhne v MLX A taky svazek. CoreML cesta pouze pro ANE- iOS Zavedení potřebuje svazek k odeslání
local_transformer/*.npy+audio_embedding_*.npya Swift Accelerate LT (sledováno sledování). - Žádný streaming.
nanocodec_decoder.mlmodelcje vysledováno na pevném okně 64-frame. Vypouštíme delší sekvence interně, ale latence prvního paketu by byla ~ 3 s, pokud bychom emitovali na hranách kuku.--streamje zamítnut s žalovatelnou chybou. - Žádný japonský tokenizer. CoreML svazek ještě neposílá JA tokenizer JSONs.
--language jas tímto motorem auto- falls - back to the MLX backend.
Reproduktor objednávání odpovídá CoreML svazku speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo - odlišná od MLX) a reproduktor interně mapuje, takže názvy CLI fungují pro oba motory.
Prováděcí poznámky
Tři chyby stojí za to vědět o tom, zda jste portování NeMo-styl vícejazyčné TTS:
- Divize podlahy FSQ - MLX-swift 's
/je skutečné rozdělení (mlx_divide); NeMo 's FSQ inverzní používá Python//PoužitíMLX.floorDivide(...)nebo každý slot FSQ dekóduje na frakční ofsety a kodek maže zvuk. - Odstupy subvolcab - NeMo 's
AggregatedTTSTokenizerKoncentuje per- jazyk vocabs s ofsety. naivní globální první-výskyt mapa vždy přistane v anglickém regionu a produkuje nesmyslný zvuk pro ostatní jazyky. - Hindština poslední-vyhrává dedup —
HindiCharsTokenizeremituje duplikát Devanagari (CHARSET překrývá PUNCT _ LIST). PythonJe to tak?{l: i for i, l in enumerate(tokens)}diktatura-comp si nechává poslední úkol; zrcadlit to, ne první-výskyt.
Všechny tři opravy jsou zdokumentovány inline v Př Swift modul.
Zdroj
- Závaží pro horní proud: nvidia / magpie_tts_multilingual_357m (NVIDIA Open Model License)
- Kodek: nvidia / nemo-nano-codec-22khz-1.89kbps-21.5fps
- Papír: Nanokodér: směrem k vysoce kvalitní Ultra rychlé řeči LLM inference (2025)
- Referenční přístav CoreML: FluidInference / Mobius
- Moduly Swift: MagpieTTS (MLX) + MagpieTTCoreML (CoreML)
- CoreML svazek: aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit
Licence
- Vzorová závaží: NVIDIA Open Model License (povoleno komerční použití; viz odkaz PDF na stránce HuggingFace)
- Swift port + sdružené NPP / pinyin slovníky: stejné jako proti NeMo (Apache 2.0 pro slovníky, NVIDIA OML pro model)