Tłumaczenie automatyczne · Oryginał angielski

Magpie- TTS Wielojęzyczny

NVIDIA Magpie- TTS Wielojęzyczny 357M w Swift na Apple Silicon - autoregresywny wielo-kodebook text- to- mowy model nad NeMo 22.05 kHz Nano- kodec. Dziewięć języków (angielski, hiszpański, niemiecki, francuski, włoski, wietnamski, hindi, mandaryński chiński, japoński) z pięciu pieczonych tożsamości głośnika. INT4 (~ 247 MB) INT8 (~411 MB). Streaming- ready, ~120 ms first-package latency.

Kiedy sięgnąć po Srokę

Sroka jest właściwym wyborem, gdy potrzebujesz jednego małego pakietu, który mówi dziewięć języków o konsekwentnym głosie. Pięć pieczonych głośników pozostają identyfikacyjne- stabilne w różnych językach - przydatne dla wielojęzycznych asystentów, aplikacji edukacyjnych, lub audiobook narracji z kode- przełączanie. Dla zeroshot klonowania głosu CosyVoice3, Podstawa Qwen3-TTSlub VoxCPM2 Zamiast tego.

Architektura

Magpie jest 4- pęczek MLX rurociąg: tekst encoder → cross-attention dekoder → LocalTransformer Codebook głowę → Codec audio Causage HiFi- GAN. Pakiety akcji wagi dekodera między prefill i punktów wejścia krok, aby dopasować w górę FluidInference 's CoreML układ.

EtapModułSzczegóły
1. TokenizacjaMagpieTokenizerPer- language G2P (IPA dict / byT5 bytes / pinyin / katakana), wspólne słownictwo 2360- token z offsetami pertokenizera, zawsze dołączone EOS
2. Kodowanie tekstuMagpieTextEncoder6 warstw transformatora, d = 768, k = 3 conv FFN
3. Wstępne wypełnienie dekoderaMagpieDecode12 warstw przyczynowo-skutkowych z krzyżową uwagą. Nasienie 110- frame pieczony kontekst głośnika + BOS do pamięci podręcznej KV.
4. LocalTransformerMagpieLocalTransformer1-warstwa kodebook AR head, d = 256. Próbki 8 kodebooków na ramkę kolejno pod warunkiem dekodera ukryte.
5. Krok dekoderaMagpieDecodeJeden krok AR na ramę do czasu EOS lub 500- ramowy kaptur (~ 23 s).
6. NanoCodecMagpieNanoCodecFSQ odwrotność → przyczynowość HiFi- GAN → 22.05 kHz mono fala.

Języki i G2P

Wszystkie dziewięć języków runda-wycieczka przez Qwen3-ASR w SDK testMultilingualRoundTripKażdy z nich otrzymuje gazociąg:

JęzykKodGazociąg G2P
AngielskienDecyzja w sprawie IPA w ramach unii rynków kapitałowych (125 tysięcy wpisów, w pakiecie)
HiszpańskiesHiszpański wyrok w sprawie IPA (w pakiecie)
NiemieckideNiemiecki wyrok w sprawie IPA (w pakiecie)
FrancuskifrbyT5 UTF-8 bajt enkoder
WłoskiitbyT5 UTF-8 bajt enkoder
WietnamskivibyT5 UTF-8 bajt enkoder
HindihiDevanagari codepoint lookup + last-wins sub- vocab
Chinczyk mandaryńskizhNLTokenizer(.simplifiedChinese) słowo seg + Apple .mandarinToLatin + połączone pinyin → IPA Dyct + #N Znaczniki tonu
JapońskijaCFStringTokenizer odczyt kanji + zachowane przez NFC- dakuten + znaczniki skoku jałowca + nadjazdy cząstek / powitania

Współdzielone słownictwo 2360-contratenates każdego języka sub- tokeniser end-to- end z offsetem perjęzycznym (rejestrowane w MagpieSubVocab). Text- osadzanie dodaje dwa dodatkowe rzędy obok słownika dla BOS / EOS; eos_id = 2361 jest załączony do każdej sekwencji wejściowej.

Pieczone głośniki

Punkt kontrolny zawiera pięć kontekstów głośników (110 klatek × 768 dim każdy) używanych jako prefiks każdego dekodu AR. Tożsamość głośnika jest spójna we wszystkich dziewięciu językach.

