Terjemahan mesin · Versi asli bahasa Inggris

Magpie- TTS Multibahasa

NVIDIA Magpie- TTS Multibahasa 357M in Swift nyala Apple Silicon - sebuah model multi@-@ codebook autoregresif -ke-speech atas NeMo 's 22.05 KHz Nano- Codec. 9 bahasa (Inggris, Spanyol, Jerman, Prancis, Italia, Vietnam, Hindi, Mandarin Cina, Jepang) dengan 5 identitas speaker panggang. INT4 (~ 247 MB) atau INT8 (~411 MB). Streaming-siap, ~120 Ny. Latensi paket pertama.

Ketika mencapai Magpie

Magpie adalah pilihan yang tepat ketika Anda memerlukan satu bundel kecil tunggal yang berbicara sembilan bahasa dengan suara yang konsisten. Speaker lima panggang tetap stabil di seluruh bahasa - berguna untuk asisten multibahasa, aplikasi pendidikan, atau narasi audio dengan kode-switching. Untuk zero- tembakan suara cloning use CosyVoice3, Basis Qwen3-TTS, atau VoxCPM2 sebagai gantinya.

Arsitektur

Magpie adalah suatu kodek audio 4-bundel MLX: text encoder cross- attention compleder karakter voucher £LocalTransformer kepala codebook Engkau Engkau telah memutuskan. Bundles berbagi bobot audio antara prefilder dan langkah titik pencocokan upstream FluidInerence adalah CoreML.

TahapModulRincian
1.MagpieTokenizerBahasa Per- G2P (IPA dekrit / byT5 bytes / pinyin / katakana), shared 2360-token vocate dengan per- tokenizer offset, always- appended EOS
2. Pengkodean TeksMagpieTextEncoder6 lapisan Transformer causal, d = 768, k = 3 conv FFN
3.MagpieDecoder12 lapisan kausal dengan lintas-perhatian. Menbibit 110 frame speaker context + BOS ke dalam cache KV.
4. LocalTransformerMagpieLocalTransformer1-layer codebook AR head, d = 256. Sampel 8 buku kode per frame secara berurutan memberikan decoder tersembunyi.
5. Langkah decoderMagpieDecoderSatu AR langkah per frame sampai EOS atau 500 frame cap (~ 23 s).
6. NanoCodecMagpieNanoCodecFSQ terbalik HiFi- GAN 22.05 kHz mono waveform.

Bahasa dan G2P

Semua sembilan bahasa perjalanan melalui Qwen3-ASR di SDK testMultilingualRoundTripMasing-masing mendapat jalur pipa yang disesuaikan:

BahasaKodePipa G2P
InggrisenCMU IPA dekrit (125 k masukan, bundled)
SpanyolesDekrit IPA Spanyol (bundled)
JermandeDekrit IPA Jerman (bundled)
PerancisfrbyT5 UTF-8 byte encoder
ItaliaitbyT5 UTF-8 byte encoder
VietnamvibyT5 UTF-8 byte encoder
HindihiCodepoint devanagari pencarian + last- menang sub-vocab
Cina MandarinzhNLTokenizer(.simplifiedChinese) kata seg + Apple .mandarinToLatin + bundled pinyin dekrit IPA + #N penanda nada
JepangjaCFStringTokenizer kanji membaca + NFC-diawetkan dakten + heiban pitch spidol + partikel / salam overrides

Gabungan vocate entri 2360- konkatenat setiap bahasa sub- tokeniser end sampai akhir dengan ofset bahasa per- (direkam dalam MagpieSubVocab). Penggabungan teks menambahkan dua baris tambahan melewati vocab untuk BOS / EOS; eos_id = 2361 ditambahkan ke setiap urutan masukan.

Pembicara Dipanggang

Checkpoint embed lima speaker contects (110 frame × 768 dim masing-masing) digunakan sebagai awalan dari setiap decode AR. Identitas pembicara konsisten di semua sembilan bahasa.

IndeksCLI namaIdentitas
0sofiaSofia (baku)
1ariaAria
2jasonJason
3leoLeo
4johnJohn Van Stan

Variants Model

VarianDiskaRAM (load + decode)HuggingFace
INT4 (baku)~ 247 MB~ 1.3 GBaufklarer / Magpie-TTS-Multilingual-357M-MLX-4bit
INT8~ 411 MB~ 1.6 GBaufklarer / Magpie-TTS-Multilingual-357M-MLX-8bit

Kedua bundel menggunakan kuantisasi MLX (mlx_affine_flat, ukuran grup 64 dan dequantise ke FP32 pada waktu load - waktu berjalan presisi penuh. INT4 terdengar tidak dapat dibedakan dari INT8 untuk model ini; pilih INT4 kecuali Anda memiliki penyimpanan untuk cadangan.

Penggunaan 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

Opsi

OpsiBakuDeskripsi
--magpie-variantint4Varian kuantisasi: int4 atau int8
--magpie-speakersofiaSpeaker panggang: sofia, aria, jason, leo, john
--magpie-temperature0.6Temperatur Sampling (0 = serakah)
--magpie-top-k80Filter Top- k untuk sampling
--magpie-max-frames500Hard cap pada frame codec (~ 23 s)
--magpie-min-frames4Frame minimum sebelum EOS diijinkan
--magpie-prephonemizedmatiPerlakukan masukan sebagai aliran IPA / foneme; lewati bahasa G2P
--languageenglishPicks pipa per- bahasa tokeniser
--streammatiKeluarkan AsyncStream<AudioChunk> bukan WAV tunggal
--seed—Sampling Gumbel Reproduksi
Tip sampling Jepang

Masukan Jepang lebih lama dari satu kata perlu decoding stokastik (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 mirror NeMo 's reference test). Greedy terjebak pada frase pertama karena sapi pitch- aksen heuristik menyimpang dari kata-kata kebenaran.

Kloning suara - tidak didukung

Magpie tidak memiliki pengkondisian speaker dalam model, hanya 5 identitas panggang dalam bundel. --voice-sample, --speaker, dan --instruct tanda dengan kesalahan yang dapat ditindaklanjuti menunjuk pengguna pada --magpie-speaker flag atau mesin yang mendukung kloning (Basis Qwen3-TTS, CosyVoice3, VoxCPM2).

Performance (M4 Pro)

TatananAudioDindingRTF
Batch, INT4, serakah, singkat2.8 s0.88 s0.32
Batch, INT4, serakah, kalimat5.8 s1.35 s0.23
Batch, keluaran INT4, sampel, 2323 s5.6 s0.24
Streaming, INT4, sampel23 s21.6 s0.93

Latensi paket-pertama dalam mode streaming adalah GNU 120 setelah beban model. Streaming RTF lebih tinggi karena codec re- dipanggil pada kode penuh buffer di setiap potongan (suatu revisi masa depan dapat cache codec state).

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)

Di sisi samping bundel MLX, Magpie kapal sebuah bundle CoreML (aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit, ~342 MB INT8). 4 .mlmodelc paket - text_encoder, decoder_prefill, decoder_step, nanocodec_decoder - jalankan ANE / GPU; Sebuah Swiftt-side FSQ terbalik ternyata kode sampel ke 32-dim latents the codec consums.

# 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

Caviats vs --engine magpie:

Perintah suara cocok dengan bundel CoreML speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo - berbeda dari MLX, dan peta enum speaker secara internal sehingga nama CLI bekerja untuk kedua mesin.

Catatan implementasi

Tiga serangga yang layak untuk diketahui jika Anda porting NeMo- gaya multibahasa TTS:

Ketiga perbaikan yang didokumentasikan inline di Modul Swift.

Sumber

Lisensi