跨平台,跨浏览器的方式来播放Java脚本中的声音?[重复]


78

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

模拟中的某些步骤要求我们播放音频的“浊音”片段。我一直找不到在多个浏览器上完成此操作的简便方法。

Soundmanager2几乎可以满足我的需要,但它只能播放mp3文件,并且旧数据也可能包含一些.wav文件。

有没有其他图书馆可能会对您有所帮助?


5
很高兴找到了解决方案,但独立于此,您可能需要考虑将那些.wav文件转换为.mp3文件。如果稍微降低声音质量,则文件大小可以从Wave文件大小的1/3降低到1/10。可能会使事情在播放声音时反应更快。
infocyde 2010年

Answers:


61

您将必须包含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);
    }
//======================================================================

15
我从不理解不赞成票。这可行。我已经在我的应用程序中部署了它。为什么它应该受到否决?
dacracot

2
我不知道您为什么被否决,也许是因为使用了“真实音频”或“快速时间” .. ?? 也许对您投反对票的人对它的完成方式一无所知?对于我来说,+ 1,您的代码与最受接受的答案中所述的jQuery插件中使用的代码几乎相同...
koni

1
有时我认为这是因为我写了代码而不是调用当前流行的API,正如您所说的,它做的完全相同。
dacracot

1
也很好地解决了我的问题。+1。
毛里斯

3
但是它似乎无法在FF3.0中播放声音文件。适用于Chrome 3,IE7。
毛里斯

9

如果您使用的是原型,则Scriptaculous库具有完善的API。jQuery似乎也有一个插件


5
有403 jQuery插件的链接响应
阿里翁

答案中的第二个链接已失效- “无法访问此站点”

@Pang关于此问题的每个答案在这一点上早已过时。这些天来,您想使用普遍支持的HTML5音频API。我已经关闭了这个问题,作为一个最新问题的重复。
ceejayoz

8

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; zh-CN; rv:1.9.0.15)Gecko / 2009102814 Ubuntu / 8.04(hardy)Firefox / 3.0.15在尝试此操作时死了。

安装最新更新后,Firefox仍然崩溃,Opera仍然存在。


7

我认为,最简单,最方便的方法是使用小型Flash剪辑播放声音。我很欣赏这不是JavaScript解决方案,但它是实现目标的最简单方法

前一个类似问题的一些额外链接:


1
但是我找不到任何可播放WAV文件的Flash解决方案。看来Flash只支持MP3。我将看一下scriptaculous的插件,但是我讨厌为此功能添加一个完整的额外库。
杰克·史蒂文森


5

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

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



1

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


您的解决方案看起来很有趣,我将尝试一下。请注意,您链接到的页面上有一条注释,表明在IE11中,音频正在无休止的循环中运行。这还是一个问题吗?有办法避免吗?
凯文·费根

0

对于带有wav文件的跨浏览器解决方案,我建议将<audio>标签设置为默认值,然后再选择<embed>@dacracot在之前建议的解决方案(如果用户使用的是IE),则可以通过在SO中进行一些搜索轻松地进行检查。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.