Dim*_*ims 10 javascript android speech-recognition google-chrome webkitspeechrecognition
我发现,语音识别API会复制我的Android上的结果短语(并且不会在桌面上重复).
对于每个短语说,它返回两个结果.第一个是
第二个是
如您所见,在第二个回程中,短语是重复的,每个副本都标记为final,第二个副本超出resultIndex.在第一次回归中,只有一个副本,final它是超越的resultIndex.
我只会采取第二次回报,但问题是它发生在移动Chrome上,但不会发生在桌面上Chrome.桌面Chrome仅返回第一次返回.
所以,问题是:这是设计行为吗?然后如何区分单个最终短语,然后通常为所有计算机?
或者可能是声音回声有些错误,那么问题是如何避免/检查回声?
UPDATE
Html如下:
<input id="recbutton" type="button" value="Recognize">
<div id="output">
<div>
Initial text
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
代码如下:
var recognition = null;
var recognitionStarted = false;
var printcount = 1;
var lastPhrase = null;
$(function() {
attachRecognition();
});
$('#recbutton').click( function() {
if( !recognitionStarted ) {
recognition.start();
}
else {
recognition.stop();
}
});
function printOut(text) {
var id = 'printcount' + printcount;
printcount++;
$('#output').append(
"<div id='" + printcount + "'>" + text + "</div>"
);
$("#output").animate({ scrollTop: $("#output").prop('scrollHeight')});
return printcount;
}
function attachRecognition() {
if (!('webkitSpeechRecognition' in window)) {
$('button').prop('disabled', true);
recognition = null;
} else {
$('button').prop('disabled', false);
recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.lang = "en-US";
recognition.onstart = function(event) {
recognitionStarted = true;
printOut("speech recognition started");
};
recognition.onend = function(event) {
recognitionStarted = false;
printOut("speech recognition stopped");
};
recognition.onresult = function(event) {
var finalPhrase = '';
var interimPhrase = '';
var result;
var printcount;
for(var i=0; i<event.results.length; ++i) {
result = event.results[i];
if( result.isFinal ) {
finalPhrase = finalPhrase.trim() + ' ' + result[0].transcript;
}
else {
interimPhrase = interimPhrase.trim() + ' ' + result[0].transcript;
}
}
if( !lastPhrase ) {
printcount = printOut('');
lastPhrase = $('#' + printcount);
}
lastPhrase.html(finalPhrase.trim() + ' ' + interimPhrase.trim());
if( finalPhrase.trim() ) {
lastPhrase = null;
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
JsFiddle:https://jsfiddle.net/dimskraft/envwao8o/1/
小智 2
尝试这个:
recognition.continuous = false;
recognition.interimResults = false;
recognition.maxAlternatives = 1;
Run Code Online (Sandbox Code Playgroud)
JSFiddle: https: //jsfiddle.net/envwao8o/4/