使用Web Audio API进行离线/非实时渲染

Joh*_*ard 8 javascript google-chrome web-audio-api

问题

我正在开发一个Web应用程序,用户可以对音频样本进行排序,并可选择将效果应用于他们使用Web Audio API创建的音乐模式.模式存储为JSON数据,我想对每个模式服务器端的渲染音频进行一些分析.据我所知,这给我留下了两个选择:

  1. 在服务器端运行我自己的渲染代码,尝试尽可能忠实于浏览器内渲染.也许我甚至可以从Chromium项目中取出Web Audio代码并对其进行修改,但这似乎可能需要做很多工作.

  2. 渲染客户端,希望比实时更快,然后将渲染的音频发送到服务器.这是理想的(和DRY),因为只有一个引擎用于模式渲染.

可能的解决方案

这个问题引导我到Chromium存储库中的这个代码示例,这似乎表明离线处理是可能的.诀窍似乎是webkitAudioContext用一些参数构造一个(通常使用零参数构造函数).以下是我对参数含义的猜测:

new webkitAudioContext(2,          // channels
                       10 * 44100, // length in samples
                       44100);     // sample rate
Run Code Online (Sandbox Code Playgroud)

我稍微调整了样本,并在Windows,Mac和Linux上的Chrome 23.0.1271.91中进行了测试. 这是实例和结果(打开Dev Tools Javascript控制台以查看发生的情况):

  • Mac - 它工作!!
  • Windows - FAIL - SYNTAX_ERR:DOM异常12
  • Linux - 失败 - SYNTAX_ERR:DOM异常12

webkitAudioContext我上面描述的构造函数导致Windows和Linux上的异常.

我的问题

离线渲染对于我正在尝试做的事情来说是完美的,但我无法在任何地方找到文档,并且支持不太理想.有没有人有关于此的更多信息?我是否应该尽快在Windows和/或Linux中期待对此的支持,或者我应该期待支持在Mac上很快消失

Osk*_*son 3

几个月前我对此做了一些研究,audioContext 上有一个 startRendering 函数,但 Google 人员告诉我,当时的实现是由于更改而导致的。我认为这还没有发生,而且它仍然不是官方文档的一部分,所以我会小心构建一个依赖它的应用程序。

当前的实现也不会比实时渲染速度更快(在非常轻的应用程序中可能会稍微快一些),有时甚至比实时渲染速度慢。

如果您需要非实时渲染,最好的选择是深入实践并实现网络音频服务器端。如果您可以接受实时渲染,https://github.com/mattdiamond/Recorderjs上有一个项目可能会让您感兴趣。

请注意,我自己不是谷歌用户,我被告知的并不是任何形式的承诺。

  • 是的,这个方法是非官方的并且不断变化。相关的问题有更多信息:http://stackoverflow.com/questions/8074152/is-there-a-way-to-use-the-web-audio-api-to-sample-audio-faster-than -即时的 (2认同)