我有一个带有多个音频气泡的webapp应用程序,但播放一个音频泡会播放来自错误音频泡的音频。我用的是:this.audio = new Audio(url)
。他们在某种程度上干涉。如何解决这个问题?
发布于 2021-12-14 01:07:10
确保所有音频对象都可以彼此访问,并在启动之前暂停它们。
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>
https://stackoverflow.com/questions/70332041
复制相似问题