2014-04-03 36 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