メインコンテンツまでスキップ

音声合成Streaming API

音声合成Streaming APIはテキストとvoice_idを受け取り、MP3、PCMまたはWAV音声を HTTP streamまたはWebSocket messageで返します。Base URLは https://api.kitschlabs.comです。

エンドポイント​

方式Endpoint用途
POST/v1/text-to-speech/{voice_id}/streamHTTPでaudio binaryを受信
WSS/v1/text-to-speech/{voice_id}/stream-inputWebSocketでテキストを送信してaudio chunkを受信

voice_idはGET /v1/voicesのレスポンスから選択します。output_formatは mp3_44100_128、pcm_24000またはwav_24000に対応しています。

HTTP Streaming API​

通常の音声生成と同じJSON bodyを送信し、選択した形式のaudio binaryを streamで受信します。

curl --request POST \
"https://api.kitschlabs.com/v1/text-to-speech/<VOICE_ID>/stream?output_format=mp3_44100_128" \
--header "xi-api-key: <API_KEY>" \
--header "Content-Type: application/json" \
--data '{
"text": "今日も良い一日をお過ごしください。",
"language_code": "ja"
}' \
--output speech.mp3
フィールド位置型必須説明
voice_idpathstringはい使用する音声ID
output_formatquerystringいいえmp3_44100_128、pcm_24000またはwav_24000
textbodystringはい合成するテキスト
language_codebodystringいいえen、ko、ja、zhのいずれか
instructbodystringいいえ話し方に関する自然言語の指示

成功すると、audio/mpeg、audio/pcmまたはaudio/wavのContent-Typeを持つbinary responseを 返します。

pcm_24000はheaderなしの24 kHz、mono、signed 16-bit little-endian PCMで、 別途MP3をdecodeせずにリアルタイム再生に使用できます。

WebSocket Streaming API​

output_formatとlanguage_codeをquery parameterに指定して接続します。

wss://api.kitschlabs.com/v1/text-to-speech/<VOICE_ID>/stream-input?output_format=pcm_24000&language_code=ja

WebSocket handshakeでxi-api-keyヘッダーを送信するか、最初のJSON messageに xi_api_keyを含めて認証します。1つの音声として生成するテキストをmessageで 送信し、最後のmessageでflushをtrueに設定します。

{"text":"今日も良い","xi_api_key":"<API_KEY>","generation_config":{"chunk_length_schedule":[120,160,250,290]}}
{"text":"一日をお過ごしください。","flush":true}

generation_config.chunk_length_scheduleは、audio chunkの生成を開始するテキスト長を 指定する任意のパラメータです。50から500までの整数を1個以上8個以下で指定します。 デフォルトは[120, 160, 250, 290]です。

サーバーはbase64 audio chunkを返します。

{"audio":"<BASE64_AUDIO_CHUNK>","isFinal":false}

pcm_24000では、音声の生成中に無音のPCM chunkが返される場合があります。 無音かどうかにかかわらず、audioを含むmessageはaudio streamの一部として処理し、 isFinalがtrueのmessageのみを1つの音声の送信終了として判断してください。

1つの音声の送信が完了すると、最後のmessageを返します。

{"audio":null,"isFinal":true}

接続を終了するには、空のtextを送信します。

{"text":""}

textはstring、flushはbooleanである必要があります。不正なmessageや リクエストでは、error.statusとerror.messageを含むJSONが返される場合が あります。

HTTPのエラーコードと再試行の基準は音声合成APIを 参照してください。