как считывать уровень громкости клиентов pulseaudio в консоли
Я хотел бы прочитать громкость звука, воспроизводимого в данный момент для нескольких клиентов pulseaudio.
Проблема, которую я хотел бы решить, заключается в следующем:
Я слушаю музыку в xmms, затем я ставлю ее на паузу, чтобы послушать песню, которую друг прислал мне на youtube. Через час я вдруг обнаруживаю, что не слушаю никакой музыки!
(очень простое) решение, о котором я думал, - это скрипты bash, которые просто проверяют объем всех приложений, кроме xmms, каждую секунду, если таковые имеются приложение издает звук, xmms приостанавливается, если звука нет, а xmms молчит, xmms включается. (Я действительно хочу иметь возможность делать это в приложении, например, pidgin следует игнорировать)
Я мог найти только графические инструменты для чтения Тома, такие как pavucontrol, который прекрасно отображает его. Я действительно не хотел бы кодировать все виды программ на C, чтобы сделать такую простую вещь, так что:
- я думаю в правильном направлении, или есть более простое решение
- Если есть не так ли, как я считываю текущий уровень громкости для отдельных приложений
3 ответов:
Возможно, вы можете записать один образец аудио из выходного потока и посмотреть, является ли он (близко к) 0. Этот конвейер дает вам один образец в виде числа между -32768 и 32767 (включительно):
parec --raw --channels=1 --latency=2 2>/dev/null | od -N2 -td2 | head -n1 | cut -d' ' -f2- | tr -d ' 'Вам нужно будет настроить аргументы
parecи, возможно, конфигурацию PulseAudio, чтобы подключиться к выходному потоку и записать его.
pactl listсбрасывает список... Ну, кажется, почти все. С запущенным экземпляромmplayer -ao pulseя получаю следующее среди выходных данных:Sink Input #2 Driver: protocol-native.c Owner Module: 8 Client: 10 Sink: 0 Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Mute: no Volume: 0: 100% 1: 100% 0: 0.00 dB 1: 0.00 dB balance 0.00 ... Properties: media.name = "audio stream" application.name = "MPlayer" native-protocol.peer = "UNIX socket client" .... application.process.binary = "mplayer" ...Это не дает вам текущие уровни монитора (громкость воспроизводимого аудио), хотя, может быть, этого достаточно?
Я бы даже не стал утруждать себя чтением томов. Я бы написал модуль, который содержит приемник, который определяет объем подключенных к нему приложений и может выполнять действия на его основе, а также виртуальное приложение, которое вы можете направить к существующему приемнику для последующего вывода звука.
Comments