如何在网站上播放通知声音?

IT技术 javascript html audio notifications html5-audio
2021-02-24 03:56:34

当某个事件发生时,我希望我的网站向用户播放简短的通知声音。

声音应该自动启动(瞬间)的网站打开时。相反,它应该通过 JavaScript 按需播放(当特定事件发生时)。

重要的是,这也适用于较旧的浏览器(IE6 等)。

所以,基本上有两个问题:

  1. 我应该使用什么编解码器?
  2. 嵌入音频文件的最佳做法是什么?( <embed>vs. <object>vs. Flash vs. <audio>)
6个回答

2021解决方案

function playSound(url) {
  const audio = new Audio(url);
  audio.play();
}
<button onclick="playSound('https://your-file.mp3');">Play</button>  

浏览器支持

Edge 12+、Firefox 20+、Internet Explorer 9+、Opera 15+、Safari 4+、Chrome

编解码器支持

只需使用 MP3


旧解决方案

(对于旧版浏览器)

function playSound(filename){
  var mp3Source = '<source src="' + filename + '.mp3" type="audio/mpeg">';
  var oggSource = '<source src="' + filename + '.ogg" type="audio/ogg">';
  var embedSource = '<embed hidden="true" autostart="true" loop="false" src="' + filename +'.mp3">';
  document.getElementById("sound").innerHTML='<audio autoplay="autoplay">' + mp3Source + oggSource + embedSource + '</audio>';
}
<button onclick="playSound('bing');">Play</button>  
<div id="sound"></div>

浏览器支持

使用的代码

  • 适用于 Chrome、Safari 和 Internet Explorer 的 MP3。
  • 适用于 Firefox 和 Opera 的 OGG。
@Stefan 这是正确的,但可能会令人困惑。我将从我的答案中删除它。谢谢你的提示。
2021-04-16 03:56:34
非常感谢您的解决方案@valmar
2021-04-27 03:56:34
我的 Internet Explorer 版本 8 无法使其正常工作。
2021-04-27 03:56:34
很好的答案。在这种情况下,虽然打开页面时声音会立即播放 - 但我假设您展示了如何,仅用于演示目的。
2021-04-29 03:56:34
@ShaijuT 谢谢!
2021-05-11 03:56:34

截至 2016 年,以下内容就足够了(您甚至不需要嵌入):

let src = 'https://file-examples.com/wp-content/uploads/2017/11/file_example_MP3_700KB.mp3';
let audio = new Audio(src);
audio.play();

在此处查看更多信息

不工作了,我明白了 Uncaught (in promise) DOMException
2021-04-16 03:56:34
这应该是公认的答案,因为它更简单,并且不会进行不必要的昂贵 DOM 操作。
2021-04-24 03:56:34
刚刚在最新的 Chrome(版本 74.0.3729.169)上尝试过,它对我有用。
2021-05-11 03:56:34
这是一个很好的答案,如此简单且完美。
2021-05-13 03:56:34
在执行此操作之前,也许还检查音频是否已定义。
2021-05-14 03:56:34

另一个插件,用于在网站上播放通知声音:Ion.Sound

好处:

  • JavaScript 插件,用于播放基于 Web 音频 API 的声音并回退到 HTML5 音频。
  • 插件适用于最流行的桌面和移动浏览器,可以在任何地方使用,从常见的网站到浏览器游戏。
  • 包括音频精灵支持。
  • 没有依赖项(不需要 jQuery)。
  • 包括 25 个免费声音。

设置插件:

// set up config
ion.sound({
    sounds: [
        {
            name: "my_cool_sound"
        },
        {
            name: "notify_sound",
            volume: 0.2
        },
        {
            name: "alert_sound",
            volume: 0.3,
            preload: false
        }
    ],
    volume: 0.5,
    path: "sounds/",
    preload: true
});

// And play sound!
ion.sound.play("my_cool_sound");

雅虎的媒体播放器怎么样 嵌入雅虎的库

<script type="text/javascript" src="http://mediaplayer.yahoo.com/js"></script> 

并像使用它一样

<a id="beep" href="song.mp3">Play Song</a>

自动启动

$(function() { $("#beep").click(); });
@valmar:visiblity: hidden;是你的答案
2021-04-16 03:56:34
也是一个不错的解决方案,但可以隐藏该链接吗?我想如果你设置display: none它,它就不会再播放声音了。此外,雅虎媒体库在链接左侧显示了一个小的“播放”图标。
2021-04-27 03:56:34

播放跨浏览器兼容通知

正如@Tim Tisdall 从这篇文章中所建议的,检查Howler.js插件。

chrome 等浏览器javascript在最小化或不活动时禁用执行以提高性能但是即使浏览器处于非活动状态或被用户最小化,这也会播放通知声音。

  var sound =new Howl({
                     src: ['../sounds/rings.mp3','../sounds/rings.wav','../sounds/rings.ogg',
                           '../sounds/rings.aiff'],
                     autoplay: true,
                     loop: true
                    });

               sound.play();

希望能帮助某人。

好,谢谢。只是您提到了此功能并链接了其他 Stackoverflow 答案,但在Howler 文档中并未将其作为一项功能提及,因此我认为您对此有所了解。
2021-04-23 03:56:34
“即使浏览器处于非活动状态或最小化,这也会播放通知声音”如何?如果在页面休眠时调用,声音可能会播放,但是sound.play()首先调用的代码是如何运行的?Howler 是否将所有 setTimeouts 放入包装器中?
2021-04-29 03:56:34
@poshest ,我不知道它是如何播放的,可能正在检查源代码或联系插件的作者可能会对您有所帮助。
2021-05-13 03:56:34