基于VHDL的简易音乐播放器_第1页
基于VHDL的简易音乐播放器_第2页
基于VHDL的简易音乐播放器_第3页
基于VHDL的简易音乐播放器_第4页
基于VHDL的简易音乐播放器_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EDA技术实用教程课程设计简易音乐播放器电子12-11206040124简易音乐播放器设计1. MIDI概述MIDI(Musical Instrument Digital Interface)乐器数字接口 ,是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的。MIDI是编曲界最广泛的音乐标准格式,可称为“计算机能理解的乐谱”。它用音符的数字控制信号来记录音乐。一首完整的MIDI音乐只有几十KB大,而能包含数十条音乐轨道。MIDI应用也比较广泛,电视晚会的音乐编导可以用MIDI功能辅助音乐创作,或按MIDI标准生成音乐数据传播媒介,或直接进行乐曲演奏。如果在计算机上装备了高级的MIDI

2、软件库,可将音乐的创作、乐谱的打印、节目编排、音乐的调整、音响的幅度、节奏的速度、各声部之间的协调、混响由MIDI来控制完成。利用MIDI技术将电子合成器、电子节奏机(电子鼓机)和其他电子音源与序列器连接在一起即可演奏模拟出气势雄伟、音色变化万千的音响效果,又可将演奏中的多种按键数据存储起来,极大的改善了音乐演奏的能力和条件。2. 工作原理MIDI 音乐是Windows下的一种合成音乐,由于它通过记谱的方式来记录一段音乐。因此与wave音乐相比,它可以极大的减少存储容量。MIDI 音乐的基本原理为:组成乐曲的每一个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏的两个基本数据,因此只

3、要控制输出到扬声器的激励信号频率的高低和每一个频率信号持续时间,就可以使扬声器发生连续的乐曲。图1 是歌曲生日快乐歌开头一句的简谱。由图1 可知,该乐典涉及:中音5,6 ,7 ;高音1,2,3,4,5 。以此为例下面介绍在本音乐发生器芯片中音乐的形成过程。前两个音符为中音5 ,1/16 音符,它对应的编码为1000 ,所占的脉冲个数为2 ,这样逐个将以上的简谱翻译成代码如下:|1000 1000 1001 1001 1000 1000 |1011 1011 1010 1010 1010 1010|1000 1000 1001 1001 1000 1000 |1100 1100 1011 101

4、1 1011 1011|1000 1000 1111 1111 1101 1101 |1011 1011 1010 1010 1001 1001|1110 1110 1101 1101 1011 1011 |1100 1100 1011 1011 1011 1011|图1 生日快乐歌歌谱在节奏时钟脉冲的控制下,将每个代码所对应的分频系数逐一赋给基频,得到对应的音调,这样连续起来就形成一段美妙的音乐。本设计的关键是要准确地产生音乐中各音符所对应的频率信号,并根据乐曲要求按节拍输出。为了减少系统复杂性,本设计根据可变模值计数器的原理,按照乐曲要求定时改变计数器的预置数,即可产生乐曲所需要的频率信号

5、。芯片原理框图如图2 所示。图2 中节拍控制电路产生节拍定时信号;音符产生电路按节拍要求产生乐曲所需要的音符;预值数产生电路受音符控制,产生该音符频率相对应的预置数,送计数器的置入数据输入端。音符频率发生器根据不同的预置数产生相应的频率信号,从而完成乐曲的演奏功能。图2 播放器原理3. 音乐编码模块此模块包括节拍控制电路和音符产生电路。节拍控制电路以乐曲中最短音符的节拍为基准,产生乐曲所需要的全部节拍。因为乐曲生日快乐歌中最短音符为1/4 节拍,全曲共有48 个1/4 节拍,故节拍控制器至少需要产生48 个有效状态。考虑到一遍演奏完需要间隔时间,所以选定节拍控制计数器CNT1 的计数状态为48

