martes, enero 23, 2007

¿Cómo calcular la frecuencia de una nota musical y hacer música con Matlab / Gnu-Octave?

Bueno como más abajo dice como hacer un sonido, ahora podemos hacer música, pues la música no es más que un conjunto ordenado de sonidos. Veamos como ordenarlos...

Si disponemos de un lenguaje de programación, que pueda actuar sobre algún dispositivo de sonido, o de cualquier cosa que pueda vibrar o producir sonidos a una frecuencia audible, sólo falta saber a que nota musical corresponde cierta frecuencia en la variación de presión del aire.

Los sonidos que se usan son los que corresponden a las notas musicales. A cada nota musical le corresponde una frecuencia. (Ver Características del Sonido)

Introducción al Tema

(Si quieres ver la fórmula para el cálculo sáltate esta parte)


Muy grosso modo la música posee, entre otras características importantes:
  • Altura, las distintas notas que se representan en los espacios y líneas en el pentagrama

  • Duración que se representa con las figuras, redonda, blanca, negra, corchea , etc.

  • Timbre el tipo de sonido si es de un piano, un motor sonando o de una soprano cantando
Para hacer música, del tipo occidental, (Otras culturas ocupan distintas escalas) disponemos de un número discreto de sonidos limitados por el rango audible de un ser humano, por las frecuencias 20[Hz] como cota inferior y por arriba de 20.000[Hz], lo que varía según la persona. Pues para algunas personas da lo mismo escuchar Reguetón por los altavoces de un teléfono móvil o escuchar una grabación del deutsche grammophon en formato alta fidelidad, y para otras no da lo mismo, pero eso es para otro tema.

Los sonidos usados por los músicos, las notas musicales, do re mi fa sol la si y sus respectivos bemoles y sostenidos, tienen frecuencias conocidas que se pueden calcular, y se pueden hacer en algún lenguaje de programación -como C, C++, Java, Matlab, Pascal, Basic, etc - para que suenen. La historia de las distintas escalas utilizadas -tipos de frecuencias y sus cálculos para las notas- es un poco larga y tiene que ver con criterios matemáticos (Véase acá), es muy interesante.


Brevemente, la historia empieza con Pitágoras, que inventó la escala que lleva su nombre, pero la parte que ahora interesa ver habla sobre el periodo barroco y Johann Sebastian Bach. Cuando se usaba la escala Pitagórica y uno quería cambiar de tono las canciones (frecuentemente pasa cuando a un cantante no le alcanza el registro), se producía una no correspondencia, es decir, no sonaba correctamente ( sonaba mal o en palabras simples, sonaba feo).

Y ahí es donde aparece la escala cromática, que el famoso J.S. Bach popularizó con su obra "El clave bien temperado" o "Das wohltemperierte Klavier" , el nombre lo dice, el instrumento clave estaba bien temperado, es decir, afinado con la escala cromática. ¿Cómo se populariza un estilo de afinación? Componiendo un preludio y una fuga en todos los tonos posibles, es decir un preludio y fuga en Do mayor y menor, en Do sostenido mayor y menor en Re mayor ... y así. Hasta hace poco había leído que Bach había inventado esta afinación, lo que no es cierto, pero esto no quita mérito a semejante obra.

"El clave bien temperado" se puede ver y escuchar en esta página, ahí explican hasta las partes. Es bastante interesante verlo y sobretodo escucharlo.

¿Como se construye la escala cromática?
La respuesta es "La distancia entre semitonos debe ser la misma". Eso desde el punto de vista musical. Porque esas palabras traducidas a la práctica son así :

Para armar la escala temperada necesitamos una frecuencia de una nota conocida, llamada de referencia, en nuestro caso y por norma ISO-16 el LA de la octava central del piano tiene 440 [Hz]. (Para afinar los músicos usan los diapasones). En tiempos de Bach cada cual elegía su frecuencia de referencia, lo que no causaba problemas si se toca solo un instrumento.

¿Cual es la relación entre frecuencias-notas en la escala cromática?

Fórmula para calcular la frecuencia de una nota.

Dada una frecuencia conocida, la que llamaremos fRef, la nota distante a i semitonos sobre la frecuencia de referencia fRef tendrá la frecuencia:

Fórmula para determinar la frecuencia de una nota a partir de una frecuencia conocida

La norma ISO 16:1975 dice que la frecuencia de referencia para el La de la octava central del piano es:

Frecuencia de Referencia para el La de la octava central del piano

La norma agrega también que debe ser generado con una precisión de 0.5 [Hz].

Entonces, siguiendo la norma, la frecuencia del i-ésimo semitono a partir del La de la octava central del piano es:

Fórmula para de terminar la frecuencia de una nota a partir del La 440 [Hz]

Ejemplo

Calculemos la frecuencia del Do que sigue del La-440, el de la octava a la derecha de la octava central:
número de semitonos del Do al La
  • Veamos a que semitono corresponde. Para ello vemos en la figura y contamos:

    • 0 La

    • 1 La#

    • 2 Si

    • 3 Do

    El Do corresponde al semitono 3 a partir del La.

  • Reemplazamos en la fórmula
    La frecuencia del do es:

    • Frecuencia del Do

Hacemos música en Matlab

Como se tienen las notas, basta con darles duración para crear música, usando como guía la parte vista más abajo, Como hacer sonido, escribimos la siguiente sintaxis, creando primero con la forma vista arriba, las notas musicales, y luego creando sonidos.

