Skip to main content

录音和内部Codec的播放

一 原理介绍

1.1 录音有两种方式

​ 第一,采用dmic硬件采样音频模拟信号并转成数字信号,软件直接读dmic输出的数字信号并编码成指定的文件格式,从而录音产生相应格式的音频文件,比如wav格式。

​ 第二,采用内部codec(简称icodec) + amic(采样音频模拟信号的传感器),从而,接上amic之后,硬件上可以实现录音。

1.2 播放

​ 播放统一采用内部codec(简称icodec)这个设备实现。所以,icodec也是要软件配置的。

二 具体实现

2.1 alsa配置

2023-11-24_15-44

2.2 icodec驱动配置

默认勾选加载模块时codec进入待机状态,播放时配置dac余下步骤(避免播放无声或滋滋声)

使能ADCL中MIC输入为单端模式: ad100 mic为差分不用勾选,ad102n/p为单端需要勾选

mic信号的增益(MICL_GAIN):外接amic时需要依据信号强弱设置改增益⼤⼩

⼿动设置ALCL增益(ALCL_GAIN):alcl为codec的adc的数字增益,⽤于调节录制⾳频的增益⼤⼩

输出信号的模拟增益(HPOUTL):⽤于调节播放⾳频的增益⼤⼩

录音时mic引脚需高电平,播放时功放引脚需高电平

01

开发板无dmic硬件,默认amic录音,若需要dmic录音,可配置dmic

2023-11-24_15-47

2.3 buildroot 中测试工具的配置

cd buildroot/buildroot24
make menuconfig

4

三 录音、播放测试录音和播放的使用方法

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 : 所要播放的⾳频⽂件