MIDI音乐格式

合集下载

midi文件解析

midi文件解析

midi⽂件解析midi⽂件说明该标准MIDI⽂件(SMF)是专门⽤来存储⾳序器录制和播放(不管是⾳序器是软件或硬件)中的数据⽂件格式。

此格式存储标准MIDI消息(即带有适当数据字节的状态字节)以及每个消息的时间戳(即表⽰“播放”事件之前要等待多少个时钟脉冲的⼀系列字节)。

该格式可以保存以下信息:速度,每四分⾳符分辨率的脉冲数(或以秒为单位表⽰的分辨率,即SMPTE设置),时间和键签名以及⾳轨和样式的名称。

它可以存储多个模式和轨道,以便任何应⽤程序在加载⽂件时都可以保留这些结构。

注:甲轨道通常是类似于⼀个⾳乐的⼀部分,如⼀个⼩号⼀部分。

甲图案将是类似于所有⾳乐的部分(即,⼩号,⿎,钢琴等)对⼀⾸歌曲或歌曲的摘录。

该格式设计为通⽤格式,因此任何定序器都可以读取或写⼊此类⽂件⽽不会丢失最重要的数据,并且⾜够灵活,以使特定应⽤程序可以以其他应⽤程序获胜的⽅式存储⾃⼰的专有“额外”数据加载⽂件时不要感到困惑,可以放⼼地忽略它不需要的多余内容。

可以将MIDI⽂件格式视为ASCII⽂本⽂件的⾳乐版本(除了MIDI⽂件也包含⼆进制数据),以及将各种⾳序器程序作为⽂本编辑器都可以读取该⽂件。

但是,与ASCII不同,MIDI⽂件格式可将数据分块保存(即字节组,后⾯带有ID和⼤⼩),可以对其进⾏解析,加载,跳过等操作。

因此,可以轻松扩展它以包括程序的专有信息。

例如,某个程序可能想要保存⼀个“标志字节”,以指⽰⽤户是否已打开节拍器的声⾳。

程序可以将该标志字节放⼊MIDI ⽂件中,以便其他应⽤程序可以跳过此字节⽽不必了解该字节是什么意思。

将来,MIDI⽂件格式也可以扩展为包括新的“正式”数据块,所有⾳序器程序都可以选择加载和使⽤。

这可以在不使旧数据⽂件过时的情况下完成(即,格式被设计为以向后兼容的⽅式可扩展)。

什么是块?数据总是保存在⼀个块中。

MIDI⽂件中可以有很多块。

每个块可以具有不同的⼤⼩(即,⼤⼩是指块中包含多少个字节)。

midi文件格式及解码代码

midi文件格式及解码代码

