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.

Primero página interna

Las tarjetas y menús apuntan primero aquí; los enlaces al modelo fuente y a los bundles siguen disponibles en esta página.

Resumen

ModeloFish Audio S2 Pro
RolExperimental multilingual TTS with raw-reference cloning and style markers
BackendMLX fp16
Salida44.1 kHz mono PCM
IdiomasMultilingual
LicenciaResearch / non-commercial bundle; obtain Fish Audio license for commercial exposure
EstadoProgrammatic runtime; CLI integration is still pending
FuenteFish Audio S2 Pro
Producto SwiftFishAudioTTS
CLI / runtimeProgrammatic 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

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.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)
}
OpciónValor predeterminado
--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

Creado con Fish Audio. Los paquetes conservan la Community License y NOTICE.

Medición de 4 bits

ModoPrimer PCM, msSíntesis en caliente, sAudio, sRTFRSS máximo, GiBMemoria física máxima, GiB
Solo texto / Completo—2.3063.4830.66214.45724.220
Clonación con referencia / Completo—2.6813.2040.83715.06424.789
Solo texto / Streaming275.32.5293.4830.72615.57122.321
Clonación con referencia / Streaming730.22.8603.2040.89314.67623.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.