תרגום מכונה · המקור באנגלית
Magpie-TTS Multilingual
NVIDIA Magpie-TTS Multilingual 357M ב Swift על Apple Silicon - מודל רב-קודש אוטומטי של טקסט-to-speech מעל 22.05 kN-codec. תשע שפות (אנגלית, ספרדית, גרמנית, צרפתית, איטלקית, וייטנאמית, סינית מנדרינית, יפנית) עם חמש זהויות מאוישות. INT4 (247 MB) או INT8 (~411 MB) סטרימינג-ready - -120 חבות ראשונה.
Magpie הוא הבחירה הנכונה כאשר אתה צריך חבילה קטנה אחת שמדברת תשע שפות עם קול עקבי. חמשת הדוברים אפויים נשארים זהים-stable-stable ברחבי השפות - שימושי עבור עוזרים רב לשוניים, יישומי חינוך, או קריין עם קידוד. CosyVoice3, בסיס Qwen3-TTSאו VoxCPM2 במקום זאת.
ארכיטקטורה
מגי הוא 4-Bondle MLX צינורות: טקסט encoder , cross-attention decoder - Local Transformer Codebook Head , Causal HiFi-gan Audio Codec.Thepacks Share decoder Weights Between prefill and Step Access נקודות כדי להתאים את נקודות הכניסה של Fluidinference's של Fluid Inference. CoreML הפריסה.
| שלב השלב | מודול | פרטים |
|---|---|---|
| 1. kenisation | Magpiekenizer | G2P (IPA dict / byT5 Bytes / pinyin / katakana), משותף 2360-token vocab עם per-tokenizer offsets, תמיד-apped EOS EOS |
| 2.טקסט קודר | MagpieTextEncoder | 6 שכבות Transformer סיבתיות, d=768, k=3 conv FFN |
| 3.Dcoder prefill | מאגי-דקודר | 12 שכבות סיבתיות עם תשומת לב צלבית, רואה את ההקשר של 110-frame אפוי + BOS לתוך ה- KV cache. |
| 4. Local Transformer | Magpie Local Transformer | 1-layer Codebook AR ראש, d=256.מדגים את 8 ספרי קוד למסגרת באופן משמעותי בהתחשב הפעוט הנסתר. |
| 5. Decoder | מאגי-דקודר | שלב AR למסגרת עד ה- EOS או 500-frame Cap (~23 s). |
| 6.Nanocodec | MagpieNanocodecc | FSQ הפוך - HiFi-gan , 22.05 kHz מונופורציה. |
שפות ו G2P
כל תשע השפות עגולות דרך Qwen3-ASR ב SDK testMultilingualRoundTripכל אחד מקבל צינור מותאם:
| שפה | קוד קודקוד | G2P צינורות |
|---|---|---|
| אנגלית אנגלית | en | CMU IPA dict (125 k ערכים, ארוז) |
| ספרדית | es | ספרד IPA dict (Bredled) |
| גרמניה גרמנית | de | גרמני IPA dict (Bredled) |
| צרפתית צרפתית צרפתית | fr | byT5 UTF-8 byte encoder |
| איטלקי איטלקי איטלקי איטלקי | it | byT5 UTF-8 byte encoder |
| וייטנאם וייטנאמי | vi | byT5 UTF-8 byte encoder |
| הינד | hi | Devanagari Codepoint Lookup + האחרון-wins sub-vocab |
| מנדרינית סינית | zh | NLTokenizer(.simplifiedChinese) מילה ,Sg + Apple .mandarinToLatin + packd pinyin , IPA dict + #N |
| יפן יפנית | ja | CFStringTokenizer kanji קורא + NFC-prened dakuten + heiban מגרשי + חלקיקים / חיתוך overrides Overrides |
ה- 2360-entry vocab concatenates כל שפה תת-העתיד של שפה עם a per- Language Offset (הרשמה ב MagpieSubVocab) הטקסט-embed מוסיף שתי שורות נוספות לפני ה- Vocab עבור BOS / EOS; eos_id = 2361
יושב ראשים
המחסומים הטמיעו חמישה קונטקסטים של דוברים (110 מסגרות × 768 dim כל אחד) המשמש כקידומת של כל קוד AR.
| מדד Index Index | שם CLI | זהות זהות |
|---|---|---|
| 0 | sofia | סופיה (default) |
| 1 | aria | Aria |
| 2 | jason | ג'ייסון |
| 3 | leo | ליאו ליאו |
| 4 | john | ג'ון סטן |
מודלים
| משתנה | דיסק דיסק | RAM (load + decode) | HuggingFace |
|---|---|---|---|
| INT4 (default) | 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 |
שתי הלהקות משתמשות ב- MLX שטוח Affine קוונטיזציה (התכמת ה- ZXXQ0XZ)mlx_affine_flatגודל הקבוצה 64(ו) וגרוע מכך FP32 בזמן הטעינה - הפעלת זמן ריצה היא מדויקת לחלוטין. INT4 הוא בלתי נמנע מ INT8 עבור המודל הזה; בחר INT4 אלא אם כן יש לכם אחסון כדי לחסוך.
CLI Usage
# 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
אפשרויות אפשרויות
| אפשרות | Default | תיאור תיאור |
|---|---|---|
--magpie-variant | int4 | המונחים: int4 או או int8 |
--magpie-speaker | sofia | דובר בכר: sofia, aria, jason, leo, john |
--magpie-temperature | 0.6 | הטמפרטורה (0= חמדנית) |
--magpie-top-k | 80 | מסנן Top-k עבור דגימה |
--magpie-max-frames | 500 | כובע קשה על מסגרות קודק (~23 s) |
--magpie-min-frames | 4 | מסגרות מינימום לפני ה- EOS מותר |
--magpie-prephonemized | בחוץ | טיפול בקלט כ- IPA/טלפון זרם; לדלג על כל שפה G2P |
--language | english | לקט ספרים The per- Language tokeniser tube |
--stream | בחוץ | Emit AsyncStream<AudioChunk> במקום אחד WAV |
--seed | — | המונחים: Gumbel aampling |
קלט יפני ארוך יותר ממילה אחת צריך קידוד סטוצ'י (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 מראות מבחן ההתייחסות של NeMo) נתקע על הביטוי הראשון כי heiban-accent-accent heviates מן האמת.
מחיאות כפיים - לא נתמך
למאגי אין רמקולים אפסיים במודל; רק ספינת הזהות 5 אפוית בחבילה. --voice-sample, --speakerו --instruct דגלים עם טעות מעשית מצביעים על המשתמשים --magpie-speaker דגל או מנועים שתומכים בשטוט (בסיס Qwen3-TTS, CosyVoice3, VoxCPM2).
(M4 Pro)
| קביעת | אודיו Audio | חומה | RTF |
|---|---|---|---|
| Batch, INT4, חמדן, קצר | 2.8 | 0.88 | 0.32 |
| בינץ', INT4, חמדן, משפט | 5.8 | 1.35 | 0.23 |
| Batch, INT4, מדגם, 23 s פלט | 23 | 5.6 | 0.24 |
| סטרימינג INT4, מדגם | 23 | 21.6 | 0.93 |
שקיפות ראשונה במצב הזרמה היא סמן 120 מ"מ לאחר עומס מודל. RTF
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)
לצד חבילת MLX, Magpie Ship A CoreMLAufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit342 MB INT8 .mlmodelc חבילות – text_encoder, decoder_prefill, decoder_step, nanocodec_decoder - לרוץ על ANE / GPU; a Swift-side FSQ הפוך את הקודים המדגם לתוך 32-dim Latents the Codec צורכת.
# 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:
- צינור היברידי היום. The The The 1האותיות הקטנות של Local Transformer (The Codebook sampling Head NeMo Train) and the the 8 טבלאות של אודיו אינן נשלחות בתוך CoreML תגית: First סינתזה CoreML מנוע עצלן - The MLX INT4 החבילה כדי להניע את שני החלקים. ASR עיגול הוא bit-for-bit זהה ל MLX ההבדל הוא שהמנוע הזה מושך MLX תגית: a Pure CoreML הדרך ל-ANE-Only iOS פריסה צריכה את החבילה לספינה
local_transformer/*.npy+audio_embedding_*.npySwift Accelerate LT (המשך מעקב). - לא הזרמה.
nanocodec_decoder.mlmodelcהוא במעקב בחלון קבוע 64-frame.We נתח ארוך יותר רצפים פנימיים, אבל הראשון-packet latency יהיה -3 s אם נפלט ב- קיצוץ.--stream - No Japanese tokenizer. חבילת CoreML אינה שולחת את ג'ייסון אסימייזר JSONs עדיין.
--language jaעם מנוע זה נופל בחזרה MLX
יושב ראש ההזמנה תואם CoreML החבילה של speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo - שונה מ MLX
הערות יישום
שלושה באגים שכדאי לדעת אם אתה קונה רב לשוני TTS:
- חלוקת הרצפה FSQ MLX-Swift's
/חלוקה אמיתית (mlx_divideNMo's FSQ הפוך משתמש Python//שימושMLX.floorDivide(...)או כל חריץ FSQ מקודמת לחתיכות שבריריות והקודק מפיץ את השמע. - Sub-vocab offsets - NeMo's
AggregatedTTSTokenizerconcatenates per- Language vocabs עם מדפים. מפת תמימות גלובלית ראשונה תמיד נוחתתת באזור האנגלי ומייצרת שטות בשפות אחרות. - Hindi אחרון-wins dedup -
HindiCharsTokenizerפולטת ערכים כפולים של Devanagari (CHARSET חופפים PUNCT_LIST) Python's{l: i for i, l in enumerate(tokens)}
כל שלושת התיקונים מתועדים בקו רוחב Swiftמודול.
מקור Source
- משקלים: nvidia / magpie_tts_multilingual_357m (NVIDIA רישיון מודל פתוח)
- Codec: nvidia/nemo-nano-codec-22khz-1.89kbps-21.5fps
- נייר: נאנוקודק: לקראת דיבור מהיר LLM (2025)
- כתובת CoreML נמל: Fluidinference/mobius
- Swift: MagpieTTS (MLX) + MagpieTTSCoreML (CoreML)
- CoreMLחבילה: aufklarer/Magpie-TTS-Multilingual-357M-CoreML-8bit
רישיון רישיון רישיון
- משקל מודל: NVIDIA רישיון מודל פתוח (שימוש מסחרי מותר; ראה קישור PDF בעמוד HuggingFace
- Swift נמל + ארוז IPA / pinyin dictionaries: כמו Upstream NeMo (cApache 2.0 for the dictionaries, NVIDIA