milkv-duo256 开发板板载了一个麦克风,可以用来采集声音信号,采用的是 MIC4015P 高灵敏度咪头,焊接的时候注意正负极性,负极接 GND。
采用的是 SG200X 芯片自带 Audio ADC,在芯片的第 2 脚输入。
ADC 驱动
当前最新版本的 duo-buildroot-sdk (v1.1.4) 默认已经支持 Audio ADC,在内核中已经加载。
ADC 在设备树 build/boards/default/dts/cv181x/cv181x_base.dtsi
中配置如下:
adc: adc@0300A100 {
compatible = "cvitek,cv182xaadc";
reg = <0x0 0x0300A100 0x0 0x100>;
clocks = <&i2s_mclk 0>;
clock-names = "i2sclk";
clk_source = <0x04130000>; /* MCLK source is I2S3 */
};
ALSA 配置
duo-buildroot-sdk 默认已经配置好 ALSA 相关工具,可以直接使用。配置文件位于 buildroot-2021.05/configs/milkv-duo256m-sd_musl_riscv64_defconfig
,其中已经配置好录音和播放设备,如下:
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI=y
运行
正常启动进入 Linux 后,可在 Linux 命令行中查看设备:
$ ls /dev/snd
controlC0 controlC1 pcmC0D0c pcmC1D0p timer
- controlC0:用于声卡控制,C0 表示声卡0,对应上文的录音设备。
- controlC1:用于声卡控制,C1 表示声卡1,对应上文的播放设备。
- pcmC0D0c:用于录音的 pcm 设备,最后面的 “c” 是 capture 的缩写,表示录音
- pcmC1D0p:用于播放的 pcm 设备,最后面的 “p” 是 play 的缩写,表示放音
- timer :定时器
- 查看录音设备
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: cv182xaadc [cv182xa_adc], device 0: cviteka-adc 300a100.adc-0 [cviteka-adc 300a100.adc-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
- 设置麦克风音量,范围:0-24
$ amixer -Dhw:0 cset name='ADC Capture Volume' 24
- 录音
$ arecord -Dhw:0,0 -d 3 -r 48000 -f S16_LE -t wav test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
将录音存储在 test.wav 文件中。其中:
- -Dhw:0,0: 指定录音设备。hw:0,0表示使用第一个声卡的第一个硬件设备
- -d 3: 设置录音时长为3秒。
- -r 48000: 设置录音采样率为48000赫兹(Hz),这是CD音质的标准采样率。
- -f S16_LE: 设置录音格式为16位小端(Little Endian)PCM编码,这是音频处理中常用的一种格式。
- -t wav: 设置输出文件格式为WAV,这是一种无损音频格式。
- test.wav: 这是输出的音频文件名。
由于 milkv-duo256 开发板上默认没有喇叭可以测试录音文件,可以传到电脑上用音频播放软件播放。
$ scp root@192.168.188.34:/root/test.wav .