Fish Audio S2 Pro / Drama 3
Эта страница Soniqo описывает Fish Audio S2 Pro из локальной реализации speech-swift / speech-core. Ссылки на Hugging Face находятся ниже после заметок по интеграции.
Карточки и меню документации сначала ведут сюда; ссылки на исходную модель и бандлы остаются на этой странице.
Кратко
| Модель | Fish Audio S2 Pro |
|---|---|
| Роль | Experimental multilingual TTS with raw-reference cloning and style markers |
| Backend | MLX fp16 |
| Вывод | 44.1 kHz mono PCM |
| Языки | Multilingual |
| Лицензия | Research / non-commercial bundle; obtain Fish Audio license for commercial exposure |
| Статус | Programmatic runtime; CLI integration is still pending |
| Источник | Fish Audio S2 Pro |
| Swift-продукт | FishAudioTTS |
| CLI / runtime | Programmatic runtime today; planned speech speak --engine fish-audio |
Использование
Фрагмент ниже соответствует текущему API или команде из speech-swift.
import FishAudioTTS
let model = try await FishAudioTTSModel.fromPretrained()
let pcm = try await model.generate(
text: "आज मैं बहुत खुश हूँ। [excited]",
referenceAudioURL: URL(fileURLWithPath: "reference.wav"),
referenceText: "नमस्ते, यह संदर्भ आवाज है।"
)
Ссылки модели
Заметки реализации
- 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
Экспериментальная нативная поддержка Drama 3 в MLX доступна через FishAudioDrama3Model. Модель MoE с 35 млрд параметров, гибридным вниманием, временным аудиодекодером и кодеком Fish DAC создаёт монофонический звук 44,1 кГц. Версия с 4-битными весами прошла на Apple M5 Pro проверку звука и независимую ASR-проверку для генерации по тексту, клонирования по образцу и вывода CLI. Варианты 8 бит и BF16 ещё не проверены.
Режим balanced по умолчанию очищает неиспользуемые буферы MLX свыше 512 MiB на границах этапов. Также действует общий лимит кэша на время жизни модели с сохранением более низкого бюджета вызывающего кода; ни один из механизмов не ограничивает общую память процесса. --fish-drama3-memory-mode unrestricted или memoryOptions: .unrestricted загружает веса заранее и отключает очистку между этапами, но сохраняет лимит на время жизни модели.
При синтезе только по тексту загрузка 794.4 MiB весов энкодера образца откладывается. Первое кодирование образца загружает и сохраняет их; до этого файл codec.safetensors должен оставаться доступным. Заранее вычисленные коды образца не требуют энкодера.
Передавайте полный текст. Для клонирования нужны образец голоса и его точная расшифровка. Поддерживаются теги говорящих 0–15 и указания эмоций в тексте. Потоковый PCM доступен через generateStreaming, generateStream и --stream. По умолчанию блок содержит 3 кадра кодека, около 139 мс аудио. Автоматическое разбиение длинного текста и потоковый ввод текста пока не поддерживаются. При достижении лимита кадров возникает ошибка.
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)
}| Параметр | По умолчанию |
|---|---|
--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 |
Создано с Fish Audio. Пакеты сохраняют Community License и NOTICE.
Измерения 4-битной версии
| Режим | Первый PCM, мс | Прогретый синтез, с | Аудио, с | RTF | Пиковый RSS, GiB | Пиковая физическая память, GiB |
|---|---|---|---|---|---|---|
| По тексту / Целиком | — | 2.306 | 3.483 | 0.662 | 14.457 | 24.220 |
| Клонирование по образцу / Целиком | — | 2.681 | 3.204 | 0.837 | 15.064 | 24.789 |
| По тексту / Поток | 275.3 | 2.529 | 3.483 | 0.726 | 15.571 | 22.321 |
| Клонирование по образцу / Поток | 730.2 | 2.860 | 3.204 | 0.893 | 14.676 | 23.885 |
Apple M5 Pro, 48 GiB, сборка release, 2026-10-17. Медиана трёх прогретых вызовов до получения полной звуковой волны. Загрузка модели и чтение/запись WAV исключены; клонирование включает кодирование образца при каждом вызове. RTF = время синтеза / длительность аудио. Независимая ASR: 16/16 записей, без ошибок в словах. Для расчёта общей памяти используйте физический объём. Первый PCM — первый непустой потоковый блок; режим целиком не вызывает обработчик блоков. Стандартный блок содержит 139.3 мс аудио. Момент начала слышимого воспроизведения не измерялся.