我正在开发一个Web应用程序,用户可以对音频样本进行排序,并可选择将效果应用于他们使用Web Audio API创建的音乐模式。模式存储为JSON数据,我想对每个模式服务器端的渲染音频进行一些分析。据我所知,这给我留下了两个选择:
在服务器端运行我自己的渲染代码,尝试尽可能忠实于浏览器内渲染。也许我甚至可以从Chromium项目中提取Web音频代码并对其进行修改,但这似乎可能需要做很多工作。
渲染客户端,希望比实时更快,然后将渲染的音频发送到服务器。这是理想的(和DRY),因为只有一个引擎用于模式渲染。
This question将我引导至this code sample in the Chromium repository,这似乎表明离线处理是可能的。诀窍似乎是用一些参数构造webkitAudioContext
(通常使用零参数构造函数)。以下是我对参数含义的猜测:
new webkitAudioContext(2, // channels
10 * 44100, // length in samples
44100); // sample rate
我稍微调整了样本,并在Windows,Mac和Linux上的Chrome 23.0.1271.91中对其进行了测试。 Here's the live example和结果(打开Dev Tools Javascript控制台以查看发生的情况):
我上面描述的webkitAudioContext
构造函数导致Windows和Linux上的异常。
离线渲染对于我正在尝试做的事情来说完美,但我无法在任何地方找到文档,并且支持不太理想。有没有人有关于此的更多信息?我很快就会期望在Windows和/或Linux中对此提供支持,或者我是否应该期待在Mac上很快支持消失?
答案 0 :(得分:3)
几个月前我对此进行了一些研究,并且audioContext上有一个startRendering函数,但Google人员告诉我,当时的实现是由于更改。我认为这还没有发生,它仍然不是官方文档的一部分,所以我要小心构建一个依赖于它的应用程序。
当前的实现不会比实时更快地呈现(可能在非常轻的应用程序中略微),有时甚至比实时更慢。
如果您需要非实时渲染,最好的选择是击中战壕并实施Web Audio服务器端。如果您可以使用实时渲染,那么https://github.com/mattdiamond/Recorderjs的项目可能会引起您的兴趣。
请注意我自己不是一名Google员工,而且我所说的不是任何方式的承诺。