126

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

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

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

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

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

11 回答 11

151

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。
于 2012-04-11T13:56:18.530 回答
87

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

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

在这里查看更多。

于 2016-09-02T06:50:02.647 回答
16

另一个插件,用于在网站上播放通知声音: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");
于 2014-06-16T23:59:54.597 回答
4

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

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

并像使用它一样

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

自动启动

$(function() { $("#beep").click(); });
于 2012-04-11T15:49:59.473 回答
3

播放跨浏览器兼容通知

正如@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();

希望能帮助某人。

于 2016-07-25T15:20:36.690 回答
2

使用audio.js,它是一个用于回退到<audio>flash 的标签的 polyfill。

一般来说,请查看https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills以了解 HTML 5 API 的 polyfill ..(它包括更多<audio>polyfill

于 2012-04-11T11:58:43.190 回答
2

如果您想在代码上调用事件最好的方法是创建触发器,因为如果用户不在页面上,浏览器将不会响应

<button type="button" style="display:none" id="playSoundBtn" onclick="playSound();"></button>

现在您可以在想要播放声音时触发按钮

$('#playSoundBtn').trigger('click');
于 2019-12-22T11:09:02.483 回答
2

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

包括在某处html

<button onclick="playSound();" id="soundBtn">Play</button>  

并通过以下方式隐藏它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>

如果您想播放声音,请致电performSound()某处!

于 2020-10-24T08:43:06.913 回答
1
var audio = new Audio('audio_file.mp3');

function post()
{
  var tval=document.getElementById("mess").value;   
  var inhtml=document.getElementById("chat_div");
  inhtml.innerHTML=inhtml.innerHTML+"<p class='me'>Me:-"+tval+"</p>";
  inhtml.innerHTML=inhtml.innerHTML+"<p class='demo'>Demo:-Hi! how are you</p>";
  audio.play();
}

此代码来自talkerscode 完整教程请访问http://talkerscode.com/webtricks/play-sound-on-notification-using-javascript-and-php.php

于 2016-02-25T11:17:06.647 回答
0

我们可以一起使用 Audio 和一个对象,例如:

var audio = {};
audio['ubuntu'] = new Audio();
audio['ubuntu'].src="start.ogg";
audio['ubuntu'].play();

甚至添加addEventListenerforplayended

于 2018-07-17T03:33:17.923 回答
0

我写了一个干净的播放声音的函数方法:

sounds = {
    test : new Audio('/assets/sounds/test.mp3')
};

sound_volume = 0.1;

function playSound(sound) {
    sounds[sound].volume = sound_volume;
    sounds[sound].play();
}
function stopSound(sound) {
    sounds[sound].pause();
}
function setVolume(sound, volume) {
    sounds[sound].volume = volume;
    sound_volume = volume;
}
于 2018-12-31T12:17:30.120 回答