mcpField
F
fish-audio-tts

fish-audio-tts

github.com/calesthioクリエイティブ・メディア221109 回インストール15 週間前に更新
リポジトリ

fish-audio-tts について

音声アプリ開発者向けに、Fish Audioのホスト型TTS、音声クローン、オープンウェイトを説明するスキルです。運用方法とライセンスの違いを示し、非商用ウェイトを商用セルフホスト可能なモデルと誤認しないよう扱います。

主な機能

  1. 01APIによる音声合成
  2. 02リアルタイム・分割ストリーミング
  3. 03継続型と即時型の音声クローン
  4. 04マーカーによる感情や話し方の指定
  5. 05オープンウェイトとライセンスの区別

活用シーン

  1. 01アプリ向け多言語音声の生成
  2. 02リアルタイムエージェントへの音声出力追加
  3. 03参照音声を使ったカスタム音声の作成
  4. 04ローカル試作と商用ホスト運用の検討

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/calesthio/generative-media-skills --skill fish-audio-tts

インストール後、Claude Code で/fish-audio-ttsを入力して読み込まれたか確認します。

同梱ファイルEVAL.md

詳細

Fish Audio のテキスト読み上げと音声クローン

Fish Audio は、同じ系譜を持ちながらライセンスと運用方法が異なる、2 種類の製品を提供する TTS および音声クローンのプロバイダーです。

  1. ホステッド API(api.fish.audio)— 商用サービスです。現在のラインアップは S2.1-Pro / S2-Pro / S1 のブランド名で提供されています。UTF-8 バイト単位の従量課金で、ストリーミングとクローンに対応し、無料プランもあります。
  2. オープンウェイト — OpenAudio ブランドで(以前は Fish-Speech として)公開されています。Hugging Face と GitHub からダウンロードしてセルフホストできます。

最も重要な点は、ホステッド API とオープンウェイトは同じモデルではなく、ライセンスも異なることです。フラッグシップモデルの完全版ウェイトはホステッド版のみです。公開されているのは、より小型の蒸留ウェイトのみで、これらには非商用ライセンスが適用されます。「Fish はオープンソースだから、商用利用向けにセルフホストできる」と決めつけず、該当するアーティファクトとライセンスを必ず確認してください。詳しくは、以下のオープンウェイトとセルフホスティングをご覧ください。

以下に記載するモデル名、価格、エンドポイント、制限はすべて変わる可能性があります。このドキュメントに記載されている日付付きの情報の確認日はすべて 2026-07-10 です。ユーザーに最新情報として案内する前に、docs.fish.audio で必ず再確認してください。

全体を通して使用するラベル:

  • [Doc] — Fish Audio / OpenAudio の公式ドキュメント、モデルカード、または公開技術レポートに記載されています。
  • [Claim] — Fish Audio/OpenAudio によるマーケティング上またはベンチマーク上の主張です。独立して実証された事実ではなく、同社の主張として扱ってください。
  • [Heuristic] — ドキュメントで保証されている内容ではなく、実運用に基づく判断です。

Fish Audio を使う場合(使わない場合)

次のような場合は Fish Audio をお選びください:

  • 短い参照音声からの優れた音声クローン機能を備えた、低コストで表現力豊かな多言語 TTS が必要な場合。
  • SSML の韻律指定だけでなく、インラインマーカーで感情やパラ言語的な表現を細かく制御したい場合。
  • エージェント向けにリアルタイムのストリーミング音声が必要な場合(WebSocket、最初の音声が出力されるまで 1 秒未満)。[Claim]
  • 将来的にセルフホストする選択肢を残しておきたい場合、または API を利用する前にオープンウェイトをローカルで試したい場合。

次のような場合は、別のサービスをお選びください:

  • 特定の著名人やブランドの音声について、認証済みの契約上の利用許諾が必要な場合 — Fish Audio は個別のユースケースを事前承認しておらず、同意を得る責任は利用者にあります。[Doc]
  • 商用環境への導入にあたり、オープンウェイトをセルフホストして実行することを希望する場合 — 公開されているウェイトには非商用ライセンスが適用されるため、商用目的のセルフホスティングにはホステッド API または別途の商用ライセンスが必要です。[Doc]
  • 正式な監査を受けたエンタープライズ向けコンプライアンス体制を備えたプロバイダーが必要な場合(例:無料プランでも BAA/DPA の締結が保証されていること) — 無料プランにはそのような保証がないことが明記されています。[Doc]
  • 必要な言語が S1 の対応言語セット(言語を参照)に含まれておらず、その言語での品質について文書化済みかつテスト済みの情報が必要な場合。

