始める前に
- リアルタイム文字起こしAPIが有効なワークスペース。条件は概要をご覧ください。
- そのワークスペースに紐づいたAPIキー。スコープを指定した場合は
realtime_transcription:writeが必要です。キーを環境変数TIRO_API_KEYに設定してください。 - Python 3.9以上と
websocket-clientパッケージ。pip install websocket-clientでインストールしてください。 - 音声ファイルをPCMに変換する
ffmpeg。
1
音声を16 kHzモノラルのPCMに変換する
リアルタイム文字起こしAPIは、16,000 Hz、モノラル、signed 16-bit little-endian PCMだけを受け付けます。ヘッダーのないrawデータである必要があります。この形式は1秒あたり32,000バイトです。マイク入力をそのまま送る場合も同じ形式にしてください。
ffmpeg で任意の音声ファイルをこの形式に変換してください。2
セッションを作成する
お客様のサーバーでセッションを作成してください。この例では韓国語を文字起こしし、英語に翻訳します。翻訳が不要なら 成功すると
translationLocale を外してください。201 Created でセッションが返ります。streamToken はこのレスポンスでしか受け取れません。セッションが OPEN の間は再接続にも同じトークンを使うので、安全に保管してください。wsUrl は自分で組み立てず、受け取った値をそのまま使ってください。3
WebSocketで接続する
クライアントから 接続すると、最初のメッセージとして
wsUrl に接続し、Authorization ヘッダーに streamToken を入れてください。クエリ文字列やCookieでトークンを送ることはできません。session.started が届きます。通常は1秒前後で届き、まれに数十秒かかります。このメッセージを待たずに音声を送り始めてもかまいません。4
音声を送って結果を受け取る
音声を3,200バイト(100 ms)ずつに分け、バイナリフレームで送ってください。録音済みのファイルも実時間の速度で送る必要があります。実際の経過時間より60秒以上先に進むと、Tiroがclose
4029 で接続を閉じます。結果は transcript と translation のテキストメッセージで届きます。同じ segmentId の isFinal: false メッセージは、画面の以前のテキストを丸ごと置き換えます。isFinal: true が届くとその文が確定します。5
セッションを閉じる
最後の音声を送ったら WebSocketを使えない場合は、お客様のサーバーから
{"type": "session.end"} を送ってください。Tiroが残りの結果をすべて isFinal: true で送り、session.ended を送ってからclose 1000 で接続を閉じます。session.ended を受け取るまで接続を維持してください。残りの結果の送信には最大30秒かかります。POST /v1/external/realtime-transcriptions/{id}/end を呼び出してセッションを閉じてください。完全な例
次のスクリプトは上の手順を1つにまとめたものです。PCMファイルを実時間の速度で送り、結果を出力し、セッションを閉じます。接続が切れた場合は再接続せず、RESTでセッションを閉じます。再接続を実装するには再接続のルールに従ってください。stream_pcm.py の全コードを見る
stream_pcm.py の全コードを見る
stream_pcm.py
次のステップ
WebSocketプロトコル
メッセージのフィールド、エラー、再接続、close codeを確認できます。
APIリファレンス
セッションの作成、取得、一覧、終了のREST APIを確認できます。