ALSA 声音采集播放程序说明¶
1.demo测试项描述¶
本demo可以测试Comake PI D2 B板环境下的ALSA接口与场景,包括录音、播放,DMIC/ECHO测试,支持录音增益和播放音量设置。
2.编译环境说明¶
Note
一般默认板端已经打包好了相应程序,因此程序编译并非必须。你可以直接在板端 /customer/sample_code/bin 文件夹中找到prog_audio_alsa_ai_ao_demo。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。
2.1、在project路径下根据板子(nand/nor,ddr型号等)选择deconfig进行整包编译;
例如Comake PI D2 B型号板子,设置工具链,使用emmc配置命令参考如下,其他板子参考具体型号的《环境搭建参考》。
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATH
make ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig
make clean;make image -j16;
2.2、进入 sdk\verify\sample_code 目录下,执行 :
make clean; make source/iford/audio/alsa_ai_ao_demo
将out目录中的可执行文件prog_audio_alsa_ai_ao_demo放到板子,/customer/sample_code/bin路径上,修改权限777。
同时把依赖文件放到板端/customer/3rd_party_libs/alsa/res/alsa下,把libs放到板端/config/lib下;
依赖文件路径:
sdk/verify/sample_code/source/iford/audio/alsa/res/alsa
libs路径:
sdk/verify/sample_code/source/iford/audio/alsa/glibc/11.1.0/arm
3.运行环境说明¶
Note
如果你下载使用的是我们提供的代码包且使用了例中的defconfig进行编译,那么以下dts配置不用自行修改,已默认配置完毕。
目前运行的板子型号为Comake PI D2 B板
3.1、DMIC连接J5 DMIC接口,扬声器连接CON4;
3.2、padmux中配置(kernel/arch/arm/boot/dts/iford-ssc029d-s01a-d2-full-padmux.dtsi)如下引脚,同时注释掉冲突的引脚:

#if 1
//LINEOUT AMP
<PAD_MSPI_DO PINMUX_FOR_GPIO_MODE MDRV_PUSE_AIO_AMP_PWR>,
#endif
#if 1
//DMIC
<PAD_SD0_CMD PINMUX_FOR_DMIC_2CH_MODE_1 MDRV_PUSE_DMIC0_D0>,
<PAD_SD0_CLK PINMUX_FOR_DMIC_2CH_MODE_1 MDRV_PUSE_DMIC0_CLK>,
#endif
4.运行命令与结果说明¶
执行 `cd /customer/sample_code/bin 。到文件相应路径。
先执行以下命令:
export ALSA_CONFIG_DIR=/customer/3rd_party_libs/alsa/res/alsa
4.1、命令行使用格式:./prog_audio_alsa_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 |
| 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 | 播放音频的采样率 |
| -i | 捕获音频的输入源选择 |
4.2、举例说明:
//使用DMIC录音10秒, 录音增益设置60%, 音频保存在test.wav中
./prog_audio_alsa_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_alsa_ai_ao_demo playback -i dac -f ./test.wav -a 0 -d 0 -c 2 -t 10 -v 40
//播放一段音频,开启echo采集扬声器回声,录音增益50%,播放音量40%,时长10s
./prog_audio_alsa_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
5.关键代码实现说明¶
5.1、录音总体流程图如下:

5.2、播放音频的总体流程图如下:

5.3 ALSA mixer控制流程如下:
