【问题标题】:How to play sound every second in JavaScript without a trigger [duplicate]如何在没有触发器的情况下在 JavaScript 中每秒播放声音 [重复]
【发布时间】:2021-10-06 21:16:07
【问题描述】:

我想每秒播放一次音频,因为它是时钟,所以想插入滴答声。

有什么方法可以在没有触发器的情况下实现这一点,因为时钟应该始终是自动的。

下面是触发和运行的代码:

<audio id="audiotag1" src="Sounds\clock tick.mp3" preload="metadata" controls></audio>
<button onclick="trigger()">Start</button>
function trigger(){
setInterval(clockRunner, 1000);
  function clockRunner(){
    var audioElement = document.getElementById('audiotag1');
    audioElement.play();
  }
}

这是没有触发器但没有运行的代码:

setInterval(clockRunner, 1000);

function clockRunner() {
  var audioElement = document.getElementById('audiotag1');
  audioElement.play();
}
&lt;audio id="audiotag1" src="Sounds\clock tick.mp3" preload="metadata" controls&gt;&lt;/audio&gt;

错误显示是:
未捕获的 DOMException: play() 失败,因为用户没有先与文档交互。

Here is the question 指的是问题(错误),但提供的解决方案是针对视频的,它们可以静音播放并具有视觉内容

提前感谢您的帮助

【问题讨论】:

  • 尝试从按钮单击处理程序调用setInterval()。您不能在页面加载后播放音频,这是有充分理由的。
  • 是的,您是对的,但正如您所知,当我们在 YouTube 1 中打开任何频道时,视频总是播放音频。无论您是使用书签打开还是直接在新窗口中打开或隐身,它始终会自动播放音频。知道 YouTube 出类拔萃

标签: javascript html


【解决方案1】:

您不能同时使用 document.getElementById(音频元素)和 js 来仅使用它和 .play,这不起作用,但这应该

function play() {
var audio = new Audio('Sounds\clock tick.mp3');
audio.play();
}
setInterval(play, 1000)

在字符串中只使用你的源。 :)

【讨论】:

  • 第一个代码运行正常,但问题出在第二个,我已经尝试过你提到的方法
【解决方案2】:

我想说这值得一试

<audio id="audiotag1" preload="metadata" controls>
<source src="Sounds\clock tick.mp3" type="audio/mpeg"> 
</audio>
<button onclick="triger()">Start</button>

还想提一下你有一个类型,上面写着 audioElement.play 您放置了一个额外的空间,使其成为可能引发错误的 audioElement .play。

【讨论】:

    【解决方案3】:

    似乎有一个相关的帖子刚刚弹出。 (资源: https://stackoverflow.com/a/62720714/9303612)

    几周前,我尝试了您打算做的事情,但是, 经过大量研究,我意识到现在这几乎是不可能的。为了 Chrome 中的示例(我不知道是否也在其他浏览器中)你不能 自动播放声音/视频,除非满足以下任一条件:

    • 用户与您的网站互动(点击您网站的任何部分)。
    • 用户将您的网站添加到主屏幕(移动)。
    • 用户已超过媒体交互指数 (MEI) 阈值。
    • 您的网站在 Google 自动播放白名单中(例如 Youtube)。

    【讨论】:

    • 哦,我没有注意到有人在我发布之前发布了与此等效的答案:P 如果我发现新的东西,我会更新我的答案
    • 我尝试了这种方法,但如前所述,必须使用触发器,并且音频在第一部分运行良好(带触发器)
    • 我更新了我的答案。根据this other post,以及该帖子上其他人所说的,这是不可能的(出于安全原因?)。几年前这是可能的!
    • 我想你想说的是用户体验而不是安全性,因为触发后它正在播放但想在没有它的情况下运行,这将是糟糕的用户体验。
    • 是的!这更有意义:)
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    相关资源
    最近更新 更多