首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >干扰同一页面的多个音频元素

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

Stack Overflow用户
提问于 2021-12-13 08:57:23
回答 1查看 66关注 0票数 0

我有一个带有多个音频气泡的webapp应用程序,但播放一个音频泡会播放来自错误音频泡的音频。我用的是:this.audio = new Audio(url)。他们在某种程度上干涉。如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2021-12-14 01:07:10

确保所有音频对象都可以彼此访问,并在启动之前暂停它们。

代码语言:javascript
运行
复制
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
}
代码语言:javascript
运行
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70332041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档