midi文件格式及解码代码类别:技术文章来源:未知作者:未知关键字:midi加入日期:2010-8-4standard midi file formatdustin caldwellthe standard midi file format is a very strange beast. when viewed as a whole, it can be quite overwhelming. of course, no matter how you look at it, describing a piece of music in enough detail to be able to reproduce it accurately is no small task. so, while complicated, the structure of the midifile format is fairly intuitive when understood.i must insert a disclaimer here that i am by no means an expert withmidi nor midi files. i recently obtained a gravis ultrasound board for my pc, and upon hearing a few midi files (.mid) thought, "gee, i'd like to be able to make my own .mid files." well, many aggravating hours later, i discovered that this was no trivial task. but, i couldn't let a stupid file format stop me. (besides, i once told my wife that computers aren't really that hard to use,and i'd hate to be a hypocrite) so if any errors are found in this information, please let me know and i will fix it. also, this document's scope does not extend to every type of midi command and every possible file configuration. it is a basic guide that should enable the reader (with a moderate investment in time) to generate a quality midi file.1. overviewa midi (.mid) file contains basically 2 things, header chunks and track chunks. section 2 explains the header chunks, and section 3 explains the track chunks. a midi file contains one header chunk describing the file format, etc., and any number of track chunks. a track may be thought of in the same way as a track on a multi-track tape deck. you may assign one track to each voice, each staff, each instrument or whatever you want.2. header chunkthe header chunk appears at the beginning of the file, and describes thefile in three ways. the header chunk always looks like:4d 54 68 64 00 00 00 06 ff ff nn nn dd ddthe ascii equivalent of the first 4 bytes is mthd. after mthd comes the 4-byte size of the header. this will always be 00 00 00 06, because the actual header information will always be 6 bytes.ff ff is the file format. there are 3 formats:0 - single-track1 - multiple tracks, synchronous2 - multiple tracks, asynchronoussingle track is fairly self-explanatory - one track only. synchronous multiple tracks means that the tracks will all be vertically synchronous, or in other words, they all start at the same time, and so can represent different partsin one song. asynchronous multiple tracks do not necessarily start at the same time, and can be completely asynchronous.nn nn is the number of tracks in the midi file.dd dd is the number of delta-time ticks per quarter note. (more about this later)3. track chunksthe remainder of the file after the header chunk consists of track chunks.each track has one header and may contain as many midi commands as you like. the header for a track is very similar to the one for the file:4d 54 72 6b xx xx xx xxas with the header, the first 4 bytes has an ascii equivalent. this one ismtrk. the 4 bytes after mtrk give the length of the track (not including thetrack header) in bytes.following the header are midi events. these events are identical to theactual data sent and received by midi ports on a synth with one addition. amidi event is preceded by a delta-time. a delta time is the number of ticksafter which the midi event is to be executed. the number of ticks per quarter note was defined previously in the file header chunk. this delta-time is a variable-length encoded value. this format, while confusing, allows large 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 read one byte at atime, and when you see a msb of 0, you know that it was the last (least significant) byte of the number. according to the midi spec, the entire delta- time should be at most 4 bytes long.following the delta-time is a midi event. each midi event (except arunning midi event) has a command byte which will always have a msb of 1 (the value will be >= 128). a list of most of these commands is in appendix a. each command has different parameters and lengths, but the data that follows the command will have a msb of 0 (less than 128). the exception to this is a meta- event, which may contain data with a msb of 1. however, meta-events require a length parameter which alleviates confusion.one subtlety which can cause confusion is running mode. this is wherethe actual midi command is omitted, and the last midi command issued is assumed. this means that the midi event will consist of a delta-time and the parameters that would go to the command if it were included.4. conclusionif this explanation has only served to confuse the issue more, theappendices contain examples which may help clarify the issue. also, 2utilities and a graphic file should have been included with this document:dec.exe - this utility converts a binary file (like .mid) to a tab-delimitedtext file containing the decimal equivalents of each byte.rec.exe - this utility converts a tab-delimited text file of decimal valuesinto a binary file in which each byte corresponds to one of the decimal values.midinote.ps - this is the postscript form of a page showing note numbers witha keyboard and with the standard grand staff.appendix a1. midi event commandseach command byte has 2 parts. the left nybble (4 bits) contains the actual command, and the right nybble contains the midi channel number on which the command will be executed. there are 16 midi channels, and 8 midi commands (the command nybble must have a msb of 1).in the following table, x indicates the midi channel number. note that alldata bytes will be <128 (msb set to 0).hex binary data description8x 1000xxxx nn vv note off (key is released)nn=note numbervv=velocity9x 1001xxxx nn vv note on (key is pressed)nn=note numbervv=velocityax 1010xxxx nn vv key after-touchnn=note numbervv=velocitybx 1011xxxx cc vv control changecc=controller numbervv=new valuecx 1100xxxx pp program (patch) changepp=new program numberdx 1101xxxx cc channel after-touchcc=channel numberex 1110xxxx bb tt pitch wheel change (2000h is normal or nochange)bb=bottom (least sig) 7 bits of valuett=top (most sig) 7 bits of valuethe following table lists meta-events which have no midi channel number. they are of the format:ff xx nn ddall meta-events start with ff followed by the command (xx), the length, or number of bytes that will contain data (nn), and the actual data (dd).hex binary data description00 00000000 nn ssss sets the track's sequence number.nn=02 (length of 2-byte sequence number)ssss=sequence number01 00000001 nn tt .. text event- any text you want.nn=length in bytes of texttt=text characters02 00000010 nn tt .. same as text event, but used forcopyright info.nn tt=same as text event03 00000011 nn tt .. sequence or track namenn tt=same as text event04 00000100 nn tt .. track instrument namenn tt=same as text event05 00000101 nn tt .. lyricnn tt=same as text event06 00000110 nn tt .. markernn tt=same as text event07 00000111 nn tt .. cue pointnn tt=same as text event2f 00101111 00 this event must come at the end of each track51 01010001 03 tttttt set tempotttttt=microseconds/quarter note58 01011000 04 nn dd ccbb time signaturenn=numerator of time sig.dd=denominator of time sig. 2=quarter3=eighth, etc.cc=number of ticks in metronome clickbb=number of 32nd notes to the quarternote59 01011001 02 sf mi key signaturesf=sharps/flats (-7=7 flats, 0=key of c,7=7 sharps)mi=major/minor (0=major, 1=minor)7f 01111111 xx dd .. sequencer specific informationxx=number of bytes to be sentdd=datathe following table lists system messages which control the entire system. these have no midi channel number. (these will generally only apply to controlling a midi keyboard, etc.)hex binary data descriptionf8 11111000 timing clock used when synchronization isrequired.fa 11111010 start current sequencefb 11111011 continue a stopped sequence where leftofffc 11111100 stop a sequencethe following table lists the numbers corresponding to notes for use in note on and note off commands.octave|| note numbers# |||| c | c# | d | d# | e | f | f# | g | g# | a | a# | b-----------------------------------------------------------------------------0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 111 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 232 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 353 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 474 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 595 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 716 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 837 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 958 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 1079 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 11910 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |bibliography"midi systems and control" francis rumsey 1990 focal press"midi and sound book for the atari st" bernd enders and wolfgang klemme 1989 m&t publishing, inc.midi file specs and general midi specs were also obtained by sending e-mail to listserv@ with the phrase get midispec packagein the message.------------------------------- dec.cpp ------------------------------------/* file dec.cppby dustin caldwell (dustin@)*/#include <dos.h>#include <stdio.h>#include <stdlib.h>void helpdoc();main(){file *fp;unsigned char ch, c;if((fp=fopen(_argv[1], "rb"))==null) /* open file to read */ {printf("cannot open file %s\n",_argv[1]);helpdoc();exit(-1);}c=0;ch=fgetc(fp);while(!feof(fp)) /* loop for whole file */{printf("%u\t", ch); /* print every byte's decimal equiv. */ c++;if(c>8) /* print 8 numbers to a line */{c=0;printf("\n");}ch=fgetc(fp);}fclose(fp); /* close up */}void helpdoc() /* print help message */{printf("\n binary file decoder\n\n");printf("\n syntax: dec binary_file_name\n\n");printf("by dustin caldwell (dustin@)\n\n"); printf("this is a filter program that reads a binary file\n"); printf("and prints the decimal equivalent of each byte\n"); printf("tab-separated. this is mostly useful when piped \n"); printf("into another file to be edited manually. eg:\n\n"); printf("c:\>dec sonata3.mid > son3.txt\n\n");printf("this will create a file called son3.txt which can\n"); printf("be edited with any ascii editor. \n\n");printf("(rec.exe may also be useful, as it reencodes the \n"); printf("ascii text file).\n\n");printf("have fun!!\n");}---------------------------- rec.cpp ----------------------------------/* file rec.cppby dustin caldwell (dustin@)*/#include <dos.h>#include <stdio.h>#include <ctype.h>#include <stdlib.h>void helpdoc();main(){file *rfp, *wfp;unsigned char ch, c;char s[20];if((rfp=fopen(_argv[1], "r"))==null) /* open the read file */ {printf("cannot open file %s \n",_argv[1]);helpdoc();exit(-1);}if((wfp=fopen(_argv[2], "wb"))==null) /* open the write file */ {printf("cannot open file %s \n",_argv[1]);helpdoc();exit(-1);}c=0;ch=fgetc(rfp);while(!feof(rfp)) /* loop for whole file */{if(isalnum(ch)) /* only 'see' valid ascii chars */{c=0;while(isdigit(ch)) /* only use decimal digits (0-9) */ {s[c]=ch; /* build a string containing the number */c++;ch=fgetc(rfp);}s[c]=null; /* must have null terminator */fputc(atoi(s), wfp);/* write the binary equivalent to file */ }ch=fgetc(rfp); /* loop until next number starts */}fclose(rfp); /* close up */fclose(wfp);}void helpdoc() /* print help message */{printf("\n text file encoder\n\n");printf("\n syntax: rec text_file_name binary_file_name\n\n");printf("by dustin caldwell (dustin@)\n\n");printf("this is a program that reads an ascii tab-\n");printf("delimited file and builds a binary file where\n");printf("each byte of the binary file is one of the decimal\n");printf("digits in the text file.\n");printf(" eg:\n\n");printf("c:\>rec son3.txt son3.mid\n\n");printf("(this will create a file called son3.mid which is\n");printf("a valid binary file)\n\n");printf("(dec.exe may also be useful, as it decodes binary files)\n\n"); printf("have fun!!\n");}。

