Javascript 使用Web音频API缓冲音频

Javascript 使用Web音频API缓冲音频,javascript,html,audio,websocket,web-audio-api,Javascript,Html,Audio,Websocket,Web Audio Api,我有一个从桌面应用程序通过websocket连接进入我的网页的实时流。 我正在将PCM流转换为浮点32数组。当我开始播放曲目时,我会听到一些小故障,所以在播放之前,我创建了一个bufferArray来存储流的一部分。 我遇到的问题是,在创建缓冲区之后,我无法向数组中添加任何块 在这里,我从套接字连接接收数据并将其存储在阵列中。我等待100个块,然后才开始流 sock.onmessage = function(e) { var samples = e.data;

我有一个从桌面应用程序通过websocket连接进入我的网页的实时流。 我正在将PCM流转换为浮点32数组。当我开始播放曲目时,我会听到一些小故障,所以在播放之前,我创建了一个bufferArray来存储流的一部分。 我遇到的问题是,在创建缓冲区之后,我无法向数组中添加任何块

在这里,我从套接字连接接收数据并将其存储在阵列中。我等待100个块,然后才开始流

 sock.onmessage = function(e) {
        var samples = e.data;
        obj = JSON.parse(samples);

        stream = stream.concat(obj);

        if(j == 1000){
            console.log(stream);
            playPcm(stream);
        }

        console.log(j);
        j ++;
    }
此方法处理音频块

function playPcm(data){
    var audio = new Float32Array(data);
    var source = context.createBufferSource();
    var audioBuffer = context.createBuffer(1, audio.length, 44100);

    audioBuffer.getChannelData(0).set(audio);
    // console.log(audioBuffer);

    source.buffer = audioBuffer;


    source.connect(context.destination);

    source.start(AudioStart);
    AudioStart += audioBuffer.duration;
}

我读过关于
scriptProcessorNode
,但不知道如何处理它。现在我几乎被卡住了,因为我对网络音频API不是很熟悉。

不要试图继续编辑同一个缓冲区-你将无法修改播放缓冲区(它有时在Chrome中工作,但这是一个bug)。您应该将第一组块缓冲到一个缓冲区中,就像您现在所做的那样,以获得一些延迟空间,然后当其他块进来时,您应该将它们安排为单独的AudioBuffer/BufferSourceNode组合。(即,记录您开始播放第一个节点的时间和运行计数,并安排每个连续节点在最后一个节点结束时播放。)

是否有来自socket的mp3数据块示例?