2014-10-05 15 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