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之间,它能正确地表示为一个字节。

相关词条

相关搜索

其它词条