8

问题

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

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

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

可能的解决方案

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

new webkitAudioContext(2,          // channels
                       10 * 44100, // length in samples
                       44100);     // sample rate

我稍微修改了示例,并在 Windows、Mac 和 Linux 上的 Chrome 23.0.1271.91 中对其进行了测试。 这是现场示例和结果(打开 Dev Tools Javascript 控制台以查看发生了什么):

  • 麦克 -它的工作原理!
  • Windows -失败 - SYNTAX_ERR:DOM 异常 12
  • Linux -失败 - SYNTAX_ERR:DOM 异常 12

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

我的问题

离线渲染对于我正在尝试做的事情来说是完美的,但我在任何地方都找不到文档,而且支持也不太理想。有没有人有这方面的更多信息?我应该期待很快在 Windows 和/或 Linux 中对此提供支持,还是应该期待在 Mac 上的支持很快消失?

4

1 回答 1

3

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

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

如果您需要非实时渲染,最好的选择是在服务器端实现 Web Audio。如果您可以使用实时渲染,那么https://github.com/mattdiamond/Recorderjs上的一个项目可能会引起您的兴趣。

请注意,我本人不是谷歌用户,我被告知的内容绝不是承诺。

于 2012-11-28T08:40:41.533 回答