qt linux播放声音,c++ Qt – 如何同时录制和播放声音

我对Qt并不十分有经验,但我正在处理媒体,所以请原谅我,如果我的答案不是很具体,而是从一个更普遍的角度来解决你的问题.

我看着你的代码,我一般认为你的想法应该工作.我看到一些问题:

> writeData方法似乎没有准备好处理缓冲区的完整状态.当循环缓冲区填满时,它只会覆盖旧数据,并且不正确地继续增加currentBufferLength变量.我认为这里要做的正确的事情是更新readPosition以跳过丢失的数据,并防止currentBufferLength从缓冲区大小过去.

>你几乎在同一时间开始写作者和读者.相反,您应该启动笔者并填充循环缓冲区,然后启动阅读器.请记住,您将无法记录和播放零延迟.至少您的延迟将是单个缓冲区写入的大小,但实际上您可能需要使用几个缓冲区来避免打嗝.

>您应该分别调试读写器和作者.仅设置写入程序并验证循环缓冲区是否定期进行写入(首先如上所述修复溢出情况).要调试,可以将缓冲区转储到文件中,然后检查音频播放器中的文件(例如,Audacity),也可以使用printf调试来确保您不断获取数据.然后只用一个读者做类似的事情.

>最后的想法调用readData和writeData方法的代码可能运行在其他线程上,可能是两个不同的线程,一个用于读取器,另一个用于写入器.如果我的猜测是正确的,那么你的圆形结构有一个很大的问题.您必须保护访问确定读取和写入位置和大小的变量,如果不是,您将有竞争条件.

祝你好运.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值