0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式Linux那些事 来源:嵌入式Linux那些事 作者:嵌入式Linux那些事 2023-05-12 10:40 次阅读

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开发板

pYYBAGRdo4yAf_iVAASQ3zSjFR0352.png

1.硬件介绍

​ V853 芯片提供了 AudioCodec(芯片内置音频接口) x1、I2S/PCM(数字音频接口) x2、DMIC(外置数字 MIC 接口) x1,可以满足各类音频需求。100ASK_V853-PRO开发板板载两个MIC拾音咪头和喇叭接口。如下图所示:

pYYBAGRdpmeAEAP8ABojeN0xjE0296.png

如果您想要使用喇叭接口播放声音,需要外接一个喇叭

poYBAGRdpm2AKlGKAAgNSYTJwxI715.png

2.音频驱动框架使用

Tina Linux 中使用的是标准的 ALSA API,所以使用音频的功能可以使用标准的 alsa-utils。它提供了 amixeraplayarecord 等工具。在Tina根目录下输入make menuconfig

book@100ask:~/workspaces/tina-v853-open$ make menuconfig

进入Tina配置界面后,进入如下目录

 > Sound
 	<*> alsa-utils............ ALSA (Advanced Linux Sound Architecture) utilities

如下图所示:

pYYBAGRdpnSAMGiyAAEGq1_VTjM288.png

选中完成后会启用amixeraplayarecord功能,重新编译打包更新系统即可体验。

2.1 驱动调控:amixer

amixer是命令行的 ALSA 声卡驱动调节工具,用于启用、关闭各声卡,设置各声卡的音量。使用 amixer 命令列出当前注册的音频设备。

amixer
pYYBAGRdpn6AB48-AAB9Hc1AVdw608.png
  • 常用选项
选项             功能
-D,--device    指定声卡设备,默认使用default
  • 常用命令
命令            功能
controls       列出指定声卡的所有控件
contents       列出指定声卡的所有控件的具体信息
cget           获取指定控件的信息
cset           设定指定控件的值

选择 MIC1 输入

amixer -D hw:audiocodec cset name='MIC1 Input Select' 0
poYBAGRdppCAHfCLAAAi8HK8Pqw060.png

选择 MIC2 输入

amixer -D hw:audiocodec cset name='MIC2 Input Select' 0
pYYBAGRdppaAcU26AAAi1ySDBks044.png

开启 MIC1

amixer -D hw:audiocodec cset name='MIC1 Switch' 1
poYBAGRdpp-AdVuuAAAaCx-T4zA443.png

开启 MIC2

amixer -D hw:audiocodec cset name='MIC2 Switch' 1
poYBAGRdpqaAaGzYAAAadd5kOso476.png

设置 MIC1 音量

amixer -D hw:audiocodec cset name='MIC1 gain volume' 30
poYBAGRdpreACv-0AAAiFMC614Y732.png

设置 MIC2 音量

amixer -D hw:audiocodec cset name='MIC2 gain volume' 30
pYYBAGRdpsGAMHrrAAAiJYAi8QY786.png

开启 LINEOUT 输出功能

amixer -D hw:audiocodec cset name='LINEOUT Output Select' 1
pYYBAGRdpsiAP7l6AAArzuT93iQ800.png

开启 LINEOUT 通路

amixer -D hw:audiocodec cset name='LINEOUT Switch' 1
poYBAGRdptKAK_y4AAAbSoVhPiU146.png

设置输出音量

amixer -D hw:audiocodec cset name='LINEOUT volume' 25
pYYBAGRdptyAaPcnAAA-FBVfY6k292.png

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
poYBAGRdpuWAP1oNAAA3zS7AsZw857.png

麦克风录音

在录音之前,首先需要使用 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
poYBAGRdpu-ACJDPAAAcyHXoScs542.png

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
poYBAGRdpviAFJScAAA39QDXibY273.png

扬声器播放音频

在播放之前,首先需要打开音频通路,配置扬声器播放音频,具体可以参照 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
pYYBAGRdpv-AesmlAAAVSejdJuQ776.png

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 ratelimiting

