如何以编程方式更改Ubuntu中的卷

时间:2012-05-24 14:22:44

标签: python audio ubuntu gnome alsa

如何通过命令行或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%,但音量仍处于爆炸状态。

另一个缺点是我必须指定确切的有源输出设备,如果有多个设备,我可能不知道。例如,如果我有“主人”和“耳机”,我如何确定哪一个是有源设备?

6 个答案:

答案 0 :(得分:40)

Ubuntu使用pulseaudio作为sounderver。可以使用pactlpacmd实用程序从命令行控制它,例如:

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

答案 1 :(得分: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库。

答案 2 :(得分:6)

amixer 命令在Ubuntu 13.04中运行,

将音量提高5%
amixer -D pulse sset Master 5%+

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

pactl pacmd 在Ubuntu 13.04中无法正常使用。

答案 3 :(得分: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

答案 4 :(得分:1)

您也可以尝试简单而优雅的ponymix utill。它可以很容易地增大/减小音量,切换(静音/取消静音)音频等。

首先获取ponymix

的可用音频源列表

在我的情况下,我可以看到接收器0 源0 。我可以使用数字 0 或全名内置音频数字立体声(HDMI)来控制音频。

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

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

答案 5 :(得分: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 ~ $