MIDI

MIDI

音樂設備數字接口
MIDI樂器數字接口,是20世紀80年代初為解決電聲樂器之間的通信問題而提出的。MIDI是編曲界最廣泛的音樂标準格式,可稱為“計算機能理解的樂譜”。[1]它用音符的數字控制信号來記錄音樂。一首完整的MIDI音樂隻有幾十KB大,而能包含數十條音樂軌道。幾乎所有的現代音樂都是用MIDI加上音色庫來制作合成的。MIDI傳輸的不是聲音信号,而是音符、控制參數等指令,它指示MIDI設備要做什麼,怎麼做,如演奏哪個音符、多大音量等。它們被統一表示成MIDI消息(MIDIMessage)。傳輸時采用異步串行通信,标準通信波特率為31.25×(1±0.01)KBaud。
    中文名:樂器數字接口 外文名: 用途:輔助音樂創作、确定電腦音樂程序 英文名:Musical Instrument Digital Interface 其他外文名:MIDI 解釋:電子樂器制造商們建立的通信标準 所用電纜:所用的電纜為5芯電纜

發展曆程

産生

MIDI不是首先出現在計算機裡面的,它是由電子樂器生産廠家為了不同型号的電子樂器的“交流”而産生的,由于它采用的是數字化技術,當然自然而然的很容易的與計算機挂上了關系。所以我們要講MIDI樂器的接口,有三種,MIDIOUT、MIDIIN、MIDITHRU。

這些可以在你家裡的MIDI樂器或帶有MIDI的電子琴(現在的很多電子琴上都有MIDI接口)上找到的。MIDIOUT是将樂器中的數據(MIDI消息)向外發送;MIDIIN就是接收數據啦;至于MIDITHRU嘛,是将收到的數據再傳給另一個MIDI樂器或設備,可以說是若幹個樂器連接的接口。可以這樣說,MIDI所描述的是将MIDI樂器彈奏出的音變成01010一樣的數據輸出,也可以将計算機中的軟件将要表示的音變成01010的二進制數據通過聲卡輸出,或者接收一些01010的數據進行處理。

通常一個标準的MIDI有16個通道,GM标準裡的第10通道是專為打擊樂設定的。

早期的MIDI設備除了都能接受MIDI信号之外沒有統一的标準,尤其是在音色排列的方式上更是“随心所欲”的。也就是說您在這台琴上制作完成的音樂拿到另一台不同型号的琴上播放時會變得面目全非,小提琴可能會變成小号,長笛可能會變成吉他,鋼琴可能會變成大鼓……這對于專業音樂人士的工作并不會産生太大的影響,畢竟他們制作一次灌成唱片也就完事兒了,但是對于音樂愛好者之間的交流,尤其是多媒體的發展卻極為不利。

制定标準

于是著名的日本ROLAND公司于1990年制定出它稱之為GS的标準。GS标準是在ROLAND的早期産品MT-32和CM-32/64的基礎之上,規定了MIDI設備的最大同時發音數不得少于24個、鼓镲等打擊樂器作為一組單獨排列、128種樂器音色有統一的排列方式等。在這幾項規定中,最重要的就是這128種音色的統一排列方式。有了這種排列方式,隻要是在支持GS标準的設備上制作的音樂,拿到任何一台支持同樣标準的設備上都能正常播放。

GS标準的制定本來是一件天大的好事,它使得全世界的電子樂器有了一個“全方位接觸”的機會。可是,也許是由于這個标準真的是過于複雜,更可能是由于衆多的MIDI設備制造商不願意形成ROLAND的獨霸世界标準的局面,總之最後世界各國的MIDI設備制造商并沒有全盤接受這個标準,而是将之稍作改變,泡制出了一個GM标準。

GM标準的全稱應該是“通用MIDI标準系統第一級”(GeneralMIDIsystemLevel1),這個标準制定于1991年,在GS标準基礎上,主要規定了音色排列、同時發音數和鼓組的鍵位,而把GS标準中重要的音色編輯和音色選擇部分去掉了。GM的音色排列方式基本上沿襲了GS标準,隻是在名稱上進行了無關痛癢的修改,如把GS的Piano1改名為AcousticGrandPiano等。

