Fish Audio S2 APIは、1000万時間分の音声でトレーニングされた40億パラメータのモデルを搭載した、本番環境レベルのテキスト読み上げREST APIです。音声クローン、ストリーミング、50以上の言語をサポートしています。リクエストの送信、リファレンスの管理、単体テストの実行など、Fish Audio S2 APIを効率的に使用するには、Apidogがすべてのエンドポイントを探索し、ドキュメント化し、検証するための最速の方法です。
はじめに
AI生成音声は閾値を越えました。現代のTTSモデルはもはやロボットのように聞こえることはなく、ささやき、笑い、文中でトーンを変化させます。Fish Audio S2 APIは、この変化の最前線に位置しています。これは、1000万時間以上の多言語音声でトレーニングされた40億パラメータのモデルで、人間の録音と区別がつかないほどの音声を生成できます。
ポッドキャスト自動化ツール、対話型音声アシスタント、リアルタイムダビングパイプラインを構築する場合でも、Fish Audio S2 APIをスタックに統合するには、単一のPOSTリクエスト以上のものが必要です。認証、参照音声管理、ストリーミング動作、そして本番環境でサイレントに統合が壊れないように信頼性の高い単体テストを作成する方法を理解することが重要です。
Fish Audio S2 APIとは?
Fish Audio S2 APIは、Dual-Autoregressive (Dual-AR) アーキテクチャを中心に構築されたオープンソースのTTSシステムであるFish Speech S2-ProへのHTTPインターフェースです。このモデルは、意味生成(4Bパラメータ、時間軸に沿った低速AR)と残差コードブック生成(400Mパラメータ、深さ軸に沿った高速AR)を分離し、単一のNVIDIA H200で0.195のリアルタイムファクターで高品質な合成を可能にします。
Fish Audio S2 APIの主な機能:
| 機能 | 詳細 |
|---|---|
| 言語 | 約50言語(英語、中国語、日本語、韓国語、アラビア語、フランス語、ドイツ語など) |
| 音声クローン | 10〜30秒の参照音声、ファインチューニング不要 |
| インライン感情制御 | 自然言語タグ: [laugh]、 [whispers]、 [super happy] |
| 複数話者生成 | ネイティブな <|speaker:i|> トークンサポート |
| ストリーミング | "streaming": true によるリアルタイムチャンク音声 |
| 出力形式 | WAV、MP3、PCM |
| 認証 | ベアラートークン(Authorization: Bearer YOUR_API_KEY) |
ローカル展開後のFish Audio S2 APIのベースURLはhttp://127.0.0.1:8080です。すべてのエンドポイントは/v1/名前空間の下にあります。
Fish Audio S2 APIとApidogを始める
Fish Audio S2 APIの前提条件
Fish Audio S2 APIを最初に呼び出す前に、2つのことを実行しておく必要があります。展開されたFish Speech S2-Proサーバーと、バイナリ音声レスポンスを処理できるAPIクライアントです。
Fish Audio S2 APIサーバーを起動します。
python tools/api_server.py \
--llama-checkpoint-path checkpoints/s2-pro \
--decoder-checkpoint-path checkpoints/s2-pro/codec.pth \
--listen 0.0.0.0:8080 \
--compile \
--half \
--api-key YOUR_API_KEY \
--workers 4
--compileフラグはtorch.compile最適化を有効にし、これにより推論レイテンシが約10倍短縮されますが、初回起動時に一度ウォームアップコストが発生します。--halfフラグはFP16を有効にし、GPUメモリ使用量を削減します。
サーバーが起動したら、ヘルスチェックで検証します。
curl http://127.0.0.1:8080/v1/health
# {"status":"ok"}
ApidogでのFish Audio S2 APIの設定
Apidogを無料でダウンロードし、新しいHTTPプロジェクトを作成します。Environmentsの下にベースURL http://127.0.0.1:8080を追加します。次に、グローバルヘッダーを設定します。
Authorization: Bearer YOUR_API_KEY
Apidogはこれを環境レベルで保存するため、送信するすべてのFish Audio S2 APIリクエストは自動的にトークンを継承します。リクエストごとに手動でヘッダーを貼り付ける必要はありません。これは、複数のFish Audio S2 API環境(ローカル開発、ステージング、本番)を切り替える必要がある場合に特に便利です。
Apidogで最初のFish Audio S2 APIリクエストを作成する
Fish Audio S2 APIテキスト読み上げエンドポイントのテスト
Fish Audio S2 APIの主要エンドポイントはPOST /v1/ttsです。Apidogで、このURLを使用して新しいリクエストを作成し、メソッドをPOSTに設定し、以下のJSONボディを使用します。
{
"text": "Hello! This is a test of the Fish Audio S2 API.",
"format": "wav",
"streaming": false,
"temperature": 0.8,
"top_p": 0.8,
"repetition_penalty": 1.1,
"max_new_tokens": 1024
}
Fish Audio S2 API TTSリクエストスキーマの全貌:
| パラメータ | タイプ | デフォルト | 説明 |
|---|---|---|---|
text | string | 必須 | 合成するテキスト |
format | string | "wav" | 出力音声形式: wav、 mp3、 pcm |
chunk_length | int | 200 | 合成チャンクサイズ(100〜300) |
seed | int | null | 再現性のある出力のためのシード固定 |
streaming | bool | false | リアルタイムで音声をチャンクで返す |
max_new_tokens | int | 1024 | 生成する最大トークン数 |
temperature | float | 0.8 | サンプリングのランダム性(0.1〜1.0) |
top_p | float | 0.8 | 核サンプリング閾値(0.1〜1.0) |
repetition_penalty | float | 1.1 | 繰り返しシーケンスに対するペナルティ(0.9〜2.0) |
use_memory_cache | string | "off" | メモリ内の参照エンコーディングをキャッシュする |
ApidogでSendをクリックします。Fish Audio S2 APIは生の音声バイトを返します。Apidogはaudio/wavレスポンスを自動的に検出し、インラインオーディオプレーヤーをレンダリングするため、クライアントコードを一行も書くことなく、生成された音声をインターフェースで直接聞くことができます。
Fish Audio S2 APIによる音声クローン
Apidogを介してFish Audio S2 APIに参照音声をアップロードする
Fish Audio S2 APIは、TTSリクエストのreferencesフィールドを介してゼロショット音声クローンをサポートしています。Base64エンコードされたオーディオクリップをそのトランスクリプトとともに渡すと、モデルはその音声をクローンして出力します。
まず、POST /v1/references/addを使用して名前付き参照をアップロードします。
{
"id": "my-voice-clone",
"text": "This is the reference transcription matching the audio.",
"audio": "<base64-encoded-wav-bytes>"
}
Apidogでは、Binaryボディタイプを使用してオーディオファイルを直接アップロードするか、Form Dataに切り替えてファイルとテキストフィールドを一緒に渡すことができます。Fish Audio S2 APIは以下を返します。
{
"success": true,
"message": "Reference added successfully",
"reference_id": "my-voice-clone"
}
次に、reference_idを使用してTTS呼び出しで参照します。
{
"text": "This sentence will be spoken in the cloned voice.",
"reference_id": "my-voice-clone",
"format": "mp3"
}
ApidogのReference Managementパネル(コレクションの下)を使用すると、このリクエストを再利用可能なテンプレートとして保存できます。これにより、同じスクリプトに対して複数のクローン音声のテストを行う際に、reference_idの値を変更するだけで音声を切り替えることができます。
Fish Audio S2 API統合の単体テスト方法
Fish Audio S2 APIに単体テストが重要な理由
Fish Audio S2 APIの統合には、自動単体テストなしでは見えないいくつかの失敗モードがあります。例えば、存在しない参照ID、範囲外のtemperature値、誤って消費されるストリーミングレスポンス、または音声フォーマットの不一致などです。単体テストは、これらの回帰がユーザーに到達する前に検出します。
PythonでFish Audio S2 APIの単体テストを書く
以下は、pytestとhttpxを使用してFish Audio S2 APIの主要なフローをカバーするPython単体テストスイートです。
import pytest
import httpx
import base64
BASE_URL = "http://127.0.0.1:8080"
API_KEY = "YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
class TestFishAudioS2API:
"""Fish Audio S2 APIエンドポイントの単体テスト。"""
def test_health_check(self):
"""単体テスト: Fish Audio S2 APIヘルスエンドポイントはokを返します。"""
response = httpx.get(f"{BASE_URL}/v1/health", headers=HEADERS)
assert response.status_code == 200
assert response.json()["status"] == "ok"
def test_tts_basic_request(self):
"""単体テスト: Fish Audio S2 API TTSはバイナリ音声を返します。"""
payload = {
"text": "Unit test: verifying Fish Audio S2 API TTS output.",
"format": "wav",
"seed": 42, # 決定論的な単体テスト出力のための固定シード
}
response = httpx.post(
f"{BASE_URL}/v1/tts",
json=payload,
headers=HEADERS,
timeout=60,
)
assert response.status_code == 200
assert response.headers["content-type"] == "audio/wav"
assert len(response.content) > 1000 # 最小限の有効な音声サイズ
def test_tts_invalid_temperature_raises_error(self):
"""単体テスト: Fish Audio S2 APIは範囲外の温度を拒否します。"""
payload = {"text": "test", "temperature": 99.0}
response = httpx.post(
f"{BASE_URL}/v1/tts",
json=payload,
headers=HEADERS,
timeout=30,
)
assert response.status_code == 422 # 検証エラーが予想されます
def test_reference_add_and_list(self):
"""単体テスト: Fish Audio S2 API参照管理エンドポイント。"""
# 参照を追加
with open("test_reference.wav", "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
add_response = httpx.post(
f"{BASE_URL}/v1/references/add",
json={
"id": "unit-test-voice",
"text": "This is a unit test reference audio.",
"audio": audio_b64,
},
headers=HEADERS,
)
assert add_response.json()["success"] is True
# リストに参照が表示されることを確認
list_response = httpx.get(
f"{BASE_URL}/v1/references/list", headers=HEADERS
)
assert "unit-test-voice" in list_response.json()["reference_ids"]
# クリーンアップ: 単体テスト後に参照を削除
httpx.request(
"DELETE",
f"{BASE_URL}/v1/references/delete",
json={"reference_id": "unit-test-voice"},
headers=HEADERS,
)
以下のコマンドで単体テストスイートを実行します。
pytest test_fish_audio_s2_api.py -v
ApidogでFish Audio S2 APIの単体テストを実行する
Python単体テストに加えて、Apidogには、ローカルPython環境なしで同じFish Audio S2 APIチェックを実行する組み込みのテストシナリオ(自動テスト)機能があります。Apidogで:
- Fish Audio S2 APIコレクションを開きます
- テストシナリオ → 新規シナリオをクリックします
- リクエストを追加します: ヘルスチェック → TTSリクエスト → 参照追加 → 参照リスト
- TTSリクエストのアサーションタブで、以下を追加します。
- レスポンスステータス =
200 - レスポンスヘッダー
content-typeにaudioを含む - レスポンス時間 <
30000ms
- 実行をクリックして、完全な単体テストシーケンスを実行します
Apidogは、各Fish Audio S2 APIアサーションについて、レスポンスタイミングと差分表示を含む合否レポートを生成します。このレポートをエクスポートしたり、CIトリガーで実行するようにスケジュールしたりできます。これにより、Apidogはテストフレームワークのボイラープレートを一切書くことなく、Fish Audio S2 APIの単体テストランナーとして機能します。
Fish Audio S2 APIの高度な機能
Fish Audio S2 APIからのオーディオストリーミング
リアルタイム再生アプリケーションのために、Fish Audio S2 APIはチャンクストリーミングをサポートしています。リクエストボディで"streaming": trueを設定します。
import httpx
with httpx.stream(
"POST",
"http://127.0.0.1:8080/v1/tts",
json={
"text": "Streaming audio from the Fish Audio S2 API in real time.",
"format": "wav",
"streaming": True,
},
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=None,
) as response:
with open("streamed_output.wav", "wb") as audio_file:
for chunk in response.iter_bytes(chunk_size=4096):
audio_file.write(chunk)
Fish Audio S2 APIは、完全な合成が完了する前に音声バイトの返却を開始します。初回音声までの時間は約100msです。これにより、ユーザーが即座のフィードバックを期待するライブ音声アプリケーションに利用できます。
Fish Audio S2 APIによるインライン感情制御
Fish Audio S2 APIは、textフィールドに自然言語の感情タグを直接渡します。
{
"text": "[whispers] The secret is hidden here. [super happy] I found it!",
"format": "wav"
}
特別なパラメータは不要で、モデルは括弧で囲まれたタグをプロソディ(韻律)指示として解釈します。Fish Speechのソースからの有効なタグ例:[laugh]、[cough]、[pitch up]、[professional broadcast tone]、[whisper in small voice]。
結論
Fish Audio S2 APIは、クリーンなRESTインターフェースを通じて、真に本番環境レベルのTTSエンジンを公開しています。基本的な合成からゼロショット音声クローン、リアルタイムストリーミングまで、6つのエンドポイントは開発者が必要とする音声生成ワークフローの全範囲をカバーしています。信頼性の高い統合の鍵は、適切なサンプリングパラメータ(temperature、top_p、repetition_penalty)の設定、参照音声ライフサイクルの正しい管理、および各エンドポイントの契約を検証する単体テストスイートの維持です。
Apidogは、学習曲線を劇的に圧縮します。これを使って、最初のFish Audio S2 APIリクエストを2分以内に送信し、バイナリ音声レスポンスをインラインで聞き、コピー&ペースト可能なクライアントコードを生成し、テストフレームワークを設定することなく、すべてのFish Audio S2 APIエンドポイントに対して自動単体テストを実行できます。API仕様をチームと共有したり、関係者向けにFish Audio S2 API統合を文書化したりする準備ができたら、Apidogの自動生成ドキュメントがすべてを同期させます。
Apidogを無料でダウンロードし、Fish Audio S2 APIコレクションをインポートして今すぐテストを開始してください。
よくある質問
Fish Audio S2 APIとは何ですか? Fish Audio S2 APIは、1000万時間分の音声でトレーニングされた40億パラメータのテキスト読み上げモデルであるFish Speech S2-ProへのRESTインターフェースです。/v1/下のHTTPエンドポイントを介して、音声クローン、ストリーミング、感情制御、50以上の言語をサポートしています。
Fish Audio S2 APIで認証するにはどうすればよいですか? すべてのリクエストヘッダーにBearerトークンを送信します: Authorization: Bearer YOUR_API_KEY。APIキーは、サーバー起動時に--api-keyフラグを介して設定されます。Apidogでは、このトークンを環境レベルで保存できるため、すべてのFish Audio S2 APIリクエストに自動的に適用されます。
コードを書かずにFish Audio S2 API統合の単体テストを行うことはできますか? はい、できます。Apidogのテストシナリオ機能を使用すると、視覚的なインターフェースを通じて、任意のFish Audio S2 APIエンドポイントに対して単体テストを構築および実行できます。アサーション(ステータスコード、応答時間、ヘッダー値)を定義すると、ApidogがそれらをオンデマンドまたはCIスケジュールで実行します。テストフレームワークのセットアップは不要です。
Fish Audio S2 APIはどの音声形式をサポートしていますか? Fish Audio S2 APIは、WAV、MP3、またはPCM形式で音声を返します。TTSリクエストボディの"format"フィールドで形式を指定します。WAVがデフォルトです。
Fish Audio S2 APIで音声クローンはどのように機能しますか? 10〜30秒の参照オーディオクリップと、そのトランスクリプトをPOST /v1/references/addにアップロードします。次に、"reference_id"を介して、任意のTTSリクエストに参照IDを渡します。Fish Audio S2 APIは、ファインチューニングや追加のモデルトレーニングなしでその音声をクローンします。
Fish Audio S2 APIのリアルタイムファクターはどのくらいですか? 単一のNVIDIA H200では、Fish Audio S2 APIはストリーミングを有効にした状態で0.195のRTF(リアルタイムファクター)を達成します。これは、1秒の計算で約5秒の音声を生成することを意味します。初回音声までの時間は約100msです。
ApidogでFish Audio S2 APIのレスポンスをテストするにはどうすればよいですか? Fish Audio S2 APIがバイナリ音声を返すと、Apidogは自動的にインラインオーディオプレーヤーをレンダリングします。出力を検証するためにファイルをローカルに保存する必要はありません。同じApidogリクエストパネルから、聞いたり、レスポンスヘッダーを確認したり、アサーションを追加したりできます。
