音符-頻率關系表
註c d e f g a b
1 2 3 4 5 6 7
頻率262 294 330 349 392 440 494
註c d e f g a b
1 2 3 4 5 6 7
頻率523 587 659 698 784 880 988
註c d e f g a b
1 2 3 4 5 6 7
頻率1047 1175 1319 1397 2568 1760 1976。
# include & ltstdio.h & gt
# include & ltdos.h & gt
void pause(int);
void sound 1(int,int);
無效總管(無效)
{
int i,freq,speed = 5;
int time = 4 * speed
char * QM =“iddgwwwQQgfff dddfghhhggg ddgwwwqqgfff \
ddffhjqqqq wpggjhgdgqq hhqwwqjjjjggg \
ddgwwwqqqgfff ddffhjqqqqqq/*定義歌曲*/
while(* qm++!='\0'){
I = 1;
開關(* QM ){
案例“k”:
時間= 1 *速度;I = 0;
打破;
案例“I”:
時間= 6 *速度;I = 0;
打破;
案例“o”:
時間= 10 *速度;I = 0;
打破;
案例“p”:
暫停(時間);I = 0;
打破;
案例a:
freq = 523
打破;
案例:
freq = 587
打破;
案例“d”:
freq = 659
打破;
案例“f”:
freq = 698
打破;
案例“g”:
freq = 784
打破;
案例“h”:
freq = 880
打破;
案例“j”:
freq = 988
打破;
案例“z”:
freq = 262
打破;
案例“X”:
freq = 294
打破;
案例“c”:
freq = 330
打破;
案例“v”:
freq = 349
打破;
案例b:
freq = 392
打破;
案例“n”:
freq = 440
打破;
案例“m”:
freq = 494
打破;
案例“q”:
freq = 1047;
打破;
案例“w”:
freq = 1175;
打破;
案例“e”:
freq = 1319;
打破;
案例“r”:
freq = 1397;
打破;
案例“t”:
freq = 2568
打破;
案例“y”:
freq = 1760;
打破;
大小寫“u”:
freq = 1976;
打破;
默認值:
I = 0;
打破;
}
如果(壹)
sound 1(freq,time);
}
}
void sound 1(int freq,int time)/* freq是頻率,time是持續時間*/
{
工會
長除數;
無符號字符c【2】;
}計數;
無符號字符ch;
count . divisor = 1193280/freq;/* 1193280是系統時鐘速率*/
outp(67182);
outp(66,count . c【0】);
outp(66,count . c【1】);
ch = InP(97);
outp(97,ch | 3);
暫停(時間);
outp(97,ch);
}
無效暫停(間歇時間)
{
int t1,T2;
工會規章進、出;
in . h . ah = 0X2c;
int 86(0x 21;在& ampout);/*獲取當前時間*/
t 1 = T2 = 100 * out . h . DH+out . h . dl;/*out.h.dh是第二個值,out.h.dl是1/100第二個值*/
while(T2-t 1 & lt;時間)
{
int 86(0x 21;在& ampout);
T2 = 100 * out . h . DH+out . h . dl;
if(T2 & lt;t 1)T2+= 6000;/*增加壹分鐘*/
}
}