Upgrade to Pro — share decks privately, control downloads, hide ads and more …

XRミーティング 20260819

XRミーティング 20260819

XRミーティング 20260819「Even G2 で OpenAI のリアルタイム音声入力なんとかできた試行錯誤」の登壇資料です。

◆スライド内の素材は以下を使用させていただいております。ありがとうございます!

・シルエットデザイン http://kage-design.com/
・human pictogram 2.0 http://pictogram2.com
・ICOOON MONO http://icooon-mono.com/
・Adobe Stock https://stock.adobe.com/jp

Avatar for 1ft-seabass

1ft-seabass PRO

August 19, 2026

More Decks by 1ft-seabass

Other Decks in Technology

Transcript

  1. 今回は WebSocket にしました OpenAI がおすすめする WebRTC 方式は生データを丸投げできるのが強みだけど、Even Hub SDK のマイクは

    getUserMedia()じゃなくPCM16 チャンク配信という独自ブリッジ。標準の MediaStream がないのでパッとやるにはやりにくそうだったので WebSocket にした。 10
  2. 音声チャンクの処理ざっくり マイクの音声チャンクを継続的にWebSocketで送り続ける type: input_audio_buffer.append / audio: チャンク音声データ 3 秒ごとにタイマーが発火させここまでで区切ってと commit

    を送信 type: input_audio_buffer.commit commit のたびサーバー側でその音声区間だけの独立した item が作成 itemに対して断片 delta が複数回届き、随時積み上げていく。最後に確定版 completed が届き、断片が確定テキストに置き換わる 確定/暫定のテキストを item 発生順に連結して画面に表示。これを繰り返すこ とで、喋っている間も3秒ごとに表示が伸びていく! 12
  3. いろいろ試行錯誤 Invalid 'session.audio.input.format.rate': integer below minimum value. Expected a value

    >= 24000, but got 16000 instead. グラスマイクは SDK 制約で 16 kHz固定、OpenAI 側は 24 kHz必須。 クライアント側で線形補間して 16 kHz→ 24 kHzへアップサンプル。コード は少なめ。 turn_detection エラー turn_detection: {type:"server_vad"}を指定したら「このモデルは非対応」 エラー。文字起こし専用モデルはturn_detection: null 必須と判明。 null に変更して解消。「サーバー側は一切自動で区切らない」制約のため分 割方式への伏線になった。 13