基于Chrome WebKit的JavaScript语音转文字:如何针对特定关键词输出控制台日志?
解决Chrome WebKit语音识别关键词检测的代码位置问题
嘿,我来帮你搞定这个!你写的关键词检测代码逻辑没问题,核心是要把它放在语音识别返回结果的事件处理函数里——也就是speechRecognizer.onresult这个回调中,因为每次语音识别出内容时,这个函数都会被触发,这里能拿到最新的识别文本。
具体修改方案
你可以根据需求选择以下任意一个位置放置检测代码:
实时检测每一段识别内容(含临时结果)
在循环处理每个识别片段的环节加入检测,这样哪怕是还没确定的临时识别内容里有关键词,也会立刻输出日志:speechRecognizer.onresult = function(event){ var interimTranscripts = ''; for(var i = event.resultIndex; i < event.results.length; i++){ var transcript = event.results[i][0].transcript; // 注意:replace方法不会修改原字符串,需要重新赋值才生效 transcript = transcript.replace("\n", "<br>"); // 检测当前识别片段是否包含关键词 if(transcript.includes('?')){ console.log('Yes,it works'); } if(event.results[i].isFinal){ finalTranscripts += transcript; }else{ interimTranscripts += transcript; } } r.innerHTML = finalTranscripts + '<span style="color:#999">' + interimTranscripts + '</span>'; };仅在最终确定的结果中检测
如果你只想在识别结果完全定型(不再更新)时触发日志,就把检测代码放在event.results[i].isFinal的判断分支里:if(event.results[i].isFinal){ finalTranscripts += transcript; // 检测已确认的最终结果是否包含关键词 if(finalTranscripts.includes('?')){ console.log('Yes,it works - final result confirmed'); } }检测当前页面显示的全部文本
要是想检查当前页面上展示的所有识别内容(最终结果+临时结果),可以在更新完页面内容后加入检测:r.innerHTML = finalTranscripts + '<span style="color:#999">' + interimTranscripts + '</span>'; // 检测拼接后的完整显示文本 if((finalTranscripts + interimTranscripts).includes('?')){ console.log('Yes,it works - current displayed text has keyword'); }
小提醒
你原代码里的transcript.replace("\n", "<br>");其实没有生效,因为JavaScript的字符串是不可变的,replace方法会返回新字符串,所以要改成transcript = transcript.replace("\n", "<br>");才能真正替换换行符。
内容的提问来源于stack exchange,提问作者Daniel Dalan
相关产品推荐
相关产品推荐

