ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:28.77KB ,
资源ID:4317570      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4317570.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(midi解码实例.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

midi解码实例.docx

1、midi解码实例MIDI解码实例(my E-MAIL 148398720qq.)/* header chunk */0x4D,0x54,0x68,0x64, /M T H D 0x00,0x00, 0x00,0x06, /the actual header information will always be 6 bytes. 0x00,0x00,/the file format. there are 3 formats:0 - single-track 1 - multiple tracks, synchronous2 - multiple tracks, asynchronous0x00,

2、0x01,/the number of tracks in the midi file.0x00,0x78,/the number of delta-time ticks per quarter note. (delta-time consists of ticks)1.a delta time is the number of ticks, and its MSB is 0. When MSB is 1, it is another format.2.the number of ticks per quarternote 3.the entire delta-time should be a

3、t most 4 bytes long. and its MSB is 0. When MSB is 1, it is another format./* track chunks */0x4D,0x54,0x72,0x6B, /M T R K0x00,0x00,0x00,0x57, /the length of the track (not including the track header) in bytes.0x00,0xFF,0x03,/ track name0x08,/ length of name 0x75,0x6E,0x74,0x69,0x74,0x6C,0x65,0x64,0

4、x00,0xFF,0x01,/ text event name0x02,/ length of name0x51,0x51,0x00,0xFF,0x58,0x04,0x04,0x02,0x18,0x08,/ time signature拍子符号0x00,0xFF,0x59,0x02,0x00,0x00,/ key signature音调符号0x00,0xFF,0x51,0x03,0x07,0xA1,0x20,/set tempo (microseconds/quarter note)0x00,0xC0,0x50,0x00,0xB0,0x07,0x78,0x00,0x90,0x5E,0x78,0

5、x0F,0x5E,0x00,/stop 0x90 is omitted because of the same format.0x0F,0x5E,0x78,/play 0x0F,0x5E,0x00,/stop. Here, 0x0F,0x90,0x5E,0x00 does the same work as 0x0F,0x80,0x5E,0x78.0x0F,0x5E,0x78,/play0x0F,0x5E,0x00,0x0F,0x5E,0x78,0x0F,0x5E,0x00,0x0F,0x5E,0x78,0x0F,0x5E,0x00,0x0F,0x5E,0x78,0x0F,0x5E,0x00,0

6、x00,0xFF,0x2F,0x00/the track(consist of midi events).1. a midi event is preceded by a delta-time.2. the midi event will consist of a delta-time and the parameters that would go to the command if it were included.Time = delta-time* tempo/ ticksTime :the cost of the time per quarternote.delta-time :Th

7、e number of ticks per quarternote will be played, just like 0x0F.tempo :microseconds per quarternote, just like 0x07,0xA1,0x20.ticks :the number of delta-time ticks per quarter note, just like 0x00,0x78.Attention :delta-time is a variable-length encoded value. this format, while confusing, allows la

8、rge numbers to use as many bytes as they need, without requiring small numbers to waste bytes by filling with zeros. the number is converted into 7-bit bytes, and the most-significant bit of each byte is 1 except for the last byte of the number, which has a msb of 0. this allows the number to be rea

9、d one byte at a time, and when you see a msb of 0, you know that it was the last (least significant) byte of the number.Addition:baike.baidu./view/7969.htmMIDI 文件格式MIDI 文件结构ChunksMIDI 文件由 chunks 组成:每个chunk 的组成: 类型长度数据 4 字节 4 字节 (前面规定的)长度 A 4-字节 chunk 类型 (ASCII) A 4-byte 长度(32 位, msb first) (前面规定的)长度

10、数据 有两种类型的 chunks :Header Chunks 有一个chunk标志“MThd”Track Chunks 有一个chunk标志“MTrk”一个 MIDI文件由一个header chunk和紧接的一个或多个track chunks组成。在chunks结构中,自长度区以后是严格规定好的。它可能容纳的chunks除了“MThd”或“MTrk”其它的将被忽略。MIDI说明书要求软件能够处理意想不到的chunk,并忽略掉整个chunk。 类型长度数据MIDI文件: MThd 6 MTrk . : MTrk . 数值表示法在MIDI 文件中,除了基本的MIDI数据,还有一个变化的数据(类型

11、)。如: delta-times 和 meta-events。这里有一些关于这样的数的一些资料,它们有通常有下面12种格式: 二进制数 可变长度数 二进制数二进制数的存贮: 每个字节8位 MSB first (最左方的字节权(或数位)大) (除非其它的描述) 可变长度数这个可变长度数是为了方便表示任意大的整数,而不必创建固定宽度的整数。 一个可变长度数被表示为连续的7位数据。从最高位到最低位,最后一个字节bit7等于0,前面的字节bit7等于1。例: 数可变长度数 十进制 十六进制 二进制 二进制 十六进制 - abcd aaaabbbbccccdddd 100000aa 1aabbbbc 0

12、cccdddd - 0:127 00:7F 0000 0000:0111 1111 0000 0000:0111 1111 00:7F 128:16383 80:3FFF 00000000 10000000:00111111 11111111 10000001 00000000:11111111 01111111 81 00:FF 7F 1000 03E8 11 1110 1000 10000111 01101000 87 68 100000 0F4240 1111 0100 0010 0100 0000 10111101 10000100 01000000 BD 84 40 如此,你可以从上

13、面的例子发现:小的数(0127)可以用一个字节表示。而(比较)大的数也可以表示出来。在MIDI 文件中,最大的数是0FFF,FFFF。这个规定了可变长度数允许利用32位整数。Header ChunksHeader chunk 数据部分包括3个16位(数据)区。这个区域描述:( MIDI 文件)格式、track 的数量和 MIDI 的时间设置。 Header chunk的长度是6个字节。无论如何软件必须遵循这个原则。即使它大于预期的,任何意料外的数据被忽略。Header Chunk Chunk 类型长度数据4 字节 (ASCII)4 字节 (32位二进制数) 16位16位16位MThd Chun

14、k数据部分的长度。 这是一个32位二进制数, MSB first. 这在 MIDI 1.0文件说明书中规定为6。不过,考虑到将来的扩充,(希望)任何MIDI文件的作者能够应付大的Header chunks。 MIDI 文件的格式。 这是 一个16位二进制数, MSB first。 有效的格式是: 0、 1 和 2 。 MIDI 文件中track chunk的数量。 这是 一个16位二进制数, MSB first。 这个定义在MIDI 文件中(一个)单位的 delta-time数。 这是 一个16位二进制数, MSB first。 有下列两者之一的的格式,依赖于最高位值。 位: 15 14 .

15、8 7 . 0 0 1/4音符tick数1 -帧/秒ticks / 帧bit 15 = 0: bits 0-14 每个1/4音符的 delta-time 数。bit 15 = 1: bits 0-7 每个 SMTPE 帧的 delta-time 数。bits 8-14 负数,表示每秒中SMTPE 帧的数量。有效数应符合MTC Quarter Frame消息。 -24 = 24 帧/秒 -25 = 25 帧/秒 -29 = 30 帧/秒, drop frame -30 = 30 帧/秒, non-drop frameMIDI File FormatsMIDI 文件有3种变化: 格式 0 容纳单一

16、的Track。 格式1 容纳一个和多个同步的Track(所有的Track同时播放)。 格式2 容纳一个和多个独立的Track(所有的Track独立播放)。 MIDI 文件格式 0格式0 MIDI 文件包括一个Header-Chunk 和一个 Track-Chunk。这个 Track-Chunk 包括所有的音符和节拍消息。MIDI 文件格式 1格式1 MIDI 文件包括一个Header-Chunk 和多个 Track-Chunk,所有的Track同时播放。格式1 中第一个Track是专用的。它看成“Tempo Map”。它包括所有的 meta-event :拍子记号、拍子、音序/Track 名称

17、、音序号、标记、SMTPE偏移量。在格式1中(这些)将放入在第一个 track 中。 MIDI 文件格式 2格式2 MIDI 文件包括一个Header-Chunk 和多个 Track-Chunk,每个Track表现出独立的次序。Track ChunksTrack chunk 的数据部分由一对和多对 组成。 是必须的,0是有效的 delta-time。Track Chunk 类型长度数据4 字节 (ASCII) 4 字节 (32位二进制数) (二进制数) MTrk . 相对于前一个事件的“tick”,是一个可变长度数。 下列之一: 事件注意:在 和 之间,没有明确的分隔符。这个是因为 delta

18、-times 和event有一个长度定义。 Delta-time 定义最后一个字节的最高位等于0。 MIDI Channel 消息有一个长度定义。 Sysex-events 和 meta-events 有一个清楚的长度区。 MIDI 事件MIDI Channel 消息包含: Channel Voice messages Channel Mode messages Running status 通常应用于MIDI文件中的同一状态的表示。Running status 也可以被取消 。Sysex 事件 (系统高级消息的详细描述)是令人满意的,相对于 MIDI channel 消息。可以被使用。Sys

19、ex-events 流行两种风格:Sysex EventsF0 F0 Sysex Event 这个导致 F0(消息的开头) 被发送。接着是。 一个可变长度数,表示 的长度 F0 作为 MIDI 消息发送。F7 F7 Sysex Event (or escape) 这个导致 被发送,没有其它的附加数。 一个可变长度数,表示 的长度 作为 MIDI 消息发送。在上面的案例中,消息的结束 F7,没有自动的发送。它必须明确的列入 or .中。大多数系统高级消息非常简单,且作为一个单一的包被发送。开始于 F0 ,结束于 F7 。这个是非常容易的应用于 的 F0 形式。可是,一些系统高级消息习惯于实时控制

20、设备。怎样合成一个存在适当的延时的由一连串的零件组成的系统高级消息。因为,能够深入到事件中中断一个消息,就有一定的延时。这个是可以应用 的 F7 形式。实际上,在 MIDI 流中 F7 Sysex Event 习惯于包含 any_data。例如 MIDI 系统实时消息(尽管它并不令人满意的)。例 1:一般的消息: F0 7E 09 03 01 01 F7 (Sample Dump Request - Device 9, sample number 257) 可以: F0 06 7E 09 03 01 01 F7 或者交替: F7 07 F0 7E 09 03 01 01 F7 例 2:MIDI

21、 系统实时消息“停止”用 F7 01 FC ,当“继续”用 F7 01 FB。 假设:你想停止一个外部设备鼓,发送一个“停止”,接着48个 delta-time 单元后“继续”。完整的 delta-tem 事件序列象下面这样: 00 F7 01 FC 30 F7 01 FBMeta 事件Meta Events 是用来表示象 track 名称、歌词、提示点等,它并不作为 MIDI 消息被发送,但是它仍然是 MIDI 文件的(有用的)组成部分。Meta Events 的基本形式:FF 一个字节描述 meta-event 的类型。 可能的围是 00-7F。 并不是所有的值都在这个围,但是程序能够应付

22、意想不到的值,并诊断这个长度和忽略预期外的数据部分。 紧跟的数据的长度。 这是一个可变长度(数)。 0 是一个有效 0 或更多的字节数据。 Meta EventsFF 00 02 ss ss 音序号这是一个可选的事件,它只能产生在第一个track,并且在非零时刻之前。格式2文件中,这个用来识别每个 track,如果忽略,这个序列号从而用 track 出现的次序表示。. 格式1文件中,这个事件只能产生在第一个 track。 ss ss Sequence Number, 16 bit binary FF 01 文本事件这个事件是用来注释 track 的文本。 独立的8位数据(其它的ASCII文本)

23、 也是允许的。 的长度(可变长度数) 个字节的 ASCII 文本或8位二进制数FF 02 版本通告这个事件是用ASCII 文本表示的通告。 这个是制定的形式“(C) 1850 J.Strauss”这个事件用于第一个 track ,第一个事件。FF 03 音序 / Track 名称音序或 track 的名称。FF 04 乐器名称描述这个 track 使用的乐器。 这个用来详细的记述(这个) MIDI channel 在 (这个)track 里使用的乐器。FF 05 歌词歌曲的歌词。 通常每个音节都有自己的歌词,在这个时候歌词将被唱起来。 FF 06 标记通常用于格式0或格式1的第一个 track

24、 。 标记有意义的点(如:“诗篇1”) FF 07 暗示用来表示舞台上发生的事情。如:“幕布升起”、“退出,台左”等。 FF 20 01 cc MIDI Channel 前缀关联紧跟的 meta-events 和 sysex-events 的 MIDI channel。直到下一个(必须包含MIDI channel 信息) cc MIDI channel 1-16 围: 00-0F FF 2F 00 Track 结束这个事件是必须的 。 它用来扫除定义的长度。它的本质信息是这个 track 是循环还是连接另一个 track 。FF 51 03 tt tt tt 拍子这个设定1/4音符的速度,用微

25、妙表示。这个意味着改变一个 delta-time 的单位长度。 (注意1) 如果没有指出,缺省的速度为 120拍/分。这个相当于 tttttt = 500,000。tt tt tt 新的拍子,表示1/4音符24位二进制数FF 54 05 hh mm ss fr ff SMTPE 偏移量可选择的的事件,描述 track 开始时的 SMTPE 时间。这个事件必须发生在非零 delta-time之前,且在第一个事件之前。在格式1中,这个事件必须在第一个 track 中(the tempo map)。hh mm ss fr 小时/分/秒/帧 用 SMTPE 格式。 这个必须与消息 MIDI Time

26、Code Quarter Frame 一致 (细节, 时间编码必须介绍 hh) ff Fractional frame, in hundreths of a frame FF 58 04 nn dd cc bb 拍子记号拍子记号的形式:nn/2dd 如: 6/8 用 nn=6,dd=3 表示。 这个参数 cc 是表示每个 MIDI 时钟的节拍器的 tick 数目。通常24 个 MIDI 时钟为一个1/4音符。可是一些软件允许用户自己设置这个值。参数 bb 定义:24 MIDI 时钟(这个“一般”(表示)1/4音符)中 1/32音符的数目。nn 拍子记号,分子 dd 拍子记号,分母表示为 2 的(dd次)冥。 例:一个分母 4 用 dd=2 表示。cc 每个 MIDI 时钟节拍器的 tick 数目。 bb 24个MIDI时钟中1/32音符的数目(8是标准的)。FF 59 02 sf mi 音调符号音调符号,表示升调或降调值,大调或小调的标志。 0 表示 C 调,负数表示“降调”,正数表示“升调”。 sf 升调或降调值 -7 = 7 升调 0 = C 调 +7 = 7 降调mi 0 = 大调 1 = 小调 FF 7F 音序器描述 Meta-event 这个在 MIDI 文件中等同于系统高级事件。在

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1