一渔隶、alsa設(shè)置默認(rèn)聲卡
alsa的配置文件是alsa.conf位于/usr/share/alsa目錄下,通常還有/usr/share/alsa/card和/usr/share/alsa/pcm兩個(gè)子目錄用來設(shè)置card相關(guān)的參數(shù),別名以及一些PCM默認(rèn)設(shè)置垦梆。
1.安裝alsa相關(guān)應(yīng)用
sudo apt-get install alsa-base alsa-utils alsa-oss alsa-tools
2.查看系統(tǒng)中的聲卡
# 查看聲卡
cat /proc/asound/cards
0 [tegrahda ]: tegra-hda - tegra-hda
tegra-hda at 0x70038000 irq 82
1 [tegrasndt210ref]: tegra-snd-t210r - tegra-snd-t210ref-mobile-rt565x
tegra-snd-t210ref-mobile-rt565x
2 [Adaptor ]: USB-Audio - CSR Audio Adaptor
CSR Audio Adaptor at usb-70090000.xusb-2.3, full speed
# 查看播放設(shè)備
$ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rkhdmidpsound [rk-hdmi-dp-sound], device 0: HDMI-DP i2s-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tipcm5102codec [ti,pcm5102-codec], device 0: ff880000.i2s-pcm5102a-hifi pcm5102a-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
# 查看錄音設(shè)備
$ sudo arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC3234 Analog [ALC3234 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
- 每一個(gè)聲卡有一個(gè)card number和一個(gè)device number
$ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
Home directory not accessible: Permission denied
card 0: tegrahda [tegra-hda], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 0: ADMAIF1 CIF ADMAIF1-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 1: ADMAIF2 CIF ADMAIF2-1 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 2: ADMAIF3 CIF ADMAIF3-2 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 3: ADMAIF4 CIF ADMAIF4-3 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 4: ADMAIF5 CIF ADMAIF5-4 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 5: ADMAIF6 CIF ADMAIF6-5 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 6: ADMAIF7 CIF ADMAIF7-6 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 7: ADMAIF8 CIF ADMAIF8-7 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 8: ADMAIF9 CIF ADMAIF9-8 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: tegrasndt210ref [tegra-snd-t210ref-mobile-rt565x], device 9: ADMAIF10 CIF ADMAIF10-9 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Adaptor [CSR Audio Adaptor], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
- alsa設(shè)置了一個(gè)defaults設(shè)備,音頻播放軟件默認(rèn)使用defaults設(shè)備輸出聲音仅孩。defaults設(shè)備定義在alsa.conf中托猩。defaults會(huì)默認(rèn)匹配card number和device number比較小的聲卡。如果要修改默認(rèn)聲卡辽慕,則修改/etc/asound.conf或~/.asoundrc文件京腥。
...
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
defaults.pcm.subdevice -1
defaults.pcm.nonblock 1
defaults.pcm.compat 0
defaults.pcm.minperiodtime 5000 # in us
defaults.pcm.ipc_key 5678293
defaults.pcm.ipc_gid audio
defaults.pcm.ipc_perm 0660
defaults.pcm.dmix.max_periods 0
defaults.pcm.dmix.rate 48000
defaults.pcm.dmix.format "unchanged"
defaults.pcm.dmix.card defaults.pcm.card
defaults.pcm.dmix.device defaults.pcm.device
defaults.pcm.dsnoop.card defaults.pcm.card
defaults.pcm.dsnoop.device defaults.pcm.device
defaults.pcm.front.card defaults.pcm.card
defaults.pcm.front.device defaults.pcm.device
defaults.pcm.rear.card defaults.pcm.card
defaults.pcm.rear.device defaults.pcm.device
defaults.pcm.center_lfe.card defaults.pcm.card
defaults.pcm.center_lfe.device defaults.pcm.device
defaults.pcm.side.card defaults.pcm.card
defaults.pcm.side.device defaults.pcm.device
defaults.pcm.surround21.card defaults.pcm.card
defaults.pcm.surround21.device defaults.pcm.device
defaults.pcm.surround40.card defaults.pcm.card
...
3.使用 ~/.asoundrc配置默認(rèn)聲卡
用戶配置
https://alsa.opensrc.org/Asoundrc
在home目錄添加 .asoundrc文件:
vi .asoundrc # 【測(cè)試可用】
defaults.ctl.card 2
defaults.pcm.card 2
defaults.pcm.device 0
4.使用/etc/asound.conf配置默認(rèn)聲卡
全局配置
pcm.!default {
type plug
slave {
pcm "hw:tegrasndt210ref,0"
channels 2
rate 48000
}
hint.description "Tegra APE Soundcard (tegrasndt210ref,0)"
}
ctl.!default {
type hw
card tegrasndt210ref
}
pcm.music {
type plug
slave {
pcm "hw:tegrasndt210ref,0"
channels 2
rate 48000
}
}
pcm.demixer {
type plug
slave {
pcm "dmix:tegrasndt210ref"
channels 2
rate 48000
}
}
pcm.aux {
type hw
card "Tegra"
device 3
}
pcm.voice {
type plug
slave {
pcm "hw:tegrasndt210ref,2"
channels 1
rate 8000
}
}
pcm.aux_plug {
type plug
slave.pcm "aux"
}
pcm.music_and_voice {
type asym
playback.pcm {
type plug
slave.pcm {
type multi
slaves.a.pcm music
slaves.b.pcm voice
slaves.a.channels 2
slaves.b.channels 1
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
}
route_policy duplicate
}
capture.pcm "voice"
}
在文件最后添加一下內(nèi)容
$ sudo vim /etc/asound.conf
defaults.pcm.card 2
defaults.ctl.card 2
5.命令行指定錄音和播放設(shè)備
# 選擇默認(rèn)設(shè)備錄音
arecord -d 3 demo.wav
# 選擇特定設(shè)備錄音 【測(cè)試可用】
arecord -d 3 -D "plug:SLAVE='hw:2,0'" sample.wav
# 注意:-D 指定設(shè)備 參考aplay -l
# -d 指定延時(shí),單位秒
arecord -D hw:2,0 -c 2 -f S16_LE -d 5 -v test.wav
# 選擇默認(rèn)設(shè)備播放 【測(cè)試可用】 受系統(tǒng)音量調(diào)節(jié)
aplay demo.wav
# 選擇特定設(shè)備播放 【測(cè)試可用】 不受系統(tǒng)音量調(diào)節(jié)
aplay -D "plug:SLAVE='hw:2,0'" sample.wav
6.使用pacmd命令配置默認(rèn)聲卡
# 查看系統(tǒng)聲卡
sudo pacmd list-sinks | grep name:
name: <alsa_output.platform-70030000.hda.hdmi-stereo>
name: <alsa_output.usb-0a12_CSR_Audio_Adaptor-00.analog-stereo>
name: <alsa_output.platform-sound.analog-stereo>
# 設(shè)置默認(rèn)輸出聲卡 【測(cè)試不可用】
sudo pacmd set-default-sink alsa_output.usb-0a12_CSR_Audio_Adaptor-00.analog-stereo
sudo pacmd list-sources | grep name:
# 設(shè)置默認(rèn)輸入麥克風(fēng)
pacmd set-default-source "SOURCENAME"
- 需要有PulseAudio守護(hù)進(jìn)程在后臺(tái)運(yùn)行
二、調(diào)節(jié)系統(tǒng)音量
1.使用ALSA的amixer調(diào)節(jié)音量
1)調(diào)節(jié)常用命令
$ sudo amixer -h
Usage: amixer <options> [command]
Available options:
-h,--help this help
-c,--card N select the card
-D,--device N select the device, default 'default'
-d,--debug debug mode
-n,--nocheck do not perform range checking
-v,--version print version of this program
-q,--quiet be quiet
-i,--inactive show also inactive controls
-a,--abstract L select abstraction level (none or basic)
-s,--stdin Read and execute commands from stdin sequentially
-R,--raw-volume Use the raw value (default)
-M,--mapped-volume Use the mapped volume
Available commands:
scontrols show all mixer simple controls
scontents show contents of all mixer simple controls (default command)
sset sID P set contents for one mixer simple control
sget sID get contents for one mixer simple control
controls show all controls for given card
contents show contents of all controls for given card
cset cID P set control contents for one control
cget cID get control contents for one control
# 解除靜音
sudo amixer set 'Master' unmute
sudo amixer -c 0 sset 'Master',0 100%,80% unmute
# -c 選擇聲卡溅蛉, 不設(shè)置則為默認(rèn)
# 'Master',0:Simple mixer control
# 100%,80% : 左聲道公浪、右聲道音量
2)使用softvol控制主音量
如果聲卡無法控制硬件的音量(如PCM5102),或者驅(qū)動(dòng)程序不支持聲卡的此功能船侧,則可以定義一個(gè)新的虛擬pcm設(shè)備欠气,該設(shè)備將控制軟件方面的音量。
-
設(shè)置全局音頻配置文件
$ sudo vim /etc/asound.conf pcm.softdevice { type softvol slave.pcm "default" control.name "Softmaster" control.card 1 } # 設(shè)置默認(rèn)聲卡 defaults.pcm.card 1 defaults.ctl.card 1
這將創(chuàng)建一個(gè)名為softdevice的新PCM設(shè)備勺爱,其音量由名為
Softmaster
的新音量控件控制 晃琳。音量改變的音頻流將被傳送到default
設(shè)備。由于該插件沒有任何變化琐鲁,因此新設(shè)備的音量卫旱, 采樣格式, 采樣率 和通道數(shù)與從設(shè)備的值相同围段。 -
首次使用新定義的設(shè)備
只有使用一次新PCM設(shè)備后顾翼,才會(huì)出現(xiàn)Softmaster控件,同時(shí)也可以通過alsamixer 調(diào)節(jié)音量
$ sudo speaker-test -D softdevice $ amixer Simple mixer control 'Softmaster',0 Capabilities: volume Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 255 Front Left: 156 [61%] Front Right: 156 [61%]
-
保存配置
$ alsactl store -f /var/lib/alsa/asound.state $ cat /var/lib/alsa/asound.state ... state.tipcm5102codec { control.1 { iface MIXER name Softmaster value.0 156 value.1 156 comment { access 'read write user' type INTEGER count 2 range '0 - 255' tlv '00000001000000080000000000000014' dbmin 0 dbmax 5100 dbvalue.0 3120 dbvalue.1 3120 } } } ...
-
修改音量與播放
sudo amixer -c 1 sset 'Softmaster',0 80%,80% unmute # 播放音頻 sudo aplay -d 2 -D softdevice audio_test.wav
2.使用pulseaudio的pactl調(diào)節(jié)音量
Ubuntu Linux:從命令行和鍵盤快捷方式增加減少音量
使用是pulseaudio的自帶命令pactl
sudo apt-get install pulseaudio
# 查看音頻設(shè)備的名稱或索引號(hào)
pactl list short sinks
0 alsa_output.platform-70030000.hda.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
1 alsa_output.usb-0a12_CSR_Audio_Adaptor-00.analog-stereo module-alsa-card.c s16le 2ch 48000Hz RUNNING
2 alsa_output.platform-sound.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
# 將音量提高10% 【測(cè)試可用】
pactl -- set-sink-volume 1 +10%
# 將音量降低10%
pactl -- set-sink-volume 1 -10%
# 將音量設(shè)置為200%
pactl -- set-sink-volume 1 100%
# 查看音頻輸入輸出設(shè)備
pactl list short sources
0 alsa_output.platform-70030000.hda.hdmi-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
1 alsa_output.usb-0a12_CSR_Audio_Adaptor-00.analog-stereo.monitor module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
2 alsa_input.usb-0a12_CSR_Audio_Adaptor-00.analog-mono module-alsa-card.c s16le 1ch 48000Hz SUSPENDED
3 alsa_output.platform-sound.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
4 alsa_input.platform-sound.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
# 設(shè)置默認(rèn)音頻輸出設(shè)備 【測(cè)試不可用】
pactl set-default-sink alsa_output.usb-0a12_CSR_Audio_Adaptor-00.analog-stereo.monitor
# 設(shè)置默認(rèn)音頻輸入設(shè)備 【測(cè)試不可用】
pactl set-default-source alsa_input.usb-0a12_CSR_Audio_Adaptor-00.analog-mono
三奈泪、問題調(diào)試
1.系統(tǒng)不播放音樂适贸,連接過了10分鐘灸芳,藍(lán)牙自帶斷開
- 原因:藍(lán)牙音箱一段時(shí)間沒有聲音會(huì)自動(dòng)休眠。
- 解決辦法:需要定期給藍(lán)牙音箱播放一段空白語音拜姿,以保持藍(lán)牙連接正常烙样。
2.root用戶無法調(diào)節(jié)系統(tǒng)音量
-
pulseaudio來管理音頻設(shè)備的,而pulseaudio不允許在root用戶下運(yùn)行蕊肥,這樣會(huì)導(dǎo)致安全問題谒获。
root@michael-desktop:/# pulseaudio W: [pulseaudio] main.c: This program is not intended to be run as root (unless --system is specified). E: [pulseaudio] pid.c: Daemon already running. E: [pulseaudio] main.c: pa_pid_file_create() failed.
-
解決方法:跨用戶調(diào)用命令 【可用】
# 錄音 su - nano -c "arecord -d 3 -D \"plug:SLAVE='hw:2,0'\" sample.wav" # 播放聲音 su - nano -c "aplay sample.wav" # 調(diào)節(jié)音量 su - nano -c "pactl -- set-sink-volume 1 100%"