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.

Page interne d'abord

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èleFish Audio S2 Pro
RôleExperimental multilingual TTS with raw-reference cloning and style markers
BackendMLX fp16
Sortie44.1 kHz mono PCM
LanguesMultilingual
LicenceResearch / non-commercial bundle; obtain Fish Audio license for commercial exposure
ÉtatProgrammatic runtime; CLI integration is still pending
SourceFish Audio S2 Pro
Produit SwiftFishAudioTTS
CLI / runtimeProgrammatic 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

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.wav
import 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)
}
OptionValeur par défaut
--fish-drama3-model-idmlx-community/fish-audio-drama-3-4bit
--fish-drama3-bundle-dir—
--fish-drama3-reference-text—
--fish-drama3-max-frames2048
--fish-drama3-temperature1
--fish-drama3-top-k30
--fish-drama3-top-p0.9
--voice-sample—
--seed0
--streamfalse
--fish-drama3-chunk-frames3
--fish-drama3-memory-modebalanced

Créé avec Fish Audio. Les paquets conservent la Community License et NOTICE.

Mesures en 4 bits

ModePremier PCM, msSynthèse à chaud, sAudio, sRTFRSS maximal, GiBEmpreinte physique maximale, GiB
Texte seul / Complet—2.3063.4830.66214.45724.220
Clonage avec référence / Complet—2.6813.2040.83715.06424.789
Texte seul / Streaming275.32.5293.4830.72615.57122.321
Clonage avec référence / Streaming730.22.8603.2040.89314.67623.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é.