Fish Audio S2 Pro / Drama 3
Esta página de Soniqo documenta Fish Audio S2 Pro tal como está implementado en speech-swift / speech-core. Los enlaces a Hugging Face aparecen debajo de las notas de integración.
Las tarjetas y menús apuntan primero aquí; los enlaces al modelo fuente y a los bundles siguen disponibles en esta página.
Resumen
| Modelo | Fish Audio S2 Pro |
|---|---|
| Rol | Experimental multilingual TTS with raw-reference cloning and style markers |
| Backend | MLX fp16 |
| Salida | 44.1 kHz mono PCM |
| Idiomas | Multilingual |
| Licencia | Research / non-commercial bundle; obtain Fish Audio license for commercial exposure |
| Estado | Programmatic runtime; CLI integration is still pending |
| Fuente | Fish Audio S2 Pro |
| Producto Swift | FishAudioTTS |
| CLI / runtime | Programmatic runtime today; planned speech speak --engine fish-audio |
Uso
El fragmento siguiente refleja la API o el comando actual expuesto por speech-swift.
import FishAudioTTS
let model = try await FishAudioTTSModel.fromPretrained()
let pcm = try await model.generate(
text: "आज मैं बहुत खुश हूँ। [excited]",
referenceAudioURL: URL(fileURLWithPath: "reference.wav"),
referenceText: "नमस्ते, यह संदर्भ आवाज है।"
)
Enlaces del modelo
Notas de implementación
- 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
El soporte nativo experimental de Drama 3 en MLX está disponible mediante FishAudioDrama3Model. Una red MoE de 35 mil millones de parámetros con atención híbrida, un decodificador temporal y el códec Fish DAC producen audio mono de 44,1 kHz. El modelo de 4 bits superó las pruebas de audio y ASR independiente para generación desde texto, clonación con referencia y salida CLI en Apple M5 Pro. Las variantes de 8 bits y BF16 siguen sin validar.
El modo predeterminado balanced libera los búferes MLX inactivos por encima de 512 MiB entre etapas. También se aplica el límite compartido durante la vida del modelo, respetando presupuestos inferiores del llamador; ninguno limita la memoria total del proceso. --fish-drama3-memory-mode unrestricted o memoryOptions: .unrestricted carga los pesos de antemano y omite la limpieza entre etapas, pero mantiene el límite de vida útil.
La generación solo de texto aplaza la carga de 794.4 MiB de pesos del codificador de referencia. La primera codificación los carga y conserva; mantenga codec.safetensors disponible hasta entonces. Los códigos de referencia precalculados no necesitan el codificador.
Proporciona el texto completo. La clonación requiere una grabación de referencia y su transcripción exacta. Se admiten etiquetas de hablante 0–15 y emociones en el texto. El streaming PCM está disponible mediante generateStreaming, generateStream y --stream. Cada bloque contiene 3 fotogramas del códec por defecto, unos 139 ms de audio. La división automática de textos largos y la entrada progresiva de texto siguen sin estar disponibles. Alcanzar el límite de fotogramas genera un error.
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)
}| Opción | Valor predeterminado |
|---|---|
--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 |
Creado con Fish Audio. Los paquetes conservan la Community License y NOTICE.
Medición de 4 bits
| Modo | Primer PCM, ms | Síntesis en caliente, s | Audio, s | RTF | RSS máximo, GiB | Memoria física máxima, GiB |
|---|---|---|---|---|---|---|
| Solo texto / Completo | — | 2.306 | 3.483 | 0.662 | 14.457 | 24.220 |
| Clonación con referencia / Completo | — | 2.681 | 3.204 | 0.837 | 15.064 | 24.789 |
| Solo texto / Streaming | 275.3 | 2.529 | 3.483 | 0.726 | 15.571 | 22.321 |
| Clonación con referencia / Streaming | 730.2 | 2.860 | 3.204 | 0.893 | 14.676 | 23.885 |
Apple M5 Pro, 48 GiB, compilación release, 2026-10-17. Mediana de tres llamadas en caliente para generar la forma de onda completa. Se excluyen la carga del modelo y la E/S de archivos WAV; la clonación incluye la codificación de referencia en cada llamada. RTF = tiempo de síntesis / duración del audio. ASR independiente: 16/16 clips, cero errores de palabras. Para dimensionar la memoria unificada, use la memoria física. El primer PCM corresponde al primer bloque no vacío; el modo completo no tiene callbacks de bloques. El bloque predeterminado contiene 139.3 ms de audio. No se midió el inicio de la reproducción audible.