一种扩展合成器音色的方法

文档序号:2829656阅读:392来源:国知局
专利名称:一种扩展合成器音色的方法
技术领域
本发明涉及一种扩展合成器音色的方法。
背景技术
通用的MIDI规定了 MIDI必需有128种乐器和47个打击乐,但为了扩展, 不少新的MIDI标准比如XG、 GS和GM2等都分别对音色进行了扩展,使其拥有 更多的音色和打击乐。但使用这些标准制作的MIDI文件通常只能使用对应标准 中的音色,如果还想使用以外的音色,还是没有办法,比如不管是XG、 GS还是 GM2中,都没有定义像二胡这样的乐器。如果一个曲子要用这样的音色,只能用 小提琴代替,其效果肯定是不如直接带上这个音色的好。如果一个标准要带h 所有的音色,基本上是不可能的,因为除了真实乐器发出的声音是一种音色以 外,这些乐器的不同奏法从某种角度上看也可以是一种音色,比如GM中就有弦 乐的拨奏音色,同样地,对于弦乐来说还有断奏、颤音等奏法,而其他乐器也 存在这样的情况。对于这种模拟真实乐器发出的音色,目前最好的办法是使用 采样,但如果要把所有的乐器的音色都通过采样做到合成器中,通常在空间匕 是不允许的,所以根本无法用采样的算法来实现所有的乐器。同时,有些音色, 比如合成音色,就算使用采样也无法完美表现,因为合成音色通常是由多变的 算法决定的,算法越复杂,能达到的效果就更丰富,不是由采样就能做到的。

发明内容
本发明的目的在于提供一种利用外部软件或硬件来扩展合成器,实现对 MIDI文件的音色进行扩展的方法。
为了实现上述目的,可通过以下的技术措施来实现 一种扩展合成器音 色的方法,解析MIDI文件并将MIDI数据发送到指明的合成器中,再对已经添 加到系统中的合成器进行渲染并送向总输出。
本发明所述的解析MIDI文件并保证MIDI数据能发送到指明的合成器,包 括以下步骤
1 、 初始化各个轨道的合成器选择为默认合成器;
2、 解析MIDI文件各轨道的事件;
3、 如果解析完成,则结束解析;
4、 遇到Port Name事件,则看是否能找到该事件指明名称所指示的软件 或硬件合成器,若找到,则获取对应合成器接口参数的入口地址,同时若 该合成器是第一次使用,则修改系统的"合成器总数"值,然后返回l;否 贝U,保留该轨道默认的合成器选择,再返回l;
5、 把事件送向如果该轨道选择的入口地址相应的合成器;
6、 返回l。
所述步骤4的所指示的合成器具有可定位性,使用枚举方式取得其所在位 置;如果被枚举到的时候,该合成器返回其唯一标识名,表明其是指定的合成 器。
所述步骤4的所指示的合成器,具备两个作为合成器必需的接口,包括1、 能接收MIDI信息的接口,该接口能使音序器的MIDI信息传给合成器;2、能提供 具"处理函数",或者称"渲染函数"作用的接口,该接口能让混音模块能调用 该合成器来产生需要的样本;其中,所述两个接口的参数跟呼叫者提供的参数一致。
本发明所述的对已经添加到系统中的合成器进行渲染并送向总输出的过
程,包括以下步骤
1、 清空最终混音缓冲;
2、 检査当前系统有多少个合成器被激活,通常情况下至少有一个默认
的;
3、 分别执行各个合成器的"处理函数",令其计算出其对应长度的样本, 并将该结果与最终混音缓冲混合;
4 、 把最终混音缓冲的数据送向DA或者其他输出设备; 5、 如果还没有结束,则返回l。
所述步骤3执行各个合成器"处理函数"的过程,是通过调用其"处理函数" 接口接收数据,并产生混音模块需要的样本。
采用本发明所述的方法,通过对合成器实现扩展,当遇到Port Name事件, 能找到对应的合成器,使需要的音色在其对应合成器上得到最有效的回放,从 而使MIDI得到很大的扩展。此外,本发明方法通过执行各合成器"处理函数", 把样本结果送到最终混音缓冲,从而也能对合成音色实现完美的回放表现。


