リアルタイムワークフローを使用すると、標準プロトコルを使用して音声合成 (TTS) モデルにアクセスできます。
自己開発 TTS モデルの標準インターフェイス
自己開発の音声合成 (TTS) モデルをワークフローに追加するには、インターネット経由でアクセス可能な HTTP ストリーミングサービスを実装する必要があります。このサービスは、定義された入力および出力仕様に従って TTS モデルをカプセル化する必要があります。
オーケストレーションコンソールで、音声合成 (TTS) ノードに次のパラメーターを設定します。
名前 | タイプ | 必須 | 説明 | 例 |
リクエスト URL | String | はい | 自己開発モデルの HTTPS エンドポイント。 | https://www.abc.com |
トークン | String | いいえ | サービスの権限付与トークン。 | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
サンプルレート | Integer | はい | サンプルレート (Hz)。有効な値:
| 48000 |
このインターフェイスは、S16LE フォーマットのモノラルオーディオデータのみをサポートします。データを送信する前に、サポートされているフォーマットにリサンプリングしてください。
リアルタイムワークフローが実行されると、サービスはフォームデータを POST リクエストにアセンブルします。このリクエストは、設定した自己開発 TTS モデルの HTTPS エンドポイントに送信されます。次の表にリクエストパラメーターを示します。
名前 | タイプ | 必須 | 説明 | 例 |
Text | String | はい | 音声合成用のテキスト。 | Hello |
VoiceId | String | いいえ | 音声。 | yourVoiceId |
SampleRate | Integer | はい | サンプルレート (Hz)。 | 48000 |
Token | String | いいえ | サービスの権限付与トークン。 | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
ExtendData | String | はい | カスタム TTS 拡張データ。これには、インスタンス ID と、インスタンスの開始時に指定するユーザー定義のビジネスデータが含まれます。 | {'InstanceId':'68e00b6640e*****3e943332fee7','ChannelId':'123','SentenceId':'3',UserData':'{"aaaa":"bbbb"}'} |
| String | はい | インスタンス ID。 | 68e00b6640e*****3e943332fee7 |
| String | はい | チャネル ID。 | 123 |
| Int | はい | Q&A ペア ID。 説明 単一のユーザーの問い合わせに対して、エージェントはその応答に同じ ID を使用します。 | 3 |
| String | いいえ | 音声の感情。有効な値:
説明 このパラメーターを指定しない場合、合成された音声には感情の属性がありません。 | happy |
| String | いいえ | インスタンスの起動時に渡されるカスタムビジネスデータ。 | {"aaaa":"bbbb"} |
生成された PCM オーディオストリームを、対応する音声とサンプルレートとともに、HTTP ストリーミング応答を介してセグメントでサービスに送信します。その後、サービスはオーディオデータを後続のノードにリアルタイムでプッシュします。
カスタム TTS サーバー
Python
次のサンプルコードは、TTS サーバーをカスタマイズする方法を示しています。
from aiohttp import web
async def stream_audio(request):
data = await request.json()
text = data.get('Text', "")
token = data.get('Token', None)
sample_rate = data.get('SampleRate', 48000)
extend_data = data.get('ExtendData', "")
print(f"text:{text}, token:{token}, sample_rate:{sample_rate}, extend_data:{extend_data}")
# TODO: トークンが有効かどうかを確認します。
response = web.StreamResponse(
status=200,
reason='OK',
headers={'Content-Type': 'audio/mpeg'}
)
# 応答を開始します。
await response.prepare(request)
# generate_tts_data は、オーディオデータを生成するコルーチンです。
async for chunk in generate_tts_data(text, sample_rate):
await response.write(chunk)
# 応答を完了します。
await response.write_eof()
return response
async def generate_tts_data(text: str, sample_rate: int):
# TODO: TTS サービスを呼び出して、対応するサンプルレートでオーディオデータを生成します。
# 例: ファイルからオーディオデータを読み取ります。
file_path = '/your_dir/sample.pcm'
with open(file_path, 'rb') as f:
while True:
chunk = f.read(4096) # 毎回 4 KB のデータを読み取ります。
if not chunk:
break
yield chunk
app = web.Application()
app.add_routes([web.post('/stream-audio', stream_audio)])
if __name__ == '__main__':
web.run_app(app)