雖然GM标準不如GS那樣功能強大,但是它畢竟是世界第一種通用的MIDI樂器排列的标準,而且正因為它将ROLANDGS标準作了簡化,也使得更多的MIDI設備廠商可以制造符合此标準的MIDI設備。所以GM标準剛一制定,就得到了MIDI廠商,尤其是多媒體設備廠商的熱烈響應。此後,各大MIDI廠商的設備紛紛被敲上GM的标制,MIDI設備之間實現了比以往更深層次的交流,為多媒體時代的真正到來作好了準備。對于現在的MIDI設備,GM标準是最基本的了。

另一個MIDI巨頭YAMAHA也不甘示弱,他當然不甘于這樣一個要求很低的标準,所以YAMAHA于1994年9月提出了自己的音源标準--XG。XG同樣在兼容GM的基礎上做了大幅度的擴展,如加入了“音色編輯”的功能,使得作曲家可以在MIDI樂曲中實時地改變樂器的音色;還加入了“音色選擇”功能,在每一個XG音色上可以疊加若幹種音色。

所以我們目前常見的MIDI标準由GM、GS、XG,它們之間競争還會繼續,當然這指的是GS與XG。

标準統一

八十年代初,電腦音樂迎來了第一個真正的繁榮時期,同時也迎來了一個難以解決的問題,那就是各種電子樂器之間的通訊問題:各生産廠家都按照自己的規格生産電子樂器,當您單獨使用某一廠家的産品時,您還不會遇到什麼問題,可是當您同時使用幾家公司的設備構成一個電腦音樂系統的時候,麻煩就來了,您怎麼能使一台美國E-MU的音源發出您在日本ROLAND鍵盤上彈奏的一個标準A呢?

為了解決電子樂器的通訊問題,1982年,國際樂器制造者協會的十幾家廠商(其中主要是美國和日本的廠商)會聚一堂,各抒己見。會議通過了美國SequentialCircuits公司的大衛.史密斯提出的“通用合成器接口”的方案,并改名為“音樂設備數字接口”,即“MusicalInstrumentDigitalInterface”縮寫為“MIDI”,公布于世。1983年,MIDI協議1.0版正式制定出來。此後,所有的商業用電子樂器的背後都出現了幾個五孔的MIDI插座,樂器之間不再存在“語言障礙”,它們同裝上MIDI接口的電腦一起,構成了一個更加繁榮昌盛的電腦音樂大家庭。

實際上,MIDI本身隻是MusicalInstrumentDigitalInterface的縮寫,意思是音樂設備數字接口。這種接口技術的作用就是使電子樂器與電子樂器,電子樂器與電腦之間通過一種通用的通訊協議進行通訊,這種協議自然就是MIDI協議了。

對于搞計算機的人來說,不妨把MIDI理解成一種局域網,網絡的各個部分通過專用的串行電纜(MIDI線)連接,并以31.25KBPS的速度傳送着數字音樂信息。

分類

MIDI标準制定以後,開始隻是在專業的電腦音樂圈兒裡受到重視,但是随着電子技術的不斷發展,尤其是近幾年多媒體技術的突飛猛進,MIDI作為多媒的一個重要組成部分,被炒得沸沸揚揚,幾乎達到了婦孺皆知的地步。而大家也已經把這種接口技術當作了電腦音樂的代名詞,常有“做MIDI”,“玩兒MIDI”的說法,使一些正統的“電腦音樂人”覺得莫名其妙,啼笑皆非。

因此,我們倒不妨将MIDI劃分為“狹義MIDI”和“廣義MIDI”兩種概念,狹義MIDI就是上面所說的音樂設備數字接口,而廣義MIDI則是大家已經約定俗成的整個電腦音樂的統稱,這樣即不會造成概念上的進一步混亂,也不會使得MIDI一詞失去其本質的含義。

1985年11月,國際樂器制造者協會公布了《MIDI1.0版的細節規定》(2.0版至今仍在制定中),重新定義了一些控制器号碼。此外,為保證MIDI的健康發展,還專門成立了“MIDI廠商協會”和“日本MIDI标準委員會”等組織,MIDI标準從成長階段步入了成熟階段。

