Я пытаюсь создать виджет для Awesome wm, который управляет и отслеживает громкость.
В ALSA и PulseAudio легко получить и настроить громкость динамика, но как насчет получения фактической мощности сигнала?
Под этим я подразумеваю реальный шум, который вы слышите, например, если звук не воспроизводится, то это ноль. Точно так же, как вы могли бы увидеть в усилителе (монитор VU).
Обычно мне удаётся найти файл, /proc/
содержащий некоторую информацию о том, что именно используется (например, /proc/stat
об использовании процессора), но в этот раз это не тот случай.
Цель на самом деле состоит в том, чтобы отобразить аудиодисплей в реальном времени (предпочтительно отдельные каналы L/R), который напоминает монитор усиления VU от усилителя.
обратите внимание, что вопрос не в том, как запрограммировать это для awesome wm, а в том, как получить значения, которые можно использовать для этого.
решение1
Я не думаю, что это тривиально, и этот вопрос, вероятно, следует перенести на stackoverflow.
Насколько мне известно, не существует sysfs
интерфейса procfs
для доступа к финальному (ALSA) [аудио]миксу; нет даже гарантии, что такая вещь есть в программном обеспечении, поскольку некоторое оборудование (например, emu10k1
) выполняет собственное микширование, хотя я, признаюсь, понятия не имею, как это работает.
Также существует проблема с несколькими аудиовыходами (цифровыми (например, SPDIF), аналоговыми, для наушников или динамиков и т. д.) и несколькими конфигурациями динамиков на одной карте, не говоря уже о возможности использования нескольких карт.
Лучшим вариантом, по-видимому, будет попытаться подключиться к любому используемому устройству ALSA (предположительно, hw0
если микширование происходит в звуковой подсистеме, такой как PulseAudio, или dmix
если звуковая подсистема не используется), поскольку это «последний шаг» перед тем, как звук достигнет оборудования. При этом я понятия не имею, возможно ли это; вероятно, нет.
Если вы можете предположить, что пользователь использует что-то вроде PulseAudio, то задача становится намного проще. Программное обеспечение, такое какpavucontrolреализует это уже, как видно изВоспроизведениевкладка, а также предварительные стадии финального микширования в соответствии сУстройства выводаТехнически это подразумевает получение самого аудиопотока, а затем его преобразование в частотную область (например, путем выполненияСтФт) для того, чтобы визуализировать его каким-либо образом; все, что вам действительно нужно для этого, это доступ к аудиопотоку, и pulseaudio может предоставить его (как это делает pavucontrol) через приемник.
Я не очень-то помогаю, да? Если бы я был вами и просто хотел это для своего рабочего стола, и если бы я использовал PulseAudio (которым я сам, кстати, пользуюсь), моей первой целью было бы попытаться получить окончательный микс-поток. Ребята изэта темапохоже, придумали красноречивый метод сделать это, используя только pactl
и pacmd
, что можно было бы довольно легко сделать и программно.
Когда вы получите доступ к аудиопотоку, останется только математика :-)