MIDI信號的解碼及實時音符顯示
摘要:介紹了MIDI數(shù)據(jù)的格式,討論了一種使用AT89C51系列單片機完成MIDI信號的實時解碼,從中提高音符數(shù)據(jù),并隨時利用專用LED驅(qū)動芯片將音符顯示出來的設(shè)計方案。該方案經(jīng)實際產(chǎn)品應(yīng)用,證明合理可靠。關(guān)鍵詞:MIDI 串行接口 LED顯示
MIDI是音樂設(shè)備數(shù)字接口的簡答,是各種電子音樂設(shè)備之間數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)接口,廣泛應(yīng)用于各種電子樂器上,目前較高檔的電子琴子均帶有MIDI接口。筆者在開發(fā)用于音樂教學(xué)的產(chǎn)品“音樂電教板”的過程中,遇到了有關(guān)MIDI信號解碼的問題,產(chǎn)品要求能夠接受電子琴傳送來的MIDI信號,并將相應(yīng)的音符顯示出來。經(jīng)過對MIDI協(xié)議的研究,用AT89C51單片機和128段LED顯示控制芯片BC7281構(gòu)成的系統(tǒng)完成了設(shè)計要求。
1 MIDI信號簡介及與單片機的接口
MIDI信號的傳輸采用異步串行方式,其速率為31.5kbps,數(shù)據(jù)格式為8個數(shù)據(jù)位、1個起始位和1個停止位。因此,完全可以采用MCS51單片機內(nèi)部的硬件UART串口完成MIDI信號的接收和發(fā)送(本設(shè)計中只用到其接收部分),在硬件方面只需采取適當(dāng)?shù)碾娐愤M(jìn)行電平轉(zhuǎn)換即可。
MIDI接口采用標(biāo)準(zhǔn)的5芯DIN連接器,如圖1。傳送電纜使用屏蔽層的雙絞線電纜,因為信號的傳輸利用的是電流信號而不是電壓信號,所以其抗干擾能力比較強,盡管其速率高達(dá)31.5kbps,傳輸距離仍可以達(dá)到15m,比常見的RS-232接口的傳送距離要遠(yuǎn)。一般的MIDI接收電路如圖2,本文采用與之相同的電路。
其中RX接單片機的串口RX端,電路中的光耦既起到隔離的作用,又有電平轉(zhuǎn)換的作用,因為速率較高,必須選用開關(guān)速度較高的型號,這里使用的是6N136。D1是保護(hù)二極管。
MIDI中共有16個通道(channel),一般稱之為通道1至通道16,每個通道相當(dāng)于樂曲中的個聲部,使用者可以為每個通道指定一種音色。音色可以是MIDI規(guī)范中規(guī)定的128種音色中的任何一種,每一個通道只能有一種音色。也就是說,在一個標(biāo)準(zhǔn)的MIDI系統(tǒng)中,最多相當(dāng)于可以有16種樂器同時演奏。
按照MIDI協(xié)議的規(guī)定,傳送的數(shù)據(jù)可以分為兩類:狀態(tài)字節(jié)和數(shù)據(jù)字節(jié)。所謂狀態(tài)字節(jié)實際就是命令字,表明其后所跟數(shù)據(jù)的種類,狀態(tài)字節(jié)總是大于等于80H,而數(shù)據(jù)字節(jié)總是小于80H,因此,可以很容易地區(qū)分狀態(tài)字節(jié)和數(shù)據(jù)字節(jié)。在狀態(tài)字節(jié)中,用數(shù)據(jù)的低4位表示通道號,高4位表示不同的命令。比如,設(shè)定音色為ChH指令,其中n是通道號。
在各種MIDI的指令中,與本機有關(guān)的只有兩種:8nH和9nH(n為通道號),兩種指令的基本格式一樣,一般由3個字節(jié)組成,格式是:
8n(9n) aa bb
其中,aa是音符數(shù)據(jù),表明所演奏的音符,其范圍為0~7fH,這樣共有128個音符,足以覆蓋整個音域;bb是速度數(shù)據(jù),表明擊鍵的速度,又稱力度數(shù)據(jù),其范圍也是0~7fH。
第一個字節(jié)是狀態(tài)字節(jié)(指令),其具體含義說明如下:
8nH——“音符關(guān)”指令,在多數(shù)MIDM設(shè)備中,該指令中的速度數(shù)據(jù)bb被忽略。
9nH——“音符開”指令,如果速
[1] [2] [3]