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.
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.
| Tahap | Modul | Rincian |
|---|---|---|
| 1. | MagpieTokenizer | Bahasa Per- G2P (IPA dekrit / byT5 bytes / pinyin / katakana), shared 2360-token vocate dengan per- tokenizer offset, always- appended EOS |
| 2. Pengkodean Teks | MagpieTextEncoder | 6 lapisan Transformer causal, d = 768, k = 3 conv FFN |
| 3. | MagpieDecoder | 12 lapisan kausal dengan lintas-perhatian. Menbibit 110 frame speaker context + BOS ke dalam cache KV. |
| 4. LocalTransformer | MagpieLocalTransformer | 1-layer codebook AR head, d = 256. Sampel 8 buku kode per frame secara berurutan memberikan decoder tersembunyi. |
| 5. Langkah decoder | MagpieDecoder | Satu AR langkah per frame sampai EOS atau 500 frame cap (~ 23 s). |
| 6. NanoCodec | MagpieNanoCodec | FSQ 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:
| Bahasa | Kode | Pipa G2P |
|---|---|---|
| Inggris | en | CMU IPA dekrit (125 k masukan, bundled) |
| Spanyol | es | Dekrit IPA Spanyol (bundled) |
| Jerman | de | Dekrit IPA Jerman (bundled) |
| Perancis | fr | byT5 UTF-8 byte encoder |
| Italia | it | byT5 UTF-8 byte encoder |
| Vietnam | vi | byT5 UTF-8 byte encoder |
| Hindi | hi | Codepoint devanagari pencarian + last- menang sub-vocab |
| Cina Mandarin | zh | NLTokenizer(.simplifiedChinese) kata seg + Apple .mandarinToLatin + bundled pinyin dekrit IPA + #N penanda nada |
| Jepang | ja | CFStringTokenizer 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.
| Indeks | CLI nama | Identitas |
|---|---|---|
| 0 | sofia | Sofia (baku) |
| 1 | aria | Aria |
| 2 | jason | Jason |
| 3 | leo | Leo |
| 4 | john | John Van Stan |
Variants Model
| Varian | Diska | RAM (load + decode) | HuggingFace |
|---|---|---|---|
| INT4 (baku) | ~ 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 |
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
| Opsi | Baku | Deskripsi |
|---|---|---|
--magpie-variant | int4 | Varian kuantisasi: int4 atau int8 |
--magpie-speaker | sofia | Speaker panggang: sofia, aria, jason, leo, john |
--magpie-temperature | 0.6 | Temperatur Sampling (0 = serakah) |
--magpie-top-k | 80 | Filter Top- k untuk sampling |
--magpie-max-frames | 500 | Hard cap pada frame codec (~ 23 s) |
--magpie-min-frames | 4 | Frame minimum sebelum EOS diijinkan |
--magpie-prephonemized | mati | Perlakukan masukan sebagai aliran IPA / foneme; lewati bahasa G2P |
--language | english | Picks pipa per- bahasa tokeniser |
--stream | mati | Keluarkan AsyncStream<AudioChunk> bukan WAV tunggal |
--seed | — | Sampling Gumbel Reproduksi |
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)
| Tatanan | Audio | Dinding | RTF |
|---|---|---|---|
| Batch, INT4, serakah, singkat | 2.8 s | 0.88 s | 0.32 |
| Batch, INT4, serakah, kalimat | 5.8 s | 1.35 s | 0.23 |
| Batch, keluaran INT4, sampel, 23 | 23 s | 5.6 s | 0.24 |
| Streaming, INT4, sampel | 23 s | 21.6 s | 0.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:
- Jalur pipa Hibrida hari ini. The 1-layer LocalTransformer (yang sebenarnya codebook sampling head NeMo trains) dan 8 audio embedding tabel tidak dikirim ke dalam CoreML Pada sintesis pertama CoreML mesin lazy- loads MLX INT4 bundel untuk mendorong kedua potong. ASR round-trip is bit-for-bit identik dengan MLX backend; perbedaan adalah bahwa mesin ini menarik MLX bundel juga. CoreML jalur hanya untuk ANE- iOS penyebaran membutuhkan bundel ke kapal
local_transformer/*.npy+audio_embedding_*.npydan Swift Akselerasi LT (dilacak mengikuti). - Tak ada streaming.
nanocodec_decoder.mlmodelcditelusuri pada tetap 64-frame tinggi. kita potong lebih panjang urutan internal, tetapi latensi-paket pertama akan ~3 s jika kita dikeluarkan pada batas-batas potong.--stream(Dipalingkan) dijauhkan (daripadanya) dari Nabi saw. dan Alquran; maksudnya dipalingkan dari beriman kepadanya (orang yang dipalingkan) dari jalan petunjuk, menurut ilmu Allah swt. - Tidak ada tokenizer Jepang. Bundel CoreML belum bisa mengirimkan JA tokenizer JSONs.
--language jadengan mesin ini auto- falls -kembali ke backend MLX.
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:
- Divisi lantai FSQ - MLX- Swift
/adalah divisi yang benar (mlx_divide); FSQ versi NeMo menggunakan Python//GunakanMLX.floorDivide(...)atau setiap FSQ slot decodes ke fractional offset dan codec smears audio. - Sub- vocab offset - NeMo
AggregatedTTSTokenizerpeta pertemuan pertama global yang naif selalu mendarat di wilayah Inggris dan menghasilkan audio omong kosong untuk bahasa lain. - Hindi last- menang dedup —
HindiCharsTokenizeremits duplikasi masukan Devanagari (CHARSET overlap PUNCT _ LIST). Python{l: i for i, l in enumerate(tokens)}diktator-comp menyimpan tugas terakhir; cermin itu, bukan pertama-terjadi.
Ketiga perbaikan yang didokumentasikan inline di Modul Swift.
Sumber
- Bobot upstream: nvidia / magpie_tts_multilingual_357m (Lisensi NVIDIA Open Model)
- Kodek: nvidia / nemo-nano-codec-22khz-1.89kbps-21.5fps
- Kertas: NanoCodec: Menuju Konferensi Cepat Kualitas Tinggi Ultra Pidato LLM (2025)
- Referensi port CoreML: FluidInference / mobius
- Modul Swift: MagpieTTS (MLX) + MagpieTTSCoreML (CoreML)
- CoreML bundle: aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit
Lisensi
- Bobot model: Lisensi Open Model NVIDIA (penggunaan komersial diijinkan; lihat PDF terkait pada halaman HuggingFace)
- Swift Port + bundled IPA / pinyin diksionaries: sama seperti upstream NeMo (Apache 2.0 (Bagi orang-orang yang melampaui batas) karena itu mereka tidak akan dapat menyelamatkan diri daripadanya (sebagai tempat kembali) bagi mereka, karena mereka akan dimasukkan ke dalamnya. NVIDIA OML untuk model)