2014-10-05 57 views
0

我正在尝试使用Web Speech API创建一个Web应用程序,其中在开始时用户单击一个按钮开始语音记录。我试图在用户停止说话时自动停止,然后我想使用Google Translate API来翻译用户的语音。我已经包含了我遇到问题的Web Speech部分的代码。JavaScript Web Speech API何时使用.start()而不是.speechstart()?

if (window.webkitSpeechRecognition) { 
    recognition = new webkitSpeechRecognition(); 
    recognition.continuous = true; 
    recognition.interimResults = false; 
    recognition.onresult = function(event) { 
    var i; 
    return $('#transcript').text($('#transcript').text() + ((function() { 
     var _i, _ref, _ref1, _results; 
     _results = []; 
     for (i = _i = _ref = event.resultIndex, _ref1 = event.results.length - 1; _i <= _ref1; i = _i += 1) { 
     _results.push(event.results[i][0].transcript); 
     } 
     return _results; 
    })()).join('')); 
    }; 

    $('#startStopButton').on('click', function() { 
    if (this.innerText === 'Start') { 
     this.innerText = 'Stop'; 
     recognition.lang = 'en-AU'; 
     return recognition.speechstart(); 
    } else { 
     this.innerText = 'Start'; 
     return recognition.speechend(); 
    } 
    }); 
} else { 
    alert('Cannot access the speech recognition API. Are you using Chrome 25+ ?'); 
} 

回答

1

关于语音识别:

首先,你应该将SpeechRecognition对象的continous属性设置为false(或不将其设置为true,因为false是默认值)

recognition.continuous = false; 

(这应该能够结束语音检测,即识别器将在检测到语音结束后停止)

而且,你的点击处理程序代码似乎有些奇怪:网络语音API定义start()stop(),但你似乎使用speechstart()speechend() ......我建议,你用

recognition.start() 

recognition.stop() 

这些功能也没有返回值,所以不需要使用return recognition.start()

为了让您的按钮标签保持同步,我建议添加处理程序onendonerror

recognition.onend = function(event){ 
    $('#startStopButton').text('Start'); 
}; 

对于更多的细节来看看Web Speech API