多个音频元素干扰同一页面

Posted

技术标签:

【中文标题】多个音频元素干扰同一页面【英文标题】:Multiple Audio elements interfering on the same page 【发布时间】:2022-01-16 18:30:17 【问题描述】:

我有一个带有多个音频气泡的 web 应用,但播放一个音频气泡会播放来自不正确音频气泡的音频。我正在使用:this.audio = new Audio(url)。他们以某种方式干扰。如何解决?

【问题讨论】:

【参考方案1】:

确保所有音频对象都可以相互访问,并在开始之前暂停它们。

const audioPromises = [
  audioFromUrl('https://opus-bitrates.anthum.com/audio/hyper/music-96.opus'), 
  audioFromUrl('https://opus-bitrates.anthum.com/audio/music-96.opus'),
]

document.querySelectorAll('.play').forEach(el => el.addEventListener('click', () => 
  play(parseInt(el.dataset.idx))
))

document.querySelectorAll('.stop').forEach(el => el.addEventListener('click', stopAll))

async function play(idx) 
  const audio = await audioPromises[idx]
  await stopAll()
  audio.play()


function stopAll() 
  return Promise.all(audioPromises)
    .then(audios => audios.map(audio => audio.pause()))



async function audioFromUrl(url) 
  const arrayBuffer = await (await fetch(url)).arrayBuffer()
  const audio = new Audio()
  audio.src = URL.createObjectURL(
    new Blob([arrayBuffer])
  )
  return audio
<button class="play" data-idx="0">Play 1</button>
<button class="play" data-idx="1">Play 2</button>
<br /><br />
<button class="stop" data-idx="1">Stop All</button>

【讨论】:

以上是关于多个音频元素干扰同一页面的主要内容,如果未能解决你的问题,请参考以下文章

vue中同一个页面多次使用同一个组件的相互干扰问题

JS怎么只用一个循环给页面多个元素赋值

同一页面上的Jplayer音频和视频不起作用

css 修复与固定背景附件相关的问题,干扰页面上的其他固定元素...创建新图层。链接到更多信息:h

jqGrid - 同一页面上的多个网格仅显示一个寻呼机

如何在同一个html文件中为多个页面使用相同的标题