Pro*_*700 8 sound pulseaudio jack alsa volume-control
我有一个具体的问题:
作为一名音乐家,我使用 Ubuntu 进行软件监控,我想用鼠标滚轮控制我的输出主音量。
为此,我目前将 EasyStroke 与命令amixer -D pulse sset Master 5%+
(鼠标滚轮向上)和amixer -D pulse sset Master 5%-
(鼠标滚轮向下)一起使用,效果很好。
问题是我使用了一些具有直接 JACK 输出的程序,例如 Reaper、我的 DAW 以及一些媒体播放器。
只要软件使用PulseAudio JACK Sink输出,我就可以通过鼠标滚轮控制输出音量,但是当软件不使用PulseAudio时,它直接连接到JACK并始终处于最大音量。
如果您参考屏幕截图:我能够操纵红色标记输出(PulseAudio JACK Sink)的主音量,但实际上我需要访问标记为绿色的那个以控制所有声音(系统输出)。
不幸的是,我无法通过 控制我的 ALSA 主音量amixer -q sset Master X
,因为 ALSA 不为我唯一的 USB 声卡提供任何控制。
有什么方法可以通过终端控制 JACK 输出音量,我可以用它来替换我的鼠标按钮命令吗?
或者,有没有办法将 PulseAudio 输入模块添加到 JACK 连接的右侧,以连接 Reaper 和所有其他 JACK 软件并通过 PulseAudio JACK Sink 将它们路由?(PulseAudio JACK Source 仅用于麦克风,不会回放输入。)
根据这个例子我们就可以解决这个问题了。
如果您的声卡无法在硬件端控制音量或者驱动程序不支持声卡的此功能,可能的解决方法是在文件中定义一个新的虚拟 pcm 设备,~/.asoundrc
该设备在软件上控制音量边。
首先我们需要知道声卡的名称,因此
aplay -L
Run Code Online (Sandbox Code Playgroud)
是这里有用的命令。后显示实际卡名CARD=
,后显示设备名称(编号)DEV=
。
我们可以测试该设备
speaker-test -D <card name> -c <channel count> -twav
Run Code Online (Sandbox Code Playgroud)
现在我们softvol
通过添加来创建一个新设备
pcm.softvol {
type softvol
slave {
pcm "<card name>,<device name>"
}
control {
name "<control name>"
card "<card name>"
}
}
Run Code Online (Sandbox Code Playgroud)
到~/.asoundrc
。(如果该文件不存在,我们必须创建该文件)
在这种情况下应该是Master
,请参阅上面链接中有关控件名称的其他信息。
现在我们测试新设备
speaker-test -D softvol -c <channel count> -twav
Run Code Online (Sandbox Code Playgroud)
打开 alsamixer,您现在应该会看到新的控件Master
,并且应该能够使用 alsamixer 更改音量。
可能需要另外将设备设置为默认值/etc/asound.conf
:
pcm.!default {
type hw
card <card name>
}
ctl.!default {
type hw
card <card name>
}
Run Code Online (Sandbox Code Playgroud)
请注意,这与上面链接中的建议不同,但这就是 OP 报告的工作原理。
现在我们需要将Jack接口设备设置为softvol
并且可以使用例如
amixer -q sset Master 5%+
amixer -q sset Master 5%-
amixer -q sset Master 50%
Run Code Online (Sandbox Code Playgroud)
分别增加或减少输出音量 5% 或设置为 50%,固定。
在可以访问主音量命令之前,Amixer 需要第一次“打开”设备。在未运行speaker-test -D softvol -c <channel count> -twav
时启动声音测试,然后用于保存主音量状态。否则,每次重新启动后都必须播放声音才能使音量控制发挥作用。jackd
sudo alsactl store
softvol