首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在另一个线程中填充BufferedWaveProvider时的“缓冲区满”异常

在另一个线程中填充BufferedWaveProvider时的“缓冲区满”异常
EN

Stack Overflow用户
提问于 2016-03-11 08:51:24
回答 1查看 459关注 0票数 1

我有两个BufferedWaveProviders和MixingSampleProvider。第一个BufferedSampleProvider (myBuffer)是为我的音频从声卡开始。第二个BufferedWaveProvider (incomingBuffer)用于从网络(TCP)启动音频。

incomingBuffer被异步填充,如下所示:

代码语言:javascript
运行
复制
    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秒,由于异常,它就完成了。

如何异步填充缓冲区?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-11 09:38:07

停止忽略EndReceive的返回值。

它告诉您收到了多少字节的数据。这就是必须向缓冲区中添加多少个样本(但要确保没有将样本转换为字节,反之亦然)。

相反,现在您只是简单地将您的incomingBytes传递给incomingBuffer整体--即使您在TCP上只接收到一个字节。这是垃圾数据,它填充缓冲区的速度比它所能耗尽的还要快。

通常,方法和函数的返回值是有意义的,只有当您了解忽略什么时才应该忽略它们(例如,如果您只关心处理回调,忽略BeginReceive的返回值是可以的;如果您需要知道是否有挂起的异步I/O请求,则需要返回值)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35935808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档