【新人制作】单音MIDI音乐程序,只要有谱什么歌都能写 ~-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: Mitsuka

【新人制作】单音MIDI音乐程序,只要有谱什么歌都能写 ~

[复制链接]
 楼主| 发表于 2017-2-7 03:29 | 显示全部楼层
suoma 发表于 2016-6-5 21:44
你的蜂鸣器不刺耳吗?我是接电阻消噪声了

还可以,我用的是生日贺卡的那种蜂鸣器
发表于 2017-2-7 09:35 | 显示全部楼层
楼主好厉害啊,,,,
 楼主| 发表于 2017-2-8 17:21 | 显示全部楼层
jackten 发表于 2017-2-7 09:35
楼主好厉害啊,,,,

这只是我把《Anduino CookBook》(就是Anduino Toolkit里的初学者参考书)里面的一个项目做了一次魔改出来的,网上也有和我差不多的项目,但是自己看别人写的代码不太容易理解所以就自己做一个,你们能够理解的话就好,不能理解的代码我随时可以为你解答。(- w -) ♪~
发表于 2017-2-17 17:11 | 显示全部楼层
谢谢楼主,学习了
发表于 2017-2-17 23:30 | 显示全部楼层
不错啊,进来学习了,谢谢共享
发表于 2017-3-6 19:13 | 显示全部楼层
我自己曾经做过一个点歌机
发表于 2017-3-10 13:09 | 显示全部楼层
我的为什么不出声?
发表于 2017-3-13 22:56 | 显示全部楼层
我知道和弦咋弄
发表于 2017-5-22 20:44 | 显示全部楼层
楼主真厉害!哈哈哈
发表于 2017-5-23 21:37 | 显示全部楼层
看[mw_shl_code=cpp,true]#define NOTE_0  -1

#define NOTE_A1 441
#define NOTE_A2 495
#define NOTE_A3 556
#define NOTE_A4 589
#define NOTE_A5 661
#define NOTE_A6 742
#define NOTE_A7 833

#define NOTE_AL1 221
#define NOTE_AL2 248
#define NOTE_AL3 278
#define NOTE_AL4 294
#define NOTE_AL5 330
#define NOTE_AL6 371
#define NOTE_AL7 416

#define NOTE_AH1 882
#define NOTE_AH2 990
#define NOTE_AH3 1112
#define NOTE_AH4 1178
#define NOTE_AH5 1322
#define NOTE_AH6 1484
#define NOTE_AH7 1665


#define NOTE_B1 495
#define NOTE_B2 556
#define NOTE_B3 589
#define NOTE_B4 661
#define NOTE_B5 742
#define NOTE_B6 833
#define NOTE_B7 935

#define NOTE_BL1 248
#define NOTE_BL2 278
#define NOTE_BL3 294
#define NOTE_BL4 330
#define NOTE_BL5 371
#define NOTE_BL6 416
#define NOTE_BL7 467

#define NOTE_BH1 990
#define NOTE_BH2 1112
#define NOTE_BH3 1178
#define NOTE_BH4 1322
#define NOTE_BH5 1484
#define NOTE_BH6 1665
#define NOTE_BH7 1869


#define NOTE_C1 262
#define NOTE_C2 294
#define NOTE_C3 330
#define NOTE_C4 350
#define NOTE_C5 393
#define NOTE_C6 441
#define NOTE_C7 495

#define NOTE_CL1 131
#define NOTE_CL2 147
#define NOTE_CL3 165
#define NOTE_CL4 175
#define NOTE_CL5 196
#define NOTE_CL6 221
#define NOTE_CL7 248

#define NOTE_CH1 525
#define NOTE_CH2 589
#define NOTE_CH3 661
#define NOTE_CH4 700
#define NOTE_CH5 786
#define NOTE_CH6 882
#define NOTE_CH7 990


#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556

#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278

#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 1112


#define NOTE_E1 330
#define NOTE_E2 350
#define NOTE_E3 393
#define NOTE_E4 441
#define NOTE_E5 495
#define NOTE_E6 556
#define NOTE_E7 624

#define NOTE_EL1 165
#define NOTE_EL2 175
#define NOTE_EL3 196
#define NOTE_EL4 221
#define NOTE_EL5 248
#define NOTE_EL6 278
#define NOTE_EL7 312

#define NOTE_EH1 661
#define NOTE_EH2 700
#define NOTE_EH3 786
#define NOTE_EH4 882
#define NOTE_EH5 990
#define NOTE_EH6 1112
#define NOTE_EH7 1248


#define NOTE_F1 350
#define NOTE_F2 393
#define NOTE_F3 441
#define NOTE_F4 495
#define NOTE_F5 556
#define NOTE_F6 624
#define NOTE_F7 661

#define NOTE_FL1 175
#define NOTE_FL2 196
#define NOTE_FL3 221
#define NOTE_FL4 234
#define NOTE_FL5 262
#define NOTE_FL6 294
#define NOTE_FL7 330

#define NOTE_FH1 700
#define NOTE_FH2 786
#define NOTE_FH3 882
#define NOTE_FH4 935
#define NOTE_FH5 1049
#define NOTE_FH6 1178
#define NOTE_FH7 1322


