HTML5音声認識APIを試して、画面に表示された内容をログに記録しています。他の単語を拾うために最初に言わなければならないキーワードがあるので、それはAppleのSiriのように機能します。「OK、Google」と言うと、さらに2つの単語を聞き取り、それを聞くと画面に出力します。コードの動作は次のようになります。
現時点では、最初の関数しか終了できず、両方のifステートメントを終了することはできません。「Finished」という言葉を言っても、「15」または「30」と言って画面に印刷することはできますが、「Finished」と言った後、この2つの数字を画面に印刷することはできません。 。2つの数字を言う前に、もう一度「OK、Google」と言わなければならないようにしてください。
これがコードです、誰かが助けてくれることを願っています。前もって感謝します。
recognition.onresult = function(event){
var resultsLength = event.results.length -1 ;
var ArrayLength = event.results[resultsLength].length -1;
var Word = event.results[resultsLength][ArrayLength].transcript;
console.log(Word);
if (Word.indexOf('okay', 'google') != -1) {
test.style.borderColor = "white";
recognition.onresult = function(event){
var resultsLength = event.results.length -1 ;
var ArrayLength = event.results[resultsLength].length -1;
var Word = event.results[resultsLength][ArrayLength].transcript;
console.log(Word);
document.getElementById('test').value = Word;
if (Word.indexOf('15') != -1) {
test.innerHTML = '15';
}
if (Word.indexOf('30') != -1) {
test.innerHTML = '30';
}
if (Word.indexOf('finished') != -1) {
test.style.borderColor = "black";
return;
}
}
}
}
投稿したコードの8行目で、ハンドラー関数をrecognition.onresultに割り当てます。
recognition.onresult = function(event){
// content removed
}
問題は、「終了」という言葉を聞いたときに、このハンドラーをまったく削除または置換しないことです。次回イベントが発生すると、まったく同じハンドラーが再び起動し、単語を出力します。
「finished」という単語が聞こえたら、onresultハンドラーを別の値に設定する必要があります。
if (Word.indexOf('finished') != -1) {
recognition.onresult = function(event){
// do something different now that we've heard "Finished"
}
test.style.borderColor = "black";
return;
}
説明した内容から、最初の関数(1行目で割り当てたコード全体)をハンドラーに再度割り当てる必要があることに注意してください。これは非常に複雑で困難になり始めています。これは、一方が他方の内側にネストされた2つの無名関数を処理していて、内側の関数内から外側の関数を割り当てたいためです。
この場合、これらの無名関数を分割して名前を付け、recognition.onresultに繰り返し割り当て/再割り当てできるようにすると、コードがはるかに読みやすくなります。
これは完全な実装ではなく、以下をテストしていませんが、以下が意味をなすかどうかを確認してください。
recognition.onresult = listenForOkayGoogle;
function listenForOkayGoogle(event) {
var Word = ...;
if (Word.indexOf('okay', 'google') != -1) {
recognition.onresult = listenForNumbersUntilFinished;
}
}
function listenForNumbersUntilFinished(event) {
var Word = ...;
if (Word.indexOf('15') != -1) {
// print it
}
if (Word.indexOf('30') != -1) {
// print it
}
if (Word.indexOf('finished') != -1) {
recognition.onresult = listenForOkayGoogle;
}
}
まず、listenForOkayGoogleをハンドラーとして割り当てます。イベントが発生するたびに、このハンドラーが起動し、魔法の言葉の1つが話されたかどうかを確認し、話された場合は、ハンドラーをlistenForNumbersUntilFinishedに置き換えます。これで、イベントが発生するたびに、そのハンドラーが代わりに起動します。単語が関連する番号の1つと一致する場合は、それを印刷します。代わりに「finished」という単語と一致する場合は、listenForOkayGoogleハンドラーを再度割り当てます。ここでは、実質的に戦略パターンを使用しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加