音频缓冲区大小应该高还是低?
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
数组。但是我不明白为什么这么大的数组只使用了一部分。
一般来说,缓冲区越大,延迟越大。但回放的可靠性也可能有所提高。当缓冲区太低时,回放可能会受到丢失或其他伪像的困扰。
确认:
microphone
是 TargetDataLine
吗?
out
是 SourceDataLine
吗?
您打算将麦克风数据发送到两个不同的输出吗? (一个本地,一个通过数据报?)
在我下面的代码中,我将麦克风输入从我的客户端发送到服务器。我的问题是,如果我们更改 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
数组。但是我不明白为什么这么大的数组只使用了一部分。
一般来说,缓冲区越大,延迟越大。但回放的可靠性也可能有所提高。当缓冲区太低时,回放可能会受到丢失或其他伪像的困扰。
确认:
microphone
是 TargetDataLine
吗?
out
是 SourceDataLine
吗?
您打算将麦克风数据发送到两个不同的输出吗? (一个本地,一个通过数据报?)