1

我不确定这是否是一个错误。我尝试在开始底部制作一个均匀的“onclick”并开始听任何单词来启动程序。但是现在每次我在 3 秒后刷新页面时都会自动播放第一个音频。我做错什么了吗?任何帮助都会有所帮助。先感谢您。

<script>                          
    if (annyang) 
    {
        function playFirstAudio()
        {
            audio.src = dir + playList[audioIndex] + extention;
            audio.load();
            setTimeout(function(){audio.play();}, 3000);
        }

        var playList = ["1_hello", "2_how_old", "3_what_did_you_make"];
        var dir = "sound/";
        var extention = ".wav";

        var audioIndex = 0;
        audio = new Audio();

        //annyang.addCallback('start', playFirstAudio);

        audio.onended = playFirstAudio();

        annyang.debug(true);
    };
</script>

<div class="container">
    <button id="runProgram" onclick='annyang.start();' class="runProgrambutton">Start</button>
</div>
4

1 回答 1

0

playFirstAudio()当您尝试设置 audio.ended 回调时,您正在调用。注意:audio.ended 不是 audio.onended

audio.onended = playFirstAudio(); //<-- this is calling playFirstAudio();

您可以通过指定不带 的方法名称来分配回调函数(),如下所示:

 audio.onended = playFirstAudio;

否则,将其包装在一个匿名函数中,如下所示:

 audio.onended = function() { playFirstAudio(); };

您的按钮单击正在触发语音识别以开始。

但是当语音识别引擎听到声音时,您还需要注册一个回调来触发:

<script>  
    var audio = new Audio();                        
    if (annyang) 
    {
        annyang.addCallback('start', function() {console.log('started listening');});
        annyang.addCallback('soundstart', function {onSoundDetected();});            

        function onSoundDetected() {
            console.log('sound was detected');
            playNextAudio();
        }
        var playList = ["sound/1_hello.wav", "sound/2_how_old.wav", "sound/3_what_did_you_make.wav"];
        var audioIndex = 0;

        function playNextAudio()
        {
            audio.src = playList[audioIndex++];
            audio.load();
            audioIndex= audioIndex % playList.Length;// start at zero when we reach the end.

        }
        audio.ended = function() {playNextAudio()};
        audio.oncanplay = function() {audio.play();}
        annyang.debug(true);
    };
</script>

<div class="container">
    <button id="runProgram" onclick='annyang.start();' class="runProgrambutton">Start</button>
</div>
于 2017-07-11T06:15:58.707 回答