
音符时值对照表
-
2023年3月4日发(作者:近视防控手抄报)1/9
附录:音乐模块部分
单片机发音原理:单片机演奏音乐基本是单音频率,它不包含相应幅度的谐
波频率,也就是说不能象电子琴那样能奏出多种音色的声音,但一定要弄清楚两
个概念即可,也就是“音调”和“节拍”。
·音调表示一个音符唱多高的频率。
·节拍表示一个音符唱多长的时间。
下面,就此两点,阐述说明:
一、音调
在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C
上方的A音定为标准音高,其频率f=440Hz,其余与其比较。f1和f2为两个音
符,当这两个音符的频率相差一倍时,也即f2=2×f1时,则称f2比f1高一个
倍频程。
在音乐中1与
.
1
,2与
.
2
……,正好相差一个倍频程,在音乐学中称它相差一
个八度音。在一个八度音内,有12个半音。以1—i八音区为例,12个半音是:
1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、
6—#6、#6—7、7—i。这12个音阶的分度基本上是以对数关系来划分的。如
果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根
据倍频程的关系得到其他音符基本音调的频率。
2.确定一个频率所对应的定时器的定时初值的方法
以标准音高A为例:
标准音高A的频率f=440Hz,其对应的周期为:
T=1/f=1/440=2272μs
因此,需要在单片机I/O端口输出周期为T=2272μs的方波脉冲,如下图
所示。
由上图可知,单片机上对应喇叭的I/O口来回取反的时间应为:
t=T/2=2272/2=1136μs
此处分两种方式叙述,请比较选用,其实结果相同:
Ⅰ.这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,
2/9
单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。
设振荡器频率为f
0
,则定时器的予置初值由下式来确定:
t=12×(T
ALL
–T
HL
)/f
0
式中,T
ALL
=216=65536,T
HL
为定时器待确定的计数初值。因此定时器的高
低计数器的初值为:
TH=T
HL
/256=(T
ALL
–t×f
0
/12)/256
TL=T
HL
%256=(T
ALL
–t×f
0
/12)%256
将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),
即可求出标准音高A在单片机晶振频率f
0
=12Mhz,定时器在工作方式1下的定时
器高低计数器的预置初值为:
TH
440Hz
=(65536–1136*12/12)/256=FBH
TL
440Hz
=(65536–1136*12/12)%256=90H
根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
Ⅱ.假设单片机晶振频率f
0
=12Mhz,定时器在工作方式1
计数脉冲值与频率的关系为:
N=F
I
÷2÷F
R
其中N——计数值;
F
I
——内部计时一次为1us,故其频率为1MHz;
F
R
——要产生的频率。
其计数值的求法为:
T=65536-N=65536-F
I
÷2÷F
R
则标准音高A(频率f=440Hz)的计数值为:
T=65536-N=65536-F
I
÷2÷F
R
=65536-1000000÷2÷F
R
=65536-500000/440=65536-
1136=64400=0FB90H
下面给出C调各音符频率值和定时器定时初值:(晶振频率f
0
=12Mhz,定时
器在工作方式1)
表1C调各音符频率值和定时初值对照表
C调音
3/9
对于非C调的歌曲,要对各音符的频率做相应的变化
调号——音乐上指用以确定乐曲主音高度的符号。
升C调:1=#C,也就是降D调:1=bD;277(频率)
升D调:1=#D,也就是降E调:1=bE;311
升F调:1=#F,也就是降G调:1=bG;369
升G调:1=#G,也就是降A调:1=bA;415
升A调:1=#A,也就是降B调:1=bB。466
符
频率
Hz
2622772933494
TH/TLF88BF8F2F95BF9B7FA14FA66FAB9FB03FB4AFB8FFBCFFC0B
C调音
符
11#22#344#55#66#7
频率
Hz
523553586628383
TH/TLFC43FC78FCABFCDBFD08FD33FD5BFD81FDA5FDC7FDE7FE05
C调音
符
频率
Hz
381
TH/TLFB21FE3CFE55FE6DFE84FE99FEADFEC0FE02FEE3FEF3FF02
4/9
所谓1=A,就是说,这首歌曲的“导”(即作为基调的中音DO)要唱得同A音符一样高,其它各音符依次向后递推,通
常把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。
同样是“导”,不同的调唱起来的高低是不一样的。
在递推的时候要严格按各音符间音程关系进行(全音还是半音,只有3—4和7—i之间是半音关系,其它音之间都是全音
关系),下面以1=D调进行说明。
参照上面的钢琴键盘图和表1,确定出D调各音符对应的频率值为:
(到后来制表时就以各音符对应的新频率值确定定时初值)
C
调
1
中
C
1#2
D
2#3
E
4
F
4#5
G
5#6
A
6#7
中
B
高C
#.
1高
DE.
4F
.
5
G
.
6A
.
7B
..
1
频
率
4431814801760
D
调
1
中
C
1#2
D
2#3
E
4
F
4#5
G
5#6
A
6#7
中
B
高C
#.
1
高
DE.
4
F
G.
6A
频
率
4431814801760
5/9
二、节拍
音符的节拍我们可以举例来说明。在一张乐谱中,我们经常会看到这样的表
达式,如1=C
4
4
、1=G
4
3
……等等,这里1=C,1=G表示乐谱的曲调,和我们前
面所谈的音调有很大的关联,
4
4
、
4
3
就是用来表示节拍的。以
4
3
为例加以说明,
它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:
其中1、2为一拍,3、4、5为一拍,6为一拍共三拍。1、2的时长为四
分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分
音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约
为400—500ms。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,
四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就
为100ms。若乐谱有特别说明则另行对待。如有乐谱中注明每分钟86拍,则一
拍时间为60/86s=698ms。
可见,在单片机上控制一个音符唱多长可采用循环延时的方法来
实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长
为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次
延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,
则只需调用四次延时程序,依次类推。
具体来说,
Ⅰ.每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音
符的节拍,节拍与节拍码的对照,如下表所示。
6/9
表2节拍与节拍码对照
注:上表中各音符时值的倍数关系是确定不变的,具体制表时关键要正确确定其值。
Ⅱ.以1/4拍(十六分音符)为一个基准定时单位(1DELAY),
则2/4拍(八分音符)为2DELAY,
1拍(四分音符)为4DELAY,
2拍(二分音符)为8DELAY,
4拍(全音符)为16DELAY。
1/4和1/8节拍的时间设定,如下表所示。
表3各调节拍时间设定表
1/4节拍的时间设定1/8节拍的时间设定
曲调值DELAY曲调值DELAY
调4/4125ms调4/462ms
调3/4187ms调3/494ms
调2/4250ms调2/4125ms
实现方法
通过上面介绍的音符音调和节拍的相关知识,以及它们在单片机系统中的确
定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:
1.将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数
节拍码节拍数节拍码节拍数
1(十六分音符)1/4拍为1DELAY11/8拍
2(八分音符)2/4拍21/4拍
33/4拍33/8拍
4(四分音符)1拍41/2拍
51又1/4拍55/8拍
61又1/2拍63/4拍
8(二分音符)2拍81拍
10A2又1/2拍A1又1/4拍
12C3拍C1又1/2拍
15F3又3/4拍
16(全音符)4拍
7/9
2.将他们做成数据表格,存放在存储器中
3.通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着
取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根
据需要也可循环不停地播放整个乐曲。
请注意,用单片机上实现音乐演奏关键在于,根据乐谱制作出数据表格,编
程在其次,这个过程很耗费时间和精力。
另外,对于乐曲中的休止符,一般将其音调参数设为FFH或00H,其节拍参
数与其它音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
实例说明
建立音乐的方法
(1)建立简谱对应的简谱码、T值及节拍数表,画在草稿纸上。
①先对照歌曲的简谱把其中所有出现的音符找出,从低音到高音依次排序,
确定各音的数值(编写查表程序时将此值减1,即得对应音符相对于TABL1表头
的偏移量)。
对于不是C调的歌曲,要对各音符的频率做相应的变化。
②对照歌曲的简谱确定各音符的节拍数相对于基准定时单位的倍数,从小
到大排列。
各音符时值的倍数关系是确定不变的,关键要正确确定其值。这需要懂一
点简谱知识才能准确的确定出乐谱中音符节拍数。
以歌曲兰花草为例,如下表:
简谱发音(这一列知道就行不必写出)简谱码T值节拍码节拍数
低3低音MI16402111/4拍
低4低音FA26410322/4拍
低5低音SO36426033/4拍
低6低音LA46440041拍
低7低音TI56425451又1/4拍
中1中音DO66458061又1/2拍
中2中音RE76468482拍
中3中音MI86477710A2又1/2拍
8/9
中4中音FA96482012C3拍
中5中音SOA6489815F3又3/4拍
中6中音LAB64968164拍
中7中音TIC65030
休止符不发音0关定时器
注:以四分音符为一拍,现在以1/4拍为定时的基准单位,为1DELAY。则1拍应为4倍DELAY,
依次类推。所以只要求得1/4拍的DELAY时间,其余的节拍数就是它的倍数。
(2)把各音符频率对应的定时T值建立在TABLE1表。
TABLE1:;各音符频率对应的定时值表
DW64021,64103,64260,64400
DW64524,64580,64684,64777
DW64820,64898,64968,65030
(3)根据第一步建立的表,建立乐曲对应音符节拍码表TABLE,其中简谱码(音
符)在高4位(但是此种方法只能排16个音,若乐谱中音符较多可占一个字节
来表示),节拍码(节拍数)在低4位(但此种方法也只能最大延时15个基准定
时单位的时间)。
TABLE:;歌曲兰花草的音符与节拍码表
;高4位为简谱码(音符),低4位为该音符对应的节拍数
DB42H,82H,82H,82H,84H,02,72H
DB62H,72H,62H,52H,48H
DB0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H
DB12H,0A2H,0D2H,92H,88H
DB82H,0B2H,0B2H,0A2H,84H,02H,72H
DB62H,72H,62H,52H,44H,02H,12H
DB12H,62H,62H,52H,44H,02H,82H
DB72H,62H,52H,32H,48H
DB00H
至此,需要建立的表都已完成,只需编写主程序的查表指令即可。
9/9
音乐在程序中的实现,重点就在于音符、节拍,建好表后,编程则很简单。
[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]