李 棟
(衡水學院 河北 衡水 053000)
隨著集成電路技術的進步,EDA(電子設計自動化)被廣泛地用于仿真、數字電路等各個方面[1]。EDA是一項與電子及微電子技術緊密聯系的自動化電子系統或電子產品的設計技術。樂器數字化接口MIDI是一種用于連接不同設備、不同行業標準制造商的通信協議。MIDI文件中最大的優點就是所占的空間相對于WAV來說,這并非是一個音樂樣本,而是一個包含了所有音符的信息,并且以數字形式記錄,比如在MIDI鍵盤上的按鍵,實際上是發送一個MIDI命令。因而利用此類技術對音樂發生器進行設計,可以在很大程度上提高系統的靈活性和普適性。為此,本文就基于FPGA的MIDI音樂發生器的設計展開如下論述,以供參考。
FPGA是一種基于CPLD、GAL、PLA等可編程器件的現場可編程門陣列,它是一種經過不斷改進和創新而形成的半自定義電路,是一種特殊的集成電路,使用該方法可以很好地彌補常規電路的不足,同時也可以有效地解決可編程器件中的門回路數目有限的問題。在實際應用中,其主要采用了內部連接、輸入、輸出、可配置邏輯模塊CLB等邏輯單元,利用小型查詢表來完成組合邏輯,每一個D型觸發器的輸入端都連接到一個查找表,然后用觸發器來驅動I/O和邏輯電路,最后完成了FPGA的全部功能[2]。
MIDI是一種音樂儀器數碼界面的簡稱,意為“電子樂器數碼界面”,它是一種在音樂合成和一種標準的樂器和計算機之間的音樂信息交流協議[3]。MIDI文件由MIDI裝置之間傳輸的MIDI報文組成,因為 MIDI文件并不是一個采樣的音樂樣本,它只是一個樂曲的數據,因此它的存儲空間很少。在信息化時代的背景下,音樂是人類精神生活不可或缺的一部分,對音樂信息化的研究是必然發展趨勢。而MIDI與MP3、WAV以及其他流行的音樂格式一樣,也是一種很普遍的數字音樂形式,但是MIDI并不只是一個簡簡單單的硬件,還可以是一個標準、技術或者協議。
MIDI不像WAV、MP3以及其他的數碼音樂格式,它是用數碼方式儲存的,而WAV、MP3以及其他的一些格式則是通過解碼后可以直接播放的[4]。所以,MIDI文件在某些方面有其他音樂格式所不具備的優勢,主要表現在:(1)MIDI檔案容易編輯,在處理音樂時,往往要將各個音軌分開,以便進行分析。MIDI可以輕松實現,而且編輯起來也很簡單。(MIDI檔案為純粹的數碼形式,無錄音波形,所以一部完整的音樂旋律);(2)MIDI音樂所需要的空間很少,往往只有數十個千字節,而每一首MIDI都可以容納10條以上的音軌。舉例而言,當取樣頻率為11 kHz時,對1 min的音頻進行取樣,16比特的量化儲存需要大約1.32 MB的內存。如果是MIDI格式,那么它的內存容量也就4 KB左右。這對我們構建自己的資料庫很有幫助。
同時,MIDI文件的使用范圍也很廣。20世紀80年代早期,每個電子樂器制造商都是根據各自的標準生產的,所以在建立一個系統的時候,會出現很多兼容的問題。MIDI的問世,為各種樂器提供了一系列的標準,使得各種樂器之間沒有了語言的隔閡,并且一直延續到今天都還在使用。MIDI音序裝置的應用極大地減少了作曲者的創作費用,從小型交響樂團到大型演唱會,MIDI都扮演著舉足輕重的角色。
所以,MIDI可以被認為是電腦上最簡單的樂譜,可以精確地告知播放者所播放樂曲的時間值、音調、音色等。由于MIDI的播放依賴于資源庫,所以MIDI的音樂在不同的平臺上會有細微差別。但是,這僅僅是相似的差別,在聲音質量上,不會對整個音樂的辨識產生任何影響。
MIDI中有16個通道,通道從1到16,由0到 F表示,用戶可以根據不同的聲道來選擇不同的音色,除了打擊樂器通道以外,每個通道僅可以選擇一種音色,而且每種聲音庫中有128種不同的聲音。通道10是一個打擊樂器通道,在這個通道里,每一個音符都代表著一個不同的音色。在打擊樂器通道中,有48種不同的音色。
MIDI傳輸的信息主要有兩種:狀態和數據兩種字節。MIDI指令有:狀態字節,數據字節。這個狀態字節指的是一個指令字,表示后面的數據類型,狀態字永遠都在80 H以上,而數據字永遠都在80 H以下。通常使用十六進制數字來表示狀態字,而數據字則用十六進制或十進制來表示。
例如,MIDI音符ON/OFF指令包括3個字節,包括4種類型的消息:第一個字節含有一個狀態(表明該信息的特性)以及信道編號1至16;第2字節為0至127的音符;第3個字節代表的是力量 O至127。例子:
(1)93 H、60、68;此指令代表一個四通道的音符開,60個音符,68個鍵。
(2)83 H、60、68;此指令代表一個四通道的音符關,60個音符,68個鍵。
實例(1)示出了通道4發出60個音符和68個按鍵的聲音,并且實例(2)代表在閉合通道4中的一個音符是60,在這個時候可以忽略按鍵的力量。在90 H、60、0中,按鍵的力量是0,同時也是一個關卡,如果選擇了后者,保持MIDI指令狀態不改變,可以有效地減少 MIDI的傳輸密度。
隨著我國海事管理信息化程序的不斷增強,對新技術的需要也逐步增大,在所有海事活動中,精確的數據采集與可靠的通信必然是工作的重中之重。精確的數據采集可以最大程度了解周圍的實際環境,同時可靠的數據傳輸可以使控制臺實時監控當前情況,尤其是在環境相對復雜的海事活動中。數據采集系統的運行不公提高了船舶的航行安全,同時也可以記錄船舶的動態數據,船位、航向等,為海事執法提供了最為客觀、直接的證據。一旦發生事故,可以將這些數據采集出來,并進行回放,從而為事故的分析提供最為直接的證據。
(3)c2H、40;此指令用于更改聲調,3通道選擇40音調,也就是小提琴的聲調。
每一通道的預設音色為鋼琴音,可根據程序調整音色,共128種音色,數字0~127。例3中,第三通道的音色被修改成了小提琴,40被認為是小提琴的音色,每個樂器的號碼都可以查詢。
計數器作為一種基本的邏輯元件,它的主要應用功能是通過計算、應用程序和定時、分頻產生脈沖序列和拍頻脈沖來實現它的功能,分頻器可以將不同波段的音頻信號分割開來,并將不同的音頻信號分別傳輸到特定的揚聲器中,再以回放的形式進行播放,由此可以看出,該電路的基本原理是將音頻信號分開,并以放大的方式獲得特定的播放效果[5]。
MIDI是Windows下的一種混合音效,因為它是用記譜的形式錄制一首歌,所以相對于wave音樂來說,這將會大大降低存儲能力。MIDI音樂的基本原則是,每一個音符的頻率值(音高)和它的持續(音高)是一部音樂作品中的兩項重要參數,為此,揚聲器就能發出連續的音樂,只需控制將激勵信號輸出到揚聲器的頻率以及每個頻率信號的持續時間[6]。
關于音調名與頻率的關系。音樂的12個平均值規定了兩個八度音階間的頻差(例如簡譜中的中音1與高音1),之間的頻率相差1倍。在兩個八度音階間,有12個半音,每一個音調的頻率比率見表1。另外,音符A(簡譜中的低音6)的頻率為440 Hz,在B至C之間、E至F之間是半音,而其他的則是全音。由此可以計算出簡譜中從低音1至高音1之間每個音名的頻率,見表1。

表1 簡譜中音名與頻率的關系 單位:Hz
本系統利用VHDL語言層次化設計為基礎,按照功能劃分為3個模塊:歌曲選擇模塊、音樂存儲模塊以及輸出驅動模塊。
本系統主要包括解碼器,解碼器的兩個輸入端與鑰匙相連,產生二位二進制編碼,各自對應于四首歌曲的儲存地址[4]。例如,這個模組主要由撥碼開關來決定是否要彈奏《月代表我的心》或《梁祝》,它的內部是由一個數據選擇器來完成的,它的外部則連接有一個輸入撥碼開關,它的高和低電平會讓輸出從兩個音樂作品中選擇一首。
本系統包括兩大部分:計數器 Lpm_counter0和Lpm_rom0。Lpm_counter0是一個10 bit的二進制計數,用作記錄資料儲存的位置產生器。這個計數器具有4 Hz的技術頻率,即每個技術值的駐留時間為0.25 s,正好是全音符的音調設置是1 s,也剛好是4-4個音符中的一個4分音。比如,《梁?!返牡谝粋€音符是“3”,邏輯上是4個鐘拍,也就是1s的時間,相應的,對應“3”的相交值是1 036,并且在SPEAKERA的輸入中逗留1 s。當計數器的時鐘頻率為4 Hz時,也就是本地地址值增大,則由ROM經q〔4..0〕傳送至TONETABA組件,隨后,這首歌就像是一首連貫而又自然的樂曲。Lpm_rom0是一個音符數據存儲裝置,具有5個字寬,總共1 024個字節,存儲一首歌,每首歌256字節。
這個模塊包括兩個子模塊:TONETABA與SPEAKERA。
音調的頻率主要來自TONETABA模塊,它是一個數字分頻器。在它的clk端子上輸入一高頻率的信號,用 SPEAKERA進行分頻,然后由speaker進行輸出,因為從 CNC分頻器中直接輸出的信號是脈沖寬度非常狹窄的脈沖型信號,為了便于對揚聲器的驅動,需要另外增加D型觸發,使其工作循環達到平衡,但是此時的頻率會是1/2。SPEAKERA的clk輸入信號的分頻率由11位預先設定的Tone[10..0]決定。SPEAKERA的輸出頻率會影響每個音符的音高,這樣,分頻計數器的預定值Tone[10..0]就符合speaker的輸出頻率。在TONETABA模塊中,如果Tone [10..0]=1 035,那么,這個音符的信號頻率為“3”。
音調的長短與音樂的節拍和每一個音符的節拍有關。TONETABA模塊的特點是,先給SPEAKERA一個預定的片段數目,然后在SPEAKER中逗留的時間就是這個片段的節拍數值。TONETABA模塊是一種樂譜編碼的交叉預設查詢電路,與該樂曲中的全部音符相對應的交叉預設數量為24個,每個音符的停頓時間取決于該樂曲的節拍,并且在此還包括音頻產生模塊NOTETABA的clk的輸入頻率。這24個數值的輸出是根據TONETABA索引的5比特輸入值來決定Index[4..0],但是Index[4..0]有32個值可以被選擇。指數的價值和期限Index[4..0]向TONETABA的輸出取決于內存ROM模塊。
在音樂發生器設計過程中,音樂選擇開關及彩色燈光控制線路這兩個部分的電路都非常簡單,在輸入端,將音樂選擇輸入端連接兩個鍵開關S1,S2,S1關閉時A[0]端為高,關閉時A[0]端為低壓,S2關閉時A[1]端是高電平,關閉時A[1]端是高電平,關閉時A[1]端是低電平,通過S1和S2的打開和關閉來改變存貯器的初始狀態。兩個LED顯示音樂時相應的音符,3個LED分別顯示高、中、低音,顯示出音樂的動態,非常直觀[9-10]。
本設計以VHDL語言層次化為基礎,通過模塊化的方式來實現音樂播放器的設置。通過模擬和下載,可以看出,該系統可以根據鍵盤上的音樂和按鍵來選擇所要播放的音樂。同時,無需改變最上層的文件就可以任意修改或添加音樂,對音樂發生器的數字電路進行了優化,能在較短的時間內設計出高效、穩定、符合設計要求的系統,并能在不改變上層文檔的前提下,任意更改或添加歌曲。VHDL是一種通用的硬件描述語言,它可以提高軟件的可移植性和擴展性,使得設計更加靈活,因此該系統具有體積小、功耗低、可靠性高等優點,可以滿足設計的需要。經過進一步的改良和完善,MIDI音樂發生器可以應用到聲控電子樂器的研發中,為人們的生活增添新的樂趣。