Julius×Unityで音声認識をさせようとしてつまづいたことのメモ


Julius-Client-for-Unity ver1.4
を使用して音声認識をやってみようとしたところ初心者なためにつまづいたことがあったのでメモ
※Unityのバージョンは5.3.2

1.microphone.csでのエラー
表現が古いため修正が必要だった。
新しくAudioSourceの変数としてaudioを用意したがNullReference~のエラー発生。原因はGetComponentを忘れたこと。
Start()にaudio=GetComponent< AudioSource>();を追加して解決

2.認識した声の文字表示が文字化けする問題
シーンを再生して声を出すと文字化けした文字が表示されてしまっていた。
原因は文字コード、UTF8であれば上手くいくはずなのでJulius_Client.cs内のget_stream()にある
stream = System.Text.Encoding.Default.GetString(data);
を以下のように変更
stream = System.Text.Encoding.UTF8.GetString(data);
シーンを再生すると日本語が表示された。

初めて見るコードが多すぎて諦めようかと思ったけれど諦めなくてよかった。
実際、初心者すぎてエンコード・デコードが行われていることに気づくまでに時間がかかったり(このせいでどこで文字化けを直せばいいか分からなかった)、正規化表現って何だ?と思って原因じゃないか探したり、そもそもどんな情報が送られてきているのか調べたりと横道にそれまくった結果3~4時間が無駄になったから次からはもっとスマートに原因に辿り着きたい。

参考にしたページ
Julius-Client-for-Unity ver1.4
※今回使用させていただいているもの
https://github.com/SavantCat/Julius-Client-for-Unity

Unityで音声認識
※Julius×Unityを使ってみようと思ったきっかけ
https://www.slideshare.net/hamayanhamayan/unity-54349052

バイト型配列を文字列に変換する
※他の文字コードへの変換の仕方とかも載ってる、ここに辿り着けなかったら死んでた
https://dobon.net/vb/dotnet/string/getencoding.html

第10章 モジュールモード
※Juliusのモジュールモードについて書かれておりどんな情報が送られているか参考になった
https://julius.osdn.jp/juliusbook/ja/desc_module.html