是否有一致的 shell 命令来调整音量?

pre*_*non 7 audio

我一直试图找到一个一致的 shell 命令来调整我的笔记本电脑的音量。我被推荐尝试(用于静音/取消静音):

 pactl set-sink-mute 0 toggle
Run Code Online (Sandbox Code Playgroud)

它没有用,我收到了错误

Failed to get sink information: No such entity
Run Code Online (Sandbox Code Playgroud)

多看几眼后,我发现在命令中更改01有效。我认为这是因为 pactl 在启动时为我的声卡分配了一个编号,而当我重新启动笔记本电脑时,该编号发生了变化。

那很好,但是当我重新启动笔记本电脑时,音频键不再起作用。我在 shell 中尝试了工作命令并再次收到“没有这样的实体”错误。如果我改10(即原始命令),它会再次工作。

这让我很困惑,因为我认为我只有一张声​​卡。无论如何,如果分配给卡的编号不一致,是否有一致的方法来引用该卡并调整其音量?

nik*_*mic 12

一台笔记本电脑可能只有一张声​​卡,但可以有多个 Pulseaudio 接收器用于音频播放。

要查看可用接收器列表:

pactl list short sinks
Run Code Online (Sandbox Code Playgroud)

在引导期间分配接收器索引号,并且接收器的顺序可以在引导之间改变。为了确保静音命令在正确的接收器上工作,请使用符号名称而不是索引号。

例如:

我系统上的接收器列为:

$ pactl list short sinks
0       alsa_output.pci-0000_00_1b.0.analog-stereo      module-alsa-card.c      s16le 2ch 44100Hz       RUNNING
1       alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1 module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
Run Code Online (Sandbox Code Playgroud)

即该装置RUNNING是要被静音的一个:

symbolic name = alsa_output.pci-0000_00_1b.0.analog-stereo
Run Code Online (Sandbox Code Playgroud)

所以在该设备上切换静音状态的命令是:

$ pactl set-sink-mute alsa_output.pci-0000_00_1b.0.analog-stereo toggle
Run Code Online (Sandbox Code Playgroud)