Użycie wartości ujemnych nie jest obecnie obsługiwane, więc będziesz musiał ręcznie załadować i odwrócić bufory.
Należy pamiętać, że będzie to wymagać źródła dźwięku z włączoną funkcją CORS (w przykładzie nie ma, więc nie można skonfigurować demonstracji na żywo). Oto jeden ze sposobów to:
- ładowania danych za pośrednictwem AJAX (wymaga CORS włączone do pliku audio)
- Niech przeglądarka analizowania bufor do bufora dźwięku
- Get bufor kanału (s) (referencje)
- Rewers bufor (y)
- zainicjować bufora dźwięku i odegrania
będzie to oczywiście ogranicza się trochę jak nie można użyj już elementu Audio. Będziesz musiał obsługiwać żądane funkcje, ręcznie dodając do nich kontrolki i kod.
// load audio as a raw array buffer:
fetch("http://mathweirdo.com/bingo/audio/buzzer.mp3", process);
// then process the buffer using decoder
function process(file) {
var actx = new (window.AudioContext || window.webkitAudioContext);
actx.decodeAudioData(file, function(buffer) {
var src = actx.createBufferSource(), // enable using loaded data as source
channel, tmp, i, t = 0, len, len2;
// reverse channels
while(t < buffer.numberOfChannels) { // iterate each channel
channel = buffer.getChannelData(t++); // get reference to a channel
len = channel.length - 1; // end of buffer
len2 = len >>> 1; // center of buffer (integer)
for(i = 0; i < len2; i++) { // loop to center
tmp = channel[len - i]; // from end -> tmp
channel[len - i] = channel[i]; // end = from beginning
channel[i] = tmp; // tmp -> beginning
}
}
// play
src.buffer = buffer;
src.connect(actx.destination);
if (!src.start) src.start = src.noteOn;
src.start(0);
},
function() {alert("Could not decode audio!")}
)
}
// ajax loader
function fetch(url, callback) {
var xhr = new XMLHttpRequest();
try {
xhr.open("GET", url);
xhr.responseType = "arraybuffer";
xhr.onerror = function() {alert("Network error")};
xhr.onload = function() {
if (xhr.status === 200) callback(xhr.response);
else alert(xhr.statusText);
};
xhr.send();
} catch (err) {alert(err.message)}
}
Wygląda na to, że tutaj znajdują się sprzeczne informacje. [Ta strona] (https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/WebAudio_playbackRate_explained) (na dole) stwierdza, że "Wartości ujemne nie odtwarzają obecnie mediów do tyłu", jednak [ Dokumenty HTMLMediaElement] (https://developer.mozilla.org/en/docs/Web/API/HTMLMediaElement) mówią: "Jeśli wartość playbackRate jest ujemna, nośnik odtwarzany jest wstecz" – CodingIntrigue
Ta specyfikacja nie została jeszcze zaimplementowana przez większość przeglądarki? –
Wygląda na to. Istnieje "obejście" tutaj: http://stackoverflow.com/questions/16045812/jquery-why-the-rewind-playbackrate-doesnt-work – CodingIntrigue