Automatische vertaling · Engels origineel

Magpie-TTS Meertalig

NVIDIA Magpie-TTS Meertalige 357M in Swift op Apple Silicon Een autoregressief multicodeboek tekst-naar-spraakmodel over NeMo's 22.05 kHz Nano-codec. Negen talen (Engels, Spaans, Duits, Frans, Italiaans, Vietnamees, Hindi, Mandarijns Chinees, Japans) met vijf gebakken luidspreker-identiteiten. Verscheept in INT4 (~247 MB) of INT8 (~411 MB). Streaming-ready, ~120 ms first-packet latency.

Wanneer moet u naar Magpie reiken?

Magpie is de juiste keuze wanneer je een enkele kleine bundel nodig hebt die negen talen spreekt met een consistente stem. De vijf gebakken luidsprekers blijven identiteitsstabiel in verschillende talen . • nuttig voor meertalige assistenten, onderwijsapps, of audioboekvertelling met code-switching. Voor het klonen van nul-shot voices gebruiken CosyVoice3, Qwen3-TTS Base, of VoxCPM2 in plaats daarvan.

Architectuur

Magpie is een 4-bundel MLX pijplijn: tekstcoder → cross-atttention decoder © LocalTransformer codebook head → Causale HiFi-GAN audiocodec. De bundels delen decodergewichten tussen prefill en stap entrypoints om de upstream FluidInferenties CoreML lay-out aan te passen.

FaseModule Gegevens
1. TokenisatieMagpieTokenizerPer taal G2P (IPA dict / byT5 bytes / pinyin / katakana), gedeeld 2360-getoken vocab met per-tokenizer offsets, altijd toegevoegd EOS
2. TekstcoderMagpieTextEncoder6 causale Transformatorlagen, d=768, k=3 conv FFN
3. Decoder voorvullingMagpieDecoder12 causale lagen met cross-atttention. Zet de 110-frame gebakken luidspreker context + BOS in de KV cache.
4. Lokale TransformerMagpieLocalTransformer 1-laags codeboek AR hoofd, d=256. Monsters van de 8 codeboeken per frame achtereenvolgens gegeven de decoder verborgen.
5. Decoder stapMagpieDecoder Eén AR stap per frame tot EOS of 500-frame cap (~23 s).
6. NanocodecMagpieNanoCodecFSQ inverse → causaal HiFi-GAN → 22.05 kHz mono waveform.

Talen en G2P

Alle negen talen round-trip door Qwen3-ASR in de SDK's testMultilingualRoundTrip. Elk krijgt een op maat gemaakte pijplijn:

Taal RubriekG2P pijpleiding
EngelsenCMU IPA dict (125 k inzendingen, gebundeld)
Spaanses Spaans IPA dict (gebundeld)
Duitsde Duitse IPA-dict (gebundeld)
FransfrbyT5 UTF-8 byte-encoder
ItaliaansitbyT5 UTF-8 byte-encoder
VietnameesvibyT5 UTF-8 byte-encoder
HindihiDevanagari codepoint lookup + last-wins sub-vocab
Mandarijns ChineeszhNLTokenizer(.simplifiedChinese) word seg + Apple .mandarinToLatin + gebundelde pinyin → IPA dick + #N toonmarkeringen
JapansjaCFStringTokenizer kanji reading + NFC-beserved dakuten + Heiban pitch markers + partikel/groetoverrides

De gedeelde 2360-entry vocab concateert de sub-tokeniser van elke taal end-to-end met een per-language offset (opgenomen in MagpieSubVocab). De tekst-enmbeding voegt twee extra rijen voorbij de vocab voor BOS / EOS; eos_id = 2361 is toegevoegd aan elke invoerreeks.

Gebakken luidsprekers

Het controlepunt insluit vijf luidsprekercontexten (110 frames × 768 dim elk) gebruikt als het voorvoegsel van elke AR decode. Speaker identiteit is consistent in alle negen talen.

