极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: wali

Arduino学习心得-简单制作各种歌曲

  [复制链接]
发表于 2013-1-25 22:08:48 | 显示全部楼层
让我回想起刚上大学时在 386 上用 C 控制 PC 喇叭奏东方红的时光,支持一下楼主。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-2-4 14:55:32 | 显示全部楼层
谢谢楼主~找个喇叭去试试!
回复 支持 反对

使用道具 举报

发表于 2013-2-5 16:19:07 | 显示全部楼层
新人,好贴顶起
回复 支持 反对

使用道具 举报

发表于 2013-2-20 11:56:45 | 显示全部楼层
牛X啊,学习了。。。
回复 支持 反对

使用道具 举报

发表于 2013-2-27 18:10:44 | 显示全部楼层
赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
佩服啊
回复 支持 反对

使用道具 举报

发表于 2013-3-2 20:56:45 | 显示全部楼层
感觉d3用365比较好听一点。。。
回复 支持 反对

使用道具 举报

发表于 2013-3-2 21:24:13 | 显示全部楼层
365还是不对。。。真的好难试。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-3 09:58:10 | 显示全部楼层
丧心病狂 发表于 2013-3-2 21:24
365还是不对。。。真的好难试。。。

370呢  前面有人说的 你试试
回复 支持 反对

使用道具 举报

发表于 2013-3-24 21:51:30 | 显示全部楼层
好东西  收藏了 但是我有个问题怎么将人说的话解码放在ARDUINO上播放出来呢?
回复 支持 反对

使用道具 举报

发表于 2013-4-6 21:28:21 | 显示全部楼层
果断顶起!!!
回复 支持 反对

使用道具 举报

发表于 2013-4-9 23:42:40 | 显示全部楼层
{:soso_e132:} 改了好几遍,改成下面的样子,在每句后面加一点休止符,好一点。不过到第五行往后面就乱了,不明白是什么原因,谱子是最简单的(两只老虎)。帮忙指点指点吧,大哥?{:soso_e160:}


#define NOTE_G0 -1
#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
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.625
//这部分是用英文对应了拍子,这样后面也比较好看



int tune[]=
{
        NOTE_G1,NOTE_G2,NOTE_G3,NOTE_G1,NOTE_G0,
        NOTE_G1,NOTE_G2,NOTE_G3,NOTE_G1,NOTE_G0,
        NOTE_G3,NOTE_G4,NOTE_G5,NOTE_G0,
        NOTE_G3,NOTE_G4,NOTE_G5,NOTE_G0,
        NOTE_G5,NOTE_G6,NOTE_G5,NOTE_G4,NOTE_G3,NOTE_G1,NOTE_G0,
        NOTE_G5,NOTE_G6,NOTE_G5,NOTE_G4,NOTE_G3,NOTE_G1,NOTE_G0,
        NOTE_G3,NOTE_GL5,NOTE_G1,NOTE_G0,
        NOTE_G3,NOTE_GL5,NOTE_G1,NOTE_G0,
        NOTE_G3,NOTE_GL5,NOTE_G1,NOTE_G0,

};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
float duration[]=
{
        1,1,1,1,0.125,
        1,1,1,1,0.125,
        1,1,1,1+1,0.25,
        1,1,1,1+1,0.25,
        0.5,0.5,0.5,0.5,1,1,0.125,
        0.5,0.5,0.5,0.5,1,1,0.125,
        1,1,1+1,0.25,
        1,1,1+1,0.25,
        1,1,1+1+0.125,
};//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin=5;//蜂鸣器的pin

void setup()
{
  pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
  length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
}

