Publicaciones

Cómo generar música para un microcontrolador


 

En esta entrada os explicaré como generar música con un microcontrolador de microchip.

Se trataré de que se entienda mejor la idea y con un código más claro.
Si queremos generar música solo debemos generar ciertas frecuencias y se generara los sonidos para nuestros oidos.




Pero...¿Qué es un sonido?
Un sonido se trata de una onda de presión generada por un cuerpo en vibración que se propaga por un fluido.Tres características básicas del sonido son:
-La intensidad (Lo "fuerte" que se escucha el sonido)
-El tono (La frecuencia del sonido: a mayor frecuencia mas agudo y a menor frecuencia  mas grave)
-La duración (Cuanto dura el sonido)


Para generar un sonido con un PIC obviamente necesitaremos el PIC y un componente que reproduzca esas ondas audibles, el altavoz.
Si ponemos en alto "X" tiempo un pin del PIC y luego en bajo ese tiempo y repetimos esa secuencia, tendremos una onda. (Una onda cuadrada que se puede asemejar a una onda senoidal)


Asi que:
-El tiempo en alto(o bajo) será medio periodo de esta y con ello podremos calcular la frecuencia, es decir el tono.
-La intensidad del sonido será el voltaje que le suministremos al altavoz.
-Y la duración será cuanto tiempo repetiremos la secuencia de alto y bajo.

Ahora bien para generar música no basta con hacer sonidos con las frecuencias que nos de la gana ya que lo mas seguro es que no suene bien, si no que los sonidos deben de tener el tono adecuado, es decir, aquí es donde actúan las notas musicales. 




 Decir que dividimos el espectro audible (de 20 Hz a 20 KHz) en octavas, y las octavas en notas (Si me equivoco en algo que alguien me corrija que no soy experto en música :P).  Tenemos 7 notas musicales  (Do, Re Mi, Fa, Sol, La, Si) , cada una de ellas tendrá una frecuencia determinada. La octava inferior  de una nota tendrán la mitad de frecuencia y la octava superior tendrá el doble de frecuencia.
Por ejemplo la nota "La"  de la tercera octava tiene una frecuencia de 440 Hz, la cuarta octava tiene 880 Hz y la segunda octava 220 Hz. (A partir de esta nota se calculan las demás con unos cálculos)
(Para quién le interese saber más que lea este artículo vease en https://es.wikipedia.org/wiki/Nota_%28sonido%29  y/o  http://latecladeescape.com/h/2015/08/frecuencia-de-las-notas-musicales )

A nosotros solo nos interesarán las primeras 6 octavas ya que por encima de la sexta no se escucha bien con el PIC.
Estas son las frecuencias de cada nota (en Hz):



0
1
2
3
4
5
6
DO
32,70
65,40
130,81
261,62
523,25
1046,50
2093,00
DO#
34,64
69,29
138,59
277,18
554,36
1108,73
2217,46
RE
36,70
73,41
146,83
293,66
587,32
1174,65
2349,31
RE#
38,89
77,78
155,56
311,12
622,25
1244,50
2489,01
MI
41,20
82,40
164,81
329,62
659,25
1318,51
2637,02
FA
43,65
87,30
174,61
349,22
698,45
1396,91
2793,82
FA#
46,24
92,49
184,99
369,99
739,98
1479,97
2959,95
SOL
48,99
97,99
195,99
391,99
783,99
1567,98
3135,96
SOL#
51,91
103,82
207,65
415,30
830,60
1661,21
3322,43
LA
55,00
110,00
220,00
440,00
880,00
1760,00
3520,00
LA#
58,27
116,54
233,08
466,16
932,32
1864,65
3729,31
SI
61,73
123,47
246,94
493,88
987,76
1975,53
3951,06


Para no cargar el PIC con cálculos matemáticos pasamos la frecuencia ya a su equivalencia a T/2 que debe estar en alto o en bajo el PIC (en microsegundos) :



0
1
2
3
4
5
6
DO
15289,02
7644,51
3822,25
1911,12
955,56
477,78
238,89
DO#
14430,91
7215,45
3607,72
1803,86
901,93
450,96
225,48
RE
13620,97
6810,48
3405,24
1702,62
851,31
425,65
212,82
RE#
12856,48
6428,24
3214,12
1607,06
803,53
401,76
200,88
MI
12134,90
6067,45
3033,72
1516,86
758,43
379,21
189,60
FA
11453,82
5726,91
2863,45
1431,72
715,86
357,93
178,96
FA#
10810,97
5405,48
2702,74
1351,37
675,68
337,84
168,92
SOL
10204,20
5102,10
2551,05
1275,52
637,76
318,88
159,44
SOL#
9631,48
4815,74
2407,87
1203,93
601,96
300,98
150,49
LA
9090,90
4545,45
2272,72
1136,36
568,18
284,09
142,04
LA#
8580,67
4290,33
2145,16
1072,58
536,29
268,14
134,07
SI
8099,07
4049,53
2024,76
1012,38
506,19
253,09
126,54


Si habéis entendido lo anterior no será nada difícil entender el código para reproducir música con el PIC.



Armando un Ejemplo en CSS
/*INICIO
WWW.NETANDINO.COM
Autor: Teodoro Infantes Yupan
Microcontroladores II
Generando Tonos con Microcontrolador
Más detalle en nuestro canal e Youtube
También puede ver en Nuestro Blog.
http://netandino.blogspot.com
*/
#include < 16F88.h >
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4M)
#include "tonos.h"// libreria tones en misma carpeta
#include "notas.h"

