25

您如何通过命令行或 API(最好是 Python)以编程方式更改 Ubuntu 上 Gnome 中的音量?

我发现类似问题的唯一答案使用amixer,这似乎对 Ubuntu 12.04 没有影响。跑步:

amixer set Headphone 10-

显示:

Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 115
  Mono:
  Front Left: Playback 0 [57%] [-57.50dB] [on]
  Front Right: Playback 0 [57%] [-57.50dB] [on]

每次我运行它时,x% 都会发生变化。不幸的是,它对实际音量没有影响。最终它显示为 0%,但音量仍处于最高水平。

另一个缺点是我必须指定确切的活动输出设备,我可能不知道是否有多个设备。例如,如果我有一个“Master”和“Headphone”,我如何确定哪一个是活动设备?

4

6 回答 6

40

Ubuntu 使用 pulseaudio 作为发声器。pactl可以使用和实用程序从命令行控制它pacmd,例如:

pactl set-sink-volume 0 20%

会将水槽#0 的体积设置为 20%。

见:man pactlpacmd help


编辑:

为避免-xx被解释为命令行选项,您必须为其添加前缀--. 从那时起停止选项解析:

pactl set-sink-volume 0 -- -20%    # or:
pactl -- set-sink-volume 0 -20%    # doesn't matter where the `--` goes
于 2012-05-24T14:42:31.203 回答
16

我用 ALSA 混音器来做。你可能需要下载 python-alsaaudio

sudo apt-get install python-alsaaudio

然后控制音量,

import alsaaudio
m = alsaaudio.Mixer()   # defined alsaaudio.Mixer to change volume
m.setvolume(50) # set volume
vol = m.getvolume() # get volume float value

阅读http://pyalsaaudio.sourceforge.net/libalsaaudio.html以详细了解 alsaaudio 库。

于 2012-05-24T20:57:44.203 回答
6

amixer命令在 Ubuntu 13.04 中工作,

音量增加 5%
amixer -D pulse sset Master 5%+

减少 5% 的音量
amixer -D pulse sset Master 5%-

pactlpacmd在 Ubuntu 13.04 中对我不起作用。

于 2014-02-19T00:04:28.700 回答
2

读取音量的脏片段(不要忘记音量在 ubuntu 上超过“100%”——此时返回 ~0.66)。

#!/usr/bin/python
import subprocess

vol = int(filter(lambda l: l.startswith('set-sink-volume'),
          subprocess.check_output(["pacmd","dump"])
          .split('\n'))[0]
          .split()[-1],16)/100000.

print vol
于 2013-09-11T17:35:57.730 回答
1

你也可以试试简单优雅的小马混合工具。它使增加/减少音量、切换(静音/取消静音)音频等变得非常容易。

首先获取可用音频源的列表ponymix

就我而言,我可以看到sink 0source 0。我可以使用数字0或全名Built-in Audio Digital Stereo (HDMI)来控制音频。

将卡 0 的音量增加 5%ponymix -c 0 increase 5

将卡片 0 的音量减小 5%ponymix -c 0 decrease 5

于 2014-04-29T19:51:08.833 回答
1

我可以推荐这个控制pulseaudio的工具: https ://github.com/graysky2/pulseaudio-ctl

me@mypc ~ $ pulseaudio-ctl
pulseaudio-ctl v1.63

/usr/bin/pulseaudio-ctl {up,down,mute,mute-input,set,atmost,full-status} [n]

Where up and down adjust volume in ±5 % increments
Where up and down [n] adjust volume in ±n % increments
Where mute toggles the mute status on/off
Where mute-input toggles the input status on/off
Where set set the volume to [n] %
Where atmost only takes effect if current volume is higher than [n]
Where full-status prints volume level, sink and source mute state to stdout

Optionally, redefine an upper threshold in /home/me/.config/pulseaudio-ctl/config

Volume level     : 80 %
Is sink muted    : no
Is source muted  : no
Detected sink    : 1
Detected source  : 3
Pulse version    : 8.0
me@mypc ~ $ 
于 2017-02-17T18:51:51.377 回答