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ā)板
1.硬件介紹
? V853 芯片提供了 AudioCodec(芯片內(nèi)置音頻接口) x1、I2S/PCM(數(shù)字音頻接口) x2、DMIC(外置數(shù)字 MIC 接口) x1,可以滿足各類音頻需求。100ASK_V853-PRO開發(fā)板板載兩個MIC拾音咪頭和喇叭接口。如下圖所示:
如果您想要使用喇叭接口播放聲音,需要外接一個喇叭
2.音頻驅(qū)動框架使用
在 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
功能,重新編譯打包更新系統(tǒng)即可體驗。
2.1 驅(qū)動調(diào)控:amixer
amixer是命令行的 ALSA 聲卡驅(qū)動調(diào)節(jié)工具,用于啟用、關閉各聲卡,設置各聲卡的音量。使用 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 聲卡驅(qū)動的錄音工具,用于錄音功能。
選項 功能
-D,--device 指定聲卡設備,默認使用default
-l,--list-device` 列出當前所有聲卡
-t,--file-type 指定播放文件的格式,如voc,wav,raw,不指定的情況下會去讀取文件頭部作識別
-c,--channels 指定通道數(shù)
-f,--format 指定采樣格式
-r,--rate 采樣率
-d,--duration 指定播放的時間
--period-size 指定period size
--buffer-siz` 指定buffer size
查看錄音設備
可以使用 arecord -l
命令查看開發(fā)板提供的錄音設備。
arecord -l
麥克風錄音
在錄音之前,首先需要使用 amixer 打開音頻通路,配置內(nèi)部 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 聲卡驅(qū)動的播放工具,用于播放功能。
選項 功能
-D,--device 指定聲卡設備,默認使用default
-l,--list-devices 列出當前所有聲卡
-t,--file-type 指定播放文件的格式,如voc,wav,raw,不指定的情況下會去讀取文件頭部作識別
-c,--channels 指定通道數(shù)
-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.測試錄音功能
? 啟動開發(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ā)板已經(jīng)默認啟用了開機音樂,自啟腳本位于:
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
,重啟后即可通過喇叭聽到更換后的開機音樂。
-
音頻
+關注
關注
29文章
2868瀏覽量
81492 -
Linux
+關注
關注
87文章
11292瀏覽量
209323 -
AI
+關注
關注
87文章
30728瀏覽量
268885 -
開發(fā)板
+關注
關注
25文章
5032瀏覽量
97371 -
錄音
+關注
關注
0文章
9瀏覽量
2970
發(fā)布評論請先 登錄
相關推薦
評論