Maskinoversettelse · Engelsk original

Magpie-TTS Flerspråklig

NVIDIA Magpie-TTS Multilingual 357M i Swift på Apple Silicon — en autoregressiv multi-kodebok tekst-til-speech-modell over NeMos 22.05 kHz Nano-Codec. Ni språk (engelsk, spansk, fransk, italiensk, italiensk, vietnamesisk, hindi, mandarin kinesisk, japansk) med fem bakte høyttaleridentiteter. Sendt quantized på INT4 (~247 MB) eller INT8 (~411 MB). Streaming-ready, ~120 ms første-packet latens.

Når å nå til Magpie

Magpie er det riktige valget når du trenger en enkelt liten pakke som snakker ni språk med en konsistent stemme. De fem bakte høyttalerne forblir identitetsstabile på tvers av språk - nyttig for flerspråklige assistenter, utdanningsprogrammer eller audiobook-narrasjon med kode-switching. For null-shot stemmekloning bruk CosyVoice3, Qwen3-TTS Base, eller VoxCPM2 i stedet.

Arkitektur

Magpie er en 4-bunden MLX rørledning: tekstkoder → krysssettende dekoder → LocalTransformer kodebokhode → Causal HiFi-GAN lydkodek. Buntene deler dekoder vekter mellom forhåndsfylling og trinnoppføringspunkter for å matche oppstrøms FluidInferences CoreML layout.

StageModul Detaljer
1. TokeniseringMagpieTokenizerPer-språk G2P (IPA dict / byT5 bytes / pinyin / katakana), delt 2360-token vokab med per-tokenizer offsets, alltid append EOS
2. TekstkoderMagpieTextEncoder6 Årsak Transformer lag, d=768, k=3 konv FFN
3. Destillert prefyllMagpieDecoder12 årsakslag med tverrvarsel. Frø 110-rammebakt høyttaler sammenheng + BOS inn i KV-bufferen.
4. LokaltransformerMagpieLocalTransformer 1-lags kodebok AR-hode, d=256. Prøver 8 kodebøker per ramme sekvensielt gitt dekoderen skjult.
5. DehydreringstrinnMagpieDecoder Et AR-trinn per ramme til EOS eller 500-trinnshette (~23 s).
6. NanoCodecMagpieNanoCodecFSQ invers → årsak HiFi-GAN → 22.05 kHz mono bølgeform.

Språk og G2P

Alle ni språk rundt gjennom Qwen3-ASR i SDK's testMultilingualRoundTrip. Hver får en skreddersydd rørledning:

SpråkKodeG2P rørledning
EngelskenCMU IPA dikt (125 k oppføringer, pakket)
Spanskes Spansk IPA dikt (bundet)
Tyskde Tysk IPA dikt (bundet)
franskfrbyT5 UTF-8 bytekoder
ItalienskitbyT5 UTF-8 bytekoder
VietnamesiskvibyT5 UTF-8 bytekoder
HindihiDevanagari kodepunkt oppslag + siste-wins sub-vocab
Mandarin kinesiskzhNLTokenizer(.simplifiedChinese) ord seg + Apple .mandarinToLatin + bundet pinyin → IPA dikt + #N tone markører
JapanskjaCFStringTokenizer kanji lesing + NFC-bevart dakuten + Heiban pitchmarkører + partikkel/utgrening overstyr

Den delte 2360-entry vocab konkatenerer hvert språks undertokeniser end-to-end med en per-language offset (innspilt i MagpieSubVocab). Tekstinnbyggingen legger til to ekstra rader forbi vocab for BOS / EOS; eos_id = 2361 er lagt til i hver inngangssekvens.

Baket høyttalere

Checkpointet inneslutter fem høyttalerkontekster (110 rammer × 768 dim hver) som brukes som prefiks for hver AR-dekode. Høyttaleridentitet er konsistent på alle ni språk.

IndeksCLI-navnIdentifikasjon
0sofiaSofia (standard)
1ariaAria
2jasonJason
3leoLeo
4johnJohn Van Stan

Modell Varianter

VariantDiskenRAM (last + dekode)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 pakkene bruker MLX flat affinisering (mlx_affine_flat, gruppestørrelse 64) og dekvantisere til FP32 på lastetid — kjøretid aktiveringer er full presisjon. INT4 er lydløst uunngåelig fra INT8 for denne modellen; velg INT4 med mindre du har lagring å spare.

CLI bruk

# 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

Alternativer

MulighetStandard Beskrivelse
--magpie-variantint4Kvantitiseringsvariant: int4 eller int8
--magpie-speakersofiaBaket høyttaler: sofia, aria, jason, leo, john
--magpie-temperature0.6 Prøvetemperatur (0 = grådig)
--magpie-top-k80Top-k-filter for prøvetaking
--magpie-max-frames500Hard cap på kodek rammer (~23 s)
--magpie-min-frames4Minimumsrammer før EOS tillates
--magpie-prephonemized avBehandle inngang som IPA / fonemstrøm; hoppe over per-språk G2P
--languageenglish Velger per-språk tokeniser-rørledningen
--stream avEmit AsyncStream<AudioChunk> i stedet for en enkelt WAV
--seed—Reproduserbar Gumbel prøvetaking
Japansk prøvespilling tip

Japanske innganger lengre enn et enkelt ord trenger stokastisk dekoding (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 speiler NeMos referansetest). Greedy blir fast på den første frasen fordi den heiban pitch-accent heuristic avviker fra per-word sannhet.

Stemmekloning - ikke støttet

Magpie har ingen null-shot høyttaler conditioning i modellen; bare 5 bakte identiteter skip i bundten. CLI avviser den delte --voice-sample, --speaker, og --instruct flagg med en handlingsbar feil som peker brukere på --magpie-speaker flagg eller motorer som støtter kloning (Qwen3-TTS Base, CosyVoice3, VoxCPM2).

Ytelse (M4 Pro)

InnstillingAudio VeggRTF
Batch, INT4, grådig, kort spørring2.8 s0.88 s0.32
Batch, INT4, grådig, setning 5.8 s1.35 s0.23
Batch, INT4, sample, 23 s utgang23 s5,6 s0.24
Streaming, INT4, prøvespilling23 s21,6 s0.93

Første pakke latens i streaming-modus er -120 ms etter modellbelastning. Strømming RTF er høyere fordi kodeken gjeninnkalles på full kodebuffer ved hver biteutslipp (en fremtidig revisjon 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)

I tillegg til MLX bunten, sender Magpie en CoreML pakke (aufklarer/Magpie-TTS-Multilingual-357M-CoreML-8bit, ~342 MB INT8). Fire .mlmodelc pakker — text_encoder, decoder_prefill, decoder_step, nanocodec_decoder - kjører på ANE / GPU; en Swift-side FSQ invers forvandler prøvekoder til 32-dim latenter codecen bruker.

# 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

Kaveater vs --engine magpie:

Høyttaler bestilling samsvarer med CoreML buntens speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo - forskjellig fra MLX), og høyttalerens enum-kart internt slik at CLI-navnene fungerer for begge motorene.

Implementasjonsnotater

Tre feil verdt å vite om hvis du porterer NeMo-stil flerspråklig TTS:

Alle tre rettelser dokumenteres i Swift modul.

Kilde

Lisens