Cómo escribir canciones en lenguaje c
Sabemos que la música es una combinación ordenada de tono y duración del sonido. Lo más importante al diseñar música por microcomputadora es cómo definir el tono y la duración del sonido, y cómo hacer que el altavoz emita notas específicas. La siguiente tabla muestra la relación entre notas y frecuencias. Las tres funciones sound(), nosound() y clock() proporcionadas por el lenguaje C pueden resolver fácilmente los problemas anteriores. La función sound() puede encender el altavoz de la PC a una frecuencia específica hasta que se apaga con la función nosound(); la función clock() solo se usa para controlar el tiempo de sonido y no se ve afectada por la frecuencia principal; del ordenador. El siguiente programa puede hacer que la microcomputadora produzca el sonido de la tecla C 1.
Tabla de relaciones entre notas y frecuencias
Nota c d e f g a b
1 2 3 4 5 6 7
Frecuencia 262 294 330 349 392 440 494
Notas musicales c d e f g a b
1 2 3 4 5 6 7
Frecuencia 523 587 659 698 784 880 988
Notas musicales c d e f g a b
1 2 3 4 5 6 7
Frecuencia 1047 1175 1319 1397 2568 1760 1976
#includelt;stdio.hgt;
#includelt; dos.hgt;
vacío pausa(int);
vacío sonido1(int, int);
vacío principal(vacío)
{
int i, frecuencia, velocidad=5;
int tiempo=4*velocidad
char *qm="iddgwwwQQgfff dddfghhhggg ddgwwwqgfff; \ p>
ddffhjqqqqq wpggjhgddgqq hhqwwqjjjggg\
ddgwwwqqgfff ddffhjqqqqqq";/*definir canción*/
while (*qm !='\0'){ p>
i=1;
switch(*qm){
caso 'k':
tiempo=1*velocidad; ;
p>descanso;
caso 'i':
tiempo=6*velocidad;
descanso;
caso 'o':
tiempo=10*velocidad; i=0
descanso
caso 'p';
pausa(tiempo); i=0;
descanso;
caso 'a':
frecuencia=523; p>
ruptura;
caso 's':
freq=587
ruptura
caso 'd'; :
frecuencia=659
ruptura;
caso 'f':
frecuencia=698;
ruptura;
caso 'g':
frecuencia=784; p> caso 'h':
frecuencia=880;
ruptura;
caso 'j':
frecuencia=988;
ruptura;
caso 'z':
frecuencia=262
ruptura
caso '; X':
frecuencia=294;
ruptura;
caso 'c':
frecuencia=330;
ruptura;
caso 'v':
frecuencia=349
ruptura
caso 'b':
frecuencia=392;
ruptura;
caso 'n':
frecuencia=440; ;
caso 'm':
freq=494;
descanso;
caso 'q':
frecuencia=1047;
ruptura;
caso 'w':
frecuencia=1175
ruptura; >
caso 'e':
frecuencia=1319;
ruptura
caso 'r':
frecuencia= 1397;
ruptura;
caso 't':
frecuencia=2568
ruptura;
caso 'y':
frecuencia=1760
ruptura
caso 'u':
frecuencia=1976; p> p>
romper;
predeterminado:
i=0
romper
}
if(i)
sonido1(frecuencia, tiempo
}
}
vacío sonido1(int frecuencia, int time ) /*freq es frecuencia, tiempo es duración*/
{
union{
long divisor;
unsigned char c [2];
}count;
unsigned char ch;
count.divisor=1193280/freq /* 1193280 es la velocidad del reloj del sistema* /
salida(67, 182);
salida(66, cuenta.c[0]); ]) ;
ch=inp(97);
salida(97, canal|3);
pausa(hora); p> salida(97, ch);
}
pausa vacía(int tiempo)
{
int t1, t2;
p>
union REGS entrada, salida
in.h.ah=0X2c;
int86(0X21, amp; in, amp; out); /* Obtener la hora actual*/
t1=t2=100*out.h.dh out.h.dl; /*out.h.dh es el segundo valor, out.h .dl es el valor de 1/100 de segundo* /
while(t2-t1lt; time)
{
int86(0X21, amp; in, amp ; out);
t2=100*out.h.dh out.h.dl;
if (t2lt; t1)t2 =6000 /* Agregar un minuto*/
} p>
}