Я загружаю музыкальный файл с XMLHttpRequest, который я декодирую с помощью audioCtx.decodeAudioData(response)
.Audio API setValueCurveAtTime() Firefox
После этого, я создаю AudioBufferSourceNode
который я соединяюсь через gainNode
, чтобы audioCtx.destination
После этого, я хочу, чтобы трек, чтобы начать медленно, и увеличить скорость в 2 раза с помощью setValueCurveAtTime: source.playbackRate.setValueCurveAtTime(new Float32Array([0, 2]), audioCtx.currentTime, 3);
Я ожидаю, что трек начнется с playRate 0 и увеличится до 2, в течение 3 секунд. Это отлично работает в Chrome. Но в Firefox трек начинается с playRate из 1, и через 3 секунды он сразу переключается на 2. Таким образом, без перехода.
Обратите внимание, что это другая проблема, то Web Audio API Firefox setValueCurveAtTime()
Код:
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);
});
}
То же самое происходит, когда я заменить эту строку:
source.playbackRate.setValueCurveAtTime(new Float32Array([0, 2]), audioCtx.currentTime, 3);
W В этом случае:
source.playbackRate.value = 1;
source.playbackRate.linearRampToValueAtTime(2, audioCtx.currentTime + 3);
Что касается скорости воспроизведения 0, это должно имитировать паузу, как в Chrome. Для более старых реализаций: «Chrome 46.0.2490 использует линейную интерполяцию; более ранние версии используют ближайший сосед (MDN). Поэтому я полагаю, что Firefox использует более раннюю версию? – Pimmol
@Pimmol Да, это мое предположение. –