一种基于midi的提高有效和弦的方法

文档序号:2829396阅读:165来源:国知局
专利名称:一种基于midi的提高有效和弦的方法
技术领域
本发明涉及一种基于MIDI的提高有效和弦的方法,尤其是涉及基于MIDI技术移除无效复音,提高有效和弦的方法。
背景技术
MIDI(Musical Instrument Digital Interface,乐器指令数字化接口)是一种专指连接各处理单元及音乐设备的接口,或者说是一种为了在电子乐器之间或电子乐器与电脑之间建立连接而制定的一种通用协议。
MIDI不是把音乐的波形进行数字化采样和编码,而是将乐器的弹奏过程记录下来,如按了哪一个键、力度多大、时间多长等等。当需要播放这首乐曲时,根据记录的一组组有序的演奏指令,通过音乐合成器生成音乐声波,经放大后由扬声器播出。
目前Mp3、WMA等压缩音频技术都是运用采样、FM和物理合成等方法。而不管是哪种方法,似乎最底层都是“样本+包络“的方式,而最上层都是各个音叠加在一起,这样会占用系统很大存储空间。
整个的合成系统叫做合成器(Synth),它的作用是把从音序器(Sequencer)传来的MIDI事件变成音频数据(即样本)。音序器通过对MIDI文件的解析,会产生一系列事件,包括音符开、音符关、控制器和音色选择等等。其中音符开意味着将有一个新的音符要演奏,该事件包括了通道、音高和力度三个参数。
合成器中存在“复音数组”,通过对该数组的每一个元素中的信息,可以计算出对应的样本,然后再送向总的输出,成为听上去丰富多彩的“和弦铃声”。
一个40和弦的合成器,这个复音数组就有40个元素,在最极限的状态下,有40个复音参与计算。如果只有5个在参与计算,我们称这5个为“活动”复音,其他的是不活动的,可供新复音使用。而一个复音是否活动,只需在复音元素中使用一个Boolean型的值即可记录。
合成器在没有收到新的MIDI事件的情况下,会不断循环计算复音数组内的复音,直至音序器通知它停止,即MIDI播放完毕。在计算的过程中,会随着各种参数的定义改变包络的状态、包络的的能量,以及样本的位置等等。
如果设立一个参数表明当前有多少个复音,则可以节省对各个复音的遍历的过程,因为一旦计算够当前复音数那么多个活动复音后,合成器可不必查询是否还存在活动复音。
如图1所示,现有技术中当合成器收到音序器的MIDI信息时的处理步骤1、音符开;2、判断空位,即寻找是否有“不活动”的复音。一种普遍的做法是遍历数组中所有元素直至找到第一个“不活动”的复音;3、如果找不到空位,则放弃该新来的音符,此时,就会出现所谓的“丢音”现象;4、在找到的空位处生成复音,即把当前信息转换成复音的参数形式。比如把通过音色号和音高把波型样本的首地址传给复音数组,再把对应的包络(ADSR)数据传给复音数组,以便用来计算出实际的样本值。
5、所有处于“活动”状态的音符都需要参与计算,即生成样本,该过程即一次遍历和计算的过程。
在上述传统做法中,如果其包络或者样本结束,即可以认为这样的音符为结束的音符。从而可能导致有过多对几乎不影响整体效果的复音,导致严重的资源浪费。在传统的MIDI合成方法中,如果出现的音有很多是像弦乐这样的持久乐器,则很快遇到不够用的情况,即经常丢音。而且,产生过多几乎不影响整体效果的复音(即无用复音),如果不及时移除,就会不断积累该音符,这样和弦数就会不断上升。