MIDI文件格式分析

MIDI文件格式分析

MIDI文件格式分析MIDI文件属于二进制文件,这种文件一般都有如下基本结构: 文件头+数据描述文件头一般包括文件的类型,因为Midi文件仅以.mid为扩展名的就有0类和1类两种,而大家熟悉的位图文件的格式就更多了,所以才会出现文件头这种东西。

而数据描述部份是主体,我们现在来一起分析它的结构:在每个Midi文件的开头都有如下内容,它们的十六进制代码为:“4d 54 68 64 00 00 00 06 ff ff nn nn dd dd”。

前四个是ASCII字符“MThd”是用来鉴别是否Midi文件,而随后的四个字节是指明文件头描述部分的字节数,它总是6,所以一定是“00 00 00 06”,以下是剩余部分的含义:以上就是MIDI文件头了,后面的所有内容都是真正做事的,我们先来看看它的构成。

MIDI的数据是由若干个格式相同的子数据构成的,这些子数据在多音轨的格式中记录了一个轨道的所有信息。

多加一个音轨,就简单地把数据追加在前一音轨的后面就可以了,不过不要忘记更改文件头中的nn nn(轨道数)。

先看全局音轨。

全局音轨包括歌曲的附加信息(比如标题和版权)、歌曲速度和系统码(Sysx)等内容。

不管是全局音轨还是含有音符的音轨,都以“4D 54 72 6B”开头,它其实是ASCII字符“MTrk”,其后跟着一个4个字节的整数,它标志了该轨道的字节数,这不包括前面的4个字节和本身的4个字节。

这一点,我们可以在后面的例子中去理解。

接着就是记录数据的地方了,每一个数据有着相同的结构:时间差+事件。

所谓时间差,指的是前一个事件到该事件的时间数,它的单位是tick(MIDI的最小时间单位)。

它的构成比较特殊,这里要用二进制来说明。

一个字节有8位,如果仅使用7位,它可以表示0~127这128个数,而剩下的一位,则用来作为标志。

如果要表示的数在以上范围,则这个标志为0,这时,一个7位的字节可以表示0~127tick。

如果要表示的数超出了这个范围(比如240),则把标志设置成1,然后记录下高7位,剩下的留给下一个字节,在该例中240可以分解成128*1+112,这里的1就是第一个字节要记录的,加上标志位,应该为10000001,即十六进制的81;而112 是下一个字节记录的,它的十六进制为70:所以要表示240这个时间,要写成81 70。

MIDI文件格式

MIDI文件格式

Header Chunk
Header Chunk 中包含了曲目的信息,包括 MIDI 文件格式类型(MIDI Format Type) , 轨道数 (Number of Tracks) , 分时信息 (Time Division) 。 标准的 MIDI 文件中只有一个 Header Chunk 并且始终在文件最前。其格式如下: Offset Length Type Description Value
Chunk Data
用途:存储用户指定的数据。 结构:若干个字节组成。数据占有的字节数在 Chunk Header-Size 中指定。若 Chunk Header-Size 为 0 则此 Chunk Data 没有数据。
MIDI 文件结构
一个标准的 MIDI 文件由数个 Chunk 组成。其中第一个为 Header Chunk ,紧接着跟 有一个或多个 Track Chunk 。其结构示意如下: Header Chunk Track Chunk 1 Track Chunk 2 ……
Track Chunk Data
在 Track Chunk Data 中存储了若干对 [<Delta-time> <Event> ]。 <Delta-time>是必须 的,0 是有效的 Delta-time。每个<Event>都必需在前面指出<Delta-time>。 [<Delta-time 1> <Event 1> ]
大小取决与 Delta-time1 和 Event 1
[<Delta-time 2> <Event 2> ]
大小取决与 Delta-time 2 和 Event 2

MIDI文件格式结构 2

MIDI文件格式结构 2

┌─┬─────────┐
│0 │ 每一拍的计数值 │
└─┴─────────┘
b15 b14  ̄ b0
其最高位一定要设置为0,其它的15位表示每一拍的计数值。如该数据为96(以八分音符为一拍),则表示一个四分音符延时数应该为192。
另外,在midi文件中,long和int型数据均将高字节值存放入低地址上,如一个long型数据为0x45678,则在文件中, 存放的结果为:0x00,0x04,0x56,0x78。而在内存中,int,long的变量值通常将崐高字节值存放高地址上。因此,存放数据时,应该作一下调整。
4、设置音量大小
格式:0xbn ,07,size
0xbn,39,size
7,表示设置主音量的高字节值;39表示设置主音量的低字节值。
5、设置时间记号
格式:0xff 0x58 04 nn dd cc bb
nn和dd直接对应到谱号的数字,dd使用2的指数。如3/8,则nn=3,dd=3。cc是代表第次节拍器打后的时间是几个midi clock。bb通常设置为8表示多少个midi clock等于1/4 拍。
delta-time 之后就是MIDI事件,每个MIDI事件(除了正在运行的事件外)带有一个最高有效位总是1的命令字节(值将>128)。大部分命令的列表在附录A中。每个命令都有不同的参数和长度,但是接下来的数据将是最高有效位为零(值将<128)。这里有个例外就是meta-event,最高有效位可以是1。然而,meta-events需要一个长的参数以区分。
track chunk为用来播放歌曲的数据信息。每一个track chunk是一组简单的midi码(包括一些非midi码)的集合。它又由头部信息和崐若干个mtrk event组合而成。

