【问题标题】:How to play audio files randomly and separately in JS如何在JS中随机单独播放音频文件
【发布时间】:2021-02-21 01:11:51
【问题描述】:

我创建了一个小型 Kanye West 报价生成器,连同用于获取随机 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)

有什么建议吗?

【问题讨论】:

    标签: javascript dom-events html5-audio


    【解决方案1】:

    你在 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();
        }
    

    【讨论】:

    • 我希望能为您提供一些有价值的东西,但不幸的是,我只有真诚的感谢。有效。我不知道为什么我不能考虑在 forEach 中放入另一个参数(因为我对这个世界很陌生)。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    相关资源
    最近更新 更多