PC版の音声会話方式はAndroid版Lloydにそのまま移植できなかった

Android版「Lloyd」で、PC版と同じように音声会話を自動化できないか検証していたところ、かなり重要な違いが見つかりました。

結論から言うと、PC版で使っている音声会話方式は、そのままAndroid版Lloydへ移植できません。

PC版では終了ワードをリアルタイムに検出できる

PC版では、音声認識中の文字列を途中段階から取得できます。

そのため、たとえば会話の最後に「クローズ」と言った瞬間に、その文字を検出して音声入力を終了し、そのまま送信する、といった処理を組むことができます。

この方式をAndroid版Lloydにも使えると思っていました。

Lloydで同じことを試した

LloydはAndroid WebView上でChatGPTを開き、ChatGPT標準の音声入力を使っています。

そこで、ChatGPTの入力欄に入る文字列を監視し、「クローズ」が現れたら終了ワードとして検出する実験をしました。

最初のテストでは、送信前に「クローズ」を検出できたように見えました。

しかし、繰り返し確認すると違いました。

送信ボタンを押すまでは、Lloyd側のログに認識文字が出てこない。

200msごとに入力欄を監視する処理を追加しても同じでした。

録音中は、まだ文字になっていなかった

実機ログと公開されているChatGPT Dictation関連の実装を照合すると、動きが見えてきました。

  • 音声入力を開始
  • 録音中は音声データとして保持
  • Dictationを終了・送信
  • サーバー側で文字起こし
  • その後、ChatGPTの入力欄へ文字列が反映される

つまり、Lloydが監視していた入力欄には、録音中の「クローズ」という文字そのものがまだ存在していませんでした。

送信後に初めて文字起こし結果が入力欄へ入り、その時点でLloydが「クローズ」を検出していたわけです。

だからPC版の方式はそのまま使えない

PC版では、音声認識途中の文字列を取得して終了ワードを判定できます。

一方、現在のLloydが使っているChatGPT標準Dictationでは、少なくとも今回の検証環境では、録音中の認識文字列を入力欄から取得できませんでした。

そのため、

終了ワードをリアルタイム検出 → 音声入力終了 → 自動送信

というPC版の仕組みを、そのままLloydへ持ってくることはできません。

移植ではなく、Android側の方式を考える必要がある

これは失敗というより、設計上の重要な分岐点でした。

PC版でうまく動いている仕組みでも、Android版では入力経路そのものが違います。

ここから先は、PC版をそのままコピーするのではなく、Lloyd側でリアルタイムに終了ワードを判定できる別経路を作るか、別の終了方法を考える必要があります。

「PC版で動いたからAndroidでも同じはず」と思っていた部分が、ここで一度きれいに崩れました。

でも、こういう違いが分かったのは大きい。

移植するつもりだったものが、ここからAndroid版として独自に進化する可能性も出てきました。

コメントを残す

SKULLYNET

AI・音声・Android・WebViewなどを、実際に作って試した記録を残しています。成功だけでなく、失敗や原因究明の過程も公開します。

更新情報

新しい開発記録や記事の更新をメールで受け取れます。

カテゴリー

タグ