这两天把以前的一个程序从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
PS:
frame_size其实就是这些数据是多少个sample
本文分享了一次从Oss接口改为Alsa接口时遇到的声音输出问题解决过程。通过调整snd_pcm_writei函数的frame_size参数,解决了播放声音断断续续及杂音问题。
137

被折叠的 条评论
为什么被折叠?