このスキルは、プロバイダー間の選択を行うものではありません。ElevenLabs、Cartesia などと比較して Fish Audio を利用するかどうかをユーザーがまだ検討中の場合は、トレードオフを示しつつ、その判断にはプロバイダー比較スキルが適用されることを認識してください。


ホステッド API

エンドポイント [Doc, 2026-07-10]
  • REST(バッチ/ストリーム): POST https://api.fish.audio/v1/tts
  • WebSocket(双方向ストリーミング): wss://api.fish.audio/v1/tts/live
  • 音声モデルの作成(クローン): POST https://api.fish.audio/model
  • ASR/文字起こし: transcribe-1 モデル(別のエンドポイント。音声 1 時間あたり $0.36)。

TTS の呼び出しに必要なヘッダーは、Authorization: Bearer <FISH_API_KEY>、model: <model-name>、および Content-Type: application/json または application/msgpack です。モデルを選択するのは model ヘッダーであり、本文のフィールドではありません。[Doc]

モデルラインアップ [Doc, 2026-07-10]
モデルヘッダー値役割マーカー構文備考
s2.1-pro本番環境向けの推奨モデル角括弧タグ [...]S2-Pro と比べて品質、レイテンシ、スループットが向上しています。[Claim]
s2.1-pro-free無料枠。重みは s2.1-pro と同じです[...]$0。初回音声までの時間(TTFA)および DPA の保証はありません。開発、プロトタイピング、小規模な利用向けです。[Doc]
s2-pro旧世代のデフォルトモデル[...]複数話者に対応し、自然言語で表現を制御できます。[Doc]
s1さらに前の世代丸括弧タグ (...)丸括弧で感情を示すマーカーを指定します。[Doc]

マーカー構文の重要な違い [Heuristic, grounded in Doc]: S1 では丸括弧((excited)、(whispering))を使います。S2 ファミリーでは角括弧([excited]、[whispers])を使います。モデルに合わない構文で書かれたマーカーは、そのまま読み上げられたり、無視されたりすることがよくあります。マーカー構文は model ヘッダーに合わせてください。

「OpenAudio S1」≠ ホスト型の s1 モデルです。 OpenAudio S1 はオープンウェイト版のリリースブランドです(以下を参照)。ホスト型の s1 は、それに対応するホスト型エンドポイントです。ユーザーが「S1」と言ったときは、両者を混同しないようにしてください。

主なリクエストパラメーター [Doc, 2026-07-10]
パラメーター型/範囲目的
textstring合成するコンテンツです。WebSocket モードでは通常、start 時点では空で、text イベントを通じてストリーミングされます。
reference_idstring保存済みの音声(ライブラリまたはクローンモデル)の ID です。
referencesarray即時クローニング用です。生の参照音声と書き起こしをインラインで渡し、モデルを永続化しません。
formatmp3(デフォルト)、wav、pcm、opus出力コンテナーです。
mp3_bitrate64 / 128 / 192MP3 の品質です。
sample_rateHzWAV 出力時のサンプルレートです。
speed0.5–2.0読み上げ速度です。
latencynormal(デフォルト)/balancedbalanced は安定性を少し下げる代わりに、レイテンシを低減します。
chunk_length100–300(デフォルト 200)合成チャンクごとのテキストのバッチサイズです。
normalizeboolean数字、日付、略語を自然に読み上げられる形に展開します。
temperaturefloat値を低くすると、より決定的で安定した出力になります。
top_pfloatサンプリングの多様性です。
repetition_penalty>1.0ループや繰り返しによる生成の乱れを抑制します。
max_new_tokensintチャンクあたりの音声の長さを制限します。

フォーマットの選択 [Heuristic]: 後続の編集やテレフォニーのパイプラインには wav または pcm、ブラウザーやモバイルへのストリーミングには opus、持ち運び可能なファイルが必要な場合は mp3 を使います。pcm はリアルタイムのループでコンテナーやデコーダーによるレイテンシを回避します。

ストリーミング

