用C语言弹一首卡农
1.左手
#include<stdio.h>
#include<windows.h>
using namespace std;
#define qdo 262
#define qre 294
#define qmi 330
#define qfa 349
#define qso 392
#define qla 440
#define qsi 494
#define do_ 523
#define re 578
#define mi 659
#define fa 698
#define so 784
#define la 880
#define si 988
#define do1 1046
#define re1 1175
#define mi1 1318
#define fa1 1480
#define so1 1568
#define la1 1760
#define si1 1976
#define sqdo 277
#define sqre 311
#define sqfa 370
#define sqso 415
#define sqla 466
#define sdo 554
#define sre 622
#define sfa 740
#define sso 831
#define sla 932
#define sdo1 1046
#define sre1 1245
#define sfa1 1480
#define sso1 1661
#define sla1 1865
#define P 3 //折合bpm==120,原bpm为105,此处取了个近似值
#define semibreve 1024
#define minim 512
#define crotchet 256
#define quaver 128
#define semiquaver 64
#define demisemiquaver 32
#define hemidemisemiquaver 16
//semibreve 全音符
//minim 二分音符
//crotchet 四分音符
//quaver 八分音符3
//semiquaver 十六分音符
//demisemiquaver 三十二分音符
//hemidemisemiquaver 六十四分音符
typedef struct
{
int freq; //赫兹
int duration;//持续时间
char text[32];//文本内容
}STU;
STU t[]=
{
//1
{0,semibreve,"开始...\n第1个次拍\n"},
//2
{0,semibreve,"第2个次拍\n\n"},
//3
{0,semibreve,"第3个次拍\n\n"},
//4
{0,semibreve,"第4个次拍\n\n"},
//5
{0,semibreve,"第5个次拍\n\n"},
//6
{0,semibreve,"第6个次拍\n\n"},
//7
{0,semibreve,"第7个次拍\n\n"},
//8
{0,semibreve,"第8个次拍\n\n"},
//9
{0,semibreve,"第9个次拍\n\n"},
//10
{do_, quaver, "第10个次拍\ndo "},
{re, quaver, "re "},
{mi, quaver, "mi "},
{fa, quaver, "fa "},
{so, quaver, "so "},
{re, quaver, "re "},
{do_, quaver, "do "},
{qsi, quaver, "qsi "},
//11
{do_, quaver, "\n第11个次拍\ndo "},
{la, quaver, "la "},
{so, quaver, "so "},
{fa, quaver, "fa "},
{mi, quaver, "mi "},
{fa, quaver, "fa "},
{so, quaver, "so "},
{la, quaver, "la "},
//12
{fa, quaver, "\n第12个次拍\nfa "},
{re, quaver, "re "},
{re, quaver, "re "},
{fa, quaver, "fa "},
{mi, quaver, "mi "},
{re, quaver, "re "},
{do_, quaver, "do "},
{qsi, quaver, "qsi "},
//13
{qla, quaver, "\n第13个次拍\nqla "},
{do_, quaver, "do "},
{fa, quaver, "fa "},
{mi, quaver, "mi "},
{re, quaver, "re "},
{mi, quaver, "mi "},
{fa, quaver, "fa "},
{mi, quaver, "mi "},
//14
{do_, minim, "\n第14个次拍\ndo "},
{qso, minim, "qso "},
//15
{qla, minim, "\n第15个次拍\nqla "},
{qmi, minim, "qmi "},
//16
{qfa, minim, "\n第16个次拍\nqfa "},
{qdo, minim, "qdo "},
//17
{qfa, minim, "\n第17个次拍\nqfa "},
{qso, minim, "qso "},
//18
{do_, minim, "\n第18个次拍\ndo "},
{qso, minim, "qso "},
//19
{qla, minim, "\n第19个次拍\nqla "},
{qmi, minim, "qmi "},
//20
{qfa, minim, "\n第20个次拍\nqfa "},
{qdo, minim, "do "},
//21
{qfa, minim, "\n第21个次拍\nqfa "},
{qso, minim, "qso "},
//22
{do_, minim, "\n第22个次拍\ndo "},
{qsi, minim, "qsi "},
//23
{qla, minim, "\n第23个次拍\nqla "},
{qso, minim, "qso "},
//24
{qfa, quaver, "\n第24个次拍\nqfa "},
{qmi, semiquaver, "qmi "},
//25
{qla, minim, "\n第25个次拍\nqla "},
{qso, quaver, "qso "},
{qsi, semiquaver, "si "},
//26
{do_, minim, "\n第26个次拍\ndo "},
{qsi, minim, "qsi "},
//27
{qla, minim, "\n第27个次拍\nqla "},
{qso, minim, "qso "},
//28
{qfa, minim, "\n第28个次拍\nqfa "},
{qmi, minim, "qmi "},
//29
{do_, minim, "\n第29个次拍\ndo "},
{qso, minim, "qso "},
//30
{do_, minim, "\n第30个次拍\ndo "},
{qso, minim, "qso "},
//31
{qla, minim, "\n第31个次拍\nqla "},
{qso, minim, "qso "},
//32
{qla, minim, "\n第32个次拍\nqla "},
{do_, minim, "do "},
//33
{qla, minim, "\n第33个次拍\nqla "},
{qso, minim, "qso "},
//34
{do_, minim, "\n第34个次拍\ndo "},
};
using namespace std;
int main(void)
{
static int a=1;
int i;
int aaa;
scanf("%d",&aaa);
//结构体数组的长度sizeof(t)/sizeof(STU)得到,总结构体数组大小 / 单个结构体大小
for (i=0; i<sizeof(t)/sizeof(STU); i++)
{
printf("%s",t[i].text);
Beep(t[i].freq,t[i].duration*P);
}
return 0;
}
2.右手
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
using namespace std;
#define qdo 262
#define qre 294
#define qmi 330
#define qfa 349
#define qso 392
#define qla 440
#define qsi 494
#define do_ 523
#define re 578
#define mi 659
#define fa 698
#define so 784
#define la 880
#define si 988
#define do1 1046
#define re1 1175
#define mi1 1318
#define fa1 1480
#define so1 1568
#define la1 1760
#define si1 1976
#define sqdo 277
#define sqre 311
#define sqfa 370
#define sqso 415
#define sqla 466
#define sdo 554
#define sre 622
#define sfa 740
#define sso 831
#define sla 932
#define sdo1 1046
#define sre1 1245
#define sfa1 1480
#define sso1 1661
#define sla1 1865
#define P 3 //折合bpm==120,原bpm为105,此处取了个近似值
#define semibreve 1024
#define minim 512
#define crotchet 256
#define quaver 128
#define semiquaver 64
#define demisemiquaver 32
#define hemidemisemiquaver 16
//semibreve 全音符
//minim 二分音符
//crotchet 四分音符
//quaver 八分音符
//semiquaver 十六分音符
//demisemiquaver 三十二分音符
//hemidemisemiquaver 六十四分音符
typedef struct
{
int freq; //赫兹
int duration;//持续时间
char text[32];//文本内容
}STU;
STU t[]=
{
//1
//空节拍
{0,semibreve,"开始...\n第1个次拍\n"},
//2
{do1, minim, "\n第2个次拍\ndo1 "},
{si, minim, "si "},
//3
{la, minim, "\n第3个次拍\nla "},
{so, minim, "so "},
//4
{fa, minim, "\n第4个次拍\nfa "},
{mi, minim, "mi "},
//5
{fa, minim, "\n第5个次拍\nfa "},
{re, minim, "re "},
//6
{do_, crotchet, "\n第6个次拍\ndo "},
{mi, crotchet, "mi "},
{so, crotchet, "so "},
{fa, crotchet, "fa "},
//7
{mi, crotchet, "\n第7个次拍\nmi "},
{do_, crotchet, "do "},
{mi, crotchet, "mi "},
{re, crotchet, "re "},
//8
{do_, crotchet, "\n第8个次拍\ndo "},
{qla, crotchet, "qla "},
{do_, crotchet, "da "},
{so, crotchet, "so "},
//9
{fa, crotchet, "\n第9个次拍\nfa "},
{la, crotchet, "la "},
{so, crotchet, "so "},
{fa, crotchet, "fa "},
//10
{mi, crotchet, "\n第10个次拍\nmi "},
{mi1, crotchet, "mi1 "},
{re1, minim, "re1 "},
//11
{do1, minim, "\n第11个次拍\ndo "},
{mi1, minim, "mi1 "},
//12
{la, minim, "\n第12个次拍\nla "},
{so, minim, "so "},
//13
{la, minim, "\n第13个次拍\nfa "},
{si, crotchet, "mi "},
{la, crotchet, "fa "},
//14
{do1, quaver, "\n第14个次拍\ndo1 "},
{mi1, semiquaver, "mi1 "},
{fa1, semiquaver, "fa1 "},
{so1, quaver, "so1 "},
{mi1, semiquaver, "mi1 "},
{fa1, semiquaver, "fa1 "},
{so1, semiquaver, "so1 "},
{so, semiquaver, "so "},
{la, semiquaver, "la "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{mi1, semiquaver, "mi1 "},
{fa1, semiquaver, "fa1 "},
//15
{mi1, quaver, "\n第15个次拍\nmi1 "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{mi1, quaver, "mi1 "},
{mi, semiquaver, "mi "},
{fa, semiquaver, "fa "},
{so, semiquaver, "so "},
{la, semiquaver, "la "},
{so, semiquaver, "so "},
{fa, semiquaver, "fa"},
{so, semiquaver, "so "},
{mi, semiquaver, "mi "},
{fa, semiquaver, "fa "},
{so, semiquaver, "so "},
//16
{fa, quaver, "\n第16个次拍\nfa "},
{la, semiquaver, "la "},
{so, semiquaver, "so "},
{fa, quaver, "fa "},
{mi, semiquaver, "mi "},
{re, semiquaver, "re "},
{mi, semiquaver, "mi "},
{re, semiquaver, "re"},
{do_, semiquaver, "do "},
{re, semiquaver, "re "},
{mi, semiquaver, "mi "},
{fa, semiquaver, "fa"},
{so, semiquaver, "so "},
{la, semiquaver, "la "},
//17
{fa, quaver, "\n第17个次拍\nfa "},
{la, semiquaver, "la "},
{so, semiquaver, "so "},
{la, quaver, "la "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
{so, semiquaver, "so "},
{la, semiquaver, "la "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{mi1, semiquaver, "mi "},
{fa1, semiquaver, "fa1 "},
{so1, semiquaver, "so1 "},
//18
{mi1, quaver, "\n第18个次拍\nmi1 "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{mi1, quaver, "mi1 "},
{re1, semiquaver, "re1 "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{mi1, semiquaver, "mi1 "},
{re1, semiquaver, "re1 "},
{do1, semiquaver, "do1 "},
{si, semiquaver, "si "},
//19
{do1, quaver, "\n第19个次拍\ndo1 "},
{la, semiquaver, "la "},
{si, semiquaver, "si "},
{do1, quaver, "do1 "},
{do_, semiquaver, "do "},
{re, semiquaver, "re "},
{mi, semiquaver, "mi "},
{fa, semiquaver, "fa "},
{mi, semiquaver, "mi "},
{re, semiquaver, "re "},
{mi, semiquaver, "mi "},
{do1, semiquaver, "do1 "},
{si, semiquaver, "si1 "},
{do1, semiquaver, "do1 "},
//20
{la, quaver, "\n第20个次拍\nla "},
{do1, semiquaver, "do1 "},
{si, semiquaver, "si "},
{la, quaver, "la "},
{so, semiquaver, "so "},
{fa, semiquaver, "fa "},
{so, semiquaver, "so "},
{fa, semiquaver, "fa "},
{mi, semiquaver, "mi "},
{fa, semiquaver, "fa "},
{so, semiquaver, "so "},
{la, semiquaver, "la "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
//21
{la, quaver, "\n第21个次拍\nla "},
{do1, semiquaver, "do1 "},
{si, semiquaver, "si "},
{do1, quaver, "do1 "},
{si, semiquaver, "si "},
{la, semiquaver, "la "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
{re1, semiquaver, "re1 "},
{do1, semiquaver, "do1 "},
{si, semiquaver, "si "},
{do1, semiquaver, "do1 "},
{la, semiquaver, "la "},
{si, semiquaver, "si "},
//22
{mi, crotchet, "\n第22个次拍\nfa "},
{mi1, crotchet, "mi "},
{mi1, quaver, "fa "},
{fa1, quaver, "re "},
{mi1, quaver, "fa "},
{re1, quaver, "mi "},
// 23
{do1, crotchet, "\n第23个次拍\nfa "},
{do1, crotchet, "mi "},
{do1, quaver, "fa "},
{re1, quaver, "re "},
{do1, quaver, "fa "},
{si, quaver, "mi "},
//24
{la, minim, "\n第24个次拍\nfa"},
{do1, minim, "mi"},
//25
{do1, quaver, "\n第25个次拍\nfa "},
{sfa, quaver, "re "},
{sso, quaver, "fa "},
{sfa, crotchet, "mi "},
{so, crotchet, "fa "},
//26
{so, crotchet, "\n第26个次拍\nfa "},
{so1, crotchet, "mi "},
{so1, quaver, "fa "},
{la1, quaver, "re "},
{so1, quaver, "fa "},
{fa1, quaver, "mi "},
//27
{mi1, crotchet, "\n第27个次拍\nmi "},
{mi1, crotchet, "mi "},
{mi1, quaver, "fa "},
{fa1, quaver, "re "},
{mi1, quaver, "fa "},
{re1, quaver, "mi "},
//28
{do1, quaver, "\n第28个次拍\nfa "},
{sfa, quaver, "re "},
{sso, quaver, "fa "},
{sfa, crotchet, "mi "},
{so, crotchet, "fa "},
//29
{fa, crotchet, "\n第29个次拍\nfa "},
{do1, crotchet, "re "},
{si, crotchet, "fa "},
{so1, crotchet, "mi "},
//30
{so, minim, "\n第30个次拍\nfa "},
{so1, crotchet, "re "},
{fa1, crotchet, "fa "},
//31
{mi, minim, "\n第31个次拍\nfa "},
{mi1, crotchet, "re "},
{re1, crotchet, "fa "},
//32
{do1, minim, "\n第32个次拍\nfa "},
{do1, minim, "re "},
//33
{do1, minim, "\n第33个次拍\nre "},
{so, minim, "fa "},
//34
{so, semibreve, "\n第34个次拍\nre "},
};
int main(void)
{
static int a=1;
int i;
//结构体数组的长度sizeof(t)/sizeof(STU)得到,总结构体数组大小 / 单个结构体大小
for (i=0; i<sizeof(t)/sizeof(STU); i++)
{
printf("%s",t[i].text);
Beep(t[i].freq,t[i].duration*P);
}
return 0;
}