Я изо всех сил пытаюсь сыграть this WAV file, который играет в VLC (в соответствии с которым файл Mono
, IMA WAV APDCM Audio (ms)
сэмплирован по адресу 24000Hz
с 16 bits per sample
).Как правильно воспроизводить WAV-файл, создавая AudioBuffer в JavaScript?
Я подозреваю, что есть что-то не так с самого WAV-файла, так как при попытке воспроизвести его путем включения его непосредственно через<audio>
, игра кнопка неактивна ... когда я пытаюсь играть программно с помощью new Audio()
, я получить ошибку Failed to load because no supported source was found.
Вот самый простой пример того, что я пробовал, который производит некоторые звука ... другие попытки я пытался, которые пытаются использовать AudioContext.decodeAudioData
всю заслонку при загрузке аудио, бросая Unable to decode audio data
.
Этот пример производит некоторые, несколько узнаваемый звук, но я явно делаю что-то неправильно, потому что это так scratchy- я понимаю, что AudioBuffer
требует Float32Array
, значения которого находятся в пределах [-1,1]
, что они этого не делают. Но я не знаю, как их нормализовать, так как многие из значений имеют порядок 10e32
.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
</style>
</head>
<body>
<script>
var context = new AudioContext();
function loadSound(url) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onload = function() {
data = new Uint8Array(request.response);
var buffer = context.createBuffer(1, data.length, 24000);
var channelData = buffer.getChannelData(0);
for (var i = 0; i < data.length; i++) {
channelData[i] = data[i];
}
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.start(0);
}
request.send();
}
loadSound('./test.wav');
</script>
</body>
</html>
Любая помощь будет оценена по достоинству; Спасибо!