发明内容
本发明的目的在于提供一种基于MIDI的提高有效和弦的方法,能够移除过多无用复音,达到节省存储空间、提高有效和弦。
上述目的可通过以下的技术措施来实现一种基于MIDI的提高有效和弦的方法,包括以下步骤(1)音符开;(2)遍历当前整个复音数组,判断空位;(3)如有空位,则记录该位置,在整个复音数组寻找与当前音符相同通道、相同音色、相同音高的、且未进入释放Release状态的音符;若找到,则把该复音的标记为“强制释放”复音;(4)判断是否遍历完当前整个复音数组,若是,接着新的音符开;若不是,则遍历当前整个数组中的下一个复音,并判断该复音是否为标记的“强制释放”复音;若不是“强制释放”复音,计算该复音的样本及包络,若是“强制释放”复音,则将该复音转为“释放”状态后,计算该复音的样本及包络;(5)重复步骤4,直至遍历完当前整个复音数组。
本发明在步骤2中,在找空位遍历复音的同时,还可以记录包络能量最弱的那个复音,若找不到空位,则看记录的最小包络能量的复音是否小于0.008(包络的范围是0-1),该值是经测试人耳已经无法分辨是否存在的能量,若是,则直接移除该复音,记录该位置,当前记录的位置用于待步骤3处理完后建立新的复音;若不是则放弃新的音符。既找不到空位,记录的最小包络能量的复音也不小于0.008,就无法记录位置,但这样机率将会很低很低,也就是出现丢音的现象很少。
本发明在步骤3中,把该复音的标记为“强制释放”复音的同时,还可记录一个包络结束判定的门限值,以便合成器在计算的过程中,遇到包络能量值小于该值时终止对应的复音。在一般情况下,该值为0(或0.008),表示包络降到0时,即认定已经该复音结束,进而标记成为“不活动”的音符;而现在由于有新的音符来遮掩旧的音符,该值可以适当提高,以便更高结束无用的复音,该值与新音符的力度有关,力度越大,该值可越高;反之该值越小。可以设定结束判定的门限值是0.5*力度/127;力度的范围是1~127,若为0,则是表示音符关,不会引发“音符开”的信息。一旦音符可以进入Release状态,该音符便会很快自然衰减而成为“不活动的复音”,所以很快便能p空出位置出来,增加项检测到空位和低包络的可能性,降低出现丢音的机率。
本发明在步骤4中,计算该复音的样本及包络后,还可以判断该复音包络能量是否小于门限值,若是,则总复音数减去1。
本发明与现有技术相比,其有益效果是在做包络时,通常需要大量的浮点运算,这种运算效率低下,很浪费运算时间;而样本也需要计算,对于MIDI来说,样本的计算主要是抽值和插值的运算,也需要使用到浮点的乘法,也要占用不少计算时间。由于通过对这些参数的判断的计算时间远小于每个复音计算得出样本的计算时间,因此通过对这些参数的判断切实减少作用微小的复音,使得在能保持原有效果基本不变的情况下,大大减少了计算量。
从内存使用上看,减少一个复音,就很可能会减少一个样本所需要的空间,这样便可空出更多的内存来给其他有用的复音使用。所以,每节省一个复音,就可以减轻CPU的负担和节省内存的使用。
从效果上看,由于及时丢弃了无效的复音,进而给有效的复音更多的机会来生成,故可减少丢音的机率。
再有,由于同一音符被强制释放,故产生不自然的叠音的问题也同时得到解决,使整体效果更符合真实乐器演奏的情况。


