Fish Audio S2 Pro / Drama 3
Cette page Soniqo documente Fish Audio S2 Pro tel qu'il est implémenté dans speech-swift / speech-core. Les liens Hugging Face sont placés après les notes d'intégration.
Les cartes et menus pointent d'abord ici; les liens vers le modèle source et les bundles restent disponibles sur cette page.
Aperçu
| Modèle | Fish Audio S2 Pro |
|---|---|
| Rôle | Experimental multilingual TTS with raw-reference cloning and style markers |
| Backend | MLX fp16 |
| Sortie | 44.1 kHz mono PCM |
| Langues | Multilingual |
| Licence | Research / non-commercial bundle; obtain Fish Audio license for commercial exposure |
| État | Programmatic runtime; CLI integration is still pending |
| Source | Fish Audio S2 Pro |
| Produit Swift | FishAudioTTS |
| CLI / runtime | Programmatic runtime today; planned speech speak --engine fish-audio |
Utilisation
L'extrait ci-dessous suit l'API ou la commande actuellement exposée par speech-swift.
import FishAudioTTS
let model = try await FishAudioTTSModel.fromPretrained()
let pcm = try await model.generate(
text: "आज मैं बहुत खुश हूँ। [excited]",
referenceAudioURL: URL(fileURLWithPath: "reference.wav"),
referenceText: "नमस्ते, यह संदर्भ आवाज है।"
)
Liens du modèle
Notes d'implémentation
- Download uses the newer explicit byte-weighted file manifest, so progress reflects real transferred bytes across the multi-GB shards.
- Control markers include [pause], [emphasis], [laughing], [excited], [angry], [whisper], [screaming], [shouting], [surprised], and [sad].
- The runtime generates 10 DAC codebook rows, then decodes generated or reference-conditioned codebooks through FishAudioCodec.
- Current tests cover bundle loading, codebook generation, codec encode/decode, Hindi cloning, and ASR round-trip gates.
Fish Audio Drama 3
La prise en charge native expérimentale de Drama 3 en MLX est disponible via FishAudioDrama3Model. Un modèle MoE de 35 milliards de paramètres à attention hybride, un décodeur audio temporel et le codec Fish DAC produisent un son mono à 44,1 kHz. Le modèle 4 bits a réussi les tests audio et de reconnaissance indépendante pour la génération à partir de texte, le clonage avec référence et la sortie CLI sur Apple M5 Pro. Les variantes 8 bits et BF16 restent à valider.
Le mode par défaut balanced libère les tampons MLX inactifs au-delà de 512 MiB entre les étapes. Le plafond partagé s’applique aussi pendant la durée de vie du modèle et préserve les budgets inférieurs de l’appelant ; aucun de ces contrôles ne limite la mémoire totale du processus. --fish-drama3-memory-mode unrestricted ou memoryOptions: .unrestricted charge les poids à l’avance et ignore le nettoyage entre étapes, mais conserve le plafond de durée de vie.
La génération de texte seul diffère le chargement de 794.4 MiB de poids de l’encodeur de référence. Le premier encodage les charge et les conserve ; gardez codec.safetensors disponible jusque-là. Les codes de référence précalculés n’ont pas besoin de l’encodeur.
Fournissez le texte complet. Le clonage nécessite un enregistrement de référence et sa transcription exacte. Les balises de locuteur 0–15 et les émotions dans le texte sont prises en charge. Le streaming PCM est disponible via generateStreaming, generateStream et --stream. Un bloc contient par défaut 3 trames du codec, soit environ 139 ms d’audio. Le découpage automatique des textes longs et l’entrée progressive de texte restent indisponibles. La limite de trames déclenche une erreur.
speech speak "Hello from Drama 3." --engine fish-drama3 --fish-drama3-bundle-dir /path/to/bundle -o hello.wav
speech speak "Hello from Drama 3." --engine fish-drama3 --stream --fish-drama3-chunk-frames 3 -o streamed.wav
speech speak "Hello in the reference voice." --engine fish-drama3 --voice-sample reference.wav --fish-drama3-reference-text "The exact reference transcript." --seed 42 -o cloned.wavimport FishAudioTTS
let model = try await FishAudioDrama3Model.fromBundle(bundleURL, memoryOptions: .balanced)
let pcm = try await model.generate(text: "Hello from Drama 3.", options: .init(seed: 42))
try await model.generateStreaming(text: "Hello from Drama 3.", options: .init(seed: 42, streamingChunkFrames: 3)) { chunk in
print(chunk.frameIndex, chunk.samples.count, chunk.isFinal)
}| Option | Valeur par défaut |
|---|---|
--fish-drama3-model-id | mlx-community/fish-audio-drama-3-4bit |
--fish-drama3-bundle-dir | — |
--fish-drama3-reference-text | — |
--fish-drama3-max-frames | 2048 |
--fish-drama3-temperature | 1 |
--fish-drama3-top-k | 30 |
--fish-drama3-top-p | 0.9 |
--voice-sample | — |
--seed | 0 |
--stream | false |
--fish-drama3-chunk-frames | 3 |
--fish-drama3-memory-mode | balanced |
Créé avec Fish Audio. Les paquets conservent la Community License et NOTICE.
Mesures en 4 bits
| Mode | Premier PCM, ms | Synthèse à chaud, s | Audio, s | RTF | RSS maximal, GiB | Empreinte physique maximale, GiB |
|---|---|---|---|---|---|---|
| Texte seul / Complet | — | 2.306 | 3.483 | 0.662 | 14.457 | 24.220 |
| Clonage avec référence / Complet | — | 2.681 | 3.204 | 0.837 | 15.064 | 24.789 |
| Texte seul / Streaming | 275.3 | 2.529 | 3.483 | 0.726 | 15.571 | 22.321 |
| Clonage avec référence / Streaming | 730.2 | 2.860 | 3.204 | 0.893 | 14.676 | 23.885 |
Apple M5 Pro, 48 GiB, compilation release, 2026-10-17. Médiane de trois appels à chaud pour générer la forme d’onde complète. Le chargement du modèle et les E/S WAV sont exclus ; le clonage inclut l’encodage de la référence à chaque appel. RTF = temps de synthèse / durée audio. ASR indépendant : 16/16 extraits, aucune erreur de mot. Utilisez l’empreinte physique pour dimensionner la mémoire unifiée. Le premier PCM correspond au premier bloc non vide ; le mode complet n’a pas de callback par bloc. Le bloc par défaut contient 139.3 ms d’audio. Le début de la lecture audible n’a pas été mesuré.