javascript - 如何在特定条件下播放声音?
问题描述
我正在制作一个 Web 服务器来输出网站上图形的压力值。如果压力太低/太高,我想播放声音警告用户。我似乎找不到这样做的方法,因为我有一个独特的问题:我<meta http-equiv="refresh" content="1" />
的 html 代码中必须有。这当然每秒刷新一次页面,所以即使我有一个按钮让用户在第一次压力太低时单击,页面也会立即重新加载,并且我会在控制台中收到“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 行作为我认为可行的答案,但结果也没有结果。
解决方案
这是因为 Chrome 的新音频政策。
正如您在下面的示例中看到的那样,在您单击那个无意义的单击我按钮之前,音频不会真正开始播放。谷歌浏览器的新音频播放政策规定,用户首先必须与文档交互才能播放音频。在此处阅读更多相关信息。
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>
推荐阅读
- sql - HQL 意外令牌“(”子查询选择
- javascript - 剑道图表在 X 轴上显示错误的时间数据
- c++ - 在 CListCtrl 上设置排序指示符正在清除列标题
- java - 将 xml 字符串数组中的项目添加到片段内的回收器视图中
- python - 将二维 python 列表初始化为 [[9]*3]*3 似乎会创建对同一数组的引用。这是怎么回事?
- django - Django:UserCreationForm 没有得到自定义用户类
- php - 学说:拥有的一面和相反的一面
- oracle - 在 oracle sql 中使用正则表达式从表列中搜索数据
- python - 有条件地从 Python 字典中获取值的最佳实践
- python - 如何使用搜索栏抓取有关特定产品的信息