Python SDK には、3 つの生成モードがあります [Doc]:

  • tts.convert() — 音声全体のバイト列を返します(最も簡単です。ファイルやバッチ処理に使用します)。
  • tts.stream() — 音声チャンクを反復処理します(長尺コンテンツでもメモリー効率に優れます)。
  • tts.stream_websocket() — エージェント向けのリアルタイム双方向ストリーミングです。

WebSocket プロトコル [Doc, 2026-07-10] は /v1/tts/live を使用し、MessagePack でシリアライズされます:

  • クライアント → サーバーのイベント:start(設定:format、chunk_length、reference_id、latency)、text(上流で生成されたテキストを追加します。たとえば LLM からトークンごとに送信します)、flush(バッファーされたテキストを即座に合成します。インタラクティブアプリのレイテンシを下げるための重要な手段です)、stop(ストリームを終了します)。
  • サーバー → クライアントのイベント:audio(指定されたフォーマットのバイト列チャンクです。音声全体を得るには、すべてのチャンクを連結します)、finish(終了理由を含むセッション終了イベントです)。

リアルタイムに関するヒューリスティック [Heuristic]: LLM のトークンを text イベントに流し込み、文や節の区切りで flush を送信します。最初の flush を送信する前に段落全体ができるまで待つと、ストリーミングの利点が失われます。Fish の公式資料では、ストリーミングを使えば、ファイル全体ができるまで待つ場合と比べて、エンドツーエンドで 500 ミリ秒未満、体感での初回音声まで約 450 ミリ秒と説明されています。[Claim]

料金とレート制限 [Doc, 2026-07-10]
  • すべての TTS モデル:UTF-8 バイト 1,000,000 バイトあたり $15.00。 s2.1-pro-free は $0 です。
  • 参考スケール:約 1M UTF-8 バイト ≈ 英単語約 180,000 語 ≈ 音声約 12 時間です。[Claim]
  • バイト単位の課金がコストの落とし穴です。 課金対象は文字数ではなく、UTF-8 の バイト数 です。ASCII/ラテン文字のテキストは 1 文字あたり約 1 バイトですが、中国語/日本語/韓国語/アラビア語/ヒンディー語の文字は通常、1 文字あたり 3~4 バイト です。日本語で同じ 単語数 を使うと、英語の場合の数倍の料金がかかります。文字数ではなく、len(text.encode("utf-8")) / 1e6 * 15 でコストを見積もってください。
  • ASR transcribe-1:音声 1 時間あたり $0.36。音声デザイン voice-design-1:リクエスト成功 1 回あたり $0.01。
  • 同時実行数の段階(累計前払い額に応じて):$100 未満 → 同時実行 5 件、$100 以上 → 15 件、$1,000 以上 → 50 件、エンタープライズ → カスタム。
  • 無料プラン(s2.1-pro-free)には TTFA または DPA の保証はありません。[Doc]

音声クローン

2 つの方法があります [Doc, 2026-07-10]:

  1. 永続モデル — type=tts、title、voices(1 つ以上の参照音声ファイル)、visibility(private/public)、任意の description を指定して POST /model を実行します。音声の id が返されます。TTS ではこれを reference_id として渡します。モデルは created → trained と進みます。「fast」トレーニングモードでは、すぐに使用できる音声が返されます。enhance_audio_quality(デフォルトでオン)は、参照音声のノイズ除去と正規化を行います。
  2. インスタントクローン — モデル作成を省略し、TTS 呼び出しの references フィールドに参照音声とその文字起こしを送信します。単発の音声に最適です。

参照音声の要件 [Doc + Heuristic]:

  • 長さ: 最低 10 秒以上。30~60 秒(最大 1~2 分)にすると、一般に類似性と安定性が目に見えて向上します。[Doc]
  • クリーンさ: モノラル、話者 1 人、BGM なし、残響なし、声の重なりなし。クリーンな入力のほうが、長さよりもクローンの品質に大きく影響します。[Doc]
  • 話し方: 誇張した演技ではなく、自然な会話調の音声にします。クローンが応用できるよう、多様な音素とイントネーションを含めてください。[Doc]
  • 形式: .wav、.mp3、.m4a、.opus。[Doc]
  • [Heuristic] クローンの音声がロボットのように聞こえたり、子音が途切れたりする場合、通常はモデルではなく参照音声に問題があります。生成パラメーターを調整する前に、よりクリーンで長いサンプルを録音し直してください。

感情、トーン、パラ言語マーカー

Fish Audio の差別化要因は、テキスト内に記述する表現コントロールです。マーカーはテキストそのものに書き込みます。[Doc]

