我有两个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秒之后,它因异常而结束。
我应该如何异步填充缓冲区?
答案 0 :(得分:2)
停止忽略EndReceive的返回值。
它告诉您收到了多少字节的数据。这是您需要添加到缓冲区的样本数量(但请确保您不会将样本转换为字节,反之亦然。)
相反,现在您只需将incomingBytes
传递给incomingBuffer
整个,即使您只通过TCP接收了一个字节。这是垃圾数据,它可以更快地填充缓冲区。
一般来说,方法和函数的返回值是有意义的,只有当你理解你忽略的时才忽略它们(例如,如果你不关心它们)处理除回调之外的任何事情,忽略BeginReceive
的返回值是正常的;如果您需要知道是否存在待处理的异步I / O请求,则需要返回值。