Unityの音声認識でリアルタイムに何を発しているのかを取得したくて DictationRecognizer をテストしていたときにわかった制限事項をまとめました。
環境: Windows10 Pro, Unity 5.6.0f3
まずスクリプトですがMicrosoftが使い方「Voice input in Unity」を書いています。ここに書いてあるイベントをまとめると以下のようなスクリプトができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using UnityEngine; using UnityEngine.Windows.Speech; public class Test : MonoBehaviour { private DictationRecognizer dictationRecognizer; private void Start() { dictationRecognizer = new DictationRecognizer(); dictationRecognizer.DictationResult += DictationRecognizer_DictationResult; dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis; dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete; dictationRecognizer.DictationError += DictationRecognizer_DictationError; dictationRecognizer.Start(); } private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence) { print("DictationResult: " + text); } private void DictationRecognizer_DictationHypothesis(string text) { print("DictationHypothesis: " + text); } private void DictationRecognizer_DictationComplete(DictationCompletionCause cause) { print("DictationComplete: " + cause); } private void DictationRecognizer_DictationError(string error, int hresult) { print("DictationError: " + error); } private void OnDisable() { dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult; dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete; dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis; dictationRecognizer.DictationError -= DictationRecognizer_DictationError; dictationRecognizer.Dispose(); } } |
制限事項ですが次の4つです。制限範囲内だと上記のコードが無事に動きます。
1. Macでは動かない
Windowsの機能使っているため。
2. ネットにつながっていないと使えない
音声認識はこういうAPIが多いです。オフラインだとエラーを吐きます。
3. Editorで動かない
EditorでPlayするとこういう感じにすぐに DictationComplete イベントが呼ばれてUnknownError表示されます。
4. Buildしないと動かない。x86しか対応していない。
ここのAnswerをみるとBuildしないとDictationRecognizerは反応しないようです。そのためBuild設定はArchitectureをx86に設定する必要があります。
コメントを残す