本发明专利技术公开了一种在MIDI文件嵌入音色的方法,包括以下步骤:a.选择合成器所支持的音色库进行编码,使其转换成该合成器支持的系统码;b.把编码后的系统码嵌入到MIDI文件中。上述在MIDI文件嵌入音色的提取方法,包括如下步骤:1)逐轨解析MIDI文件,若文件已经解析完,则结束解析;2)判断是否是系统码,如果是,则进入步骤5);3)判断是否是音色选择信息,如果是,则进入步骤6);4)如果是其他标准MIDI信息,则进行一般的相应的MIDI信息的操作;5)检测是否是音色信息,如果是,则向系统中增加该音色;6)检测是否找到该外部音色库的地址表,如果找到,则在系统中选定该通道的音色。
【技术实现步骤摘要】
本专利技术涉及一种在MIDI文件嵌入音色,实现扩展音色的方法;本专利技术还涉 及对在MIDI文件嵌入音色进行提取的方法。
技术介绍
General MIDI规定了 MIDI必需有128种乐器和47个打击乐,但为了扩展, 不少新的MIDI标准比如XG、 GS和GM2等都分别对音色进行了扩展,使其拥有 更多的音色和打击乐。但使用这些标准制作的MIDI文件通常只能使用对应标准 中的音色,如果还想使用以外的音色,还是没有办法,比如不管是XG、 GS还是 GM2中,都没有定义像二胡这样的乐器。如果一个曲子要用这样的音色,只能用 小提琴代替,其效果肯定是不如直接带上这个音色的好。如果一个标准要带上 所有的音色,基本上是不可能的,因为除了真实乐器发出的声音是一种音色以 外,这些乐器的不同奏法从某种角度上看也可以是一种音色,比如GM中就有弦 乐的拨奏音色,同样地,对于弦乐来说还有断奏、颤音等奏法,而其他乐器也 存在这样的情况。对于这种模拟真实乐器发出的音色,目前最好的办法是使用 采样,但如果要把所有的乐器的音色都通过采样做到合成器中,通常在空间上 是不允许的,所以根本无法用采样的算法来实现所有的乐器。
技术实现思路
本专利技术的目的在于提供一种能把一个或者几个音色嵌入到标准MIDI文件 中的方法,本专利技术的另一个目的是提供一种能提取在MIDI文件嵌入音色的方法。为了实现上述目的,本专利技术提供的一种在MIDI文件嵌入音色的方法,包 括以下步骤a. 选择合成器所支持的音色库进行编码,使其转换成该合成器支持的系统 码;b. 把编码后的系统码嵌入到MIDI文件中。所述步骤a的音色库格式包括音色库中的音色数以及各音色的位置表, 该表位置记录有各个音色所对应的主要库号、次要库号、程序号以及音色的描 述在音色库中的偏移地址。所述音色的描述是一种对应合成器支持的音色库中音色的描述;如果通过 音色的描述不能确定整个描述的尺寸信息,则在整个描述前补上这个信息,或 者位置表中补上该信息。所述步骤a的使音色库转换成系统码的过程依次为把表示为开头的FO写 入到所要编码转换成系统码的块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)的向系统中增加该音色,是通过对系统码的解码还原音色库的 所有字节,然后实现把还原的音色库合并到系统音色库的过程,其中合并到系 统音色库的过程包括取得合成器当前的外部音色库数,并令其加l;把该音色 库追加到外部音色库的容器中。其中,所述的对系统码的解码过程为,把己编 码过的系统码的块B的第2 5个字节取出,并存入数据长度变量,再把块B的 第6个字节取出,然后逐位填入数据长度变量各字节的最高位,得出的数据就把 长度值及所有字节还原出来。所述步骤6)的在系统中选定该通道的音色,是根据外部音色库的地址表, 找到符合当前记录的乐器库号主要位、乐器库号次要位以及乐器号的音色,而 实现为其装载音色的过程,其中,外部音色库的地址表接根据该外部音色库的 音色数来査找获得。采用本专利技术所述的方法,可以把标准制作MIDI文件之外的音色能通过采样 方便做到合成器中,使音色得到很大的扩展,从而很大程度的实现对各音色进 行渲染。此外,本专利技术设置的方法,即使当MIDI文件在其他不支持这种信息的 合成器上回放,也可根据音色库中给各个音色指定乐器库号主要位、乐器库号 次要位以及乐器号,实现最大限度不失真的目的。 附图说明图1为音色库编码成合法的系统码的示意图; 图2为将音色库嵌入MIDI文件的示意图; 图3为支持这种MIDI文件的合成器流程图 具体实施例方式本专利技术具体的实施方式可分成如下几个部分一、 音色库的格式二、 把音色库转换成系统码三、 把系统码嵌入MIDI文件四、 解析和渲染这种MIDI文件(含还原音色库并与当前音色库合并,以及 选择音色库和音色的具体方法)现依次说明一、音色库的格式 音色库的格式由以下两部分构成-1、 库中含有多少个音色。2、 各个音色的位置表。该表记录了各个音色所对应的主要库号(Bank Select MSB)、次要库号(Bank Select LSB)、程序号(Program Select)以及音色的描述在音色库中的偏移地址。其中,音色的描述应该是一种对应合成器的描述。比如对于使用FM算法的 合成器,这个描述应该包括合成矩阵ID、各个震荡器的波型ID、 ADSR的参数等 用来定义音色的各种信息;而对于一个基于波表算法的合成器,该描述应该包 括该音色使用的波型数据(可能是压縮过的),以及ADSR的参数,甚至是波型 循环点信息等等。如果通过音色的描述的首地址不能确定整个描述的尺寸信息,则需要在整 个描述前补上这个信息,或者在上述2的位置表中补上该信息,这里并没有严 格要求。二、音色库转换成系统码由于系统码的要求是从F0开始到F7之间的内容必需是0x00 0x7F之间的 值,否则将被视为不标准的系统码。而在FO后接上的表示尺寸的内容,是按照 MIDI文件的要求而设置的。所以以下的步骤的根本目的就是把一个二进制数块转成标准的系统码的过 程,如图1所示,其过程如下1、 根据系统码要求写入字节OxFO作为开头,写入该值到块A2、 根据系统码的一般要求写入公司ID到块B。该值需要向MIDI组织 注册申请,若不申请,至少要避开MIDI组织列出的公司ID。3、 写入0x00到块B表示该系统码事件是本公司的音色库事件。如果 还有其他类型的事件,这里将不会再写成OxOO。或者如果该公司不再 有打算扩展系统码,可以跳过这个值。4、 把音色库文件的长度编码后写入块B。该编码方式跟第5 本文档来自技高网...
【技术保护点】
一种在MIDI文件嵌入音色的方法,其特征在于:包括以下步骤:a.选择合成器所支持的音色库进行编码,使其转换成该合成器支持的系统码;b.把编码后的系统码嵌入到MIDI文件中。
【技术特征摘要】
1、一种在MIDI文件嵌入音色的方法,其特征在于包括以下步骤a.选择合成器所支持的音色库进行编码,使其转换成该合成器支持的系统码;b.把编码后的系统码嵌入到MIDI文件中。2、 根据权利要求1所述的在MIDI文件嵌入音色的方法,其特征 在于所述步骤a的音色库格式包括音色库中的音色数以及各音色 的位置表,该表位置记录有各个音色所对应的主要库号、次要库号、 程序号以及音色的描述在音色库中的偏移地址。3、 根据权利要求2所述的在MIDI文件嵌入音色的方法,其特征在于所述音色的描述是一种对应合成器支持的音色库中音色的描 述;如果通过音色的描述不能确定整个描述的尺寸信息,则在整个描述前补上这个信息,或者位置表中补上该信息。4、 根据权利要求1所述的在MIDI文件嵌入音色的方法,其特征在于所述步骤a的使音色库转换成系统码的过程依次为把表示为开头的FO写入到所要编码转换成系统码的块A中;依次将公司ID、表示本公司的音色库事件的00写入到系统码的块B中;再把音色库 数据的长度编码后写入系统码的块B;再把音色库数据各字节的低7位,以及由音色库数据各字节的最高位以7个一组组成的一个字节, 分别写入系统码的块C和块D;把标识系统码结束的F7写入系统码 的块E;把B E部分的总尺寸按照可变长编码方式编码后写入系统 码的块A;最后使A到E按顺序合并一起成为要编码转换的系统码总体。5、 根据权利要求4所述的在MIDI文件嵌入音色的方法,其特 征在于所述的各字节的最高位以7个一组组成的一个字节,若在最 后几个不足7个,则补O,其中,由其组成块D的长度为(音色库 文件长度+7)/8。6、 根据权利要求1所述的在MIDI文件嵌入音色的方法,其特 征在于所述的步骤b把编码后的系统码嵌入到MIDI文件中的过程依次为取得合法MIDI文件第1轨内容的字节数,存入轨道长;保存系统码的字节数+1的值到系统码长;调整MIDI文件的长度为 原长度...
【专利技术属性】
技术研发人员:冯穗豫,
申请(专利权)人:安凯广州微电子技术有限公司,
类型:发明
国别省市:81[中国|广州]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。