Oss程序迁移到Alsa时遇到的问题
2011-08-25 21:52
197 查看
http://mypyg.iteye.com/blog/845954
这两天把以前的一个程序从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接口,按照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时遇到的问题
- Oss程序迁移到Alsa时遇到的问题
- Oss程序迁移到Alsa时遇到的问题
- Rails程序迁移时遇到的问题
- Delphi程序升级遇到的运行报错问题
- 小程序开发红包遇到的问题 小程序发公众号的红包
- Hibernate 入门程序中遇到的问题
- Xcode运行范例程序遇到的问题Command /bin/sh failed with exit code 1
- 在Qt中移植VPU编解码程序时遇到的问题
- Notes迁移Exchange2010 数据中心系列之三:使用中遇到的问题 推荐
- 微信小程序录音文件格式silk遇到的问题及解决方法
- 编译Android程序时,遇到premature end of file问题
- android一个拍照程序开发中遇到的问题
- IIS配置遇到的问题——未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
- 我阅读的第一个程序GridView遇到的问题
- 迁移SharePoint Portal Server 2003 (sps2003) 遇到的问题
- Netty心跳程序遇到的2个问题
- 今天调试程序遇到了一个致命问题语法错误操作符丢失
- 修正使用ClickOnce升级程序遇到HRESULT: 0x800736B3问题
- 调程序遇到的问题-命名空间“Microsoft”中不存在类型或命名空间名称“Web”(是缺少程序集引用吗?)