图1为解析MIDI的流程示意图2为合成器合成时的流程示意图;
具体实施例方式
本发明具体的实施方式可分成如下两个部分
一、 解析MIDI并保证MIDI数据能发送到指明的合成器中
二、 对已经添加到系统中的合成器进行渲染并送向总输出
现在依次说明
--、初始化各MIDI轨道的合成器选择为默认合成器后,解析MIDI并保证 MIDI数据能发送到指明的合成器中,如图l所示,其过程包括如下歩骤
1、 解析MIDI文件各轨道的事件。该步骤无异于一般解析MIDI信息的过 程
2、 .如果解析完成,则结束解析。该步骤亦无异于一般对解析MIDI完成
的步骤
3、 若遇到Port Name事件(FF 09),则看是否能找到该事件指明的名 称所指示的软件或者硬件合成器。若找到,则进行本级如下的(1) -(5),否则保留该轨道合成器选择,然后返回l。该点可以细分为 如下几个步骤
(1) 根据GM标定,MIDI的Meta事件中,允许选择多个端口来发送MIDI 信号。该事件可以使用FF 09来表示。如果该事件出现在第3轨,则表 示第3轨是指向某非默认端口的。该事件的完整表示是FF 09 ]en (文 本长)text (文本),其中len是text的长度,而text则是端口的名 字。比如有个端口叫"Moog",那么这个text就是"Moog'" , len就 是4。
(2) 当遇到该事件时,则去寻找与其同名的设备,由于要保证找到, 所以设备必需满足以下条件
a) 该设备应该能被枚举。要使一个设备能被枚举,它通常应该是 具备可定位性。比如文件型的设备应该能被存放在指定的目录 下,而硬件设备的情况则使用硬件的枚举方式取得。
b) 该设备应该能返回"设备唯一标识名",比如Moog。当设备被
枚举到的时候,为了能鉴别是否是指定的合成器,该合成器必 需提供一个返回信息,告诉该合成器的名字是什么。好让枚举 设备找到要找的设备。 C)该设备应该具备作为合成器所最少必需的另外两个接口,以及 需要满足接口的条件
i. 能接收MIDI信息。为了让解析MIDI的音序器能把MIDI信息 传给这个设备,该设备必需支持这一接口。然后才能根据 接收的MIDI信息来提供计算输出样本的数据。
ii. 能提供一个"处理函数",或者称"渲染函数"。为了让混 音模块能调用该设备来产生需要的样本,该接口也是必需 提供的。该接口主要是根据当前的各种数据来计算生成样 本,而数据的一部分则是依赖上一个接口来获取的。 iii. 以上两个接口的参数需要跟呼叫者提供的参数一致。比如 同是标准的MIDI信息,同是双声道的16位声音缓冲指针等
(3) 解决完这种事件后,直接获取对应设备的几个接口参数的入口 地址,这个今后便可以直接调用该接口。
(4) 如果该设备是第一次使用,则修改系统的"合成器总数"值。
(5) 返回上一层的l。
4、 把事件送向如果该轨道的选择的合成器。由于已经确定了设备的入 口地址,则直接调用其接收MIDI信息的接口把数据送到相应的设 备。
5、 返回l 。
二、对已经添加到系统中的合成器进行渲染并送向总输出,其过程包括如 下步骤
1、 清空最终混音缓冲(Mixing Buffer)。由于这个最终的混音缓冲 是用来送到DA的,所以在每次混音前,先将其清空;
2、 检査当前系统有多少个合成器被激活,通常情况下至少有一个默 认的;
3、 分别执行各个合成器的"处理函数",令其计算出一定长度的样
本,并将该结果与最终混音缓冲混合。调用该接口的目的是得出本次 的一段样本,并将其混向Mixing Buffer (用数学加,并处理饱和)即
可;
4、 把最终混音缓冲的数据冲向DA或者其他输出设备(比如文件);
5、 如果还没有结束,则返回l。
采用本发明所述的方法,通过外部软件或硬件对合成器实现扩展,当遇到 Port Name事件,能找到对应的合成器,使需要的音色在其对应合成器上得到最 有效的回放,从而使MIDI得到很大的扩展。此外,本发明方法通过执行各合成 器"处理函数",把样本结果送到最终混音缓冲,从而也能对合成音色实现完美 的回放表现。
权利要求
1、一种扩展合成器音色的方法,其特征在于解析MIDI文件并保证MIDI数据能发送到指明的合成器中,再对已经添加到系统中的合成器进行渲染并送向总输出。
2、 根据权利要求1所述的扩展合成器音色的方法,其特征在于 所述的解析MIDI文件并保证MIDI数据能发送到指明的合成器,包括 以下步骤(1) 、初始化各个轨道的合成器选择为默认合成器;(2) 、解析MIDI文件各轨道的事件;(3) 、如果解析完成,则结束解析;(4) 、遇到Port Name事件,则看是否能找到该事件指明名称 所指示的软件或硬件合成器,若找到,则获取对应合成器接口参数的 入口地址,同时若该合成器是第一次使用,则修改系统的"合成器总 数"值,然后返回(1);否则,保留该轨道默认的合成器选择,再返 回(1);(5) 、把事件送向如果该轨道选择的入口地址相应的合成器;(6) 、返回(1)。
3、 根据权利要求2所述的扩展合成器音色的方法,其特征在于 所述步骤(4)的所指示的合成器具可定位性,使用枚举方式找到其 所在位置;同时,被枚举到的时候,该合成器返回其唯一标识名,表 明其是指定的合成器。
4、 根据权利要求2所述的扩展合成器音色的方法,其特征在于 所述步骤(4)的所指示的合成器设有两个接口,包括a、接收MIDI信息的接U,该接口使音序器的MIDI信息传给合成器;b、提供具"处 理函数"作用的接口 ,该接口让混音模块能调用该合成器来产生需要 的样本。
5、 根据权利要求4所述的扩展合成器音色的方法,其特征在于; 所述的两个接口的参数跟呼叫者提供的参数一致。
6、 根据权利要求l所述的扩展合成器音色的方法,其特征在于 所述的对已经添加到系统中的合成器进行渲染并送向总输出的过程, 包括以下步骤(1) 、清空最终混音缓冲;(2) 、检查当前系统有多少个合成器被激活,通常情况下至少 有一个默认的;(3) 、分别执行各个合成器的"处理函数",令其计算出其对 应长度的样本,并将该结果与最终混音缓冲混合;(4) 、把最终混音缓冲的数据冲向DA或者其他输出设备;(5) 、如果还没有结束,则返回(1)。
7、根据权利要求6所述的扩展合成器音色的方法,其特征在于 所述步骤(3)执行各个合成器"处理函数"的过程,是通过调用其 "处理函数"接口接收数据,并产生混音模块需要的样本。
全文摘要
本发明公开了一种扩展合成器音色的方法,通过解析MIDI文件并保证MIDI数据能发送到指明的合成器中,再对已经添加到系统中的合成器进行渲染并送向总输出。所述解析MIDI文件并发送到合成器包括1.初始化各个轨道的合成器选择为默认合成器;2.解析MIDI文件各轨道的事件;3.如果解析完成,则结束解析;4.遇到Port Name,则看是否找到该事件指明名称指示的软件或硬件合成器,若找到,则获取合成器接口的入口地址,同时若该合成器是第1次使用,则修改系统的“合成器总数”值,再返回1;否则,保留该轨道默认的合成器选择,再返回1;5.把事件送向如果该轨道选择的入口地址相应的合成器;6.返回1。采用所述方法,能使需要的音色能得到最有效的回放。
文档编号G10H1/00GK101165772SQ20061012281
公开日2008年4月23日 申请日期2006年10月18日 优先权日2006年10月18日
发明者冯穗豫 申请人:安凯(广州)软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1