Fish Audio S2 Pro / Drama 3
この Soniqo ページは、ローカルの speech-swift / speech-core 実装にある Fish Audio S2 Pro を説明します。Hugging Face バンドルへのリンクは統合メモの後にあります。
ランディングカードとドキュメントメニューは先にこのページへ向け、ソースモデルとバンドルのリンクは本ページ内に残します。
概要
| モデル | Fish Audio S2 Pro |
|---|---|
| 役割 | Experimental multilingual TTS with raw-reference cloning and style markers |
| バックエンド | 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 / ランタイム | Programmatic runtime today; planned speech speak --engine fish-audio |
使い方
以下のスニペットは、現在の speech-swift リポジトリが公開している API またはコマンドに合わせています。
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 で利用できます。350 億パラメータのハイブリッド注意 MoE、時系列音声タワー、Fish DAC コーデックで 44.1 kHz モノラル音声を生成します。4 ビットのチェックポイントは Apple M5 Pro で、テキストのみの生成、参照音声のクローン、CLI 出力の波形と独立した ASR 検証に合格しました。8 ビットと BF16 は未検証です。
既定の balanced モードは、各段階の境界で 512 MiB を超える未使用 MLX バッファを解放します。モデルの有効期間中は共有キャッシュ上限も適用され、呼び出し側のより低い予算を維持します。どちらもプロセス全体のメモリ上限ではありません。--fish-drama3-memory-mode unrestricted または memoryOptions: .unrestricted は重みを事前に読み込み、段階ごとの解放を省略しますが、有効期間の上限は維持します。
テキストのみの生成では参照音声エンコーダーの重み 794.4 MiB の読み込みを遅延します。最初の参照音声エンコード時に読み込み、その後は保持するため、それまでは codec.safetensors を利用可能にしてください。計算済みの参照コードにはエンコーダーは不要です。
入力テキストは全文を渡します。声のクローンには参照音声と正確な書き起こしが必要です。話者タグ 0–15 とインライン感情制御に対応します。generateStreaming、generateStream、--stream で PCM ストリーミングに対応します。既定のチャンクは 3 コーデックフレームで、約 139 ms の音声です。長文の自動分割とテキストの逐次入力は未対応です。フレーム上限に達するとエラーになります。
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、ms | ウォーム合成、秒 | 音声、秒 | 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、リリースビルド、2026-10-17。ウォーム呼び出し 3 回の中央値で、波形全体の生成を測定しています。モデル読み込みと WAV ファイル入出力は除外し、クローンには毎回の参照音声エンコードを含みます。RTF = 合成時間 / 音声時間。独立 ASR は 16/16 クリップで単語誤りゼロでした。ユニファイドメモリの容量計画には物理メモリ使用量を参照してください。 最初の PCM は空でない最初のストリーミングコールバックです。一括生成にはチャンクのコールバックがありません。既定のチャンクは 139.3 ms の音声です。実際の再生開始時刻は未測定です。