音频缓冲区大小应该高还是低?

Should audio buffer size be high or low?

在我下面的代码中,我将麦克风输入从我的客户端发送到服务器。我的问题是,如果我们更改 CHUNK_SIZE 的值,那将如何影响服务器接收端的音频?变量 numBytesRead 应该用作要与数据报包一起发送的缓冲区的长度还是应该 data.length? (data.length = 17640 & numBytesRead = 1024)

        int CHUNK_SIZE = 1024;
        byte[] data = new byte[microphone.getBufferSize() / 5];
        microphone.start();

        try {
            InetAddress address = InetAddress.getByName("127.0.0.1");
            int numBytesRead;

            while(true) {
                numBytesRead = microphone.read(data, 0, CHUNK_SIZE);
                // bytesRead += numBytesRead;
                // write the mic data to a stream for use later
                out.write(data, 0, numBytesRead);
                
                DatagramPacket request = new DatagramPacket(data, numBytesRead, address, 5555);
                socket.send(request);

            }

如示例中所写,读取和写入受到 CHUNK_SIZE 的限制,这对 numBytesRead 设置了上限。所以,是的,更改该值可能会影响性能。您可以将它一直提高到 17640 并仍然使用 data 数组。但是我不明白为什么这么大的数组只使用了一部分。

一般来说,缓冲区越大,延迟越大。但回放的可靠性也可能有所提高。当缓冲区太低时,回放可能会受到丢失或其他伪像的困扰。

确认: microphoneTargetDataLine 吗? outSourceDataLine 吗? 您打算将麦克风数据发送到两个不同的输出吗? (一个本地,一个通过数据报?)