Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得python中的系统输出卷?_Python_Python 3.x_Audio_Pyaudio - Fatal编程技术网

如何获得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

我正在做一个项目,需要在Python中获得当前的系统音频输出级别。基本上,我想知道在Linux系统上使用Python时,扬声器发出的当前声音有多大。我不需要知道扬声器的确切音量,相对音量就是我想要的。我还没有在网上找到任何关于这方面的好资源。

中的这段代码是否提供了您要查找的信息

首先,
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的输出版本:。这个程序记录了一段时间内麦克风的音量,我想要一段时间内扬声器的音量。感谢您的持续支持。好的,那么您是在寻找音频输出电平流的连续信号,而不是离散值吗?是的,我发现音频强度是我要寻找的术语。好的,所以你是在寻找通过扬声器实际播放的音频强度,而不是扬声器设置的输出音量?这是正确的。再次感谢你的帮助。