【新人制作】自制MIDI乐谱 - 九九八十一
本帖最后由 Mitsuka 于 2016-4-29 15:27 编辑昨天写的帖子,今天发布。然后继续放上一部鄙人的拙作:九九八十一。这首歌确实不错,节奏感很强,乐风和权御天下神似(作者一样的怎么不可能一样!)。程序源代码:http://www.arduino.cn/thread-20602-1-1.html
前奏和间奏没做出来,而且没用做成库文件,因为....懒....~~希望有越来越多的乐曲能够然我改编哟~~
附上参考乐谱,部分内容经过艺(xiao)术(fu)加(gai)工(dong):
const float bpm = 220; //bpm = beats per min, changable
void dura(int x)
{ int dura[] = {240000/bpm,120000/bpm,60000/bpm,30000/bpm,15000/bpm,7500/bpm,3750/bpm};
delay(dura);
rest(8);
delay(50);
}
void durac(int x)
{ int durac[] = {240000/bpm,120000/bpm,60000/bpm,30000/bpm,15000/bpm,7500/bpm,3750/bpm};
delay(durac);
}
void withdot(int x)
{
durac;
dura;
}
void do_ut(int pin,int x)
{ int C[] = {33,65,131,262,523,1047,2093};
tone(pin,C);}
void do_up(int pin,int x)
{ int CU[] = {35,69,139,277,554,1109,2217};
tone(pin,CU);}
void re_dw(int pin,int x)
{ int DD[] = {35,69,139,277,554,1109,2217};
tone(pin,DD);}
void re(int pin,int x)
{ int D[] = {37,73,147,294,587,1175,2349};
tone(pin,D);}
void re_up(int pin,int x)
{ int DU[] = {39,78,156,311,622,1245,2489};
tone(pin,DU);}
void mi_dw(int pin,int x)
{ int ED[] = {39,78,156,311,622,1245,2489};
tone(pin,ED);}
void mi(int pin,int x)
{ int E[] = {41,82,165,330,659,1319,2637};
tone(pin,E);}
void fa(int pin,int x)
{ int F[] = {44,87,175,349,698,1397,2794};
tone(pin,F);}
void fa_up(int pin,int x)
{ int FU[] = {46,93,185,370,740,1480,2960};
tone(pin,FU);}
void sol_dw(int pin,int x)
{ int GD[] = {46,93,185,370,740,1480,2960};
tone(pin,GD);}
void sol(int pin,int x)
{ int G[] = {49,98,196,392,784,1568,3136};
tone(pin,G);}
void sol_up(int pin,int x)
{ int GU[] = {52,104,208,415,831,1661,3322};
tone(pin,GU);}
void la_dw(int pin,int x)
{ int AD[] = {52,104,208,415,831,1661,3322};
tone(pin,AD);}
void la(int pin,int x)
{ int A[] = {55,110,220,440,880,1760,3520};
tone(pin,A);}
void la_up(int pin,int x)
{ int AU[] = {58,117,233,466,932,1865,3729};
tone(pin,AU);}
void si_dw(int pin,int x)
{ int BD[] = {58,117,233,466,932,1865,3729};
tone(pin,BD);}
void si(int pin,int x)
{ int B[] = {62,123,247,494,988,1976,3951};
tone(pin,B);}
void rest(int pin)
{
tone(pin, 0);
}
void setup()
{
/* Attention:
* whole = 1;
* half = 2;
* quarter = 3;
* eighth = 4;
* sixteenth = 5;
* thirtysecond = 6;
* sixtyforth = 7;
*/
}
void loop()
{
int pin = 13;
/* Here's an example:
* do_ut(pin,4); dura(3);
* do_ut(pin,4); dura(3);
* sol(pin,4); dura(3);
* sol(pin,4); dura(3);
* la(pin,4); dura(3);
* la(pin,4); dura(3);
* sol(pin,4); dura(2);
* rest(pin);
* delay(50);
*/
la(pin,4); dura(4);
rest(pin); dura(4);
la(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
sol(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(3);
la(pin,4); dura(4);
rest(pin); dura(4);
la(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
sol(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
rest(pin); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
rest(pin); dura(3);
la(pin,4); dura(4);
rest(pin); dura(4);
la(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
sol(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(3);
la(pin,4); dura(4);
rest(pin); dura(4);
la(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
sol(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
rest(pin); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
rest(pin); dura(3);
do_ut(pin,4); dura(3); withdot(3);
si(pin,3); dura(3); withdot(3);
la(pin,3); dura(3);
la(pin,3); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
rest(pin); dura(4);
sol(pin,3); dura(4);
la(pin,3); dura(3);
la(pin,3); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4);
la(pin,3); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4); // Here has a little different!
la(pin,3); dura(4);
sol(pin,3); dura(4);
rest(pin); dura(4);
la(pin,3); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
re(pin,4); dura(4);withdot(4);
mi(pin,4); dura(4); // To HERE!
re(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
rest(pin); dura(4);
re(pin,4); dura(4);
mi(pin,4); durac(4);
mi(pin,4); dura(2);
rest(pin); dura(3);
mi(pin,3); dura(4);
sol(pin,3); dura(4);
la(pin,3); dura(3);withdot(3);
sol(pin,3); dura(3);withdot(3);
mi(pin,4); dura(4);withdot(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
sol(pin,4); dura(4);
la(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
mi(pin,4); dura(3);withdot(3);
la(pin,3); dura(4);withdot(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
mi(pin,4); dura(3);withdot(3);
sol(pin,4); dura(4);withdot(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
la(pin,3); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
mi(pin,4); dura(4);withdot(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
sol(pin,4); dura(4);
la(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
re(pin,4); dura(4);withdot(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
re(pin,4); dura(4);withdot(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
la(pin,3); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
mi(pin,4); dura(4);withdot(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
sol(pin,4); dura(4);
la(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
mi(pin,4); dura(3);withdot(3);
la(pin,3); dura(4);withdot(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
mi(pin,4); dura(3);withdot(3);
sol(pin,4); dura(4);withdot(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
la(pin,3); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
mi(pin,4); dura(4);withdot(4);
rest(pin); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
sol(pin,4); dura(4);
la(pin,4); dura(4);
mi(pin,4); dura(4);
rest(pin); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
re(pin,4); dura(4);withdot(4);
re(pin,4); dura(3);withdot(3);
do_ut(pin,4); dura(3);withdot(3);
re(pin,4); dura(4);withdot(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
re(pin,4); dura(4);
mi(pin,4); dura(4);
re(pin,4); dura(4);
do_ut(pin,4); dura(4);
do_ut(pin,4); dura(4);
sol(pin,3); dura(4);
sol(pin,3); durac(4);
la(pin,3); dura(1);
rest(8);
delay(1000);
}
参考乐谱:
请问这个和乐谱是怎么联系起来的?为啥你这没有波特率? renjianyu 发表于 2017-1-23 10:28
请问这个和乐谱是怎么联系起来的?为啥你这没有波特率?
函数dura内的dura[]数组和函数durac内的durac[]数组就是每个音符的时值,001行声明的全局变量bpm应该就是你说的波特率 Mitsuka 发表于 2017-2-5 09:57
函数dura内的dura[]数组和函数durac内的durac[]数组就是每个音符的时值,001行声明的全局变量bpm应该就是 ...
音符的时值是怎么确定的呀? renjianyu 发表于 2017-2-5 16:11
音符的时值是怎么确定的呀?
以本曲谱为例:
开头定义了bpm=220,即每分钟220拍,OK?
接着定义函数dura[]作为音符时值,分别是:全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、六十四分音符的时值。
以四分音符为例,四分音符的时值为1拍,对吧。假设1分钟(60000毫秒)内全是四分音符,则在本曲谱中,1拍的时值为(60000/bpm)毫秒,即四分音符=1拍=(60000/bpm),这就是数组dura[]中第三个数。
以此类推:
全音符是四分音符的4倍,则:4×60000/bpm=240000/bpm;
二分音符是四分音符的2倍,则:2×60000/bpm=120000/bpm;
八分音符是四分音符的1/2,则:1/2×60000/bpm=30000/bpm;……
这样解释可以吗? Mitsuka 发表于 2017-2-7 03:38
以本曲谱为例:
开头定义了bpm=220,即每分钟220拍,OK?
嗯嗯,谢谢 有没有效果视频啊
页:
[1]