void linea1(){
tocar(NOTA_LA[1],negra);
tocar(NOTA_SOLS[1],negra);
tocar(NOTA_LA[1],negra);
tocar(NOTA_SI[1],negra);
tocar(NOTA_DO[2],negra);
tocar(NOTA_SI[1],negra);
tocar(NOTA_DO[2],negra);
tocar(NOTA_RE[2],negra);
tocar(NOTA_MI[2],redondal);
tocar(NOTA_SOL[2],blanca);
}
void linea2(){
  //Segunda línea
tocar(NOTA_MI[2],redondal);
tocar(NOTA_LA[2],negra);
tocar(NOTA_SOL[2],negra);
tocar(NOTA_MI[2],redondap);
tocar(NOTA_RE[2],negra);
tocar(NOTA_DO[2],negra);
   //Solo hasta fin de BIZ
}

void linea3(){
tocar(NOTA_LA[1],redondal);
tocar(NOTA_DO[2],blanca);
tocar(NOTA_LA[1],redondal);
tocar(NOTA_LA[1],negras);
tocar(NOTA_MI[2],negra);
tocar(NOTA_LA[2],blancap);
tocar(NOTA_SOLS[2],negra);
tocar(NOTA_LA[2],negra);
tocar(NOTA_SOL[2],negra);
tocar(NOTA_LA[2],negra);
tocar(NOTA_SOL[2],negra);
tocar(NOTA_LA[2],negra);
tocar(NOTA_SOL[2],negra);
tocar(NOTA_LA[2],redondal);
}
void main(void)  {
 while(TRUE){
 //Primera línea
  tocar(NOTA_MI[1],negra);
 linea1();
 linea2();
 tocar(NOTA_LA[1],redondal);  
 tocar(NOTA_LA[1],negras);
 tocar(NOTA_MI[1],negra);
 //BIZ regresas hasta LA
 linea1();
 linea2();
 // FIN de BIZ
 linea3();
 tocar(NOTA_LA[1],redondal);
delay_ms(2000);
       
}
}
FIN */


 "notas.h"
//INICIO
   //Notas e¿ndor Pasa
 //  int semifusa=31;
 // int fusa=62;
 //  int semicorchea=125;
 //  int corchea=250;
   long negra=500;
   long blanca=1000;
   long redonda=2000;
    //Puntillos
   long negrap=750;
   long blancap=1500;
   long redondap=3000; 
   //Ligada
   long negral=750;
   long blancal=1500;
    long redondal=3000;
   //Silencios
   long negras= delay_ms(500);
   long blancas= delay_ms(1000);
   long redondas= delay_ms(2000);


//FIN

"tonos.h" Solo lo más importante

//INICIO