6、 + 4 个,其中间隔时间为4个有效状态。本例要求演奏时能循环进行,因此需要另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。音符产生电路采用查找表形式.在节拍控制产生电路的节拍信号作用下,按乐曲中音符持续时间的长短输出相应音符名称。以乐曲中前两个音节为例,其音符输出查找表如表1 所示。4. 音调发生模块此模块包括预值数产生电路和频率发生器。预值数产生电路设计采用查找表形式,按照音符的频率要求产生相应的预置数。根据可变模值计数器的设计原理及音符的分频系数,可计算出乐曲生日快乐歌中各音符的预置数如表2 所示。表2 音频的分频和预置数频率发生器由可变模值计数器实现.由于系统要求产出

7、的信号频率较高,因此选用2 MHz 高频脉冲信号作为可变模值计数器的计数脉冲。此片段内各音阶频率及相应的分频如表3 所示。为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,考虑到输出信号是脉冲极窄的脉冲式信号,为了有利于驱动扬声器,可以在到达扬声器之前,有一个二分的分频器,或在计数器输出端外加一个D触发器也可以均衡占空比。当然,如果输出到扬声器的信号采用正弦波代替对称方波将会有更好的效果。表3 音符与频率对照表由于最大的分频系数为5102,故采用13 位十二进制计数器已能满足分频要求。在表3 中除给出了分频比以外,还给出了相应于各个音节频率时计数器不同的初始值。对于不同的分频系数

8、,只要加载不同的初始值即可。采用加载初始值而不将分频输出译码反馈,一个常用技巧。表中“0”表示休止符。对于乐曲的休止符。只要将分频系数设为0,即初始值为213-1=8191,此时扬声器将不会发声。5. 顶层文件设计顶层文件采用原理图设计,根据图1所示原理框图,可设计出MIDI 音乐,发生器顶层原理如图3所示。为了方便设计,图3中将节拍控制电路和音符产生电路设计在同一模块中,称为TONE 模块。音调发生器电路称为FPQ模块,彩灯控制电路称为LIGH模块。图3 顶层远离6. 底层文件TONE 模块中的CLK 为4Hz 信号输入端,SEL3 0为音符输出端,其输出用于驱动FPQ 和LIGHT模块。图

9、4为其时序仿真,其中SEL为各个音符的二进制编码。从图4 可以看出,仿真结果和设计要求一致。前两个脉冲SEL输出为1000,即为中音5的二进制编码,第三第四个脉冲下SEL 为1001,对应中音6,依次下去,第五第六个脉冲下SEL为1000,对应中音5,第七第八个脉冲下SEL 为1011,对应高音1,后面四个脉冲下SEL为1010对应中音7。COUNT为节拍控制计数器。图4 音乐编码器仿真FPQ模块中的CLKM为2 MHz输入端,MUS为音调输出端。图5为其时序仿真,在这里只对音符中音5仿真,此时其编码为1000,NUM为其分频系数1276。当CT 计数到1276时,MUS就输出计数脉冲,其效果

