╰☆_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