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

  这两天把以前的一个程序从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

你可能感兴趣的:(Oss程序迁移到Alsa时遇到的问题)