经常玩音乐的人应该常听到MIDI

经常玩音乐的人应该常听到MIDI

经常玩音乐的人应该常听到MIDI(Musical InstrumentDigitalInterface)这个词,MIDI允许数字合成器和其他设备交换数据。

MID文件格式由MIDI继承而来。

MID文件并不是一段录制好的声音,而是记录声音的信息,然后在告诉声卡如何再现音乐的一组指令。

这样一个MIDI文件每存1分钟的音乐只用大约5~10KB。

今天,MID文件主要用于原始乐器作品,流行歌曲的业余表演,游戏音轨以及电子贺卡等。

*.mid文件重放的效果完全依赖声卡的档次。

*.mid格式的最大用处是在电脑作曲领域。

*.mid文件可以用作曲软件写出,也可以通过声卡的MIDI口把外接音序器演奏的乐曲输入电脑里,制成*.mid文件。

MP3 MP3的全称是Moving Picture Experts Group Audio Layer III。

简单的说,MP3就是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3。

MP3是利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的file,换句话说,能够在音质丢失很小的情况下把文件压缩到更小的程度。

而且还非常好的保持了原来的音质。

正是因为MP3体积小,音质高的特点使得MP3格式几乎成为网上音乐的代名词。

每分钟音乐的MP3格式只有1MB左右大小,这样每首歌的大小只有3-4兆字节。

使用MP3播放器对MP3文件进行实时的解压缩(解码),这样,高品质的MP3音乐就播放出来了。

WMA:最具实力的敌人 WMA (Windows MediaAudio)格式是来自于微软的重量级选手,后台强硬,音质要强于MP3格式,更远胜于RA格式,它和日本YAMAHA 公司开发的VQF格式一样,是以减少数据流量但保持音质的方法来达到比MP3压缩率更高的目的,WMA的压缩率一般都可以达到1:18左右,WMA的另一个优点是内容提供商可以通过DRM(DigitalcentersManagement)方案如Windows Media centersManager7加入防拷贝保护。

常见音频文件格式有哪些?

常见音频文件格式有哪些?

常见音频文件格式有哪些?展开全文常见音频文件格式有哪些?1.CD;2.OGG;3.MP3;4.ASF、WMA;5.WAV;6.MP3PRO;7.RM;8.REAL;9.APE;10.MODULE;11.MIDI;12.VQF1. CD是英文CompactDisc的缩写,意为激光唱片其专业术语原为“数字化精密型唱片及放唱系统”。

它可以说是所以音频文件中音质最好的,不过它的最大弱点就是容量太大。

2. Ogg是一种新的音频压缩格式,类似于MP3等现有的音乐格式。

但有一点不同的是,它是完全免费、开放和没有专利限制的。

Vorbis是这种音频压缩机制的名字,而Ogg则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。

目前该计划只实现了Ogg这一部分。

OggVorbis文件的扩展名是.OGG。

这种文件的设计格式是非常先进的。

现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。

3.MP3是第一个实用的有损音频压缩编码。

在mp3出现之前,一般的音频编码即使以有损方式进行压缩能达到4:1的压缩比例已经非常不错了。

但是,mp3可以实现12:1的压缩比例,这使得mp3迅速地流行起来。

mp3之所以能够达到如此高的压缩比例同时又能保持相当不错的音质是因为利用了知觉音频编码技术,也就是利用了人耳的特性,削减音乐中人耳听不到的成分,同时尝试尽可能地维持原来的声音质量,MP3这个扩展名表示的当然就是MP3压缩格式文件了。

MP3的全称实际上是MPEGAudio Layer-3,而不是MPEG3。

由于MP3具有压缩程度高(1分钟CD音质音乐一般需要1M字节)、音质好的特点,所以MP3是目前最为流行的一种音乐文件。

在网上有很多可以下载MP3的站点,还可以通过一些交换软件(比如Napster)进行音乐交换。

不过由于音乐工业的强烈抵制(版权问题),这些服务都面临着关闭或改为收费服务的压力。

midi格式标准

midi格式标准

midi格式标准
MIDI格式属于二进制文件,它的基本结构包括文件头和数据描述。

文件头
一般会包括文件的类型,因为Midi文件仅以.mid为扩展名的就有0类和1类两种。

MThd是midi文件的头文件音轨,用于记录midi文件的类型、音轨数量、时间格式。

随后的四个字节一定是00 00 00 06,这四个字节存储的内容是MThd数据部分包含多少字节的数据。

之后两个字节用于指定midi的格式,包括单音轨、同步多音轨和不同步多音轨。

与波形文件不同,MIDI文件不对音乐进行抽样,而是对音乐的每个音符记
录为一个数字,所以与波形文件相比文件要小得多,可以满足长时间音乐的需要。

MIDI标准规定了各种音调的混合及发音,通过输出装置可以将这些
数字重新合成为音乐。

如需更多MIDI格式标准相关的信息,建议咨询专业技术人员获取帮助。

MIDI详解

MIDI详解

MIDI详解MIDI详解MIDI信息(MIDI message)可分为系统信息(System message)和通道信息(Channel message)两种,Channel message中的status byte 包含channel编号,指定信息由某个channel 接收;System message则没有,所以每⼀个channel都可以收。

System message与Channel message的内容分别如下:⼀、通道信息(Channel Voice Messeages)针对指定通道的MIDI设备,让相应通道上的设备响应,参与声⾳传输和编辑。

各个设备都能发⽣。

也就是,改变某个参数的时候,整个所对应的通道类的相关数据都被改变参数所影响(⼀)、⾳符开关信息(Note On/Off)⾳符发声是通过两个信息控制的,当发声开始时,收到Note on信息,当持续够所规定的时值的时候,要停⽌的发⽣便发送Note off信息。

