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

Tim*_*imo 95 html javascript audio notifications html5-audio

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

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

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

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

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

Tim*_*imo 93

此解决方案适用于几乎所有浏览器(即使没有安装Flash):

<!doctype html>
<html>
  <head>
    <title>Audio test</title>
    <script>
      /**
        * Plays a sound using the HTML5 audio tag. Provide mp3 and ogg files for best browser support.
        * @param {string} filename The name of the file. Omit the ending!
        */
      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>';
      }
    </script>
  </head>

  <body>
    <!-- Will try to play bing.mp3 or bing.ogg (depends on browser compatibility) -->
    <button onclick="playSound('bing');">Play</button>  
    <div id="sound"></div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

浏览器支持

使用的代码

  • 适用于Chrome,Safari和Internet Explorer的MP3.
  • 适用于Firefox和Opera的OGG.

  • 它在 Firefox 中工作,但在 chrome 中我在控制台中收到此错误:“未捕获(承诺)DOMException:play()失败,因为用户没有首先与文档交互” (4认同)
  • 我无法使用我的Internet Explorer版本8. (2认同)

dch*_*cke 63

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

let audio = new Audio('/path/to/audio/file.mp3');
audio.play();
Run Code Online (Sandbox Code Playgroud)

在这里查看更多.

  • 不再工作了,我得到了(未承诺的)DOMException(承诺) (2认同)
  • 刚刚在最新的 Chrome(版本 74.0.3729.169)上尝试过,它对我有用。 (2认同)

Cas*_*dim 15

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

好处:

  • JavaScript-plugin,用于播放基于Web Audio 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");
Run Code Online (Sandbox Code Playgroud)


sto*_*tom 6

播放跨浏览器兼容的通知

正如 @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();
Run Code Online (Sandbox Code Playgroud)

希望能帮助某人。


Sta*_*arx 5

雅虎的媒体播放器怎么样?只需嵌入雅虎的图书馆

<script type="text/javascript" src="http://mediaplayer.yahoo.com/js"></script> 
Run Code Online (Sandbox Code Playgroud)

并像这样使用

<a id="beep" href="song.mp3">Play Song</a>
Run Code Online (Sandbox Code Playgroud)

自动启动

$(function() { $("#beep").click(); });
Run Code Online (Sandbox Code Playgroud)


Phi*_*kis 5

如果您想通过以下方式自动化该过程JS

包括在某处html

<button onclick="playSound();" id="soundBtn">Play</button>  
Run Code Online (Sandbox Code Playgroud)

并通过以下方式隐藏它js

<script type="text/javascript">

document.getElementById('soundBtn').style.visibility='hidden';

function performSound(){
var soundButton = document.getElementById("soundBtn");
soundButton.click();
}

function playSound() {
      const audio = new Audio("alarm.mp3");
      audio.play();
    }

</script>
Run Code Online (Sandbox Code Playgroud)

如果你想播放声音就打电话到performSound()某个地方!