javascript - 使用javascript/html5即时生成声音

标签 javascript html audio

是否可以使用javascript / html5生成恒定的声音流?例如,要生成一个永久的正弦波,我将有一个回调函数,只要输出缓冲区即将变空,就会调用该函数:

function getSampleAt(timestep)
{
    return Math.sin(timestep);
}

(想法是使用它来制作交互式合成器。我事先不知道按键会被按下多久,所以我不能使用固定长度的缓冲区)

最佳答案

使用HTML5音频元素
像史蒂文·维滕斯(Steven Wittens)notes in a blog post on creating a JavaScript synth:一样,目前无法使用JavaScript和audio元素跨浏览器生成持续音频

"...there is no way to queue up chunks of synthesized audio for seamless playback".


使用网络音频API
Web Audio API旨在促进JavaScript音频合成。 Mozilla开发人员网络中的Web Based Tone Generator可在Firefox 4+中使用[demo 1]。将这两行添加到该代码中,并在按键时就具有生成持续音频的有效合成器[demo 2-仅在Firefox 4中有效,请首先单击'结果'区域,然后按任意键]:
window.onkeydown = start;  
window.onkeyup = stop;
英国广播公司的page on the Web Audio API也值得回顾。不幸的是,对Web Audio API的支持还没有扩展到其他浏览器。
可能的解决方法
目前,要创建跨浏览器的合成器,您可能必须依靠以下方法来回退预先录制的音频:
  • 使用预先录制的较长的ogg / mp3采样音,将它们嵌入单独的audio元素中,并在按键时启动和停止它们。
  • 嵌入包含音频元素的swf文件,并通过JavaScript控制播放。 (这似乎是Google Les Paul Doodle使用的方法。)
  • 关于javascript - 使用javascript/html5即时生成声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510378/

    相关文章:

    javascript - 从 Bootstrap 模态窗口中删除模态属性

    javascript - 解析日期并使用setdate

    javascript - 是否可以使用 JavaScript 编辑 <script type ="text/template"> 的内容?

    c# - 使用C#问题进行声音捕获

    audio - 如何配置 JACK 音频服务器以自动使用特定的卡?

    javascript - Angular 2 : Why does 'else' not get executed in subscribe function?

    javascript - 什么机制使 JavaScript 异步?

    javascript - span 标签内的 jquery 倒计时而不是直接打印

    iphone - iOS 5 - 动画 gif 有时以错误的颜色显示

    audio - 裁剪音频文件?