2012-01-02 15 views
12

Estoy usando la API de audio web HTML5 para analizar una canción y crear marcadores cuando la frecuencia de sonido promedio cae por debajo de un cierto valor. Usando la infraestructura AudioNode existente, logré hacer esto, pero el sonido solo se analiza y solo cuando se reproduce la canción.Extracción de la frecuencia de canción de un archivo mp3 con API de audio web HTML5

Lo que quiero, sin embargo, es analizar la canción de antemano, para que pueda extraer los marcadores de silencio y convertirlos en botones CUE, que el usuario puede usar para moverse a lo largo de la canción.

Obviamente, será muy lento que depender de la reproducción de la canción entera en un primer momento, con el fin de analizarlo, sobre todo, si la canción es algo así como un podcast de 50 minutos. Intenté acelerar el playbackRate a 10x, pero eso no ayuda.

supongo que la solución radica en saltarse la API de audio web, y analizar el ArrayBuffer prima, sin embargo, realmente no sé por dónde empezar.

Sugerencias? Ideas?

Respuesta

5

he sido capaz de encontrar una diapositiva de una presentación que describe exactamente esto: here

El uso normal de la API es para procesar audio en tiempo real. En cambio, podemos preprocesar el audio a través de todo el sistema y obtener el resultado:

El único problema es que mi comprensión de la API de audio es demasiado simplista para ver cuál es el 'truco' del ejemplo de código:

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

pero pensé que sería mejor compartir al menos esto que dejar que sea del todo, aunque esto no es exactamente la respuesta que estaba esperando a dar.

+1

Es increíble lo mucho que aprendes en tres años, acabo de recibir un voto positivo sobre esta respuesta y leerla ahora parece un juego de niños :). –

-2

La convolución anterior describe una transformada de Fourier, que mueve su audio de una intensidad en el tiempo a una intensidad sobre frecuencia. Sugiero googlear la transformación de Fourier de JavaScript. Dependiendo de lo que esté buscando, vi varios enlaces útiles sobre el tema.

Cuestiones relacionadas