この記事について
Unityの標準で用意されているKeywordRecognizerを利用してみます。
環境
Windows10(Windows10でしか動かないそうです)
Unity 2021.3.24f1
やりたいこと
今回やりたいことはゲーム内で音声を受け取ってその結果を取得してゲームに反映させるということを使用と思います。
例:メニューと発言するとUIが表示される
KeywordRecognizer
KeywordRecognizerはUnityが標準で用意している音声認識ライブラリです。
このKeywordRecognizerは登録されているキーワードの中から発言内容と最も近しい内容のものを出力するというものになっています。
簡単実装
まずは簡単に実装してみましょう。
SimpleKeywordRecognizer.cs
public class SimpleKeywordRecognizer:MonoBehaviour
{
[SerializeField]private string[] keywords;
private KeywordRecognizer _recognizer;
void Awake()
{
_recognizer = new KeywordRecognizer(keywords);
}
private void OnEnable()
{
_recognizer.OnPhraseRecognized += OnPhraseRecognized;
_recognizer.Start();
}
private void OnDisable()
{
_recognizer.OnPhraseRecognized -= OnPhraseRecognized;
_recognizer.Stop();
}
private void OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
Debug.Log(args.text + $", LEVEL:{args.confidence}");
}
}
出力内容
音声の入力があったと判定されると「OnPhraseRecognized」が発火します。
引数として「PhraseRecognizedEventArgs」が指定されておりますが、こちらには認識された音声内容が入っています。
値 | 説明 |
---|---|
text | 認識された音声の文字列データ。(typeSystem.String) |
confidence | 認識精度。High/Middle/Lowのいずれかの値が入ります。(typeUnityEngine.Windows.Speech.ConfidenceLevel) |
phraseDuration | 音声の長さ。(typeSystem.TimeSpan) |
phraseStartTime | 音声開始日時。(typeSystem.DateTime) |
semanticMeanings | 認識されたフレーズの語義的な意味(よく分からない) |