MIDI标準的成熟使各電子樂器生産廠商更加信心百倍,它們絞盡腦汁、挖空心思,以空前的熱情生産出各種電子樂器,有鍵盤式的(合成器、主控鍵盤)、弦控式的(MIDI吉他)、敲擊式的(鼓機)甚至還有吹奏式的(呼吸控制器),除此之外,還有五花八門的各種音源模塊(就是把沒有鍵盤的電子合成器)供人選購。

操作案例

VB播放Midi聲音

MS提供Midi*開頭的函數在程序中操作Midi音樂。為此計算機可以依次調用MIDIOutOpen函數,midiOutShortMsg函數,最後調用midiOutClose函數來發出一個聲音。

以下的代碼都是midiOutShortMsg函數的代碼,因為MIDIOutOpen和midiOutClose函數的代碼都一樣的,要使用下面的midiOutShortMsg的代碼,需要在Load事件和QueryUnload實踐中書寫如下代碼:

DimmidiHandAsLong'窗口級别的全局常數

PrivateSubForm_Load()

MIDIOutOpenmidiHand,MIDI_MAPPER,0,0,0'打開Midi媒體

EndSub

PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)

midiOutClosemidiHand'關閉Midi媒體

EndSub

并且注意要結束程序必須按窗口的關閉按鈕(右上角的叉),不要按IDE上的方形按鈕結束程序,否則QueryUnload事件是不會執行的。下次啟動程序就會出錯。

發聲

midiOutShortMsgmidiHand,&H463090

後面的參數是&H007F3090(本來是&H007F3090,拆開來看),由于00開頭,所以VB省略掉了。這是一個16進制數,需要從後往前看。90的9代表的就是格式信息中的9:開始發聲,後面的0保留。然後是30,這是第一位的數據,根據上面表格的描述,這是需要發出的音符。16進制的30是十進制的48,而中央C的編号是60。最後的是46,同樣如上面表格所寫的,這是音量。

16進制數需要從後往前看,是由于Windows采用低字節序,一個16進制數低位在前,高位在後,所以表格中描述的第一個數據,即音符的數據反而在第二個數據音量的後面。

停止發聲

midiOutShortMsgmidiHand,&H7F3080

後面的參數是&H007F3080(本來是&H007F3080,拆開來看),80的8代表的就是格式信息中的8:停止發聲,後面的0保留。30依然是音符。7F的含義變了,如表格所說的是停止的速度,不過實際演示發現這個速度似乎對停止發聲沒影響,可能我作為一個程序員不是做音樂的聽不出來。

改變音色

midiOutShortMsgmidiHand,&H7FC0

後面的參數是&H00007FC0(本來是&H00007FC0,拆開來看),C0的C代表的就是格式信息中的C:改變音色,後面的0保留。7F是代表十進制127,可以查看下面通用标準獲悉這是槍的音色。

文件系統

文件指令

MIDI文件有很多信息構成的指令。一些信息,隻由1字節構成,有些有2個字節,還有一些有3個字節。有一類的MIDI信息,甚至可以包含無限的字節數。所有的信息有一點是共同的,那就是第一個字節的信息是狀态。

狀态字節的0x80到0xef是

可以在16個MIDI通道的任何一個出現的信息。正因為如此,這些是所謂的聲音信息。這些狀态字節有8位二進制數,可以把8個二進制位分成兩個4位,即一個高位和一個低位。例如,一個狀态字節的0x92可細分成9(高位)和2(低位)。高位表示類型的MIDI信息,低位說明信息操作的MIDI通道序号。以下是所有可能的高位值,每個代表的聲音信息類型:

8=停止發聲

9=開始發聲

a=輪指

b=改變控制器

c=改變音色

d=通道演奏壓力(可近似認為是音量)

e=音高

譬如,0x92的消息類型是開始發聲(即高位是9)。低位2意味着該消息是對MIDI通道2進行的。有16個可能的(邏輯的)MIDI通道,0作為第一。

