10. 100ASK_V853-PRO开发板支持录音和播放音频

0.前言 ​ 本章主要讲述如何使用板载的mic拾音咪头录音并使用喇叭播放音频。
​ 音频_开发指南:https://tina.100ask.net/sdkmodule/linux_audiofrequency_developmentguide-02/#220-v853
​ 全志官方音频介绍:https://v853.docs.aw-ol.com/soft/tina_audio/#audio_1
100ask_v853-pro开发板资料汇总:
链接:100ask_100ask-pro 资料汇总 - allwinner / v853-pro - 嵌入式开发问答社区
100ask_v853-pro开发板购买链接:100ask_v853-pro开发板
1.硬件介绍 ​ v853 芯片提供了 audiocodec(芯片内置音频接口) x1、i2s/pcm(数字音频接口) x2、dmic(外置数字 mic 接口) x1,可以满足各类音频需求。100ask_v853-pro开发板板载两个mic拾音咪头和喇叭接口。如下图所示:
如果您想要使用喇叭接口播放声音,需要外接一个喇叭
2.音频驱动框架使用 在 tina linux 中使用的是标准的 alsa api,所以使用音频的功能可以使用标准的 alsa-utils。它提供了 amixer、aplay、arecord 等工具。在tina根目录下输入make menuconfig
book@100ask:~/workspaces/tina-v853-open$ make menuconfig 进入tina配置界面后,进入如下目录
> sound alsa-utils............ alsa (advanced linux sound architecture) utilities 如下图所示:
选中完成后会启用amixer、aplay、arecord功能,重新编译打包更新系统即可体验。
2.1 驱动调控:amixer amixer是命令行的 alsa 声卡驱动调节工具,用于启用、关闭各声卡,设置各声卡的音量。使用 amixer 命令列出当前注册的音频设备。
amixer 常用选项选项 功能-d,--device 指定声卡设备,默认使用default 常用命令命令 功能controls 列出指定声卡的所有控件contents 列出指定声卡的所有控件的具体信息cget 获取指定控件的信息cset 设定指定控件的值 选择 mic1 输入
amixer -d hw:audiocodec cset name='mic1 input select' 0 选择 mic2 输入
amixer -d hw:audiocodec cset name='mic2 input select' 0 开启 mic1
amixer -d hw:audiocodec cset name='mic1 switch' 1 开启 mic2
amixer -d hw:audiocodec cset name='mic2 switch' 1 设置 mic1 音量
amixer -d hw:audiocodec cset name='mic1 gain volume' 30 设置 mic2 音量
amixer -d hw:audiocodec cset name='mic2 gain volume' 30 开启 lineout 输出功能
amixer -d hw:audiocodec cset name='lineout output select' 1 开启 lineout 通路
amixer -d hw:audiocodec cset name='lineout switch' 1 设置输出音量
amixer -d hw:audiocodec cset name='lineout volume' 25 2.2 录音工具:arecord arecord 是命令行的 alsa 声卡驱动的录音工具,用于录音功能。
选项 功能-d,--device 指定声卡设备,默认使用default-l,--list-device` 列出当前所有声卡-t,--file-type 指定播放文件的格式,如voc,wav,raw,不指定的情况下会去读取文件头部作识别-c,--channels 指定通道数-f,--format 指定采样格式-r,--rate 采样率-d,--duration 指定播放的时间--period-size 指定period size--buffer-siz` 指定buffer size 查看录音设备
可以使用 arecord -l 命令查看开发板提供的录音设备。
arecord -l 麦克风录音
在录音之前,首先需要使用 amixer 打开音频通路,配置内部 mic1,mic2 录制双通道音频。
amixer -d hw:audiocodec cset name='mic1 input select' 0 && amixer -d hw:audiocodec cset name='mic2 input select' 0 && amixer -d hw:audiocodec cset name='mic1 switch' 1 && amixer -d hw:audiocodec cset name='mic2 switch' 1 && amixer -d hw:audiocodec cset name='mic1 gain volume' 30 && amixer -d hw:audiocodec cset name='mic2 gain volume' 30 使用 arecord 命令,使用板载的两个麦克风进行录音。
arecord -d hw:audiocodec -f s16_le -t wav -c2 -r 16000 -d 3 t.wav 2.3 播放工具:aplay aplay 是命令行的 alsa 声卡驱动的播放工具,用于播放功能。
选项 功能-d,--device 指定声卡设备,默认使用default-l,--list-devices 列出当前所有声卡-t,--file-type 指定播放文件的格式,如voc,wav,raw,不指定的情况下会去读取文件头部作识别-c,--channels 指定通道数-f,--format 指定采样格式-r,--rate 采样率-d,--duration 指定播放的时间--period-size 指定period size--buffer-size 指定buffer size 查看播放设备
使用 aplay -l 查看播放设备
aplay -l 扬声器播放音频
在播放之前,首先需要打开音频通路,配置扬声器播放音频,具体可以参照 amixer 配置。
amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout volume' 25 使用 aplay 通过外接扬声器播放刚才录制的音频。
aplay -d hw:audiocodec t.wav 3.测试录音功能 ​ 启动开发板后,在串口终端输入如下命令:
amixer -d hw:audiocodec cset name='mic1 input select' 0 && amixer -d hw:audiocodec cset name='mic2 input select' 0 && amixer -d hw:audiocodec cset name='mic1 switch' 1 && amixer -d hw:audiocodec cset name='mic2 switch' 1 && amixer -d hw:audiocodec cset name='mic1 gain volume' 30 && amixer -d hw:audiocodec cset name='mic2 gain volume' 30 && arecord -d hw:audiocodec -f s16_le -t wav -c2 -r 16000 -d 3 test.wav 例如:
root@tinalinux:/# [ 67.295067] random: crng init done[ 67.298885] random: 4 urandom warning(s) missed due to ratelimitingroot@tinalinux:/# root@tinalinux:/# root@tinalinux:/# amixer -d hw:audiocodec cset name='mic1 input select' 0 && > amixer -d hw:audiocodec cset name='mic2 input select' 0 && > amixer -d hw:audiocodec cset name='mic1 switch' 1 && > amixer -d hw:audiocodec cset name='mic2 switch' 1 && > amixer -d hw:audiocodec cset name='mic1 gain volume' 30 && > amixer -d hw:audiocodec cset name='mic2 gain volume' 30 && > arecord -d hw:audiocodec -f s16_le -t wav -c2 -r 16000 -d 3 test.wavnumid=23,iface=mixer,name='mic1 input select' ; type=enumerated,access=rw------,values=1,items=2 ; item #0 'differ' ; item #1 'single' : values=0numid=24,iface=mixer,name='mic2 input select' ; type=enumerated,access=rw------,values=1,items=2 ; item #0 'differ' ; item #1 'single' : values=0numid=17,iface=mixer,name='mic1 switch' ; type=boolean,access=rw------,values=1 : values=onnumid=18,iface=mixer,name='mic2 switch' ; type=boolean,access=rw------,values=1 : values=onnumid=12,iface=mixer,name='mic1 gain volume' ; type=integer,access=rw---r--,values=1,min=0,max=31,step=0 : values=30 | dbscale-min=0.00db,step=1.00db,mute=0numid=13,iface=mixer,name='mic2 gain volume' ; type=integer,access=rw---r--,values=1,min=0,max=31,step=0 : values=30 | dbscale-min=0.00db,step=1.00db,mute=0recording wave 'test.wav' : signed 16 bit little endian, rate 16000 hz, stereo 程序会自动录音并保存文件到当前目录下,查看当前目录可以看到保存的文件test.wav
root@tinalinux:/# lsbin etc lib rdinit run sys usrdata home mnt rom sbin test.wav vardev init proc root squashfs tmp www 4.播放音频 在串口终端下,输入以下命令,可以播放刚刚我们录制的音频
amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout volume' 31 && aplay -d hw:audiocodec test.wav 例如:
root@tinalinux:/# amixer -d hw:audiocodec cset name='lineout switch' 1 && > amixer -d hw:audiocodec cset name='lineout switch' 1 && > amixer -d hw:audiocodec cset name='lineout volume' 31 && > aplay -d hw:audiocodec test.wavnumid=20,iface=mixer,name='lineout switch' ; type=boolean,access=rw------,values=1 : values=onnumid=20,iface=mixer,name='lineout switch' ; type=boolean,access=rw------,values=1 : values=onnumid=16,iface=mixer,name='lineout volume' ; type=integer,access=rw---r--,values=1,min=0,max=31,step=0 : values=31 | dbrange- rangemin=0,,rangemax=1 | dbscale-min=0.00db,step=0.00db,mute=1 rangemin=2,,rangemax=31 | dbscale-min=-43.50db,step=1.50db,mute=1playing wave 'test.wav' : signed 16 bit little endian, rate 16000 hz, stereo ​ 此时如果我们接上了喇叭,喇叭就会播放刚刚录制的音频。
​ 同样我们也可以将音频文件拷贝到开发板中,使用以下命令
amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout volume' 31 && aplay -d hw:audiocodec test.wav 其中test.wav更换为您想要播放的音频文件的路径名称。

