使用JavaScript生成声音

时间:2010-10-20 19:05:02

标签: javascript html audio

我正在尝试使用JavaScript生成声音。我使用了以下代码

<html>
  <script type="text/javascript" src="jquery-1.4.2.js"></script>
  <script>
    function PlaySound(soundObj) {
      var sound = document.getElementById(soundObj);
      sound.Play();
    }

    function init() {
      //alert("");
      PlaySound('sound1')
    }

    window.onload = init;
  </script>

  <body>
    <form name="myform">
      <input type=button id="b1" name="b1name" value="Play Sound" onClick="PlaySound('sound1')">
    </form>
    <a href="#" onMouseOver="PlaySound('sound1')">Move mouse here</A>
    <embed src="beep-5.wav"  autostart="false" width="0" height="0" id="sound1" enablejavascript="true">
  </body>
</html>

按钮单击和鼠标悬停时生成声音。它不是在init函数中生成的。如果我在另一个JavaScript函数中调用下面的函数,它就不起作用。另一点是,如果我在打电话前保持警觉,那么声音就会出现。

PlaySound('sound1')

我尝试使用$("#b1").click();(在JavaScript中点击按钮),但它无效。

我知道这是this question的副本,但那里的答案对我不起作用。我真的很困惑。请帮忙。

我可以一次播放两次这样的声音吗?

5 个答案:

答案 0 :(得分:0)

调用init时声音文件可能尚未完成加载,但如果您包含alert或手动单击某个按钮,则浏览器之间有足够的时间加载文件。

话虽如此,embed是一个非标准且已弃用的标签,你真的不应该用它来播放声音。请改为查看HTML5 audio tag

答案 1 :(得分:0)

如果您希望网页通过JavaScript播放声音,并且您希望该页面为:

  • 验证
  • 适用于所有现代浏览器
  • 跨多个平台工作
  • 没有插件的工作

答案很简单:你不能这样做。故事结束。

当然,您可以在一个平台上提供一个适用于一个浏览器版本的示例,但我保证:它无处不在。

答案 2 :(得分:0)

  1. 快速而肮脏的方式(它也兼容旧浏览器,甚至是IE5)是使用可以在你的javascript中嵌入一个小波形文件然后可以作为资源播放(不保存到实际文件),使用二进制编码(与将PNG嵌入JS中相同)。 一个更好的方法是构建一个JS 音频对象,播放一些(带缓冲区),可以生成任何你想要的帧声音......

  2. 使用JS Audio Object

    var output = new Audio();
    output.mozSetup(1, 44100);
    var samples = new Float32Array(22050);
    for (var i = 0, l = samples.length; i < l; i++) {
    samples[i] = Math.sin(i / 20);
    }
    
    (also here)

答案 3 :(得分:0)

如果我们使用jquery声音插件生成声音,http://plugins.jquery.com/project/sound_plugin在启动/ java脚本上播放声音没有太多延迟。在IE和Firefox中运行良好。

答案 4 :(得分:-1)

根据卡萨布兰卡的评论引入延迟,声音在java脚本中播放。这是我添加的代码: 此引用链接Introduce delay

function callback(){
    return function(){
 PlaySound('sound1');

    }
}
function init() {
  //  alert("");
setTimeout(callback(), 500);
 }