Encontrar el volumen actual del altavoz (intensidad de la señal)

Encontrar el volumen actual del altavoz (intensidad de la señal)

Estoy intentando crear un widget para wm increíble que controle y monitoree el volumen.

Obtener y configurar el volumen del altavoz es fácil en ALSA y PulseAudio, pero ¿qué tal obtener la intensidad de la señal real?

Con esto me refiero al ruido real que escuchas, por ejemplo, si no se reproduce ningún sonido, es cero. Tal como lo verías en un amplificador (el monitor VU).

Por lo general, puedo encontrar un archivo que /proc/tenga algún valor en cuanto a lo que se está utilizando (por ejemplo, /proc/statpara el uso de la CPU), pero esta vez no es el caso.

En realidad, el objetivo es mostrar una pantalla de audio en tiempo real (preferiblemente canales L/R separados) que se asemeje al monitor VU de ganancia de un amplificador.

Tenga en cuenta que la pregunta no es cómo programar esto para Awesome WM, sino cómo obtener los valores que se pueden usar para hacerlo.

Respuesta1

No creo que esto sea trivial y esta pregunta probablemente debería trasladarse a stackoverflow.

Hasta donde yo sé, no existe sysfsninguna procfsinterfaz para acceder a la mezcla final (ALSA) [audio]; Ni siquiera hay garantía de que exista tal cosa en el software, ya que algunos hardware (como emu10k1) realizan su propia mezcla, aunque admito que no tengo idea de cómo funciona.

También está la cuestión de múltiples salidas de audio (digital (como SPDIF), analógica, auriculares o parlantes, etc.) y múltiples configuraciones de parlantes en la misma tarjeta, sin mencionar la posibilidad de múltiples tarjetas.

La mejor opción es probablemente intentar acceder a cualquier dispositivo ALSA que se utilice (presumiblemente hw0si la mezcla se produce en un subsistema de sonido como pulseaudio, o dmixsi no se utiliza ningún subsistema de sonido), ya que este es el "último paso" antes de que el audio llegue al hardware. . Dicho esto, no tengo idea de si esto es posible; Probablemente no.

Si puedes asumir que el usuario está usando algo como pulseaudio, entonces la tarea se vuelve mucho más fácil. Software comopavucontrolya implementa esto, como se ve en elReproducciónpestaña, así como las etapas de premezcla final enDispositivos de salida. Técnicamente, esto implica obtener la transmisión de audio en sí y luego convertirla al dominio de la frecuencia (por ejemplo, realizandoStFt) para visualizarlo de alguna manera; Todo lo que realmente necesita para esto es acceso a la transmisión de audio, y pulseaudio puede proporcionarlo (como lo hace pavucontrol) a través de un receptor.

No estoy siendo de mucha ayuda, ¿verdad? Si yo fuera usted y sólo quisiera esto para mi escritorio, y si estuviera usando pulseaudio (que yo mismo uso), mi primer objetivo sería intentar obtener la secuencia de mezcla final. los chicos eneste hiloParece haber descubierto un método elocuente para hacerlo usando only pactly pacmd, que también podría hacerse fácilmente mediante programación.

Cuando tienes la transmisión de audio, solo quedan las matemáticas :-)

información relacionada