ガイド

ストリーミング音声合成API:最初の音まで最短300ミリ秒

完成したファイルを返す音声合成APIでは、聞き手はテキスト全体を待たされます。チャットボット、ゲームのキャラクター、長い記事では、この待ち時間が「すぐ答えるアプリ」と「考え込むアプリ」の差になります。

SuperClonicaの音声合成APIはストリーミングで返せます。"stream": true を送ると、音声はでき次第届きます。稼働中のサービスでの計測では、最初の音はリクエストから最短300ミリ秒で届き、長いテキストでも遅れませんでした。テキストは分割して読み上げられ、最初の部分が最初に送られるからです。

ストリーミングの仕組み

テキストは文の切れ目で分割され、各部分は複数のワーカーで同時に読み上げられます。最初の部分は短く、キューの中で何よりも優先されるため、後ろに何が続いてもすぐに仕上がります。サーバーは部分を順番どおりに1本のOggストリームにつなぎ、残りを読み上げている間にも、できた部分から送ります。

  • 最初の音:私たちの計測で最短300ミリ秒(最初の音声バイトまで)。
  • 3839文字のテキスト:最初の音は約0.5秒、ファイル全体は5.6秒。
  • 約1万6000文字、15.6分の音声:ファイル全体で25.6秒。
  • 時間はその時の負荷によります。負荷が高いときは公平なキューで待ちます。

呼び出し方

ワークスペースのAPIセクションでキーを作成し、"stream": true を付けてテキストを送ります。curlでは -N でバッファリングを止めると、ストリームをそのままプレーヤーに渡せます。

curl -N https://superclonica.com/api/v1/speech -H "Authorization: Bearer $SUPERCLONICA_KEY" -H "Content-Type: application/json" -d '{"text": "こんにちは。次の文を作っている間にこの文が流れます。", "voice": "F1", "language": "ja", "stream": true}' | ffplay -nodisp -autoexit -

Pythonでは requests の stream=True と iter_content で届いたバイトから受け取れます。ブラウザでは、ストリームを中継する自前のエンドポイントに audio 要素を向けてください。

使う前に知っておくこと

既定の形式であるOgg Vorbisは長さに関係なくストリーミングされます。mp3とwavはテキストが30秒程度の音声より長いときにストリーミングされ、それより短いと1つのファイルで届きます。最初の音より前に失敗した場合は、ステータスコード付きの通常のエラーが返ります。その後に失敗すると転送が途中で終わるので、途切れたストリームは失敗として扱い、テキストを送り直してください。503は混雑を意味します。Retry-Afterヘッダーの秒数だけ待ち、同じIdempotency-Keyで送り直してください。

他社が優れている点

ElevenLabsとCartesiaはテキスト自体もWebSocketでストリーミング入力でき、言語モデルが書いている途中から話す音声エージェントに向いています。SuperClonicaのAPIはテキスト全体を1回のリクエストで受け取ります。Supertonic 3はまだ中国語に対応しておらず、大手クラウドにはSSMLや単語ごとのタイムスタンプがあります。それらが必要なら他社が適しています。最初の音の速さと安い大量の時間が必要なら、無料プランで私たちのAPIを試してください。