//            NOTE                 FREQUENCY
//Octave0 Octave1 Octave2 Octave3
//                       Octave4  Octave5  Octave6  Octave7
const long NOTA_DO[4]  ={262,     523,    1047,    2093}; //DO
const long NOTA_DOS[4] ={277,     554,    1109,    2217}; //DO#
const long NOTA_RE[4]  ={294,     587,    1175,    2349}; //RE
const long NOTA_RES[4] ={311,     622,    1245,    2489}; //RE#
const long NOTA_MI[4]  ={330,     659,    1329,    2637}; //MI
const long NOTA_FA[4]  ={349,     698,    1397,    2794}; //FA
const long NOTA_FAS[4] ={370,     740,    1480,    2960}; //FA#
const long NOTA_SOL[4]  ={392,     784,    1568,    3136}; //SOL
const long NOTA_SOLS[4] ={415,     831,    1661,    3322}; //SOL#
const long NOTA_LA[4]  ={440,     880,    1760,    3520}; //LA
const long NOTA_LAS[4] ={466,     923,    1865,    3729}; //LA#
const long NOTA_SI[4]  ={494,     988,    1976,    3951}; //SI
 

 .....

//FIN

Haremos el trabaja con el tema del condor pasa.

Mi La Sol# La Si do° Si do° re° mi°
sol° mi° la° sol° mi° mi° re° do° re° do° La
Mi La Sol# La Si do° Si do° re° mi°
sol° mi° la° sol° mi° mi° re° do° re° do° La
Mi La Sol# La Sol# La Sol# La Si do° do°
La Sol La Sol Mi
Mi La Sol# La Sol# La Sol# La Si do° do°
La Sol La Sol Mi
mi° re° do° re° do° La


O tomaremos uno de estas notas Variadas delcondor pasa.

INTRODUCCIÓN
LA….SOL LA SOL MI  DO  MI….
MI MI MI FA  MI  DO SI DO LA…

LENTO(YARAVÍ)
MI LA SOL# LA SI DO SI DO  MI…
SOL…MI…LA SOL MI. MI  DO LA

DO  MI LA…SOL# LA SOL# LA SOL# LA
DO LA SOL…LA SOL MI.
DO  MI LA…SOL# LA SOL# LA SOL# LA…
DO LA SOL…LA SOL MI..MI RE DO LA
DO…LA…DOLA RE MI.

(PASACALLE)
LA LA LA LA LA LA LA
MI LA SOL# LA SI DO SI DO RE MI
SOL MI….RE DO LA
MI LA….SOL# LA SOL# LA

MI LA SOL# LA SI DO SI DO RE MI
SOL MI….RE DO LA
MI LA….SOL# LA SOL# LA

DO LA SOL….LA SOL MI
MI LA SOL# LA SI DO SI DO RE MI
SOL MI….RE DO LA

MI LA SOL# LA SI DO SI DO RE MI
SOL MI..MI RE MI RE DO LA
DO LA DO LA DO RE MI LA.

(HUAYNO)
MI LA SOL# LA MI RE DO LA SOL LA MI
SOL LA SI RE MI SOL MI

MI LA SOL# LA MI RE DO LA SOL LA MI
SOL LA DO RE MI RE DO SI LA
MI SOL MI SOL RE SOL MI
MI SOL MI SOL RE SOL MI

MI LA SOL# LA MI RE DO LA SOL LA MI
SOL LA DO RE MI RE DO SI LA
DO DO MI RE DO LA DO LA SOL
DO DO MI SOL MI RE DO

LA LA DO LA SOL MI MI RE MI SOL
LA LA DO LA SOL MI MI RE MI SOL
DO DO RE MI RE DO LA

PARTE 
MI LA SOL# LA SI DO SI DO RE MI
LA SOL# LA MI RE DO SI LA SI
DO RE MI RE DO SI LA.

  VideoTutorial.



BAJAR SIMULACIÓN
Clave: www.netandino.com
 
Más detalles aquí http://netandino.blogspot.pe/2016/06/repaso-general-sobre-lenguaje-musical.html
 
Share this Article on :
 
d Copyright Manual Net Andino 2006 | Design by Net Andino | Published by Editor de Templates | Powered by Net Andino .