用JavaScript播放声音

时间:2010-08-04 05:31:29

标签: javascript html audio

无论我做什么,我根本无法在Firefox或IE或Chrome中播放声音。

<html>
<head>
<script type="text/javascript">

    function play() 
 {
     var embed = document.createElement('object');

     embed.setAttribute('src', 'c:\\test.wav');
     embed.setAttribute('hidden', true);
     embed.setAttribute('autostart', true);
     embed.setAttribute('enablejavascript', true);

     document.childNodes[0].appendChild(embed);

 }

// -->
</script>
</head>
<body onload="play();">
</body>
</html>

3 个答案:

答案 0 :(得分:6)

尝试使用函数play()的修订版

function play() 
{
  var embed=document.createElement('object');
  embed.setAttribute('type','audio/wav');
  embed.setAttribute('data', 'c:\test.wav');
  embed.setAttribute('autostart', true);
  document.getElementsByTagName('body')[0].appendChild(embed);
}

您的代码存在的问题是您使用的是src属性,该属性适用于&lt; embed&gt;标签。而是使用&lt; object&gt;的数据属性。标签。



如果您试图获得最大的兼容性,您还应该考虑添加embed标记作为对象标记的替代。它的工作方式是这样的:

<object data="test.wav" type="audio/wav" autostart="true">
<embed src="test.wav" autostart="true" alt="Could not load audio" />
</object>

这类似于noscript标记,其中不支持object标记的旧浏览器使用embed标记。

答案 1 :(得分:2)

尝试此方法,在所有浏览器中播放声音:

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;
    } else {
        alert("Time almost up");
    }
}

播放声音,做这样的事情:

playSound("/file/horse.wav", "/file/horse.mp3","/file/horse.m4a");

答案 2 :(得分:0)

使用<embed>标记的FYI将使您的代码无效。目前,如果您想在网页上播放声音,则有两种选择: [1] 使用适用于当今大多数浏览器的方法,但这会使您的HTML无效(使用{{1} }},或 [2] 使用仅适用于某些最新浏览器的方法,但将来会采用这种方式,并且也被认为是有效的HTML(使用{{1 }或<embed>)。