Hola, luego de jugar con C Sharp decidí aprender más a fondo BASH y que mejor que creando un bucle con diversos beeps para el altavoz del sistema (el beep).
Anteriormente escribí aquí Bach in Bash sobre como componer música para ejecutar en el terminal en GNU/Linux, dicho método era “muy limitado”, ahora pondré un ejemplo de como hacer escalas completas en BASH mediante el uso de bucles y el comando beep (debemos instalar ese pequeño programa
)
Primero veamos unos arreglos (arrays) en BASH con las frecuencias de las notas musicales (si queremos usarlas en alguna composicion nuestra, solo haría falta copiar y pegar, estas frecuencias estan expresadas en enteros, no son las frecuencias reales:
UT=( 65 130 261 523 1074 2093 4168 8372 ); UTS=( 69 138 277 554 1108 2217 4434 8869 ); RE=( 73 146 293 587 1174 2349 4698 9397 ); RES=( 77 155 311 622 1244 2489 4978 9956 ); MI=( 82 164 329 659 1318 2637 5274 10548 ); FA=( 87 174 349 698 1396 2793 5587 11175 ); FAS=( 92 184 370 740 1480 2959 5919 11839 ); SOL=( 97 195 391 784 1568 3136 6271 12543 ); SOLS=( 103 207 415 830 1661 3322 6644 13298 ); LA=( 110 220 440 880 1760 3520 7040 14080 ); LAS=( 116 233 466 932 1864 3729 7458 14917 ); SI=( 123 246 493 987 1975 3951 7902 15804 );
Ahora veamos un poco (solo un poco) la sintaxis de BASH, el uso de variables, funciones y envío de parámetros a las funciones en bash.
Uso de variables
Las variables se inicializan (no se declaran, no es necesario especificar el tipo de dato) con palabras en minúscula o mayúscula (de preferencia usar mayúscula), es MUY IMPORTANTE que el nombre de la variable esté seguida por el signo igual ( = ) y seguido del o los datos a contener SIN ESPACIOS, ya que si colocamos espacios el intérprete mostrará error de sintaxis.
La forma CORRECTA de inicializar una variable en bash
ALGO=123;
La forma INCORRECTA de iniciar una variable en bash
ALGO = 123;
Una vez que tengamos iniciada nuestra variable, podemos hacer uso de ésta añadiendo el signo de dolar >> $ delante de su nombre en cualquier parte de nuestro código, pero si queremos “variar” el contenido de la variable en el transcurso del código necesitamos añadir el comando “let” delante del nuevo valor de la variable, esto es muy importante ya que sin “let” la variable seguirá tomando su valor inicial!
Mostrando el valor de ALGO
echo $ALGO;
Modificando el valor de ALGO
let ALGO= $ALGO-123;
Funciones en Bash
Las funciones se declaran con la palabra reservada “function” delante del nombre de la función, NO se colocan paréntesis () ya que las funciones son pequeños “scripts” que pueden recibir parámetros seguidos del nombre:
Ejemplo00: Funcion sin parámetros
function nombreDeMiFuncion { #codigo de la funcion }
Ejemplo01: Funcion con parámetros
function miOtraFuncion { echo $1 }
En el ejemplo01 los parámetros son recibidos en el orden ingresado y son asignadas a las variables con un $ seguido de un número, el número representa el orden de los parámetros, $1 sería el primer parámetro recibido
Beep en Bash
Ahora programaremos un bucle que nos ejecute de manera ascendente las frecuencias aproximadas de las notas musicales, a medida que ejecuta las frecuencias el bucle hace un llamado a la función pitido y esta a la vez llama a beep;
#iniciamos variables
X=0;
FIN=7;
#Cambiemos el valor de LONG para cambiar la duracion de cada nota
LONG=120;
function pitido { beep -f $1 -l $2; }
while [ $X -lt $FIN ]
do
pitido ${UT[$X]} $LONG;
pitido ${RE[$X]} $LONG;
pitido ${MI[$X]} $LONG;
pitido ${FA[$X]} $LONG;
pitido ${SOL[$X]} $LONG;
pitido ${LA[$X]} $LONG;
pitido ${SI[$X]} $LONG;
let X=$X+1;
done
Listo! con ello podremos escuchar en escala ascendente las frecuencias de las notas musicales a través de BEEP. Podemos descargar este archivo aquí >> Escalas Beep Bash
Para ejecutar el archivo primero tenemos que darle permisos de ejecución, debemos tener instalado beep y luego usar el comando “sh” (sin comillas) para llamar al intérprete
