2012-01-02 62 views
12

我使用HTML5网络音频API来分析歌曲并在平均声音频率降至某个值以下时创建标记。使用现有的AudioNode基础设施,我设法做到了这一点,但只有在播放歌曲时才分析声音。使用HTML5网络音频提取mp3文件的歌曲频率API

但是我想要提前分析歌曲,所以我可以提取静音标记并将它们转换为CUE按钮,用户可以使用它们在整首歌中移动。

显然,首先要依靠播放整首歌曲来分析它,特别是如果歌曲是50分钟播客的歌曲,它将非常缓慢。我试图加快播放速度到10倍,但这并没有帮助。

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

对此提出建议?想法?

回答

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

三年来你学到了多少东西,现在在这个答案上得到了赞赏,现在看起来像是孩子的游戏:)。 – 2016-07-06 08:56:23

-2

上面的卷积描述了傅里叶变换,它将音频从强度随时间推移到频率上的强度。我建议谷歌搜索JavaScript傅里叶变换。根据你在找什么,我看到了一些有关这个主题的有用链接。