单片机音乐中音调和节拍的确定方法:调号-音乐上指用以确定乐曲主音高度的符号。
很明显一个八度就有12个半音。
A、B、C、D、E、F、G。经过声学家的研究,全世界都用这些字母来表示固定的音高。比如,A这个音,标准的音高为每秒钟振动440周。
升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,
C 262 #C277 D 294 #D(bE)311 E 330 F 349 #F369 G 392 #G415
A 440. #A466 B 494
所谓1=A,就是说,这首歌曲的“导”要唱得同A一样高,人们也把这首歌曲叫做A调歌曲,或叫“唱A调”。1=C,就是说,这首歌曲的“导”要唱得同C一样高,或者说“这歌曲唱C调”。同样是“导”,不同的调唱起来的高低是不一样的。
各调的对应的标准频率为:
单片机演奏音乐时音调和节拍的确定方法
经常看到一些刚学单片机的朋友对单片机演奏音乐比较有兴趣,本人也曾是这样。在此,本人将就这方面的知识做一些简介,但愿能对单片机演奏音乐比较有兴趣而又不知其解的朋友能有所启迪。
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把中央C上方的A音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1高一个倍频程, 在音乐中1(do)与 ,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个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。
知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?一般说来,常采用的方法就是通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将定时器予置不同的定时值就可实现。那么怎样确定一个频率所对应的定时器的定时值呢?以标准音高A为例:
A的频率f = 440 Hz,其对应的周期为:
T = 1/ f = 1/440 =2272μs
由上图可知,单片机上对应蜂鸣器的I/O口来回取反的时间应为:
t = T/2 = 2272/2 = 1136μs
这个时间t也就是单片机上定时器应有的中断触发时间。一般情况下,单片机奏乐时,其定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设振荡器频率为f0,则定时器的予置初值由下式来确定:
t = 12 *(TALL – THL)/ f0
式中TALL = 216 = 65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初值为:
TH = THL / 256 = ( TALL – t* f0/12) / 256
TL = THL % 256 = ( TALL – t* f0/12) %256
将t=1136μs代入上面两式(注意:计算时应将时间和频率的单位换算一致),即可求出标准音高A在单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值为 :
TH440Hz = (65536 – 1136 * 12/12) /256 = FBH
TL440Hz = (65536 – 1136 * 12/12)%256 = 90H
根据上面的求解方法,我们就可求出其他音调相应的计数器的予置初值。
音符的节拍我们可以举例来说明。在一张乐谱中,我们经常会看到这样的表达式,如1=C 、1=G …… 等等,这里1=C,1=G表示乐谱的曲调,和我们前面所谈的音调有很大的关联, 、 就是用来表示节拍的。以 为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:
其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
可见,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。
通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
下面给出部分音符(三个八度音)的频率以及以单片机晶振频率f0=12Mhz,定时器在工作方式1下的定时器高低计数器的予置初值 :
C调音符
频率Hz 262 277 293 311 329 349 370 392 415 440 466 494
TH/TL F88B F8F2 F95B F9B7 FA14 FA66 FAB9 FB03 FB4A FB8F FBCF FC0B
C调音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7
频率Hz 523 553 586 621 658 697 739 783 830 879 931 987
TH/TL FC43 FC78 FCAB FCDB FD08 FD33 FD5B FD81 FDA5 FDC7 FDE7 FE05
C调音符
频率Hz 1045 1106 1171 1241 1316 1393 1476 1563 1658 1755 1860 1971
TH/TL FB21 FE3C FE55 FE6D FE84 FE99 FEAD FEC0 FE02 FEE3 FEF3 FF02
资源简介:单片机音乐中音调和节拍的确定方法:调号-音乐上指用以确定乐曲主音高度的符号。很明显一个八度就有12个半音。A、B、C、D、E、F、G。经过声学家的研究,全世界都用这些字母来表示固定的音高。比如,A这个音,标准的音高为每秒钟振动440周。 升C调:1=#C,也就...
上传时间: 2013-10-20
上传用户:哈哈haha
资源简介:精通MATLAB 张志涌 入门经典教程 超清书签版
上传时间: 2013-05-15
上传用户:eeworm
资源简介:通信原理课件 PPT版
上传时间: 2013-04-15
上传用户:eeworm
资源简介:简易电子琴学习
上传时间: 2013-11-01
上传用户:xiaozhiqban
资源简介:给予MSP430F147的串口通讯程序,能帮助你了解MSP430系列单片机和串口通讯的基本方法
上传时间: 2015-04-17
上传用户:yyq123456789
资源简介:1.24位真彩色->256色灰度图。 2.预处理:中值滤波。 3.二值化:用一个初始阈值T对图像A进行二值化得到二值化图像B。 初始阈值T的确定方法是:选择阈值T=Gmax-(Gmax-Gmin)/3,Gmax和Gmin分别是最高、最低灰度值。 该阈值对不同牌照有一定的适应性,能够保证背景...
上传时间: 2014-01-08
上传用户:songrui
资源简介:单片机音乐 用于播放简单的音乐 实现音乐盒功能
上传时间: 2016-11-20
上传用户:1583060504
资源简介:PIC单片机内部SPI通信接口的使用方法(与93c46EEPROM接口)
上传时间: 2014-01-13
上传用户:wl9454
资源简介:PIC单片机内部IIC通信接口的使用方法(24cxxEEPROM接口)
上传时间: 2014-01-12
上传用户:凌云御清风
资源简介:TMS320C5402与单片机SPI串口通信的实现方法
上传时间: 2013-12-01
上传用户:change0329
资源简介:讨论了BP 小波神经网络在训练过程中减小误差函数时最优方向的确定和自适应调整学习率的方法。 首先论证了小波神经网络的数学基础,然后讨论了BP 小波神经网络的学习过程,重点讨论了减小误差函数最优方 向的确定方法,即如何保证步长方向与负梯度方向一致,由此...
上传时间: 2014-01-22
上传用户:金宜
资源简介:结合为空-空多机试飞研制的实时差分GPS无线数据链,介绍了UHF数据链作用距离、天线增益及方向图、传播路径损耗及裕量等几个重要性能参数的确定方法,可为UHF数据链设计提供参考。
上传时间: 2013-11-14
上传用户:butterfly2013
资源简介:Labview及Proteus软件环境下单片机串口通讯的仿真方法
上传时间: 2013-06-27
上传用户:eeworm
资源简介:51单片机控制GSM模块TC35的方法。值得一看,
上传时间: 2013-04-24
上传用户:F0717007
资源简介:cpld与单片机8051的通信的设计方法 以及cpld和单片机的端口对应
上传时间: 2013-09-01
上传用户:wettetw
资源简介:89C51 单片机IO 口模拟串行通信的实现方法
上传时间: 2013-11-08
上传用户:座山雕牛逼
资源简介:提高PIC16C711单片机片内AD分辨率的方法。
上传时间: 2013-11-11
上传用户:kang1923
资源简介:提出一种基于凌阳单片机的步进电机加减速的控制方法。采用凌阳科技推出的16位结构工控单片机SPMC75F2413A为控制器,由Allegro公司生产的两相步进电机专用驱动器件SLA7042M构成步进电机的驱动电路,在传统的3段直线加减速控制算法基础上增加至7段S形曲线加减速...
上传时间: 2013-12-08
上传用户:jiangfire
资源简介:摘要:步进电机是工业自动化、智能仪器仪表及家用电器中重要的执行元件,微机控制其运行可提高系统控制的准确性和实时性;单片机作为微型计算机发展的一个重要分支,在智能仪表、机电一体化产品、实时控制以及分布式系统中有着广泛的应用。论述单片机控制步进...
上传时间: 2013-10-21
上传用户:gaoliangncepu
资源简介:摘要:通过利用VC实现PC机与多单片机间串行通信方法的探讨,给出了通信协议以及用VC和MCS51汇编语言编写的部分通信程序,经验证明了程序的稳定性、可靠性以度通信的实时性,获得了满意的设计效果。关键词:串行通信;PC机:单片机;VC
上传时间: 2013-10-24
上传用户:zhangliming420
资源简介:摘要:介绍了在同一系统内,MCS51系列两单片机之间采用单向并行通信接口、主从双向并行通信接口、无主从双向并行通信操作实现双机互连的方法,分析了在每一种通信接口工作方式下数据传送的特点。在三种并行通信接口为单片机应用系统扩充硬件资源的设计提供了...
上传时间: 2013-11-24
上传用户:wincoder
资源简介:MCS51系列单片机软件控制复位的可靠方法:文章指出了一种广泛流传的误解:在MCS-51系列单片机中,只要用指令使程序从起始地址开始执行,就可以复位单片机,摆脱干扰。通过实验,揭示了软件控制复位的可靠方法。有的单片机(如8098)有专门的复位指令,某些增强...
上传时间: 2013-11-03
上传用户:sevenbestfei
资源简介:摘 要:单片机多机通讯一般采用串行总线方式,但在通讯距离短,通讯数据量大,通讯速率高的场合也会用到多机并行通讯。本文介绍一种采用简单逻辑电路实现单片机多机并行通讯的方法。关键词:并行通讯,三态缓冲寄存器,双端口存储器,总线隔离1、 简介本文介...
上传时间: 2013-10-31
上传用户:hxy200501
资源简介:详细介绍了pic单片机开发软件mplab6的使用方法,很难得
上传时间: 2015-02-07
上传用户:love_stanford
资源简介:89C51 单片机I_O 口模拟串行通信的实现方法
上传时间: 2013-12-24
上传用户:wyc199288
资源简介:单片机音乐程序的设计与实验,包含音乐程序的设计原理。
上传时间: 2015-03-23
上传用户:lingzhichao
资源简介:二次指数平滑预测法和三次指数平滑预测法是普遍的预测方法,应用很广,本代码还包含其平滑系数的确定
上传时间: 2014-01-08
上传用户:离殇
资源简介:本程序给出了一种msp430单片机模拟实现i2c总线的一种方法
上传时间: 2015-03-29
上传用户:thuyenvinh
资源简介:Motorola 单片机 掌握I/O口的基本使用方法
上传时间: 2014-06-30
上传用户:pompey
资源简介:六首唱歌的音乐程序循环,是在单片机学习板子上开发的,按一个键(p3.4)可以换歌曲。
上传时间: 2013-12-18
上传用户:gyq