2013-04-17 2 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 определите время, необходимое для выполнения необходимых действий.

Смежные вопросы