S1(丸括弧)[Doc, 2026-07-10]: 3 グループにわたる 40 種類以上のマーカーがあります。

  • 感情:(angry)、(sad)、(excited)、(surprised)、(sarcastic)、(joyful)、(empathetic) など。
  • トーン:(in a hurry tone)、(shouting)、(screaming)、(whispering)、(soft tone)。
  • 特殊/パラ言語:(laughing)、(chuckling)、(sobbing)、(sighing)、(panting)、(crowd laughing)。

S2 ファミリー(角括弧)[Doc, 2026-07-10]: より大規模なオープンタグ語彙(Fish は 15,000 種類以上のタグを挙げています)に加え、自由形式の自然言語による記述も利用できます。ドキュメントに記載されている例には、[pause]、[short pause]、[emphasis]、[laughing]、[chuckle]、[sigh]、[inhale]、[exhale]、[whisper]、[shouting]、[screaming]、[loud]、[low volume]、[volume up]、[volume down]、[excited]、[angry]、[sad]、[surprised]、[singing]、[echo]、[with strong accent]、[clearing throat]、[audience laughter] のほか、[whisper in a small voice] のような自由形式のものがあります。[Doc/Claim — 15,000 という数は、提供元による主張です。]

マーカーのヒューリスティック [Heuristic]:

  • 1 文につき、中心となる感情は 1 つにします。1 つの節に (angry)(sad)(excited) と重ねると、まとまりのない読み上げになります。
  • マーカーは、効果を付けたい範囲の直前に置きます。マーカーは後続の内容に影響し、段落全体に遡って影響するわけではありません。
  • (laughing)/[laughing] のような特殊マーカーは、非言語のイベントを挿入します。両方の効果を狙う場合を除き、「haha」も文字で入力するのは避けてください。
  • 自由形式の S2 タグは強力ですが、結果が一定ではありません。効果を毎回の生成で確実に反映させる必要がある場合は、ドキュメントに記載されたタグを優先し、temperature を下げてください。
  • マーカーの構文が model ヘッダーに合っていることを必ず確認してください(上記の S1 と S2 の注意点を参照)。Fish で表現豊かな音声合成が失敗する原因として、これが最もよく見られます。

自然な読み上げのためのテキスト準備 [特記がない限り Heuristic]

  • normalize([Doc])を有効にして「$1,200」、「Dr.」、「3/4」、「2026」を展開するか、細かく制御したい場合は自分で展開してください。正規化されていない数値は、読み間違いが起きる原因としてよく見られます。
  • 息継ぎを意識して句読点を使います。通常の文章では、カンマやピリオドのほうが [pause] よりも安定して間を作れます。ポーズマーカーは、意図的に劇的な間を入れる場合に使ってください。
  • 非常に長い入力は文または段落ごとに分割し、chunk_length でまとめて処理します。極端に長いチャンクを 1 つだけ使うと、読みのずれ、繰り返し、または (laughing) が止まらなくなる可能性が高まります。
  • モデルが固有名詞や頭字語を正しく発音しない場合は、発音どおりに表記する(例:「N. A. S. A.」と「NASA」)か、控えめなアクセント/強調タグを追加します。
  • 複数の登場人物が会話する場合は、マーカーだけで 1 つの声を切り替えようとするのではなく、話者ごとに別のクローン音声/reference_ids を使います。

オープンウェイトとセルフホスティング

Fish Audio は、OpenAudio ブランド(Fish-Speech の後継ブランド)でオープンウェイトを公開しています。これはホスト型 API とは別のトラックです。[Doc, 2026-07-10]

実際にオープンなもの [Doc, 2026-07-10]
  • OpenAudio S1-mini — 0.5B パラメーターの蒸留モデルで、一般公開され、ダウンロードできます(Hugging Face fishaudio/openaudio-s1-mini)。S1 と同時に June 3, 2025 にリリースされました。
  • OpenAudio S1 (4B) — フラッグシップのフルモデルは、プロプライエタリ/ホスト型として説明されています。公開されているのはフル版の 4B S1 ではなく、mini です。
  • Fish-Speech 1.4 / 1.5 — 以前のオープンリリース(約 0.5B クラス)も、引き続き利用できます。
  • GitHub プロジェクト(fishaudio/fish-speech)の README では、より大規模な S2-Pro (4B) のオープンウェイトについても説明されています。[Doc] 利用するウェイトファイルとライセンスを正確に確認してから使用してください。
