Linux Audio Stack
早期使用OSS(開放聲音系統(tǒng), Open Sound System),隨后ALSA (高級Linux聲音體系,Advanced Linux Sound Architecture)代替了OSS。鑒于ALSA無法共用設(shè)備,現(xiàn)代多數(shù)Ubuntu Desktop發(fā)行版底層使用ALSA,將Pulse Audio作為管理音頻的服務(wù)來共享音頻設(shè)備,APP通過Pulse Audio API使用設(shè)備。

查看音頻設(shè)備
ALSA提供了一個alsa-utils包,其含有arecord、aplay等工具來查看音頻設(shè)備信息。
首先,查看系統(tǒng)的音頻設(shè)備。如下,可以看到當(dāng)前有兩張卡:
0: 系統(tǒng)自帶的HDA Intel PCH聲卡
-
1: 外接的USB Camera-B4.09.24.1(PS3 EYE攝像頭和麥克風(fēng)陣列)
$ cat /proc/asound/cards 0 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xdf120000 irq 126 1 [CameraB409241 ]: USB-Audio - USB Camera-B4.09.24.1 USB Camera-B4.09.24.1 at usb-0000:00:14.0-6, high speed
查看音頻輸入
通過arecord命令可以看到,當(dāng)前有兩張音頻輸入卡,說明兩張音頻設(shè)備都有麥克風(fēng)輸入功能:
card 0: 系統(tǒng)自帶的HDA Intel PCH聲卡
-
card 1: 外接的USB Camera-B4.09.24.1(PS3 EYE攝像頭和麥克風(fēng)陣列)
$ arecord -l **** List of CAPTURE Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: PCH [HDA Intel PCH], device 2: ALC662 rev3 Alt Analog [ALC662 rev3 Alt Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: CameraB409241 [USB Camera-B4.09.24.1], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
查看音頻輸出
通過aplay命令可以看到,當(dāng)前只有一張音頻輸出卡(card 0),說明另一張音頻設(shè)備USB Camera-B4.09.24.1不帶有音頻輸出功能。
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
Subdevices: 1/1
Subdevice #0: subdevice #0
檢測音頻設(shè)備-使用alsa-utils
這里使用alsa-utils的工具來檢測音頻設(shè)備。
檢測音頻輸出
可以使用speaker-test或aplay。
-
使用
speaker-test測試默認(rèn)音頻輸出(alsa-utils安裝包已包含測試用的幾個短wav音頻),其默認(rèn)使用的輸出設(shè)備可能通過aplay -L查看$ aplay -L default Playback/recording through the PulseAudio sound server null Discard all samples (playback) or generate zero samples (capture) pulse PulseAudio Sound Server sysdefault:CARD=PCH HDA Intel PCH, ALC662 rev3 Analog Default Audio Device front:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog Front speakers surround21:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog 2.1 Surround output to Front and Subwoofer speakers surround40:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog 4.0 Surround output to Front and Rear speakers surround41:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers hdmi:CARD=PCH,DEV=0 HDA Intel PCH, HDMI 0 HDMI Audio Output dmix:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog Direct sample mixing device dsnoop:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog Direct sample snooping device hw:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog Direct hardware device without any conversions plughw:CARD=PCH,DEV=0 HDA Intel PCH, ALC662 rev3 Analog Hardware device with all software conversions -
使用
aplay指定測試音頻來測試,例如aplay test.wav -D plughw:CARD=PCH,DEV=0
檢測音頻輸入
使用arecord錄制音頻輸入
-f 表示音頻格式。
cd (16 bit little endian, 44100, stereo)-d 錄制幾秒
-c 幾個通道,如錄制4個麥的麥克風(fēng)陣列:
-c 4-
-D 使用ALSA的哪個設(shè)備:
-D hw:1,0表示使用card 0下的device 0設(shè)備arecord -f cd -d 5 -c 4 -D hw:1,0 > a.pcm
使用aplay測試
aplay a.pcm
檢測音頻設(shè)備-使用pavucontrol
PulseAudio提供一個GUI的工具pavucontrol(PulseAudio Volume Control)來配置與控制音頻設(shè)備。

檢測聲卡支持的最高輸入采樣頻率
要錄制指定采樣頻率、采樣位寬的音頻,需要聲卡設(shè)備與其驅(qū)動都支持。下文說明如何檢測Linux驅(qū)動所加載的音頻設(shè)備當(dāng)前能錄制的最高采樣頻率。
arecord
列出系統(tǒng)當(dāng)前所加載的音頻輸入設(shè)備。如下,card 0是Intel集成聲卡,card 1是一個USB麥克風(fēng):
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: ALC662 rev3 Alt Analog [ALC662 rev3 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: CameraB409241 [USB Camera-B4.09.24.1], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
這里拿card 1的device 0做測試,命令中使用一個比較高的,如-r 60000:
$ arecord -f S16_LE -r 60000 -D hw:1,0 -d 5 test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 60000 Hz, Stereo
Warning: rate is not accurate (requested = 60000Hz, got = 16000Hz)
please, try the plug plugin (-Dplug:hw:0,0)
Aborted by signal Interrupt...
如上,命令中斷,并提示所指定的設(shè)備只支持最高16000Hz的采樣率。
Audacity
通過Audacity查看錄制音頻的Spectrogram(Audio Track -> Spectrogram),可以檢測所錄音頻的采樣率。
在Audacity中配置使用高采樣率錄制音頻(如48000Hz),然后查看音頻的Spectrogram。如下,可以看到音頻高于8k區(qū)域的能量為0,說明音頻錄制的采樣率只有16k。
