音频应用   音频插件联盟,正版插件,欢迎大家选择!

 找回密码
 快速注册

QQ登录

只需一步,快速开始

阅读: 25401|回复: 4

[资讯] MIDI音频开发必备知识之MIDI技术详解

[复制链接]

3280

积分

2

听众

16

音贝

音频应用新手发布

Rank: 3

积分
3280
发表于 2007-9-23 | |阅读模式
音频应用公众号资讯免费发布推广
MIDI音频开发必备知识之MIDI技术详解
1. MIDI硬件规范
MIDI接口包含3种不同的连接器:IN,OUT,THRU(穿越,用于菊花式链接多个MIDI设备)。
菊花式链接设备:
方法一:设备1的THRU连设备2的IN,设备2的THRU连设备3的IN。
方法二:设备1的OUT连设备2的IN,设备2的OUT连设备3的IN。
MIDI控制器:当作乐器使用的一种设备,它能把演奏转换成实时的MIDI数据流。
MIDI音序器:允许MIDI数据被捕获、存储、编辑、组合和重奏的装置。
MIDI数据流是单向异步的数据位流,常由MIDI控制器产生,比如乐器键盘、吉他等;也常由MIDI音序器产生。

2. MIDI合成器原理
音乐合成器(音源):对MIDI消息进行译码并执行收到的指令,从而产生出指定的音乐。有两种合成方法:频率合成方式和波形表合成方式。
FM合成方式:通过组合各种波形产生复合乐音,来模拟各种乐器的声音。有好的听觉效果但难以产生逼真的乐音,有些乐音则几乎不能产生。
波形表合成方式:乐音样本合成法。把真实乐器发出的声音波形以数字的形式记录下来,再根据需要以不同的速度将录音回放出来,以产生各种波形和各种音高的乐音,更加逼真。对真实乐器声音波形的记录可以是有限的样本,例如:钢琴有88个音阶或键,一般仅需对其中一个或两个8度音阶内的12个-24个琴音进行采样并存储,利用这些音的采样值并配合不同的回放速度就可以产生出全部的88个音。


3. MIDI信息标准
General MIDI标准:制定了一份MIDI乐器应当遵从的音色排序表,共128种音色(16组乐器,每组定义了8种乐器音色),包含了常用的乐器及一些音效,并规定了47种打击乐器在键盘上的对应位置。其中打击乐使用第10通道,旋律乐器使用1-9和11-16号通道。
一个MIDI消息由1个8位的状态字节并通常跟着2个数据字节组成。状态字节最高有效位设成1,因而他总不小于80H,低4位用来表示这个MIDI消息是属于哪个通道,其余3位表示MIDI消息的类型;数据字节总是小于80H。
MIDI消息分为通道消息和系统消息。
通道消息:分两种。
(1)通道声源消息:它携带着演奏数据。
(2)通道方式消息:表示合成器响应MIDI数据的方式。
系统消息:分三种。
(1)系统公共消息:它标识在系统中的所有接收器。
(2)系统实时消息:它用于MIDI部件之间的同步。
(3)系统独占消息:这是厂商的标识代码。
消息格式:xm nn kk(1个状态字节+2个数据字节)
Xm:状态字节。决定了8种MIDI命令和16个MIDI通道。
Nn:数据字节。代表音符号、控制号等,取值0-127。
Kk:代表按键、释放键力度(音量)等,取值0-127。
例如:
(1)93 60 68:音符开,4通道,音符为60,按键力度68。
(2)83 60 68:音符关,4通道,音符为60,按键力度68。
(3)93 60 0:相当于(2)
(4)C2 40:表示将第3道的音色改变为40号音色(小提琴音色编号)。
PS:消息相关解释见Windows程序设计第22章某节——MIDI和音乐

MIDI文件:由一个头块(Header Chunk)和紧接着的一个或多个音轨块(Track Chunk)。头块以MThd为标志,音轨块以MTrk为标志。
MIDI文件的块结构:
[size=13.3333px]

类型

长度

数据

4字节

4字节

(规定的)长度


举例:“4d 54 68 64 00 00 00 06 ff ff nn nn dd dd”。
欢迎厂家入驻,推文!免费!微信:yinpinyingyong

3280

积分

2

听众

16

音贝

音频应用新手发布

Rank: 3

积分
3280
 楼主| 发表于 2007-9-24 |
解说:

“4d 54 68 64”是ASCII字符“MThd”,“00 00 00 06”表明之后有6个字节。
“ff ff”定义了MIDI文件的格式类型:格式0为单音轨文件,格式1为多音轨文件,格式2为多音序器音轨文件。
“nn nn”表示音轨块个数。
“dd dd”定义了MIDI事件的时间格式类型。
音轨块数据:由一对或多对+组成。是必需的,它指前一个事件到该事件的时间间隔,单位为tick。在连续的音轨块数据流中,每个MIDI事件前都必须有一个时间差参数,也就是“时间差参数+状态字节+数据字节”。
举例:一个编号为3C的音,它的时值为一个四分音符,选用通道1,则相应的MIDI事件组合为:
00(delta-time) 90 3C 40(通道1,开3C音) 78(delta-time) 80 3C 40(关3C音)
Meta事件:除了包括MIDI事件外,还包括Meta事件。Meta事件用来表示像track名称,歌词,提示点等,它并不作为MIDI消息被发送,但是它仍然是MIDI文件有用的组成部份。格式为:ff xx nn dd。
Ff:Meta事件的标志。
Xx:描述Meta事件的类型,取值范围00-7F。
Nn:紧跟其后的数据长度。
Dd:数据
  
