Определение текущей громкости динамика (уровня сигнала)

Определение текущей громкости динамика (уровня сигнала)

Я пытаюсь создать виджет для 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, что можно было бы довольно легко сделать и программно.

Когда вы получите доступ к аудиопотоку, останется только математика :-)

Связанный контент