文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院工具软件媒体播放MIDI文件结构分析及生成方法
精品推荐
特别推荐
·卡拉当然OK 录制自己的专辑
·Windows Media Player11使用技巧
·制作有真人视频讲解的幻灯片
·购机必看:主流MP4播放器视频转换全攻略
·Winamp使用指南
·将录像带转为VCD进行保存
·KMPlayer常见问题及解决方法整理
·Nero超刻的详细方法
·KMplayer播放技巧22则
·Windows Media Player专题问答
·用Nero制作音视频光盘
·暴风影音新酷技巧串串烧
·MPEG、RM、WMV电影文件格式转换指南
·APE变成高品质MP3音乐 转换工具介绍
·网络电台DIY
·3GP手机视频转换工具WinAVI
·视频下载不求人 突破封锁保存各类视频资源
·酷我音乐盒独家秘籍偷偷报
·巧设置RealPlayer工作到最佳状态
·轻松化解RealPlayer各种常见问题
热点TOP10
·p8:电影还是边下边看的好
·3GP手机视频转换工具WinAVI
·MPEG、RM、WMV电影文件格式转换指南
·认识MPEG视频压缩标准及相关编码格式
·卡拉当然OK 录制自己的专辑
·转换MP4/3GP格式的至尊法宝---MP4/RM转换专家
·Nero超刻的详细方法
·视频下载不求人 突破封锁保存各类视频资源
·DVD转换MPEG-4三部曲之一
·将你的VP6影片播放出来
·四大网络视频压缩技术大比拼
·亲手打造自动播放的郭德纲相声盘
·APE变成高品质MP3音乐 转换工具介绍
·轻松听歌千千静听技巧十七招
·用Nero制作音视频光盘
·趣味变声软件——AV VCS
·RM,RMVB转VCD全功略
·音量控制 随心所欲
·将VCD转换成RM格式转换就这么简单
·实战RM音频转MP3

MIDI文件结构分析及生成方法

日期:2005年5月2日 作者:清风网络学院 查看:[大字体 中字体 小字体]


从网上找的,已经将用BC写的改成了VC的,由于对音乐的理解比乐盲还差,对于程序中转换是否有问题我也不得而知,反正用VC生成的MIDI文件听起来惨不忍睹。

 对于制作MIDI音乐来说,比播放MIDI文件本身更复杂得多。我们得了解一些乐理常识和MIDI文件结构。

一、MIDI文件结构分析   MIDI文件包含首部块(Header Chunk)和音轨块(Track Chunk)两部分。其格式一般如下:

  MThd <数据长度> <Header数据>    //首部块
  .......
  Mtrk <数据长度> <Track数据>     //音轨块
  Header Chunk 结构为:
  char MidiId[4];
  long length;
  int  foarmt;
  int  TrackNum;
  int  division;

其中:

  MidiId称为MIDI文件头标志,一般将其设置为MThd;

  length为文件首部数据长度(除它本身和文件头标志占用的字节以外),通常它设置为6,即format,TrackNum和division共占用的字节数据长度;

  format表示MIDI文件存放的格式,当前只有3种格式:

  0 表示MIDI文件只有一个Track Chunk;
  1 表示MIDI文件只有一个或多个Track Chunk;
  2 表示MIDI文件只有一个或多个各处独立的Track Chunk。
  division指定计数的方法,一种随时间计数(最高位设置为0时),另一种使用制式的时间码(最高位设置为1时)。这里,主要介绍随时间计数的一种格式。其各位意义如下:

  ┌─┬─────────┐
  │0 │ 每一拍的计数值   │
  └─┴─────────┘
  b15     b14  ̄ b0

  其最高位一定要设置为0,其它的15位表示每一拍的计数值。如该数据为96(以八分音符为一拍),则表示一个四分音符延时数应该为192。

  另外,在MIDI文件中,long和int型数据均将高字节值存放入低地址上,如一个long型数据为0x45678,则在文件中,存放的结果为:0x00,0x04,0x56,0x78。而在内存中,int,long的变量值通常将崐高字节值存放高地址上。因此,存放数据时,应该作一下调整。

  Track Chunk为用来播放歌曲的数据信息。每一个Track Chunk是一组简单的MIDI码(包括一些非MIDI码)的集合。它又由头部信息和崐若干个Mtrk event组合而成。

  头部结构和意义为:

  char TrackChunkId[4];      //Track Chunk标志MTrk
  long TrackChunkMsgLength;  //该Track Chunk信息长度

  而Mtrk event是由时间计数值(dela-time)和event(MIDI码信崐息)组合成的。即:

  <Mtrk event>=<dela-time> <event>

  <dela-time>使用可变长度的形式存储数据,它代表处理event之前要计数时间值。 它在音乐中,即表示拍数。通常音乐开始演奏时,总是将计数时间值设置为0。为了能连续处理两个event,我们可以将deta-time设置为0。如:3和5同时演奏2拍(每一拍计数值为24),可以设置如下:

  deta-time    event
  0         开始演奏3
  0         开始演奏5
  48        停止3演奏
  0         停止5演奏

  event表示MIDI码信息集,如0x9n表示开始发音,0x8n表示关闭发音等等(下有说明)。

  上述的dela-time使用可变长度的形式表示数据值。可变长度形崐式是MIDI文件中对于大于8位的数据打用的一种存储方式,它把每一个数据定义为7位,剩下的最高位作为数据长度的识别。当这一位为0时,表示数据是最后一个,若为1,则表示还有下一个。

  如:数值0x3fff,可变长度形式便为0xff,0x7f;0x4000则应该为0x81,0x80,0x00。此数据的转换可以参阅WriteLenghtToBuf()函数。

二、常见MIDI码说明

  MIDI码是制定音乐交换的信息码,它使用串行非同步传送,因此数据码是用多码形式。第一个MIDI码是状态码,剩余的都是数据码,其长度视状态而定。

  以下是一些常见的MIDI码。

  1、开始发音(0x9n)

  格式为:0x9n note speed

  它一共占用3个字节,n表示通道号,取值0-15。MIDI可以同时演奏16个通道,用此指定在哪一个通道上发音(以下n相同)。

  note表示音高数值,即音阶码值。如C4(中音1)为60,它的取值在0xc和0x6c之间(具体码值,可参考「参考书籍1」)。

  speed表示按键时的速度,用此表示音的力度。若没有力度感,可以将其设置为64,若为0,表示关闭发音。

  如:在第2通道上开始演奏3,则MIDI码便为0x91,63,40。

  MIDI规范还规定,若连续向同一通道上发送多个音,则可以不指出状态码。如上述同时演奏3,5,MIDI码便为:0x91,63,40,65,40。

  2、关闭发音(0x8n)。

  格式:0x8n note speed

  说明同上。通常它用0x9n,note,0来代替。

  3、切换音色(0xcn)。

  格式:0xcn,program

  program表示音色代码,0 ̄255之间,如Acou Piano 1(电钢1值为0),Synth Bass 1(电贝司1值为64)等(详见「参考书籍1」)。

  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 拍。

  6、设置演奏速度

  格式:0xff 0x51 03 tt tt tt

  tt tt tt 表示第一拍定义多少个Miscro Seconds。它即是用来崐变演奏的速度。

  7、写歌词

  格式:0xff 0x05 len text

  len表示歌词的长度,text表示歌词文本码。

  8、磁道结束

  格式:0xff,0x2f,00

  它表示结束点。每外track chunk后都应该有此MIDI码。

三、MIDI信息文本文件制作

  为了能制成符合规范的MIDI文件,我们在此规定MIDI信息文本制作格式如下:

  [MIDI]

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页 




上一篇:EMS图片格式转换(Java)程序

下一篇:利用手机模块实现短消息(一)

MIDI文件结构分析及生成方法 相关文章:
·女性自慰方法大搜查
·电脑提速的新方法
·qq空间皮肤背景代码:QQ空间不用Q币更换主页皮肤方法
·GHOST使用方法(图解)
·局域网文件共享详解
·C++中的文件输入/输出(4):检测输入/输出的状态标志
·水晶图片制作方法
·MPEG、RM、WMV电影文件格式转换指南
·配置Catalyst交换端口分析器(SPAN)
·QQ挂号升级方法
MIDI文件结构分析及生成方法 相关软件:
·AUTOCAD2004序列号生成器
·最强文件加密锁2007
·3D 动画与建模:人体的综合与分析技术
·西门子plc软件及教程 文件类型 其它介绍
·现代企业领导艺术与方法
·注册表结构
·文件夹加密器V9.6
·2005年一级注册结构工程师考试钢结构辅导课件
·资产评估学课件第二章资产评估的基本方法(二)
·ISO9000内审全套文件

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot