QNX的音频应用实例
来源:互联网 发布:使用域名的好处 编辑:程序博客网 时间:2024/05/16 01:19
一.概述
QNX音频类似于linux,采用节点的方式,open,read,write
二.查看节点类型
ls -l /dev/snd/
结果:
-rw-rw-rw- 1 root nto 0 Jan 01 00:07 controlC0-rw-rw-rw- 1 root nto 0 Jan 01 00:55 controlC1-rw-rw-rw- 1 root nto 0 Jan 01 00:55 controlC2lrw-rw-rw- 1 root nto 0 Jan 01 00:55 defaultc -> pcmC0D0clrw-rw-rw- 1 root nto 0 Jan 01 1970 defaultp -> pcmC0D1p-rw-rw-rw- 1 root nto 0 Jan 01 00:07 mixerC0D0-rw-rw-rw- 1 root nto 0 Jan 01 00:55 mixerC1D0-rw-rw-rw- 1 root nto 0 Jan 01 00:55 mixerC2D0-rw-rw-rw- 1 root nto 0 Jan 01 00:07 pcmC0D0c-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC0D0p-rw-rw-rw- 1 root nto 0 Jan 01 00:07 pcmC0D1p-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC1D0c-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC1D0p-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC1D1p-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC2D0c-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC2D0p-rw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmC2D1plrw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmNavigation -> pcmC2D1plrw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmPreferredc -> pcmC0D0clrw-rw-rw- 1 root nto 0 Jan 01 00:55 pcmPreferredp -> pcmC0D1p
C结尾的是capture的,P结尾是playback,另外C2D1是只card 2, device 1
三.sample code
<span style="white-space:pre"></span>snd_pcm_channel_info_tinfo;snd_pcm_channel_params_tparams;snd_pcm_channel_setup_tsetup;snd_pcm_t *pcmHandle;ret = snd_pcm_open(&pcmHandle, card,device, input ? SND_PCM_OPEN_CAPTURE : SND_PCM_OPEN_PLAYBACK);if(ret == EOK){printf("open success\n");}else{printf("open fault\n");}snd_pcm_plugin_set_disable( pcmHandle, PLUGIN_DISABLE_MMAP );memset( &info, 0, sizeof( info ) );info.channel = input ? SND_PCM_CHANNEL_CAPTURE : SND_PCM_CHANNEL_PLAYBACK;snd_pcm_plugin_info( pcmHandle, &info );memset( ¶ms, 0, sizeof( params ) );params.channel= info.channel;params.mode= SND_PCM_MODE_BLOCK;if( bits == 8 ){if( sign )params.format.format = SND_PCM_SFMT_S8;elseparams.format.format = SND_PCM_SFMT_U8;}else if( bits == 16 ){if( be && sign )params.format.format = SND_PCM_SFMT_S16_BE;else if( be )params.format.format = SND_PCM_SFMT_U16_BE;else if( sign )params.format.format = SND_PCM_SFMT_S16_LE;elseparams.format.format = SND_PCM_SFMT_U16_LE;}else if( bits == 24 ){if( be && sign )params.format.format = SND_PCM_SFMT_S24_BE;else if( be )params.format.format = SND_PCM_SFMT_U24_BE;else if( sign )params.format.format = SND_PCM_SFMT_S24_LE;elseparams.format.format = SND_PCM_SFMT_U24_LE;}params.format.interleave= 1;params.format.rate= rate;params.format.voices= 1;params.start_mode= SND_PCM_START_FULL;params.stop_mode= SND_PCM_STOP_ROLLOVER;if (input){params.buf.block.frag_size = params.format.rate * params.format.voices * sizeof(short) * 2 / 125;// Enforce 16ms frag size} else {params.buf.block.frag_size = info.max_fragment_size;}params.buf.block.frags_max= 2;params.buf.block.frags_min= 1;snd_pcm_plugin_params( pcmHandle, ¶ms );snd_pcm_plugin_prepare( pcmHandle, info.channel );memset( &setup, 0, sizeof( setup ) );setup.channel= info.channel;snd_pcm_plugin_setup( pcmHandle, &setup );
最后再执行read或者write动作
snd_pcm_plugin_read( arg->pcmHandleIn1, arg->audioBufferOut, arg->audioMaxLenOut );snd_pcm_plugin_write( arg->pcmHandleOut1, arg->audioBufferOut, arg->audioMaxLenOut);
1 0
- QNX的音频应用实例
- QNX车载操作系统音频功能扩展Acoustics for Voice 3.0-qnx的音频降噪技术
- qnx学习笔记-QNX下音频驱动调试-音频SGTL5000驱动的调试
- QNX下音频解码器SGTL5000驱动的调试
- QNX的应用移植迁移到Linux
- Qt在嵌入式系统QNX的HMI应用方案
- Android-MedioPlay播放应用内,内存卡,网络的音频实例
- iOS 9音频应用播放音频之第一个ios9音频实例
- iOS 9音频应用播放音频之第一个ios9音频实例2
- iOS 9音频应用播放音频之第一个ios9音频实例
- MCI音频函数的应用
- ALSA 音频应用的开发
- iPhone音频队列的应用
- java音频流的应用
- HTML音频标记的应用
- QNX的英文资料
- 微内核的QNX
- QNX的字符IO
- MYSQL添加远程用户
- Android屏幕适配经验
- IOS 中说一个文件找不到或者说一个文件重复的时候
- android activity返回键被dialog屏蔽
- Protocol Stack in Wi-Fi Chipsets
- QNX的音频应用实例
- 实现点击图片放大全屏
- 设计模式 观察者模式 以微信公众服务为例
- Linux 进程通信之 ——信号和信号量总结
- jQuery在HTML中动态插入节点的常用方法
- spring 注解
- 对LinkedHashMap的理解
- min.js.map在谷歌浏览器中404的问题
- 过滤选择器