#define NOTE_G1 393
#define NOTE_G2 441
#define NOTE_G3 495
#define NOTE_G4 556
#define NOTE_G5 624
#define NOTE_G6 661
#define NOTE_G7 742

#define NOTE_GL1 196
#define NOTE_GL2 221
#define NOTE_GL3 234
#define NOTE_GL4 262
#define NOTE_GL5 294
#define NOTE_GL6 330
#define NOTE_GL7 371

#define NOTE_GH1 786
#define NOTE_GH2 882
#define NOTE_GH3 990
#define NOTE_GH4 1049
#define NOTE_GH5 1178
#define NOTE_GH6 1322
#define NOTE_GH7 1484
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看
#define DURATION 400//每个音符持续的时间,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
int t1[] =
{
  NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_0,
  NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_0,NOTE_D6,
  NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_0,NOTE_D6,
  NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_0,

  NOTE_D1,NOTE_D1,NOTE_D3,
  NOTE_D1,NOTE_D1,NOTE_D3,NOTE_0,
  NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
  NOTE_D5,NOTE_D1,NOTE_D3,NOTE_0,
  NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
  NOTE_D5,NOTE_D1,NOTE_D2,NOTE_0,
  NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,
  NOTE_D5,
  NOTE_DH1,NOTE_0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
  NOTE_0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_0,
  NOTE_DH1,NOTE_0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
  NOTE_0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_0,
  NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,
  NOTE_D1,
  NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
  NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
  NOTE_DH1,NOTE_0,NOTE_D7,NOTE_D5,
  NOTE_D6
};
//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

float d1[]=
{
  1,1,0.5,0.5,1,
  0.5,0.5,0.5,0.5,1,0.5,0.5,
  0.5,1,0.5,1,0.5,0.5,
  0.5,0.5,0.5,0.5,1,1,

  1,1,1+1,
  0.5,1,1+0.5,1,
  1,1,0.5,0.5,1,
  0.5,1,1+0.5,1,
  0.5,0.5,0.5,0.5,1+1,
  0.5,1,1+0.5,1,
  1+1,0.5,0.5,1,
  1+1+1+1,
  0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
  0.5,1,0.5,1,1,
  0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
  0.5,1,0.5,1,1,
  1+1,0.5,0.5,1,
  1+1+1+1,
  0.5,1,0.5,1+1,
  0.5,1,0.5,1+1,
  1+1,0.5,0.5,1,
  1+1+1+1
};
//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)(+代表连音)
int t2[] =
{
   NOTE_CL6, NOTE_CL6, NOTE_C1, NOTE_C2,
    NOTE_C3, NOTE_C5,
     NOTE_C6, NOTE_CL6, NOTE_C1, NOTE_C2,
      NOTE_C3,
       NOTE_C2, NOTE_C2, NOTE_C2, NOTE_C3,
        NOTE_C5 , NOTE_C5, NOTE_C5, NOTE_C6,
         NOTE_C3,
           NOTE_CL6, NOTE_CL6, NOTE_C1, NOTE_C2,
    NOTE_C3, NOTE_C5,
     NOTE_C6, NOTE_CL6, NOTE_C1, NOTE_C2,
      NOTE_C3,
       NOTE_C2, NOTE_C2, NOTE_C2, NOTE_C3,
       NOTE_C5,NOTE_C5,NOTE_0,NOTE_CL5,
       NOTE_CL6
         
};
float d2[]=
{
  1,1,1,1,3,1,1,1,1,1,4,1,1,1,1,1,1,1+1,4,1,1,1,1,3,1,1,1,1,1,4,1,1,1,1,1,1,1,1,4
};
//同上
int tonePin =6;//定义数字11 接口
int potpin=0;   //定义模拟接口0
int inpin =13 ;//定义数字7 接口
int val;//定义变量val
int gal=0;
int length;//这里定义一个变量,后面用来表示共有多少个音符
void setup()
{
pinMode(tonePin,OUTPUT);//定义小灯接口为输出接口
pinMode(inpin,INPUT);//定义按键接口为输入接口
length = sizeof(t1)/sizeof(t1[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
lcd.begin(16, 2);  //初始化LCD
}
void loop()
{
while(1)
gal=analogRead(potpin);
val=digitalRead(inpin);//读取数字7 口电平值赋给val
{
if(val==HIGH)//检测按键是否按下
{
  if (gal<=30)
  {
  for(int x=0;x<length;x++)//循环音符的次数
  {
    tone(tonePin,t1[x]);//此函数依次播放tune序列里的数组,即每个音符
    delay(400*d1[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
    noTone(tonePin);//停止当前音符,进入下一音符
    if(val==LOW) break;//加上这一句就行了
  }
  }
  else
  {
    if(gal<=60 and gal>=30)
    {
       for(int x=0;x<length;x++)//循环音符的次数
  {
      tone(tonePin,t2[x]);//此函数依次播放tune序列里的数组,即每个音符
    delay(DURATION*d2[x]);
    noTone(tonePin);//停止当前音符,进入下一音符
    if(val==LOW) break;
    }
  }
  }
}
}
}



[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:49 , Processed in 2.357657 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表