79

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

模拟中的某些步骤要求我们播放“画外音”音频片段。我一直无法找到一种简单的方法来跨多个浏览器完成此操作。

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

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

4

10 回答 10

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);
    }
//======================================================================
于 2008-10-09T14:05:12.753 回答
9

如果您使用 Prototype,Scriptaculous 库有一个健全的 API。jQuery似乎也有一个插件

于 2008-10-09T13:11:57.243 回答
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; en-US; rv:1.9.0.15) Gecko/2009102814 Ubuntu/8.04 (hardy) Firefox/3.0.15 在尝试这个时死掉了。

安装最新更新后,firefox 仍然崩溃,opera 保持活力。

于 2009-12-20T07:59:15.270 回答
7

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

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

于 2008-10-09T12:52:48.390 回答
5

您可以使用 HTML5<audio>标记。

于 2010-10-07T21:14:58.017 回答
5

我喜欢 dacracot 的回答……这是 jQuery 中的一个类似解决方案:

function Play(sound) {
    $("#sound_").remove()
    $('body').append('<embed id="sound_" autostart="true" hidden="true" src="/static/sound/' + sound + '.wav" />');
}
于 2011-10-13T20:24:43.893 回答
4
<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 。

于 2012-12-10T19:28:43.607 回答
3

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

于 2008-10-09T14:10:53.647 回答
1

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

于 2014-05-13T07:56:01.727 回答
0

对于带有 wav 文件的跨浏览器解决方案,我建议将<audio>标签设为默认值,然后如果用户在 IE 中,则在此处<embed>使用@dacracot 之前建议的解决方案,您可以在 SO 中通过一点搜索轻松检查它。

于 2019-12-12T16:05:18.710 回答