0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

10. 100ASK_V853-PRO開發(fā)板支持錄音和播放音頻

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-05-12 10:40 ? 次閱讀

0.前言

? 本章主要講述如何使用板載的MIC拾音咪頭錄音并使用喇叭播放音頻。

? 音頻_開發(fā)指南: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開發(fā)板資料匯總:

鏈接:100ASK_100ASK-PRO 資料匯總 - Allwinner / V853-Pro - 嵌入式開發(fā)問答社區(qū)

100ASK_V853-PRO開發(fā)板購買鏈接:100ASK_V853-PRO開發(fā)板

pYYBAGRdo4yAf_iVAASQ3zSjFR0352.png

1.硬件介紹

? V853 芯片提供了 AudioCodec(芯片內置音頻接口) x1、I2S/PCM(數字音頻接口) x2、DMIC(外置數字 MIC 接口) x1,可以滿足各類音頻需求。100ASK_V853-PRO開發(fā)板板載兩個MIC拾音咪頭和喇叭接口。如下圖所示:

pYYBAGRdpmeAEAP8ABojeN0xjE0296.png

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

poYBAGRdpm2AKlGKAAgNSYTJwxI715.png

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

如下圖所示:

pYYBAGRdpnSAMGiyAAEGq1_VTjM288.png

選中完成后會啟用amixer、aplay、arecord功能,重新編譯打包更新系統(tǒng)即可體驗。

2.1 驅動調控:amixer

amixer是命令行的 ALSA 聲卡驅動調節(jié)工具,用于啟用、關閉各聲卡,設置各聲卡的音量。使用 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 命令查看開發(fā)板提供的錄音設備。

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.測試錄音功能

? 啟動開發(fā)板后,在串口終端輸入如下命令:

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

? 此時如果我們接上了喇叭,喇叭就會播放剛剛錄制的音頻。

? 同樣我們也可以將音頻文件拷貝到開發(fā)板中,使用以下命令

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開發(fā)板已經默認啟用了開機音樂,自啟腳本位于:

openwrt/target/v853/v853-vision/busybox-init-base-files/etc/init.d/S03audio

我們可以在開發(fā)板的串口終端的/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,重啟后即可通過喇叭聽到更換后的開機音樂。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 音頻
    +關注

    關注

    29

    文章

    2766

    瀏覽量

    80782
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207911
  • AI
    AI
    +關注

    關注

    87

    文章

    28877

    瀏覽量

    266225
  • 開發(fā)板
    +關注

    關注

    25

    文章

    4771

    瀏覽量

    96171
  • 錄音
    +關注

    關注

    0

    文章

    9

    瀏覽量

    2927
