0

我正在尝试使用 Web Speech API 创建一个 Web 应用程序,用户在开始时单击一个按钮来开始语音录制。我试图让它在用户停止说话时自动停止,然后我想使用谷歌翻译 API 来翻译用户的语音。我已经包含了我遇到问题的 Web Speech 部分的代码。

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+ ?');
}
4

1 回答 1

1

关于语音识别:

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

recognition.continuous = false;

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

此外,您的点击处理程序代码似乎很奇怪:Web Speech API 定义了start()and stop(),但您似乎使用speechstart()and speechend()...我建议您使用

recognition.start()

recognition.stop()

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

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

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

有关更多详细信息,请查看Web Speech API

于 2014-11-21T11:19:39.180 回答