@Semro

Почему после работы метода decodeAudioData буфер обнуляется?

Есть следующий код:
function play(arraybuffer) {
	let audioCtx = new AudioContext();
	let audioData = arraybuffer;
	audioCtx.decodeAudioData(
		audioData,
		function (buffer) {
			let smp = audioCtx.createBufferSource();
			smp.buffer = buffer;
			smp.connect(audioCtx.destination);
			smp.start(0);
		},
		function (e) {
			console.log( "Error with decoding audio data: " + e.err );
		}
	);
}
console.log(sound); // Выведет ArrayBuffer(106488) {}
play(sound);
console.log(sound); // Выведет ArrayBuffer(0) {}

Буфер в переменную sound записывается из сокета, получаемого с сервера. Необходимо этот звук производить несколько раз, но как это сделать, если переменная обнуляется? Загружать ещё раз данные с сервера не очень хотелось бы.
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
@floydback
Создание контекста и декодирование нужно делать один раз. Аудио буфер сохранить в переменную buffer. А вот при каждом запуске play делать только необходимое
play () {
  source = context.createBufferSource()
  source.buffer = buffer
  source.connect(destination)
  source.start()
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы