主题 : 求助:使用oss驱动放音使用参数SOUND_PCM_SYNC声音中间会有停顿 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 58759
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2011-11-13
最后登录: 2012-03-18
楼主  发表于: 2011-12-19 23:06

 求助:使用oss驱动放音使用参数SOUND_PCM_SYNC声音中间会有停顿

系统环境:ubuntu 11.04   tiny6410 : 2.6.38
软件环境:
arm-linux-gcc 4.5.1
问题描述:

我的数据缓冲区每段20ms,总长10s,当调用write函数后再调用以下函数等待每次放音完成
ret = ioctl(*fd, SOUND_PCM_SYNC, 0);
if (ret == -1)
     perror("SOUND_PCM_SYNC ioctl failed");

请问这种情况出现的原因是什么?

补充:这方面的资料比较少,网上搜了没有结果,谢谢大家指教
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
1楼  发表于: 2011-12-20 10:44
不建议使用OSS接口,建议用ALSA接口
级别: 新手上路
UID: 58759
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2011-11-13
最后登录: 2012-03-18
2楼  发表于: 2011-12-20 11:50
谢谢回复,要对以前的硬件已有的硬件兼容,oss必须实现
我现在想到的几种方法:
1.如果我把数据单元的时间变成1s,也就是原20ms的50倍,10s的缓冲区只需要10次循环,这样每次循环中执行此函数所产生的影响会小一些了,
2.每写入一个数据单元后usleep(15000),呵呵,认为write系统调用花费5000,这样测试了下,声音比较连续了,中间没有了原来的停顿。

以上方法肯定不是最佳的,哪位朋友熟悉oss驱动,谢谢给些提示