雖然MIDI狀态字節計數的16個MIDI通道,作為号碼為0到F(即15),所有的MIDI設備(包括計算機軟件)顯示的通道編号,是1至16。因此,狀态字節發出的MIDI通道0被認為是通道1。這之間的差異是因為大部分人計數,是從一開始,而不是從零。

五線譜

第一線=低音鼓(BassDrum1)

第一間=低音鼓(BassDrum2)

第二線、第二間、第三線=不同音高的中音鼓(FloorTom)

第三間=軍鼓(SnareDrum,注意有兩種不同的軍鼓,音色比較相近,真正寫譜時請盡量選擇同一種軍鼓)

第四線帶×号=輕音銅钹(RideCymbal1)

第四線、第四間、第五線=不同音高的中音鼓(Tom)

第五線帶×号=輕音銅钹(RideCymbal2)

上加一間帶×号=腳踏钹(Hi-Hat,其中帶圈圈的是長音,不帶圈圈的是短音)

上加一線、上加一間=脆音銅钹(CrashCymbal)

通道音量

類别:聲音

狀态字節

0xd0到0xdf而低位是MIDI通道。

數據

一個數據字節,值從0到127(其中127是最響)。

音高

類别:聲音

狀态字節

0xe0到0xef而低位是MIDI通道。

數據

後續兩個數據字節。這兩個字節應結合在一起,形成一個14位值。

系統專用信息

類别:系統公用

目的

用來傳送一些數據,這是具體到一個MIDI設備。此外,sysex可能被用來傳遞信息,就是特定的裝置。

狀态字節

開始于0xf0。結束于0xf7。

數據

可以有任何數量的數據字節。

狀态字節的0xf0和0xff是不屬于任何特定通道的。這些狀态字節是用于給特定設備發送信息,如同步重放設備,以同步時間。這些狀态字節是進一步分為兩大類。狀态字節的0xf0到0xf7是所謂的系統公用的信息。狀态字節的0xf8到0xff被稱為系統的實時信息。

某些狀态字節是沒有界定的,并保留供以後使用。舉例來說,狀态字節的0xf4,0xf5,0xf9到0xfd尚未使用。如果MIDI設備任何時候收到這樣的信息,它應忽略這一消息。

通道編号

就像與MIDI通道0到15之間被顯示成1至16,許多MIDI設備從1開始顯示代号。在另一方面,這種做法是從來沒有規範,一些設備使用截然不同的标準。

文件格式

标準文件

MIDI文件包含一個或更多MIDI塊與每個事件的時間信息。它支持歌曲、序列和音軌結構,拍子和拍号信息。音軌名字和其他描述信息也可以與MIDI信息一同存儲。這個格式支持多條音軌、多個序列。這種格式可以允許用戶從一個音軌移向另一個音軌。

用于MIDI文件的8位二進制的數據塊可以在一個高效率的傳輸的MIDI二進制文件中,分解可以存儲為7位數據,或被轉換成其他的ASCII或者被翻譯為一個文本文件。

1.MIDI序列文件由塊組成。每個塊4個字節,有32位長度。在蘋果機上,數據通過在文件的數據叉,或者在剪貼闆上進行傳輸。(在Macintosh這個格式的文件類型是"Midi")塊結構允許被忽略跳過。

這裡定義了塊的二種類型:文件頭塊和音軌塊。文件頭塊提供關于整個MIDI文件的最小數量信息。音軌塊包含的MIDI數據序列也許包含16條MIDI通道的信息。使用多個音軌塊,就可以用多條音軌、多個MIDI序列、譜式和歌曲。MIDI文件總是以文件頭塊開始,緊随其後的是一個或多個音軌塊。

MTrk塊類型是存放實際歌曲數據的地方。它是MIDI事件(和非MIDI事件)的序列。在MTrk塊的有些數字是以叫可變長的數量的形式進行存儲的。這些數字首先每個字節用7位,最高位不是有效位。除最後一位之外的所有字節,最高位設為1;最後一個字節最高位設為0。如果數字在0和127之間,它能正确地表示為一個字節。

相關詞條

相關搜索

其它詞條