UnityでOpenAIのrealtime apiで入力した音声の文字起こしを取得する方法

初めに

以下の記事でUnityでOpenAIのrealtime apiを使って音声のやり取りを行いました。今回は以下のやり取りをする際に ユーザーが入力をした音声の文字起こしを取得したい場合の設定についてです。

ayousanz.hatenadiary.jp

開発環境

  • Unity 2022.3.34f1

実装

以下のドキュメントを見ると sessionの中の input_audio_transcription が設定できることがわかります。

{
    "event_id": "event_1234",
    "type": "session.created",
    "session": {
        "id": "sess_001",
        "object": "realtime.session",
        "model": "gpt-4o-realtime-preview-2024-10-01",
        "modalities": ["text", "audio"],
        "instructions": "",
        "voice": "alloy",
        "input_audio_format": "pcm16",
        "output_audio_format": "pcm16",
        "input_audio_transcription": null,
        "turn_detection": {
            "type": "server_vad",
            "threshold": 0.5,
            "prefix_padding_ms": 300,
            "silence_duration_ms": 200
        },
        "tools": [],
        "tool_choice": "auto",
        "temperature": 0.8,
        "max_response_output_tokens": null
    }
}

詳しくドキュメントを見ると以下のように記載があります。

input_audio_transcription object

Configuration for input audio transcription, defaults to off and can be set to null to turn off once on. Input audio transcription is not native to the model, since the model consumes audio directly. Transcription runs asynchronously through Whisper and should be treated as rough guidance rather than the representation understood by the model.

Hide properties model string

The model to use for transcription, whisper-1 is the only currently supported model.

platform.openai.com

そこでセッションを更新するタイミングで input_audio_transcription の中を設定します。

Unity側のコードでは以下のように設定をします。

        var sessionUpdateMessage = new
        {
            type = "session.update",
            session = new
            {
                input_audio_transcription = new
                {
                    model = "whisper-1"
                }
            }
        };

        string jsonMessage = JsonConvert.SerializeObject(sessionUpdateMessage);
        _connection.AddOutgoingMessage(jsonMessage);