当前位置: 首页>>技术问答>>正文


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

, , , ,

问题描述

你如何通过命令行或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”,我该如何确定哪一个是有源设备?

最佳解决办法

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

次佳解决办法

我是用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库。

第三种解决办法

amixer命令在Ubuntu 13.04中工作,

将体积增加5%amixer -D pulse sset Master 5%+

将体积减少5%amixer -D pulse sset Master 5%-

pactl或pacmd在Ubuntu 13.04中没有正确地为我工作。

第四种办法

读取音量的脏片段(不要忘记音量超过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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6328.html,未经允许,请勿转载。