ライセンス — 注意してお読みください [Doc, 2026-07-10]
  • OpenAudio S1-mini の重み:CC-BY-NC-SA-4.0(Hugging Face のモデルカードによる)。CC-BY-NC-SA は、非商用、帰属表示、継承を意味します。別途商用ライセンスを取得しない限り、これらの重みを商用製品で使用することはできません。
  • OpenAudio の GitHub の コード は Apache-2.0 で、重み は CC-BY-NC-SA-4.0 です。[Doc]
  • fishaudio/fish-speech リポジトリの README では、コードおよび重みが Fish Audio Research License の下にあると記載されています(「違反行為には対処する」という明示的な告知があります)。[Doc]
  • [ヒューリスティック/注意] サードパーティのレビューサイトでは、これらの重みが「MIT ライセンス」と主張されることがあります。これは一次情報であるモデルカードおよびリポジトリのライセンスと矛盾しており、未検証です。これをあてにしないでください。商用利用を検討する場合は、オープンウェイトを非商用として扱い、商用ワークロードは有料ホスト型 API を利用するか、商用ライセンスを交渉してください。
ハードウェア [Doc + 実務者の報告、2026-07-10]
  • 推論の最低要件: VRAM 約 12 GB(セルフホストの最低要件として文書化されています)。[Doc]
  • S1-mini の場合: ダウンロードサイズ約 3.5 GB、実行に必要な VRAM は約 5 GB です。8~12 GB のコンシューマー向け GPU で十分に動作します。[実務者の報告 — 二次情報と明記]
  • S2-Pro(4B): 大幅に重く、快適な推論には VRAM 約 24 GB が推奨されます。[実務者の報告 — 二次情報と明記]
  • リアルタイム係数は GPU に応じて変わります。たとえば Fish 自身の S2 レポートでは、NVIDIA H200 1 基で TTFA 約 100 ms、RTF 約 0.195 とされています [主張]。コンシューマー向けカード(RTX 3060/4090)でも使用できますが、速度は低下します。[二次情報]
  • スタック:Linux または WSL、オーディオ関連の依存関係(ffmpeg、libsox、portaudio)、conda または uv 経由でのインストール、スループット向けの vLLM/SGLang バックエンド。[Doc]
セルフホストが API より有利な場合 [ヒューリスティック]
  • セルフホストを選ぶ場合: データをオンプレミスにとどめる必要がある場合、または GPU コストの償却分を上回る $15/M bytes の料金が発生するほど大量かつ安定した処理を行う場合、オフライン/エアギャップ環境での運用が必要な場合、あるいは CC-BY-NC-SA ライセンスで問題のない研究/個人/非商用の用途である場合。
  • ホスト型 API を選ぶ場合: 最高品質のフラッグシップモデルの重み(オープンには公開されていません)が必要な場合、個別ライセンスの交渉なしに商用利用権が必要な場合、マネージドスケーリング、ストリーミング SLA、最新の S2.1 の品質を求める場合、または処理量が少ない/変動が大きく、GPU のアイドル時間によって従量課金よりセルフホストのほうが高くつく場合。

ベンチマークの位置づけ(方法を開示、ラベル付き)

