Я хочу воспроизвести аудиофайл с сервера в JavaScript, но я не могу получить правильный формат данных для decodeAudioData для его декодирования.
Вот мой метод получения и воспроизведения аудиоданных в JavaScript:
var source = audioContext.createBufferSource(); var request = new XMLHttpRequest(); request.open('GET', 'https://audioserver.com/getaudio.php', true); request.responseType = 'arraybuffer'; request.onload = function() { var audioData = request.response; audioContext.decodeAudioData(audioData, function(buffer) { source.buffer = buffer; source.connect(audioContext.destination); source.loop = true; }, function(e){"Error with decoding audio data" + e.err}); source.start(0); } request.send();
Код моего сервера выглядит следующим образом:
<?php header('Access-Control-Allow-Origin: *'); $file = "audiofiles/audio.wav"; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; ?>
И я также пробовал:
<?php header('Access-Control-Allow-Origin: *'); $name = './audiofiles/audio.wav'; $fp = fopen($name, 'rb'); header("Content-Type: binary"); header("Content-Length: " . filesize($name)); fpassthru($fp); exit; ?>
Но оба вышеупомянутых подхода приводят к следующей ошибке в JavaScript:
DOMException: невозможно декодировать аудиоданные
Как я могу получить аудиофайл в JavaScript правильно, чтобы его можно было декодировать и воспроизвести правильно?