好的,我目前正在尝试使用NAudio和c#制作语音聊天软件。
但是我目前遇到了问题,延迟似乎越来越差,应用程序运行的时间越长越好。
现在,我是一个初学者,所以我不知道它的原因是什么。
但是要排除故障,我想知道我是否可以获得总延迟,看看它随着时间的推移会增加多少。
总延迟=输入缓冲区+网络延迟+输出缓冲区(如果有的话,还有更多,我正在使用UDP)。
所以,如果我有类似的东西:
Label.text = TotalLatency();
它会一直更新。
while (!bStop)
{
byte[] datanbefore = waveStream.GetBuffer();
autoResetEvent.WaitOne();
waveStream.Position = 0;
captureBuffer.Read(offset, waveStream, halfBuffer, LockFlag.None);
readFirstBufferPart = !readFirstBufferPart;
offset = readFirstBufferPart ? 0 : halfBuffer;
//TODO: Fix this ugly way of initializing differently.
//Mute Mic when button is checked
if (MuteMic.Checked)
{
waveStream = new MemoryStream(halfBuffer);
}
byte[] datanaudio = waveStream.GetBuffer();
udpClient.Send(datanaudio, datanaudio.Length, otherPartyIP.Address.ToString(), 5550);
}
所以这是发送部分。我不确定缓冲是如何工作的,因为我使用免费样本启动了应用程序,并且已经在这里和那里进行了更改,但是仍然保留了一些部分,但我认为缓冲区可以改进。
while (!bStop)
{
//Receive data.
byte[] byteData = udpClient.Receive(ref remoteEP);
waveProvider.AddSamples(byteData, 0, byteData.Length);
}
这是接收部分,它更简单,它只是从UDP获取数据,将它放到缓冲区并播放它。
答案 0 :(得分:0)
通过了解WaveIn和WaveOut的缓冲区大小,您可以大致计算输入和输出延迟。默认情况下,NAudio每个都是100毫秒。 对于网络延迟,您可以尝试对音频数据包加时间戳,尽管两台机器的时钟需要同步。