组成乐曲的每一个音符的频率值(音调)及其持续的时间(音长)是乐曲演奏所需的两个基本数据,只要控制输出到扬声器的激励信号的频率高低和持续时间,就可以使扬声器发出连续的乐曲声。
1.音调的控制
乐曲是由不同音符编制而成的,音符中有7个音名:C、D、E、F、G、A、B,每个音名都有一个固定的振动频率,频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。在两个八度音之间又可以分为12个半音,每两个半音的频率比为。另外,音名A的频率为440Hz,音名B~C之间、E~F之间为半音,其余为全音。因此可以计算出简谱中从低音1~高音1之间每个音名对应的频率,如表5-4所示。
表5-4 简谱中的音频与频率的关系
所有不同频率的信号都是从同一个基准频率分频得到的。这里采用Xilinx Virtex Ⅱ-Pro开发板,所选的基准频率为100MHz的时钟频率,为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前有一个2分频的分频器。据此,可求出不同的分频系数,例如,中音1的频率为523Hz,则其分频系数为100000000÷523.3÷2=95547。
图5-65 《两只老虎》曲谱
采用以上方法可以求出《两只老虎》片段中各音名的分频系数,如表5-5所示。
表5-5 《两只老虎》片段中各音名的频率、分频系数和预置数
从表5-5可以看出,最大的分频系数为127551,故采用17位二进制计数器(Count)分频可满足需要(最大计数217-1=131071)。在表5-5中,除给出了分频比以外,还给出了对应于各个音阶频率计数器不同的预置数。预置数等于131071减去相应的分频系数,对于不同的分频系数,只要加载不同的预置数即可。
此外,对于乐曲中的休止符,可将分频系数设为0,即加载预置数131071,此时,蜂鸣器不会发声。(www.xing528.com)
2.音长的控制
乐曲中的音符不单有音调的高低,还要有音的长短,如有的音要唱四分之一拍,有的音要唱两拍等。在节拍符号中,如用×代表某个音的唱名,×下面无短横线为四分音符,有一条短横线代表八分音符,有两条横线代表十六分音符,×右边有一条短横线代表二分音符,×右边有三条短横线代表全音符,有“·”的音符为符点音符。
如果提供一个4Hz(0.25s)的时钟频率来产生四分音符的时长,则各节拍的音长如表5-6所示。
为了产生4Hz的脉冲,可以把100MHz的时钟进行12500000分频(用计数器CNT统计分频次数),变为8Hz(周期为0.125s),然后,使4Hz信号每0.125s取反一次,则变为4Hz的信号(周期为0.25s)。
表5-6 节拍的音长
控制音长可通过计数器预置数的停留时间来实现,预置数停留的时间越长,则该音符演奏的时间也越长,以演示《两只老虎》片段为例,最短的音符为四分音符(0.25s),由于没有符点音符,因此,每个音符的演奏时间都是0.25s的整数倍。
另外,为了能使演奏循环进行,需另设一个时长计数器CNT,当乐曲演奏完成时,可以自动从头开始演奏。
当reset=0时,所有输出为0;当reset=1时,该乐曲演奏电路正常工作,音符的显示由high,med,low分别代表高、中、低音符在数码管上显示出来,声音由song_out输出的频率信号送到扬声器产生。
乐曲演奏电路的原理框图如图5-66所示。
图5-66 乐曲演奏电路原理框图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。