CN1632859B - 一种实现midi合成器同时播放midi音乐和音效的方法 - Google Patents

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

Info

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
Application number
CN 200410082208
Other languages
English (en)
Other versions
CN1632859A (zh
Inventor
刘世伟
刘延波
邹晓红
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Vimicro Corp
Original Assignee
Vimicro Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Vimicro Corp filed Critical Vimicro Corp
Priority to CN 200410082208 priority Critical patent/CN1632859B/zh
Publication of CN1632859A publication Critical patent/CN1632859A/zh
Application granted granted Critical
Publication of CN1632859B publication Critical patent/CN1632859B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

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

Description

一种实现MIDI合成器同时播放MIDI音乐和音效的方法
技术领域
本发明涉及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合成器的事件先入先出存储器。
CN 200410082208 2004-12-31 2004-12-31 一种实现midi合成器同时播放midi音乐和音效的方法 Expired - Fee Related CN1632859B (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101819763B (zh) * 2010-03-30 2012-07-04 深圳市五巨科技有限公司 一种同时播放多个midi文件的方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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