2013-04-17 53 views
0

我有一個獲取音頻的腳本。我想把這個頻率與歌曲的確切時間聯繫起來。我可以獲得webkitAudioContext currentTime屬性,但這不準確,因爲它在開始播放歌曲之前將聲音保存在緩衝區中時開始計算時間。 這是我的代碼:網絡音頻Api:與經過時間相關的頻率

var context = new webkitAudioContext(); 

...

function drawSpectrogram(array) { 
    // copy the current canvas onto the temp canvas 
    var canvas = document.getElementById("canvas"); 

    tempCtx.drawImage(canvas, 0, 0, 800, 512); 
    // iterate over the elements from the array 
    for (var i = 0; i < array.length; i++) { 
     // draw each pixel with the specific color 
     var value = array[i]; 
     frequency = frequency + value + ";"; 
     time = time + Math.round((context.currentTime) * 1000000)/1000000 + ";";    
     ctx.fillStyle = hot.getColor(value).hex(); 
     // draw the line at the right side of the canvas 
     ctx.fillRect(800 - 1, 512 - i, 1, 1); 
    } 

}

謝謝!

回答

1

在準備好開始播放之前保存currentTime的值,並將該時間值用作「零時間」標記。無論何時您想知道音樂播放了多長時間,請從currentTime值中減去該時間值(表示設置需要多長時間)。

var context = new webkitAudioContext(); 

// load media, place in buffer, etc... 

var startTime = context.currentTime; // everything up to now has been setup 

// begin playing... 

var currentPlayingTime = context.currentTime - startTime; 

只需使用context.currentTime - startTime即可查找歌曲實際播放的時間。

1

我不太清楚你要什麼,但你可能想看看高分辨率時間API:http://www.w3.org/TR/hr-time/

你可以搶在你打電話的同時當前時間.noteOn()或.start()放在您感興趣的緩衝區中,然後在DrawSpectrogram函數中確定所需的時間。