使用 Javascript/jQuery 一次播放一个 HTML 音频文件

Posted

技术标签:

【中文标题】使用 Javascript/jQuery 一次播放一个 HTML 音频文件【英文标题】:Play one HTML audio file at a time with Javascript/jQuery 【发布时间】:2016-02-09 18:06:27 【问题描述】:

在我的页面中,每个键盘按键都会触发一个音频文件。对于字母 A 到 Z,播放相应的音频文件,每隔一个键(ESC 除外)播放 26 个音频文件中的随机一个。如果我按例如 A 和 B,两个音频文件将同时播放,但我希望一次只播放一个文件。我将如何实现这一目标?

function keyDown(event) 
    var key = event.keyCode, sound, randomSound;
    if (key === 27) 
        //Play exit audio file, remove event listener, exit...
     else if (key >= 65 && key <= 90) 
        sound = document.getElementById(key);
        sound.play();
     else 
        randomSound = getRandomInt(65, 90);
        sound = document.getElementById(randomSound);
        sound.play();
    

    window.onload = function() 
    window.addEventListener("keydown", keyDown);
;

编辑:我希望音频文件播放到结束,然后用户才能按下另一个键并触发另一个文件。很抱歉之前没有说清楚。

【问题讨论】:

【参考方案1】:

发生这种情况的原因是每个&lt;audio&gt; 元素都在其自己的频道上播放。要让它一次播放一个,您应该只使用一个 Audio 对象。

要实现这一点,您应该只使用一个Audio 对象。像这样:

var audio = new Audio();

...

if (!audio.paused) audio.pause();
if (key >= 65 && key <= 90) 
    audio.src = document.getElementById(key).src; /* set audio.src to URL of individual audio element */
    audio.play();
 else 
    randomSound = getRandomInt(65, 66);
    audio.src = document.getElementById(randomSound).src; /* set audio.src to URL of individual audio element */
    audio.play();

编辑

要回答您修改后的问题,您只需执行以下操作

var audio = new Audio();

function keyDown(event) 
    if (!audio.paused) // if audio hasn't ended, don't replace it.
        return; 

    var key = event.keyCode, sound, randomSound;
    if (key === 27) 
        //Play exit audio file, remove event listener, exit...
     else if (key >= 65 && key <= 90) 
        audio.src = document.getElementById(key).src;
        audio.play();
     else 
        randomSound = getRandomInt(65, 90);
        audio = document.getElementById(randomSound).src;
        audio.play();
    

    window.onload = function() 
    window.addEventListener("keydown", keyDown);
;

【讨论】:

谢谢。但是,这样一来,如果我按下 A 然后立即按下 B,A 就会停止——我希望 A 继续播放直到结束,然后允许用户按下另一个键。很抱歉之前没有说清楚。我注意到的一点:即使没有if (!audio.paused) audio.pause();,它也会自动停止 @Willege 我添加了一个编辑以具有该功能。一旦按下一个键,该音频就会播放到结束,然后用户才能按下另一个键来启动另一个音频文件。 它不工作。也许如果用户还没有按下任何键并且没有声音播放,那么条件!sound.ended为真,因此跳出函数? @Willege 将 audio.end 更改为 audio.paused?也许它会工作。

以上是关于使用 Javascript/jQuery 一次播放一个 HTML 音频文件的主要内容,如果未能解决你的问题,请参考以下文章

HTML5/Javascript/jQuery 音频播放器不响应事件?

在 JavaScript \ jQuery 上播放游戏声音

是否有任何 JavaScript/jQuery 插件可以让我在播放歌曲达到特定播放时间时触发动作?

使用 Javascript/Jquery 停止 html 声音

在 javascript / jquery 中获取当前视频帧

用 js/jquery 检测 Flash 播放器的现代或不推荐的方法?