Fish Audio S2 Pro / Drama 3
Diese Soniqo-Seite dokumentiert Fish Audio S2 Pro aus der lokalen speech-swift- / speech-core-Implementierung. Hugging-Face-Bundles sind nach den Integrationshinweisen verlinkt.
Landing-Karten und Docs-Menüs führen zuerst hierher; Quellen- und Bundle-Links bleiben auf dieser Seite verfügbar.
Überblick
| Modell | Fish Audio S2 Pro |
|---|---|
| Rolle | Experimental multilingual TTS with raw-reference cloning and style markers |
| Backend | MLX fp16 |
| Ausgabe | 44.1 kHz mono PCM |
| Sprachen | Multilingual |
| Lizenz | Research / non-commercial bundle; obtain Fish Audio license for commercial exposure |
| Status | Programmatic runtime; CLI integration is still pending |
| Quelle | Fish Audio S2 Pro |
| Swift-Produkt | FishAudioTTS |
| CLI / Laufzeit | Programmatic runtime today; planned speech speak --engine fish-audio |
Verwendung
Das folgende Snippet entspricht der aktuellen API oder dem aktuellen Befehl aus speech-swift.
import FishAudioTTS
let model = try await FishAudioTTSModel.fromPretrained()
let pcm = try await model.generate(
text: "आज मैं बहुत खुश हूँ। [excited]",
referenceAudioURL: URL(fileURLWithPath: "reference.wav"),
referenceText: "नमस्ते, यह संदर्भ आवाज है।"
)
Modelllinks
Implementierungsnotizen
- 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
Experimentelle native MLX-Unterstützung für Drama 3 steht über FishAudioDrama3Model bereit. Ein MoE-Modell mit 35 Milliarden Parametern, hybrider Aufmerksamkeit, zeitlichem Audiodecoder und Fish DAC erzeugt Mono-Audio mit 44,1 kHz. Der 4-Bit-Checkpoint bestand auf Apple M5 Pro die Audio- und unabhängigen ASR-Tests für Spracherzeugung aus Text, Stimmklonen mit Referenz und CLI-Ausgabe. 8-Bit und BF16 sind noch ungeprüft.
Der Standardmodus balanced gibt an Phasengrenzen ungenutzte MLX-Puffer oberhalb von 512 MiB frei. Zusätzlich gilt die gemeinsame Cache-Grenze während der Modelllebensdauer; niedrigere Aufruferbudgets bleiben erhalten. Beide Maßnahmen begrenzen nicht den gesamten Prozessspeicher. --fish-drama3-memory-mode unrestricted oder memoryOptions: .unrestricted lädt Gewichte vorab und überspringt die Phasenbereinigung, behält aber die Lebensdauergrenze bei.
Bei reiner Textsynthese werden 794.4 MiB Referenzencoder-Gewichte erst später geladen. Die erste Referenzkodierung lädt und behält sie; halten Sie codec.safetensors bis dahin verfügbar. Vorab berechnete Referenzcodes benötigen den Encoder nicht.
Übergeben Sie den vollständigen Text. Stimmklonen erfordert eine Referenzaufnahme und deren exaktes Transkript. Sprecher-Tags 0–15 und Emotionsangaben im Text werden unterstützt. PCM-Streaming ist über generateStreaming, generateStream und --stream verfügbar. Ein Chunk enthält standardmäßig 3 Codec-Frames, etwa 139 ms Audio. Automatische Aufteilung langer Texte und schrittweise Texteingabe werden noch nicht unterstützt. Bei Erreichen des Frame-Limits wird ein Fehler ausgelöst.
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 | Standardwert |
|---|---|
--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 |
Mit Fish Audio erstellt. Die Pakete enthalten die Community License und NOTICE.
4-Bit-Messung
| Modus | Erstes PCM, ms | Warme Synthese, s | Audio, s | RTF | Spitzen-RSS, GiB | Physischer Spitzenbedarf, GiB |
|---|---|---|---|---|---|---|
| Sprache aus Text / Vollständig | — | 2.306 | 3.483 | 0.662 | 14.457 | 24.220 |
| Stimmklonen mit Referenz / Vollständig | — | 2.681 | 3.204 | 0.837 | 15.064 | 24.789 |
| Sprache aus Text / Streaming | 275.3 | 2.529 | 3.483 | 0.726 | 15.571 | 22.321 |
| Stimmklonen mit Referenz / Streaming | 730.2 | 2.860 | 3.204 | 0.893 | 14.676 | 23.885 |
Apple M5 Pro, 48 GiB, Release-Build, 2026-10-17. Median aus drei warmen Aufrufen für die vollständige Wellenform. Modellladen und WAV-Dateizugriffe sind ausgeschlossen; beim Klonen wird die Referenz bei jedem Aufruf kodiert. RTF = Synthesezeit / Audiodauer. Unabhängige ASR: 16/16 Clips, keine Wortfehler. Für die Planung des gemeinsamen Speichers ist der physische Bedarf maßgeblich. Erstes PCM bezeichnet den ersten nichtleeren Streaming-Callback; die vollständige Erzeugung hat keine Chunk-Callbacks. Ein Standard-Chunk enthält 139.3 ms Audio. Der hörbare Wiedergabebeginn wurde nicht gemessen.