名称:可以弹奏高中低音电子琴设计Verilog代码Quartus 开发板(文末获取)
软件:Quartus
语言:Verilog
代码功能:
可以弹奏高中低音电子琴设计
使用21个键,7个键为一个音调,一共三种音调,高中低。
在此,首先介绍一下硬件电路的发声原理。我们知道,声音的频谱范围约在几十到几千赫兹,如果将一定频率的方波接上扬声器就能发出相应频率的声音。而乐曲中的每一音符对应着一个确定的频率,因此,要想FPGA 发出不用音符的音调,实际上只要控制它输出相应音符的频率即可(音符和频率的关系见下表)
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。而简易电子琴,工作原理与乐曲演奏一样,只是将固定预置乐曲变成了手动按键输入,节拍时间取决于按键的停留时间,如果合适,同样能播放出完整的歌曲来。频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1 和高音1)之间的频率相差一倍。在两个八度音之间又分为十二个半音。另外,音名A(简谱中的低音6)的频率为440Hz,音名B 到C 之间、E 到F 之间为半音,其余为全音。由此可以计算出简谱中从低音1 到高音1 之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,因此必须将计算得到的分频数四舍五入取整。因此,要想FPGA 发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。本文中选取50MHZ 作为CLK 的分频计数器的输入分频信号。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。采用50M 时钟,分频表如下所示:
表 1 频率与分频系数
音名 |
频率/Hz |
分频 系数 |
音名 |
频率/Hz |
分频 系数 |
音名 |
频率/Hz |
分频 系数 |
低音 1 |
261.6 |
191132 |
中音 1 |
523.3 |
95548 |