ALSA 多线程处理报underrun

y19940406 2015-06-02 11:14:30
最近在树莓派板子上开发一个处理声音信号的程序,但出了些问题:
1. 单线程处理声音没有问题
2. 多线程直接读写声卡不处理没有问题
3. 多线程同时处理声音就每个循环都报underrun

求大神帮忙分析一下问题所在……
...全文
1175 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
duheng0901 2017-04-12
  • 打赏
  • 举报
回复
引用 5 楼 y19940406 的回复:
[quote=引用 4 楼 FightForProgrammer 的回复:] 我这里没法调试,就靠看代码是在不知道该如何弄。你自己多多调试吧。
调试了很久只知道对于
rt=snd_pcm_hw_params_set_period_size_near(handle1, params1, &frames, &dir1);
不管之前设的frames是多少,这条语句之后如果是读的声卡就成了512,如果是写的声卡就变成256,我用的是set啊哭晕…… 没有思路了……[/quote] snd_pcm_hw_params_set_period_size_near这个函数执行完后,period的值不一定会设置成用户指定的值,用户指定的值只是一个建议值,alsa会决定是否采用。函数执行完后,frame的值会被赋为最终的period的值。
fly 100% 2016-08-18
  • 打赏
  • 举报
回复
多线程之间同步做一下
jljc3 2016-08-17
  • 打赏
  • 举报
回复
貌似snd_pcm_hw_params_set_period_size_near要放在snd_pcm_hw_params之前设置的才有效吧,你看看可是这样。
firebolt2002 2015-12-06
  • 打赏
  • 举报
回复
没看你的代码,以前也遇到过类似的问题。基本上都是播放音频的时候会出现,解决的方法也挺简单,就是当播放队列空的时候插入一个静音帧。
sdozh8585 2015-12-02
  • 打赏
  • 举报
回复
你的问题解决了吗?我也想知道
y19940406 2015-06-03
  • 打赏
  • 举报
回复
引用 4 楼 FightForProgrammer 的回复:
我这里没法调试,就靠看代码是在不知道该如何弄。你自己多多调试吧。
调试了很久只知道对于
rt=snd_pcm_hw_params_set_period_size_near(handle1, params1, &frames, &dir1);
不管之前设的frames是多少,这条语句之后如果是读的声卡就成了512,如果是写的声卡就变成256,我用的是set啊哭晕…… 没有思路了……
FightForProgrammer 2015-06-02
  • 打赏
  • 举报
回复
我这里没法调试,就靠看代码是在不知道该如何弄。你自己多多调试吧。
y19940406 2015-06-02
  • 打赏
  • 举报
回复
引用 2 楼 y19940406 的回复:
[quote=引用 1 楼 FightForProgrammer 的回复:] 额。。这个原因感觉有点广泛啊。。 复制声音数据再进行处理如何?而不直接处理原生的声音数据
是复制的,我是从声卡读取到buffer里,从buffer转换到复数类型数组comp[N]中进行,处理完放回buffer里写到声卡的。 代码有点长,不过还是麻烦看一下吧http://download.csdn.net/detail/y19940406/8765501[/quote] 刚刚调试了一段时间发现一个问题,同样用
frames = 512;
rt=snd_pcm_hw_params_set_period_size_near(handle1, params1, &frames, &dir1);
rt=snd_pcm_hw_params_set_period_size_near(handle2, params2, &frames, &dir2);
完成handle2之后frames变成了256……这个是什么问题?
y19940406 2015-06-02
  • 打赏
  • 举报
回复
引用 1 楼 FightForProgrammer 的回复:
额。。这个原因感觉有点广泛啊。。 复制声音数据再进行处理如何?而不直接处理原生的声音数据
是复制的,我是从声卡读取到buffer里,从buffer转换到复数类型数组comp[N]中进行,处理完放回buffer里写到声卡的。 代码有点长,不过还是麻烦看一下吧http://download.csdn.net/detail/y19940406/8765501
FightForProgrammer 2015-06-02
  • 打赏
  • 举报
回复
额。。这个原因感觉有点广泛啊。。 复制声音数据再进行处理如何?而不直接处理原生的声音数据

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