本节了解一下rkmedia中ai/ao模块的使用。
AI/AO模块通过对Linux ALSA音频接口的封装,实现音频输入输出功能。
AI初始化:
AI_CHN_ATTR_S ai_attr;
ai_attr.pcAudioNode = "default";
ai_attr.enSampleFormat = enSampleFmt;
ai_attr.u32NbSamples = RK_SAMPLE_FMT_S16;
ai_attr.u32SampleRate = 1024;
ai_attr.u32Channels = 2;
ai_attr.enAiLayout = AI_LAYOUT_NORMAL;
ret = RK_MPI_AI_SetChnAttr(0, &ai_attr);
ret |= RK_MPI_AI_EnableChn(0);
if (ret) {
printf("Enable AI[0] failed! ret=%d\n", ret);
return -1;
}
AO初始化:
AO_CHN_ATTR_S ao_attr;
ao_attr.pcAudioNode = "default";
ao_attr.enSampleFormat = RK_SAMPLE_FMT_S16;
ao_attr.u32NbSamples = 1024;
ao_attr.u32SampleRate = 16000;
ao_attr.u32Channels = 2;
ret = RK_MPI_AO_SetChnAttr(0, &ao_attr);
ret |= RK_MPI_AO_EnableChn(0);
if (ret) {
printf("ERROR: create ao[0] failed! ret=%d\n", ret);
return -1;
}
音频节点默认是"default",实际就是card 0 ,device 0 。如果连接了其他声卡,节点需要更改。
可能是card 1,device 0 那就让他把节点设置成 hw:1,0
音频调试工具以及常用命令:
录音(arecord):
1、列出声卡和数字音频设备:arecord -l
2、录音:arecord -Dhw:0,0 -c 2 -r 16000 -f S16_LE /temp/test.wav
arecord -Dhw:0,0 -d 10 -r 16000 -c 2 -f S16_LE -t wav test.wav
arecord -Dhw:0,0 -c 1 -r 8000 -f S16_LE /tmp/test.wav
播放(aplay):
1、播放:aplay -t raw -c 1 -f S16_LE -r 8000 test2.pcm
接口配置(amixer):
amixer:
Usage: amixer
几个重要命令介绍:
scontrols : 显示所有的简单控件
scontents: 显示所有的简单控件的描述
sset : 控制简单控件
sget:显示简单控件的内容
controls: 显示所有的控件
cset:控制控件
cget:显示控件
如果板子录音没有声音,可能是mixer 没有设置通路。
1、amixer contents
2、amixer cset numid=2,iface=MIXER,name='Capture MIC Path' 'Main Mic'
3、amixer cget numid=2,iface=MIXER,name='Capture MIC Path' 设置完后查看下是否设置成功
如果音响没有声音:
amixer -c 0 contents
amixer -c 0 cset numid=1 2
以上两种设置语法格式,都可以设置。根据自己板子的信息来配置。
[root@RV1126_RV1109:/]# amixer contents
numid=3,iface=MIXER,name='Master Playback Volume'
; type=INTEGER,access=rw---RW-,values=2,min=0,max=255,step=0
: values=255,255
| dBscale-min=-20.00dB,step=0.03dB,mute=0
numid=2,iface=MIXER,name='Capture MIC Path'
; type=ENUMERATED,access=rw--l---,values=1,items=4
; Item #0 'MIC OFF'
; Item #1 'Main Mic'
; Item #2 'Hands Free Mic'
; Item #3 'BT Sco Mic'
: values=1
numid=1,iface=MIXER,name='Playback Path'
; type=ENUMERATED,access=rw------,values=1,items=11
; Item #0 'OFF'
; Item #1 'RCV'
; Item #2 'SPK'
; Item #3 'HP'
; Item #4 'HP_NO_MIC'
; Item #5 'BT'
; Item #6 'SPK_HP'
; Item #7 'RING_SPK'
; Item #8 'RING_HP'
; Item #9 'RING_HP_NO_MIC'
; Item #10 'RING_SPK_HP'
: values=0
numid=4,iface=MIXER,name='Digital Capture Volume'
; type=INTEGER,access=rw---RW-,values=2,min=0,max=100,step=0
: values=100,100
| dBscale-min=-30.00dB,step=0.30dB,mute=0
注意:在使用rkmedia 的音频输入有问题时,首先要确保使用arecord和aplay命令可以获取、播放声音。如果这个都无法保证,需要确认音频节点或者驱动、硬件等是否正确。
多路音频输入输出:
具体可以参考rkmedia中example/multi_audio_test文件夹,需要配置asound.conf分离音频
如有其他问题,可以在评论区一起探讨。
文章汇总:RKMEDIA使用简介_未_定的博客-CSDN博客