Red de conocimiento informático - Material del sitio web - Cómo escribir canciones en lenguaje c

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; \

ddffhjqqqqq wpggjhgddgqq hhqwwqjjjggg\

ddgwwwqqgfff ddffhjqqqqqq";/*definir canción*/

while (*qm !='\0'){

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*/

}

}