Oss程序迁移到Alsa时遇到的问题

文章详细描述了从Oss接口转换为Alsa接口时遇到的问题,包括声音断断续续、存在大量杂音的现象。通过分析并调整snd_pcm_writei函数中参数frame_size的计算方式,最终解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这两天把以前的一个程序从Oss接口改为Alsa接口,按照Alsa的例子将声音输出部分修改后,播放时发出的声音断断续续,并且有很大的杂音。
    开始以为是Format没有设对,将所有的Format设了一遍仍然不行。
    将声音转成PCM数据用aplay来播放就没问题, 看了aplay的代码发现自己调用snd_pcm_writei有错。
    原来Oss接口时直接使用write(设备句 柄,buffer,data_size),现在改成snd_pcm_writei时没有修改,snd_pcm_writei要求的参数是(设备句 柄,buffer,frame_size),
    最后一个frame_size也就是buffer中的数据有多少个frame,这个可以用公式:
                      (buffer_size*8)/(采样位数*声道)
                      buffer_size*8是bit数,采样位数一般是16,声道就是1或者2
    这样典型的mp3 数据比如16bit,立体声,那么frame_size = buffer_size * 8 / (16*2),修改之后,播放正常了。
PS:
frame_size其实就是这些数据是多少个sample
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值