javascript - 数据更改时停止播放音频

标签 javascript firebase audio firebase-realtime-database

我创建简单的addEventListener音频,这个想法是如果我的温度超过 40 摄氏度,声音就会播放,如果低于 40 摄氏度,它就会停止。但是,当我尝试运行时,它会播放多次。例如,如果 12:12:12 我的温度为 41,而 12:12:13 我的温度为 50,它将播放两次音频。如何一次只播放一个音频?当温度低于 40 C 时,我如何暂停或停止我的音频?
我结合了这个 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);
    });
});

最佳答案

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

关于javascript - 数据更改时停止播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353593/

相关文章:

javascript - Masonry 的加载问题

iOS Unity Firebase Messenger Xcode 编译错误 : FIRDynamicLinks

javascript - Android上的Javascript音频播放已静音

ios - 使用 Swift 录制输出音频

javascript - 如何在 Ajax 成功设置中填充 Span 元素

javascript - 如何在表头和行中显示嵌套的 JSON 值

javascript - 如何使用 Firebase Modular SDK V9 增加 Firestore 中的数据字段?

ios - 如何检查 firebase 子节点的特定值(UID)?

android - 在Android中捕获音频或提供对麦克风的访问

javascript - 从未隐藏的下拉列表中获取值