一、系統環境
操作系統: 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等基礎教程,歡迎關注: