扬声器方面则没有太多的选择,只要能够整个电路系统能够驱动的扬声器,都可以用。因此,扬声器的选择要等到最后全部系统设计完成后,实地选择播放效果较好的扬声器。
另外,由于CPLD内部输出的信号比较弱,因此为了能够驱动扬声器导致发声,必须在扬声器前借一个音频功率放大电路,同样,在该电路中接入可滑动变阻器,这样在后期的调试中,可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音色最好的倍数。
3 MIDI音乐播放器芯片设计文献综述
3。1 工作原理
MIDI音乐是Windows下的一种合成音乐,由于它通过记谱的方式来记录一段音乐,因此与wave音乐相比,它可以极大地减少存储容量。MIDI音乐的基本原理为:组成乐曲的每一个音符的频率值及其持续的时间是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号的持续时间,就可以使扬声器发生连续的乐曲[11]。如图3。1所示,为CPLD内部芯片设计原理图。
图3。1 芯片原理
3。2 模块设计
3。2。1 音乐编码器模块设计
此模块包括节拍控制电路和音符产生电路。节拍控制电路以乐曲中最短音符的节拍为基准,产生乐曲所需要的全部节拍。
在大部分音乐中,多以1/4为一拍,一拍则为一秒,同时在乐谱中,一般最短的音符多为1/16音符,因此为了达到四首歌曲的统一,我们将1/16音符设置为计数器的一个计数,对应的1/4音符则是四个计数。为了节省内部资源,我们只演奏高潮部分。这样的话,比如说《涛声依旧》为4/4拍的音乐,即一个小节有4拍,而高潮部分共有8个小节,所以在计数器的范围上我们设定为0~127,即128位的计数器即可。另外,在设计中为了让歌曲循环播放,计数器设定计满自动清零计数的功能,这样,只要不断电,不关开关,歌曲就可以自动循环播放了。
音符产生电路采用查找表形式[12]。在节拍控制产生电路的接拍信号作用下,按乐曲中音符持续时间的长短输出相应音符名称。具体歌曲的音符,只需要通过互联网查找后,将对应音符储存在内部即可。
图3。1音乐编码器仿真波形
3。2。2 音调发生模块设计
此模块包括预置数产生电路和频率发生器。预置数产生电路设计采用查找表形式,按照音符的频率要求产生相应的预置数[13]。根据可变模值计数器的设计原理及音符的分频系数,可计算出乐曲中各音符的预置数,如表3。1所示。
表3。1 音符的分频数和预置数
音名 分频系数 初始值
低音5 5102 3089
低音6 4545 3646
低音7 4050 4141
中音1 3822 4369
中音2 3405 4786
中音3 3034 5157
中音4 2863 5328
中音5 2551 5640
中音6 2273 5918
中音7 2025