如何获得python中的系统输出卷?
我正在做一个项目,需要在Python中获得当前的系统音频输出级别。基本上,我想知道在Linux系统上使用Python时,扬声器发出的当前声音有多大。我不需要知道扬声器的确切音量,相对音量就是我想要的。我还没有在网上找到任何关于这方面的好资源。中的这段代码是否提供了您要查找的信息 首先,如何获得python中的系统输出卷?,python,python-3.x,audio,pyaudio,Python,Python 3.x,Audio,Pyaudio,我正在做一个项目,需要在Python中获得当前的系统音频输出级别。基本上,我想知道在Linux系统上使用Python时,扬声器发出的当前声音有多大。我不需要知道扬声器的确切音量,相对音量就是我想要的。我还没有在网上找到任何关于这方面的好资源。中的这段代码是否提供了您要查找的信息 首先,pip安装pyalsaaudio,然后运行以获取卷: >>> import alsaaudio >>> m = alsaaudio.Mixer() >>> vo
pip安装pyalsaaudio
,然后运行以获取卷:
>>> import alsaaudio
>>> m = alsaaudio.Mixer()
>>> vol = m.getvolume()
>>> vol
[50L]
注意:此代码是从链接答案的后半部分复制的。我在Mac上,因此无法实际运行它,因为lib不会构建在macOS上,但乍一看,它似乎可以在Linux上提供当前的系统音频输出级别。tl;dr-在macOS上获取离散系统输出量的替代答案。
在看到您的问题并了解到我无法在macOS上构建pyalsaaudio
之后,我想为如何在macOS上具体实现提供一个额外的答案,因为它不是以跨平台的方式抽象的
(我知道这对您的即时用例没有帮助,但我有一种预感,我不是唯一一个对这个问题感兴趣的Mac用户,我们也可以运行这个解决方案。)
在macOS上,您可以通过运行一点AppleScript:
$ osascript -e 'get volume settings'
output volume:13, input volume:50, alert volume:17, output muted:false
我将该调用包装在Python函数中,以将音量+静音状态解析为一个简单的0–100范围:
import re
import subprocess
def get_speaker_output_volume():
"""
Get the current speaker output volume from 0 to 100.
Note that the speakers can have a non-zero volume but be muted, in which
case we return 0 for simplicity.
Note: Only runs on macOS.
"""
cmd = "osascript -e 'get volume settings'"
process = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
output = process.stdout.strip().decode('ascii')
pattern = re.compile(r"output volume:(\d+), input volume:(\d+), "
r"alert volume:(\d+), output muted:(true|false)")
volume, _, _, muted = pattern.match(output).groups()
volume = int(volume)
muted = (muted == 'true')
return 0 if muted else volume
例如,在MacBook Pro上,在各种音量栏设置下:
>>> # 2/16 clicks
>>> vol = get_speaker_output_volume()
>>> print(f'Volume: {vol}%')
Volume: 13%
>>> # 2/16 clicks + muted
>>> get_speaker_output_volume()
0
>>> # 16/16 clicks
>>> get_speaker_output_volume()
100
图书馆和这两个问题可能会帮助你:和。我很感谢泰勒的评论,但这两个答案都是关于改变系统音量的。我想告诉你系统目前有多响。例如如果没有播放任何内容,我希望返回0。如果正在播放,我需要该流的当前音频级别。谢谢。我在下面添加了一个更具体的答案(有点太长了,不适合评论)。你找到解决方案了吗?也许,当前的音频级别不是正确的词语选择。我正在从以下页面查找示例2的输出版本:。这个程序记录了一段时间内麦克风的音量,我想要一段时间内扬声器的音量。感谢您的持续支持。好的,那么您是在寻找音频输出电平流的连续信号,而不是离散值吗?是的,我发现音频强度是我要寻找的术语。好的,所以你是在寻找通过扬声器实际播放的音频强度,而不是扬声器设置的输出音量?这是正确的。再次感谢你的帮助。