Обнаружение при воспроизведении только тишины

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

Я нашел здесь несколько похожих вопросов, которые советовали посмотреть /proc/asound/card*/pcm*/sub*/status чтобы проверить слово RUNNING которое указывает, что звук выводится, однако многие программы, похоже, оставляют свой звук включенным, даже если они не шумят, просто выводят тишину. Я заметил, что некоторые программы Python делают это, как и Firefox при запуске через apulse .

Это означает, что я не могу обнаружить через /proc/asound/ при отсутствии звука, выходящего из динамиков, так как он постоянно работает.

Есть ли другой способ обнаружить, когда единственным звуковым сигналом является тишина? Есть ли способ записать или иначе перехватить вывод ALSA, даже если используется устройство hw ?

One Solution collect form web for “Обнаружение при воспроизведении только тишины”

Это доказательство демонстрации концепции, используя только alsa, модуль обратной связи alsa и sox для обнаружения молчания. Модуль loopback предоставляет вам устройство вывода, в которое вы можете воспроизводить звук, а затем записывать обратно. Так, например, вы можете направить mplayer на использование loopback для вывода звука, затем запустить sox для записи из loopback, обнаружить тишину и вывести на исходное аппаратное устройство вывода.

Загрузите модуль с помощью

 sudo modprobe snd-aloop 

(Это было в моем списке доступных модулей ядра). aplay -l перечислит новую карту с двумя устройствами. Устройство 0 должно играть, устройство 1 для записи. Существует 8 независимых «subdevice» каналов, и проще всего использовать число 0, так как часто его можно опустить. (Я нашел aplay в пакете alsa-utils ).

 $ aplay -l ... card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 ... Subdevice #7: subdevice #7 card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 ... Subdevice #7: subdevice #7 

Теперь вы можете использовать другую утилиту из пакета, чтобы генерировать непрерывный тон в устройстве loopback 0 (subdevice 0):

 speaker-test -t sine -D hw:Loopback 

или, например, указать mplayer для использования устройства с опцией -ao alsa:device=hw=Loopback

Вы ничего не услышите, пока не запустите sox чтобы прочитать другую сторону устройства и записать его на реальное оборудование, предполагая, что это карта 0:

 sox -q -t alsa hw:Loopback,1 -t alsa hw:0 silence 0 1 10.0 2% 

(Я видел немало предупреждений sox WARN alsa: under-run ). Если вы остановите тест динамика, после 10 секунд молчания команда sox остановится. Обратите внимание: если вы отключите mplayer вы получите тишину, но это, похоже, не зависит от уровня данных (который вы можете визуализировать, если вы удалите -q из sox ). Вам необходимо приостановить или понизить уровень звука mplayer чтобы обнаружить тишину. sox также может ввести вторую или две задержки в аудио. Вы должны настроить alsa, чтобы сделать Loopback-устройство по умолчанию вместо вашей карты 0.

Более удовлетворительное решение – позволить звуковым драйверам ядра обрабатывать аудио в реальном времени и использовать sox только для обнаружения тишины, отбрасывая ее выход. Это кажется возможным, но с просто alsa это также немного сложно и требует знаний, которых у меня нет, хотя вы можете найти примеры дублирования звука на двух устройствах, исходной звуковой карте и виртуальном устройстве, которое sox может затем читать.

Более простое решение с использованием pulseaudio для включения мониторинга возможно, используя pactl load-module module-combine-sink который я, вероятно, буду исследовать.

  • Чёрный звук с flashpayer
  • Низкий объем от задней линии, тонкий с передней панели
  • Несколько (объединить) звуковые карты USB с Alsa + Jack + Pure Data
  • 5.1 динамиков на soundblaster x-fi 'extreme audio'
  • Почему «systemctl enable rpcbind» меняет громкость моего звука? И как я могу это предотвратить?
  • Обращайтесь с несколькими источниками звука в качестве одного виртуального микрофона
  • Как получить доступ к звуковому устройству с помощью современных библиотек?
  • Объём командной строки для каждого приложения (возможно, amixer или pactl?)
  • firefox + html5 + .asoundrc = Нет звука
  • какое имя устройства я должен предоставить в snd_pcm_open, кроме "default"
  • Низкий уровень громкости на материнской плате Z97 и Linux Mint KDE
  • Linux и Unix - лучшая ОС в мире.