Ubuntu音频设备检测

2019-07-22  本文已影响0人  Jack_Woo

Linux Audio Stack

早期使用OSS(开放声音系统, Open Sound System),随后ALSA (高级Linux声音体系,Advanced Linux Sound Architecture)代替了OSS。鉴于ALSA无法共用设备,现代多数Ubuntu Desktop发行版底层使用ALSA,将Pulse Audio作为管理音频的服务来共享音频设备,APP通过Pulse Audio API使用设备。

http://pc-freak.net/images/how-to-boost-increase-sound-in-linux-audio-stack-illustrated.png

查看音频设备

ALSA提供了一个alsa-utils包,其含有arecordaplay等工具来查看音频设备信息。

首先,查看系统的音频设备。如下,可以看到当前有两张卡:

查看音频输入

通过arecord命令可以看到,当前有两张音频输入卡,说明两张音频设备都有麦克风输入功能:

查看音频输出

通过aplay命令可以看到,当前只有一张音频输出卡(card 0),说明另一张音频设备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

检测音频设备-使用alsa-utils

这里使用alsa-utils的工具来检测音频设备。

检测音频输出

可以使用speaker-testaplay

检测音频输入

使用arecord录制音频输入

使用aplay测试

aplay a.pcm

检测音频设备-使用pavucontrol

PulseAudio提供一个GUI的工具pavucontrol(PulseAudio Volume Control)来配置与控制音频设备。

1563776081051

检测声卡支持的最高输入采样频率

要录制指定采样频率、采样位宽的音频,需要声卡设备与其驱动都支持。下文说明如何检测Linux驱动所加载的音频设备当前能录制的最高采样频率。

arecord

列出系统当前所加载的音频输入设备。如下,card 0是Intel集成声卡,card 1是一个USB麦克风:

$ 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 1device 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...

如上,命令中断,并提示所指定的设备只支持最高16000Hz的采样率。

Audacity

通过Audacity查看录制音频的Spectrogram(Audio Track -> Spectrogram),可以检测所录音频的采样率。

在Audacity中配置使用高采样率录制音频(如48000Hz),然后查看音频的Spectrogram。如下,可以看到音频高于8k区域的能量为0,说明音频录制的采样率只有16k。

1563537080712

Ref

http://www.voxforge.org/home/docs/faq/faq/linux-how-to-determine-your-audio-cards-or-usb-mics-maximum-sampling-rate

上一篇下一篇

猜你喜欢

热点阅读