はじめに
v8 を利用した C++ から JavaScript へクラスを簡単にエクスポートするヤツ作ってみた - 凹みTips にて作った C++ クラスを JavaScript に持っていくヤツをちょっと改良しました
create_context とか明示的にやらなくても良いようになってます。HandleScope がメンバ変数になってるとか色々イケてないところはまだ沢山ありますが…。
これを使って Julius、iRemocon、OpenJTalk を JavaScript から制御できるようにしました。
できるようになったこと
JavaScriptからこんなことが出来るようになりました。
function test() { print("this is test."); } var mei = new OpenJTalk(); mei.init("data/mei_normal", "openjtalk/open_jtalk_dic_utf_8-1.05"); var ir = new iRemocon(); ir.connect('192.168.0.7', 51013); Julius.init("./data/setting.jconf"); Julius.onSpeechReady = function(){ print("onSpeechReady"); }; Julius.onSpeechStart = function(){ print("onSpeechStart"); }; Julius.onResult = function(result){ print("onResult"); if (/テレビ.*?つけ/.test(result)) { mei.talk("テレビをつけまーす"); ir.send(1); } }; Julius.start();
これで「テレビをつけて」と喋ると「テレビをつけまーす」といってテレビがつきます。
色々な制御が大分楽に出来るようになりました。上記例では簡単なことしかしていませんが、XMLのような静的な設定ファイルという形だけでは表現できなかったことが色々出来るようになると思います。他にも機械学習(Juliusの認識結果をOLLでオンライン学習させてみたら結構良かった - 凹みTips)や、日本語から読みへの変換(ICU + Mecab で文章をローマ字の読みに変換 - 凹みTips)辺りをポーティングして Julius の設定ファイルを簡単に書けるようにすれば…と色々やっていけば面白いお部屋が出来そうです。
どうやって C++ から JavaScript へクラスをポーティングしているかは、
あたりを見ていただければ分かると思います。
今後の展望
今回の内容は使わなくなるかもしれないですが、次は node.js のアドオンとしてこういった Julius や OpenJTalk を作って行きたいです。そうすれば問いかけて Twitter の内容や天気を喋ってもらったり、センサ系をつなげれば温度教えてくれたり…、な部屋が簡単に作れる気がします。というようなアドオンや JavaScript を共有するスペース作れば、世の中幸せにならないですかねー、とかごにょごにょ考えたり。