Согласно документации Mozzila :
Для непрерывного распознавания начальные или конечные пробелы будут включены в случае необходимости , так что объединение последовательных SpeechRecognitionResults приводит кправильная стенограмма сеанса.
Это соответствует точно , что вы описали.Поскольку ваша сессия по распознаванию речи является непрерывной (как видно из ses.continuous = true
), происходит следующее: когда вы произносите любое слово в первый раз, транскриптор получит слово правильно.Но когда он распознает следующее слово, будет добавлен начальный пробел.Вы, вероятно, неправильно скопировали вывод своей консоли, который должен был выглядеть так:
good 1
good 2
OK !
LED OK
bad 1
^ leading space here
Действительно, " bad"
не равно "bad"
.Вот почему строка не прошла условие.Чтобы решить эту проблему, просто наберите trim вашей строки:
var v;
function test() {
var ses = new webkitSpeechRecognition();
ses.lang = "En"
ses.continuous = true;
ses.start();
ses.onresult = function(event)
if (event.results.length > 0) {
sonuc = event.results[event.results.length - 1];
document.querySelector("input").value = sonuc[0].transcript;
v = sonuc[0].transcript.trim(); // <-- trim here
console.log(v + " 1");
if (v == "good") {
switchLED('on');
console.log(v + "2");
console.log("OK !");
console.log("LED ok");
}
if (v == "bad") {
switchLED('off');
console.log(v + "2");
console.log("OK !");
console.log("LED off");
}
}
}
Тогда ваш код должен работать как положено.Надеюсь, это поможет!