10、就是频率784 的信号。图5 音调发生器仿真7. 部分代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity zy4668_music1 isport(clk:in std_logic; huifang: in std_logic; qiege: in std_logic; xuhuan: in std_logic; zanti: in std_logic; xuan: in std_logic_vector(1 downto 0

11、); index:out std_logic_vector(3 downto 0);end zy4668_music1;architecture behav of zy4668_music1 issubtype word is integer range 0 to 15;type memory is array(0 to 565) of word;signal rom:memory;signal clk_4Hz:std_logic;signal clk_cnt:integer range 0 to 249;signal adr:integer range 0 to 600;signal sar

12、:integer range 0 to 600;signal sar1:integer range 0 to 600;beginprocess(clk,zanti)beginif zanti='1' thenif clk'event and clk='1' then if clk_cnt=249 then clk_cnt<=0;clk_4Hz<='1'elseclk_cnt<=clk_cnt+1;clk_4Hz<='0'end if;end if;end if;end process;process

13、(clk_4Hz,xuan,zanti,xuhuan,qiege,huifang)beginif zanti='1' thenif xuan="00" and qiege='0' then adr<=416;sar<=558;sar1<=416; elsif xuan="01" and qiege='0' thenadr<=0;sar<=138;sar1<=0;elsif xuan="10" and qiege='0' thenadr&

14、lt;=139;sar<=279;sar1<=139;elsif xuan="11" and qiege='0' thenadr<=280;sar<=415;sar1<=280;else if clk_4hz'event and clk_4hz='1' then if huifang='1' then if xuhuan='1' then if adr=sar then adr<=sar1; else adr<=adr+1; end if; else if ad

15、r=558 then adr<=0; else adr<=adr+1; end if; if adr>415 then sar<=558;sar1<=416; elsif adr>279 then sar<=415;sar1<=279; elsif adr>138 then sar<=279;sar1<=139; else sar<=138;sar1<=0; end if; end if; else if adr=sar1 then adr<=sar1; else adr<=adr-1; end if;

16、end if; end if;end if; end if;end process;index<=conv_std_logic_vector(rom(adr),4);rom(0)<=3;rom(1)<=3;rom(2)<=3;rom(3)<=3;rom(4)<=5;rom(5)<=5;rom(6)<=5;rom(7)<=6;rom(8)<=8;rom(9)<=8;rom(10)<=8;rom(11)<=9;rom(12)<=6;rom(13)<=8;rom(14)<=5;rom(15)<=5;

17、rom(16)<=12;rom(17)<=12;rom(18)<=12;rom(19)<=15;rom(20)<=13;rom(21)<=12;rom(22)<=10;rom(23)<=12;rom(24)<=9;rom(25)<=9;rom(26)<=9;rom(27)<=9;rom(28)<=9;rom(29)<=9;rom(30)<=9;rom(31)<=0;rom(32)<=9;rom(33)<=9;rom(34)<=9;rom(35)<=10;rom(36)<

18、=7;rom(37)<=7;rom(38)<=6;rom(39)<=6;rom(40)<=5;rom(41)<=5;rom(42)<=5;rom(43)<=6;rom(44)<=8;rom(45)<=8;rom(46)<=9;rom(47)<=9;rom(48)<=3;rom(49)<=3;rom(50)<=8;rom(51)<=8;rom(52)<=6;rom(53)<=5;rom(54)<=6;rom(55)<=8;rom(56)<=5;rom(57)<=5;rom

19、(58)<=5;rom(59)<=5;rom(60)<=5;rom(61)<=5;rom(62)<=5;rom(63)<=5;rom(64)<=10;rom(65)<=10;rom(66)<=10;rom(67)<=12;rom(68)<=7;rom(69)<=7;rom(70)<=9;rom(71)<=9;rom(72)<=6;rom(73)<=8;rom(74)<=5;rom(75)<=5;rom(76)<=5;rom(77)<=5;rom(78)<=5;rom(7

20、9)<=5;rom(80)<=3;rom(81)<=5;rom(82)<=3;rom(83)<=3;rom(84)<=5;rom(85)<=6;rom(86)<=7;rom(87)<=9;rom(88)<=6;rom(89)<=6;rom(90)<=6;rom(91)<=6;rom(92)<=6;rom(93)<=6;rom(94)<=5;rom(95)<=6;rom(96)<=8;rom(97)<=8;rom(98)<=8;rom(99)<=9;rom(100)<

21、;=12;rom(101)<=12;rom(102)<=12;rom(103)<=10;rom(104)<=9;rom(105)<=9;rom(106)<=10;rom(107)<=9;rom(108)<=8;rom(109)<=8;rom(110)<=6;rom(111)<=5;rom(112)<=3;rom(113)<=3;rom(114)<=3;rom(115)<=3;rom(116)<=8;rom(117)<=8;rom(118)<=8;rom(119)<=8;rom(12

22、0)<=6;rom(121)<=8;rom(122)<=6;rom(123)<=5;rom(124)<=3;rom(125)<=5;rom(126)<=6;rom(127)<=8;rom(128)<=5;rom(129)<=5;rom(130)<=5;rom(131)<=5;rom(132)<=5;rom(133)<=5;rom(134)<=5;rom(135)<=5;rom(136)<=0;rom(137)<=0;rom(138)<=0;rom(139)<=10;rom(1

23、40)<=10;rom(141)<=11;rom(142)<=12;rom(143)<=12;rom(144)<=11;rom(145)<=10;rom(146)<=9;rom(147)<=8;rom(148)<=8;rom(149)<=9;rom(150)<=10;rom(151)<=10;rom(152)<=9;rom(153)<=9;rom(154)<=9;rom(155)<=10;rom(156)<=10;rom(157)<=11;rom(158)<=12;rom(159)

24、<=12;rom(160)<=11;rom(161)<=10;rom(162)<=9;rom(163)<=8;rom(164)<=8;rom(165)<=9;rom(166)<=10;rom(167)<=9;rom(168)<=8;rom(169)<=8;rom(170)<=8;rom(171)<=9;rom(172)<=9;rom(173)<=10;rom(174)<=8;rom(175)<=9;rom(176)<=10;rom(177)<=11;rom(178)<=10;

25、rom(179)<=8;rom(180)<=9;rom(181)<=10;rom(182)<=11;rom(183)<=10;rom(184)<=9;rom(185)<=8;rom(186)<=9;rom(187)<=5;rom(188)<=10;rom(189)<=10;rom(190)<=10;rom(191)<=11;rom(192)<=12;rom(193)<=12;rom(194)<=11;rom(195)<=10;rom(196)<=9;rom(197)<=8;rom(

26、198)<=8;rom(199)<=9;rom(200)<=10;rom(201)<=9;rom(202)<=8;rom(203)<=8;rom(204)<=8;rom(205)<=10;rom(206)<=10;rom(207)<=11;rom(208)<=12;rom(209)<=12;rom(210)<=11;rom(211)<=10;rom(212)<=9;rom(213)<=8;rom(214)<=8;rom(215)<=9;rom(216)<=10;rom(217)&l

27、t;=10;rom(218)<=9;rom(219)<=9;rom(220)<=9;rom(221)<=10;rom(222)<=10;rom(223)<=11;rom(224)<=12;rom(225)<=12;rom(226)<=11;rom(227)<=10;rom(228)<=9;rom(229)<=8;rom(230)<=8;rom(231)<=9;rom(232)<=10;rom(233)<=9;rom(234)<=8;rom(235)<=8;rom(236)<=8;r

28、om(237)<=9;rom(238)<=9;rom(239)<=10;rom(240)<=8;rom(241)<=9;rom(242)<=10;rom(243)<=11;rom(244)<=10;rom(245)<=8;rom(246)<=9;rom(247)<=10;rom(248)<=11;rom(249)<=10;rom(250)<=9;rom(251)<=8;rom(252)<=9;rom(253)<=5;rom(254)<=10;rom(255)<=10;rom(256

29、)<=10;rom(257)<=11;rom(258)<=12;rom(259)<=12;rom(260)<=11;rom(261)<=10;rom(262)<=9;rom(263)<=8;rom(264)<=8;rom(265)<=9;rom(266)<=10;rom(267)<=9;rom(268)<=8;rom(269)<=8;rom(270)<=8;rom(271)<=8;rom(272)<=8;rom(273)<=8;rom(274)<=9;rom(275)<=10

30、;rom(276)<=9;rom(277)<=8;rom(278)<=8;rom(279)<=8;rom(280)<=6;rom(281)<=6;rom(282)<=6;rom(283)<=7;rom(284)<=8;rom(285)<=8;rom(286)<=8;rom(287)<=6;rom(288)<=8;rom(289)<=8;rom(290)<=7;rom(291)<=6;rom(292)<=7;rom(293)<=7;rom(294)<=3;rom(295)<=0

31、;rom(296)<=7;rom(297)<=7;rom(298)<=7;rom(299)<=8;rom(300)<=9;rom(301)<=9;rom(302)<=9;rom(303)<=7;rom(304)<=9;rom(305)<=9;rom(306)<=8;rom(307)<=7;rom(308)<=6;rom(309)<=6;rom(310)<=6;rom(311)<=6;rom(312)<=10;rom(313)<=10;rom(314)<=13;rom(315)<

32、;=13;rom(316)<=12;rom(317)<=12;rom(318)<=13;rom(319)<=12;rom(320)<=11;rom(321)<=11;rom(322)<=10;rom(323)<=9;rom(324)<=10;rom(325)<=10;rom(326)<=6;rom(327)<=6;rom(328)<=0;rom(329)<=11;rom(330)<=11;rom(331)<=9;rom(332)<=10;rom(333)<=10;rom(334)<

33、=10;rom(335)<=8;rom(336)<=7;rom(337)<=3;rom(338)<=8;rom(339)<=7;rom(340)<=6;rom(341)<=6;rom(342)<=6;rom(343)<=6;rom(344)<=0;rom(345)<=0;rom(346)<=0;rom(347)<=0;rom(348)<=6;rom(349)<=6;rom(350)<=6;rom(351)<=7;rom(352)<=8;rom(353)<=8;rom(354)<

34、;=8;rom(355)<=6;rom(356)<=8;rom(357)<=8;rom(358)<=7;rom(359)<=6;rom(360)<=7;rom(361)<=7;rom(362)<=3;rom(363)<=0;rom(364)<=7;rom(365)<=7;rom(366)<=7;rom(367)<=8;rom(368)<=9;rom(369)<=9;rom(370)<=9;rom(371)<=7;rom(372)<=9;rom(373)<=9;rom(374)<

35、;=8;rom(375)<=7;rom(376)<=6;rom(377)<=6;rom(378)<=6;rom(379)<=6;rom(380)<=10;rom(381)<=10;rom(382)<=13;rom(383)<=13;rom(384)<=12;rom(385)<=12;rom(386)<=13;rom(387)<=12;rom(388)<=11;rom(389)<=11;rom(390)<=10;rom(391)<=9;rom(392)<=10;rom(393)<=1

36、0;rom(394)<=6;rom(395)<=6;rom(396)<=0;rom(397)<=11;rom(398)<=11;rom(399)<=9;rom(400)<=10;rom(401)<=10;rom(402)<=10;rom(403)<=8;rom(404)<=7;rom(405)<=3;rom(406)<=8;rom(407)<=7;rom(408)<=6;rom(409)<=6;rom(410)<=6;rom(411)<=6;rom(412)<=0;rom(413)

37、<=0;rom(414)<=0;rom(415)<=0;rom( 416)<=6;rom( 417)<=7;rom(418)<=8;rom( 419)<=8;rom(420) <=9;rom( 421)<=8;rom( 422)<=7;rom( 423)<=5;rom( 424)<=3;rom( 425)<=6;rom(426)<=6;rom(427)<=6;rom( 428) <=6;rom( 429)<=6;rom( 430)<=7;rom( 431)<=8;rom( 432)

38、<=8;rom( 433)<=9;rom( 434)<=8;rom( 435)<=7;rom( 436)<=5;rom( 437)<=3;rom(438)<=10;rom( 439)<=10;rom( 440)<=10;rom(441)<=10;rom(442)<=10;rom( 443)<=10;rom( 444)<=13;rom( 445)<=13;rom( 446)<=13;rom(447)<=12;rom( 448)<=10;rom(449)<=0;rom( 450)<=9

39、;rom( 451)<=8;rom( 452)<=9;rom( 453)<=9;rom( 454)<=9;rom( 455)<=8;rom( 456)<=6;rom( 457)<=6;rom(458)<=0;rom( 459)<=6;rom( 460)<=7;rom( 461)<=8;rom( 462)<=8;rom( 463)<=9;rom(464)<=8;rom( 465)<=9;rom(466)<=10;rom(467)<=5;rom( 468)<=6;rom( 469)<=6;rom( 470)<=6;rom( 471)<=6;rom( 472)<=15;rom(473)<=14;rom(474)<=13;rom(475)<=13;rom(4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论