我正在使用HTML5网络音频API分析歌曲,并在平均声音频率低于某个值时创建标记。使用现有的AudioNode基础设施,我设法做到这一点,但只分析声音,并且仅在播放歌曲时。
我想要的是提前分析歌曲,这样我就可以提取静音标记,并将它们变成CUE按钮,用户可以用它们在整首歌曲中移动。
显然,首先要依靠播放整首歌来进行分析是很慢的,特别是如果这首歌是50分钟的播客。我尝试将playbackRate加速到10倍,但这没有帮助。
我认为解决方案在于跳过Web音频API,并分析原始的ArrayBuffer,但是,我真的不知道从哪里开始。
连连呢?想法?
答案 0 :(得分:5)
我能够在演示文稿中找到一张幻灯片,其中正好描述了这一点:here
API的正常使用是实时处理音频。相反,我们可以通过整个系统预处理音频并获得结果:
唯一的问题是我对音频API的理解过于简单,无法从代码示例中看到“技巧”:
var sampleRate = 44100.0;
var length = 20; // seconds
var ctx = new webkitAudioContext(2, sampleRate * length, sampleRate);
ctx.oncomplete = function(e) {
var resultAudioBuffer = e.renderedBuffer;
...
};
function convolveAudio(audioBuffer, audioBuffer2) {
var source = ctx.createBufferSource();
var convolver = ctx.createConvolver();
source.buffer = audioBuffer;
convolver.buffer = audioBuffer2;
// source -> convolver -> destination.
source.connect(convolver);
convolver.connect(ctx.destination);
source.noteOn(0);
ctx.startRendering();
}
但我认为至少要分享这个比完全离开它更好,即使这不是我希望给出的答案。
答案 1 :(得分:-2)
上面的卷积描述了一个傅里叶变换,它将音频从强度随时间移动到强度超过频率。我建议谷歌搜索javascript傅里叶变换。根据您的需求,我看到了几个有用的链接。