2012-03-26 7 views

Odpowiedz

13

Można zrobić coś takiego:

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

Jest to bardzo prosty przykład - ale chodzi o to, w zasadzie, że można chwycić instancji Float32Array dla każdego kanału w AudioBuffer i odwróć je.

+0

To działa, dziękuję. szukałem czegoś bardziej przypominającego ustawienie parametru playbackRate na liczbę ujemną, dzięki czemu mogę odtwarzać coś do przodu i do tyłu z łatwością z tego samego punktu w klipie, ale ponieważ odpowiedziałeś na pytanie z poprawną (i działającą!) odpowiedzią, przyjmuję – lakenen

+0

Tak, doszedłem do wniosku, że prawdopodobnie szukasz czegoś trochę mniej hacky, ale to było jedyne podejście, które mogłem wymyślić. Dla tego, co jest warte, prawdopodobnie nadal można zbudować kod wokół tego podejścia, które zrobi czego chcesz - ale tak naprawdę nie próbowałem cofać bufora w locie, więc nie mogę powiedzieć na pewno. Tak czy inaczej dobrze jest zobaczyć innych programistów grających w Web Audio API. Mam nadzieję, że przyzwoita dokumentacja zacznie pojawiać się w ciągu najbliższych kilku miesięcy. –

3

Możesz użyć elementu <audio> html5 i ustawić właściwość playbackRate na wartość ujemną.

W JavaScript można wykonać następujące

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

Znacznik dźwiękowy nie spełnia moich wymagań, dlatego muszę korzystać z interfejsu API Web Audio. – lakenen

+0

Szybkość odtwarzania powinna wynosić od 0,5 do 4,0. Wartości ujemne nie działają jeszcze. [Źródło MDN] (https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/WebAudio_playbackRate_explained) – nicusor

6

jeśli element AudioBufferSourceNode:

audioBufferSourceNode.playbackRate = -1; 

-EDIT-

Webkit nie posiada tej funkcji.

Źródło: https://bugs.webkit.org/show_bug.cgi?id=69725

+1

Próbowałem tego i to nie działa. Minimalna wartość parametru playbackRate AudioParam wynosi 0. Gdy ustawię ją na wartość niższą niż 0, wydaje się, że jest odtwarzana z wartością defaultValue (która wynosi 1). – lakenen

+1

Okey ... to jest prawdziwy błąd w webkicie :( https://bugs.webkit.org/show_bug.cgi?id=69725 – Nullpo

+1

Byłoby świetnie, gdyby to zadziałało! – lakenen

Powiązane problemy