SDL3のラッパーを作った理由は、もともとコレがやりたかったためです。PHPカンファレンス小田原で同時翻訳システムが動いてて、「すげー、俺も作ってみて〜」ってなったのが発端です。
システム概要
処理の流れ
- SDL3を使って、翻訳結果を表示するウィンドウを最前面固定で作成
- ウインドウ作成したプロセスはsocket通信で翻訳文を待ち受け
- 別途、マイク入力を待ち受けするスクリプトを起動
- 音声入力をOpenAIのAPIを使って文字起こし
- 文字起こしされたテキストを任意のLLMを使って翻訳
- 翻訳結果をsocket経由で翻訳結果ウィンドウに表示
こうやって、文字にしてみると、大したことはやっていません。ポイントがあるとすれば、音声入力を文字起こしする処理です。
マルチモーダルで音声入力を丸っと受け止めてくれるAPIは、OpenAIのAPI使わないと無理でした。他にも提供しているサービスあると思いますが、自分が現在契約しているのはChatGPTとAnthropicなので、他に選択肢が無かった。
実際に翻訳している様子
たいしたシステムじゃないのでコードは公開してませんが、こんな感じで動きます。
やってみて、感じた課題
意外と簡単に構築できるのですが、難しい点がいくつかあります。まず、音声入力をどこで区切るか?という問題です。人間の話し言葉が途切れなく続く場合、どのタイミングで文字起こしするのかは大事です。どこまで入力をバッファリングするのか?など調整が難しいです。
これに関連して、翻訳結果を表示するタイミングや長さも調整が必要です。長い文章の場合、最後まで待って翻訳するのでは、聴いている人にとって、一気に長い文章が表示されるので体験が良くないです。
などと考えると、PHPカンファレンス小田原のシステムはかなり上手に調整されていたように思います。自分で作ってみると分かるね、すごい!