как считывать уровень громкости клиентов pulseaudio в консоли



Я хотел бы прочитать громкость звука, воспроизводимого в данный момент для нескольких клиентов pulseaudio.



Проблема, которую я хотел бы решить, заключается в следующем:
Я слушаю музыку в xmms, затем я ставлю ее на паузу, чтобы послушать песню, которую друг прислал мне на youtube. Через час я вдруг обнаруживаю, что не слушаю никакой музыки!



(очень простое) решение, о котором я думал, - это скрипты bash, которые просто проверяют объем всех приложений, кроме xmms, каждую секунду, если таковые имеются приложение издает звук, xmms приостанавливается, если звука нет, а xmms молчит, xmms включается. (Я действительно хочу иметь возможность делать это в приложении, например, pidgin следует игнорировать)



Я мог найти только графические инструменты для чтения Тома, такие как pavucontrol, который прекрасно отображает его. Я действительно не хотел бы кодировать все виды программ на C, чтобы сделать такую простую вещь, так что:




  1. я думаю в правильном направлении, или есть более простое решение

  2. Если есть не так ли, как я считываю текущий уровень громкости для отдельных приложений

589   3  

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

    Ничего не найдено.