使用 JavaScript 生成声音

Posted

技术标签:

【中文标题】使用 JavaScript 生成声音【英文标题】:Generate sound using JavaScript 【发布时间】:2010-10-20 19:05:01 【问题描述】:

我正在尝试。我使用了以下代码

<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"   id="sound1" enablejavascript="true">
  </body>
</html>

点击按钮和鼠标悬停时会产生声音。它不是在init 函数中生成的。如果我在另一个 JavaScript 函数中调用以下函数,它将不起作用。另一点是,如果我在打电话之前一直提醒,那么声音就会来。

PlaySound('sound1')

我尝试过使用$("#b1").click();(在 JavaScript 中单击按钮),但它不起作用。

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

如何在我的场景中使用它?谢谢你的帮助 查看此页面以获取一些示例:HTML5 Audio and JavaScript Control 你说得对。目前,支持所有浏览器的唯一安全方法是使用 Flash。 我只需要在出错时发出两声哔哔声。我引入了一些延迟,它正在工作。但是我可以重复两次相同的声音吗?我可以这样做吗 @casablanca - “支持所有浏览器的唯一安全方法是使用 Flash” - 但并非所有浏览器都有 Flash(例如 iPhone、iPad 和大多数 android )。所以不,Flash 也不会这样做。【参考方案2】:

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

验证 适用于所有现代浏览器 跨多个平台工作 无需插件即可工作

答案很简单:你做不到。故事结束。

当然,你可以想出一个在一个平台上的一个浏览器的一个版本中工作的例子,但我向你保证:它不会在任何地方都工作。

【讨论】:

好吧,如果你将 modern 定义为不是 IE,&lt;audio&gt; 工作得很好 遗憾的是,我们大多数人都做不到——我们能做的就是对 IE6 说不。【参考方案3】:

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

    使用 JS 音频对象

    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)

【讨论】:

这个音频();只识别火狐。但不是ie?【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

    

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

【讨论】:

以上是关于使用 JavaScript 生成声音的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有动态生成的 div 添加常用的 Javascript 函数? [复制]

使用 PHP 将照片 URL 发送到 JavaScript

rails4 rake assets 在生产环境中预编译生成错误的javascript文件

Safari 不播放视频但有声音

跨平台、跨浏览器从 Javascript 播放声音的方式? [复制]

设置页面的所有链接目标