乐曲自动演奏器一、功能介绍使用FPGA设计一个乐曲自动演奏控制器,将源程序下载至FPGA器件中,实现乐曲自动演奏
(本设计的乐曲是《友谊天长地久》的部分音乐)乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的2个基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间
频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率之间也有固定的对应关系
所有不同频率的信号都是从同一基准频率分频而得来的,由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算的到的分频数进行四舍五入取整,基准频率和分频系数应综合考虑加以选择,从而保证音乐不会走调
如在4MHz时钟下,中音1(对应的频率值为523
3Hz)的分频系数应该为:4000000/(2*523
3)=0xd3821,这样只需对系统时钟进行3821次分频即可得到所要的中音1
至于其他音符,同样可求出对应的分频系数,这样利用程序可以很轻松地得到对应的乐声
此外,在程序中设置了一个状态机,每250ms改变一个状态(即一个节拍),组成乐曲的每个音符的频率值(音调)相对应于状态机的每一个状态
只要让状态机的状态按顺序转换,就可以自动播放音乐了
《友谊天长地久》乐谱见下表(注:N一拍;N两拍;N﹒四拍;N﹒八拍;N为乐谱
由于芯片存储容量太小,源程序只加入乐谱的一部分音符)《友谊天长地久》乐谱05.|1
6.65..|1
6.65..|1
简谱中的音名与频率的关系音名频率/Hz分频数低音539216’d5102低音644016’d4545中音1523
516’d3821中音2587
316’d3373中音3659
316’d3033