Надеюсь, я понял вашу проблему, и, насколько я понимаю, у вас, похоже, есть проблема с правильным извлечением результатов распознавания веб-речи на мобильных устройствах.
Родное распознавание речи, прежде всего chrome /Android-браузеры на Android обрабатывают результаты распознавания речи немного иначе, чем их настольные версии.Результаты распознавания, где isFinal
соответствует действительности, обычно представляют собой законченные предложения, распознаваемые мобильными браузерами, где, как, например, в настольном Chrome, даже слова возвращаются с isFinal==true
.
Вот упрощенная версия того, что лучше всего сработало для меня.
var mobile=false;
if(/*Use preferred method to detect mobile device*/){
mobile=true;
}
Recognizer.onresult = function(event){
var interimTranscripts = '';
var finalTranscripts = '';
for(var i = event.resultIndex; i < event.results.length; i++){
var transcript = event.results[i][0].transcript;
if(event.results[i].isFinal){
if(mobile){ //if running on a mobile device
finalTranscripts = transcript;
}else{
finalTranscripts += transcript;
}
}else{
if(mobile){ //if running on a mobile device
interimTranscripts = transcript;
}else{
interimTranscripts += transcript;
}
}
}
if(finalTranscripts){
target.value = finalTranscripts; //the output
if(!mobile){
Recognition.stop();
}
}
else if(interimTranscripts){
target.value = interimTranscripts + finalTranscripts;
}
};