2014-04-03 40 views
0

我正在嘗試使用HTML5網絡語音API的語音識別。網絡語音識別代碼不抄錄語音

我不明白爲什麼這段代碼不起作用。它觸發了請求訪問麥克風的權限,但是當我說話時什麼都不會被轉錄。

當我查看控制檯時,沒有錯誤,但會觸發語音識別停止時發生的console.log。

我認爲它提前停止。

有誰知道發生了什麼,爲什麼它不工作?

這裏是JS:

這取決於webspeech.js,其中包括在的jsfiddle。

這裏是JS小提琴:http://jsfiddle.net/2sMXZ/3/

下面是實現代碼:

var reco = new WebSpeechRecognition; 
$('#mic').click(function(){ 
    $(this).toggleClass('red'); 
    reco.toggleStartStop(); 
}); 
var interim_transcript = ''; 
reco.recognition.onresult = function(event){ 
    for(var i = event.resultIndex; i<event.results.length; ++i){ 
     if(event.results[i].isFinal) reco.stop(); 
     else interim_transcript += event.results[i][0].transcript; 
    } 
} 
$('#interim_span').html(interim_transcript); 
console.log(interim_transcript); 
reco.recognition.onend = function(e){ 
    //$('#mic').removeClass('red'); 
    console.log('done'); 
} 

回答

1

首先,$( '#interim_span')HTML(interim_transcript)被稱爲每中期業績發射。

其次,當event.results [i] .isFinal爲true時,它也有結果。

嘗試

var reco = new WebSpeechRecognition; 
$('#mic').click(function(){ 
    $(this).toggleClass('red'); 
    reco.toggleStartStop(); 
}); 
var interim_transcript = ''; 
reco.recognition.onresult = function(event){ 
    for(var i = event.resultIndex; i<event.results.length; ++i){ 
     if(event.results[i].isFinal) reco.stop(); 
     interim_transcript += event.results[i][0].transcript; 
    } 
    $('#interim_span').html(interim_transcript); 
    console.log(interim_transcript); 
} 

reco.recognition.onend = function(e){ 
    //$('#mic').removeClass('red'); 
    console.log('done'); 
} 
+0

非常感謝你。我在這裏嘗試:http://jsfiddle.net/2sMXZ/11/ interim_transcript在控制檯上記錄在結尾或甚至點擊'#mic',但它沒有被寫入到interim_span的html中。任何想法爲什麼?或者我可以如何解決它? – gomangomango

+1

final_span和interim_span是結果的子項。我認爲他們被reco.statusText(「results」)取代; – emeth

+0

謝謝,現在它寫入跨度,但它重複。我怎麼才能讓它只寫一次講話,就在講完之後? http://jsfiddle.net/2sMXZ/14/ – gomangomango