通过javascript在浏览器(Chrome)中播放声音

时间:2013-09-11 11:27:25

标签: javascript audio

我正在写一个html页面。我想让它发出声音,正如一些javascript所指定的那样。

在html中,正如我在这里读到的答案所推荐的,我有一行

<embed src="wavs/beep.wav" autostart="true" width="0" height="0" id="beep" 
  enablejavascript="true">

这会在加载时播放声音,因此我确信我已经为有效的.wav文件提供了有效路径。 (一旦一切正常,我会将自动启动设置为false。)

我有一个功能

function playSound ( soundname )   
  {
    var thissound = document.getElementById( soundname );
    thissound.Play();
    alert( "Played " + soundname );
  }

我打电话使用

  playSound( "beep" );

但是当进行该呼叫时,虽然发生了警报,但没有声音。它看起来像我在推荐的方式做一切,但我一定有错。我接下来应该检查什么?

4 个答案:

答案 0 :(得分:14)

使用原生HTML5音频API

在Chrome的控制台中尝试创建Audio元素的新实例,传入要缓冲的声音的路径。例如,如果我们想要打字机声音,我们可以执行以下操作:

var typeWriter = new Audio("https://www.freesound.org/data/previews/256/256458_4772965-lq.mp3");

注意:要获得缓冲并避免CSRF问题的确切声音,您必须在www.freesound.org的控制台中工作

typeWriter现在代表一个html音频标记。

尝试通过设置typeWriter.loop = true

来制作声音循环

最后,使用typeWriter.play()&amp;播放/暂停声音typeWriter.pause()

答案 1 :(得分:5)

尝试过这段代码,它在大多数浏览器中运行良好 使用下面的js方法

function playSound(soundfile_ogg, soundfile_mp, soundfile_ma) {
    if ("Audio" in window) {
        var a = new Audio();
        if (!!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"')
                .replace(/no/, '')))
            a.src = soundfile_ogg;
        else if (!!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/,
                '')))
            a.src = soundfile_mp;
        else if (!!(a.canPlayType && a.canPlayType(
                'audio/mp4; codecs="mp4a.40.2"').replace(/no/, '')))
            a.src = soundfile_ma;
        else
            a.src = soundfile_mp;

        a.autoplay = true;
        return;
    }
}

答案 2 :(得分:2)

您收到错误,因为getElementById为您提供了embed元素而不是音频元素。嵌入元素不知道怎么玩。换句话说,嵌入元素中没有播放方法。使用以下代码正确播放。

<html>
<script>
function playSound ( soundname )
  {
    var thissound = document.getElementById( soundname );
    thissound.play();
    alert( "Played " + soundname );
  }
</script>
<body>
  <audio src="wavs/beep.wav" id="beep" autostart="false"></audio>
  <input type=button onclick="playSound('beep')">play</input>
  </body>
  </html>

还有一点需要注意。根据您可能希望支持的浏览器,您需要定义多个版本的音频源。有关详细信息,请参阅this

答案 3 :(得分:1)

不应该是.play() - 小写'p'?

根据您要支持的浏览器,您可能需要考虑将您的<embed>替换为HTML5 <audio>代码:http://www.storiesinflight.com/html5/audio.html。这个页面也有一些工作js例子!