void loop()
{
  for(int x=0;x<length;x++)//循环音符的次数
  {
    tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符
    delay(800*duration[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
    noTone(tonePin);//停止当前音符,进入下一音符
  }
  delay(5000);//等待5秒后,循环重新开始
}
回复 支持 反对

使用道具 举报

发表于 2013-4-9 23:44:41 | 显示全部楼层
  1. #define NOTE_G0 -1
  2. #define NOTE_G1 393
  3. #define NOTE_G2 441
  4. #define NOTE_G3 495
  5. #define NOTE_G4 556
  6. #define NOTE_G5 624
  7. #define NOTE_G6 661
  8. #define NOTE_G7 742

  9. #define NOTE_GL1 196
  10. #define NOTE_GL2 221
  11. #define NOTE_GL3 234
  12. #define NOTE_GL4 262
  13. #define NOTE_GL5 294
  14. #define NOTE_GL6 330
  15. #define NOTE_GL7 371

  16. #define NOTE_GH1 786
  17. #define NOTE_GH2 882
  18. #define NOTE_GH3 990
  19. #define NOTE_GH4 1049
  20. #define NOTE_GH5 1178
  21. #define NOTE_GH6 1322
  22. #define NOTE_GH7 1484
  23. //以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。这样后面写起来比较好识别。
  24. #define WHOLE 1
  25. #define HALF 0.5
  26. #define QUARTER 0.25
  27. #define EIGHTH 0.125
  28. #define SIXTEENTH 0.625
  29. //这部分是用英文对应了拍子,这样后面也比较好看



  30. int tune[]=
  31. {
  32.         NOTE_G1,NOTE_G2,NOTE_G3,NOTE_G1,NOTE_G0,
  33.         NOTE_G1,NOTE_G2,NOTE_G3,NOTE_G1,NOTE_G0,
  34.         NOTE_G3,NOTE_G4,NOTE_G5,NOTE_G0,
  35.         NOTE_G3,NOTE_G4,NOTE_G5,NOTE_G0,
  36.         NOTE_G5,NOTE_G6,NOTE_G5,NOTE_G4,NOTE_G3,NOTE_G1,NOTE_G0,
  37.         NOTE_G5,NOTE_G6,NOTE_G5,NOTE_G4,NOTE_G3,NOTE_G1,NOTE_G0,
  38.         NOTE_G3,NOTE_GL5,NOTE_G1,NOTE_G0,
  39.         NOTE_G3,NOTE_GL5,NOTE_G1,NOTE_G0,
  40.         NOTE_G3,NOTE_GL5,NOTE_G1,NOTE_G0,

  41. };//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
  42. float duration[]=
  43. {
  44.         1,1,1,1,0.125,
  45.         1,1,1,1,0.125,
  46.         1,1,1,1+1,0.25,
  47.         1,1,1,1+1,0.25,
  48.         0.5,0.5,0.5,0.5,1,1,0.125,
  49.         0.5,0.5,0.5,0.5,1,1,0.125,
  50.         1,1,1+1,0.25,
  51.         1,1,1+1,0.25,
  52.         1,1,1+1+0.125,
  53. };//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
  54. int length;//这里定义一个变量,后面用来表示共有多少个音符
  55. int tonePin=5;//蜂鸣器的pin

  56. void setup()
  57. {
  58.   pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
  59.   length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
  60. }

  61. void loop()
  62. {
  63.   for(int x=0;x<length;x++)//循环音符的次数
  64.   {
  65.     tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符
  66.     delay(800*duration[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
  67.     noTone(tonePin);//停止当前音符,进入下一音符
  68.   }
  69.   delay(5000);//等待5秒后,循环重新开始
  70. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-4-10 10:24:35 | 显示全部楼层
非常好的帖子!感谢楼主!
回复 支持 反对

使用道具 举报

发表于 2013-4-13 16:18:10 | 显示全部楼层
大强悍了!!!{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2013-4-13 23:40:55 | 显示全部楼层
小星星
#define NOTE_D0 -1
#define NOTE_D1 262
#define NOTE_D2 294
#define NOTE_D3 330
#define NOTE_D4 350
#define NOTE_D5 393
#define NOTE_D6 441
#define NOTE_D7 495

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

#define NOTE_DH1 525
#define NOTE_DH2 589
#define NOTE_DH3 661
#define NOTE_DH4 700
#define NOTE_DH5 786
#define NOTE_DH6 882
#define NOTE_DH7 990
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写D调的各种歌,我这里用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
//这部分是用英文对应了拍子,这样后面也比较好看
int tune[] =
{
  NOTE_D1,NOTE_D1,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D0,
  NOTE_D4,NOTE_D4,NOTE_D3,NOTE_D3,NOTE_D2,NOTE_D2,NOTE_D1,NOTE_D0,
  NOTE_D5,NOTE_D5,NOTE_D4,NOTE_D4,NOTE_D3,NOTE_D3,NOTE_D2,NOTE_D0,
  NOTE_D5,NOTE_D5,NOTE_D4,NOTE_D4,NOTE_D3,NOTE_D3,NOTE_D2,NOTE_D0,
  NOTE_D1,NOTE_D1,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D0,
  NOTE_D4,NOTE_D4,NOTE_D3,NOTE_D3,NOTE_D2,NOTE_D2,NOTE_D1,NOTE_D0,
  
};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

float duration[]=
{
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,
  
};//这部分是整首曲子的接拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin=5;//蜂鸣器的pin

void setup()
{
  pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
  length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
}

void loop()
{
  for(int x=0;x<length;x++)//循环音符的次数
  {
    tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符
    delay(400*duration[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
    noTone(tonePin);//停止当前音符,进入下一音符
  }
  delay(5000);//等待5秒后,循环重新开始
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 21:56 , Processed in 0.048268 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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