¿Cómo puedo hacer que una máquina "pantalla en blanco" durante un período de tiempo (como una pena) si se alcanzan ciertos niveles de ruido?

Mis hijos (4 y 5 años) gritan mucho cuando juegan en el ordenador. He encontrado un remedio eficaz para esto. Cuando oigo ruidos fuertes, me meto en el ordenador del juego y lo hago:

chvt 3;  sleep 15;  chvt 7 

Esto apagará la pantalla durante 15 segundos en Linux. Les he dicho que al ordenador no le gustan los ruidos fuertes. Se lo creen totalmente y le piden perdón al ordenador. Se han vuelto mucho más silenciosos, pero no al nivel que me haría feliz, por lo que tengo que continuar con este proceso educativo. Sin embargo, no siempre estoy cerca para hacerlo manualmente.

¿Es posible automatizarlo? Un micrófono está conectado a la caja. Si el nivel de sonoridad supera algún umbral, quiero ejecutar un comando.

Consulte "Cómo detectar la presencia de sonido/audio" por Thomer M. Gil.

Básicamente graba el sonido cada 5 segundos, luego comprueba la amplitud del sonido, usando sox, y decide si dispara un script o no. Creo que puedes adaptar fácilmente el script ruby para tus hijos. O puedes optar por hackear el script de Python (usando PyAudio) que él ha proporcionado también.

Comentarios (1)

Puedes obtener información del micrófono haciendo algo así:

arecord -d1 /dev/null -vvv

Puede que tengas que jugar un poco con los ajustes, como por ejemplo

arecord -d1 -Dhw:0 -c2 -fS16_LE /dev/null -vvv

A partir de ahí, es una simple cuestión de analizar la salida.

Comentarios (0)

Mis dos centavos para la solución en C o C++: tal vez no sea el enfoque más eficaz, pero en Linux, puedes utilizar la API ALSA (biblioteca de manejo de audio incorporada en Linux) y utilizar alguna técnica numérica (por ejemplo, calcular el nivel de sonido medio cada segundo) para obtener el nivel de ruido.

Entonces puedes comprobarlo en un bucle infinito, y si es mayor que un umbral preestablecido, puedes usar la biblioteca X11 para apagar la pantalla durante algunos segundos, o alternativamente (menos elegante, pero funciona) invocar el comando chvt usando system("chvt 3; sleep 15; chvt 7 ");.

Comentarios (1)