MRTKのキーワード音声認識は、用意されているコンポーネントを使うとノーコーディングで使うことができます。
MRTK での音声入力の構成
独自のInputSystemProfileを作成して、キーワードを登録
↓
Speech Input Handlerをアタッチして、聞き取りたいキーワードを指定
の流れです。
これはこれで便利なのですが、キーワードの数が多かったり、登録するキーワードを動的に変更したかったりする場合は、コードでキーワードの登録と聞き取りがしたくなります。
その方法も公式ドキュメントに記載されています。
Unity で、音声入力、音声認識、ディクテーションを Windows Mixed Reality アプリケーションに追加する 3 つの方法をどのように公開するかを説明します。
上記からコピペして少し整理したコードが下記になります。
これを使用する場合は、プロファイルは特に変更する必要はありません。
プロファイルはGUIでの操作が必要になりGitでの履歴が追いにくかったりするので、コードでの書き方も知っておくと何かと役に立ちそうです。
using System; using UnityEngine; using UnityEngine.Windows.Speech; using System.Collections.Generic; using System.Linq; public class KeywordManager : MonoBehaviour { private KeywordRecognizer _keywordRecognizer = null; private readonly Dictionary<string, Action> _keywords = new Dictionary<string, Action>(); private void Start() { //Create keywords for keyword recognizer _keywords.Add("こんにちは", () => { // action to be performed when this keyword is spoken Debug.Log("こんにちは!"); }); _keywords.Add("こんばんは", () => { // action to be performed when this keyword is spoken Debug.Log("こんばんは!"); }); // Tell the KeywordRecognizer about our keywords. _keywordRecognizer = new KeywordRecognizer(_keywords.Keys.ToArray()); // Register a callback for the KeywordRecognizer and start recognizing! _keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized; _keywordRecognizer.Start(); } private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args) { // if the keyword recognized is in our dictionary, call that Action. if (_keywords.TryGetValue(args.text, out var keywordAction)) { keywordAction.Invoke(); } } }