Ich lade eine Musikdatei mit einer XMLHttpRequest, die ich mit audioCtx.decodeAudioData(response)
dekodieren.Audio API setValueCurveAtTime() Firefox
Ist das erledigt, erstelle ich eine AudioBufferSourceNode
, die ich durch eine gainNode
verbinden, zu audioCtx.destination
Danach möchte ich die Strecke langsam zu starten, und die Geschwindigkeit zu erhöhen, 2x setValueCurveAtTime mit: source.playbackRate.setValueCurveAtTime(new Float32Array([0, 2]), audioCtx.currentTime, 3);
Ich erwarte, dass die Spur mit einem playbackRate von 0 beginnt und in 3 Sekunden auf 2 ansteigt. Das funktioniert perfekt in Chrome. Aber in Firefox startet der Track mit einem playbackRate von 1 und nach 3 Sekunden wechselt er sofort zu 2. Also ohne Übergang.
Beachten Sie, dass dies ein anderes Problem ist dann Web Audio API Firefox setValueCurveAtTime()
Code:
let audioCtx = new AudioContext();
let url ='http://mdn.github.io/decode-audio-data/viper.ogg';
loadBuffer(url);
function loadBuffer(url) {
console.log('loading buffer...');
let request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
request.addEventListener('load', (e) => {
decodeAudioData(e.target.response);
});
request.send();
}
function decodeAudioData(response) {;
audioCtx.decodeAudioData(response).then((decodedBuffer) => {
console.log(`Decoding audio done`);
let source = audioCtx.createBufferSource();
source.buffer = decodedBuffer;
let gainNode = audioCtx.createGain();
source.connect(gainNode);
gainNode.connect(audioCtx.destination);
source.start(0);
source.playbackRate.setValueCurveAtTime(new Float32Array([0, 2]), audioCtx.currentTime, 3);
});
}
Das gleiche passiert, wenn ich diese Zeile ersetzen:
source.playbackRate.setValueCurveAtTime(new Float32Array([0, 2]), audioCtx.currentTime, 3);
W its this:
source.playbackRate.value = 1;
source.playbackRate.linearRampToValueAtTime(2, audioCtx.currentTime + 3);
Bei der Wiedergabegeschwindigkeit von 0 sollte dies wie in Chrome eine Pause nachahmen. Für ältere Implementierungen: 'Chrome 46.0.2490 verwendet lineare Interpolation; frühere Versionen benutzen den nächsten Nachbarn '(MDN) Also, ich nehme an, Firefox benutzt auch eine frühere Version? – Pimmol
@ Pimmol Ja, das ist meine Annahme. –