Я работаю над проектом, в котором мне нужно получить текущий уровень вывода звука системы в Python. По сути, я хочу знать, насколько громкий текущий звук, исходящий из динамиков, использует Python в системе Linux. Мне не нужно знать точный уровень громкости динамиков, меня интересует относительная громкость. Я не нашел хороших ресурсов в Интернете для этого.
Как получить объем вывода системы в python?
Ответы (2)
tl; dr — альтернативный ответ для получения дискретного системного выходного тома в macOS.
Увидев ваш вопрос и узнав, что я не могу собрать pyalsaaudio
на macOS, я хотел предоставить дополнительный ответ на вопрос, как это можно сделать конкретно на 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
Содержит ли этот фрагмент с сайта https://askubuntu.com/a/689523/583376 нужную вам информацию?
Сначала pip install pyalsaaudio
, а затем запустите, чтобы получить объем:
>>> import alsaaudio
>>> m = alsaaudio.Mixer()
>>> vol = m.getvolume()
>>> vol
[50L]
Примечание. Этот код скопирован из второй части связанного ответа. Я работаю на Mac и поэтому не могу запустить его, так как библиотека не будет работать на macOS, но на первый взгляд кажется, что она обеспечивает текущий уровень вывода системного звука в Linux.