<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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。它提供了 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功能,重新編譯打包更新系統即可體驗。

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,重啟后即可通過喇叭聽到更換后的開機音樂。

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

    關注

    28

    文章

    2611

    瀏覽量

    80086
  • Linux
    +關注

    關注

    87

    文章

    11001

    瀏覽量

    206847
  • AI
    AI
    +關注

    關注

    87

    文章

    26679

    瀏覽量

    264337
  • 開發板
    +關注

    關注

    25

    文章

    4506

    瀏覽量

    94458
  • 錄音
    +關注

    關注

    0

    文章

    9

    瀏覽量

    2888
收藏 人收藏

    評論

    相關推薦

    1.100ASK_V853-PRO 環境配置及編譯燒寫

    本章主要介紹關于100ASK_V853-PRO開發板的Tina SDK包的下載和編譯打包生成鏡像,并將鏡像燒錄到100ASK_V853-PRO開發板上。在進行
    的頭像 發表于 05-10 11:49 ?1069次閱讀
    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 ?987次閱讀
    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 ?922次閱讀
    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 ?891次閱讀
    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 ?1198次閱讀
    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 處理器。它兼容 RV32IMAC
    的頭像 發表于 05-12 10:35 ?1082次閱讀
    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 ?795次閱讀
    11. <b class='flag-5'>100ASK-V853-PRO</b><b class='flag-5'>開發板</b> RGB屏測試指南

    全志V853開發板原理圖

    ,通過上拉或下拉執行啟動。 開發板預留了SPI NOR、SPI NAND的焊盤,可以焊接 V853 芯片支持的 SPI NOR、SPI NAND 儲存器 BOOT SEL 0BOOT SEL
    發表于 01-12 09:48

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

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

    16k錄音+播放的代碼

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

    【開源硬件大賽】基于全志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

    100ASK_全志V853-PRO開發板支持人形檢測和人臉識別

    去修改增加。參考這個示例大家可以去自己嘗試獲取自定義的圖像進行人臉識別或人形檢測。 對于如何在100ASK_V853-PRO如何實時處理從攝像頭獲取的圖像進行人臉識別和人形檢測可在下節MPP中講述。
    發表于 05-10 10:13

    【ELF 1開發板試用】+語音播放控制

    在ELF1開發板配有3.5mm 音頻插座,可支持左右聲道播放聲音和 MIC 錄音,其所處位置如圖1所示。 圖1
    發表于 11-22 09:32

    100ASK_V853-PRO開發板支持人形檢測與人臉檢測

    本文詳細描述了100ASK_V853-PRO開發板運行測試程序檢測人形和人臉的過程,輸出文件包含畫框圖像結果、執行性能、模型精確度。下面直接展示該應用程序處理的結果。
    的頭像 發表于 04-27 11:00 ?436次閱讀
    <b class='flag-5'>100ASK_V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b>人形檢測與人臉檢測
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>