Usando la consola en cualquier distribución basada en GNU/Linux se puede controlar el parlante, de modo de hacer frecuencias y duraciones a voluntad y poder hacer música. A diferencia del uso de GNU-Octave y Matlab para hacer música, noi se necesita construir la onda, solo se debe controlar la frecuencia y duración.
Tomando como referencia la entrada de notas usada para hacer música en Matlab, en la que se ingresan notas de forma parecida a como se hace en los programas compositores en los celulares Nokia, especificando la duración en el primer caracter, la nota en clave americana, y la octava tomando como octava central la 3ra, se puede hacer una función teniendo como entrada las notas en dicho formato y como salida las frecuencias y las duraciones de esas notas.
La salida de la función -las frecuencias y las duraciones pueden ser ingresadas a otros dispositivos, en el caso del Matlab era a otra función que creaba las ondas, a motores controlados electrónicamente, etcétera.
En este caso nos comunicamos con el parlante enviándole frecuencias y notas:
// La Función que hace los sonidos int suena(int freq,int len){ int fd = open("/dev/console", O_WRONLY); ioctl(fd, KIOCSOUND, (int)(1193180/freq)); //usleep(1000*len); usleep(1000*len); ioctl(fd, KIOCSOUND, 0); close(fd); }
Esta parte puede hacerse de forma distinta instalando gnubeep. Con el que se puede escribir
gnubeep -f 2600 -l 1000000
y sonarán 600 [Hz] por 1 segundo.El código
El código escrito en C++ funcionó en mi PC con Mandriva 2009.1, y probablemente funcione en cualquier distribución GNU/Linux.Puede ser compilado para Windows descomentando las partes indicadas con //win .
Está a disposición de vustra merced en el enlace: musica.cpp.
Algunos ejemplos para ingresarle al programa:
- Badinerie BWV 1067 de J.S. Bach. La transcripción es para la primera voz y la parte del bajo
- Suite para Cello N°1, BWV 1007 J.S. Bach
- Invention 13 (BWV 784) de J.S. Bach
Ejemplos
Usando dos computadores y sincronizando el instante en que empiezan las canciones se probaron los ejemplos anteriores.
Badinerie BWV 1067
Invención 13, BWV 784
Suite para Cello 1007
Comentario
Si quiere desactivar el pitido, escriba en la consola como superusuario:
# modprobe -r pcspkr
Francisco Roco