首页> 中国专利> 一种实现MIDI合成器同时播放MIDI音乐和音效的方法

一种实现MIDI合成器同时播放MIDI音乐和音效的方法

摘要

本发明公开了一种实现MIDI合成器同时播放MIDI音乐和音效的方法,将MIDI数据中播放持续时间超过预定时长的事件,拆分为多个事件;将拆分后的事件和未拆分的事件发送给MIDI合成器。应用本发明方法,能够缩短声音音效播放的延时,提高音效播放的实时性,降低MIDI合成器芯片设计的复杂度。

著录项

  • 公开/公告号CN1632859A

    专利类型发明专利

  • 公开/公告日2005-06-29

    原文格式PDF

  • 申请/专利权人 北京中星微电子有限公司;

    申请/专利号CN200410082208.9

  • 发明设计人 刘世伟;刘延波;邹晓红;

    申请日2004-12-31

  • 分类号G10H7/00;G10K15/02;

  • 代理机构北京德琦知识产权代理有限公司;

  • 代理人宋志强

  • 地址 100083 北京市海淀区学院路35号世宁大厦15层

  • 入库时间 2023-12-17 16:16:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-02-27

    未缴年费专利权终止 IPC(主分类):G10H7/00 授权公告日:20100526 终止日期:20111231 申请日:20041231

    专利权的终止

  • 2010-05-26

    授权

    授权

  • 2005-08-24

    实质审查的生效

    实质审查的生效

  • 2005-06-29

    公开

    公开

说明书

技术领域

本发明涉及MIDI合成器播放声音技术,特别涉及一种实现MIDI合成器同时播放MIDI音乐和音效的方法。

背景技术

目前,很多电子设备都采用MIDI合成器芯片来播放MIDI音乐和音效,比如:手机播放音乐铃声或按键音效或游戏音效等、计算机播放音乐或游戏音效等。

参见图1,图1为现有技术MIDI合成器的结构和连接关系示意图。其中,电子设备的处理器100将MIDI数据或音效事件(Effect Event)或PCM声音数据(一般是WAVE文件)分别发送给MIDI合成器110中的事件先入先出存储器(Event FIFO)111或命令FIFO(Command FIFO)112或数据流FIFO(Stream FIFO)113。

一个MIDI曲子的数据由很多的成对的Note On Event和,Note OffEvent和控制信息组成,其中Note On Event包含了指定乐器、音调、音量以及该Event播放的起始时间信息,对应的Note Off Event包含了该Event播放的持续时间信息。

按键音效或游戏音效通常只播放一个MIDI音符,比如:手机的按键音等。这样,一个Effect Event只包含一对Note On Event和Note Off Event,Note On Event和Note Off Event包含的信息同上。声音音效一次只能播放一个,如果上一个音效正在播放,则取消掉上一个音效的播放,直接播放下一个,因此通常Command FIFO112中,也只有一对Note On Event和Note OffEvent。

解释器114对事件FIFO111中的MIDI Event和命令FIFO112中的EffectEvent进行解释,按照Event中的信息控制MIDI合成模块115生成声音数据进行播放。

MIDI合成模块115根据解释器114的的控制信息生成声音数据进行播放,或从Stream FIFO113中读取声音数据进行播放,或将生成声音数据和从Stream FIFO113中读取声音数据混合播放。

由于PCM声音数据已经是声音波形文件,所以播放PCM声音数据的过程与播放MIDI数据和音效声音有所区别,可以实现MIDI音乐与PCM声音数据同时播放。

参见图2,图2为现有技术播放PCM数据的流程图。该流程包括以下步骤:

步骤201,判断当前是否有MIDI在播放,如果是则直接执行步骤203;否则执行步骤202。本步骤中可以通过判断是否已将MIDI数据发送给了MIDI合成器110中的Event FIFO111来完成。

步骤202,对MIDI合成器110进行初始化。

步骤203,将PCM数据写入到Stream FIFO113。

步骤204,向Command FIFO112发送数据流播放Event(Stream OnEvent),通过该Event指示MIDI合成器110何时播放Stream FIFO113中的PCM声音数据。

如果当前MIDI合成器110正在播放MIDI音乐,则将根据解释器114生成声音数据和从Stream FIFO113中读取声音数据混合播放。

这样,就实现了MIDI音乐与CPM数据同时播放。

然而,解释器114对Event FIFO111和Command FIFO112中的Event是串行处理的,解释完一个Note Off Event才能去解释下一个Event或Command FIFO112中的Event。虽然解释器114优先解释执行CommandFIFO112中的Event,但是如果MIDI Event相对于上一个Event的时间比较长或者说Note Off Event中指示的播放持续时间较长,Event的解释执行会处于阻塞状态,影响到Command FIFO112中Event的处理,可能会出现声音音效延时播放的情况,使得音效播放的实时性较差。

发明内容

有鉴于此,本发明的主要目的在于提供一种实现MIDI合成器同时播放MIDI音乐和音效的方法,提高音效播放的实时性。

为达到上述目的,本发明的技术方案具体是这样实现的:

一种实现MIDI合成器同时播放MIDI音乐和音效的方法,将MIDI数据中播放持续时间超过预定时长的事件,拆分为多个事件;将拆分后的事件和未拆分的事件发送给MIDI合成器。

所述拆分为多个事件的方法可以为:将原事件的持续时间平均分为固定个数时间段,一个时间段对应设置一个事件。

所述拆分为多个事件的方法以可以为:预先设置拆分后的时长;将原事件的持续时间按照该拆分后的时长,分为多个时间段,一个时间段对应设置一个事件。

所述一个时间段对应设置一个事件的方法可以为:将原Note Off Event的持续时间修改为拆分后的时间段的时长;在原Note Off Event前插入多个持续时间为拆分后的时间段的空操作Event;

插入的空操作的个数为拆分后时间段个数减一。

所述的拆分过程可以包括以下步骤:

A1、读取MIDI数据中的Note Off Event,判断其中的播放持续时间是否超过预定时长,如果是则执行步骤B;否则返回步骤A读取下一个Note OffEvent;

B1、将该Note Off Event拆分为一个Note Off Event和多个空操作Event。

所述将拆分后的事件和未拆分的事件发送给MIDI合成器可以是:将未拆分的事件和被拆分修改的原事件发送给MIDI合成器的事件先入先出存储器;将拆分后多出的事件发送给MIDI合成器的命令先入先出存储器。

所述将拆分后的事件和未拆分的事件发送给MIDI合成器也可以是:将拆分后的事件和未拆分的事件发送给MIDI合成器的事件先入先出存储器。

由上述的技术方案可见,本发明的这种实现MIDI合成器同时播放MIDI音乐和音效的方法,将MIDI数据中播放持续时间超过预定时长的事件,拆分为多个事件;将拆分后的事件和未拆分的事件发送给MIDI合成器,缩短了MIDI合成器解释持续时间较长的MIDI数据事件的时间。使得MIDI合成器能够及时地去解释Command FIFO112中Event,缩短声音音效播放的延时,提高了音效播放的实时性。

附图说明

图1为MIDI合成器的结构和连接关系示意图;

图2为现有技术播放PCM数据的流程图;

图3为本发明实现MIDI合成器同时播放MIDI音乐和其他音效的流程图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。

本发明的这种实现MIDI合成器同时播放MIDI音乐和音效的方法,将MIDI数据中播放持续时间超过预定时长的事件,拆分为多个事件;将拆分后的事件和未拆分的事件发送给MIDI合成器。

图3为本发明实现MIDI合成器同时播放MIDI音乐和其他音效的流程图。该方法包括以下步骤:

步骤301,电子设备的处理器读取MIDI数据中的MIDI Event。

步骤302,判断是否为Note Off Event,如果是则执行步骤303;否则执行步骤305。

步骤303,判断其中播放持续时间是否大于预定时长,如果是则执行步骤304;否则执行步骤305。

步骤304,拆分该Note Off Event。本实施例中拆分Note Off Event至少有以下两种方法:

方法1、将原事件的持续时间平均分为固定个数时间段,一个时间段对应设置一个事件。例如:预定时长为100ms,固定个数为5,如果有一个Note OffEvent的持续时间为200ms,则拆分为5个时间段,每个时间段40ms。

方法2、预先设置拆分后的时长;将原事件的持续时间按照该拆分后的时长,分为多个时间段,一个时间段对应设置一个事件。例如:预定时长为100ms,拆分后的时长为50ms,如果有一个Note Off Event的持续时间为200ms,则拆分为4个时间段。

拆分时,可以将原Note Off Event的持续时间修改为拆分后的时间段的时长;在原Note OffEvent前插入多个持续时间为拆分后的时间段的空操作Event;插入的空操作的个数为拆分后时间段个数减一。

例如:将200ms拆分为4个时间段,则将原来的Note Off Event中持续时间修改该50ms,再拆出3个空操作Event插入到修改后的Note Off Event前发送给MIDI合成器,每个空操作Event中的持续时间为50ms。

步骤305,将MIDI Event写入Event FIFO。本实施例中,是将拆分后的事件和未拆分的事件都发送给MIDI合成器的Event FIFO。

实际应用中,也可以将未拆分的事件和被拆分修改的原事件发送给MIDI合成器的Event FIFO;将拆分后多出的事件发送给MIDI合成器的Command FIFO。

步骤306,判断是否还有未读的Event,如果是则返回步骤301,读取下一个MIDI Event,否则结束流程。

这样,解释器就可以很快解释完Note Off Event,及时去解释CommandFIFO的Event。

由上述的实施例可见,本发明的这种实现MIDI合成器同时播放MIDI音乐和音效的方法,缩短了MIDI合成器解释持续时间较长的MIDI数据事件的时间。使得MIDI合成器能够及时地去解释Command FIFO112中Event,缩短声音音效播放的延时,提高了音效播放的实时性。而且,本发明不需要对MIDI合成器芯片进行任何改动,降低了MIDI合成器芯片设计的复杂度。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号