基于fpga的音乐播放器的设计-毕业设计论文内容摘要:

因此 ,在想控制音符的音长 ,就必须知道乐曲的速度和每个音 符所对应的节拍数 ,在这个设计中所播放的乐曲的最短的音符为四分音符 ,如果将全音符的持续时间设为 1s 的话 ,那么一拍所应该持续的时间为 ,则只需要再提供一个 4HZ的时钟频率即可产生四分音符的时长 .要想让系统知道现在应该播放哪个音符 ,而这个音符持续的时间应该是多少 ,就必须编写乐曲文件 ,在乐曲文件中音符是按地址存放的 ,当系统工作时就按 4Hz 的频率依次读取简谱 ,当系统读到某个音符的简谱时就对应发这个音符的音调 ,持续时间为 秒 ,而如果在曲谱文件中这个音符为三拍音长 ,那又该如何控制呢。 其实只要将该音符连续书写 三遍 ,这时系统读乐曲文件的时候就会连续读到三次 ,也就会发三个 秒的音长 ,这时我们听上去就会持续了三拍的时间 ,通过这样一个简单的操作就可以控制音乐的音长了 . 6 系统结构 图 图 31 系统结构 图 7 第四章 具体实现 系统模块组成 本系统主要由 四 个功能模块组成 :音符数据地址发生器模块 ,实现按节拍读乐谱的功能 ,预置数查表电路电路模块 ,提供分频预置数 ,实现乐曲译码输出 ,发声频率产生模块 ,产生发音频率 ,实现乐曲播放 ,简易电子琴功能模块 实现简易电子琴功能 .系统功能模块组成图如(图 41) . 图 41系统功能模块组成图 该系统有三个输入 ,五个输出端口 : 1 三输入端口分别是 :CLK 4HZ 端口 ,作为节拍脉冲信号输入端口 ,CLK 12MHZ 端口 ,作为发音频率初始信号输入端口 ,KEYIN 输入端口 ,作为简易电子琴音符输入端口 . 2 五输出端口分别是 : CODE输出端口 ,作为音符简码输出 LED显示端口 ,HIGH输出端口 ,作为音符高 8 度指示端口 ,SPKS 输出端口 ,作为《 生日快乐 》乐曲的声音输出端口 ,BUZZOUT 输出端口 ,作为简易电子琴声音输出端口 ,LEDOUT 输出端口 ,作为简易电子 琴输入音符显示端口 . 8 各模块分析与设计 定制 《生日快乐》 音符数据 ROM 为了实现乐曲的播放 ,首先需要将曲谱定制到音符数据 ROM 里面 ,然后才能按照一定的节拍从 ROM 中读出曲谱 .由于所选曲子中不含高音 ,转换关系如表 41) . 表 41音符与 ROM 中数据转换关系 低音 ROM 中十进制表示 ROM 中十六进制表示 中音 ROM 中十进制表示 ROM 中十六进制表示 1 1 01 1 8 08 2 2 02 2 9 09 3 3 03 3 10 0A 4 4 04 4 11 0B 5 5 05 5 12 0C 6 6 06 6 13 0D 7 7 07 7 14 0E 在 PLUSⅡ+MAX 下定制的 LPM_ROM 图 41songer 模块仿真波形图 波形分析 : 此乐谱发生器模块的功能是输出存储在 LPM_ROM 中的各个音符数据 ,由上面的仿真波形图可看到 《生日快乐》 乐曲中的第一个音符为 3即为 00011此音在逻辑中停留了 4个时钟 ,那么相应随着程序中的地址计数器按 4Hz的时钟频率作加法计数时 ,即随地址 递增时 ,将从音符数据 ROM 中将连续取出 4个音符 00011,乐曲中的第二个音符为 5即为 00101此音在逻辑中停留了 3个时钟 ,相应地 ,将从音符数据 ROM中将连续取出 3个音符 00101等其它状态时 ,仿真波形图证明了模块的功能 . 9 音符数据地址发生器模块 NOTETABS 图 42 NOTETABS 元件符号 端口说明 : CLK 4HZ 端口 :作为节拍脉冲信号输入端口 , RST 端口 :作为 从头开始播放歌曲 脉冲信号输入端口 , SEL 端口 :作为 播放第二首歌 脉冲信号输入端口 , TONETABA [4..0]端口 :作为音符数据地址的输出端口 , NOTETABS 中设置了一个 8 位二进制计 数器(计数最大值 138) ,作为音符数据的地址发生器 .随着 NOTETABS 中的计数器按照 4HZ 的时钟速率作加法计数时 ,每读一个数据 ,音符持续时间为 ,如音符数据中的中音 3,为一拍 ,持续时间 1秒 ,所以 ,音符数据 ROM 中需要重复写四次地址 0A,随着 4HZ 时钟速率读取地址递增 ,音符数据 ROM 中的音符数据将通过模块 NOTETABS 输向 TONETABA 模块 .音符数据地址发生器模块 NOTETABS 的仿真波形如(图 43)所示 : 图 43音符数据地址发生器模块仿真波形 图 10 预置数查表电路电路模块 TONETABA 图 44TONETABA 生成元件符号 端口说明 : INDEX[4..0]端口 :作为上一级音符数据地址的输入端 , CODE[4..0]端口 :作为音符数据简谱码的输出显示端 , HIGH 端口 :作为音符数据简谱码高 8度的输出显示端 , TONE[10..0]端口 :作为音符数据分频预置数的输出端 . 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定 ,(图 44)中模块TONETABA 的功能首先是为 SPEAKERA 提供决定音符发音的分频预置数 ,而此。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。