1)包含OSS头文件:#include <soundcard.h>2.缓冲区设置的性能分析在设置驱动内部的缓冲区时,存在一个矛盾:在声卡驱动程序中,为了防止抖动的出现,保证播放的性能,设置了内部缓冲区-DMA buffer。在播放时,应用程序通过驱动程序首先将音频数据从应用程序缓冲区-APP buffer,写入到DMA buffer。接着,由DMA控制器把DMA buffer中的音频数据发送到DAC(Digital-Analog Converter)。某些时刻CPU非常的繁忙,比如正在从磁盘读入数据,或者正在重画屏幕,没有时间向DMA buffer放入新的音频数据。DAC由于没有输入新的音频数据,导致声音播放的间断,这就出现了声音的抖动现象。此时,需要将DMA buffer设置的足够大,使得DAC始终有数据播放。但是,DMA buffer的增大使得每次从APP buffer拷贝的时间也变长,导致了更大的播放延迟。这对于那些延迟敏感的应用场合,如与用户有交互的音频应用程序,就会出现问题。
2)打开设备文件,返回文件描述符
3)使用ioctl设置设备的参数,控制设备的特性
4)对于录音,从设备读(read)
5)对于播放,向设备写(write)
6)关闭打开的设备
1 2 3 4 5 | int param; param = ( 0x0004 << 16) + 0x000a; if (ioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, ¶m) == -1) { ...error handling... } |
1 2 3 4 5 6 7 8 | while(1) { time1=my_gettime(); 通过空循环消耗一定的CPU时间 time2=my_gettime(); write(audio_fd,playbuffer,fragmentsize); time3=my_gettime(); } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |