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版として独自に進化する可能性も出てきました。





コメントを残す