Linux下使用alsamixer配置系統默認的聲卡設備(默認音頻輸出設備、輸入設備、系統音量)

一、系統環境

操作系統:  ubuntu 18.04  64位 

二、查看系統有哪些聲卡可用(麥克風和揚聲器)

當系統下存在多個麥克風或者揚聲器的時候,配置默認的設備是很有必要的。

2.1  運行alsamixer命令,打開圖形界面

wbyq@wbyq:~$ alsamixer

打開圖形界面之後,按下F6,即可查看系統默認的聲卡。在我的電腦上插了一個USB攝像頭,帶音頻輸入,在下圖裏就能看到兩個聲卡。退出圖形界面按下Esc按鍵(鍵盤左上角)。

 沒有alsamixer命令,安裝一個即可: sudo apt-get install alsa-utils

wbyq@wbyq:~$ sudo apt-get install alsa-utils
[sudo] wbyq 的密碼: 
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關係樹       
正在讀取狀態信息... 完成       
alsa-utils 已經是最新版 (1.1.3-1ubuntu1)。
alsa-utils 已設置爲手動安裝。
下列軟件包是自動安裝的並且現在不需要了:
  libavdevice57 libavfilter6 libavresample3 libdc1394-22 libflite1 libmysofa0 libnorm1 libpgm-5.2-0 librubberband2
  libsdl2-2.0-0 libwayland-egl1-mesa libzmq5
使用'sudo apt autoremove'來卸載它(它們)。
升級了 0 個軟件包,新安裝了 0 個軟件包,要卸載 0 個軟件包,有 88 個軟件包未被升級。

2.2 查看 /proc/asound目錄查看聲卡

wbyq@wbyq:~$ cd /proc/asound
wbyq@wbyq:/proc/asound$ ls
AudioPCI  card0  card1  cards  devices  hwdep  modules  oss  pcm  seq  timers  U0x46d0x825  version

2.3 查看/proc/asound/cards文件查看聲卡

wbyq@wbyq:/proc/asound$ cat /proc/asound/cards
 0 [AudioPCI       ]: ENS1371 - Ensoniq AudioPCI
                      Ensoniq AudioPCI ENS1371 at 0x2040, irq 16
 1 [U0x46d0x825    ]: USB-Audio - USB Device 0x46d:0x825
                      USB Device 0x46d:0x825 at usb-0000:03:00.0-2, high speed

 2.4 通過arecord -l 命令查看系統的麥克風/音頻輸入設備 (揚聲器不會出現)

wbyq@wbyq:/proc/asound$ arecord -l
**** CAPTURE 硬體裝置清單 ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  子設備: 1/1
  子設備 #0: subdevice #0
card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
  子設備: 1/1
  子設備 #0: subdevice #0

 2.5 通過aplay -l 命令查看系統的揚聲器音頻輸出設備

wbyq@wbyq:/proc/asound$ aplay -l
**** PLAYBACK 硬體裝置清單 ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  子設備: 1/1
  子設備 #0: subdevice #0
card 0: AudioPCI [Ensoniq AudioPCI], device 1: ES1371/2 [ES1371 DAC1]
  子設備: 1/1
  子設備 #0: subdevice #0

通過打印的列表可以看到裏面沒有USB的設備,因爲我插入的USB攝像頭只有音頻輸入功能,沒有音頻輸出功能。

三、設置系統默認的音量

3.1. 使用 alsamixer 圖形界面手動設置

打開圖形界面之後,按下鍵盤上的方向鍵即可設置音量。

3.2 輸入命令自動設置

wbyq@wbyq:~$ amixer set Master 100%

後面的100%是音頻輸出的百分比,100%就是最大聲音。 可以在0~100之間調節。

四、測試聲卡設備是否正常(錄音和放音)

4.1  使用系統默認聲卡錄音和放音

wbyq@wbyq:~$ arecord -d 10 test.wav
正在錄音 WAVE 'test.wav' : Unsigned 8 bit, 頻率8000Hz, Mono
wbyq@wbyq:~$ aplay test.wav
正在播放 WAVE 'test.wav' : Unsigned 8 bit, 頻率8000Hz, Mono

