2017-07-08 4 views
0

AIのような小さなプロジェクトを作ろうとしています。オーディオファイルを配列として持っています。そして私はannyang APIを音声コマンドとして使用してプログラムの実行を開始します。最初のオーディオファイルの再生が終了した後。プログラムが一時停止します。そして、プログラムが3秒間(あるいはそれ以上)私の声を検出しなくなるまで、いくつかの文章を言います。 2番目のオーディオファイルが再生され、再び一時停止します。このプログラムは、すべてのオーディオファイルが再生されるまでループします。これを行うためにとにかくありますか?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を発見したが、私はどのようにわかりません。

私は1週間これに苦しんでいます。そして、実際にはこれに対する解決策を見つけることはできません。私はjQueryにもオープンしています。前もって感謝します。

+0

ご質問はありますか? –

+0

返信いただきありがとうございます。私の質問は、私のプログラムでは、最初のオーディオファイルを再生してから約3秒間音声が検出されないようにしてから、2番目のオーディオファイルを再生できますか? – Johnny

+0

声が出ないとはどういう意味ですか?マイクからオーディオを読み込もうとしているのですか、またはオーディオファイルの再生が3秒間停止したかどうかを検出しようとしていますか? –

答えて

1

annyang.addCallbackannyang.addRemovebackを使用して、イベントannyangのコールのコールバックを追加または削除できます。

APIドキュメントによると、私たちは、おそらくにintestedされているイベントはsoundstarthttps://github.com/TalAter/annyang/blob/master/docs/README.md

soundstartでは - とすぐに任意の音(おそらく音声が) を検出されているように発生します。これは、音声認識が開始されるたびに1回発射されます。

このイベントが発生すると、コールバックを追加または削除できます。

これらのイベントがいつ発生したかを追跡し、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

関連する問題