仮想と物理とエトセトラ

xRや物理とかごった煮の備忘録的技術ブログ

簡易翻訳機を作ってみる その6 ボイスコマンドを使って録音を開始する

今回はその5の続きです。

xr-physics-work-etc.hatenablog.com

せっかく音声入力で翻訳対象となる文字列を入力しているので、録音の開始も音声入力で行えるように設定します。

準備

音声入力でコマンドを実行するために、Speech Commands ProfileInteractableを使用します。

docs.microsoft.com

Speech Commands Profileを設定する

まずはMixedRealityToolkitオブジェクトのMixedRealityToolkitコンポーネントからSpeech Commands Profileを編集します。
InputSpeechからSpeech Commands Profileにアクセスできます。
まずは、現在の設定を修正するためにCloneボタンを押下します。

f:id:napo909:20211114161343p:plain

Cloneボタンを押すと、今のProfileをコピーして新たなプロファイルを作成できます。
Profile Nameから作成するプロファイル名を設定して、Cloneボタンを押します。

f:id:napo909:20211114161517p:plain

新しいプロファイルを作成すると、Speech Commands Profileの中身を修正できるようになります。
Add a New Speech Commandボタンを押すと、新しい設定項目を増やすことができます。

設定項目の内容と機能は以下の通りです。

  • Keyword
    音声入力で使用する語句(実際に発声するワード)

  • LocalizationKey
    入力された文字列をWindows.ApplicationModel.Resources.ResourceLoader中で検索して該当するものを置き換える。
    説明翻訳:ローカライズされたバージョンでキーワードを上書きするために使用するオプションのキー。
    ※ 用途がよくわからない。

  • KeyCode
    Keywordを入力したときと同様の効果を持つキーの設定。
    例) F1を設定しておくと、F1キーを押したときに設定したKeywordが音声入力されたのと同じ動作をする。

  • Action
    発火するActionの設定。MixedRealityInputActionで設定されており、InteractableInput Actionと同じです。

f:id:napo909:20211114162318p:plain

今回は音声入力のため、次のように設定しました。
Lキーを押すことで、UnityEditor上でも動作確認できるはずです。
f:id:napo909:20211114165239p:plain

Interactableを設定する

次に、音声入力で発火対象になるボタンのInteractableに設定を行います。
Speech Commandに先ほど設定したRecordを設定します。 今回は、どの状態でも録音を開始できるように、Requires Focusのチェックを外します。
視線などが当たっている場合のみ音声コマンドを受け付けたい場合は、Requires Focusにチェックを付けます。

f:id:napo909:20211114170625p:plain

動作確認

Project SettingsPlayerPublishing SettingsCapabilitiesMicrophoneが有効になっていることを確認しビルドします。

f:id:napo909:20211114170850p:plain

「レコード」の発声で録音を開始することができました。
現状の問題点としては、入力終了時に結局ボタンを押す必要があることです。
試しに「レコード」を発声しても、翻訳対象の文言として認識されるだけで、select扱いにはなりませんでした。
原因は、Interactableの音声コマンド待ちより、文字入力用のDictationが優先されて音声入力を受けているためと思われます。
対策としては、無音時間○秒で完了とみなす、とかでしょうか。
DictationHandlerでは、無音が一定時間経過するとエラー発生の挙動となっていたので、無音時間で判断するにはDictationHandlerをラップするスクリプトが必要そうです。