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.

Hvornår skal vi nå Magpie?

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.

FaseModulDetaljer
1. TokeniseringMagpieTokenizerPer- language G2P (IPA dict / byT5 bytes / pinyin / katakana), delt 2360- token vocab med per- toxizer offset, always - vedhæftet EOS
2. TekstindkoderMagpieTextEncoder6 kausal transformerlag, d = 768, k = 3 conv FFN
3. DekoderpræfillMagpieDecoder12 Årsager med krydsopmærksomhed. Frø 110- frame bagt højttaler kontekst + BOS i KV cache.
4. LocalTransformerMagpieLocalTransformer1-lag kodebog AR hoved, d = 256. Prøver de 8 kodebøger per ramme sekventielt givet dekoder skjult.
5. DekodertrinMagpieDecoderEt AR trin per ramme indtil EOS eller 500- frame cap (~ 23 s).
6. NanoCodecMagpieNanoCodecFSQ 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:

SprogKodeG2P rørledning
EngelskenCMU IPA dict (125 k indgange, bundtet)
SpanskesSpansk IPA-kode (bundtet)
TyskdeTysk IPA-kode (bundtet)
FranskfrbyT5 UTF-8 byte encoder
ItalienskitbyT5 UTF-8 byte encoder
vietnamesiskvibyT5 UTF-8 byte encoder
HindihiDevanagari codepoint lookup + last- wins sub- vocab
MandarinzhNLTokenizer(.simplifiedChinese) ordsegl + Apple .mandarinToLatin + bundtet pinyin → IPA dict + #N tonemarkeringer
JapanskjaCFStringTokenizer 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.

IndeksCLI-navnIdentitet
0sofiaSofia (standard)
1ariaAriaCity in Italy
2jasonJason.
3leoLeo.
4johnJohn Van Stan

Model Variants

VariantDiskRAM (load + decode)HuggingFace
INT4 (standard)~ 247 MB~ 1,3 GBaufklarer / Magpie-TTS-Multilingual-357M-MLX-4bit
INT8~ 411 MB~ 1,6 GBaufklarer / 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

ValgmulighedStandardVarebeskrivelse
--magpie-variantint4Kvantificeringsvariant: int4 eller int8
--magpie-speakersofiaBages højttaler: sofia, aria, jason, leo, john
--magpie-temperature0.6Prøvetagningstemperatur (0 = grådig)
--magpie-top-k80Top- k filter til prøvetagning
--magpie-max-frames500Hårdt låg på codec rammer (~ 23 s)
--magpie-min-frames4Minimumsrammer før EOS tilladt
--magpie-prephonemizedafBehandl input som IPA / phoneme stream; spring per- sprog G2P
--languageenglishVælger per- sprog conduizer pipeline
--streamafEmit AsyncStream<AudioChunk> i stedet for en enkelt WAV
--seed—Reproducerbar Gumbel-prøveudtagning
Japansk prøvetagningstidspunkt

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)

IndstillingLydMurRTF
Batch, INT4, grådig, kort prompt2.8 s0.88 s0.32
Batch, INT4, grådig, sætning5.8 s1.35 s0.23
Batch INT4, der udtages prøver af 23 s output23 s5.6 s0.24
Streaming, INT4, prøve23 s21.6 s0.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:

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:

Alle tre rettelser er dokumenteret inline i Swift- modul.

Kilde

Licens