【问题标题】:How to play a sound on a certain condition?如何在特定条件下播放声音?
【发布时间】:2019-09-30 23:14:38
【问题描述】:

我正在制作一个 Web 服务器来输出网站上图形的压力值。如果压力太低/太高,我想播放声音警告用户。我似乎找不到这样做的方法,因为我有一个独特的问题:我的 html 代码中必须有<meta http-equiv="refresh" content="1" />。这当然每秒刷新一次页面,所以即使我有一个按钮让用户在压力太低时单击第一次,页面也会立即重新加载,并且我会在控制台中收到“Uncaught (in promise) DOMException”下次应该播放音频。这是我到目前为止的代码,已缩短以显示必要的部分:

HTML:

<audio id="alert_sound" controls>
  <source src="chime.mp3" type="audio/mp3">
  <source src="chime.ogg" type="audio/ogg">
</audio>

Javascript:

var arduino = [2.11,2.07,2.06,08,1.82,2.00,2.13,1.85,2.15,1.73]
var sound = document.getElementById("alert_sound");
if (Math.min(...arduino) < 5) {
    const playPromise = sound.play();
    if (playPromise !== null) {
        playPromise.catch(() => { sound.play(); })
    };

我在其他地方找到了 js 的最后 4 行作为我认为可行的答案,但结果也没有结果。

【问题讨论】:

  • 您如何以及从何处获得压力值?我建议你忘记刷新网页的 http-equiv 方法,而是使用 ajax 调用来更新内容。
  • @KostasX javascript 文件的第一行使用 python 更新(覆盖),从 Arduino 串行监视器获取值。由于我对ajax一无所知,ajax调用会用javascript编写吗?
  • 是的,您需要进行 ajax 调用,例如使用 JS fetch() API 对某种已更新的源进行调用。您可以获取使用 Python 更新的页面,也可以提供一个 JSON 端点(同样在 Python 中),它将以 JSON 格式提供压力数据。在 py 中实现后者的一种简单方法是使用 Flask 之类的框架。
  • 您甚至可以使用 jQuery(一个流行的 JS 库)的 load() 方法来加载页面数据。参考:geeksforgeeks.org/jquery-load-with-examples
  • @warren 你找到答案了吗?

标签: javascript html5-audio


【解决方案1】:

这是因为 Chrome 的新音频政策。

正如您在下面的示例中看到的那样,直到您单击那个无意义的 click me 按钮,音频才会真正开始播放。谷歌浏览器的新音频播放政策规定,用户首先必须与文档交互才能播放音频。阅读更多关于它的信息here。

var sound = document.getElementById("sound");

setInterval(() => sound.play(), 3000)
<audio id="sound" controls>
   <source src="https://www.w3schools.com/jsref/horse.ogg" type="audio/ogg">
</audio>    

<button>click me</button>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多