これらは、記載された方法に基づくベンダーおよびサードパーティの主張であり、中立的な確定値ではありません。いずれも 2026-07-10 時点で確認した情報です。

  • OpenAudio S1 — TTS-Arena-V2(Hugging Face)、人間による主観的 ELO: 2025 年 6 月 3 日時点で第 1 位。[主張、ファーストパーティの発表。方法=大勢の人間による選好評価。]
  • OpenAudio S1 — Seed-TTS-Eval(文字起こしに基づく WER/CER): S1 の WER は 0.008/CER は 0.004、S1-mini の WER は 0.011/CER は 0.005(英語)。[主張、ファーストパーティ。方法=ASR による採点で明瞭度を評価。]
  • Artificial Analysis speech arena: OpenAudio S1 の ELO ≈ 1,074。[サードパーティ、評価アリーナの方法を開示。]
  • Fish Audio S2 技術レポート: Seed-TTS-Eval の WER は 0.54%(中国語)/0.99%(英語)、EmergentTTS-Eval の勝率は 81.88%、Audio Turing Test の事後平均は 0.515、H200 での RTF は 0.195、TTFA は約 100 ms。[主張、ファーストパーティの技術レポート。EmergentTTS-Eval は、6 つの韻律/表現シナリオでオーディオ LLM の評価者を用いる NeurIPS'25 のベンチマークです。]

本番環境向けのアドバイスにおけるベンチマークの使い方 [ヒューリスティック]: WER/CER が低いことは、明瞭に聞き取れることを示すのであって、表現豊かで好まれることを示すわけではありません。アリーナの ELO は、そのアリーナで使われるプロンプトの構成に対するリスナーの選好を反映しますが、長編のオーディオブックと短いやり取りを行うエージェントのように、実際の用途とは一致しない可能性があります。導入を決定する前に、必ず独自の台本、音声、言語で検証してください。

音声クローンに関する同意と不正利用対策 [Doc, 2026-07-10]

必ず守る必要があり、ユーザーから音声のクローンを依頼された場合、エージェントは次の事項を徹底してください。

  • 使用する権利のある音声のみをクローンしてください。 自分自身の声、所有者から明示的な同意を得た声、または適切にライセンスされた声が対象です。Fish Audioの規約では、この義務はユーザーに課されています。[Doc]
  • ユーザーには、必要な権利、同意、開示を確保し、氏名、肖像、AI生成メディアに関する現地の法律を遵守する責任があります。[Doc]
  • Fish Audioは個々の利用ケースを事前に審査せず、規約または適用法に違反するコンテンツやアカウントを、裁量により、予告なく削除する場合があります。[Doc]
  • 欺瞞を目的としたなりすまし、実在する人物(著名人を含む)の同意のないクローン、詐欺やスキャムに使う音声、または開示が必要な場合に合成音声であることを隠すコンテンツは作成しないでください。
  • [Heuristic] ユーザーが、同意や権利の証拠なしに、名前を挙げた著名人や私人の音声クローンを求めた場合は断り、代わりにライセンス済みのストック音声、または特定の人物に似ていない合成音声を提案してください。最終的なリスナーにAI生成であることを開示するよう勧めてください。
  • クローン音声モデルはアカウントから削除できます。参照音声とクローンは機密データとして扱ってください(プライバシーに関する注意を参照)。

失敗パターンと修正方法 [特記のない限りヒューリスティック]

症状考えられる原因修正方法
マーカーがそのまま読み上げられる(「かっこ、興奮、かっことじ」など)モデルに合わないマーカー構文(...) は s1 に、[...] は S2 系に合わせます
ロボットのような音声/クローンの類似度が低い参照音声にノイズがある、短い、または複数話者が含まれるノイズのないモノラル音声を30秒以上録り直し、enhance_audio_quality を有効にします
繰り返し/ループ/笑いが止まらないチャンクが長い、temperatureが高い、またはマーカーを重ねているチャンクを短くし、repetition_penalty を上げ、temperature を下げ、各範囲にマーカーを1つだけ使います
数字/日付/頭字語の読み違い正規化が無効normalize=true を設定するか、テキストを事前に展開します
請求額が予想より大幅に高い非ラテン文字の文字数が1文字あたり3~4バイトとして請求される文字数ではなく utf-8 のバイト長から見積もります
エージェントで最初の音声が出るまでの遅延が大きい合成前にテキスト全体が揃うのを待っているWebSocketを使い、text をストリーミングし、節の境目で flush を行い、format=pcm と latency=balanced を指定します
セルフホストによる商用/法務上のリスクCC-BY-NC-SAの重みを商用利用しているホスト型APIに切り替えるか、商用ライセンスを取得します

本番環境向けレビューのチェックリスト [Heuristic]: 明瞭さ(単語の脱落や不明瞭な発音がないこと)、名前や数字の正しい発音、マーカーが適切に、かつ文字どおりではなく表現されていること、チャンク間で音声のアイデンティティが一貫していること、自然なペースと息継ぎ、チャンクのつなぎ目に繰り返しや音切れがないこと、目標ラウドネス、そしてクローンの場合は同意の記録が保管されていること。


完全な例(説明用であり、必須の定型ではありません)

例A — S2.1-Proを使った表現豊かなナレーション(REST、コスト重視)

目的: ささやきの挿入部分がある2文のドラマチックなナレーションを、編集用にWAVで出力します。まずコストを見積もります。 モデル: s2.1-pro(角括弧のマーカー)。

TEXT='The vault was empty. [whisper] Someone had been here first.'
# Cost estimate: bytes / 1e6 * $15
python -c "print(len(open('/dev/stdin').read().encode())/1e6*15)" <<< "$TEXT"

curl -s https://api.fish.audio/v1/tts \
  -H "Authorization: Bearer $FISH_API_KEY" \
  -H "model: s2.1-pro" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "The vault was empty. [whisper] Someone had been here first.",
    "reference_id": "<your-voice-id>",
    "format": "wav",
    "sample_rate": 44100,
    "normalize": true,
    "temperature": 0.7,
    "repetition_penalty": 1.2
  }' --output vault.wav

