╰☆_Roke 发表于 2012-9-25 15:26:26

好给力~~~学习学习~~~

Lancelot 发表于 2012-10-2 21:44:01

lz太给力了写了这么好玩的程序,但是好像基准频率有点问题,有些音节失真了。
小弟不才微改了一下频率,放一首欢乐颂上来与大家分享,多多包涵
#define NOTE_D0 -1
#define NOTE_D1 523
#define NOTE_D2 580
#define NOTE_D3 659
#define NOTE_D4 698
#define NOTE_D5 783
#define NOTE_D6 800
#define NOTE_D7 987

#define NOTE_DL1 261
#define NOTE_DL2 293
#define NOTE_DL3 329
#define NOTE_DL4 349
#define NOTE_DL5 391
#define NOTE_DL6 400
#define NOTE_DL7 493

#define NOTE_DH1 1046
#define NOTE_DH2 1174
#define NOTE_DH3 1318
#define NOTE_DH4 1396
#define NOTE_DH5 1567
#define NOTE_DH6 1700
#define NOTE_DH7 1975
//以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写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_D3,NOTE_D3,NOTE_D4,NOTE_D5,NOTE_D5,NOTE_D4,NOTE_D3,NOTE_D2,
NOTE_D1,NOTE_D1,NOTE_D2,NOTE_D3,NOTE_D3,NOTE_D2,NOTE_D2,
NOTE_D0,
NOTE_D3,NOTE_D3,NOTE_D4,NOTE_D5,NOTE_D5,NOTE_D4,NOTE_D3,NOTE_D2,
NOTE_D1,NOTE_D1,NOTE_D2,NOTE_D3,NOTE_D2,NOTE_D1,NOTE_D1,
NOTE_D0,
NOTE_D2,NOTE_D2,NOTE_D3,NOTE_D1,NOTE_D2,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D1,
NOTE_D2,NOTE_D3,NOTE_D4,NOTE_D3,NOTE_D2,NOTE_D1,NOTE_D2,NOTE_DL5,
NOTE_D0,
NOTE_D3,NOTE_D3,NOTE_D4,NOTE_D5,NOTE_D5,NOTE_D4,NOTE_D3,NOTE_D2,
NOTE_D1,NOTE_D1,NOTE_D2,NOTE_D3,NOTE_D2,NOTE_D1,NOTE_D1,

};//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

float duration[]=
{
1,1,1,1,1,1,1,1,1,1,1,1,2,0.5,1,
1,
1,1,1,1,1,1,1,1,1,1,1,1,2,0.5,1.5,
1,
1,1,1,1,1,0.5,0.5,1,1,1,0.5,0.5,1,1,1,1,1.5,
1,
1,1,1,1,1,1,1,1,1,1,1,1,2,0.5,1.5,

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

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

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

萧芸凤 发表于 2012-10-6 22:46:23

蜂鸣器是有源的还是无源的?有源的太难听了

zj一叶孤舟 发表于 2012-11-8 23:11:41

:lol,很好,学习

keaihj 发表于 2012-12-2 14:51:19

求通过网页控代码、、

keaihj 发表于 2012-12-2 14:52:52

音乐不太好听、、怎么解决听上去比较好呢?

wali 发表于 2012-12-3 07:54:41

keaihj 发表于 2012-12-2 14:52 static/image/common/back.gif
音乐不太好听、、怎么解决听上去比较好呢?

还在玩单音节?你out了 http://www.geek-workshop.com/thread-2611-1-3.html 本篇略屌

yongyuan824 发表于 2012-12-11 21:55:09

好,做个记号

zx_1923 发表于 2012-12-14 17:06:52

好贴好贴,顶了

bvjeff 发表于 2012-12-14 17:59:15

:):):):):)

天高任鸟飞 发表于 2012-12-16 18:47:00

这个不错!

葱拌豆腐 发表于 2012-12-20 16:56:57

先留个脚印,回去研究好了,做给闺女玩,肯定喜欢。

sfkchen 发表于 2012-12-21 16:03:54

请问:编绎时总出错
mid.ino: In function 'void loop()':
mid:98: error: invalid conversion from 'int*' to 'unsigned int'
mid:98: error: initializing argument 2 of 'void tone(uint8_t, unsigned int, long unsigned int)'
mid:99: error: invalid operands of types 'int' and 'float ' to binary 'operator*'
什么原因啊,新手望指教

linux先生 发表于 2013-1-25 10:59:29

高人呀,让我这个对乐理一窍不通的长见识了,

东东程 发表于 2013-1-25 11:16:03

不错,有点意思。
页: 1 2 3 [4] 5 6 7 8 9 10
查看完整版本: Arduino学习心得-简单制作各种歌曲