好的,我目前正在尝试使用 NAudio 和 c# 制作语音聊天软件。
但是我目前有一个问题,应用程序运行的时间越长,延迟似乎越差。
现在,我是一个完全的初学者,所以我不知道是什么原因造成的。
但是为了排除故障,我想知道我是否可以获得总延迟,看看它随着时间的推移增加了多少。
总延迟 = 输入缓冲区 + 网络延迟 + 输出缓冲区(如果有更多,我正在使用 UDP)。
所以如果我有类似的东西:
标签.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 获取数据,将其放入缓冲区并播放。