MOSS-VoiceGenerator
Compilez le SDK natif depuis les sources de main. Homebrew et les autres distributions CLI précompilées peuvent ne pas encore inclure ces moteurs.
Création de voix en MLX natif à partir du texte exact et d’une instruction vocale. PCM mono à 24 kHz, sans enregistrement de référence.
MOSS-VoiceGenerator conserve les poids de langage BF16 et le codec de synthèse FP32. Utilisez --stream pour le PCM progressif. Omettez --language et précisez la langue dans --instruct. La fin vide les seize livres de codes.
Compiler le SDK depuis les sources
Implémentation (PR #541): main
git clone --single-branch --branch main https://github.com/soniqo/speech-swift.git
cd speech-swift
make buildBundles MLX publiés: aufklarer/MOSS-VoiceGenerator-MLX-bf16
Ligne de commande
.build/release/speech speak "The little boat crossed the quiet lake before sunset." \
--engine moss-voicegenerator \
--moss-voicegenerator-model-id aufklarer/MOSS-VoiceGenerator-MLX-bf16 \
--instruct "A warm adult female voice, speaking English slowly." \
--stream --seed 42 --output moss.wavFournissez un texte, --instruct et exactement un répertoire de paquet ou un identifiant compatible. Audio de référence, voix fixes et entrées par lots ne sont pas pris en charge.
Les champs texte et instruction sont limités chacun à 32 768 octets UTF-8. Le prompt d’entrée complet, modèle inclus, doit tenir dans 4 096 tokens après rendu. Les entrées dépassant une limite sont rejetées.
API Swift
import MossVoiceGeneratorTTS
let model = try await MossVoiceGeneratorModel.fromPretrained(
modelId: "aufklarer/MOSS-VoiceGenerator-MLX-bf16")
let output = try await model.generate(
text: "The little boat crossed the quiet lake before sunset.",
instruction: "A warm adult female voice, speaking English slowly.",
options: .init(maxFrames: 150, seed: 42))
let pcm = output.samples
model.unload()Mesures sur textes courts
M5 Pro, 48 GiB, Release. Un court texte neutre par langue ; médianes de trois requêtes à chaud après la première. Chargement et vérification des poids exclus ; caches de fichiers chauds. RTF = temps écoulé / durée audio : plus bas signifie plus rapide. La mémoire physique est le maximum du processus pendant le chargement et les quatre requêtes, en Go décimaux.
| Texte | Audio (s) | Premier PCM à chaud (s) | RTF | Pic de mémoire physique (GB) |
|---|---|---|---|---|
| Anglais | 3.44 | 0.470 | 0.610 | 8.448 |
| Mandarin | 4.88 | 0.457 | 0.572 | 8.619 |
L’audio anglais de mesure présente un désaccord non résolu : Parakeet ajoute « and » à la fin, Qwen3-ASR retrouve le texte entier. Les deux résultats sont conservés.
Périmètre de validation
Le suivi des instructions n’a pas encore été noté. Les mesures sur textes courts décrivent la configuration testée ; la certification de régression de latence reste non concluante.