2012-01-02 61 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傅里葉變換。根據你在找什麼,我看到了一些有關這個主題的有用鏈接。