IndeksNazwa CLITożsamość
0sofiaSofia (domyślnie)
1ariaAria
2jasonJason
3leoLeo.
4johnJohn Van Stan

Warianty modelu

WariantDyskRAM (ładunek + dekoder)HuggingFace
INT4 (domyślnie)- 247 MB- 1,3 GBaufklarer / Magpie-TTS-Multilingual-357M-MLX-4bit
INT8- 411 MB- 1,6 GBaufklarer / Magpie-TTS-Multilingual-357M-MLX-8bit

Obie wiązki wykorzystują kwantyfikację płaskich lawin MLX (mlx_affine_flat, rozmiar grupy 64) i dequantise do FP32 w czasie obciążenia - aktywacje runtime są pełne precyzji. INT4 jest słyszalnie nie do odróżnienia od INT8 dla tego modelu; wybierz INT4, chyba że masz zapasowe przechowywanie.

Zastosowanie 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

Opcje

OpcjaDomyślneOpis
--magpie-variantint4Wariant ilościowy: int4 lub int8
--magpie-speakersofiaGłośnik pieczony: sofia, aria, jason, leo, john
--magpie-temperature0.6Temperatura pobierania próbek (0 = chciwość)
--magpie-top-k80Filtr Top- k do pobierania próbek
--magpie-max-frames500Twarde wieczko na ramie kodekowe (~ 23 s)
--magpie-min-frames4Minimalne ramy przed dopuszczeniem EOS
--magpie-prephonemizedwyłączonyTreat input as IPA / phoneme stream; skip per- language G2P
--languageenglishWybiera gazociąg do tokenizera
--streamwyłączonyEmit AsyncStream<AudioChunk> zamiast pojedynczego WAV
--seed—Odtwarzalne pobieranie próbek Gumbel
Japoński końcówka do pobierania próbek

Japońskie wejścia dłuższe niż jedno słowo potrzebują stochastycznego dekodowania (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 lusterka NeMo 's reference test). Greedy utknął na pierwszym zdaniu, ponieważ heurystyczny heurystyk Heiban-akcent odbiega od per- słowo prawdy.

Klonowanie głosu - nieobsługiwane

Magpie nie ma zero-shot głośnik kondycjonowanie w modelu; tylko 5 pieczone tożsamości statku w pakiecie. CLI odrzuca wspólne --voice-sample, --speakeroraz --instruct flagi z możliwym do podjęcia błędem wskazując użytkowników na --magpie-speaker flaga lub silniki, które obsługują klonowanie (Podstawa Qwen3-TTS, CosyVoice3, VoxCPM2).

Wydajność (M4 Pro)

UstawienieAudioŚcianaRTF
Nr serii, INT4, chciwy, krótki czas2.8 s0.88 s0.32
Nr serii, INT4, chciwy, zdanie5.8 s1,35 s0.23
Seria, INT4, pobrana próbka, wyjście 2323 s5.6 s0.24
Streaming, INT4, pobrane próbki23 s21.6 s0.93

W trybie streamingu latencja pakietów first- package jest po załadowaniu modelu X120 ms. Streaming RTF jest wyższy, ponieważ kodek jest ponownie wywoływany na pełnym buforze kodowym przy każdej emisji fragmentów (przyszła wersja może buforować stan kodeka).

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
}

Wtyczka CoreML (--engine magpie-coreml)

Oprócz pakietu MLX, Magpie wysyła pakiet CoreML (aufklarer / Magpie-TTS-Multilingual-357M-CoreML-8bit342 MB INT8). .mlmodelc opakowania - text_encoder, decoder_prefill, decoder_step, nanocodec_decoder - uruchomiony na ANE / GPU; odwrotny Swift- side FSQ zamienia kody z próbki w 32- dim latenty kodekowe.

# 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:

Zamówienie głośnika pasuje do pakietu CoreML speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo - różni się od MLX), a głośnik enum mapuje wewnętrznie tak, że nazwy CLI działają dla obu silników.

Notatki wykonawcze

Trzy błędy warto wiedzieć, czy jesteś w stylu NeMo- wielojęzyczny TTS:

Wszystkie trzy poprawki są udokumentowane inline w Moduł Swift.

Źródło

Licencja