公开/公告号CN101165772A
专利类型发明专利
公开/公告日2008-04-23
原文格式PDF
申请/专利权人 安凯(广州)软件技术有限公司;
申请/专利号CN200610122817.1
发明设计人 冯穗豫;
申请日2006-10-18
分类号G10H1/00;G10H7/00;
代理机构广州知友专利商标代理有限公司;
代理人宣国华
地址 510663 广东省广州市天河科技园软件园高唐新建区高普路1033号6楼
入库时间 2023-12-17 19:58:27
法律状态公告日
法律状态信息
法律状态
2011-06-08
授权
授权
2008-06-18
实质审查的生效
实质审查的生效
2008-04-23
公开
公开
技术领域
本发明涉及一种扩展合成器音色的方法。
背景技术
通用的MIDI规定了MIDI必需有128种乐器和47个打击乐,但为了扩展,不少新的MIDI标准比如XG、GS和GM2等都分别对音色进行了扩展,使其拥有更多的音色和打击乐。但使用这些标准制作的MIDI文件通常只能使用对应标准中的音色,如果还想使用以外的音色,还是没有办法,比如不管是XG、GS还是GM2中,都没有定义像二胡这样的乐器。如果一个曲子要用这样的音色,只能用小提琴代替,其效果肯定是不如直接带上这个音色的好。如果一个标准要带上所有的音色,基本上是不可能的,因为除了真实乐器发出的声音是一种音色以外,这些乐器的不同奏法从某种角度上看也可以是一种音色,比如GM中就有弦乐的拨奏音色,同样地,对于弦乐来说还有断奏、颤音等奏法,而其他乐器也存在这样的情况。对于这种模拟真实乐器发出的音色,目前最好的办法是使用采样,但如果要把所有的乐器的音色都通过采样做到合成器中,通常在空间上是不允许的,所以根本无法用采样的算法来实现所有的乐器。同时,有些音色,比如合成音色,就算使用采样也无法完美表现,因为合成音色通常是由多变的算法决定的,算法越复杂,能达到的效果就更丰富,不是由采样就能做到的。
发明内容
本发明的目的在于提供一种利用外部软件或硬件来扩展合成器,实现对MIDI文件的音色进行扩展的方法。
为了实现上述目的,可通过以下的技术措施来实现:一种扩展合成器音色的方法,解析MIDI文件并将MIDI数据发送到指明的合成器中,再对已经添加到系统中的合成器进行渲染并送向总输出。
本发明所述的解析MIDI文件并保证MIDI数据能发送到指明的合成器,包括以下步骤:
1、初始化各个轨道的合成器选择为默认合成器;
2、解析MIDI文件各轨道的事件;
3、如果解析完成,则结束解析;
4、遇到Port Name事件,则看是否能找到该事件指明名称所指示的软件或硬件合成器,若找到,则获取对应合成器接口参数的入口地址,同时若该合成器是第一次使用,则修改系统的“合成器总数”值,然后返回1;含则,保留该轨道默认的合成器选择,再返回1;
5、把事件送向如果该轨道选择的入口地址相应的合成器;
6、返回1。
所述步骤4的所指示的合成器具有可定位性,使用枚举方式取得其所在位置;如果被枚举到的时候,该合成器返回其唯一标识名,表明其是指定的合成器。
所述步骤4的所指示的合成器,具备两个作为合成器必需的接口,包括:1、能接收MIDI信息的接口,该接口能使音序器的MIDI信息传给合成器;2、能提供具“处理函数”,或者称“渲染函数”作用的接口,该接口能让混音模块能调用该合成器来产生需要的样本;其中,所述两个接口的参数跟呼叫者提供的参数一致。
本发明所述的对已经添加到系统中的合成器进行渲染并送向总输出的过程,包括以下步骤:
1、清空最终混音缓冲;
2、检查当前系统有多少个合成器被激活,通常情况下至少有一个默认的;
3、分别执行各个合成器的“处理函数”,令其计算出其对应长度的样本,并将该结果与最终混音缓冲混合;
4、把最终混音缓冲的数据送向DA或者其他输出设备;
5、如果还没有结束,则返回1。
所述步骤3执行各个合成器“处理函数”的过程,是通过调用其“处理函数”接口接收数据,并产生混音模块需要的样本。
采用本发明所述的方法,通过对合成器实现扩展,当遇到Port Name事件,能找到对应的合成器,使需要的音色在其对应合成器上得到最有效的回放,从而使MIDI得到很大的扩展。此外,本发明方法通过执行各合成器“处理函数”,把样本结果送到最终混音缓冲,从而也能对合成音色实现完美的回放表现。
附图说明
图1为解析MIDI的流程示意图;
图2为合成器合成时的流程示意图;
具体实施方式
本发明具体的实施方式可分成如下两个部分:
一、解析MIDI并保证MIDI数据能发送到指明的合成器中
二、对已经添加到系统中的合成器进行渲染并送向总输出现在依次说明:
一、初始化各MIDI轨道的合成器选择为默认合成器后,解析MIDI并保证MIDI数据能发送到指明的合成器中,如图1所示,其过程包括如下步骤:
1、解析MIDI文件各轨道的事件。该步骤无异于一般解析MIDI信息的过程
2、如果解析完成,则结束解析。该步骤亦无异于一般对解析MIDI完成的步骤
3、若遇到Port Name事件(FF 09),则看是否能找到该事件指明的名称所指示的软件或者硬件合成器。若找到,则进行本级如下的(1)-(5),否则保留该轨道合成器选择,然后返回1。该点可以细分为如下几个步骤:
(1)根据GM标定,MIDI的Meta事件中,允许选择多个端口来发送MIDI信号。该事件可以使用FF 09来表示。如果该事件出现在第3轨,则表示第3轨是指向某非默认端口的。该事件的完整表示是FF 09len(文本长)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)返回上一层的1。
4、把事件送向如果该轨道的选择的合成器。由于已经确定了设备的入口地址,则直接调用其接收MIDI信息的接口把数据送到相应的设备。
5、返回1。
二、对已经添加到系统中的合成器进行渲染并送向总输出,其过程包括如下步骤:
1、清空最终混音缓冲(Mixing Buffer)。由于这个最终的混音缓冲是用来送到DA的,所以在每次混音前,先将其清空;
2、检查当前系统有多少个合成器被激活,通常情况下至少有一个默认的;
3、分别执行各个合成器的“处理函数”,令其计算出一定长度的样本,并将该结果与最终混音缓冲混合。调用该接口的目的是得出本次的一段样本,并将其混向Mixing Buffer(用数学加,并处理饱和)即可;
4、把最终混音缓冲的数据冲向DA或者其他输出设备(比如文件);
5、如果还没有结束,则返回1。
采用本发明所述的方法,通过外部软件或硬件对合成器实现扩展,当遇到Port Name事件,能找到对应的合成器,使需要的音色在其对应合成器上得到最有效的回放,从而使MIDI得到很大的扩展。此外,本发明方法通过执行各合成器“处理函数”,把样本结果送到最终混音缓冲,从而也能对合成音色实现完美的回放表现。
机译: 建立用于波表音乐合成器的音色样本数据库的方法,以产生具有高音质的合成声音
机译: 具有多音色水印的薄片和制造多音色NOGO水印的元件的制造方法用于形成多音色NOGO水印的元件并使用指定的元素来形成多音色NOGO水印
机译: 具有音色和旋钮调出的模拟调出合成器