跳转至

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、录音总体流程图如下:

audio_capture

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

audio_playback

5.3 ALSA mixer控制流程如下:

audio_mixer_control