首页 > 解决方案 > 在缓冲区AudioContext JS之间播放音频而没有静音

问题描述

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 函数时,声音会消失几毫秒。

有什么方法或想法可以使播放流畅且无延迟?

标签: javascriptaudiostreamingbufferweb-audio-api

解决方案


推荐阅读