语音识别 - 持续运行

sam*_*ime 11 javascript html5 speech-recognition html5-audio

我正在尝试使用语音识别API创建一个支持HTML5的语音控制编辑器.目前,问题是当你开始录音时,它只会持续一段时间(基本上直到用户停止说话).

我可以设置continuousinterimResultstrue,但并不把它永远记录.它仍然结束.

我也可以告诉它在结束活动期间重新开始,但随后它每次都要求许可,这是非常具有破坏性的.

有没有办法允许它连续进行而只需要询问用户一次?

Tal*_*ter 17

无论您选择哪种设置,谷歌浏览器都会在一段时间后停止语音识别引擎......没有办法绕过它.

我发现连续语音识别的唯一可靠解决方案是通过绑定到onend()事件再次启动它,正如您所建议的那样.

如果您尝试类似的技术,请注意以下事项:

  1. 如果您不使用HTTPS,系统将提示用户在每次重新启动时反复授予权限.出于这个原因以及许多其他原因,在使用语音识别时不要在HTTP上妥协.

  2. 确保你没有立即重新启动语音识别而没有一些安全措施,以确保你没有将浏览器置于无限循环中(例如,两个打开的选项卡onend(function() {restart()})可能会使浏览器崩溃,正如我在此错误报告中详述的那样) :https://code.google.com/p/chromium/issues/detail?id=296690)查看https://github.com/TalAter/annyang/blob/1ee294e2b6cb9953adb9dcccf4d3fcc7eca24c2c/src/annyang.js#L214如何我处理这个(事情.

  3. 如果它结束的原因是这样的话service-not-allowed,not-allowed 请不要自动重启或参见https://github.com/TalAter/annyang/blob/1ee294e2b6cb9953adb9dcccf4d3fcc7eca24c2c/src/annyang.js#L196

您可以在我的代码中看到我如何处理这个问题 - https://github.com/TalAter/annyang/blob/master/src/annyang.js


Ahm*_*ein 5

请尝试这段代码,我认为它可以满足您的需要:

<!DOCTYPE html>
<html>
    <head>
        <title>Speech recognition</title>
        <style>
            #result{
                border: 2px solid black;
                height: 200px;
                border-radius: 3px;
                font-size: 14px;
            }
            button{
                position: absolute;
                top: 240px;
                left: 50%;
            }
        </style>
        <script type="application/javascript">
            function start(){
                var r = document.getElementById("result");
            if("webkitSpeechRecognition" in window){
                var speechRecognizer = new webkitSpeechRecognition();
                speechRecognizer.continuous = true;
                speechRecognizer.interimResults = true;
                speechRecognizer.lang = "en-US";
                speechRecognizer.start();
                
                var finalTranscripts = "";
                speechRecognizer.onresult = function(event){
                    var interimTranscripts = "";
                    for(var i=event.resultIndex; i<event.results.length; i++){
                        var transcript = event.results[i][0].transcript;
                        transcript.replace("\n", "<br>");
                        if(event.results[i].isFinal){
                            finalTranscripts += transcript;
                        }
                        else{
                            interimTranscripts += transcript;
                        }
                        r.innerHTML = finalTranscripts + '<span style="color: #999;">' + interimTranscripts + '</span>';
                    }
                };
                speechRecognizer.onerror = function(event){
                };
            }
            else{
                r.innerHTML = "Your browser does not support that.";
            }
            }
        </script>
    </head>
    <body>
        <div id="result"></div>
        <button onclick="start()">Listen</button>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)