音频
1. 简介
RV1106 SoC 内置的⾳频 IP 模块,可以通过它外接模拟麦克⻛,通过模-数转换,将外部信号录⾳采集传给 CPU;CPU 也可以将本地的PCM (全称是脉冲编码调制数据) ⾳频数字信号,通过数-模转换后再播放出来。更多详细用法,请参考相关数据手册里面的音频部分。由于 Luckfox-Pico-Pro/Max 未引出相关的音频引脚,本教程仅适用 Luckfox-Pico-Ultra 上使用。
型号 | 适用系统 |
---|---|
Luckfox Pico Ultra/Ultra W | Buildroot |
- 注意:如果是烧录
Ubuntu22.04
系统,可以下载ffmpeg
工具来进行录音和播放音乐。
2. 声音配置
查看声卡设备
# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: rvacodec [rv-acodec], device 0: ffae0000.i2s-rv1106-hifi ff480000.acodec-0 [ffae0000.i2s-rv1106-hifi ff480000.acodec-0]
Subdevices: 0/1
Subdevice #0: subdevice #0
# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rvacodec [rv-acodec], device 0: ffae0000.i2s-rv1106-hifi ff480000.acodec-0 [ffae0000.i2s-rv1106-hifi ff480000.acodec-0]
Subdevices: 1/1
Subdevice #0: subdevice #0card0
:SOC 自带的音频处理 IP 模块。
声卡的驱动目录
# ls /dev/snd/
by-path controlC0 pcmC0D0c pcmC0D0p- controlC0:用于声卡控制,C0 表示声卡0,对应上文的SOC自带的声音输出。
- pcmC0D0c:用于录音的 pcm 设备,最后面的“c”是 capture 的缩写,表示录音
- pcmC0D0p:用于播放的 pcm 设备,最后面的“p”是 playback 的缩写,表示放音。
- by-path: 保存着设备的对应关系
# ls -l /dev/snd/by-path/
total 0
lrwxrwxrwx 1 root root 12 Jan 1 2021 platform-acodec-sound -> ../controlC0
3. 配置声卡
使用 amixer 或 rk_mpi_amix_test --list_contents 都可以获取声卡上的所有可用音频控制项(controls)。mpi_amix_test 源码位于 SDK 目录 //media/rockit/rockit/mpi/example/mod/ 下。
查看内置 Codec 增益所有状态
# rk_mpi_amix_test --list_contents
cmd parse result:
sound control id : 0
control name : (null)
control value : (null)
list controls : 0
list contents : 1
Number of controls: 25
ctl type num name value
0 ENUM 1 I2STDM Digital Loopback Mode , DisabledMode1Mode2Mode2 Swap
1 INT 1 ADC MIC Left Gain 2 (range 0->3)
2 INT 1 ADC MIC Right Gain 2 (range 0->3)
3 INT 1 ADC ALC Left Volume 6 (range 0->31)
4 INT 1 ADC ALC Right Volume 6 (range 0->31)
5 INT 1 ADC Digital Left Volume 195 (range 0->255)
6 INT 1 ADC Digital Right Volume 195 (range 0->255)
7 ENUM 1 ADC HPF Cut-off , OffOn
8 INT 1 ALC AGC Left Volume 12 (range 0->31)
9 INT 1 ALC AGC Right Volume 12 (range 0->31)
10 INT 1 ALC AGC Left Max Volume 7 (range 0->7)
11 INT 1 ALC AGC Right Max Volume 7 (range 0->7)
12 INT 1 ALC AGC Left Min Volume 0 (range 0->7)
13 INT 1 ALC AGC Right Min Volume 0 (range 0->7)
14 ENUM 1 ALC AGC Left Switch , OffOn
15 ENUM 1 ALC AGC Right Switch , OffOn
16 ENUM 1 AGC Left Approximate Sample Rate , 96KHz48KHz44.1KHz32KHz24KHz16KHz12KHz8KHz
17 ENUM 1 AGC Right Approximate Sample Rate , 96KHz48KHz44.1KHz32KHz24KHz16KHz12KHz8KHz
18 ENUM 1 ADC Mode , DiffadcLSingadcLDiffadcRSingadcRSingadcLRDiffadcLR
19 ENUM 1 ADC MICBIAS Voltage VREFx0_8VREFx0_825VREFx0_85VREFx0_875, VREFx0_9VREFx0_925VREFx0_95VREFx0_975
20 ENUM 1 ADC Main MICBIAS Off, On
21 ENUM 1 ADC MIC Left Switch , WorkMute
22 ENUM 1 ADC MIC Right Switch , WorkMute
23 INT 1 DAC LINEOUT Volume 20 (range 0->30)
24 INT 1 DAC HPMIX Volume 2 (range 0->2)I2STDM Digital Loopback Mode
:表示 I2STDM 控制器是否工作在回采模式下- Disabled:默认状态,不开启回采模式
- Mode1:适用于4ch 使用场景。1-2 声道为 MIC 拾音数据,3-4 声道为回采数据
- Mode2:适用于 2ch 使用场景。左声道为 MIC 拾音数据,右声道为播放的右声道的回采数据
- Mode2 Swap:适用于 2ch 使用场景。左声道为播放的左声道的回采数据,右声道为 MIC 拾音数据。与 Mode2 声道顺序相反
ACodec ADC Boost Gain
:为 codec 模拟音量,数值实际有效取值范围为1~3- vol 0: Disabled and not recommended
- vol 1: 0dB
- vol 2: 20dB
- vol 3: 12dB
ACodec ADC ALC PGA Gain
:为 codec 模拟音量,数值取值范围为0~255- min: -9dB (vol: 0)
- max: +37.5dB (vol: 255)
- step: +1.5dB
- location: 0dB (vol: 6)
ACodec ADC Digital Gain
:为 codec 数字音量,数值取值范围为0~255- min: -97.5dB (vol: 0)
- max: +30dB (vol: 255)
- step: +0.5dB
- location: 0dB (vol: 195)
ADC Mode
:“Diff”为差分“Differential”的缩写;“Sing”为单端“Single-end”的缩写。用于配置 ACodec ADC 工作在差分或者单端模式。默认为“Diff”差分模式。且为了最大限度节省功耗,ADC 仅使能L左声道。因此,“DiffadcL”为默认首选项。ACodec DAC Lineout Gain
:音量数值取值范围为0~30- min: -39dB (vol: 0)
- max: +6dB (vol: 30)
- step: +1.5dB
- location: 0dB (vol: 26)
ACodec DAC HPMIX Gain
:它为 Lineout 的前级 Gain,通常不做设置。音量数值取值范围实际为1和2- vol 0: Disabled and not recommended
- vol 1: 0dB
- vol 2: 6dB
AGC Left Approximate Sample Rate
:PCM(脉冲编码调制)音频的常用采样率包括但不限于以下几种- 8 kHz:用于电话系统和语音通信,一般用于窄带语音通信,音质较差
- 16 kHz:常见于语音识别、语音留言等应用中,音质较好
- 32 kHz:用于早期的音频存储和播放设备,也常见于一些低质量音频录制设备
- 44.1 kHz:CD音质标准采样率,也是许多数字音频文件的标准采样率,适用于音乐存储和播放
- 48 kHz:广泛应用于数字音频领域,包括音乐录制、电影制作等,也是许多专业和消费级数字音频设备的标准采样率
- 96 kHz:高保真音频录制和播放,用于专业音乐制作和发烧友级别的音频设备
4. 录制
使用采样率16kHz/2ch/16bit的 PCM 格式录音,rk_mpi_ai_tes t命令同样默认处理16bit位深。
rk_mpi_ai_test --sound_card_name=hw:0,0 --device_rate=16000 --device_ch=2 --out_rate=16000 --out_ch=2 --output=/tmp
--sound_card_name=hw:0,0
:指定音频输入设备的名称为 "hw:0,0",这通常是 ALSA(Advanced Linux Sound Architecture)中设备的名称,代表第一个声卡的第一个设备--device_rate=16000
:指定音频输入设备的采样率为 16000 Hz--device_ch=2
:指定音频输入设备的通道数为 2(立体声)--out_rate=16000
:指定输出音频的采样率为 16000 Hz--out_ch=2
:指定输出音频的通道数为 2(立体声)--output=/tmp
:指定输出音频数据的文件路径为 /tmp 目录
使用采样率16kHz/2ch/16bit的 WAV 格式录音
arecord -f S16_LE -c 2 -r 16000 -D hw:0 -d 30 test.wav
-f S16_LE
:指定PCM格式为16位小端(16-bit Little Endian),常见采样大小有 8 BIT、16BIT、32BIT(FLTP)-c 2
:指定声道数为2,即双声道。一般有单通道、双声道、四声道、5.1声道等四种通道数-r 16000
:指定采样率为16 kHz-D hw:0
:指定音频设备为hw:0-d 30
:指定录制时间为30秒test.wav
:指定输出文件名为test.wav
如果没有指定采样率参数,arecord 将使用默认的采样率。通常,arecord 的默认采样率是44100 Hz(44.1 kHz),这是 CD 音频标准的采样率。
arecord -f cd -Dhw:0 -d 30 test.wav
5. 播放
播放 PCM 格式的音频。
rk_mpi_ao_test -i /root/2.pcm --sound_card_name=hw:0,0 --device_ch=2 --device_rate=16000 --input_rate=16000 --input_ch=2
播放 WAV 格式的音频。
aplay -Dhw:0 test.wav
播放 MP3 格式的音频。
madplay anheqiao.mp3
在音频格式丰富多样的情况下,我们可以利用 ffmpeg 工具,将各种音频统一转换成 WAV 格式。
ffmpeg -i anheqiao.mp3 -f wav -acodec pcm_s16le -ar 44100 -ac 2 output.wav
-f wav
选项来明确指定输出文件的格式为 WAV-acodec pcm_s16le
选项指定了音频编解码器为pcm_s16le
,表示使用 16 位有符号整数格式进行编码-ar 44100
选项指定了输出音频的采样率为 44100 Hz-ac 2
选项指定了输出音频的声道数为 2,表示双声道音频
6. 音量调整
调节扬声器音量(推荐)
# amixer cset name='DAC LINEOUT Volume' 15
numid=24,iface=MIXER,name='DAC LINEOUT Volume'
; type=INTEGER,access=rw---R--,values=1,min=0,max=30,step=0
: values=15
| dBscale-min=-39.00dB,step=1.50dB,mute=1- 根据自己的需求调节,范围是0-30
使用 sox 调节音量
#查看音量可以最大调整值倍数——Volume adjustment
# sox anheqiao.wav -n stat
Samples read: 22058820
Length (seconds): 250.100000
Scaled by: 2147483647.0
Maximum amplitude: 0.891235
Minimum amplitude: -0.891266
Midline amplitude: -0.000015
Mean norm: 0.153542
Mean amplitude: -0.000068
RMS amplitude: 0.206771
Maximum delta: 1.232666
Minimum delta: 0.000000
Mean delta: 0.060496
RMS delta: 0.092891
Rough frequency: 3153
Volume adjustment: 1.122
#设置音量因子,生成另一个文件
sox -v 0.2 anheqiao.wav output.wav- SoX是一个强大的音频处理工具,但是它的某些功能,比如MP3编码,可能需要特定的编译选项和依赖库才能支持。