この構成にする理由: 角括弧はS2モデルに適しており、ささやきのマーカーは挿入部分にのみ付けています。normalize は予期しない数字を処理し、控えめな temperature と repetition_penalty により、ドラマチックなセリフを安定させます。起こりうる失敗: 音声が s1 のクローンの場合は、代わりに (whisper) を使う必要があります。変更案: 有料モデルを使う前に、無料でテスト音声を生成するには s2.1-pro-free に切り替えます。

例B — 音声クローンを作成して再利用する(Python SDK)

目的: 同意を得たナレーターのクローンを一度作成し、多数のセリフで再利用します。

from fishaudio import FishAudio
client = FishAudio()

# 1) Create the model from a clean 45-second mono sample (consent on file).
voice = client.voices.create(
    title="Narrator - Priya (consented 2026-07-10)",
    voices=[open("priya_45s_clean.wav", "rb").read()],
    description="Studio sample, single speaker, no music",
    visibility="private",
)

# 2) Reuse by reference_id.
audio = client.tts.convert(
    text="Chapter one. (soft tone) It began on a grey morning.",
    reference_id=voice.id,   # this clone was trained on s1-style pipeline; use (..) markers
)
open("ch1.mp3", "wb").write(audio)

理由: 参照音声は長く、ノイズがなく、モノラルで、同意も得られています。クローンは非公開で、マーカーはモデルの系列に合っています。失敗例: 音楽が背景に流れる公開サンプルを参照音声にすると、以降の生成音声すべての品質が低下します。変更案: 使い捨ての短いセリフを1つだけ生成する場合は、永続モデルを作成する代わりに references=[...] によるインスタントクローンを使います。

例 C — リアルタイム音声エージェント(WebSocket)

目的: LLM のトークンが届き次第、最初の音声が出るまでの遅延を最小限に抑えて読み上げます。

パターン(wss://api.fish.audio/v1/tts/live を使った MessagePack の疑似コード):

send start   { format:"pcm", latency:"balanced", chunk_length:200, reference_id:"..." }
for token in llm_stream:
    send text { text: token }
    if token ends a clause:   send flush {}
send stop {}
# concatenate every server `audio` event's bytes until `finish`

理由: pcm はデコードによる遅延を回避し、節の区切りで flush すると、返信全体を待たずに音声を出力します。balanced を指定すると遅延を短縮できます。失敗例: 最後にだけフラッシュすると、ファイル全体の生成に約 1 秒以上かかる状態に戻ります。変更例: 遅延が問題にならない、長時間の非対話型ナレーションでは、chunk_length を大きくして、より滑らかなプロソディーにします。

例 D — セルフホストの判断

目的: ユーザーは商用以外の社内研究用ナレーションを月 40 時間利用しており、RTX 4090 を 1 台持っています。 判断: OpenAudio S1-mini のセルフホストは妥当です。4090 で動作し、商用以外の用途は CC-BY-NC-SA の条件を満たし、安定した利用量によって GPU の費用を償却できます。[ヒューリスティック] ただし、そのナレーションを有料製品に組み込む場合、NC の重みをセルフホストすることはライセンス違反です → ホスト型 API を使用してください。デプロイ前に、実際にダウンロードした重みのライセンスを確認してください。


プライバシーに関する注意[ヒューリスティック]

音声クローニングに使う参照音声は、生体情報に近い個人データです。クローンモデルは private に設定し、音声ごとに同意記録を保管してください。権利を証明できない第三者の音声をアップロードしないでください。また、プロジェクトの終了時にはクローンと元の音声を削除してください。ユーザーに知らせずに、TTS テキストに含まれるユーザーの個人を特定できる情報(PII)を第三者の API に送信しないでください。


主要な情報源(2026-07-10 に確認)

コメント