天天看點

Linux下使用alsamixer配置系統預設的聲霸卡裝置(預設音頻輸出裝置、輸入裝置、系統音量)

一、系統環境

作業系統:  ubuntu 18.04  64位 

二、檢視系統有哪些聲霸卡可用(麥克風和揚聲器)

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

2.1  運作alsamixer指令,打開圖形界面

wbyq@wbyq:~$ alsamixer      

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

Linux下使用alsamixer配置系統預設的聲霸卡裝置(預設音頻輸出裝置、輸入裝置、系統音量)

 沒有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 圖形界面手動設定

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

Linux下使用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聲霸卡裝置。

Linux下使用alsamixer配置系統預設的聲霸卡裝置(預設音頻輸出裝置、輸入裝置、系統音量)

這是一款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
Linux下使用alsamixer配置系統預設的聲霸卡裝置(預設音頻輸出裝置、輸入裝置、系統音量)

使用檢視聲霸卡詳細配置清單:得到麥克風和揚聲器的名稱

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:~$      
Linux下使用alsamixer配置系統預設的聲霸卡裝置(預設音頻輸出裝置、輸入裝置、系統音量)
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"
 }      
Linux下使用alsamixer配置系統預設的聲霸卡裝置(預設音頻輸出裝置、輸入裝置、系統音量)

聲霸卡的名稱也可以通過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"      

繼續閱讀