(⼆)、触后信息(After Touch)触后信息指的是当⾳符被“触键”发⽣后由于触键压⼒的再次变化⽽⽣成改变⾳⾊特性的信息,主要在⼀些⾼级的合成器或⾳源中具有此功能。

1、键位触后(Key Aftertouch)或复⾳触后(Polyphonic Aftertouch)键位触后主要针对的是某些要被变化的⾳符,所以它的两个数据是键位压⼒值和⾳符编号。

也就是说在同⼀个通道,有些⾳符可以被设置为键位触后,⽽有些⾳符则不设置为键位触后。

2、通道触后(Channel Aftertouch)通道触后主要针对的是要被改变的某个通道,所以它的两个数据值是压⼒值(即⼒度)和通道号。

也就是说,可以将某1个或2个不同的通道都设为键位触后,这样,每个通道的所有⾳符都具备触后功能。

(三)、⾳⾊程序改变(Program Change)⾳⾊程序改变也就是俗称的⾳⾊变化,即在同⼀个通道中如何使⽤多个⾳⾊,就涉及到⾳⾊变化。

常见音频文件格式简介

常见音频文件格式简介

常见音频文件格式简介1.--MIDI(.MID)MIDI是乐器数字接口的英文缩写,是数字音乐/电子合成乐器国际标准。

MIDI文件有几个变通的格式,其中CMF文件是随声卡一起使用的音乐文件,于MIDI文件非常相似,只是文件头略有差别;另一种MIDI文件是WINDOWS使用的RIFF文件的一种子格式,称为RMID,扩展名为.RMI。

2.--WA VE(.W A V)由MICROSOFT公司开发的一种W A V声音文件格式,是如今电脑上最为常见的声音文件,他符合RIFF文件规范,用于保存WINDOWS平台的音频信息资源,被WINDOWS平台机器应用程序所广泛支持,W A VE格式支持MSADPCM、CCIPTALAW、CCIPT-LAW和其他压缩算法,支持多种音频位数,采样频率和声道,但其缺点是文件体积较大,所以不适合长时间纪录。

