メインコンテンツへスキップ
リアルタイム文字起こしAPIは、エンタープライズプランのお客様に個別のお問い合わせで提供する機能です。TiroがワークスペースでこのAPIを有効にすると、このガイドを試せます。 このガイドでは、音声ファイルを1つ実時間の速度で送り、文字起こしと翻訳の結果をターミナルに出力してから、セッションを閉じます。

始める前に

  • リアルタイム文字起こし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データである必要があります。ffmpeg で任意の音声ファイルをこの形式に変換してください。
この形式は1秒あたり32,000バイトです。マイク入力をそのまま送る場合も同じ形式にしてください。
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

セッションを閉じる

最後の音声を送ったら {"type": "session.end"} を送ってください。Tiroが残りの結果をすべて isFinal: true で送り、session.ended を送ってからclose 1000 で接続を閉じます。session.ended を受け取るまで接続を維持してください。残りの結果の送信には最大30秒かかります。
WebSocketを使えない場合は、お客様のサーバーから POST /v1/external/realtime-transcriptions/{id}/end を呼び出してセッションを閉じてください。
セッションを終了せずにWebSocket接続だけを閉じると、セッションは OPEN のまま残ります。音声なしで15分経って自動で終了するまで、ワークスペースの同時セッション10件の枠を1つ占有します。

完全な例

次のスクリプトは上の手順を1つにまとめたものです。PCMファイルを実時間の速度で送り、結果を出力し、セッションを閉じます。接続が切れた場合は再接続せず、RESTでセッションを閉じます。再接続を実装するには再接続のルールに従ってください。
stream_pcm.py
PCMファイルのパスを引数に渡して実行してください。

次のステップ

WebSocketプロトコル

メッセージのフィールド、エラー、再接続、close codeを確認できます。

APIリファレンス

セッションの作成、取得、一覧、終了のREST APIを確認できます。