%==Frecuencia de Muestreo==
fm=8120;

% ==Elaboracion de las notas musicales==
r=2^(1/12);

% ==frecuencia de referencia LA==
fr=440;

% Tomamos la frecuencia del do para definir las octavas de mejor manera
fr=r^-9*fr;
c=r^0*fr*[1/4 1/2 1 2 4];
cs=r^1*fr*[1/4 1/2 1 2 4];
d=r^2*fr*[1/4 1/2 1 2 4];
ds=r^3*fr*[1/4 1/2 1 2 4];
e=r^4*fr*[1/4 1/2 1 2 4];
f=r^5*fr*[1/4 1/2 1 2 4];
fs=r^6*fr*[1/4 1/2 1 2 4];
g=r^7*fr*[1/4 1/2 1 2 4];
gs=r^8*fr*[1/4 1/2 1 2 4];
a=r^9*fr*[1/4 1/2 1 2 4];
as=r^10*fr*[1/4 1/2 1 2 4];
b=r^11*fr*[1/4 1/2 1 2 4];

%El Silencio, su frecuencia es cero
s=0;

%==Parte para Duracion==
% Definimos la duracion en segundos de la negra.
% tomada como 1 tiempo
n=.5;

%Hacemos un vector N = [ nota , duracion ]
NOTAS=[g(3),e(3),s,e(3),f(3),g(3),e(4),e(4),c(4)];
DURACION=[n/2,n/2,3*n/2,n/2,n/2,n/2,n,n,2*n];
N=[NOTAS',DURACION'];
y=[];

%==Armamos la señal==
for i=1:length(N)
fr=N(i,1);
t=N(i,2);
x=(0:(1/fm):t);
y=[y sin(fr*2*pi.*x)];
end

% Hacemos el sonido
% en este comando
% esta toda la magia

sound(y)


Puse en los vectores NOTAS y DURACION la canción de la película "The Bridge on the River Kwai" , la marcha del coronel Bogey.
El método para ingresar notas se puede mejorar y también se pueden añadir armónicos a la onda. Por ejemplo to hice un método para que introducir 3 instrumentos, percusión a través de notas parecidas al celular NOKIA
El programa está acá

Francisco Roco

Características del Sonido

Un sonido tiene características que se notan en la forma de onda.
Estas son:


  • Altura

  • Intensidad

  • Timbre


  • La Altura del Sonido

    Al hablar de altura se hace referencia a la nota musical, en otras palabras, que tan agudo o grave es el sonido. Mientras más grave es el sonido(Como el de un Contrabajo o un cantante bajo), menor será la frecuencia de mi onda y mayor su longitud de onda. Por el contrario si el sonido es agudo (Como un flautín o una soprano), la frecuencia de la onda será mayor y menor su longitud de onda.

    Si numeramos las teclas del piano de izquierda a derecha, es decir, de grave a agudo (Supongamos un piano de 96 teclas, [tienen al rededor de 88 algunos ]), y a cada tecla numerada hacemos corresponder una nota y por ende a una frecuencia, lo que veriamos es eso:



    Intensidad

    La intensidad del sonido hace referencia a lo que en los equipos de música se le llama "volume", es la cantidad potencia que tiene el sonido, por eso que los parlantes traen calcomanías que dicen 4000[W], por ejemplo.
    En la onda la intensidad se ve como la amplitud de la onda, más fuerte suena, más intenso , más amplitud tiene el sonido, como un motor de avión jet al despegar. Por el contrario más despacio, menor su amplitud, como un susurro.
    La unidad de amplitud frecuentemente usada es el Decibelio [dB].

    El Timbre

    El timbre de un sonido dice relación con la fuente que produce el sonido que escuchamos. Me explico Puedo tener dos situaciones un cantante haciendo un La, y un pianista haciendo un la. En ambos casos la altura es la misma pues hacen la misma nota, la misma frecuencia de 440[Hz]. Imaginemos que la amplitud es la misma, así tienen el mismo volume, o intensidad. Pero aún así podemos diferenciar el sonido del piano con el del cantante, por la característica llamada timbre.

    En la onda esto corresponde a la cantidad de armónicos que tiene la onda.
    Los armónicos de una frecuencia X, son ondas de amplitud más pequeña que se suman a la frecuencia X , que se llama frecuencia principal.

    Por ejemplo, abajo vemos la frecuencia principal en color negro, su frecuencia armónica tiene una amplitud de 1/6 y una frecuencia tres veces mayor que la principal, la suma de estas dos onditas es la onda azul.



    En el caso del sonido es un poco mas complicado, pues los armónicos son mucho más que dos , como en el caso anterior.

    Los sintetizadores , o los teclados electrónicos , crean electrónicamente con matlab distintos armónicos para crear sonidos como trompetas, pianos , voces etc. lo difícil es ver que armónicos agregar.


    A continuación pongo ejemplos de algunos "LA-440[Hz]" que he grabado y he graficado.
    Nótese los armónicos y que la onda tiene ciclos, no es difícil encontrarlos:


    La por Roco
    Nótese la onda graficada...




    La por un Diapasón (Este idealmente no tiene armónicos)




    La por un piano


    El programa para Matlab con los archivos de sonido de distintos "la" esta Aquí.

    Chao

    Francisco Roco