跨平台,跨浏览器的方式从Javascript播放声音?

时间:2008-10-09 12:47:31

标签: javascript audio cross-browser cross-platform dhtml

我正在编写一个dhtml应用程序,用于创建系统的交互式模拟。模拟的数据是从另一个工具生成的,并且已经存在大量遗留数据。

模拟中的一些步骤要求我们播放音频的“画外音”剪辑。我无法在多个浏览器中找到一种简单的方法来实现这一点。

Soundmanager2非常接近我的需要,但它只播放mp3文件,遗留数据也可能包含一些.wav文件。

有没有人有其他可能有帮助的图书馆?

10 个答案:

答案 0 :(得分:62)

你必须包含一个像Real Audio或QuickTime这样的插件来处理.wav文件,但是这应该有用......

//======================================================================
var soundEmbed = null;
//======================================================================
function soundPlay(which)
    {
    if (!soundEmbed)
        {
        soundEmbed = document.createElement("embed");
        soundEmbed.setAttribute("src", "/snd/"+which+".wav");
        soundEmbed.setAttribute("hidden", true);
        soundEmbed.setAttribute("autostart", true);
        }
    else
        {
        document.body.removeChild(soundEmbed);
        soundEmbed.removed = true;
        soundEmbed = null;
        soundEmbed = document.createElement("embed");
        soundEmbed.setAttribute("src", "/snd/"+which+".wav");
        soundEmbed.setAttribute("hidden", true);
        soundEmbed.setAttribute("autostart", true);
        }
    soundEmbed.removed = false;
    document.body.appendChild(soundEmbed);
    }
//======================================================================

答案 1 :(得分:10)

如果你正在使用Prototype,那么Scriptaculous库has a sound API。 jQuery appears to have a plugin也是。

答案 2 :(得分:9)

dacracots代码是干净的基本dom,但也许没有第二个想法写? 当然,您先检查先前嵌入的存在,然后保存副本 嵌入创作线。

var soundEmbed = null;
//=====================================================================

function soundPlay(which)
{
    if (soundEmbed)
       document.body.removeChild(soundEmbed);
    soundEmbed = document.createElement("embed");
    soundEmbed.setAttribute("src", "/snd/"+which+".wav");
    soundEmbed.setAttribute("hidden", true);
    soundEmbed.setAttribute("autostart", true);
    document.body.appendChild(soundEmbed);
}

在扫描寻找类似情况的解决方案时遇到了这些想法。不幸的是我的浏览器Mozilla / 5.0(X11; U; Linux i686; en-US; rv:1.9.0.15)Gecko / 2009102814 Ubuntu / 8.04(hardy)Firefox / 3.0.15在尝试时死亡。

安装最新更新后,firefox仍然崩溃,Opera仍然活着。

答案 3 :(得分:8)

我认为最简单,最方便的方法是使用小型Flash片段播放声音。我感谢它不是JavaScript解决方案,但它是实现目标的最简单方法

上一个similar question的一些额外链接:

答案 4 :(得分:6)

我喜欢dacracot的答案......这是jQuery中类似的解决方案:

function Play(sound) {
    $("#sound_").remove()
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />');
}

答案 5 :(得分:5)

您可以使用HTML5 <audio>代码。

答案 6 :(得分:4)

如果您使用的是Mootools,则有MooSound plugin

答案 7 :(得分:3)

<audio controls>
  <source src="horse.ogg" type="audio/ogg">
  <source src="horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>

有关详细信息,请参阅http://www.w3schools.com/html/html5_audio.asp

答案 8 :(得分:1)

有一个更简单的解决方案,而不是诉诸插件。 IE拥有它自己的bgsound属性,还有另一种方法可以让它适用于所有其他浏览器。在这里查看我的教程= http://www.andy-howard.com/how-to-play-sounds-cross-browser-including-ie/index.html

答案 9 :(得分:0)

对于带有wav文件的跨浏览器解决方案,我建议将<audio>标签设置为默认值,然后如果用户位于here之前,请使用@dacracot建议的<embed>解决方案IE,只需在SO中进行一些搜索即可轻松检查它。