第一條命令是錄音命令,-d 10表示錄製10秒聲音,test.wav是保存的文件名稱。

第二條命令是播放聲音文件。

4.2 使用指定聲卡錄音和放音

wbyq@wbyq:~$ arecord -D hw:0 -d 3 test.wav
正在錄音 WAVE 'test.wav' : Unsigned 8 bit, 頻率8000Hz, Mono
wbyq@wbyq:~$ aplay -D hw:0 test.wav 
正在播放 WAVE 'test.wav' : Unsigned 8 bit, 頻率8000Hz, Mono

  其中-D hw:x  表示指定第幾個聲卡。 使用aplay -l和arecord -l命令可以查看系統的錄音設備列表和揚聲器設備列表。

 爲了測試當前我在電腦上插入了一個USB聲卡設備。

這是一款USB免驅聲卡,插入電腦後,再次查看聲卡設備,即可看到,多了一個錄音設備和一個揚聲器設備。

wbyq@wbyq:~$ arecord -l
**** CAPTURE 硬體裝置清單 ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  子設備: 1/1
  子設備 #0: subdevice #0
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  子設備: 1/1
  子設備 #0: subdevice #0
wbyq@wbyq:~$ aplay -l
**** PLAYBACK 硬體裝置清單 ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  子設備: 1/1
  子設備 #0: subdevice #0
card 0: AudioPCI [Ensoniq AudioPCI], device 1: ES1371/2 [ES1371 DAC1]
  子設備: 1/1
  子設備 #0: subdevice #0
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  子設備: 0/1
  子設備 #0: subdevice #0

使用插入的USB聲卡進行錄音和放音:

wbyq@wbyq:~$ arecord -D hw:1 -f S16_LE -r 44100 -d 3 test.wav
正在錄音 WAVE 'test.wav' : Signed 16 bit Little Endian, 頻率44100Hz, Mono
wbyq@wbyq:~$ aplay -D hw:1 test.wav
正在播放 WAVE 'test.wav' : Signed 16 bit Little Endian, 頻率44100Hz, Mono

其中的-r 指定採樣率,-f 指定每個採樣點的位數--樣本大小。

如果播放的是PCM文件可以這樣設置:

aplay -t raw -c 1 -f S16_LE -r 8000 test.pcm 

-t: type raw表示是PCM 
-c: channel 1 
-f S16_LE: Signed 16bit-width Little-Endian 
-r: sample rate 8000 

4.3  指定默認聲卡問題解決

注意: 直接-D hw:X指定聲卡的話有些情況下,會因爲採樣率、各種問題導致無法播放,推薦使用下面方式指定聲卡設備。

查看系統支持的聲卡詳細信息:

wbyq@wbyq:~$ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
default
    Playback/recording through the PulseAudio sound server
sysdefault:CARD=AudioPCI
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    Default Audio Device
front:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    Front speakers
rear:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC1
    Rear speakers
surround40:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    4.0 Surround output to Front and Rear speakers
iec958:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    Direct sample mixing device
dmix:CARD=AudioPCI,DEV=1
    Ensoniq AudioPCI, ES1371 DAC1
    Direct sample mixing device
dsnoop:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    Direct sample snooping device
dsnoop:CARD=AudioPCI,DEV=1
    Ensoniq AudioPCI, ES1371 DAC1
    Direct sample snooping device
hw:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    Direct hardware device without any conversions
hw:CARD=AudioPCI,DEV=1
    Ensoniq AudioPCI, ES1371 DAC1
    Direct hardware device without any conversions
plughw:CARD=AudioPCI,DEV=0
    Ensoniq AudioPCI, ES1371 DAC2/ADC
    Hardware device with all software conversions
plughw:CARD=AudioPCI,DEV=1
    Ensoniq AudioPCI, ES1371 DAC1
    Hardware device with all software conversions
sysdefault:CARD=Device
    USB PnP Sound Device, USB Audio
    Default Audio Device
front:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Front speakers
surround21:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Direct sample mixing device
dsnoop:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Direct sample snooping device
hw:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Hardware device with all software conversions
wbyq@wbyq:~$ 

  使用指定聲卡播放音頻文件:

wbyq@wbyq:~$ aplay -D plughw:CARD=Device,DEV=0 lu_xian_pian_li.wav

-D後面指定的聲卡名稱,要在列表裏找到對應聲卡 plughw: 字段 開頭的進行使用。

 

五、設置系統默認的麥克風設備和揚聲器設備

5.1  創建聲卡配置文件

針對全局配置: 在/etc目錄下創建文件asound.conf

針對指定用戶配置: 在用戶目錄下創建文件.asoundrc

5.2 配置代碼

在上面文件裏寫入下面配置代碼即可生效,其中1表示表示使用的聲卡編號。前面介紹瞭如何查看聲卡編號。

defaults.ctl.card 1
defaults.pcm.card 1
defaults.timer.card 1

其中“pcm”選項決定用來播放音頻的設備,而“ctl”選項決定那個聲卡能夠由控制工具(如 alsamixer)使用。
 

也可以直接指定聲卡名稱。

得到當前系統可用揚聲器的設備名稱:

wbyq@wbyq:~$ cat /proc/asound/cards
 0 [AudioPCI       ]: ENS1371 - Ensoniq AudioPCI
                      Ensoniq AudioPCI ENS1371 at 0x2040, irq 16
 1 [U0x46d0x825    ]: USB-Audio - USB Device 0x46d:0x825
                      USB Device 0x46d:0x825 at usb-0000:03:00.0-2, high speed
 2 [Device         ]: USB-Audio - USB PnP Sound Device
                      C-Media Electronics Inc. USB PnP Sound Device at usb-0000:03:00.0-3.1, full spe
wbyq@wbyq:~$ 
wbyq@wbyq:~$ aplay -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq
AudioPCI
Device

得到當前系統可用麥克風的設備名稱:

wbyq@wbyq:~$ arecord -l
**** CAPTURE 硬體裝置清單 ****
card 0: AudioPCI [Ensoniq AudioPCI], device 0: ES1371/1 [ES1371 DAC2/ADC]
  子設備: 1/1
  子設備 #0: subdevice #0
card 1: U0x46d0x825 [USB Device 0x46d:0x825], device 0: USB Audio [USB Audio]
  子設備: 1/1
  子設備 #0: subdevice #0
card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  子設備: 1/1
  子設備 #0: subdevice #0
wbyq@wbyq:~$ arecord -l | awk -F \: '/,/{print $2}' | awk '{print $1}' | uniq
AudioPCI
U0x46d0x825
Device

指定設備的語法:

針對全局配置: 在/etc目錄下創建文件asound.conf   針對指定用戶配置: 在用戶目錄下創建文件.asoundrc

pcm.!default {
type hw
card 聲卡名稱
}
 
ctl.!default {
type hw
card 聲卡名稱
}

配置文件參考鏈接:https://wiki.archlinux.org/index.php/PulseAudio#default.pa

 

使用查看聲卡詳細配置列表:得到麥克風和揚聲器的名稱

