使用HTML5网络音频API提取mp3文件的歌曲频率

Pre*_*hev 12 javascript audio html5 mp3 arraybuffer

我正在使用HTML5网络音频API来分析歌曲,并在平均声音频率低于某个值时创建标记.使用现有的AudioNode基础设施,我设法做到这一点,但只分析声音,并且仅在播放歌曲时.

然而,我想要的是提前分析歌曲,这样我就可以提取静音标记,并将它们变成CUE按钮,用户可以使用这些按钮在整首歌曲中移动.

显然,首先依靠播放整首歌来进行分析是很慢的,特别是如果这首歌是50分钟的播客.我尝试将playbackRate加速到10倍,但这没有用.

我认为解决方案在于跳过Web音频API,并分析原始ArrayBuffer,但是,我真的不知道从哪里开始.

建议?想法?

Dav*_*der 5

我已经能够在其中找到确切地描述了这个演示幻灯片:在这里

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();
}
Run Code Online (Sandbox Code Playgroud)

但我认为至少要分享这个比完全放弃它更好,即使这不是我希望给出的答案.

  • 令人惊讶的是,你在三年内学到了多少,刚刚对这个答案投了赞成票,现在通读一遍,这似乎是儿戏:)。 (2认同)