作者: 繆愛國;劉昊;嚴菊明
引言
MIDI(樂器數字接口)是一種電子樂器之間以及電子樂器與電腦等設備之間的統一交流協議。該協議是一個二進制形式的音樂描述語言,每一個描述樂器演播動作的字都賦給一個特定的二進制代碼,通過它指示樂器即MIDI設備做什么和怎樣做,如演奏音符、加大音量、生成音響效果等。
由于MIDI本身不是聲音信號,而只是讓聲音設備產生聲音的一系列的指令,所以MIDI文件本身非常小,特別適用于對存儲容量有限制的手持設備,如手機和掌上電腦。本文將著重介紹如何在手持信息終端嵌入式系統平臺上實現MIDI的播放。
MIDI的基本原理
MIDI文件主要由MIDI消息組成。MIDI消息又可分成通道消息和系統消息兩大類,如圖1所示。
圖1 MID I消息的組成 從上面的描述中,
可以看到MIDI實際上只是一組數字信號,并不包括聲音信號,它記錄的是音樂在什么時間用什么音色發多長的音等等。MIDI音樂每個樂音是由三個要素組成的:音色、音高(音調)和音長。可以把各種樂器的音色先錄下來,然后給每個音色編號,如鋼琴編為00;再給音高編號,如C5編為49;然后是音符播放的時間的編碼,如把8分音符編號為60。此時,數字串“00 49 60”就表示演奏的是鋼琴的C5音,演奏時間為8分音符。MIDI在播放時,會根據MIDI文件紀錄的樂曲信息向預先錄制好的樂器(如鋼琴)的波表發出指令,從波表中找出對應的聲音信息,經過合成、加工后再回放出來,就形成了美妙的音樂。
手持信息終端軟硬件平臺
手持信息終端包括手機、個人數字助理(PDA)、掌上電腦(HPC)等等,它們可以實現多種功能,如PIM(電話簿、日程安排、備忘錄、記事本、時鐘)、計算器、錄音、辭典、游戲和播放音樂等功能;也可以加入無線通信的功能,如電話、短信、無線Email等等;還可以通過數據線與PC相連,互通數據、進行備份和數據交換。
該手持信息終端平臺采用的是業界流行的Motorola公司的MC68EZ328處理器;存儲模塊由4M字節的Flash閃存和2M字節的EDO DRAM組成;顯示模塊采用160×240的16級灰度的黑白屏,屏上合成有四線電阻式觸摸屏。音頻處理模塊的作用是用來播放音樂,它由兩部分構成:濾波電路和音頻功率放大電路。該模塊接受來自處理器內部輸出的PWM脈沖信號和音頻模塊的開啟關閉的控制信號。硬件平臺的結構如圖2所示。
圖2 手持信息終端的硬件平臺結構
該手持信息終端是以自主研發的多任務嵌入式操作系統AsixOS為基礎,包括操作系統(Asix OS)、驅動程序包(Driver)、應用程序包(Application)、圖形用戶接口(AsixWIN)、圖形庫軟件包(AsixGPC)、嵌入式數據庫(AsixDB)、嵌入式文件系統(AsixFS)、網絡協議軟件包(Asixnet)等等。Asix模塊原理框圖如圖3所示。
圖3 Asix模塊原理框圖
由圖可以看出,音頻驅動模塊是播放MIDI音樂的基礎,它控制硬件設備的打開關閉等等操作;音頻服務層是連接應用程序和底層驅動的樞紐,它包含了對底層操作的接口;應用程序是整個手持終端產品的具體功能的體現,MIDI播放器是其中一個用來測試MIDI播放的小應用程序,它是建立在音頻服務模塊和音頻驅動模塊基礎之上的。
MIDI播放的實現
MIDI的播放需要軟硬件協同工作,要播放MIDI文件,首先必須對MIDI文件進行解碼:若是控制信息(如節拍、時間格式等等),則進行相應的控制;若遇到音符信息,則將相應的數據(音符代碼、時間值)存儲在音頻緩沖區。
解碼完成后,聲音處理程序將對音頻緩沖區中的音頻數據進行處理,根據音符代碼從各個軟波表中取出相應音符的真實采樣值送往音頻設備,再由音頻設備的濾波電路進行濾波排除電路中的高低頻干擾,然后再經過音頻放大電路對音頻信號進行放大,驅動喇叭放出音樂,音樂時間的長短則根據音頻緩沖區中記錄音符長短的數據來控制音頻設備的開啟和關閉來實現。
由于手持信息終端存儲容量的限制,該手持信息終端的軟波表只包含了大鋼琴(Acoustic Grand Piano)的一種音色,具有3階音色(12×3個音符)。該軟波表采用16kb/s和8bit的采樣率進行錄制,每個音符采樣0.5秒,即每個音符占有8000個字節,所以整個軟波表的大小為12×3×8000=288K字節,這樣的大小對于手持信息終端來說應該是可以承受的。
聲音處理程序是利用MC 68EZ328的定時功能和PWM輸出功能來實現的。PWM具有三種工作模式:回放(playback)模式、單音調(tone)模式、D/A模式。由于tone模式發出的聲音的頻率比較單一,不能達到真實樂器的效果,所以采用了回放模式。回放模式是利用軟波表來實現的,它根據真實樂器的采樣值進行回放,從而能達到比較真實的效果。
MIDI播放的實現在硬件上是由兩部分組成的:M68EZ328內部的PWM模塊和外部濾波放大電路。具體原理如下:
PWM(脈沖寬度調制)是一種對模擬信號電平進行數字編碼的方法。通過對方波的占空比調制來對一個模擬信號的電平進行編碼。
音頻處理的外圍電路比較簡單,它主要用來處理由PWM輸出的MIDI音樂,由濾波電路和音頻功率放大電路組成。MC68EZ328內部具有PWM輸出電路,經過一個由兩級運算放大器構成的濾波電路,濾除噪聲后取出音樂信號;濾波后的信號,在經過功率放大電路放大后,推動揚聲器發出音樂聲。為了減小功耗,音頻功率放大電路和濾波電路都有使能控制信號控制,當需要播放音樂時將電路使能,平常關閉該模塊。
軟件的實現
通過對軟件平臺的介紹,可以知道Asix OS是一個嵌入式的多任務實時操作系統,所有應用程序都是通過任務調度機制來實現的。因此要實現MIDI的播放需要軟件在以下三個層次給予支持:音頻驅動模塊、音頻服務模塊、應用程序(MIDI播放器)。當點擊應用程序(如MIDI播放器)后,操作系統就會進行任務調度,然后啟動相應的服務模塊(音頻服務模塊),通過服務模塊再調用底層驅動來播放MIDI音樂。下面將具體闡述一下各模塊的功能和實現:
該模塊是MIDI能夠播放聲音的基礎,它直接和底層硬件相關,通過CPU中PWM模塊的一些寄存器來實現聲音設備的打開關閉等操作。它通過聲音服務模塊被所有的需要發音的程序所調用,是所有發音程序得以正常工作的基礎。
它由以下幾個子模塊組成:PWM音頻設備初始化模塊;PWM音頻設備回放率配置模塊;PWM音頻設備啟動模塊和關閉模塊;PWM音頻設備工作模式選擇模塊。
該模塊屏蔽了底層的驅動,為應用程序訪問音頻設備提供了統一的接口,使用戶無需關心底層的具體實現即可以完成聲音設備的控制,使之具有較好的移植性。它主要通過消息機制來實現,為應用程序和底層驅動模塊的通信提供了一個橋梁,從而避免了直接和硬件打交道。服務層主要由定時播放模塊、定長播放模塊和配置模塊組成。
音頻服務模塊是播放MIDI的關鍵,它處于承上啟下的作用,用于連接上層的應用程序和底層的設備驅動。該模塊中MIDI解碼子模塊完成對MIDI文件的解釋,并得到最終要播放的音符信息和各種控制信息鏈表,由于MIDI的解碼涉及到MIDI文件的規范協議和具體的算法,這里不作詳細的描述。
音頻服務模塊提供兩個層次的接口,面向應用程序的接口和面向底層的接口。
服務模塊的接口工作原理如圖4所示。
圖4 服務模塊接口
MIDI播放模塊包括MIDI播放器(用來測試MIDI播放的應用程序之一),此外還可以在手機鈴聲、信息提示音、筆觸音等等程序中實現MIDI的播放,但其實現原理基本上都是一樣的。除了界面上的設計,主要就是調用MIDI服務模塊提供的幾個接口函數即可實現MIDI的播放,這里不作詳細介紹。
結語
本文的手持信息終端平臺經過實際測試,播放效果令人滿意,能夠和一般的手機鈴聲相媲美。由于MIDI文件的體積較小,正好可以彌補手持信息終端存儲容量小的缺陷,因此它具有廣闊的應用前景。
責任編輯:gt
-
處理器
+關注
關注
68文章
19259瀏覽量
229655 -
接口
+關注
關注
33文章
8577瀏覽量
151023 -
操作系統
+關注
關注
37文章
6803瀏覽量
123285
發布評論請先 登錄
相關推薦
評論