簡易翻訳機を作ってみる その6 ボイスコマンドを使って録音を開始する
今回はその5の続きです。
xr-physics-work-etc.hatenablog.com
せっかく音声入力で翻訳対象となる文字列を入力しているので、録音の開始も音声入力で行えるように設定します。
準備
音声入力でコマンドを実行するために、Speech Commands Profile
とInteractable
を使用します。
Speech Commands Profileを設定する
まずはMixedRealityToolkit
オブジェクトのMixedRealityToolkit
コンポーネントからSpeech Commands Profile
を編集します。
Input
→Speech
からSpeech Commands Profile
にアクセスできます。
まずは、現在の設定を修正するためにCloneボタンを押下します。
Cloneボタンを押すと、今のProfileをコピーして新たなプロファイルを作成できます。
Profile Name
から作成するプロファイル名を設定して、Cloneボタンを押します。
新しいプロファイルを作成すると、Speech Commands Profile
の中身を修正できるようになります。
Add a New Speech Command
ボタンを押すと、新しい設定項目を増やすことができます。
設定項目の内容と機能は以下の通りです。
Keyword
音声入力で使用する語句(実際に発声するワード)LocalizationKey
入力された文字列をWindows.ApplicationModel.Resources.ResourceLoader
中で検索して該当するものを置き換える。
説明翻訳:ローカライズされたバージョンでキーワードを上書きするために使用するオプションのキー。
※ 用途がよくわからない。KeyCode
Keywordを入力したときと同様の効果を持つキーの設定。
例) F1を設定しておくと、F1キーを押したときに設定したKeywordが音声入力されたのと同じ動作をする。Action
発火するActionの設定。MixedRealityInputAction
で設定されており、Interactable
のInput Action
と同じです。
今回は音声入力のため、次のように設定しました。
Lキーを押すことで、UnityEditor上でも動作確認できるはずです。
Interactableを設定する
次に、音声入力で発火対象になるボタンのInteractable
に設定を行います。
Speech Command
に先ほど設定したRecordを設定します。
今回は、どの状態でも録音を開始できるように、Requires Focus
のチェックを外します。
視線などが当たっている場合のみ音声コマンドを受け付けたい場合は、Requires Focus
にチェックを付けます。
動作確認
Project Settings
→ Player
→ Publishing Settings
→ Capabilities
のMicrophone
が有効になっていることを確認しビルドします。
翻訳アプリ、録音開始を音声コマンドで実行するように変更。
— napo tech (@SubNapo) November 14, 2021
なお、終了はまだ手動でやる必要あり。(タイムアウトでやろうかな)
※映像はたまに誤認識する例 pic.twitter.com/VteEywYdF1
「レコード」の発声で録音を開始することができました。
現状の問題点としては、入力終了時に結局ボタンを押す必要があることです。
試しに「レコード」を発声しても、翻訳対象の文言として認識されるだけで、select扱いにはなりませんでした。
原因は、Interactableの音声コマンド待ちより、文字入力用のDictationが優先されて音声入力を受けているためと思われます。
対策としては、無音時間○秒で完了とみなす、とかでしょうか。
DictationHandler
では、無音が一定時間経過するとエラー発生の挙動となっていたので、無音時間で判断するにはDictationHandler
をラップするスクリプトが必要そうです。