2017-07-08 15 views
0

我想讓我的小項目像AI,我的意思是我有一些音頻文件作爲數組。我使用annyang API作爲語音命令來開始運行程序。第一個音頻文件播放完畢後。程序暫停。我會說一些句子,直到程序檢測到我的聲音3秒(甚至更長)。它將播放第二個音頻文件,然後再次暫停。該程序將循環直到所有音頻文件播放完畢。無論如何要做到這一點?如何檢測用戶沒有語音並運行Html5和Javascript中的下一個音頻文件

這是我的代碼到目前爲止。

<script>       
     if (annyang) 
     { 

      var commands = { 

      '1': function() 
      { 
       var playList = ["1_hello", "2_how_old", "3_what_did_you_make"] 

       var dir = "sound/"; 
       var extention = ".wav"; 
       var index = 1; 
       var count = 4; 

       var agent = navigator.userAgent.toLowerCase(); 

       if(agent.indexOf('firefox') != -1 || agent.indexOf('opera') != -1) 
        { 
         extention = ".wav"; 
        } 

       audio = new Audio(); 

       audio.src = dir + playList[0] + extention; 
       audio.load(); 
       setTimeout(function(){audio.play();}, 1000); 

       audio.onended = function() 
       { 
        if(index < playList.length) 
        { 
          audio.src = dir + playList[index] + extention; 
          audio.load(); 
          setTimeout(function(){audio.play();}, 1000); 
          index++; 


        } 
       } 

       audio.loop = false; 
      } 
     }; 

     annyang.debug(true); 

     annyang.addCommands(commands); 

     } 

    </script> 

我已經找到了visualizing sound可能做到這一點,但我不知道怎麼樣。

我一直在爲此奮鬥一週。並不能真正找到解決方案。我也對jQuery開放。先謝謝你。

+0

你的問題是什麼? –

+0

謝謝你的回覆。我的問題是,無論如何,我可以讓我的程序在播放第一個音頻文件3秒後檢測到沒有聲音,然後播放第二個音頻文件? – Johnny

+0

你是什麼意思檢測到沒有聲音?您是否嘗試從麥克風讀取音頻,或者您是否嘗試檢測音頻文件是否已停止播放3秒? –

回答

1

您可以使用annyang.addCallbackannyang.addRemoveback添加或刪除事件回調annyang火災。

根據API文檔,我們大概在intested事件是soundstarthttps://github.com/TalAter/annyang/blob/master/docs/README.md

soundstart - 只要任何聲音(可能是語音)已經檢測 觸發。這將在每次語音識別開始時觸發一次。

當這個事件被觸發時,我們可以添加或刪除回調函數。

何時可以跟蹤何時發生這些事件,並執行邏輯播放歌曲,如果超過3秒鐘過去了。

這是一些基準僞碼。我沒有麥克風,所以我可以測試。

var monitorId=0; 
function monitorSound() 
{ 
    if(monitorId&& monitorId>0) return; 
    monitorId=window.setInterval(trackSound,1000); 
} 
var lastSound= new Date(); 
function trackSound() { 
    var now = new Date(); 
    if (now-lastSound)>3000) 
    { 
     stopListening(); 
     playNextAudio(); 
     return; 
    } 
} 

function startListening() { 
    annyang.addCallback('startsound', onSoundHeard); 
} 
function stopListening() 
{ 
    // stop the loop tracking when the last sound was heard. 
    window.clearInterval(monitorId); 
    monitorId=0; 
    // Remove onSoundHeard from being called on start: 
    annyang.removeCallback('startsound', onSoundHeard); 
} 

var playList = ['mydir/mysong1.wav','mydir/mysong2.wav','mydir/mysong2.wav']; 
var audioIndex=0; 
function playNextAudio(){ 
    if(index==playList.length-1) return; -- we have played all audio 
    // play the next audio 
    audio = new Audio(); 
    audio.src = playList[index++]; 
    audio.load(); 
    setTimeout(function(){audio.play();}, 1000); 

    audio.onended = startListening 

} 
function onSoundHeard() { 
    lastSound= new Date(); 
} 
+0

謝謝亞歷山大。現在我遇到了一個問題,它不會聽任何語音命令,它會根據您的僞代碼自動播放第一個音頻。我試圖弄清楚。如果我有更多問題,我會讓你知道。感謝大提示。 – Johnny

+0

亞歷山大,我還有一個問題。你介意看看嗎? https://stackoverflow.com/questions/45094342/how-to-make-annyang-detect-no-sound-for-3-seconds-or-longer-then-start-next-aud謝謝 – Johnny

相關問題