基于VHDL的簡易音樂播放器_第1頁
基于VHDL的簡易音樂播放器_第2頁
基于VHDL的簡易音樂播放器_第3頁
基于VHDL的簡易音樂播放器_第4頁
基于VHDL的簡易音樂播放器_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、EDA技術(shù)實用教程課程設(shè)計簡易音樂播放器電子12-11206040124簡易音樂播放器設(shè)計1. MIDI概述MIDI(Musical Instrument Digital Interface)樂器數(shù)字接口 ,是20 世紀(jì)80 年代初為解決電聲樂器之間的通信問題而提出的。MIDI是編曲界最廣泛的音樂標(biāo)準(zhǔn)格式,可稱為“計算機(jī)能理解的樂譜”。它用音符的數(shù)字控制信號來記錄音樂。一首完整的MIDI音樂只有幾十KB大,而能包含數(shù)十條音樂軌道。MIDI應(yīng)用也比較廣泛,電視晚會的音樂編導(dǎo)可以用MIDI功能輔助音樂創(chuàng)作,或按MIDI標(biāo)準(zhǔn)生成音樂數(shù)據(jù)傳播媒介,或直接進(jìn)行樂曲演奏。如果在計算機(jī)上裝備了高級的MIDI

2、軟件庫,可將音樂的創(chuàng)作、樂譜的打印、節(jié)目編排、音樂的調(diào)整、音響的幅度、節(jié)奏的速度、各聲部之間的協(xié)調(diào)、混響由MIDI來控制完成。利用MIDI技術(shù)將電子合成器、電子節(jié)奏機(jī)(電子鼓機(jī))和其他電子音源與序列器連接在一起即可演奏模擬出氣勢雄偉、音色變化萬千的音響效果,又可將演奏中的多種按鍵數(shù)據(jù)存儲起來,極大的改善了音樂演奏的能力和條件。2. 工作原理MIDI 音樂是Windows下的一種合成音樂,由于它通過記譜的方式來記錄一段音樂。因此與wave音樂相比,它可以極大的減少存儲容量。MIDI 音樂的基本原理為:組成樂曲的每一個音符的頻率值(音調(diào))及其持續(xù)的時間(音長)是樂曲能連續(xù)演奏的兩個基本數(shù)據(jù),因此只

3、要控制輸出到揚聲器的激勵信號頻率的高低和每一個頻率信號持續(xù)時間,就可以使揚聲器發(fā)生連續(xù)的樂曲。圖1 是歌曲生日快樂歌開頭一句的簡譜。由圖1 可知,該樂典涉及:中音5,6 ,7 ;高音1,2,3,4,5 。以此為例下面介紹在本音樂發(fā)生器芯片中音樂的形成過程。前兩個音符為中音5 ,1/16 音符,它對應(yīng)的編碼為1000 ,所占的脈沖個數(shù)為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 生日快樂歌歌譜在節(jié)奏時鐘脈沖的控制下,將每個代碼所對應(yīng)的分頻系數(shù)逐一賦給基頻,得到對應(yīng)的音調(diào),這樣連續(xù)起來就形成一段美妙的音樂。本設(shè)計的關(guān)鍵是要準(zhǔn)確地產(chǎn)生音樂中各音符所對應(yīng)的頻率信號,并根據(jù)樂曲要求按節(jié)拍輸出。為了減少系統(tǒng)復(fù)雜性,本設(shè)計根據(jù)可變模值計數(shù)器的原理,按照樂曲要求定時改變計數(shù)器的預(yù)置數(shù),即可產(chǎn)生樂曲所需要的頻率信號

5、。芯片原理框圖如圖2 所示。圖2 中節(jié)拍控制電路產(chǎn)生節(jié)拍定時信號;音符產(chǎn)生電路按節(jié)拍要求產(chǎn)生樂曲所需要的音符;預(yù)值數(shù)產(chǎn)生電路受音符控制,產(chǎn)生該音符頻率相對應(yīng)的預(yù)置數(shù),送計數(shù)器的置入數(shù)據(jù)輸入端。音符頻率發(fā)生器根據(jù)不同的預(yù)置數(shù)產(chǎn)生相應(yīng)的頻率信號,從而完成樂曲的演奏功能。圖2 播放器原理3. 音樂編碼模塊此模塊包括節(jié)拍控制電路和音符產(chǎn)生電路。節(jié)拍控制電路以樂曲中最短音符的節(jié)拍為基準(zhǔn),產(chǎn)生樂曲所需要的全部節(jié)拍。因為樂曲生日快樂歌中最短音符為1/4 節(jié)拍,全曲共有48 個1/4 節(jié)拍,故節(jié)拍控制器至少需要產(chǎn)生48 個有效狀態(tài)。考慮到一遍演奏完需要間隔時間,所以選定節(jié)拍控制計數(shù)器CNT1 的計數(shù)狀態(tài)為48

