0

我正在努力播放这个 WAV 文件,它在 VLC 中播放(根据它是一个Mono,IMA WAV APDCM Audio (ms)采样的文件24000Hz16 bits per sample

我怀疑 WAV 文件本身有问题,因为当我尝试通过直接嵌入它来播放它时 <audio>播放按钮处于非活动状态……当我尝试使用 以编程方式播放它时new Audio(),我收到错误Failed to load because no supported source was found.

这是我尝试过的最简单的示例,它会产生一些声音……我尝试过的其他尝试尝试AudioContext.decodeAudioData在加载音频时使用所有扼流圈,抛出Unable to decode audio data.

这个例子产生了一些可以识别的声音,但我显然做错了什么,因为它太刺耳了——我的理解是,它的值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>

任何帮助,将不胜感激; 谢谢你!

4

1 回答 1

0

本期phosphorous,我在读取和编码 16 位音频的readADPCMand函数中找到了合适的答案。encodeAudio16bitUInt8Array

于 2016-06-27T00:12:09.417 回答