2017-07-27 13 views
0

私は単純なaddEventListenerオーディオを作成します.40C以上の私の一時的な音が再生され、40C未満の場合は停止します。しかし、私が走ろうとすると、それは複数の時間を演じます。たとえば、12:12:12 my temp 41、12:12:13 my tempが50の場合、オーディオは2回再生されます。一度に1つのオーディオしか再生できないのですか?そして、一時的に40℃以下の時に私のオーディオを一時停止または停止する方法はありますか? 私は データが変更されたときに再生するオーディオを停止する

window.addEventListener('load', function() { 
 
    firebase.database().ref('sensor').limitToLast(1).on('child_added', function(data) { 
 
     var sensor = data.val(); 
 
     console.log("suhu gauge is :"+sensor.temp) 
 
     if (sensor.temp > 40) { 
 
      myAudio = new Audio('audio/alarm.mp3'); 
 
      myAudio.addEventListener('ended', function() { 
 
       this.currentTime = 0; 
 
       this.play(); 
 
      }, false); 
 
      myAudio.play() 
 
     } 
 
     else if (sensor.temp < 40){ 
 
      myAudio = new Audio('audio/alarm.mp3'); 
 
      myAudio.addEventListener('ended', function() { 
 
       this.currentTime = 0; 
 
       this.pause(); 
 
      }, false); 
 
     } 
 
     mydata.setValue(0, 1, sensor.temp); 
 
     chart.draw(mydata, myoptions); 
 
     console.log(sensor.temp); 
 
    }); 
 
});

+0

"C"で摂氏を意味しますか? – Luca

+0

なぜ 'ended'イベントハンドラ内で' .play() 'をもう一度呼び出すのですか? – guest271314

+0

'terminated'ハンドラで' this.play(); 'を削除し、オーディオを一時停止したい場合は、一時的に再生する必要があるため、' temp <40' –

答えて

0

は、非同期関数の外でmyAudioendedイベントハンドラを定義しendedイベントハンドラ内からthis.play()を削除し、メディアが一時停止されているかどうかを判断するためにHTMLMediaElement.paused.endedプロパティを使用firebaseデータベースと、このaddEventListenerを組み合わせたり、再生

window.addEventListener('load', function() { 
    myAudio = new Audio('audio/alarm.mp3'); 
    myAudio.addEventListener('ended', function() { 
     this.currentTime = 0; 
    }, false); 
    firebase.database().ref('sensor').limitToLast(1).on('child_added', function(data) { 
     var sensor = data.val(); 
     console.log("suhu gauge is :"+sensor.temp) 
     if (sensor.temp > 40) { 
      if (myAudio.paused || myAudio.ended) { 
       myAudio.play() 
      } 
     } 
     else if (sensor.temp < 40) { 
      if (!myAudio.paused) { 
       myAudio.pause(); 
      } 
     } 
     mydata.setValue(0, 1, sensor.temp); 
     chart.draw(mydata, myoptions); 
     console.log(sensor.temp); 
    }); 
}); 
+0

私のコードをあなたのコードに置き換えますが、一度だけ再生して終了します、アイデアは私の古いコードと同じですが、あなたのコードに感謝します。 –

+0

'Audio'インスタンスの' .loop'プロパティを 'true'に設定しようとしましたか? – guest271314

+0

これはそうですか? :https://jsfiddle.net/adeguntoro/k80cLnao/ –

関連する問題