MIDI文件举例:
按照下面给出的曲谱,写出MIDI文件。
1 = C    4/4    120拍/分
| 3 3 5 i - |
要求采用MIDI文件格式0来书写,音色为小号。
1. 定义一个时间分辨率,通常可设置一个四分音符的tick数为120(即78h),任选一通道:通道2。
2. 接下来写MIDI文件。先写头块:4d 54 68 64 00 00 00 06,这是固定的格式。由于指定采用格式0,所以接下来的格式参数应当是00 00,再接下来写音轨数00 01,再下面要指定基本时间,应当是00 78,这样完整的头块为:
4d 54 68 64 00 00 00 06 00 00 00 01 00 78
3. 由于定义了MIDI格式0,所以只有一个音轨块。先写“MTrk”,即4d 54 72 6b,之后的数据长度xx xx xx xx先空着,最后再补。接下来写全局信息,全局信息是ff开头的Meta事件,Meta事件的时间差都为0,再之后逐一写通道2发生的所有MIDI事件。最后被上数据部分长度:72B(即48h),即将xx xx xx xx写上00 00 00 48。
欢迎厂家入驻,推文!免费!微信:yinpinyingyong

3280

积分

2

听众

16

音贝

音频应用新手发布

Rank: 3

积分
3280
 楼主| 发表于 2007-9-25 |
写好的MIDI如下:

文件:4D 54 68 64 00 00 00 06 00 00   00 01   00 78
注释: MThd      参数长度6    格式0 1音轨 1/4音符
文件:4D 54 72 6B 00 00 00 48
注释: MTrk      音轨块长度
文件:00         ff 03 08 75 6E 74 69 74 6C 65 64   00           ff 01 02 63 0A
注释:   音轨名称untitled             作者名称untitled
文件:00         ff 58 04 04 02 18 08   00        ff 59 02 00 00   00   ff 51 03 07 A1 20
注释:   拍子记号         音调符号 音符速度
文件:00         C0 38               00        90 40 64       3C       40 00
注释: 通道1音色56      开40音      关40音
文件:00         40 64        3C     40 00     
注释: 开40音 关40音
文件:00         43 64        78     43 00
注释: 开43音 关43音
文件:00         48 64        81 70   48 00
注释: 开48音 关48音
文件:00         ff 2F 00
注释: 音轨结束

4. MIDI设备的同步
MIDI规定以24PPQ(Pulse Per Quartnote)作为MIDI Clock系统的规格。即在一个四分音符的时间内,MIDI系统会发送出24个Real-time Messages(实时同步信息),因此音乐的速度决定了这些Real-time Messages发送时间的快慢。比如tempo = 80拍/分钟,每秒将产生32个Real-time Messages。(80/60*24=32)
SMPTE(the Society of Motion Picture and Television Engineers,电影电视工程协会):为了解决影音的同步问题,就制定了用于同步的SMPTE时间码,该编码显示方法为:Hour:Minute:Second:Frame(时:分:秒:帧)。SMPTE时间码格式较多,举例如下:
(1)SMPTE25 EBU格式:25帧/秒
(2)SMPTE24 Film Sync格式:24帧/秒
(3)SMPTE30 Non-Drop格式:30帧/秒
(4)SMPTE30 Drop格式:29.97帧/秒
要处理声频和视频同步,难点就在于,MIDI音序和数码声频工作站使用的SMPTE时间码,与视频系统的SMPTE时间码必须是统一的。MIDI、声频和视频在同步处理时,共同采用SMPTE30 Non-Drop格式,但视频是以29.97帧/秒播放,所以SMPTE30 Drop格式诞生了。但由于SMPTE30 Drop时间与现实世界时间存在差异,所以它力图通过“丢弃”一些帧数来弥补这种差异。
MTC时间编码:由于MIDI Clock只能用于MIDI设备间的连接,为了让MIDI设备能与其他设备同步连接,这种完全兼容SMPTE时间编码的MIDI同步信号——MTC时间码就诞生了。
欢迎厂家入驻,推文!免费!微信:yinpinyingyong

4039

积分

2

听众

-218

音贝

音频应用新手发布

Rank: 3

积分
4039
发表于 2007-9-26 |
分享,谢谢大家啊
欢迎厂家入驻,推文!免费!微信:yinpinyingyong

262

积分

2

听众

121

音贝

音频应用

Rank: 1

积分
262
QQ
发表于 2007-9-27 |
谢谢发布,好东西,不错,点赞了啊! ~~~~
欢迎厂家入驻,推文!免费!微信:yinpinyingyong
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

音频应用搜索

小黑屋|手机版|音频应用官网微博|音频招标|音频应用 (鄂ICP备16002437号)

Powered by Audio app

快速回复 返回顶部 返回列表