具有自动乐曲演奏功能的电子琴设计说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
具有自动乐曲演奏功能的电子琴设计
先给出设计结果视频: 具有自动乐曲演奏功能的电子琴-视频实录
本文为本人于2012年下学期做的EDA数字系统设计,文章详细介绍了“具有自动乐曲演奏功能的电子琴”的FPGA设计原理与方法,使用了ROM存储音符和节拍,矩阵键盘控制整个系统。
一、选题目的
电子设计自动化,简称EDA(Electronic Design Automation),发展迅速,应用围日益扩大。它以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
本文应用VHDL硬件描述语言,以QuartusⅡ8.0为开发工具设计了一个具有自动演奏乐曲功能的电子琴系统,它能将预先存储在ROM中的多首乐曲自动播放出来,并同时显示音符,此外,还具有电子琴弹奏的功能。选题新颖、实用,趣味性、综合性较强。
二、设计目标
1. 采用44矩阵键盘作为:电子琴按键,高、中、低音选择键,自动播放和电子琴弹奏功能选择键,乐曲选择键。
2. 使用ROM存储乐曲,达到只要在其中存储乐曲音符节拍的信息即可自动播放的目的,对乐曲的编码要简单易用。
3. 可自动播放《世上只有妈妈好》、《长亭送别》、《十年》三首歌曲,带选歌和自动循环播放的功能。
4. 实时显示正在播放的音符。
5. 设计要具有模块化,层次化的特点。
6. 波形仿真时采用时序仿真,以更加贴近实际,使系统的实际效果达到最佳。
三、实现方案
1. 原理框图
具有自动乐曲演奏功能的电子琴系统的原理结构框图如下:
图1 硬件系统结构框图
图2 软件系统结构框图
图3 乐曲自动播放模块结构框图
图4 乐曲弹奏模块结构框图
2. 设计流程图
具有自动乐曲演奏功能的电子琴系统的VHDL程序设计流程图如下图5:
图5 程序设计流程图
四、设计过程
1. 音乐基础知识
简谱应该说是一种比较简单易学的音乐记谱法。它的最大好处是仅用7个阿拉伯数字----1234567,就能将万千变化的音乐曲子记录并表示出来,并能使人很快记住而终身不忘;同时涉及其他的音乐元素也基本可以正确显示。简谱虽然不是出现在中国,但是好像只有在中国得到非常广泛的传播。
乐音的特性:它由四个方面组成:音高、音值、音量、音色。
音高:由物体在一定的时间震动的次数决定,震动次数多,因则高,反之,则低。
音值:即音的长短,是由音的延续时间的不同而决定的,音的延续时间长,音则长,反之,则短。
音量:即音的强与弱,由震幅的大小决定,震幅大,音则强,反之,则弱。
音色:有发音体的性质决定,发音体的形状及泛音的多少决定音色的不同,例如,小提琴、钢琴等各种乐器的音色都是不同的,在合奏时,人们可清楚地辨认。
乐音体系:在音乐使用中有固定音高的音的总和叫乐音体系。
音级:乐音体系中的各音叫音级,音级有基本音级与变化音级两种。
基本音级:在音乐中经常使用的七个具有独立名称的音叫基本音级。基本音级的名称
用字母或唱名两种方式来标记。
音名:用C、D、E、F、G、A、B来标记基本音级的叫音名,它表示一定的音高,简谱中用1,2,3,4,5,6,7来标记。
唱名:用do、re、mi、fa、sol、la、si作为音级名称的叫唱名。
音符:用以记录音的长短高低的符号叫音符(以符头在谱表上的位置来表示音的高低,以形状表示音的长短,音符有符头、符干、符尾三部分或其中某些部分组成,而在简谱中以1 2 3 4 5 6 7或其上下加点来表示不同音高,以短下划线(_)或横(—)来表示音的长短)。
下面重点介绍组成音乐的两个最基本的要素:每个音符发音的频率及其持续的时间。
1.1 音符和频率的关系
乐曲的十二平均律规定:每2 个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为。另外,简谱中的低音6的频率为440Hz,音符7到1之间、3到4之间为半音,其余为全音。由此可计算出简谱中从低音1至高音7之间每个音符的频率,如下表1所示:
表1 简谱中音符与频率的关系
1.2
表示音乐的长短需要有一个相对固定的时间概念。简谱里将音符分为全音符、二分音符、四分音符、十六分音符、三十二分音符等,如下表2。在这几个音符里面最重要的是四分音符,它是一个基本参照度量长度,即四分音符为一拍。这里一拍的概念是一个相对时间度量单位。一拍的长度没有限制,可以是1秒也可以是2秒或半秒。假如一拍是一秒的长度,那么二拍就是两秒;一拍定为半秒的话,两拍就是一秒的长度。一旦这个基础的一拍定下来,那么比一拍长或短的符号就相对容易了。正如五线谱的附点一样,数字后方加一点会将音符长度增加一半。
表2 简谱中音符长度
半拍
四分之一拍
三十二分音符八分之一拍
2. VHDL程序设计
2.1 顶层文件
采用原理图输入法设计,其原理图如下:
图6 music_player原理图
各模块的设计如下。
2.2 音符的编码及音乐的存储
2.2.1 音符的编码
休止符的编码为:0;音符长度的编码见表2。音名的编码如下表3所示:
表3音名的编码
2.2.2 音乐的存储
以十进制将音乐分别存储于note_rom和tick_rom两个模块中,前者为音符,后者为音符的长度,下面给出《世上只有妈妈好》的存储过程。在Quartus II 主窗体中选择Tools—MegaWizard Pluge-In Manager…,弹出如下对话框,单击Next继续。