Maskinoversættelse · Engelsk original
Magpie- TTS Flersproget
NVIDIA Magpie- TTS Flersproget 357M i Swift på Apple Silicon - en autoregressiv multi- codebook lære- to- tale model over NeMo 's 22.05 kHz Nano- Codec. Ni sprog (engelsk, spansk, tysk, fransk, italiensk, vietnamesisk, hindi, mandarin kinesisk, japansk) med fem bagte højttaleridentiteter. INT4 (~ 247 MB) eller INT8 (~411 MB). Streaming- klar, ~120 ms first-pack latency.
Magpie er det rigtige valg, når du har brug for et enkelt lille bundt, der taler ni sprog med en konsekvent stemme. De fem bagte højttalere forbliver identity- stabile på tværs af sprog - nyttige for flersprogede assistenter, uddannelse apps, eller audiobook fortælling med code-switch. CosyVoice3, Qwen3-TTS Base, eller VoxCPM2 I stedet.
Arkitektur
Magpie er en 4- bundle MLX rørledning: tekst encoder → cross-opmærksomhed dekoder → LocalTransformer codebook hoved → Caausal HiFi- GAN audio codec. bundterne deler dekoder vægte mellem prefill og trin indgangspunkter til at matche opstrøms FluidInferens CoreML layout.
| Fase | Modul | Detaljer |
|---|---|---|
| 1. Tokenisering | MagpieTokenizer | Per- language G2P (IPA dict / byT5 bytes / pinyin / katakana), delt 2360- token vocab med per- toxizer offset, always - vedhæftet EOS |
| 2. Tekstindkoder | MagpieTextEncoder | 6 kausal transformerlag, d = 768, k = 3 conv FFN |
| 3. Dekoderpræfill | MagpieDecoder | 12 Årsager med krydsopmærksomhed. Frø 110- frame bagt højttaler kontekst + BOS i KV cache. |
| 4. LocalTransformer | MagpieLocalTransformer | 1-lag kodebog AR hoved, d = 256. Prøver de 8 kodebøger per ramme sekventielt givet dekoder skjult. |
| 5. Dekodertrin | MagpieDecoder | Et AR trin per ramme indtil EOS eller 500- frame cap (~ 23 s). |
| 6. NanoCodec | MagpieNanoCodec | FSQ inverse → causal HiFi- GAN → 22.05 kHz mono waveform. |
Sprog og G2P
Alle ni sprog rund- tur gennem Qwen3-ASR i SDK 's testMultilingualRoundTrip. Hver får en skræddersyet rørledning:
| Sprog | Kode | G2P rørledning |
|---|---|---|
| Engelsk | en | CMU IPA dict (125 k indgange, bundtet) |
| Spansk | es | Spansk IPA-kode (bundtet) |
| Tysk | de | Tysk IPA-kode (bundtet) |
| Fransk | fr | byT5 UTF-8 byte encoder |
| Italiensk | it | byT5 UTF-8 byte encoder |
| vietnamesisk | vi | byT5 UTF-8 byte encoder |
| Hindi | hi | Devanagari codepoint lookup + last- wins sub- vocab |
| Mandarin | zh | NLTokenizer(.simplifiedChinese) ordsegl + Apple .mandarinToLatin + bundtet pinyin → IPA dict + #N tonemarkeringer |
| Japansk | ja | CFStringTokenizer kanji læsning + NFC-konserveret dakuten + heiban pitch markører + partikel / hilsen tilsidesætter |
Den delte 2360- entry vocab konkaterer hvert sprogs sub-confizer end-to-end med en per- sprog offset (registreret i MagpieSubVocab). Tekstindlejringen tilføjer to ekstra rækker forbi vocab for BOS / EOS; eos_id = 2361 er vedlagt hver inputsekvens.
Bagte højttalere
Kontrolpunktet indeholder fem højttalersammenhænge (110 billeder × 768 dim hver), der anvendes som præfiks for hver AR-dekodning. Talerens identitet er ensartet på tværs af alle ni sprog.
| Indeks | CLI-navn | Identitet |
|---|---|---|
| 0 | sofia | Sofia (standard) |
| 1 | aria | AriaCity in Italy |
| 2 | jason | Jason. |
| 3 | leo | Leo. |
| 4 | john | John Van Stan |
Model Variants
| Variant | Disk | RAM (load + decode) | HuggingFace |
|---|---|---|---|
| INT4 (standard) | ~ 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 |
Begge bundter bruger MLX flad affinemængde (mlx_affine_flat, gruppe størrelse 64) og dequantise til FP32 ved belastning tid - runtime aktiveringer er fuld præcision. INT4 er hørbart uadskilleligt fra INT8 for denne model; pick INT4 medmindre du har opbevaring til overs.
CLI-brug
# 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
Indstillinger
| Valgmulighed | Standard | Varebeskrivelse |
|---|---|---|
--magpie-variant | int4 | Kvantificeringsvariant: int4 eller int8 |
--magpie-speaker | sofia | Bages højttaler: sofia, aria, jason, leo, john |
--magpie-temperature | 0.6 | Prøvetagningstemperatur (0 = grådig) |
--magpie-top-k | 80 | Top- k filter til prøvetagning |
--magpie-max-frames | 500 | Hårdt låg på codec rammer (~ 23 s) |
--magpie-min-frames | 4 | Minimumsrammer før EOS tilladt |
--magpie-prephonemized | af | Behandl input som IPA / phoneme stream; spring per- sprog G2P |
--language | english | Vælger per- sprog conduizer pipeline |
--stream | af | Emit AsyncStream<AudioChunk> i stedet for en enkelt WAV |
--seed | — | Reproducerbar Gumbel-prøveudtagning |
Japanske indgange længere end et enkelt ord har brug for stokastisk dekodning (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 Spejle NeMo reference test). Greedy bliver fanget på den første sætning, fordi heiban pitch- accent heuristisk afviger fra per- ord sandhed.
Stemmekloning - ikke understøttet
Magpie har ingen zero-shot højttaler konditionering i modellen; kun 5 bagte identiteter skib i bunken. CLI afviser den delte --voice-sample, --speaker, og --instruct flag med en handlingsdygtig fejl, der peger brugere på --magpie-speaker flag eller motorer, der understøtter kloning (Qwen3-TTS Base, CosyVoice3, VoxCPM2).
Performance (M4 Pro)
| Indstilling | Lyd | Mur | RTF |
|---|---|---|---|
| Batch, INT4, grådig, kort prompt | 2.8 s | 0.88 s | 0.32 |
| Batch, INT4, grådig, sætning | 5.8 s | 1.35 s | 0.23 |
| Batch INT4, der udtages prøver af 23 s output | 23 s | 5.6 s | 0.24 |
| Streaming, INT4, prøve | 23 s | 21.6 s | 0.93 |
First- packaglatency i streaming-tilstand er szág 120 ms efter modelbelastning. Streaming RTF er højere, fordi codec er gen- påberåbes på den fulde kode buffer ved hver lunk emission (en fremtidig revision kan cache codec tilstand).
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-motor (--engine magpie-coreml)
Ved siden af MLX bundt, Magpie skibe en CoreML bundle (aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit, ~ 342 MB INT8). .mlmodelc pakker - text_encoder, decoder_prefill, decoder_step, nanocodec_decoder - køre på ANE / GPU; en Swift- side FSQ inverse forvandler de udtagne koder til 32- dim latente codec forbruges.
# 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:
- Hybridrørledningen i dag. Den 1-lag LocalTransformer (den faktiske codebook samplinghoved NeMo tog) og 8 lydindlejringsborde ikke sendes ind i CoreML bundt. Ved første syntese af CoreML motor lazy- belastes MLX INT4 bundt til at drive begge dele. ASR rundtur er bit- for- bit identisk med den MLX Bagenden; forskellen er, at denne motor trækker i MLX bundt også. En ren CoreML sti til kun ANE iOS deployering har brug for bunken til at sende
local_transformer/*.npy+audio_embedding_*.npyog en Swift Accelerate LT (sporet opfølgning). - Ingen streaming.
nanocodec_decoder.mlmodelcer sporet på en fast 64- frame vindue. Vi chunk længere sekvenser internt, men first-pack latency ville være ~ 3 s, hvis vi udsendte ved chunk grænser.--streamafvises med en fejl, der kan anfægtes. - Ingen japansk ballademager. CoreML bundtet sender ikke JA Schedrizer JSONs endnu.
--language jamed denne motor automatisk-falls-tilbage til MLX motor.
Speaker bestilling matcher CoreML bundtet speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo - forskellig fra MLX), og højttaleren enum kort internt, så CLI navne arbejde for begge motorer.
Gennemførelsesnoter
Tre fejl værd at vide om hvis du porterer NeMo- stil flersproget TTS:
- FSQ-gulvinddeling - MLX- hurtig 's
/er sand opdeling (mlx_divide); NeMo 's FSQ inverse bruger Python//. BrugMLX.floorDivide(...)eller hver FSQ slot dekoder til fraktionelle offset og codec smører lyden. - Sub- vocab- offsets - NeMos
AggregatedTTSTokenizerkonkatenerer per- sprog vocabs med offset. En naiv global første-forekomst kort altid lander i den engelske region og producerer nonsens lyd til andre sprog. - Hindis sidste gevinst dedup —
HindiCharsTokenizerudsender duplikerede Devanagari-indgange (CHARSET overlapper PUNCT _ LIST). Python 's{l: i for i, l in enumerate(tokens)}dikter- comp holder den sidste opgave; spejl, der, ikke første-forekomst.
Alle tre rettelser er dokumenteret inline i Swift- modul.
Kilde
- Vægtlodder for opstrøms-tilstand: nvidia / magpie_tts_multilingual_357m (NVIDIA Open Model Licens)
- Codec: nvidia / nemo-nano-codec-22khz-1.89kbps-21.5fps
- Papir: NanoCodec: Mod høj kvalitet Ultra Fast Tale LLM Inferens (2025)
- Reference CoreML port: FluidInference / mobius
- Swift moduler: MagpietTTS (MLX) + MagpieTTSCoreML (CoreML)
- CoreML bundt: aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit
Licens
- Modelvægte: NVIDIA Open Model License (tilladt til erhvervsmæssig brug; se tilknyttet PDF på HuggingFace siden)
- Swift port + bundtet IPA / pinyin ordbøger: samme som opstrøms NeMo (Apache 2.0 for ordbøger, NVIDIA OML for modellen)