2012-03-26 20 views

Respuesta

13

se podría hacer algo como esto:

var context = new AudioContext(), 
    request = new XMLHttpRequest(); 
request.open('GET', 'path/to/audio.mp3', true); 
request.responseType = 'arraybuffer'; 
request.addEventListener('load', function(){ 
    context.decodeAudioData(request.response, function(buffer){ 
     var source = context.createBufferSource(); 
     Array.prototype.reverse.call(buffer.getChannelData(0)); 
     Array.prototype.reverse.call(buffer.getChannelData(1)); 
     source.buffer = buffer; 
    }); 
}); 

Es un ejemplo muy sencillo - pero el punto es, básicamente, que se puede agarrar la instancia Float32Array para cada canal en el AudioBuffer y invertirlos.

+0

Esto funciona, gracias. en realidad estaba buscando algo más parecido a establecer playbackRate en un número negativo para que pueda reproducir algo hacia delante y hacia atrás fácilmente desde el mismo punto del clip, pero como respondió la pregunta con una respuesta válida (¡y funcional!), aceptaré – lakenen

+0

Sí, pensé que probablemente estabas buscando algo un poco menos hacky, pero este era el único enfoque que se me ocurrió. Por lo que vale, es probable que aún sea posible construir algún código alrededor de este enfoque que lo haga lo que quiere, pero en realidad no he intentado invertir el búfer sobre la marcha, por lo que no puedo asegurarlo. De cualquier manera, es bueno ver a otros desarrolladores jugar con Web Audio API. Esperemos que una documentación decente comenzará a aparecer en los próximos meses. –

3

Puede usar el elemento <audio> de html5 y establecer la propiedad playbackRate en valor negativo.

en javascript que puede hacer lo siguiente

var song = document.getElementsByTagName('audio')[0]; 
song.playbackRate = -1; 
+1

La etiqueta de audio no funciona según mis requisitos, por lo que necesito usar específicamente la API de audio web. – lakenen

+0

La velocidad de reproducción debe estar entre 0.5 y 4.0. Los valores negativos aún no funcionan. [Fuente de MDN] (https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/WebAudio_playbackRate_explained) – nicusor

6

si tiene un elemento AudioBufferSourceNode:

audioBufferSourceNode.playbackRate = -1; 

operación -Editar-

Webkit no tiene esa característica.

Fuente: https://bugs.webkit.org/show_bug.cgi?id=69725

+1

Intenté esto y no funciona. El valor minValue en el AudioParam playbackRate es 0. Cuando lo configuro en un valor inferior a 0, parece que se reproduce con el valor predeterminado (que es 1). – lakenen

+1

Okey ... es un error real que webkit :( https://bugs.webkit.org/show_bug.cgi?id=69725 – Nullpo

+1

¡Sería fantástico si esto realmente funcionara! – lakenen

1
playbackRate = -1.0; 

funciona en Safari (9.1.2) ahora!

Cuestiones relacionadas