首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WasapiLoopbackCapture到WaveOut

WasapiLoopbackCapture到WaveOut
EN

Stack Overflow用户
提问于 2014-04-12 23:44:44
回答 1查看 619关注 0票数 0

我使用WasapiLoopbackCapture捕捉来自我的扬声器的声音,然后使用onDataAvailable将其发送到另一个设备,我试图播放使用WaveOut类和BufferedWaveProvider发送的数据,并且每次从客户端使用onDataAvailable发送数据时只添加一个示例。我在传送声音方面有问题。我得到的最有效的方法是:

不是同步客户机和服务器的Wave格式,而是发送数据并将其添加到示例中。问题是,这是结巴非常非常,即使我检查了缓冲区存储的大小,它有51秒。我甚至不得不增加缓冲区的大小,但最终还是会溢出。

我尝试同步Wave格式,我只得到点击,但是缓冲区大小没有问题。我还试图确保至少有一秒钟存储在缓冲区中,但效果为零。

如果有人能给我指明正确的方向,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-14 02:41:15

未压缩的音频占用了网络上的大量空间。在我的机器上,WasapiLoopbackCapture对象以每秒44100个采样的速度产生32位(IeeeFloat)立体声采样,总原始带宽约为2.7Mbit/秒。一旦考虑到TCP数据包开销等因素,您正在传输的数据就相当多了。

不过,我建议的第一件事是,在流程的每一步插入一些分析代码,以了解瓶颈发生的位置。数据从捕获设备到达的速度有多快?你的包裹有多大?每次调用OnDataAvailable事件处理程序需要多长时间?你每秒在网络上发送多少数据?数据到达客户端的速度有多快?找出瓶颈在哪里,你就能更好地了解瓶颈是什么。

尝试构建一个模拟服务器,该服务器以各种WaveFormat(通道、每个采样位数和采样率)中的波形文件读取数据,并模拟将数据通过网络发送到客户端。你可能会发现,这个问题在较低的带宽下消失了。如果带宽是问题,压缩可能是解决方案。

如果您使用的是单线程模型,并且为每个OnDataAvailable事件提供服务所需的时间超过记录频率(即每秒对OnDataAvailable的预期调用次数),那么就会出现数据丢失问题。多个线程可以帮助这一点-一个从音频系统获取数据,另一个处理和发送数据。但最终你可能会处于同样的位置:丢失数据,因为你没有足够快地处理它。当这种情况发生时,了解它是很方便的,因为它表明了程序中的一个问题。找出它发生的时间和地点--输入、处理或输出缓冲区中的溢出都有不同的潜在原因,需要不同的注意。

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

https://stackoverflow.com/questions/23037476

复制
相关文章

相似问题

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