假设提前要播放的音频文件拷贝到tf卡中,插入tf卡后,挂载tf卡
root@tinalinux:/# mount /dev/mmcblk1p1 /mnt/extsd/ 查看tf卡中testsound文件夹下的测试音频文件
root@tinalinux:/# ls /mnt/extsd/testsound/test100.wav 使用如下命令播放测试音频
amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout switch' 1 && amixer -d hw:audiocodec cset name='lineout volume' 31 && aplay -d hw:audiocodec /mnt/extsd/testsound/test100.wav 例如:
root@tinalinux:/# amixer -d hw:audiocodec cset name='lineout switch' 1 && > amixer -d hw:audiocodec cset name='lineout switch' 1 && > amixer -d hw:audiocodec cset name='lineout volume' 31 && > aplay -d hw:audiocodec /mnt/extsd/testsound/test100.wavnumid=20,iface=mixer,name='lineout switch' ; type=boolean,access=rw------,values=1 : values=onnumid=20,iface=mixer,name='lineout switch' ; type=boolean,access=rw------,values=1 : values=onnumid=16,iface=mixer,name='lineout volume' ; type=integer,access=rw---r--,values=1,min=0,max=31,step=0 : values=31 | dbrange- rangemin=0,,rangemax=1 | dbscale-min=0.00db,step=0.00db,mute=1 rangemin=2,,rangemax=31 | dbscale-min=-43.50db,step=1.50db,mute=1playing wave '/mnt/extsd/testsound/test100.wav' : signed 16 bit little endian, rate 22050 hz, stereo 此时喇叭就会播放测试音频。
5.更换开机音乐 由于100ask_v853-pro开发板已经默认启用了开机音乐,自启脚本位于:
openwrt/target/v853/v853-vision/busybox-init-base-files/etc/init.d/s03audio 我们可以在开发板的串口终端的/etc/init.d/目录下找到s03audio文件
root@tinalinux:/# cd /etc/init.d/root@tinalinux:/etc/init.d# lss00mpp s50telnet rc.finals01logging s50usb rc.moduless03audio s50wifidaemon rc.preboots10udev s99swupdate_autorun rcks11dev adbd rcss20urandom cron sysntpds40network dbus wpa_supplicants41netparam dnsmasqs50dbus network 可以查看相关的脚本源码。
进入/home/res/audio/目录下,可以查看两个文件,分别为开机音乐startup.wav和关机音乐shutdown.wav
root@tinalinux:/etc/init.d# cd /home/res/audio/root@tinalinux:/home/res/audio# lsshutdown.wav startup.wav 我们可以通过更换startup.wav文件,来达到更换开机音乐的效果。假设我将tf卡中的test100.wav拷贝到/home/res/audio/目录下,并更换名称为startup.wav
root@tinalinux:/home/res/audio# cp /mnt/extsd/testsound/test100.wav /home/res/audio/startup.wavroot@tinalinux:/home/res/audio# sync 输入reboot,重启后即可通过喇叭听到更换后的开机音乐。

NVIDIA跨界医疗 极力研发医疗成像AI平台
基于工业物联网打造的泵站智慧云平台
阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准
近距离了解电动汽车中的谐振电容器
车载存储的演化之路,自动驾驶和智能座舱给存储市场带来更大机遇
10. 100ASK_V853-PRO开发板支持录音和播放音频
Qorvo®与National Instruments联合演示业内首款5G RF前端模块
片内RAM中堆栈的原理和作用解读
卖掉智能汽车业务之后江特电机能否逆势起飞?
电路板中上拉电阻和下拉电阻所起的作用
新型宽带圆极化贴片天线的应用设计
什么是人工智能?人工智能背后的技术原理和应用
地弹现象导致DCDC电源芯片工作不正常案例分享
帝人投资穿戴式科技 今年内开始销售运动医疗设备
柔性指纹传感器有望助力嵌入式安全门禁的实现
巨型复古游戏手柄的制作
Secure In-System-Programming保护固件的刻录安全
意法半导体氮化镓功率半导体PowerGaN系列首发,让电源能效更高、体积更纤薄
荣耀20青春版即将在全平台开售拥有三个版本售价1499元起
什么是内存盘