我有两个BufferedWaveProviders和MixingSampleProvider。第一个BufferedSampleProvider (myBuffer
)是为我的音频从声卡开始。第二个BufferedWaveProvider (incomingBuffer
)用于从网络(TCP)启动音频。
incomingBuffer
被异步填充,如下所示:
private static void Receive()
{
receiver.BeginReceive(incomingBytes, 0, incomingBytes.Length, SocketFlags.None, ReceiveCallback, null);
}
private static void ReceiveCallback(IAsyncResult ar)
{
receiver.EndReceive(ar);
incomingBuffer.AddSamples(incomingBytes, 0 , incomingBytes.Length);
Receive();
}
但是在启动程序后7-10秒,由于异常,它就完成了。
如何异步填充缓冲区?
发布于 2016-03-11 09:38:07
停止忽略EndReceive的返回值。
它告诉您收到了多少字节的数据。这就是必须向缓冲区中添加多少个样本(但要确保没有将样本转换为字节,反之亦然)。
相反,现在您只是简单地将您的incomingBytes
传递给incomingBuffer
整体--即使您在TCP上只接收到一个字节。这是垃圾数据,它填充缓冲区的速度比它所能耗尽的还要快。
通常,方法和函数的返回值是有意义的,只有当您了解忽略什么时才应该忽略它们(例如,如果您只关心处理回调,忽略BeginReceive
的返回值是可以的;如果您需要知道是否有挂起的异步I/O请求,则需要返回值)。
https://stackoverflow.com/questions/35935808
复制相似问题