更改数据时停止播放音频

时间:2017-07-27 14:22:43

标签: javascript firebase audio firebase-realtime-database

我创建了简单的addEventListener音频,我的想法是,如果我的温度超过40 C,声音将播放,如果低于40 C,它将停止。但是,当我尝试跑步时,它会发挥多次。例如,如果12:12:12我的临时41和12:12:13,我的温度是50,它将播放音频两次。我如何一次只播放一个音频?当温度低于40摄氏度时,我如何暂停或停止音频停止? 我将此addEventListener与firebase数据库结合起来

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);
    });
});

1 个答案:

答案 0 :(得分:0)

在异步函数之外定义myAudioended事件处理程序,从this.play()事件处理程序中删除ended,使用HTMLMediaElement .paused.ended属性,用于确定媒体是暂停还是正在播放

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);
    });
});