.

Veo el siguiente código en el blog de Robert Elder:

cat /dev/urandom | hexdump -v -e '/1 "%u\n"' | awk '{ split("0,2,4,5,7,9,11,12",a,","); for (i = 0; i < 1; i+= 0.0001) printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) }' | xxd -r -p | aplay -c 2 -f S32_LE -r 16000

Introducido en una terminal de un sistema Linux con los programas necesarios, genera una melodía aleatoria. En el primer enlace hay una explicación detallada de lo que hace exactamente, aunque se resumir con cada orden entubada:

  1. cat /dev/urandom

    Vuelca los contenidos de /dev/urandom a stdout.

  2. hexdump -v -e '/1 "%u\n"'

    Convierte bytes binarios en enteros (opción -e '/1 "%u\n"') incluyendo las repeticiones (opción -v).

  3. awk '{ split("0,2,4,5,7,9,11,12",a,","); for (i = 0; i < 1; i+= 0.0001) printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) }'

    Procesa la información con AWK de modo que:

    1. split("0,2,4,5,7,9,11,12",a,",");

      Crea un array a con los número de semitonos relativos a la nota base en una escala mayor. Este array se usa para calcular la frecuencia en hercios de una nota de temperamento igual con esta fórmula: 440 × 2^(número de semitonos / 12) 440Hz representa la frecuencia de un La 440.

    2. for (i = 0; i < 1; i+= 0.0001)

      Un contador para generar los tonos. Variar el incremento de cada iteración altera el tempo y la frecuencia percibida de la melodía.

    3. printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i))

      Imprime números hexadecimales de 4 octetos representando la amplitud de la onda sonora en un momento determinado. La fórmula 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) se puede descomponer en varias partes:

      1. a[$1 % 8] / 12

        A partir del valor aleatorio de la entrada ($1) elige el semitono de la escala y lo divide por doce.

      2. exp(… * log(2))

        AWK no tiene una función para calcular potencias de una base cualquiera pero sí calcula potencias del número e y logaritmos naturales, así que para obtener 2x hay que calcular e(x × ln(2)).

      3. 1382

        Es un valor aproximado de 440 × π.

      4. 100

        Un factor de escala para la amplitud de la onda y, por consiguiente, el volumen.

  4. xxd -r -p

    Convierte los 8 bytes de valores hexadecimales en binario.

  5. aplay -c 2 -f S32_LE -r 16000

    Reproduce el sonido equivalente.

.

Vista en MAKE, la guitarra digital Misa parece un proyecto realmente interesante:

The Misa digital guitar is a MIDI controller. It must be plugged into a MIDI capable sound module. The sound of this instrument is limited only by what you connect to it. […] the Misa digital guitar software is open source, and powered by the Linux operating system. This means programmers have the flexibility to modify how it works, and even change the interface to provide specific functionality.

Misa Digital Guitar Demo []

.

Eso es lo que ofrece este artículo de Royal HeHe2-ness!

Aunque carezco de la habilidad o el criterio para estimar si la información que contiene resulta realmente útil, me parece una lectura interesante. Además, me resultaron simpáticos los gustos del autor y mencionaba hydrogen, un programa que señalé hace una temporada en un post sobre software musical gratuito.

De paso, no viene mal volver a enlazar con Making Music, para los que esteis interesados en la materia.