图1为现有技术中MIDI合成方法的流程框图;图2为本发明的流程框图;图3为音乐伴奏乐谱图。
具体实施例方式
如图3,为一小段常见的音乐伴奏乐谱,采用专业的Roland公司的软音源HyperCanvas来播放该片段,从片段中可以看出,随着音乐的进行,它可以上升到7个复音。下面来分析一下这段乐谱,图中七个音符从左到右编号为1~7,其中2、6是相同的音高的音符,3、5相同,4、7相同;在真实的物理乐器上,这段音乐从头到尾只有四个不同的音符在响,只有四根不同的弦在震动,传统的合成器不理会这种情况,而对于以上乐段会产生7个复音,这不仅是运算资源的一种浪费,而且也是不合实际情况的,所以传统的MIDI的钢琴就算是采用了上G的样本,听上去也不像真的,很大程度上跟这种处理方式有关。
采用本发明方法来处理这段乐谱,就可以看到,当重复的音符开始的时候,虽然是先增加了一个复音,但很快就看到过一阵子少了一个复音,这是当新的复音的包络已经超过了旧的复音,故把它给删除了,这样,整个片段下来最高只有5个复音,节省了两个复音的运算量。这个例子在实际的试听时几乎是一样的,不觉得5个复音的那个有丢音,也没有某个音唐突终止的感觉。如果是在复音数已经很多的时候,比如16或更多,这种强制删除的音符就更不惹人注意了!如图2,本发明方法处理这段乐谱的具体实施过程如下一、当第1个音符产生时(1)音符开,告知1号音符产生;(2)由于当前总复音数为0,故不做任何检查,直接记录位置。
二、当第2个音符产生时
(1)音符开,告知2号音符来,由于延音的使用,整个乐段只有在最后一个音符快结束时延音才关闭,故在其之前都不会接收音符关的信号;(2)遍历找新音符建立点a)由于第一个复音没有结束,故不会记录第一个,当检测到第二个为空时,记录该位置;b)检测到第一个复音虽然通道、音色与新的一样,但其音高不同,故不满足条件,继续寻找直至找到当前复音总数个,由于目前为1,故已经结束检测;(3)在上述步骤2.a)中找到的位置上建立新音符。
三、当第3、4个音符产生时,第3、4个音符的处理过程与第2个的情况一致。
四、当第5个音符产生时(1)合成器收到音符开的信息,(2)遍历找新音符建立点,a)由于这4个音都没有结束,故只能记录位置为5,b)检测到第三个位置上的复音满足条件,故设置该复音的“强制释放”标记为真,以及“结束门限”为该音符的力度/127*0.5,该例中的力度为100,则其值就为0.394;而再没有其他满足条件的复音了,c)在2.a)中找到的位置上建立新音符。
由于某个复音被设置了强制释放,故在合成器计算时可以令其进入释放Release状态,由于对钢琴来说,其Release状态的时间是很短的(96毫秒左右,跟音高有关)。因此,在下一个音符还没有到来的时候,该复音已经完成衰减全过程,由于有新的与之音色、音高相同的复音的作用,这个衰减的过程并不会被察觉,也不会有突然被切的感觉。再加上其门限比原来默认的“0”要高,故会比正常结束的还要提前结束,即很可能在40毫秒左右就结束了。
五、当第6个音符产生时(1)当第6个音符来时,合成器接收到音符开的信息,(2)遍历找新音符建立点a)由于在其之前第三个复音结束了,故可记录该空位,b)检测到第二个位置上的复音满足条件,故设置该复音的“强制释放”标记为真,以及“结束门限”为该音符的力度/127*0.5,该例中的力度为100,则其值就为0.394;而再没有其他满足条件的复音了,c)在2.a)中找到的位置上建立新音符。
六、当第7个音符产生时(1)合成器接收到音符开的信息,(2)遍历找新音符建立点a)由于在其之前第五个复音结束了,故可记录该空位,b)检测到第四个位置上的复音满足条件,故设置该复音的“强制释放”标记为真,以及“结束门限”为该音符的力度/127*0.5,该例中的力度为100,则其值就为0.394;而再没有其他满足条件的复音了,c)在2.a)中找到的位置上建立新音符。
这样,便可在只有5个复音的合成器的条件下能播放原来需要7个复音的合成能力才能播放的曲子了。
权利要求
1.一种基于MIDI的提高有效和弦的方法,其特征在于包括以下步骤(1)音符开;(2)遍历当前整个复音数组,判断空位;(3)如有空位,则记录该位置,在整个复音数组寻找与当前音符相同通道、相同音色、相同音高的、且未进入释放状态的音符;若找到,则把该复音标记为“强制释放”复音;(4)判断是否遍历完当前整个复音数组,若是,接着新的音符开;若不是,则遍历当前整个数组中的下一个复音,并判断该复音是否为标记的“强制释放”复音;若不是“强制释放”复音,计算该复音的样本及包络,若是“强制释放”复音,则将该复音转为“释放”状态后,计算该复音的样本及包络;(5)重复步骤4,直至遍历完当前整个复音数组。
2.根据权利要求1所述的基于MIDI的提高有效和弦的方法,其特征在于步骤2中,在找空位遍历复音的同时,还可以记录包络能量最弱的那个复音,若找不到空位,则看记录的最小包络能量的复音是否小于0.008,若是,则直接移除该复音,记录该位置;若不是则放弃新的音符。
3.根据权利要求1所述的基于MIDI的提高有效和弦的方法,其特征在于在步骤3中,把该复音的标记为“强制释放”复音的同时,还可记录一个包络结束判定的门限值。
4.根据权利要求1所述的基于MIDI的提高有效和弦的方法,其特征在于在步骤4中,计算该复音的样本及包络后,还可以判断该复音包络能量是否小于门限值,若是,则总复音数减去1。
5.根据权利要求3或4所述的基于MIDI的提高有效和弦的方法,其特征在于设定结束判定的门限值是0.5*力度/127。
全文摘要
本发明公开了一种基于MIDI的提高有效和弦的方法,包括以下步骤1、音符开;2、遍历当前整个复音数组,判断空位;3、如有空位,则记录该位置,在整个复音数组寻找与当前音符相同的音符;若找到,则把该复音标记为“强制释放”复音;4、判断是否遍历完当前整个复音数组,若是,接着新的音符开;若不是,则遍历当前整个数组中的下一个复音,并判断该复音是否为“强制释放”复音;接着计算该复音的样本及包络;5、重复步骤4,直至遍历完当前整个复音数组。本发明能切实减少作用微小的复音,使得在能保持原有效果基本不变的情况下,充分利用有效空间下,达到更好的效果,节省了存储空间,同时减少了计算量。
文档编号G10H1/38GK1851802SQ20061003567
公开日2006年10月25日 申请日期2006年5月29日 优先权日2006年5月29日
发明者冯穗豫 申请人:安凯(广州)软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1