#osc14do 、へいざ参戦
raspberry pi + pifaceで『電気をつけて』、『飛べ鬼奴』、『電気をけして』の連続技ができるか(^o^)丿
http://www.pepolinux.com/
x-webkit-speechが使えない事でhttp://www.ospn.jp/osc2014-do/が危うかったけど、google様にお願いしてやっと出来たよ
var recognition = new webkitSpeechRecognition();を使うだって
それと、x-webkit-speechは認識の度にマイクアイコンをクリックせなあかんかったけど
webkitSpeechRecognitionは、
recognition.continuous = true; とすることで連続認識が可能になっている、つまり
『電気をつけて』、『飛べ鬼奴』、『電気をけして』など連続技ができるようになったと言う事
苦労したけど、サービスで、javascriptの一部を掲載しておこうと
var recognition = new webkitSpeechRecognition();
var recognition_state = "停止中"
var recognizing = false;
//音声認識を開始させる
function startWebVoiceRecognition() {
if (!('webkitSpeechRecognition' in window)) {
alert("Sorry, your Browser does not support the Speech API");
}
else {
if (recognizing === false) {
var voice_lang_val = $("#voice_lang").val();
if (voice_lang_val == "en") {
recognition.lang = "en-US";
}
else {
recognition.lang = "ja-JP";
}
}
recognition.continuous = true;
//中間結果処理しない
recognition.interimResults = false;
recognition.start();
recognizing = true;
recognition_state = "お話下さい";
initWebVoice(recognition_state);
}
}
//話し声の認識中
recognition.onsoundstart = function(){
if (recognizing === false) {
recognition.stop();
recognition_state = "停止処理中";
}
else {
recognition_state = "認識中";
}
$("#recognition_state").text(recognition_state);
}
//何らかのエラー
recognition.onerror= function(){
recognition.stop();
recognizing = false;
recognition_state = "停止中";
$("#recognition_state").text(recognition_state);
}
//認識が停止
recognition.onsoundend = function(){
recognition.stop;
recognizing = false;
recognition_state = "停止中";
$("#recognition_state").text(recognition_state);
}
recognition.onresult = function(event){
//認識終了イベント
var results = event.results;
var results_voice = "";
recognition_state = "処理中";
$("#recognition_state").text(recognition_state);
for (var i = event.resultIndex; i<results.length; i++){
results_voice = results_voice + (results[i][0].transcript);
}
var voice_mail_val = $("#voice_mail").val();
var voice_lang_val = $("#voice_lang").val();
if (recognizing === false) {
recognition_state = "停止処理中";
initWebVoice(recognition_state);
}
else {
if (voice_lang_val != "en") {
$("#voice_sel").html('音声で出力制御と画像送信します<input id="voice_val" type="text" style="width:120px;" NAME="voice_val" VALUE="' + results_voice + '" onkeydown="if(event.keyCode == 13) update_do(\'voice_sel\')" placeholder="コマンド" autofocus /><SELECT NAME="voice_lang" id="voice_lang"><OPTION VALUE="ja" SELECTED>日本語<OPTION VALUE="en">英語</SELECT>画像送信用メール:<input type="text" style="width:140px;" id="voice_mail" NAME="voice_mail" VALUE="' + voice_mail_val + '">');
}
else {
$("#voice_sel").html('音声で出力制御と画像送信します<input id="voice_val" type="text" style="width:120px;" NAME="voice_val" VALUE="' + results_voice + '" onkeydown="if(event.keyCode == 13) update_do(\'voice_sel\')" placeholder="コマンド" autofocus /><SELECT NAME="voice_lang" id="voice_lang"><OPTION VALUE="en" SELECTED>英語<OPTION VALUE="ja">日本語</SELECT>画像送信用メール:<input type="text" style="width:140px;" id="voice_mail" NAME="voice_mail" VALUE="' + voice_mail_val + '">');
}
update_do("voice_sel");
setTimeout(function(){
recognition_state = "お話下さい";
$("#recognition_state").text(recognition_state);
},9000);
}
}
//音声認識を終了させる
function stopWebVoiceRecognition() {
if (recognizing === true) {
recognition_state = "停止処理中";
recognition.stop;
recognizing = false;
initWebVoice(recognition_state);
}
else {
recognition_state = "停止中";
$("#recognition_state").text(recognition_state);
}
}
function initWebVoice(state) {
var voice_mail_val = $("#voice_mail").val();
var voice_lang_val = $("#voice_lang").val();
if (voice_lang_val != "en") {
$("#voice_sel").html('音声で出力制御と画像送信します<input id="voice_val" type="text" style="width:120px;" NAME="voice_val" VALUE="" onkeydown="if(event.keyCode == 13) update_do(\'voice_sel\')" placeholder="コマンド" autofocus /><SELECT NAME="voice_lang" id="voice_lang"><OPTION VALUE="ja" SELECTED>日本語<OPTION VALUE="en">英語</SELECT>画像送信用メール:<input type="text" style="width:140px;" id="voice_mail" NAME="voice_mail" VALUE="' + voice_mail_val + '">');
}
else {
$("#voice_sel").html('音声で出力制御と画像送信します<input id="voice_val" type="text" style="width:120px;" NAME="voice_val" VALUE="" onkeydown="if(event.keyCode == 13) update_do(\'voice_sel\')" placeholder="コマンド" autofocus /><SELECT NAME="voice_lang" id="voice_lang"><OPTION VALUE="en" SELECTED>英語<OPTION VALUE="ja">日本語</SELECT>画像送信用メール:<input type="text" style="width:140px;" id="voice_mail" NAME="voice_mail" VALUE="' + voice_mail_val + '">');
}
$("#recognition_state").text(state);
}
http://www.ospn.jp/osc2014-do/ いざ参戦へ
pepoと
以前だったらinputフィールドでマイクのアイコンが表示されて、クリックして音声入力が出来ていたのに
<input type="text" style="width:150px;" id="voice_val" NAME="voice_val" VALUE="" placeholder="コマンド" x-webkit-speech autofocus onwebkitspeechchange="update_do('voice_sel');" />
こんな感じで音声認識データを拾えてたのに
chromeのデベロッパーツールのコンソールにはこんなようなメッセージ
The 'x-webkit-speech' input field attribute is deprecated. Please use the JavaScript API instead.
http://www.pepolinux.com/
pepoと