sábado, 15 de diciembre de 2007

Scripts para saber cuando pasa cada hora:

Suele suceder que gracias a la gran estabilidad de los sistemas que usamos y la adictividad las terminales gráficas, virtuales, de texto algunos perdemos la noción del tiempo.

Como suelo usar varias veces la compu con los parlantes encendidos para escuchar música de vez en cuando lo que se me ocurrió hacer es un conjunto de scripts que combinados con crontab, un reproductor de sonido y un archivo de audio al inicio de cada hora hicieran un toque horario parecido al de las radioemisoras AM.

La idea es que no se interrumpa la música ni lo que se oye sino que se "pise" el sonido de los beeps con lo que corre. Esto lo he logrado gracias a los drivers ALSA para mi placa de sonido, mi placa de sonido y otras cosas que desconozco que permiten que dos programas salgan al mismo tiempo (mixer por hardware debería ser).

Lo primero que se me ocurrió hacer fue el sonido de Beep, después de instalar audacity y probar varias cosas noté que lo mejor era aprender a usar bien el programa y luego grabar de un buzzer que tengo guardado por ahí. Lo que quedó fueron tres toques: uno por canal derecho el otro por el izquierdo y al final el más largo por los dos canales, de paso el archivo me sirve para probar las conexiones de sonido. Naturalmente lo exporté a Ogg Vorbis.

Pensé en un script que verificara si el usuario dueño del proceso estuviera logueado, que leyera un archivo de configuración que evitase la ejecucióon en determinadas ocasiones y que en sí mismo tuviera la información del archivo de sonido y el programa para escucharlo. Luego se me ocurrió que el programa y el archivo podrían ser enviados como argumentos. Y luego le agregué como escribir el archivo de configuración.

Agregué las lineas correspondientes a crontab que ejecutasen el escript a los 00 minutos de cada hora. Y queda una cosa más o menos:

00 * * * * nice -n10 sh /home/MAbeeTT/myFilesystem/my_usr/my_share/my_bin/beep_horario.sh \
/usr/bin/ogg123 /home/MAbeeTT/myFilesystem/my_usr/my_share/beeper/Beeper.ogg \
2>/dev/null 1>/dev/null

TOdo en una linea, claro. Como se puede apreciar el script se ejecuta amablemente con un valor nice 10, llama a ogg123 que leerá el archivo Beeper.ogg. Esa aparentemente extraña organización del directorio myFilesystem es una forma personal de evitar ensuciar /usr/local con programas y scripts que solo correrá mi usuario.

En definitiva la ejecución del sript sería:

sh beep_horario.sh programa archivo [Valor_permiso_permiso_escritura]
donde Valor_permiso_permiso_escritura podría ser un 1 o cualuier otra cosa para escribir el archivo de configuración ~/.beep_horario y habilitar o deshabilitar la emisión del sonido.

Pero luego se me ocurríó que sería más interesante hacer un script que agregase las sentencias por sí solo y lo agregué, al mismo se le entrega:

sh instalar_cron.sh programa archivo_audio archivo_temporal valor_nice

Donde programa podría ser ogg123, archivo_audio algún archivo de sonido (poque tal vez no les guste mi Beeper.ogg), archivo_temporal un archivo temporal para que no se pierda la informacion de crontab y valor_nice deber ser el valor nice del proceso, está forzado a ser mayor 4.

Todo esto está disponible en el archivo de descarga

Después de algnos días me econtré en Debian con algunos paquetes parecidos:

  • saytime: speaks the current time through your sound card. Say the current time through your sound card. Requires you have a sound output device available.
  • grandfatherclock: a clock that tolls time acoustically grandfatherclock plays audio files to report the time. The default configuration emulates a grandfather clock with Westminster chimes. Cuckoo clock and Close Encounters of the Third Kind files are included as well...

No hay comentarios.: