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

跨平台、跨浏览器播放Javascript声音的方式?,javascript,audio,cross-browser,cross-platform,dhtml,Javascript,Audio,Cross Browser,Cross Platform,Dhtml,我正在编写一个dhtml应用程序,用于创建系统的交互式模拟。模拟的数据是从另一个工具生成的,并且已经有大量的遗留数据 模拟中的某些步骤需要播放“画外音”音频片段。我一直无法找到一种简单的方法来跨多个浏览器实现这一点 非常接近我需要的,但它只会播放mp3文件,并且旧数据可能也包含一些.wav文件 有没有其他的库可以帮上忙?我相信最简单、最方便的方法就是用一个小的Flash剪辑播放声音。我很感激它不是JavaScript解决方案,但它是实现目标的最简单方法 上一页的一些额外链接: Scriptac

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

模拟中的某些步骤需要播放“画外音”音频片段。我一直无法找到一种简单的方法来跨多个浏览器实现这一点

非常接近我需要的,但它只会播放mp3文件,并且旧数据可能也包含一些.wav文件


有没有其他的库可以帮上忙?

我相信最简单、最方便的方法就是用一个小的Flash剪辑播放声音。我很感激它不是JavaScript解决方案,但它是实现目标的最简单方法

上一页的一些额外链接:

  • Scriptaculous,一个Javascript库:
  • 一个开源的Flash项目:Easy MusicLayer For Flash

如果您使用的是Prototype,则使用Scriptaculous库。jQuery也一样。

您必须包含一个插件,如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);
    }
//======================================================================

如果您使用的是Mootools,那么有一个问题。

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;Linuxi686;en-US;rv:1.9.0.15)Gecko/2009102814 Ubuntu/8.04(hardy)Firefox/3.0.15在尝试此操作时死机


安装了最新更新后,firefox仍然崩溃,opera仍然有效。

您可以使用HTML5
标签。

我喜欢dacracot的答案。。。jQuery中有一个类似的解决方案:

function Play(sound) {
    $("#sound_").remove()
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />');
}
功能播放(声音){
$(“声音”).remove()
$('body')。追加('');
}

了解更多详细信息。

有一个比使用插件更简单的解决方案。IE有它自己的bgsound属性,还有另一种方法可以让它适用于所有其他浏览器。在这里查看我的教程=

有关使用wav文件的跨浏览器解决方案,我建议您制作一个
,如果用户在IE中,您可以在SO中进行一点搜索来轻松查看。

但是我找不到任何可以播放wav文件的flash解决方案。看来flash只支持MP3。我会看看scriptaculous的插件,但我不喜欢为这一点功能包含一个完整的额外库。我从来都不理解。这很有效。我已经在我的应用程序中部署了它。为什么它应该被否决?我不知道你为什么被否决,也许是因为使用了“真实音频”或“快速时间”这个词。。??也许投票否决你的那个人根本不知道这是怎么回事?对我来说,+1,你的代码与最普遍接受的答案中所述的jQuery插件中使用的代码几乎相同……有时我认为这是因为我编写了代码,而不是调用了当前流行的API,正如你所说,它做了完全相同的事情。这也是解决我问题的好办法+1.但是,它似乎无法播放FF3.0中的声音文件。在Chrome 3,IE7中工作。很高兴找到了解决方案,但是独立于此,您可能需要考虑将那些.wav文件转换为.mp3文件。如果声音质量稍微降低一点,你可以将文件大小从波文件大小的1/3降到1/10。在播放声音时,可能会使事情更具响应性。jQuery插件链接的响应为403。答案中的第二个链接已失效-“无法访问此网站”。@Pang关于此问题的每个答案在这一点上都早已过时。现在,您可能希望使用普遍支持的HTML5音频API。我已经结束了这个问题,作为一个更新问题的副本。这个问题特别要求一个“跨平台、跨浏览器”的解决方案。HTML5
NB 2018年HTML5音频除Opera外均受支持。您的解决方案看起来很有趣,我将尝试一下。请注意,在您链接的页面上有一条评论指出,在IE11中,音频以无休止的循环运行。这仍然是个问题吗?有办法避免吗?
<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>