ALSA 声音采集播放程序说明
1.demo测试项描述¶
本demo可以测试Comake PI D1环境下的ALSA接口与场景,包括录音、播放、passthrough直连,AMIC/DMIC/I2S/ECHO测试,支持录音增益和播放音量设置。
2.编译环境说明¶
Note
一般默认板端已经打包好了相应程序,因此程序编译并非必须。你可以直接在板端 /customer/sample_code/audio_ai_ao_demo 文件夹中找到prog_audio_ai_ao_demo。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。
2.1、在project路径下根据板子(nand/nor,ddr型号等)选择deconfig进行整包编译;
例如Comake PI D1型号板子,设置工具链,使用emmc配置命令参考如下,其他板子参考具体型号的《环境搭建参考》。
export ARCH=arm export CROSS_COMPILE=arm-unknown-linux-gnueabihf-12.4.0- export PATH=$PATH:/tools/toolchain/riscv_gcc/bin/:/tools/toolchain/arm-unknown-linux-gcc-12.4.0-glibc-2.37-gnueabihf/bin make dispcam_pcupid.emmc.glibc-12.4.0-arm-squashfs.comake.pi.d1.1024.dual_sensor.bga_ddr4_riscv_defconfig make clean; make image -j16
2.2、进入 sdk\verify\sample_code 目录下,执行 :
make clean; make source/pcupid/audio/ai_ao_demo
将out目录中的可执行文件prog_audio_ai_ao_demo放到板子,/customer/sample_code/audio_ai_ao_demo路径上,修改权限777。
3.运行环境说明¶
Note
如果你下载使用的是我们提供的代码包且使用了例中的defconfig进行编译,那么以下dts配置不用自行修改,已默认配置完毕。
目前运行的板子型号为Comake PI D1
3.1、AMIC连接MIC0,MIC1,MIC2(如图中绿色框所示),扬声器连接SPK_L和SPK_L(如图中蓝色框所示);
3.2、线形4麦克风阵列的DMIC连接J8(如图中黑色框所示),padmux中配置(kernel/arch/arm/boot/dts/pcupid-comake-pi-d1-dual-sensor-padmux.dtsi
)如下引脚,同时注释掉冲突的引脚:
#if 1 // DMIC <PAD_GPIOA_14 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC0_CLK>, <PAD_GPIOA_15 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC0_D0>, <PAD_GPIOA_16 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC0_D1>, <PAD_GPIOA_17 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC0_D2>, <PAD_GPIOA_18 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC0_D3>, // PM_IR <PAD_PM_ADC00_IN PINMUX_FOR_PM_IR_IN_MODE_2 MDRV_PUSE_IR4>, #endif
4.运行命令与结果说明¶
执行 cd /customer/sample_code/audio_ai_ao_demo
。到文件相应路径。
4.1、命令行使用格式:./prog_audio_ai_ao_demo [usecase] -i [interface] [options]
usecase和interface的可选对应关系如下表:
usecase | interface |
---|---|
capture | adc_a/adc_b/dmic/echo_rx/i2s_a_rx/i2s_b_rx/i2s_c_rx |
playback | dac/echo_tx/i2s_a_tx/i2s_b_tx/i2s_c_tx |
passthrough | adc_a-dac/adc_b-dac/echo_tx-echo_rx |
pass_mix | adc_a/adc_b-dac 的硬件混音,包含播放音频和AI-AO直连 |
pass_echo | echo_tx-echo_rx 回声采集 |
options说明如下表:
options | 含义 | options | 含义 |
---|---|---|---|
-A | 捕获音频的声卡序号 | -F | 捕获音频的文件保存路径,wav格式 |
-a | 播放音频的声卡序号 | -f | 播放的音频路径,wav格式 |
-D | 捕获音频的设备序号 | -T | 捕获音频的时长,单位秒 |
-d | 播放设备序号 | -t | 播放音频的时长,单位秒 |
-C | 捕获音频的通道数 | -V | 捕获音频的增益,百分比,0-100 |
-c | 播放音频的通道数 | -v | 播放音频的音量,百分比,0-100 |
-R | 捕获音频的采样率 | -r | 播放音频的采样率 |
4.2、举例说明:
//使用AMIC录音10秒, 录音增益设置60%, 音频保存在test.wav中 ./prog_audio_ai_ao_demo capture -i adc_a -F test_amic.wav -A 0 -D 0 -R 8000 -C 1 -T 10 -V 60
//使用DMIC录音10秒, 录音增益设置60%, 音频保存在test.wav中 ./prog_audio_ai_ao_demo capture -i dmic -F test_dmic.wav -A 0 -D 0 -R 8000 -C 1 -T 10 -V 60
//使用SPEAKER播放10秒音频, 音量设置40% ./prog_audio_ai_ao_demo playback -i dac -f ./test.wav -a 0 -d 0 -c 2 -t 10 -v 40
//passthrough AI硬件直连AO边录边播 ./prog_audio_ai_ao_demo passthrough -i adc_a-dac -a 0 -d 0 -r 8000 -v 60 -A 0 -D 0 -R 8000 -V 60
//播放一段音频,开启echo采集扬声器回声,录音增益50%,播放音量40%,时长10s ./prog_audio_ai_ao_demo pass_echo -i echo_tx-echo_rx -f ./48K_16bit_STERO_30s.wav -F echorx.wav -a 0 -d 0 -r 48000 -t 10 -v 40 -A 0 -D 0 -R 48000 -T 10 -C 2 -V 50
// ADC/DAC硬件混音,循环播放10秒钟音频,然后开启ADC-DAC的硬件直连 // 此时喇叭播放的声音中会包含AMIC输入和音乐,Ctrl+C退出 // t:音乐时长,demo会循环播放该片段直到退出 // v:音乐播放的音量,V:sidetone音量,控制passthrough的音量大小 ./prog_audio_ai_ao_demo pass_mix -i adc_a-dac -f ./48K_16bit_STERO_30s.wav -a 0 -d 0 -r 48000 -t 10 -v 40 -A 0 -D 0 -R 48000 -V 50
5.关键代码实现说明¶
5.1、录音总体流程图如下:
5.2、播放音频的总体流程图如下:
5.3 ALSA mixer控制流程如下: