JS中如何随机单独播放音频文件
How to play audio files randomly and separately in JS
我创建了一个小型 Kanye West 引述生成器,连同获取 运行dom Kanye 引述的按钮,我放入了一些音频文件来播放(只有三个 Kanye 说话的音频片段) .
我想做的是:单击按钮以显示新报价时,应播放音频(来自 3)。目前,我知道它会播放,但是所有 3 个音频文件同时播放或同时播放两个,然后在下一次单击时单独播放一个。
这是我的音频代码:
const kanyeBush = document.getElementById('bush');
const kanyeOpinion = document.getElementById('opinion');
const kanyeRobot = document.getElementById('robot');
let kanyeQuoteArray = [kanyeBush, kanyeOpinion, kanyeRobot];
const kanyeSounds = () => {
let kanyeSoundbite = kanyeQuoteArray.forEach( sound => {
sound.play();
});
let audio = new Audio(kanyeSoundbite);
audio.play();
}
然后我 运行 在我的获取代码中:
const kanyeQuote = async () => {
const kanyeResponse = await fetch(kanyeApi);
const quoteJson = await kanyeResponse.json();
const randomQuote = document.createElement('h3');
quoteBox.innerHTML = "";
randomQuote.innerHTML = quoteJson.quote;
quoteBox.appendChild(randomQuote);
kanyeBtn.classList.toggle('hidden');
newQuoteBtn.classList.toggle('hidden');
kanyeSounds();
}
newQuoteBtn.addEventListener('click',kanyeQuote);
kanyeBtn.addEventListener('click', kanyeQuote)
有什么建议吗?
您在 forEach 中为他们所有人设置了 sound.play... 这样他们就可以一起玩了。您必须指定一个您希望播放的。例如,您可以使用随机索引
const kanyeSounds = () => {
let bitIndex = Math.floor((Math.random() * kanyeQuoteArray.length))
let kanyeSoundbite = kanyeQuoteArray.forEach( (sound, index) => {
sound.pause(); // reset previous
sound.currentTime = 0; // reset position
if(index === bitIndex) sound.play();
});
let audio = new Audio(kanyeSoundbite);
audio.play();
}
我创建了一个小型 Kanye West 引述生成器,连同获取 运行dom Kanye 引述的按钮,我放入了一些音频文件来播放(只有三个 Kanye 说话的音频片段) .
我想做的是:单击按钮以显示新报价时,应播放音频(来自 3)。目前,我知道它会播放,但是所有 3 个音频文件同时播放或同时播放两个,然后在下一次单击时单独播放一个。
这是我的音频代码:
const kanyeBush = document.getElementById('bush');
const kanyeOpinion = document.getElementById('opinion');
const kanyeRobot = document.getElementById('robot');
let kanyeQuoteArray = [kanyeBush, kanyeOpinion, kanyeRobot];
const kanyeSounds = () => {
let kanyeSoundbite = kanyeQuoteArray.forEach( sound => {
sound.play();
});
let audio = new Audio(kanyeSoundbite);
audio.play();
}
然后我 运行 在我的获取代码中:
const kanyeQuote = async () => {
const kanyeResponse = await fetch(kanyeApi);
const quoteJson = await kanyeResponse.json();
const randomQuote = document.createElement('h3');
quoteBox.innerHTML = "";
randomQuote.innerHTML = quoteJson.quote;
quoteBox.appendChild(randomQuote);
kanyeBtn.classList.toggle('hidden');
newQuoteBtn.classList.toggle('hidden');
kanyeSounds();
}
newQuoteBtn.addEventListener('click',kanyeQuote);
kanyeBtn.addEventListener('click', kanyeQuote)
有什么建议吗?
您在 forEach 中为他们所有人设置了 sound.play... 这样他们就可以一起玩了。您必须指定一个您希望播放的。例如,您可以使用随机索引
const kanyeSounds = () => {
let bitIndex = Math.floor((Math.random() * kanyeQuoteArray.length))
let kanyeSoundbite = kanyeQuoteArray.forEach( (sound, index) => {
sound.pause(); // reset previous
sound.currentTime = 0; // reset position
if(index === bitIndex) sound.play();
});
let audio = new Audio(kanyeSoundbite);
audio.play();
}