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

13

我正在使用HTML5 Web音频API来分析歌曲,并在平均音频频率降至某个值以下时创建标记。使用现有的AudioNode基础结构,我成功做到了这一点,但是声音只有在播放歌曲时才会被分析。

然而,我想要预先分析歌曲,以便提取静音标记并将其转换为CUE按钮,用户可以使用这些按钮在整首歌曲中移动。

显然,依靠首先播放整首歌曲以进行分析将非常缓慢,特别是如果这是一个长达50分钟的播客之类的歌曲。我尝试将播放速率加速到10倍,但没有效果。

我想解决方案在于跳过Web音频API,直接分析原始的ArrayBuffer,但我不知道该从哪里开始。

有什么建议?想法吗?

2个回答

6
我找到了一张幻灯片,其中恰好描述了这个问题:这里

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();
}

但我认为至少分享这个信息比完全不说要好,即使这不是我希望给出的答案。


3
三年学到的东西真是不可思议,刚刚收到了这条回答的点赞,现在重新阅读一遍,感觉就像小孩子玩耍一样简单 :) 。 - David Mulder

-2
上面的卷积描述了傅里叶变换,它将您的音频从时间强度转换为频率强度。我建议搜索JavaScript傅里叶变换。根据您的需求,我在该主题上看到了几个有用的链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接