IndexCLI naam Identiteit
0sofiaSofia (standaard)
1ariaAria
2jasonJason
3leoLeo
4johnJohn Van Stan

Model Varianten

VariantSchijfRAM (load + decoderen)HuggingFace
INT4 (standaard)~247 MB~1,3 GBaufklarer/Magpie-TTS-Multilingual-357M-MLX-4bit
INT8~411 MB~1,6 GBaufklarer/Magpie-TTS-Multilingual-357M-MLX-8bit

Beide bundels gebruiken MLX platte affiniteitkwantificatie (mlx_affine_flat, groepgrootte 64) en dequantiseren tot FP32 op laadtijd De activeringen van de runtime zijn volledig nauwkeurig. INT4 is hoorbaar niet te onderscheiden van INT8 voor dit model; pick INT4 tenzij u opslag te missen hebt.

CLI-gebruik

# 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

Opties

Optie Standaard Omschrijving
--magpie-variantint4Kwantiseringsvariant: int4 of int8
--magpie-speakersofiaGebakken speaker: sofia, aria, jason, leo, john
--magpie-temperature0.6 Monstertemperatuur (0 = hebzuchtig)
--magpie-top-k80Top-k-filter voor bemonstering
--magpie-max-frames500 Harde dop op codec frames (~23 s)
--magpie-min-frames4Minimumframes voor EOS toegestaan
--magpie-prephonemized uitBehandel input als IPA / fome stream; sla per taal G2P over
--languageenglishKiest de per-language tokeniser pijpleiding
--stream uitEmit AsyncStream<AudioChunk> in plaats van een enkele WAV
--seed—Afwisselbare Gumbel-bemonstering
Japanse bemonsteringspunt

Japanse ingangen langer dan een enkel woord hebben stochastische decodering (--magpie-temperature 0.6 --magpie-top-k 80 --seed 42 spiegels NeMo's referentietest nodig). Hebzucht raakt vast op de eerste zin omdat de heuristische heuristische Heiban pitch-accent afwijkt van de per-woord waarheid.

Klonen van stemmen wordt niet ondersteund

Magpie heeft geen nul-shot speaker conditionering in het model; alleen de 5 gebakken identiteit schip in de bundel. De CLI verwerpt de gedeelde --voice-sample, --speakeren --instruct vlaggen met een actieerbare fout die gebruikers wijst naar de --magpie-speaker vlag of de motoren die klonen ondersteunen (Qwen3-TTS Base, CosyVoice3, VoxCPM2).

Prestatie (M4 Pro)

InstellingenAudioMuurRTF
Charge, INT4, hebzuchtig, korte prompt2,8 s0,88 s0.32
Lot, INT4, hebzuchtig, zin5,8 s 1,35 s0.23
Charge, INT4, bemonsterd, 23 s uitvoer23 s5,6 s0.24
Streaming, INT4, bemonsterd23 s21,6 s0.93

Eerste pakket latency in streaming mode is ≈120 ms na model load. Streaming RTF is hoger omdat de codec opnieuw wordt opgeroepen op de volledige code buffer bij elke brok emissie (een toekomstige revisie kan codec status cache).

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)

Naast de MLX-bundel draagt Magpie een CoreML bundel (aufklarer/Magpie-TTS-Multilingual-357M-CoreML-8bit, 342 MB INT8). .mlmodelc pakketten text_encoder, decoder_prefill, decoder_step, nanocodec_decoder Rennen op ANE / GPU; een Swift-side FSQ inverse verandert de bemonsterde codes in de 32-Dim laat de codec na.

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

Bestelling van de luidspreker komt overeen met de CoreML bundel's speaker_info.json (0=John, 1=Sofia, 2=Aria, 3=Jason, 4=Leo Anders dan MLX), en de speaker enum kaarten intern, zodat de CLI namen werken voor beide motoren.

Uitvoeringsnota's

Drie bugs die de moeite waard zijn om te weten of je NeMo-stijl meertalig TTS porteert:

Alle drie de correcties zijn inline gedocumenteerd in de Swift module.

Bron

Licentie