let socket = new WebSocket("WebSocket Address");
let AudioContext = window.AudioContext || window.webkitAudioContext;
let audioCtx;
let buffers = [];
let channels = 1;
function init() {
audioCtx = new AudioContext();
}
function playAudio(buffer) {
if(!audioCtx) {
init();
}
let frameCount = buffer.length;
let myArrayBuffer = audioCtx.createBuffer(channels, frameCount, 44100);
for (let channel = 0; channel < channels; channel++) {
let nowBuffering = myArrayBuffer.getChannelData(channel);
for (let i = 0; i < frameCount; i++) {
nowBuffering[i] = buffer[i];
}
}
source = audioCtx.createBufferSource();
source.buffer = myArrayBuffer;
source.connect(audioCtx.destination);
source.start();
source.onended = () => {
buffers.shift();
playAudio(buffers[0]);
}
}
socket.onmessage = function (event) {
var arr = event.data.split(" ");
buffers.push(arr);
}
document.querySelector('#start').onclick = () => {
playAudio(buffers[0]);
}
我编写了一个程序来解码音频文件并通过套接字发送一个 44100 数字(-1 到 1)的音频缓冲区字符串。
在 JavaScript 中,我编写了这段代码来获取一个字符串,将其转换为一个数组,然后播放。但是当再次调用 playSound 函数时,声音消失了几毫秒。
有什么方法或想法可以让播放流畅无延迟吗?