Вы находитесь на странице: 1из 8

CMO HACER MSICA CON MATLAB

Imagnese usted la versin de famosas canciones interpretadas por un Nintendo. Eso es lo que he intentado
hacer con MATLAB. El resultado a continuacin:
Hay maneras mas eficientes de hacer msica con otros programas, como Noteworthy Composer o el Guitar
Pro, Finale o Sibelius. O simplemente tocar msica con instrumento. Lo novedoso es que aqu empiezas de
cero y puedes crear tus propios tipos de sonidos.
H

Para explicar mejor el programa veamos las partes. El programa lee musica escrita en formato parecido al de
los celulares nokia, arma las seales de sonido, las reproduce, y las guarda. Para ello se ocupan 3 funciones.
msica: Programa principal que una vez que tiene las seales las suma las reproduce y las guarda como wav.
notas: Funcin que con las notas ingresadas en formato de escritura parecido al del celular nokia, crea seales
en un vector con una frecuencia de muestreo dada
perc: Crea la percusin variando el tiempo de sonido de un sonido parecido a una interferencia. Los detalles y
observaciones importantes se discuten a continuacin:
1) Ingreso de notas, lectura de notas, creacin de la seal
Se introducen como en los celulares nokia. de la forma:
[Duracin][Nota en clave americana][Octava del piano]

La duracin de la redonda ser 1, y las figuras siguientes sern nombradas por el inverso del mltiplo
que le corresponden. redonda 1, blanca 2, negra 3, corchea 8, semicorchea 16.
La nota en clave americana A hasta la G, si es sostenido ser acompaada por una s, los bemoles se
hacen con los sostenidos.
Las octavas son 5, la central del piano es la 3. Ejemplo: La 440, corchea de la octava central del piano
.................4a3

Se hizo una misma funcin que leyera la nota y guardara en una matriz, la duracin y la nota
as [duracin, notas], si tenemos n notas con sus respectivas duraciones ser una matriz de n x 2 filas.
La creacin de la seal se hace con la matriz anterior, se lee la frecuencia y la nota, y luego se arma una seal
con la frecuencia y duracin dada.
Para armar el sonido se hace la sinusoide y se le suman los armnicos que queremos que tengan. Ejemplo:
sonido de un nintendo, dado por:
sin(fr*2*pi.*x)+1/4*sin(3*fr*2*pi.*x)+1/6*sin(5*fr*2*pi.*x)+1/8*sin(7*fr*2*pi.*x)
Para armar el trozo de sonido para el par frecuencia/duracin se deja un espacio libre con silencio, para que no
suenen pegadas:
for i=1:A
fr=N1(i,1);
t=N1(i,2);
x=(0:(1/fm):t*8/10);
y1=[y1 sin(fr*2*pi.*x)+1/4*sin(3*fr*2*pi.*x)+1/6*sin(5*fr*2*pi.*x)+1/8*sin(7*fr*2*pi.*x)
zeros(size((0:(1/fm):t*2/10)))];
end
Las notas/frecuencias las armamos asi:
Facilitador: Luis Cabezas Tito

%==FRECUENCIAS==
r=2^(1/12);
fr=440;%frecuencia del LA
fr=r^-9*fr;%el Do
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];
s=0;
i=1;
ii=1;
LA PERCUSION
Se hace de forma similar a la anterior pero solo se ingresa la duracin. 1 2 5 8 16. La seal que se crea es algo
parecido ala interferencia, que suena como ch chc chhhhhchchchchch (asi). Es absolutamente igual, lo que
vara es como armamos la seal.
y1=[y1,o*sin(100000*2*pi.*x.*100000000000000.*sin(x)) zeros(size((0:(1/fm):t*6/10)))];
Ese seno es la interferencia que suena cchhchchchchhchcchchc.
LOS INSTRUMENTOS
Ahora que se tienen las seales hay que hacerlas sonar. Como ya creamos las seales de sonido, en el
programa hay 3 de meloda ms la percusin, lo que hay que hacer, es sumarlas.
y=1/4*(y1+y2+y3+y4);
y reproducirlas

