CN1632859B - 一种实现midi合成器同时播放midi音乐和音效的方法 - Google Patents
一种实现midi合成器同时播放midi音乐和音效的方法 Download PDFInfo
- Publication number
- CN1632859B CN1632859B CN 200410082208 CN200410082208A CN1632859B CN 1632859 B CN1632859 B CN 1632859B CN 200410082208 CN200410082208 CN 200410082208 CN 200410082208 A CN200410082208 A CN 200410082208A CN 1632859 B CN1632859 B CN 1632859B
- Authority
- CN
- China
- Prior art keywords
- incident
- midi
- event
- duration
- split
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000000694 effects Effects 0.000 title abstract description 8
- 238000005194 fractionation Methods 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 6
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Abstract
本发明公开了一种实现MIDI合成器同时播放MIDI音乐和音效的方法,将MIDI数据中播放持续时间超过预定时长的事件,拆分为多个事件;将拆分后的事件和未拆分的事件发送给MIDI合成器。应用本发明方法,能够缩短声音音效播放的延时,提高音效播放的实时性,降低MIDI合成器芯片设计的复杂度。
Description
技术领域
本发明涉及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音乐与PCM数据同时播放。
然而,解释器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;
插入的空操作的个数为拆分后时间段个数减一。
所述的拆分过程可以包括以下步骤:
A、读取MIDI数据中的Note Off Event,判断其中的播放持续时间是否超过预定时长,如果是则执行步骤B;否则返回步骤A读取下一个Note OffEvent;
B、将该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 Off Event前插入多个持续时间为拆分后的时间段的空操作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合成器芯片设计的复杂度。
Claims (5)
1.一种实现MIDI合成器同时播放MIDI音乐和音效的方法,其特征在于:将MIDI数据中播放持续时间超过预定时长的事件,拆分为多个事件;将拆分后的事件和未拆分的事件发送给MIDI合成器;
所述拆分为多个事件的方法为:
将原事件的持续时间平均分为固定个数时间段,一个时间段对应设置一个事件;或,
预先设置拆分后的时长;将原事件的持续时间按照该拆分后的时长,分为多个时间段,一个时间段对应设置一个事件。
2.如权利要求1所述的方法,其特征在于,所述一个时间段对应设置一个事件的方法为:将原Note Off Event的持续时间修改为拆分后的时间段的时长;在原Note Off Event前插入多个持续时间为拆分后的时间段的空操作Event;
插入的空操作的个数为拆分后时间段个数减一。
3.如权利要求2所述的方法,其特征在于,所述的拆分过程包括以下步骤:
A、读取MIDI数据中的Note Off Event,判断其中的播放持续时间是否超过预定时长,如果是则执行步骤B;否则返回步骤A读取下一个Note OffEvent;
B、将该Note Off Event拆分为一个Note Off Event和多个空操作Event。
4.如权利要求2所述的方法,其特征在于,所述将拆分后的事件和未拆分的事件发送给MIDI合成器是:将未拆分的事件和被拆分修改的原事件发送给MIDI合成器的事件先入先出存储器;将拆分后多出的事件发送给MIDI合成器的命令先入先出存储器。
5.如权利要求1所述的方法,其特征在于,所述将拆分后的事件和未拆分的事件发送给MIDI合成器是:将拆分后的事件和未拆分的事件发送给MIDI合成器的事件先入先出存储器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410082208 CN1632859B (zh) | 2004-12-31 | 2004-12-31 | 一种实现midi合成器同时播放midi音乐和音效的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410082208 CN1632859B (zh) | 2004-12-31 | 2004-12-31 | 一种实现midi合成器同时播放midi音乐和音效的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1632859A CN1632859A (zh) | 2005-06-29 |
CN1632859B true CN1632859B (zh) | 2010-05-26 |
Family
ID=34847240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200410082208 Expired - Fee Related CN1632859B (zh) | 2004-12-31 | 2004-12-31 | 一种实现midi合成器同时播放midi音乐和音效的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1632859B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819763B (zh) * | 2010-03-30 | 2012-07-04 | 深圳市五巨科技有限公司 | 一种同时播放多个midi文件的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0484046A2 (en) * | 1990-11-01 | 1992-05-06 | International Business Machines Corporation | Method and apparatus for editing MIDI files |
CN1144368A (zh) * | 1995-06-19 | 1997-03-05 | 雅马哈株式会社 | 形成音色波形的方法和装置 |
CN1321929A (zh) * | 2000-04-28 | 2001-11-14 | 阿尔卡塔尔公司 | 压缩乐器指令数字化接口文件的方法 |
US6429366B1 (en) * | 1998-07-22 | 2002-08-06 | Yamaha Corporation | Device and method for creating and reproducing data-containing musical composition information |
-
2004
- 2004-12-31 CN CN 200410082208 patent/CN1632859B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0484046A2 (en) * | 1990-11-01 | 1992-05-06 | International Business Machines Corporation | Method and apparatus for editing MIDI files |
CN1144368A (zh) * | 1995-06-19 | 1997-03-05 | 雅马哈株式会社 | 形成音色波形的方法和装置 |
US6429366B1 (en) * | 1998-07-22 | 2002-08-06 | Yamaha Corporation | Device and method for creating and reproducing data-containing musical composition information |
CN1321929A (zh) * | 2000-04-28 | 2001-11-14 | 阿尔卡塔尔公司 | 压缩乐器指令数字化接口文件的方法 |
Non-Patent Citations (2)
Title |
---|
JP特开2000-194375A 2000.07.14 |
JP特开2003-29759A 2003.01.31 |
Also Published As
Publication number | Publication date |
---|---|
CN1632859A (zh) | 2005-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1934646B (zh) | 使音频处理模块同步的方法和系统 | |
KR20060107372A (ko) | 연주 장치 및 그 발음 방법 | |
US20040051646A1 (en) | Musical composition reproducing apparatus portable terminal musical composition reproducing method and storage medium | |
CN108053696A (zh) | 一种根据阅读内容进行声音播放的方法、装置和终端设备 | |
CN109243472B (zh) | 一种音频处理方法及音频处理系统 | |
CN1632859B (zh) | 一种实现midi合成器同时播放midi音乐和音效的方法 | |
KR100901555B1 (ko) | 사운드 발생 할당 장치, 음악 사운드 발생기 및 사운드 발생 할당 처리 프로그램을 기록한 컴퓨터 판독가능한 기록매체 | |
CN107566595A (zh) | 移动终端的音量控制方法、装置及存储介质和移动终端 | |
JP3617603B2 (ja) | 音声情報の符号化方法及びその生成方法 | |
CN102903356A (zh) | 乐音发生装置及乐音发生方法 | |
TW200844977A (en) | Musical instrument digital interface hardware instruction set | |
JP2007094060A (ja) | コンテンツ再生装置、コンテンツ再生方法、及びコンテンツ再生プログラム | |
CN113821189B (zh) | 音频播放方法、装置、终端设备及存储介质 | |
CN105263592A (zh) | 游戏装置、音乐再生方法以及记录介质 | |
CN109508166A (zh) | 音频播放方法、装置、设备及存储介质 | |
JP3901475B2 (ja) | 信号結合装置、信号結合方法及びプログラム | |
CN112685000A (zh) | 音频处理方法、装置、计算机设备及存储介质 | |
CN115273808A (zh) | 声音处理方法、存储介质及电子设备 | |
JPS6073589A (ja) | 音声合成装置 | |
CN111767022A (zh) | 音频调节方法、装置、电子设备及计算机可读存储介质 | |
JP2020091438A (ja) | 音声生成プログラム、および音声生成装置 | |
JP6185136B1 (ja) | 音声生成プログラムおよびゲーム装置 | |
JP5375869B2 (ja) | 楽曲再生装置、楽曲再生方法及びプログラム | |
KR20050087368A (ko) | 무선 단말기의 벨소리 처리 장치 | |
CN116403549A (zh) | 音乐生成方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100526 Termination date: 20111231 |