[发明专利]一种在MIDI文件嵌入和提取音色的方法有效
申请号: | 200610122721.5 | 申请日: | 2006-10-13 |
公开(公告)号: | CN101162581A | 公开(公告)日: | 2008-04-16 |
发明(设计)人: | 冯穗豫 | 申请(专利权)人: | 安凯(广州)软件技术有限公司 |
主分类号: | G10H1/00 | 分类号: | G10H1/00;G10H7/00 |
代理公司: | 广州知友专利商标代理有限公司 | 代理人: | 宣国华 |
地址: | 510663广东省广州市天河*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 midi 文件 嵌入 提取 音色 方法 | ||
技术领域
本发明涉及一种在MIDI文件嵌入音色,实现扩展音色的方法;本发明还涉及对在MIDI文件嵌入音色进行提取的方法。
背景技术
General MIDI规定了MIDI必需有128种乐器和47个打击乐,但为了扩展,不少新的MIDI标准比如XG、GS和GM2等都分别对音色进行了扩展,使其拥有更多的音色和打击乐。但使用这些标准制作的MIDI文件通常只能使用对应标准中的音色,如果还想使用以外的音色,还是没有办法,比如不管是XG、GS还是GM2中,都没有定义像二胡这样的乐器。如果一个曲子要用这样的音色,只能用小提琴代替,其效果肯定是不如直接带上这个音色的好。如果一个标准要带上所有的音色,基本上是不可能的,因为除了真实乐器发出的声音是一种音色以外,这些乐器的不同奏法从某种角度上看也可以是一种音色,比如GM中就有弦乐的拨奏音色,同样地,对于弦乐来说还有断奏、颤音等奏法,而其他乐器也存在这样的情况。对于这种模拟真实乐器发出的音色,目前最好的办法是使用采样,但如果要把所有的乐器的音色都通过采样做到合成器中,通常在空间上是不允许的,所以根本无法用采样的算法来实现所有的乐器。
发明内容
本发明的目的在于提供一种能把一个或者几个音色嵌入到标准MIDI文件中的方法,本发明的另一个目的是提供一种能提取在MIDI文件嵌入音色的方法。
为了实现上述目的,本发明提供的一种在MIDI文件嵌入音色的方法,包括以下步骤:
a.选择合成器所支持的音色库进行编码,使其转换成该合成器支持的系统码;
b.把编码后的系统码嵌入到MIDI文件中。
所述步骤a的音色库格式包括:音色库中的音色数以及各音色的位置表,该表位置记录有各个音色所对应的主要库号、次要库号、程序号以及音色的描述在音色库中的偏移地址。
所述音色的描述是一种对应合成器支持的音色库中音色的描述;如果通过音色的描述不能确定整个描述的尺寸信息,则在整个描述前补上这个信息,或者位置表中补上该信息。
所述步骤a的使音色库转换成系统码的过程依次为:把表示为开头的F0写入到所要编码转换成系统码的块A中;依次将公司ID、表示本公司的音色库事件的00写入到系统码的块B中;再把音色库数据的长度编码后写入系统码的块B;再把音色库数据各字节的低7位,以及由音色库数据各字节的最高位以7个一组组成的一个字节,分别写入系统码的块C和块D;把标识系统码结束的F7写入系统码的块E;把B~E部分的总尺寸按照可变长编码方式编码后写入系统码的块A;最后使A到E按顺序合并一起成为要编码转换的系统码总体。其中,所述的各字节的最高位以7个一组组成的一个字节,若在最后几个不足7个,则补0,其中,由其组成块D的长度为:(音色库文件长度+7)/8。
所述的步骤b把编码后的系统码嵌入到MIDI文件中的过程依次为:取得合法MIDI文件第1轨内容的字节数,存入轨道长;保存系统码的字节数+1的值到系统码长;调整MIDI文件的长度为:原长度+系统码长;把从第一轨开始到整个文件结尾的所有数据向结尾处方向移动系统码长个字节;在第一轨数据没移动前的第一个字节上的位置写入0,作为Midi事件的时间差,并紧接在其后位置写入系统码A~E的总体;更新第一轨的数据长度为:系统码长+轨道长;更新整个MIDI文件的长度为:原长度+系统码长。
上述在MIDI文件嵌入音色的提取方法,包括如下步骤:
1)逐轨解析MIDI文件,若文件已经解析完,则结束解析;
2)判断是否是系统码,如果是,则进入步骤5);
3)判断是否是音色选择信息,如果是,则进入步骤6);
4)如果是其他标准MIDI信息,则进行一般的相应的MIDI信息的操作;
5)检测是否是音色信息,如果是,则向系统中增加该音色;
6)检测是否找到该外部音色库的地址表,如果找到,则在系统中选定该通道的音色。
所述步骤5)的向系统中增加该音色,是通过对系统码的解码还原音色库的所有字节,然后实现把还原的音色库合并到系统音色库的过程,其中合并到系统音色库的过程包括:取得合成器当前的外部音色库数,并令其加1;把该音色库追加到外部音色库的容器中。其中,所述的对系统码的解码过程为,把已编码过的系统码的块B的第2~5个字节取出,并存入数据长度变量,再把块B的第6个字节取出,然后逐位填入数据长度变量各字节的最高位,得出的数据就把长度值及所有字节还原出来。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于安凯(广州)软件技术有限公司,未经安凯(广州)软件技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200610122721.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于催化气相氧化的混合氧化物催化剂
- 下一篇:更新显示器功能的装置与方法