sound(y,fm)
Como tenemos almacenada la seal en el vector y y tenemos su frecuencia de muestreo, con el comando
wavwrite(y,fm,8,Nom) guardamos en un archivo formato wav la cancin. Al inicio de la sintaxis estn los cdigos
de algunas canciones. Estn los 3 instrumentos ms la percusin.
Clculo de Frecuencias para una Nota y Msica en MATLAB
Ahora podemos hacer msica, pues la msica no es ms que un conjunto ordenado de sonidos. Los sonidos
que se usan son los que corresponden a las notas musicales. A cada nota musical le corresponde una
frecuenciaMuy a grosso modo la msica posee, entre otras caractersticas importantes:

altura -las distintas notas- que se representan en los espacios y lneas;

Facilitador: Luis Cabezas Tito

duracin que se representa con las figuras, redonda, blanca, negra, corchea, etc.

Para hacer msica, del tipo occidental, (Otras culturas ocupan distintas escalas) disponemos de un nmero
discreto de sonidos limitados por el rango audible de un ser humano, por las frecuencias 20[Hz] como contra
inferior y por arriba de 20.000[Hz].
Los sonidos usados por los msicos, 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 algn lenguaje de
programacin -como MATLAB- para que suenen. La historia de las distintas escalas utilizadas -tipos de
frecuencias y sus clculos para las notas- es un poco larga y tiene que ver con criterios matemticos, es muy
interesante.
Clculo de Frecuencias Para Una Nota
Cada semitono [i-simo semitono] , medido desde la frecuencia de referencia Fref, ser de la siguiente forma
[i-simo semitono] = Fref2i/12
con la norma ISO-16 , nos queda wl i-simo tono que es medido respecto de la frecuencia de referencia La-440
[i-simo semitono] = 4402i/12
Ejemplo: Calculamos el Do que sigue del La Vemos que nmero de semitono es

0 LA
1 LA#
2 SI
3 DO
Para el Do , i=3.
As la frecuencia del Do ser:
[frecuencia del Do] = 44023/12 = 523.2511 [Hz]
Despus de hacer esta contribucin Bach, para promover el uso de esta escala, cre una famosa obra llamada
"El clave bien temperado", donde existen partes para todas las escalas, mayores y menores.
Ahora s, hacemos msica
Como se tienen las notas, basta con darles duracin para crear msica, usando como gua la parte vista ms
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;
%aunque tomemos la del DO central para distribuir mejor las ctavas
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];
Facilitador: Luis Cabezas Tito

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 seal==
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)

Caractersticas del Sonido


Un sonido tiene caractersticas que se notan en la forma de onda. Estas son:
La Altura del Sonido
Al hablar de altura se hace referencia a la nota musical que hago, en otras palabras que tan agudo o grave es el
sonido. Mientras ms grave es el sonido (Como el de un Contrabajo o un cantante bajo), menor ser la
frecuencia de mi onda, por el contrario si el sonido es agudo (Como un flautn o una soprano), la frecuencia de
la onda ser mayor.

Si numeramos las teclas del piano de izquierda a derecha, es decir, de grave a menos grave (Supongamos un
piano de 96 teclas, [tienen al rededor de 88 algunos]), y a cada tecla corresponde a una nota y por ende a una
frecuencia.
Intensidad
La intensidad del sonido hace referencia a lo que en los equipos de msica se le llama "volumen", es la
cantidad potencia que tiene el sonido, por eso que los parlantes traen calcomanas que dicen 4000[W], por
ejemplo.
En la onda la intensidad se ve como la amplitud de la onda, ms fuerte suena, ms intenso, ms amplitud tiene
el sonido, por el contrario ms despacio, menor su amplitud. La unidad de amplitud frecuentemente usada es el
Decibelio [dB].

Facilitador: Luis Cabezas Tito