3.--MP1/.MP2/.MP3MPEG频文件根据压缩质量和编码复杂程度的不同可分为三层(MPEG AUDIO LAYER 1/2/3分别与MP1,MP2和MP3这三种声音文件相对应MPEG音频编码具有很高的压缩率,MP1和MP2 的压缩率分别为4:1和6:1--8:1,而MP3的压缩率则高达10:1--12:1。

目前INTERNET上的音乐格式以MP3最为常见。

MP3是一种有损压缩,但是它的最大优势是一极小的声音失真换来了较高的压缩比。

4.--.MP4MP3问世不久,就凭这较高的压缩比12:1和较好的音质创造了一个全新的音乐领域,然而MP3的开放性却最终不可避免的导致了版权之争,在这样的背景之下,文件更小,音质更佳,同时还能有效保护版权的MP4就应运而生了。

MP3和MP4之间其实并没有必然的联系,首先MP3是一种音频压缩的国际技术标准,而MP4确实一个商标的名称,其次,他采用的音频压缩技术也迥然不同,MP4采用的是美国电话电报公司所研发的,以“知觉编码”为关键技术的a2b音乐压缩技术可将压缩比成功的提高到15:1,最大可达到20;1而不影响音乐的实际听感,同时mp4在加密和授权方面也做了特别设计,它有如下特点:(1)每首mp4乐曲就是一个扩展名为.exe的可执行文件。

2018-11-14MIDI音乐格式笔记学习

2018-11-14MIDI音乐格式笔记学习

2018-11-14MIDI⾳乐格式笔记学习2018-11-14 MIDI⾳乐格式笔记学习梁⼦20163933关于MIDI⽂件格式⽬前已知的:1. .mid⽂件属于⼆进制⽂件,可以通过电脑或者⼿机上的⾳乐播放器直接播放。

2. 若需要阅读(观看)midi格式⽂件,可以使⽤binary viewer等⼆进制读取器打开。

通过研究,格式如下:⽂件格式主要包含两部分:⾸部块(Header chunk),⾳轨块(track chunk)。

其格式分别为:MThd <数据长度> <Header数据> //⾸部块MTrk <数据长度> <Track模块> //⾳轨块例如读取到的:其中:Header Chunk/*4D 54 68 6400 00 00 0600 01 ff ff00 06 nn nn 指定轨道数:实际⾳轨数加上全局的⾳轨00 60 dd dd指定基本时间:⼀般为120 (00 78),即⼀个四分⾳符的tick数,tick是MIDI中的最⼩时间单位*/char Midild[4]; //MIDI⽂件头标志,⼀般为MThdlong length; //⽂件⾸部数据长度(除它本⾝和⽂件头标志专⽤的字节以外),通常他设置为6,即下⾯三个部分的字节长度int format; //表⽰MIDI⽂件存放的格式,包括:// 0)当format为0时只有⼀个Track Chunk,// 1)当format为1时有⼀个或多个Track Chunk// 2)当format为2时只有⼀个或多个各⾃独⽴的Track Chunkint TrackNum;int division; //指定了计数的⽅法其中对于division的详细说明:在上⾯我们注意到以下问题:上⾯的数据结构默认了:long类型是4Byte,int为2Byte,char为1Byte。

⾳轨块 track chunk⾳轨块⽤来播放⾳乐⽂件的数据信息,每⼀个track chunk对应着⼀组MIDI码,它由**头部信息和若⼲个⾳轨事件(mtrk event)**构成。

MIDI文件格式实例剖析

MIDI文件格式实例剖析

4D 54 68 64 // “MThd” 00 00 00 06 // 长度永远是6,后面有6个字节数 00 01 // 0-单轨; 1-多轨,同步; 2-多轨,异步 00 02// 轨道数,即为”MTrk”的个数 00 78 // 基本时间格式,即一个四分音符的tick数 4D 54 72 6B // “MTrk”,全局轨为附加信息(如标 版权速度和系统码(Sysx)等) 00 00 01 92 // 长度 00 FF 01 // 音轨名称 14 70 // 长度 72 6F 64 75 63 65 64 5F 62 79 5F 4E 49 41 4F 4E 69 61 6F// 歌曲的题目 00 FF 03 // 版权公告
02 //长度 00 00// sf指明乐曲曲调中升号、降号的数目。 如,A大调在五线谱上注了三个升号,那么sf=03 升号数目写成0x,降号数目写成8x 。mf指出 曲调是大调还是小调。大调mf=00,小调mf=01 00 //<delta-time> C0 00 //通道1,音色为00 00 //<delta-time> 90 3C 50 //开3C音 61 80 // <delta-time> 3C 00//关3C音 08 //<delta-time> 90 3E 50 //开3E音
实例列举(两只老虎)
08 //长度 4E 49 41 4F 4E 69 61 6F //作曲家 00 FF 51 //设定速度以微秒(us)为单位,是四分音符
的时值
03 //长度 09 27 C0 //四分音符为 500,000 us,即 0.5s 00 FF 58 //拍பைடு நூலகம்标记 04//长度 04 02 18 08 // nn dd cc bb 拍号表示为四个数字。 nn和dd代表分子和分母。分母指的是2的dd次 方, cc代表一个四分音符应该占多少个MIDI时间 单位,bb代表一个四分音符的时值等价于几个 32分音符 00 FF 59 //谱号信息

MIDI文件格式分析

MIDI文件格式分析

MIDI文件格式分析
MIDI(Musical Instrument Digital Interface)是一种数字音乐文
件格式,可以用来存储音乐的音符、节奏、音量、表情等信息,用于控制
电子音乐设备的演奏。

MIDI文件以二进制形式存储,通常以.midi或.mid
作为文件扩展名。

MIDI文件是由一系列MIDI事件组成的,这些事件可以包括音符的开
始和结束、音量的变化、音色设置等等。

每个MIDI事件都有一个时间戳,用于确定事件在时间轴上的位置。

MIDI文件中可以同时包含多个音轨,
每个音轨可以包含不同的乐器或声音。

MIDI文件使用的是一种类似于乐谱的表示方法,通过一系列的音符
和休止符,以及音符的时值和音高来表示音乐。

音符的时值表示音符持续
的时间,一般以四分音符为基准,比如一个八分音符的时值是四分音符的
一半。

音高通过一个0到127的数值来表示,其中0表示最低音,127表
示最高音。

除了音符和休止符,MIDI文件还可以包含一些控制事件,用于控制
演奏效果。

比如,音量控制事件可以用来改变音符的音量大小,音色控制
事件可以用来改变音符的音色,以及控制器事件可以用来实现各种特殊效果。

标准MIDI文件格式

标准MIDI文件格式

标准的MIDI文件格式就像奇异的兽。

总体看来,它是那样的让你无法抗拒。

当然,你怎样看它无关紧要,可是用足够多的描述符描述一段音乐并使它能够重现,可不是很少的工作就可以完成的。

然而,它虽然复杂,但是真正理解之后,MIDI文件格式的结构还是很直观明了的。

1.概述:一个MIDI文件基本上由两个部分组成,头块和轨道块。

第二节讲述头块,第三节讲述轨道块。

一个MIDI文件有一个头块用来描述文件的格式、许多的轨道块等内容。

一个轨道可以想象为像一个大型多音轨录音机那样,你可以为某种声音、某种乐谱、某种乐器或者你需要的任何东西分配一个轨道。

2.头块:头块出现在文件的开头,有三种方式来描述文件。

头块看起来一直是这样的:4D 54 68 64 00 00 00 06 ff ff nn nn dd dd前4个字节等同于ASCII码MThd,接着MThd之后的4个字节是头的大小。

它将一直是00 00 00 00 06,因为现行的头信息将一直是6字节。

ff ff是文件的格式,有3种格式:0-单轨1-多规,同步2-多规,异步单轨,很显然就只有一个轨道。

同步多轨意味着所有轨道都是垂直同步的,或者其他的措辞为他们都在同一时间开始,并且可以表现一首歌的不同部分。

异步多轨没有必要同时开始,而且可以完全的不同步。

nn nn 是MIDI文件中的轨道数。

dd dd 是每个4分音符delta-time节奏数(这之后将做详细介绍)。

3.轨道块:头块之后剩下的文件部分是轨道块。

每一个轨道包含一个头,并且可以包含你所希望的许多MIDI命令。

轨道头与文件头及其相似:4D 54 72 6B xx xx xx xx与头一致,前4个字节是ASCII吗,这个是MTrk,紧跟MTrk的4个字节给出了以字节为单位的轨道的长度(不包括轨道头)。

在头之下是MIDI事件,这些事件同现行的可以被带有累加的MIDI合成器端口接受和发送的数据是相同的。

一个MIDI 事件先于一个delta-time。

MIDI音乐简介

MIDI音乐简介

MIDI音乐简介作者:chot 文章来源:本站原创点击数:107 更新时间:2004-5-6一、什么是MIDIMIDI是音乐设备数字接口(Musical Instrument Digital Interface)的英文简写。

是一种电子乐器之间以及电子乐器与电脑之间的进行交流的标准协议。

我们可以从广义上将其为理解为电子音乐合成器,是电脑音乐的统称,包括协议、设备等等相关的所有技术。

而我们平常所说的“MI DI”通常只是指一种电脑音乐的文件格式。

二、MIDI和普通的音频文件有什么不同1、文件大小的不同一首可以播放5分钟左右时间的MIDI歌曲,其容量只有百余K字节。

而同样这首歌的波形音乐文件如WAV,则高达50MB左右,即使是经过MP3技术进行高比例压缩处理,也有5MB大小。

2、对音乐记录的不同MIDI文件本身并不是音乐,而是发音命令,MIDI文件本身只是一些数字信号而已,不包含任何声音信息。

而WAV是把声音的波形记录下来,将这些模拟波形转换成数字信息,这些信息所占用的体积显然要比只是简单描述性的MIDI文件大的多。

三、MIDI音乐是如何被播放的即当播放MIDI时,计算机将指令发给声卡,声卡按照指令将MIDI信息重新合成起来。

所以,MIDI的播放效果取决于用户MIDI设备的质量和音色。

就电脑声卡而言,最为常见的手段是FM合成与波表合成。

前者多用于以前的ISA声卡。

它运用声音振荡的原理对MIDI进行合成处理。

但由于技术本身的局限,加上这类声卡采用的大多数为廉价的芯片,效果自然差劲;而波表合成所带来的效果要远远超过FM,而且在电脑上已被广泛运用,各类波表声卡、波表软件层出不穷。

四、什么是波表波表的英文名字是“WAVE TABLE”,即“波形表格”的意思。

其实它是将各种真实乐器所能发出的所有声音(包括各个音域、声调)录制下来,存贮为一个波表文件。

一般波表的乐器声音信息都以44.1KHz、16Bit的精度录制,这样可以达到最真实回放效果。

关于录音 音频处理 midi制作技术 硬件方面 音乐格式转换 播放

关于录音  音频处理 midi制作技术 硬件方面 音乐格式转换 播放

关于录音:1.问:为什么用windows自带的录音机录不了音?答:请检查:麦克风是否确实插到了声卡的麦克插口上面?双击右下角的小喇叭图标,就会出现音量控制面板,在选项==〉属性里,选择录音音量,检查其中麦克风音量条是否足够大?麦克风音量条未被设置为静音?如果音量仍不够大,可以在音量控制面板的高级选项中选中mic boost(提高mi c音量)。

如果在右下角没看到小喇叭的图标,你可以在开始==〉控制面板==〉音频设备里找到。

2.问:用windows自带的录音机一般一次只能录制60秒,有没有更好的录音软件?答:有很多很好的录音软件,如CoolEdit 2.0,GoldWave,Crakewalk Pro 9.03,CuBase 等等,可以不限时录音,只要你的硬盘容量足够大。

3.问:怎样才能录制高品质的人声?答:对于一般的业余音乐diy来说,决定你的录音品质的是你的话筒,当然好的声卡也是提高你录音品质的重要因素。

有的话筒过分的夸大乐中频段,而且为了不出杂音把高频削掉了。

这样的话筒肯定录不出清晰的人声,可能刚开始单独录音觉得人声还可以,但做完整个音乐的混缩以后就会发现人声含糊不清,怎么弄都不好听。

声卡的录音素质的高低也很重要。

用一块录音素质较好的声卡,配上一支好一点的话筒,制作较高质量的个人演唱专辑cd完全不是问题。

用话筒录音时,要保持嘴和话筒之间的距离,通常不小于5英寸。

话筒应该在录音前就固定好,话筒音量也应在录音前调节好,可以预先试录一下,调整嘴和话筒的距离保持一个最佳的演唱音量。

为了防止“喷口”造成的破声,可以买一支“风口”(两层尼龙材料,中空)挡在话筒前,或者自己用一个小的塑料盒子制作一个也行。

4.问:怎样进行内录?答:打开音量控制=〉选项=〉属性=〉录音;这样你就可以看到很多的音量控制通道。

录音时你只能选择一个通道,比如选择mic,你就可以用mic录制人声,而选择cd player,就可以从cd中录音;这里我们应该选择wave,就可以进行内录了:在播放音频文件(视频)文件时同时用录音软件录音,就可以将播放的音乐记录下来。

标准MIDI文件格式

标准MIDI文件格式

下表是没有通道的 meta-events 列表 ,他们的格式是:
FF xx nn dd
所有的 meta-events 是以 FF 开头的命令 (xx),长度,或者含在数据的字节数(nn),现行的数据(dd)
十六进制 二进制 数据 描述 00 00000000 nn ssss 设定轨道的序号 nn=02 (两字节长度的序号) ssss=序号
delta-time 之后就是 MIDI 事件,每个 MIDI 事件(除了正在运行的事件外)带有一个最高有效位总是 1 的命令字节(值将>128)。大部分命令的列表在附录 A 中。每个命令都有不同的参数和长度,但是接下来 的数据将是最高有效位为零(值将<128)。这里有个例外就是 meta-event,最高有效位可以是 1。然而, meta-events 需要一个长的参数以区分。
下表列出的是与音符相对应的命令标记。 八度音阶¦¦ 音符号 # ¦¦ ¦¦ C ¦ C# ¦ D ¦ D# ¦ E ¦ F ¦ F# ¦ G ¦ G# ¦ A ¦ A# ¦ B ----------------------------------------------------------------------------0 ¦¦ 0 ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦ 9 ¦ 10 ¦ 11 1 ¦¦ 12 ¦ 13 ¦ 14 ¦ 15 ¦ 16 ¦ 17 ¦ 18 ¦ 19 ¦ 20 ¦ 21 ¦ 22 ¦ 23 2 ¦¦ 24 ¦ 25 ¦ 26 ¦ 27 ¦ 28 ¦ 29 ¦ 30 ¦ 31 ¦ 32 ¦ 33 ¦ 34 ¦ 35 3 ¦¦ 36 ¦ 37 ¦ 38 ¦ 39 ¦ 40 ¦ 41 ¦ 42 ¦ 43 ¦ 44 ¦ 45 ¦ 46 ¦ 47 4 ¦¦ 48 ¦ 49 ¦ 50 ¦ 51 ¦ 52 ¦ 53 ¦ 54 ¦ 55 ¦ 56 ¦ 57 ¦ 58 ¦ 59 5 ¦¦ 60 ¦ 61 ¦ 62 ¦ 63 ¦ 64 ¦ 65 ¦ 66 ¦ 67 ¦ 68 ¦ 69 ¦ 70 ¦ 71 6 ¦¦ 72 ¦ 73 ¦ 74 ¦ 75 ¦ 76 ¦ 77 ¦ 78 ¦ 79 ¦ 80 ¦ 81 ¦ 82 ¦ 83

读书笔记——MIDI文件结构简介

读书笔记——MIDI文件结构简介

读书笔记——MIDI文件结构简介站长自己原来研究MIDI协议时,写下的一些读书笔记,那会儿每天上下班在路上的一个多小时里,拎着一个上网本,在公交车上慢慢地敲字~时间宝贵,这一个多小时的时间也要充分利用~但这些东东毕竟是我个人的理解,难免有错误出现。

也欢迎各位大虾批评指正,我会把一些修改的内容通过附录添加到文章末尾。

阅读本文的话,读者需要有基础性的电脑和MIDI音乐相关知识:· 基本的计算机相关知识,如十六进制数的表示法,十六进制与十进制、二进制之间的转换方法等;· 基本的乐理知识,如音高、时长、节拍、曲调等;· MIDI协议基础,如各种MIDI事件的类型和含义,事件状态字、数据长度等的知识;· MIDI文件的编辑制作经验,如音序器(硬件或软件)基于音轨的操作思想和使用方式等。

参考资料的话,推荐读者去找一下《MIDI原理与开发应用》这本书,国防工业出版社出版,陈学煌、刘永志、潘晓利、马俊编著,红色封皮。

同时读者还可以去网上搜索相关的资料,有几个帖子写得也不错。

下面是正文:================1. MIDI文件结构简介MIDI文件是二进制文件,其内部主要记录了乐曲播放时,音序器应发送给音源的MIDI指令和每条指令发送的时间点。

音序器读取这些时间信息和MIDI指令,通过在相应的时间发送相应的指令,以实现乐曲中音符的顺序播放和节拍信息。

除了音序器需要发送的MIDI事件之外,MIDI文件内部也记录了一些辅助信息,如版权信息、音轨名、速度信息、拍号、调号等等,这些信息被称为Meta-event,只用于记录一些曲子的信息,通常并不发送给MIDI系统中的其他设备。

MIDI文件的数据结构被称为“chunk”。

每个chunk由最初4字节的“chunk类型”,紧接着4字节的“Chunk大小”,和最后长度可变的“Chunk Data”构成。

“Chunk data”的数据长度由“Chunk大小”来规定,即“Chunk 大小”只描述了chunk中数据段的长度,而不是整个chunk的长度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
midi不是流媒体,是一种波表音乐文件,简单的说,就是将一些乐器的声音元素内置在声卡内存或播放软件的记录中,来实现对mid文件的播放。你可以发现mid都很小,而且他是不能包含人声的,声音是纯音乐,或类似伴奏。
一、MIDI是什么?
MIDI是英语Music Instrument Digital Interface 的缩写,翻译过来就是“数字化乐器接口”,也就是说它的真正涵义是一个供不同设备进行信号传输的接口的名称。我们如今的MIDI音乐制作全都要靠这个接口,在这个接口之间传送的信息也就叫MIDI信息。 MIDI最早是应用在电子合成器——一种用键盘演奏的电子乐器上, 由于早期的电子合成器的技术规范不统一,不同的合成器的链接很困难,在1983年8月,YAMAHA、ROLAND、KAWAI等著名的电子乐器制造厂商联合指定了统一的数字化乐器接口规范,这就是MIDI1.0技术规范。此后,各种电子合成器已经电子琴等电子乐器都采用了这个统一的规范,这样,各种电子乐器就可以互相链接起来,传达MIDI信息,形成一计算机对数字信号的强大的处理能力,使得计算机处理MIDI信息成为顺理成章的事情了,所以,现在不少人把MIDI音乐称之为电脑音乐。事实上,利用多媒体计算机不但可以播放、创作和实时地演奏MIDI音乐。甚至可以把MIDI音乐转变成看的见的乐谱(五线谱或简谱)打印出来,反之,也可以把乐谱变成美妙的音乐。利用MIDI的这个性质,可以用于音乐教学(尤其是识谱),让学生利用计算机学习音乐知识和创作音乐。
三、关于MIDI软件
MIDI软件有多种类型,有MIDI播放软件、演奏软件和创作软件几类。通常,大多数的媒体播放器都可以播放MIDI音乐,如WINDOWS95\98的媒体播放器(Windows Media Player)就可以播放MIDI,而且通常是系统的默认播放器,这类播放器在使用中不能对MIDI音乐的参数进行调节。除了媒体播放器以外,MIDI演奏软件和创作软件都可以作为MIDI的播放器使用,这些软件在播放MIDI音乐时,还可以选择不同的音源(波表)播放方式,以获得最佳的播放效果,而且还可以改变MIDI的参数产生出新的播放效果,如改变播放速度、改变乐器音色(如把钢琴演奏曲变成小提琴演奏)、升降调等,大部分软件还可以显示MIDI音乐所对应的乐谱(五线谱或简谱)甚至歌词内容等信息,还可以把乐谱打印出来。
二、MIDI文件的性质
所谓MIDI文件实质上是指计算机中记录的MIDI信息的数据,MID文件的扩展名是*.mid。它和另外一种计算机中常用的声音波形文件(*.wav文件)有什么不同呢?表面上,两种文件都可以产生声响效果或音乐,但它们的本质是完全不同的。普通的声音文件(*.wav文件)是计算机直接把声音信号的模拟信号经过取样——量化处理,变成与声音波形对应的数字信号,记录在计算机的储存介质(硬盘或光盘)中。通常,声音文件都比较大,如记录一分钟的声音(立体声、CD音质),大概需要10.5M的储存空间。一首几分钟的歌曲需要几十兆的硬盘,一张CD光盘只能容纳十来首歌曲。为了减少声音文件储存的空间,近年来在计算机技术上采用了压缩技术,把声音文件经过处理,在不太影像播放质量的前提下,把文件的大小压缩到原来的10~12分之一,这就是近年流行的MP3文件格式。而MIDI文件则不是直接记录乐器的发音,而是记录了演奏乐器的各种信息或指令,如用哪一种乐器,什么时候按某个键,力度怎么样等等,至于播放时发出的声音,那是通过播放软件或者音源的转换而成的。因此MIDI文件通常比声音文件小得多,一首乐曲,只有十几K或几十K,只有声音文件的千分之一左右,便于储存和携带。
相关文档
最新文档