wbyq@wbyq:~$ pacmd list-cards
1 card(s) available.
    index: 0
	name: <alsa_card.pci-0000_02_02.0>
	driver: <module-alsa-card.c>
	owner module: 7
	properties:
		alsa.card = "0"
		alsa.card_name = "Ensoniq AudioPCI"
		alsa.long_card_name = "Ensoniq AudioPCI ENS1371 at 0x2040, irq 16"
		alsa.driver_name = "snd_ens1371"
		device.bus_path = "pci-0000:02:02.0"
		sysfs.path = "/devices/pci0000:00/0000:00:11.0/0000:02:02.0/sound/card0"
		device.bus = "pci"
		device.vendor.id = "1274"
		device.vendor.name = "Ensoniq"
		device.product.id = "1371"
		device.product.name = "ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI])"
		device.string = "0"
		device.description = "ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI])"
		module-udev-detect.discovered = "1"
		device.icon_name = "audio-card-pci"
	profiles:
		input:analog-mono: 模擬單聲道 輸入 (priority 2, available: unknown)
		input:analog-stereo: 模擬立體聲 輸入 (priority 60, available: unknown)
		output:analog-mono: 模擬單聲道 輸出 (priority 200, available: unknown)
		output:analog-mono+input:analog-mono: 模擬單聲道雙工 (priority 202, available: unknown)
		output:analog-mono+input:analog-stereo: 模擬單聲道 輸出 + 模擬立體聲 輸入 (priority 260, available: unknown)
		output:analog-stereo: 模擬立體聲 輸出 (priority 6000, available: unknown)
		output:analog-stereo+input:analog-mono: 模擬立體聲 輸出 + 模擬單聲道 輸入 (priority 6002, available: unknown)
		output:analog-stereo+input:analog-stereo: 模擬立體聲雙工 (priority 6060, available: unknown)
		off: 關 (priority 0, available: unknown)
	active profile: <output:analog-stereo+input:analog-stereo>
	sinks:
		alsa_output.pci-0000_02_02.0.analog-stereo/#0: ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]) 模擬立體聲
	sources:
		alsa_output.pci-0000_02_02.0.analog-stereo.monitor/#0: Monitor of ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]) 模擬立體聲
		alsa_input.pci-0000_02_02.0.analog-stereo/#1: ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI]) 模擬立體聲
	ports:
		analog-input-mic: 話筒 (priority 8700, latency offset 0 usec, available: unknown)
			properties:
				device.icon_name = "audio-input-microphone"
		analog-input-linein: 輸入插孔 (priority 8100, latency offset 0 usec, available: unknown)
			properties:
				
		analog-input-aux: 模擬輸入 (priority 8000, latency offset 0 usec, available: unknown)
			properties:
				
		analog-input-video: 視頻 (priority 7000, latency offset 0 usec, available: unknown)
			properties:
				
		analog-output: 模擬輸出 (priority 9900, latency offset 0 usec, available: unknown)
			properties:
				
wbyq@wbyq:~$

wbyq@wbyq:~$ gedit .asoundrc 

ctl.!default {
     type pulse
     sink "alsa_output.pci-0000_02_02.0.analog-stereo"
     source "alsa_input.pci-0000_02_02.0.analog-stereo"
 }

聲卡的名稱也可以通過QT的代碼的獲取:

 foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
          qDebug() << "當前系統可用的揚聲器: " << deviceInfo.deviceName();

    foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioInput))
          qDebug() << "當前系統可用的麥克風: " << deviceInfo.deviceName();



當前系統可用的揚聲器:  "default"
當前系統可用的揚聲器:  "pulse"
當前系統可用的揚聲器:  "sysdefault:CARD=AudioPCI"
當前系統可用的揚聲器:  "front:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "rear:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "surround40:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "iec958:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "dmix:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "dmix:CARD=AudioPCI,DEV=1"
當前系統可用的揚聲器:  "dsnoop:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "dsnoop:CARD=AudioPCI,DEV=1"
當前系統可用的揚聲器:  "hw:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "hw:CARD=AudioPCI,DEV=1"
當前系統可用的揚聲器:  "plughw:CARD=AudioPCI,DEV=0"
當前系統可用的揚聲器:  "plughw:CARD=AudioPCI,DEV=1"
當前系統可用的揚聲器:  "alsa_output.pci-0000_02_02.0.analog-stereo"
當前系統可用的麥克風:  "default"
當前系統可用的麥克風:  "pulse"
當前系統可用的麥克風:  "sysdefault:CARD=AudioPCI"
當前系統可用的麥克風:  "front:CARD=AudioPCI,DEV=0"
當前系統可用的麥克風:  "iec958:CARD=AudioPCI,DEV=0"
當前系統可用的麥克風:  "dmix:CARD=AudioPCI,DEV=0"
當前系統可用的麥克風:  "dsnoop:CARD=AudioPCI,DEV=0"
當前系統可用的麥克風:  "hw:CARD=AudioPCI,DEV=0"
當前系統可用的麥克風:  "plughw:CARD=AudioPCI,DEV=0"
當前系統可用的麥克風:  "alsa_input.pci-0000_02_02.0.analog-stereo"
當前系統可用的麥克風:  "alsa_output.pci-0000_02_02.0.analog-stereo.monitor"

 

 

下面公衆號裏有全套的51單片機、C++、C、QT等基礎教程,歡迎關注:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章