收藏 人收藏

    評論

    相關推薦

    1.100ASK_V853-PRO 環(huán)境配置及編譯燒寫

    本章主要介紹關于100ASK_V853-PRO開發(fā)板的Tina SDK包的下載和編譯打包生成鏡像,并將鏡像燒錄到100ASK_V853-PRO開發(fā)板上。在進行
    的頭像 發(fā)表于 05-10 11:49 ?1276次閱讀
    1.100<b class='flag-5'>ASK_V853-PRO</b> 環(huán)境配置及編譯燒寫

    2.100ASK-V853-PRO開發(fā)板支持WIFI和有線網卡

    ? 通過上一章節(jié),我們已經成功下載Tina SDK包,完成編譯并燒寫Tina Linux系統(tǒng),接下來展示100ASK_V853-PRO開發(fā)部如何通過WIFI和有線網卡進行上網。
    的頭像 發(fā)表于 05-10 14:44 ?1200次閱讀
    2.100<b class='flag-5'>ASK-V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>WIFI和有線網卡

    3.100ASK_V853-PRO開發(fā)板支持七寸RGB屏

    ? 在前面我們已經學習了關于100ASK_V853-PRO編譯和燒寫,接下來就是在Tina SDK下去適配七寸RGB屏。
    的頭像 發(fā)表于 05-10 15:26 ?1088次閱讀
    3.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>七寸RGB屏

    5.100ASK_V853-PRO開發(fā)板支持按鍵輸入

    ? 100ASK_V853-PRO開發(fā)板上共有5個功能按鍵,本章節(jié)跟大家討論如何使能這五個按鍵。
    的頭像 發(fā)表于 05-11 10:02 ?1027次閱讀
    5.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>按鍵輸入

    6.100ASK_V853-PRO開發(fā)板支持MIPI攝像頭

    ? 100ASK_V853-PRO開發(fā)板支持4LINE的MIPI攝像頭和2LINE的MIPI攝像頭,使用百問網提供的Tina SDK包生成的鏡像,系統(tǒng)已經配置好了,可以直接使用。本章介紹如何去適配一個MIPI攝像頭,本文所用的2
    的頭像 發(fā)表于 05-11 10:08 ?1439次閱讀
    6.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>MIPI攝像頭

    9.100ASK_V853-PRO開發(fā)板支持E907小核開發(fā)

    ? 100ASK_V853-PRO開發(fā)板V853芯片集成Arm Cortex-A7和RISC-V E907 雙CPU,玄鐵E907 是一款完全可綜合的高端 MCU 處理器。它兼容 R
    的頭像 發(fā)表于 05-12 10:35 ?1336次閱讀
    9.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>E907小核<b class='flag-5'>開發(fā)</b>

    11. 100ASK-V853-PRO開發(fā)板 RGB屏測試指南

    固件位于資料光盤中的10_測試鏡像/1.測試七寸RGB屏/v853_linux_100ask_uart0.img
    的頭像 發(fā)表于 06-16 15:36 ?903次閱讀
    11. <b class='flag-5'>100ASK-V853-PRO</b><b class='flag-5'>開發(fā)板</b> RGB屏測試指南

    12. 100ASK-V853-PRO開發(fā)板 MIPI屏測試指南

    固件下載地址:鏈接:百度網盤 提取碼:sp6a 固件位于資料光盤中的10_測試鏡像/2.測試4寸MIPI屏/v853_linux_100ask_uart0.img
    的頭像 發(fā)表于 06-16 15:38 ?918次閱讀
    12. <b class='flag-5'>100ASK-V853-PRO</b><b class='flag-5'>開發(fā)板</b> MIPI屏測試指南

    stm32mp157開發(fā)板聲卡接口測試 相關資料推薦

    4.5 聲卡接口測試4.5.1 耳機接口測試方法此節(jié)演示使用三段式耳機在 100ask_stm32mp157_pro 開發(fā)板上錄制聲音、播放音頻。注意: 需要準備一個帶麥克風的三段式耳機,如下圖所示
    發(fā)表于 07-06 07:48

    16k錄音+播放的代碼

    前言:最近在做畢設的過程中,需要用到錄音播放方面的知識。所以,在借鑒了正點原子例程之后,成功修改出了16k錄音+播放的代碼。在錄音之后馬上接
    發(fā)表于 08-12 06:46

    【開源硬件大賽】基于全志V853設計的全功能BTB學習開發(fā)板

    100ask_V853-Pro開發(fā)簡述核心資源簡述BTB核心,板載EMMC DDR V853 主芯片 AXP電源芯片背面
    發(fā)表于 12-07 15:03

    100ASK_全志V853-PRO開發(fā)板 環(huán)境配置及編譯燒寫

    0.前言 本章主要介紹關于100ASK-V853-PRO開發(fā)板的Tina SDK包的下載和編譯打包生成鏡像,并將鏡像燒錄到100ASK-V853-PRO開發(fā)板上。在進行
    發(fā)表于 05-04 10:14

    HL開發(fā)板的蜂鳴器播放音樂學習程序

    HL開發(fā)板【實驗30】蜂鳴器播放音樂,單片機學習程序,很好的學習資料。
    發(fā)表于 09-01 11:50 ?16次下載

    PIC32音頻開發(fā)板

    本視頻介紹了Microchip的PIC32音頻開發(fā)板的硬件和特性,演示了PIC32音頻開發(fā)板音頻播放
    的頭像 發(fā)表于 06-06 04:45 ?1.9w次閱讀

    100ASK_V853-PRO開發(fā)板支持人形檢測與人臉檢測

    本文詳細描述了100ASK_V853-PRO開發(fā)板運行測試程序檢測人形和人臉的過程,輸出文件包含畫框圖像結果、執(zhí)行性能、模型精確度。下面直接展示該應用程序處理的結果。
    的頭像 發(fā)表于 04-27 11:00 ?587次閱讀
    <b class='flag-5'>100ASK_V853-PRO</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>支持</b>人形檢測與人臉檢測