查看: 8680|回复: 6

【新人制作】自制MIDI乐谱 - 九九八十一

[复制链接]
  • TA的每日心情
    开心
    2016-4-27 15:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2016-4-26 14:14 | 显示全部楼层 |阅读模式
    本帖最后由 Mitsuka 于 2016-4-29 15:27 编辑

    昨天写的帖子,今天发布。然后继续放上一部鄙人的拙作:九九八十一。这首歌确实不错,节奏感很强,乐风和权御天下神似(作者一样的怎么不可能一样!)。程序源代码:http://www.arduino.cn/thread-20602-1-1.html
    前奏和间奏没做出来,而且没用做成库文件,因为....懒....~~希望有越来越多的乐曲能够然我改编哟~~
    附上参考乐谱,部分内容经过艺(xiao)术(fu)加(gai)工(dong):

    kittenblock中小学创客名师推荐的图形化编程软件

    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[x-1]);
      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[x-1]);
     }
    
    void withdot(int x)
    {
      durac[x];
      dura[x+1];
    }
    
    void do_ut(int pin,int x)
    { int C[] = {33,65,131,262,523,1047,2093};
      tone(pin,C[x-1]);}
    
    void do_up(int pin,int x)
    { int CU[] = {35,69,139,277,554,1109,2217};
      tone(pin,CU[x-1]);}
    
    void re_dw(int pin,int x)
    { int DD[] = {35,69,139,277,554,1109,2217};
      tone(pin,DD[x-1]);}
    
    void re(int pin,int x)
    { int D[] = {37,73,147,294,587,1175,2349};
      tone(pin,D[x-1]);}
    
    void re_up(int pin,int x)
    { int DU[] = {39,78,156,311,622,1245,2489};
      tone(pin,DU[x-1]);}
    
    void mi_dw(int pin,int x)
    { int ED[] = {39,78,156,311,622,1245,2489};
      tone(pin,ED[x-1]);}
    
    void mi(int pin,int x)
    { int E[] = {41,82,165,330,659,1319,2637};
      tone(pin,E[x-1]);}
    
    void fa(int pin,int x)
    { int F[] = {44,87,175,349,698,1397,2794};
      tone(pin,F[x-1]);}
    
    void fa_up(int pin,int x)
    { int FU[] = {46,93,185,370,740,1480,2960};
      tone(pin,FU[x-1]);}
    
    void sol_dw(int pin,int x)
    { int GD[] = {46,93,185,370,740,1480,2960};
      tone(pin,GD[x-1]);}
    
    void sol(int pin,int x)
    { int G[] = {49,98,196,392,784,1568,3136};
      tone(pin,G[x-1]);}
    
    void sol_up(int pin,int x)
    { int GU[] = {52,104,208,415,831,1661,3322};
      tone(pin,GU[x-1]);}
    
    void la_dw(int pin,int x)
    { int AD[] = {52,104,208,415,831,1661,3322};
      tone(pin,AD[x-1]);}
    
    void la(int pin,int x)
    { int A[] = {55,110,220,440,880,1760,3520};
      tone(pin,A[x-1]);}
    
    void la_up(int pin,int x)
    { int AU[] = {58,117,233,466,932,1865,3729};
      tone(pin,AU[x-1]);}
    
    void si_dw(int pin,int x)
    { int BD[] = {58,117,233,466,932,1865,3729};
      tone(pin,BD[x-1]);}
    
    void si(int pin,int x)
    { int B[] = {62,123,247,494,988,1976,3951};
      tone(pin,B[x-1]);}
    
    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);
    }



    参考乐谱: Hong Eight-One.jpg




  • TA的每日心情
    擦汗
    2017-1-14 19:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-1-23 10:28 | 显示全部楼层
    请问这个和乐谱是怎么联系起来的?为啥你这没有波特率?
  • TA的每日心情
    开心
    2016-4-27 15:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2017-2-5 09:57 | 显示全部楼层
    renjianyu 发表于 2017-1-23 10:28
    请问这个和乐谱是怎么联系起来的?为啥你这没有波特率?

    函数dura内的dura[]数组和函数durac内的durac[]数组就是每个音符的时值,001行声明的全局变量bpm应该就是你说的波特率
  • TA的每日心情
    擦汗
    2017-1-14 19:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-2-5 16:11 | 显示全部楼层
    Mitsuka 发表于 2017-2-5 09:57
    函数dura内的dura[]数组和函数durac内的durac[]数组就是每个音符的时值,001行声明的全局变量bpm应该就是 ...

    音符的时值是怎么确定的呀?
  • TA的每日心情
    开心
    2016-4-27 15:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2017-2-7 03:38 | 显示全部楼层
    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;……

    这样解释可以吗?
  • TA的每日心情
    擦汗
    2017-1-14 19:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-2-12 09:13 | 显示全部楼层
    Mitsuka 发表于 2017-2-7 03:38
    以本曲谱为例:
    开头定义了bpm=220,即每分钟220拍,OK?

    嗯嗯,谢谢

    该用户从未签到

    发表于 2018-6-12 21:11 | 显示全部楼层
    有没有效果视频啊
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    【原创】制作一套USB电流采样板
    【原创】制作一套USB电流
    以前用 0.1Ω(R1J)曾经做过一个 USB 电流采集器,基本原理和 USB 电流表一致, 唯一
    arduino数字输出端低电平不稳定
    arduino数字输出端低电平
    我在做的功能: 用一个光电开关(买好的现成元件),发出高电平信号输入给arduino,然
    [Arduino物联网开发实战2]数据反馈
    [Arduino物联网开发实战2]
    [md]上一篇:(https://www.arduino.cn/thread-83177-1-1.html) ### 添加DIY组件
    博哥零基础教你玩转ESP8266(十四) ESP8266HTTPClient 连接世界
    博哥零基础教你玩转ESP826
    帖子导航帖 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表