El Timbre
El timbre de un sonido dice relacin con la fuente que produce el sonido que escuchamos. Se puede 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 volumen, o intensidad. Pero an as podemos diferenciar el sonido del piano con el del cantante, por
la caracterstica llamada timbre.
En la onda esto corresponde a la cantidad de armnicos que tiene la onda. Los armnicos de una frecuencia X,
son ondas de amplitud ms pequea que se suman a la frecuencia X, que se llama frecuencia principal.
Por ejemplo, abajo vemos la frecuencia principal en color negro, su frecuencia armnica 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 armnicos son mucho ms que dos, como en el
caso anterior.
Los sintetizadores, o los teclados electrnicos crean electrnicamente con MATLAB distintos armnicos para
crear sonidos como trompetas, pianos, voces etc. lo difcil es ver que armnicos agregar.
A continuacin, se dan ejemplos de algunos "LA-440[Hz]" que se ha grabado y graficado. Ntese los armnicos
y que la onda tiene ciclos, no es difcil encontrarlos:

Facilitador: Luis Cabezas Tito

Nota La

La por un Diapasn (Este idealmente no tiene armnicos)

La por un piano

El Sonido y MATLAB)
Cmo se hace sonido con MATLAB? El computador funciona de forma discreta, no en forma continua, es
decir, trabaja con nmeros, que guardamos en vectores. Un ejemplo de vector es "[1,2,3,4,5,6,10]".
Facilitador: Luis Cabezas Tito

Para hacer sonidos necesitamos una seal que en este caso es un vector con muchos nmeros, de repente
millones. Este vector tiene que contener el sonido.
Un sonido es una vibracin, una onda, que la vemos de forma sinusoidal o de forma parecida. Lo que se guarda
en el vector son valores de la seal. Una analoga para entender esto se visualiza as: Una cuerda que se
mueve, vibrando (Fig. 1) y le sacamos una foto en un instante. Cuando la cuerda esta quieta, no vibrando,
decimos que est en el valor cero (Fig. 2). Mientras empieza a moverse de izquierda a derecha va adquiriendo
valores, los que medimos al medio de la cuerda desde el punto donde esta quieta -cuando esta en cero- (Fig.3),
su elongacin mxima ser 1 a la derecha, y -1 a la izquierda (Fig.5 y 6).

Con cada foto que se saque a la onda que se represent como cuerda, se tiene un valor que se guardar en el
vector. Pero como el movimiento es una vibracin, se tiene que guardar estos valores cada cierto intervalo de
tiempo, algo as como sacar fotos cada 1 segundo a la onda, y es ah donde aparece el concepto de
Frecuencia de Muestro.
La frecuencia de Muestreo fm. es la cantidad de muestras (fotos en la analoga), que se toman en 1 segundo. Si
se toma la grafica de los valores que va tomando la onda (cuerda), en el eje y se pone los valores en funcin
del tiempo, y en el eje x el tiempo la frecuencia de muestreo en la figura es 1[Hz], pues se muestrea (se toma
una foto), una vez por segundo.
Lgicamente, cuando se tiene una mayor frecuencia de muestreo, mejor ser la calidad del sonido, porque se
est representando con ms puntos la funcin.
Por ejemplo, el telfono funciona a 8000 [Hz], y se escucha ms o menos; Los CDs tienen una frecuencia de
muestreo de 44.100[Hz] la radio de 22100[Hz].
Se hace lo mencionado arriba en MATLAB con el comando SOUND que reproduce un vector con su frecuencia
de muestreo
%Frecuencia de muestreo
fm=44000;
%frecuencia sonido, nota musical La
fr=440;
Facilitador: Luis Cabezas Tito

%Duracion en segundos
duracion=1;
t=0:1/fm:duracion;
% Seal senoidal
y=sin(fr*2*pi*t);
%La hacemos sonar
sound(y,fm)
%La guardamos como wav
wavwrite(.5*y,fm,'la440.wav')
%Graficamos un pedacito para ver la forma
t=t(round(68.5*length(t)/100):round(70*length(t)/100));
y=y(round(68.5*length(y)/100):round(70*length(y)/100));
plot(t,y)

----- oOo -----

Facilitador: Luis Cabezas Tito

Вам также может понравиться