录音和内部Codec的播放
一 原理介绍
1.1 录音有两种方式
第一,采用dmic硬件采样音频模拟信号并转成数字信号,软件直接读dmic输出的数字信号并编码成指定的文件格式,从而录音产生相应格式的音频文件,比如wav格式。
第二,采用内部codec(简称icodec) + amic(采样音频模拟信号的传感器),从而,接上amic之后,硬件上可以实现录音。
1.2 播放
播放统一采用内部codec(简称icodec)这个设备实现。所以,icodec也是要软件配置的。
二 具体实现
2.1 alsa配置
2.2 icodec驱动配置
默认勾选加载模块时codec进入待机状态,播放时配置dac余下步骤(避免播放无声或滋滋声)
使能ADCL中MIC输入为单端模式: ad100 mic为差分不用勾选,ad102n/p为单端需要勾选
mic信号的增益(MICL_GAIN):外接amic时需要依据信号强弱设置改增益⼤⼩
⼿动设置ALCL增益(ALCL_GAIN):alcl为codec的adc的数字增益,⽤于调节录制⾳频的增益⼤⼩
输出信号的模拟增益(HPOUTL):⽤于调节播放⾳频的增益⼤⼩
录音时mic引脚需高电平,播放时功放引脚需高电平
开发板无dmic硬件,默认amic录音,若需要dmic录音,可配置dmic
2.3 buildroot 中测试工具的配置
cd buildroot/buildroot24
make menuconfig
三 录音、播放测试录音和播放的使用方法
3.1 列出设备
# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: icodecsoundcard [icodec-sound-card], device 0: ad100-icodec-pcm ingenic-icodec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
可知,card0为当前内部icodec设备节点名,device0 可作为录音设备
3.2 使用amic录音
arecord -Dhw:0,0 -d 10 -f S16_LE -r 16000 -c 1 -t wav /usr/data/test.wav
参数解析
-D 指定了录⾳设备0,0 是card 0 device 0的意思,本例中是AMIC
-d 指定录⾳的时⻓,单位时秒 # 录⾳时⻓:10s
-f 指定录⾳格式 # ⾳频存储格式:S16_LE(有符号16位⼩端存储)
-r 指定了采样率,单位时Hz # 采样频率:16000hz
-c 指定channel 个数 # 通道数:1
-t 指定⽣成的⽂件格式 # ⽂件格式:wav
3.3 使用aplay播放这些录音文件
aplay -Dplughw:0,0 /usr/data/test.wav
此时如果板子接功放就会有声音输出
四 软件demo 接口程序
4.1 demo接口程序可以使用cmd_alsa 命令
cmd_alsa 是君正平台自主研发的用于调试音频的重要工具,客户可以参考其源码进行上层应用的开发。 具体位置如下:
libhardware2/src/cmds/alsa_main.c
4.1.1 AMIC 录音
cmd_alsa record device=hw:0,0 rate=48000 channels=1 time=10 > /tmp/test.wav
参数简单释义:
record :实现录⾳功能。
device=hw:0,0 :使⽤card0 的device 0设备,AMIC
rate=48000 : 采样率为48k。
channels=1:单通道。
time=10 : 录⾳⽂件⻓度为10秒。
/tmp/test.wav : 指定最终⽣成的⾳频⽂件
将在⽂件系统中⽣成:/tmp/test.wav
4.1.2 ICODEC + SPK播放
cmd_alsa play device=plughw:0,0 rate=48000 channels=1 file=/tmp/test.wav
参数简单释义:
play :实现播放功能。
device=plughw:0,0 :使⽤card0 的device 0设备,对应icodecsoundcard
rate=48000 : 采样率为48k
channels=1:单通道
file=/tmp/test.wav : 所要播放的⾳频⽂件