我在网页上通过websocket连接接收来自桌面应用程序的实时流。我将PCM流转换为float 32数组。当我开始播放轨迹时,我听到了卡顿声,所以我创建了bufferArray来存储部分流,在播放它之前。
我遇到的问题是,在创建缓冲区之后,无法向数组中添加任何块。
在这里,我从socket连接接收数据并将其存储在数组中。我等待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
的内容,但是不知道该如何使用它。现在我被完全卡住了,因为我对 Web Audio API 不是很熟悉。