root@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.wav
numid=23,iface=MIXER,name='MIC1 Input Select'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'differ'
  ; Item #1 'single'
  : values=0
numid=24,iface=MIXER,name='MIC2 Input Select'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'differ'
  ; Item #1 'single'
  : values=0
numid=17,iface=MIXER,name='MIC1 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=18,iface=MIXER,name='MIC2 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=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=0
numid=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=0
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo

程序会自动录音并保存文件到当前目录下,查看当前目录可以看到保存的文件test.wav

root@TinaLinux:/# ls
bin       etc       lib       rdinit    run       sys       usr
data      home      mnt       rom       sbin      test.wav  var
dev       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.wav
numid=20,iface=MIXER,name='LINEOUT Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=20,iface=MIXER,name='LINEOUT Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=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=1

Playing 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.wav
numid=20,iface=MIXER,name='LINEOUT Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=20,iface=MIXER,name='LINEOUT Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=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=1

Playing 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# ls
S00mpp               S50telnet            rc.final
S01logging           S50usb               rc.modules
S03audio             S50wifidaemon        rc.preboot
S10udev              S99swupdate_autorun  rcK
S11dev               adbd                 rcS
S20urandom           cron                 sysntpd
S40network           dbus                 wpa_supplicant
S41netparam          dnsmasq
S50dbus              network

可以查看相关的脚本源码。

进入/home/res/audio/目录下,可以查看两个文件,分别为开机音乐startup.wav和关机音乐shutdown.wav

root@TinaLinux:/etc/init.d# cd /home/res/audio/
root@TinaLinux:/home/res/audio# ls
shutdown.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/au
dio/startup.wav
root@TinaLinux:/home/res/audio# sync

输入reboot,重启后即可通过喇叭听到更换后的开机音乐。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 音频
    +关注

    关注

    29

    文章

    2874

    浏览量

    81533
  • Linux
    +关注

    关注

    87

    文章

    11303

    浏览量

    209456
  • AI
    AI
    +关注

    关注

    87

    文章

    30857

    浏览量

    269030
  • 开发板
    +关注

    关注

    25

    文章

    5046

    浏览量

    97438
  • 录音
    +关注

    关注

    0

    文章

    9

    浏览量

    2970
