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: "नमस्ते, यह संदर्भ आवाज है।"
)

モデルリンク

実装メモ

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.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)
}
オプション既定値
--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

Fish Audio を使用しています。バンドルには Community License と NOTICE が含まれます。

4 ビット版のベンチマーク

モード最初の PCM、msウォーム合成、秒音声、秒RTFピーク RSS、GiBピーク物理メモリ、GiB
テキストのみ / 一括生成—2.3063.4830.66214.45724.220
参照音声のクローン / 一括生成—2.6813.2040.83715.06424.789
テキストのみ / ストリーミング275.32.5293.4830.72615.57122.321
参照音声のクローン / ストリーミング730.22.8603.2040.89314.67623.885

Apple M5 Pro、48 GiB、リリースビルド、2026-10-17。ウォーム呼び出し 3 回の中央値で、波形全体の生成を測定しています。モデル読み込みと WAV ファイル入出力は除外し、クローンには毎回の参照音声エンコードを含みます。RTF = 合成時間 / 音声時間。独立 ASR は 16/16 クリップで単語誤りゼロでした。ユニファイドメモリの容量計画には物理メモリ使用量を参照してください。 最初の PCM は空でない最初のストリーミングコールバックです。一括生成にはチャンクのコールバックがありません。既定のチャンクは 139.3 ms の音声です。実際の再生開始時刻は未測定です。