6、 + 4 個,其中間隔時間為4個有效狀態(tài)。本例要求演奏時能循環(huán)進(jìn)行,因此需要另外設(shè)置一個時長計數(shù)器,當(dāng)樂曲演奏完成時,保證能自動從頭開始演奏。音符產(chǎn)生電路采用查找表形式.在節(jié)拍控制產(chǎn)生電路的節(jié)拍信號作用下,按樂曲中音符持續(xù)時間的長短輸出相應(yīng)音符名稱。以樂曲中前兩個音節(jié)為例,其音符輸出查找表如表1 所示。4. 音調(diào)發(fā)生模塊此模塊包括預(yù)值數(shù)產(chǎn)生電路和頻率發(fā)生器。預(yù)值數(shù)產(chǎn)生電路設(shè)計采用查找表形式,按照音符的頻率要求產(chǎn)生相應(yīng)的預(yù)置數(shù)。根據(jù)可變模值計數(shù)器的設(shè)計原理及音符的分頻系數(shù),可計算出樂曲生日快樂歌中各音符的預(yù)置數(shù)如表2 所示。表2 音頻的分頻和預(yù)置數(shù)頻率發(fā)生器由可變模值計數(shù)器實現(xiàn).由于系統(tǒng)要求產(chǎn)出

7、的信號頻率較高,因此選用2 MHz 高頻脈沖信號作為可變模值計數(shù)器的計數(shù)脈沖。此片段內(nèi)各音階頻率及相應(yīng)的分頻如表3 所示。為了減少輸出的偶次諧波分量,最后輸出到揚聲器的波形應(yīng)為對稱方波,考慮到輸出信號是脈沖極窄的脈沖式信號,為了有利于驅(qū)動揚聲器,可以在到達(dá)揚聲器之前,有一個二分的分頻器,或在計數(shù)器輸出端外加一個D觸發(fā)器也可以均衡占空比。當(dāng)然,如果輸出到揚聲器的信號采用正弦波代替對稱方波將會有更好的效果。表3 音符與頻率對照表由于最大的分頻系數(shù)為5102,故采用13 位十二進(jìn)制計數(shù)器已能滿足分頻要求。在表3 中除給出了分頻比以外,還給出了相應(yīng)于各個音節(jié)頻率時計數(shù)器不同的初始值。對于不同的分頻系數(shù)

8、,只要加載不同的初始值即可。采用加載初始值而不將分頻輸出譯碼反饋,一個常用技巧。表中“0”表示休止符。對于樂曲的休止符。只要將分頻系數(shù)設(shè)為0,即初始值為213-1=8191,此時揚聲器將不會發(fā)聲。5. 頂層文件設(shè)計頂層文件采用原理圖設(shè)計,根據(jù)圖1所示原理框圖,可設(shè)計出MIDI 音樂,發(fā)生器頂層原理如圖3所示。為了方便設(shè)計,圖3中將節(jié)拍控制電路和音符產(chǎn)生電路設(shè)計在同一模塊中,稱為TONE 模塊。音調(diào)發(fā)生器電路稱為FPQ模塊,彩燈控制電路稱為LIGH模塊。圖3 頂層遠(yuǎn)離6. 底層文件TONE 模塊中的CLK 為4Hz 信號輸入端,SEL3 0為音符輸出端,其輸出用于驅(qū)動FPQ 和LIGHT模塊。圖

9、4為其時序仿真,其中SEL為各個音符的二進(jìn)制編碼。從圖4 可以看出,仿真結(jié)果和設(shè)計要求一致。前兩個脈沖SEL輸出為1000,即為中音5的二進(jìn)制編碼,第三第四個脈沖下SEL 為1001,對應(yīng)中音6,依次下去,第五第六個脈沖下SEL為1000,對應(yīng)中音5,第七第八個脈沖下SEL 為1011,對應(yīng)高音1,后面四個脈沖下SEL為1010對應(yīng)中音7。COUNT為節(jié)拍控制計數(shù)器。圖4 音樂編碼器仿真FPQ模塊中的CLKM為2 MHz輸入端,MUS為音調(diào)輸出端。圖5為其時序仿真,在這里只對音符中音5仿真,此時其編碼為1000,NUM為其分頻系數(shù)1276。當(dāng)CT 計數(shù)到1276時,MUS就輸出計數(shù)脈沖,其效果

10、就是頻率784 的信號。圖5 音調(diào)發(fā)生器仿真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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論