收藏 人收藏

    评论

    相关推荐

    1.100ASK_V853-PRO 环境配置及编译烧写

    本章主要介绍关于100ASK_V853-PRO开发板的Tina SDK包的下载和编译打包生成镜像,并将镜像烧录到100ASK_V853-PRO开发板上。在进行
    的头像 发表于 05-10 11:49 1465次阅读
    1.100<b class='flag-5'>ASK_V853-PRO</b> 环境配置及编译烧写

    2.100ASK-V853-PRO开发板支持WIFI和有线网卡

    ​ 通过上一章节,我们已经成功下载Tina SDK包,完成编译并烧写Tina Linux系统,接下来展示100ASK_V853-PRO开发部如何通过WIFI和有线网卡进行上网。
    的头像 发表于 05-10 14:44 1362次阅读
    2.100<b class='flag-5'>ASK-V853-PRO</b><b class='flag-5'>开发板</b><b class='flag-5'>支持</b>WIFI和有线网卡

    3.100ASK_V853-PRO开发板支持七寸RGB屏

    ​ 在前面我们已经学习了关于100ASK_V853-PRO编译和烧写,接下来就是在Tina SDK下去适配七寸RGB屏。
    的头像 发表于 05-10 15:26 1209次阅读
    3.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>开发板</b><b class='flag-5'>支持</b>七寸RGB屏

    5.100ASK_V853-PRO开发板支持按键输入

    100ASK_V853-PRO开发板上共有5个功能按键,本章节跟大家讨论如何使能这五个按键。
    的头像 发表于 05-11 10:02 1111次阅读
    5.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>开发板</b><b class='flag-5'>支持</b>按键输入

    6.100ASK_V853-PRO开发板支持MIPI摄像头

    100ASK_V853-PRO开发板支持4LINE的MIPI摄像头和2LINE的MIPI摄像头,使用百问网提供的Tina SDK包生成的镜像,系统已经配置好了,可以直接使用。本章介绍如何去适配一个MIPI摄像头,本文所用的2
    的头像 发表于 05-11 10:08 1581次阅读
    6.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>开发板</b><b class='flag-5'>支持</b>MIPI摄像头

    9.100ASK_V853-PRO开发板支持E907小核开发

    100ASK_V853-PRO开发板V853芯片集成Arm Cortex-A7和RISC-V E907 双CPU,玄铁E907 是一款完全可综合的高端 MCU 处理器。它兼容 R
    的头像 发表于 05-12 10:35 1465次阅读
    9.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>开发板</b><b class='flag-5'>支持</b>E907小核<b class='flag-5'>开发</b>

    11. 100ASK-V853-PRO开发板 RGB屏测试指南

    固件位于资料光盘中的10_测试镜像/1.测试七寸RGB屏/v853_linux_100ask_uart0.img
    的头像 发表于 06-16 15:36 981次阅读
    11. <b class='flag-5'>100ASK-V853-PRO</b><b class='flag-5'>开发板</b> RGB屏测试指南

    12. 100ASK-V853-PRO开发板 MIPI屏测试指南

    固件下载地址:链接:百度网盘 提取码:sp6a 固件位于资料光盘中的10_测试镜像/2.测试4寸MIPI屏/v853_linux_100ask_uart0.img
    的头像 发表于 06-16 15:38 1031次阅读
    12. <b class='flag-5'>100ASK-V853-PRO</b><b class='flag-5'>开发板</b> MIPI屏测试指南

    stm32mp157开发板声卡接口测试 相关资料推荐

    4.5 声卡接口测试4.5.1 耳机接口测试方法此节演示使用三段式耳机在 100ask_stm32mp157_pro 开发板上录制声音、播放音频。注意: 需要准备一个带麦克风的三段式耳机,如下图所示
    发表于 07-06 07:48

    【开源硬件大赛】基于全志V853设计的全功能BTB学习开发板

    100ask_V853-Pro开发简述核心资源简述BTB核心,板载EMMC DDR V853 主芯片 AXP电源芯片背面
    发表于 12-07 15:03

    100ASK_全志V853-PRO开发板 环境配置及编译烧写

    0.前言 本章主要介绍关于100ASK-V853-PRO开发板的Tina SDK包的下载和编译打包生成镜像,并将镜像烧录到100ASK-V853-PRO开发板上。在进行
    发表于 05-04 10:14

    HL开发板的蜂鸣器播放音乐学习程序

    HL开发板【实验30】蜂鸣器播放音乐,单片机学习程序,很好的学习资料。
    发表于 09-01 11:50 16次下载

    PIC32音频开发板

    本视频介绍了Microchip的PIC32音频开发板的硬件和特性,演示了PIC32音频开发板音频播放
    的头像 发表于 06-06 04:45 1.9w次阅读

    100ASK_V853-PRO开发板支持人形检测与人脸检测

    本文详细描述了100ASK_V853-PRO开发板运行测试程序检测人形和人脸的过程,输出文件包含画框图像结果、执行性能、模型精确度。下面直接展示该应用程序处理的结果。
    的头像 发表于 04-27 11:00 683次阅读
    <b class='flag-5'>100ASK_V853-PRO</b><b class='flag-5'>开发板</b><b class='flag-5'>支持</b>人形检测与人脸检测

    瑞芯微主板/开发板Linux系统播放音频方法,触觉智能RK3562开发板演示

    本文介绍瑞芯微方案主板/开发板Linux系统播放音频的方法,触觉智能RK3562开发板演示,通用RK3566、RK3568、RK3588等
    的头像 发表于 12-13 11:40 206次阅读
    瑞芯微主板/<b class='flag-5'>开发板</b>Linux系统<b class='flag-5'>播放音频</b>方法,触觉智能RK3562<b class='flag-5'>开发板</b>演示