利用计算机软件的乐音发生器系统的制作方法

文档序号:2821649阅读:169来源:国知局
专利名称:利用计算机软件的乐音发生器系统的制作方法
技术领域
本发明涉及一种乐音发生器系统,通过利用一个通用目的的算术处理器例如CPU或计算机执行一个声音波形数据形成程序来形成乐音或者声音波形数据。
背景技术
在当今的许多电子乐器中,都使用微处理器执行乐音产生处理。在某些情况下,微处理器甚至执行向通过乐音产生处理形成的乐音波形取样数据施加效果的处理。在本领域通常的做法是,通过具有取决于所采用的特定的乐音产生方法(例如,波形存储器或FM合成方法)的电路结构的专用的硬件(例如,乐音发生器LSI或DSP)来实现这种微处理器。
但是,感谢近来对CPU的运算能力的改进,已经出现了利用结合在通用目的计算机或专用乐音产生装置中的CPU来执行描述乐音产生处理的预定的步骤的程序的电子乐器。这里,基于这种乐音产生处理程序的乐音产生装置或方法将被称为“软件乐音发生器”,利用专用硬件的传统的乐音产生装置或方法将被称为“硬件乐音发生器”。
传统的软件乐音发生器被设计成为应用级软件。图22示出了用于实现这种应用级软件乐音发生器的软件的结构的例子。为了简化这种软件的复杂性,该软件被以可相互独立的编程的多个小单元(模块)的组合而分层次地排列。具体地说,在最高级别的程序为用于产生MIDI消息的模块,它们是应用软件形式的,例如音序器软件,游戏软件和卡拉OK软件。
在图22所示的例子中,提供了两种应用软件,一种是安装在卡拉OK播放器中的卡拉OK软件,另一种是安装在MIDI播放器中的MIDI再生软件。MIDI播放器在其中预先存储了MIDI格式的卡拉OK音乐片断的文件,并且可以读出对应于选定的音乐段的文件,以便以MIDI消息格式输出选定的乐段的表演信息。在卡拉OK软件之后,提供了一个软件乐音发生器模块,在其输入侧,包括用于软件乐音发生器的预定的应用程序接口(“API”)。在图22的例子中,用于软件乐音发生器的应用程序接口(API)被示为“SGM MIDI outAPI”。
所述的软件乐音发生器模块包括一个软件,用于根据经过专用软件乐音发生器API例如接口“SGM MIDI out API”提供的MIDI消息形成乐音波形数据。如图23所示,该软件乐音发生器模块包括一个MIDI输出驱动器部分和一个乐音发生器(或引擎)部分。MIDI输出驱动器部分是一个用于驱动乐音发生器部分的模块,它响应于MIDI消息将语音数据转换成控制参数控制乐音发生器部分。该控制参数通过预定的模块间接口(未示出)被送到乐音发生器部分。由于MIDI输出驱动器部分被初始化,一组必需的波形数据从给定的文件被装载并存储在波形数据贮存器部分。利用这组波形数据并根据所述的控制参数,乐音发生器部分产生给定音乐特征例如音调和音色的乐音波形样本数据(即,在相继的取样点的乐音波形数据)。
在计算机中所使用的预定的操作系统(OS),例如视窗3.1(windows 3.1)或视窗95(windows 95)(微软公司商标)中,提供了用于接收和传送已形成的波形取样数据的接口(在windows 3.1中该接口可以是“WAVE out API”)。输出设备为一个在操作系统(OS)中安装的驱动器模块,它通过预定的接口例如“WAVE outAPI”接收由作为应用软件提供的软件乐音发生器模块形成的波形取样数据并将形成的取样数据输出到外部硬件。例如,输出设备包括一个软件,它通过一个直接存储器存取(DMA)控制器读出由软件乐音模块形成和处理并存储在一个存储设备例如硬盘中的波形取样数据,然后将读出的取样数据输出到外部硬件例如数字/模拟转换器(DAC)。
图22中所示的MIDI播放器是具有MIDI再生和其中预先安装有软件乐音发生器模块的那种类型。MIDI再生模块读出标准的MIDI文件(SMF)以便再生MIDI消息。每个再生的MIDI消息由软件乐音发生器模块处理以便以与上述相似的方式形成对应于MIDI消息的乐音波形取样数据。在由MIDI播放器中的软件乐音发生器模块如此形成的乐音波形取样数据通过预定的接口例如“WAVE out API”被送到输出设备进一步处理并然后输出到外部硬件例如数字/模拟转换器(DAC)。
在计算机操作系统中,也提供了一种用于根据哪种波形取样数据被形成用于接收和传送表演信息(典型地为MIDI消息)的接口(在使用windows 3.1的情况下该接口可以是“MIDI API”)。利用这样一种接口,输出MIDI消息的软件可以被用作为应用软件,参见图24所示的例子。在图24中的例子中,提供了游戏软件,游戏软件,多媒体软件,等等,使得各种游戏效果声音,背景音乐声音,MIDI数据或自动音序表演声音的表演信息可以以MIDI消息的形式从这些软件输出。每个这种MIDI消息通过预定的接口例如“MIDI API”被操作系统(OS)接收,然后到达MIDI驱动器。MIDI驱动器向外部硬件乐音发生器提供基于所述的MIDI消息的乐音形成数据,外部硬件乐音发生器反过来根据乐音形成数据利用预定的乐音产生硬件设备形成乐音波形取样数据。
但是,如上所述的传统的应用级的软件乐音发生器不能从用于接收和传送表演信息的接口(例如MIDI API)接收数据,根据接收到的数据执行波形取样数据形成处理,尽管它们可以向操作系统的预定的接口(例如WAVE out API)输出已形成的波形取样数据。
因此,在过去,通过计算机操作系统将表演信息(MIDI消息)产生软件,例如游戏软件,音序器软件或多媒体软件与应用级软件乐音发生器简单地结合起来是不可能的。因此,为了使这种表演信息(MIDI消息)产生软件能够被加到计算机操作系统并在其中被容易地使用,一个昂贵的硬件乐音发生器是绝对必要的。
在乐音产生处理是根据例如MIDI消息的表演信息执行的情况下,由计算机单独执行乐音产生处理是很少见的,绝大多数情况下是计算机在同一操作系统的控制下与乐音产生处理同时地或并行地运行一个或多个其它的软件程序。例如,当运行游戏软件时,对于计算机来说,可能有必要执行其它的处理,例如与声音产生处理并行地产生动画,或者运行卡拉OK软件,对于计算机来说,也可能有必要执行用于产生歌曲或背景图象的文字的可视显示的处理。如果采用了软件乐音发生器,计算机在同一操作系统OS的控制下,计算机以并行的方式执行软件乐音发生器程序和其它必要的软件程序。在这种情况下,为了保证由软件乐音发生器执行的乐音波形取样数据形成处理不受其它处理的影响,在一个具有完全多任务功能的操作系统(例如windows 95)上执行乐音产生处理是所希望的。
但是,事实上,不具有完全多任务功能的操作系统(例如windows3.1)目前也在被广泛地应用,而且也存在着在这种不具有完全多任务功能的操作系统上执行乐音产生处理的日益增长的需要。使用不具有完全多任务功能的操作系统,乐音的产生可能会由于其它的处理而使乐音产生处理被延迟而受到妨碍,或者其它处理的执行被乐音产生处理占用过多的时间而被延迟。特别地,如果一个软件乐音发生器被加到一个与硬件乐音发生器一同使用的应用软件并因此不出现上述与并行处理相关的问题的话,预先考虑适当的装置或方案以避免计算机在并行处理中出现的问题是所希望的。

发明内容
因此,本发明的一个目的是提供一种利用计算机软件的乐音发生器系统,它能够通过一个操作系统驱动一个应用级别的软件,接收表演信息,例如MIDI消息,从而增加软件乐音发生器的应用范围。
本发明的另一个目的是提供一种利用计算机软件的乐音发生器系统,即使在不具有完全多任务功能的操作系统上执行两种处理时,它允许适当地执行乐音产生处理和其它的处理而不会对其产生妨碍。
为了取得上述目的,本发明提供一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的产生乐音波形的方法,所述方法包括第一步骤,根据以非周期方式提供的表演信息激活乐音产生处理;第二步骤,变化地指示通过所述第一步骤在每次激活时通过乐音产生处理产生特定数量的乐音波形样本;以及第三步骤,使所述通用算术处理单元执行由所述第一步骤激活的乐音产生处理,以产生所述第二步骤指示的所述特定数量的乐音波形样本。
本发明还提供一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的产生乐音波形的方法,所述方法包括第一步骤,根据以非周期方式提供的表演信息激活乐音产生处理;第二步骤,当所述第一步骤激活乐音处理时,确定在所述第一步骤当前激活的时间点可以产生的乐音波形样本的目标数量,并以特定数量跟随所述目标数量的方式响应当前激活,确定要产生的乐音波形样本的特定数量;以及第三步骤,使所述通用算术处理单元执行由所述第一步骤激活的乐音产生处理,以产生所述特定数量的乐音波形样本来响应当前激活。
本发明还提供一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的产生乐音波形的方法,所述方法包括第一步骤,根据以间歇的方式提供的表演信息激活乐音产生处理;第二步骤,响应所述第一步骤的激活,使所述通用算术处理单元执行乐音产生处理,由此在乐音产生处理每次激活时共同地产生多个乐音波形样本并在缓冲器中临时地存储所产生的乐音波形样本;以及第三步骤,通过从所述缓冲器连续地读取存储的乐音波形样本而重放乐音波形;第四步骤,当所述第二步骤不再能够及时产生用于第三步骤乐音波形样本重放的乐音波形样本时,在此时间点,重置现在由所述第二步骤执行的乐音波形产生处理,然后通过所述第二步骤使乐音波形产生处理重新开始,以产生用于在当前时间点之后重放的另外的乐音波形。
本发明还提供一种用于通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的乐音产生装置,所述装置包括第一装置,根据以非周期方式提供的表演信息激活乐音产生处理;第二装置,变化地指示通过所述第一装置在每次激活时通过乐音产生处理产生特定数量的乐音波形样本;以及第三装置,使所述通用算术处理单元执行由所述第一装置激活的乐音产生处理,以产生所述第二装置指示的所述特定数量的乐音波形样本。
本发明还提供一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的乐音产生装置,所述装置包括第一装置,根据以非周期方式提供的表演信息激活乐音产生处理;第二装置,当所述第一装置激活乐音处理时,确定在所述第一装置当前激活的时间点可以产生的乐音波形样本的目标数量,并以特定数量跟随所述目标数量的方式响应当前激活,确定要产生的乐音波形样本的特定数量;以及第三装置,使所述通用算术处理单元执行由所述第一装置激活的乐音产生处理,以产生所述特定数量的乐音波形样本来响应当前激活。
本发明还提供一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的乐音产生装置,所述装置包括第一装置,根据以间歇的方式提供的表演信息激活乐音产生处理;第二装置,响应所述第一装置的激活,使所述通用算术处理单元执行乐音产生处理,由此在乐音产生处理每次激活时共同地产生多个乐音波形样本并在缓冲器中临时地存储所产生的乐音波形样本;以及第三装置,通过从所述缓冲器连续地读取存储的乐音波形样本而重放乐音波形;第四装置,当所述第二装置不再能够及时产生用于第三装置乐音波形样本重放的乐音波形样本时,在此时间点,重置现在由所述第二装置执行的乐音波形产生处理,然后通过所述第二装置使乐音波形产生处理重新开始,以产生用于在当前时间点之后重放的另外的乐音波形。
本发明还提供一种根据表演信息产生乐音波形的乐音产生装置,所述装置包括存储单元,存储包括乐音产生程序的多个程序;处理器单元,能够以并行方式同时地执行存储在所述存储单元内的程序,所述处理器单元使多个内部中断信号以非周期的方式产生,并激活乐音产生程序以响应内部中断信号根据表演信息产生乐音波形,其中由所述处理器单元激活的所述乐音产生程序包括第一步骤,变化地指示在所述乐音产生程序每次激活时产生特定数量的乐音波形样本;以及第二步骤,在所述乐音产生程序每次激活时产生所述第一步骤变化地指示的所述特定数量的乐音波形样本。
本发明还提供一种根据表演信息产生乐音波形的乐音产生装置,所述装置包括存储单元,存储包括乐音产生程序的多个程序;处理器单元,能够以并行方式同时地执行存储在所述存储单元内的程序,所述处理器单元使多个内部中断信号以非周期的方式产生,并激活乐音产生程序以响应内部中断信号根据表演信息产生乐音波形,其中由所述处理器单元激活的所述乐音产生程序包括第一步骤,确定在所述乐音产生程序当前激活的时间点可以产生的乐音波形样本的目标数量;以及第二步骤,响应所述乐音产生程序的当前激活,产生特定数量的乐音波形样本,所述特定数量是以特定数量跟随所述目标数量的方式确定的。
本发明还提供一种根据表演信息产生乐音波形的乐音产生装置,所述装置包括存储单元,存储包括乐音产生程序的多个程序;处理器单元,能够以并行方式同时地执行存储在所述存储单元内的程序,所述处理器单元使多个内部中断信号以间歇的方式产生,并激活乐音产生程序以响应内部中断信号根据表演信息产生乐音波形,其中由所述处理器单元激活的所述乐音产生程序包括在所述乐音产生程序每次激活时共同地产生多个乐音波形样本的步骤;缓冲器单元,临时地存储响应所述乐音产生程序当前的激活而共同地产生的乐音波形样本;重放单元,通过从所述缓冲器单元连续读取存储的乐音波形样本,重放乐音波形;其中所述处理器单元执行控制程序,所述控制程序包括如下步骤当所述处理单元已经变得不再能够及时产生用于所述重放单元的乐音波形重放的乐音波形样本时,在此时间点,重置现在由所述处理器单元执行的乐音产生处理,然后通过所述处理器单元使乐音产生处理重新开始,以产生用于在当前时间点之后重放的另外的乐音波形。


为了更好地理解本发明的上述和其它特征,下面将结合附图详细地描述本发明的最佳实施例,其中图1为根据本发明的实施例的软件系统的总体结构的概略方框图;图2为根据本发明的另一个实施例的软件系统的总体结构的概略方框图;图3为显示使用根据本发明的一个实施例的计算机软件的乐音发生器系统的总体硬件结构的方框图;图4为基于在本发明中使用的软件的乐音产生处理的轮廓图;图5描述了可以在本发明中采用的措施1的例子;图6描述了可以在本发明中采用的措施1的另一个例子;图7描述了可以在本发明中采用的措施3的例子;图8为由图3的CPU执行的主程序的流程图;图9为由CPU执行的图8的初始化过程的流程图;图10为在图8中的MIDI处理中由CPU执行的音通(note-on)事件过程的一个例子;图11为在图8中的MIDI处理中由CPU执行的音断(note-off)事件过程的一个例子;图12为在图8中的MIDI处理中由CPU执行的乐音发生器处理I的一个例子的流程图;图13为由图3的DMA控制器执行的外部中断过程的例子的流程图;图14为由CPU根据从DMA控制器发出的返回请求执行的图2的乐音发生器处理II的例子的流程图;图15为由CPU根据从DMA控制器发出的复位请求执行的图2的乐音发生器处理II的例子的流程图;图16是措施1的另一个例子的图示,显示了内部中断信号的产生和要形成的乐音数据的量之间的关系的例子;图17为图1中所示的伪MIDI驱动器FMD的示例程序的流程图;图18为专用于图1的软件乐音发生器的应用软件中所含的MIDI事件处理程序的例子的流程图;图19为在确定要形成量SR作为延迟量OR的函数的函数的特性曲线的例子的图示;图20为在确定要形成量SR作为延迟量OR的函数的函数的特性曲线的另一个例子的图示;图21为在确定乐音产生通道数作为延迟量OR的函数的函数的特性曲线的例子的图示;图22为一个方框图,显示了实现应用软件级的软件乐音发生器的传统软件系统的配置;图23为一概略方框图,显示了传统软件乐音发生器的示例性配置;图24为一个方框图,显示了实现用于产生MIDI消息的应用软件的传统的系统配置的例子;图25为一个概略方框图,显示了根据本发明的另一个实施例的软件系统的总体配置;图26为一个流程图,显示了在图25中的软件系统中由图3的CPU执行的声音模块程序中的主程序的例子;图27为一个流程图,显示了由应用软件APSI在被再生的数据的事件定时在图25的软件系统中执行的处理的例子;
图28为显示图26的WAVE处理的例子的流程图;图29为根据从图3的DMA控制器发出的返回请求执行的图26的乐音发生器处理II的例子的流程图;图30为根据从DMA控制器发出的复位请求执行的图26的乐音发生器处理II的例子的流程图。
具体实施例方式
图1为根据本发明的一个方面的软件系统的总体结构的概略方框图;该软件系统使用了windows 3.1或windows 95(皆为微软公司商标)作为操作系统(OS)。该操作系统(OS)包括一个“MIDI API”作为第一接口IF1,用于接收和传送MIDI消息(即,基于哪个波形数据被形成的表演信息),和一个“WAVE out API”作为第二接口IF2,用于接收和传送形成的波形数据。
例如,“Director”软件被用作为应用软件APS1,用于产生MIDI消息(即,基于哪个波形数据被形成的表演信息)。该“Director”软件包括“Director文件”并输出MIDI消息形式的背景音乐(BGM)的表演信息。当然,除了“Director”软件以外的其它任何应用软件都可以使用,只要它是被设计成输出MIDI消息即可。
软件乐音发生器(T.G)模块SSM是应用级软件,它包括一个专用接口,例如,“SGM MIDI out API”,用于接收MIDI消息,并基于接收的MIDI消息形成乐音或声音波形数据,以便通过第二接口 IF2(即,“WAVE out API”)输出得到的已形成的波形数据。该软件乐音发生器模块SSM可以按照传统技术象图23中所示的方式设置。
在图1所示的例子中,伪MIDI驱动器FMD被提供作为伪驱动器,被编程接收从应用软件APS1通过第一OS接口IF1提供的MIDI消息,并将接收的MIDI消息送到软件乐音发生器模块SSM。该伪MIDI驱动器FMD被作为一个驱动器安装在操作系统中。因此,从应用软件APS1通过第一接口IF1(MIDI API)提供的MIDI消息被伪MIDI驱动器FMD接收并然后传送到软件乐音发生器模块SSM。
软件乐音发生器模块SSM从伪MIDI驱动器FMD通过其自身的接口(例如,“SGM MIDI out API”)接收MIDI消息,并根据接收的MIDI消息形成波形数据并向OS通过前述的第二接口IF2(即,“WAVE out API”)提供最后形成的波形数据。
这样,本身为应用软件的软件乐音发生器模块SSM即可接收从其它应用软件通过OS“MIDI API”接口提供的MIDI消息,并根据接收的MIDI消息执行声音波形数据形成处理。因此,本身为应用软件的软件乐音发生器模块SSM即可容易地在OS层上与其它应用软件APS1结合。
象传统的软件乐音发生器模块那样,软件乐音发生器模块SSM可以具有用于产生或提供MIDI消息的适当的专用软件。图1中所示的应用软件(例如卡拉OK软件)APS2就是这种MIDI提供软件的例子。软件乐音发生器模块SSM可以从其本身的接口(例如,“SGMMIDI out API”)从专用软件APS2接收MIDI消息,并根据接收的MIDI消息执行声音波形数据形成处理,以便通过第二接口IF2(“WAVE out API”)向OS提供最后形成的波形数据。这样,软件乐音发生器模块SSM可以在被SSM结合专用的软件APS2和其它通过OS与模块SSM结合的软件APS1之间被共享。
通过第二接口IF2(“WAVE out API”)由OS接收的已形成的波形数据通过输出设备OUD被提供到一个外部设备例如CODEC硬件(即,数字-模拟转换器(DA或DAC)。
图2为根据本发明的另一个实施例的软件系统的总体结构的概略方框图。
在图2中,本身为应用软件的软件乐音发生器模块SSM被作为一个驱动器安装在操作系统中,并被编程通过操作系统的第一接口IF1(“MIDI API”)接口提供的MIDI消息。因此,可以从应用软件APS1通过第一接口IF1(“MIDI API”)和操作系统向软件乐音发生器模块SSM提供MIDI消息。软件乐音发生器模块SSM根据接收的MIDI消息形成波形取样数据并通过第二接口IF2(“WAVE outAPI”)向操作系统OS提供最后形成的波形取样数据。因此,在这种情况下,本身为应用软件的软件乐音发生器模块SSM可在OS层上接收从其它应用软件APS1提供的MIDI消息,并根据接收的MIDI消息执行声音波形数据形成处理,以便在OS层次上通过第二接口IF2(“WAVE out API”)输出形成的波形数据。
图25为一个概略方框图,显示了根据本发明的另一个实施例的软件系统的总体结构。
在图25中,提供了一个软件“Multimedia”(多媒体)作为应用软件APS1,它以同步的方式产生MIDI消息和波形数据。除了如图2所示的接口IF2(“WAVE out API”),操作系统(OS)包括一个第三接口IF3(图25中左边的“WAVE out API”),它是由作为驱动器安装在OS中的应用软件-声音模块SGM提供的。从应用软件APS1产生的每个波形通过由声音模块SGM提供的第三接口IF3被接收。
声音模块SGM包括一个软件乐音发生器模块SSM,以与图2中所示的系统的对应的SSM相似的方式,被编程通过第一接口IF1(“MIDI API”)从应用软件APS1中接收MIDI消息并根据接收的MIDI消息形成波形取样数据。
此外,声音模块SGM被编程接收从应用软件APS1通过接口IF3提供的波形数据和由软件乐音源模块SSM形成的波形取样数据,并将这些接收的数据加到一起,以便将最后相加的数据输出到第二接口IF2。因此,在这种情况下,本身作为应用软件的声音模块SGM能够接收从其它OS层次上的应用软件APS1中提供的MIDI消息,根据接收的MIDI消息执行声音波形数据形成处理,并将形成的波形数据和从应用软件APS1通过接口IF3提供的波形数据加到一起,以便在OS层次上通过第二接口IF2输出相加的结果。
图3为显示使用根据本发明的一个实施例的计算机软件的乐音发生器系统的总体硬件结构的方框图;图3的乐音发生器系统使用了一个个人计算机的CPU(中央处理单元)作为主控制部分,并在CPU3的控制下以并行的方式根据一个实现软件乐音发生器程序(即,软件乐音发生器程序)的程序执行波形取样数据形成处理和根据一个或多个其它程序执行其它的处理。在下面描述中使用的术语“乐音产生处理”应当被理解为与上面所用的术语“波形取样数据形成处理”基本具有相同的含义,只是术语“乐音产生处理”除了波形取样数据形成处理以外,也可能指效果产生操作和各种乐音处理操作。
CPU3通过一个数据和地址总线6连接到,一个MIDI接口1,一个定时器2,一个ROM(只读存储器)4,一个RAM(随机存取存储器)5,一个鼠标7,一个键盘8,一个显示器9,一个硬盘设备10和一个DMA(直接存储器存取)控制器11。
DMA控制器11执行一个预定的再生处理,其中,它利用已知的直接存储器存取方法从一个RAM的输出缓冲区连续地读出由CPU 3执行乐音产生处理形成的乐音数据,并然后将读出的乐音数据送到D/A转换器(DAC数字到模拟)12,一个样本接一个样本,与来自转换器12的再生取样时钟脉冲同步地进行。经D/A转换器12转换成模拟形式的乐音数据由一个包括放大器和扬声器的声音系统13再生或发声。
硬盘设备10上面预先安装了各种软件例如OS(在该实施例中,windows 3.1(微软公司商标)),实用软件和用于实现软件乐音发生器的软件(即,图1或2的软件乐音发生器模块SSM),以及其它应用软件(即,图1或2的应用软件ASP1和ASP2)。该硬盘设备10包括一个波形数据存储器,其中,预先存储了一段或多段的多种音色的波形数据组。各种程序,例如伪MIDI驱动器,可以被存储在硬盘设备10或RAM 5或ROM 4中。在下面的描述中,为了区别预先存储在硬盘设备10的波形数据存储器中的波形数据和由软件乐音发生器模块SSM响应于MIDI消息并利用预先存储的波形数据形成的波形取样数据,后者将也被称为“乐音数据”。
由CPU 3执行的程序可以被预先存储在ROM 4中而不是在硬盘10上,那里可以存储除波形数据以外的各种其它数据。通过将硬盘10或ROM 4中的程序装入RAM 5,CPU 3即可以执行该程序。这极大地方便了操作程序的升级和添加等等。CD-ROM(compact disk)19可作为可拆卸的外部记录介质,用于记录各种数据和可选的操作程序。存储在CD-ROM 19中的操作程序和数据可以由CD-ROM驱动器14读出并然后送到硬盘10存储。这方便了操作程序的安装和升级。可拆卸外部记录介质除了CD-ROM以外,还可以是软盘和磁光盘(MO)。
通信接口15可以接到总线6,使得乐音发生器系统18可以通过接口15连接到一个通信网络16,例如LAN(局部区域网络),互联网和电话线路网络可以通过通信网络16连接到适当的服务器计算机17。因此,在操作程序和各种数据没有安装在硬盘10的情况下,这些操作程序和数据可以从服务器17接收到并下载到硬盘10。在这种情况下,乐音发生器系统18,即,“客户”通过通信接口15和通信网络16发出请求服务器计算机17下载操作程序和各种数据的命令。响应于从乐音发生器系统18发出的命令,服务器计算机17通过通信网络16将请求的操作程序和数据传送到系统18。乐音发生器系统18通过通信网络15接收操作程序和数据并将它们存储到硬盘10完成所需的下载。
这里应当理解,乐音发生器系统18可以通过在市面上买到的个人计算机上安装操作程序和对应于本发明的操作的各种数据来实现。在这种情况下,操作程序和对应于本发明的操作的各种数据可以以一种在记录介质,例如CD-ROM或软盘中以个人计算机可以阅读的记录的形式提供给使用者。当个人计算机连接到通信网络例如LAN时,操作程序和各种数据可以通过与上述类似的通信网络提供到个人计算机。
软件乐音发生器模块SSM可以按图23中所示的方式构造。即,如图23所示,软件乐音发生器模块SSM包括一个MIDI输出驱动器部分和一个乐音发生器部分。MIDI输出驱动器部分是一个用于驱动乐音发生器部分的模块,它响应于MIDI消息将语音数据转换成控制乐音发生器部分的控制参数。该控制参数可以通过预定的模块间接口(例如,“SGM引擎API”)送到乐音发生器部分。当MIDI输出驱动器部分被安装时,一组所需的波形数据被从波形数据存储器中装入,并存储在波形数据存储部分。利用该组波形数据并根据所述的控制参数,乐音发生器部分产生乐音波形取样数据或给定音乐特征例如音调(pitch)和音色(tone color)的乐音数据。
图1和2所示的输出设备为向D/A转换器12提供从软件乐音发生器模块SSM通过第二OS级接口(“WAVE out API”)发送的乐音数据。该乐音数据按照已知的直接存储器存取方法通过DMA控制器11被提供到D/A转换器12。因此,该输出设备通过在CPU 3的控制下来自DMA控制器11的中断信号实现。
现在参见图4,简单描述由软件乐音发生器模块SSM在CPU 3的控制下执行的乐音产生处理的一个例子。
随着应用软件APS1或APS2的程序的激活,MIDI消息开始向软件乐音发生器模块SSM提供。在图1的系统中,从应用软件APS1通过通过第一接口IF1(“MIDI API”)和伪MIDI驱动器FMD输出的每个MIDI消息被提供到输入接口(“SGM MIDI out API”),同时,象前面所提到的,从应用软件APS2输出的每个MIDI消息被提供到输入接口(“SGM MIDI out API”)。一旦MIDI消息被提供到软件乐音发生器模块SSM的输入接口(“SGM MIDI out API”),模块SSM(图23)的MIDI输出驱动器部分被激活,将语音数据转换成控制参数,并将转换的控制参数和其它数据存储到用于根据MIDI消息指派为乐音产生的乐音产生通道之一的乐音发生器寄存器。换句话说,用于乐音产生通道的乐音发生器寄存器构成软件乐音发生器模块SSM的输入接口(“SGM MIDI out API”)的一部分。
简单地说,每个预定长度(以下称为“帧”)的预定的时间周期,模块SSM(图23)的乐音发生器部分被激活,根据在后续帧内按照控制参数提供的MIDI消息执行乐音产生处理。在图4的例子中,基于从时间T1到T2的帧内提供的MIDI消息的乐音产生处理在从时间T2到T3的下一帧内被执行。在基于波形存储方法的乐音产生处理的最佳实施例中,对于指派给乐音产生的每个乐音产生通道,波形数据被按照由存储在用于该通道的乐音发生器寄存器中的控制参数指定的数率从RAM中读出,根据控制参数,对读出的波形数据进行音色控制(color control)(滤除算术运算),音量控制(被音量分组数据相乘)和音调,音色,音量等等的调制控制。这样,对于该乐音产生通道,预定数目的乐音数据的取样被形成。指定的乐音产生通道的形成的乐音数据被累积并然后写入RAM 5的输出缓冲区。在某些情况下,累积的乐音数据在被写入输出缓冲区之前可以被施加效果。然后,从输出缓冲区的音色数据的再生被预定在输出设备中。在输出设备中的乐音数据的再生的预定对应于从软件乐音发生器模块SSM中的形成的乐音数据到第二OS级别接口(“WAVE out API”)的输出。
对于每一帧,输出设备从被乐音发生器部分在前一帧预定的输出缓冲区中逐样本的读出乐音数据,并将读出的乐音数据送到D/A转换器12。在图4的例子中,在从时间T2到T3的帧内形成的乐音数据被在从T3到T4的帧中从预定的输出缓冲区中读出。
在上述的软件中,应用软件APS1和/或APS2的激活和基于提供的MIDI消息的MIDI输出驱动器部分的激活是以实时进行的。输出设备被来自DMA控制器11的中断信号强制地激活,使得不会造成任何时间延迟。相反,乐音发生器部分是由来自CPU 3本身的内部中断信号激活的;因此,当软件运行于不具有完全多任务功能的操作系统(OS)时,乐音发生器部分的激活将由于其它处理而被延迟,使得所需的乐音的产生被明显地妨碍了。由于这个原因,本发明的乐音发生器系统通过采用以下所述的措施能够有效地排除这种妨碍。
<措施1>
根据该措施,产生激活乐音发生器部分的内部中断信号(即,激活或触发指令)的时间点,在每个帧内被设置产生多次,使得内部中断信号只是当乐音产生处理在软件乐音发生器中被允许实际执行时被实际产生。该定时可以利用定时器进行设置而周期地发生。通过每当乐音发生器部分被信号驱动时形成一些“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”,进行适当的调整,使得“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”被以分散的形式在该帧内总体地晚一些形成。
在乐音发生器部分因为在某些点未产生内部中断信号(即,激活指令)而未被激活的事件中,只有当内部中断信号或激活指令在该帧内的一个或多个相继的点被产生时,通过进行适当的调整,形成剩余未形成乐音数据(即,在预定的激活时间没有被形成的乐音数据),进行要被写入一个输出缓冲区的算术形成。
根据措施1,上述对乐音产生的妨碍可以被有效地避免,因为激活乐音发生器部分的内部中断信号在每一帧内发生多次,并且通过只有当内部中断信号被实际产生时进行的调整乐音数据形成的操作,预定数目的乐音数据可以被完全地形成。
图5和6为措施1的两个典型的例子,其中,激活乐音发生器部分的内部中断信号以10ms的间隔在100ms的帧中被产生(因此,在每帧中产生10个内部中断信号),每当乐音发生器部分被中断信号驱动时,形成十分之一的预定数目的乐音数据。
在图5的方案中,由于内部中断信号的故障而未形成的乐音数据响应于下一个内部中断信号的产生被推迟地形成。即,在所示的方案中,由于在第二个中断或激活时间(对应于该图中的第10ms点)产生的内部中断信号的故障而未形成的所有的乐音数据,响应于在第三激活时间(对应于第20ms点)产生的内部中断信号,连同原来分配给该点(在图中由“2和3”表示)的乐音数据被形成。而且,由于在第六和第七激活时间(对应于第50和60ms点)产生的内部中断信号的故障而未形成的所有的乐音数据,响应于在第八激活时间(对应于第70ms点)产生的内部中断信号,连同原来分配给该点(在图中由“6-8”表示)的乐音数据被形成。图5的方案具有由于剩余未形成的乐音数据被一次地集体地推迟地形成而乐音产生很难被延迟的优点。
在图6的方案中,由于内部中断信号产生的故障而未形成的所有的乐音数据,以分散的方式,在在内部中断信号被实际产生的多个相继的激活时间被延迟地形成。即,由于在第二和第三激活时间(对应于第10和20ms点)产生的内部中断信号的故障而未形成的所有的乐音数据,响应于在第四和第五激活时间(对应于第30和40ms点)实际产生的内部中断信号,连同原来分配给该点(在图中由“2,3和4,5”表示)的乐音数据被稍后形成。但是,在最后或第10个激活时间(对应于第90ms点),由于在第七,第八和第九激活时间(对应于第60,70和80ms点)产生的内部中断信号的故障而未形成的所有的乐音数据被一起形成,以保证在该帧内,“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的形成。由于当剩余未形成的乐音数据达到较大量时,图6中的方案在多个适当的分布点形成剩余未形成的乐音数据,每个处理时间可被控制不至于过长,使得CPU可以被有效地使用。
同时在图6的方案中,由于内部中断信号产生的故障而未形成的所有的乐音数据,即,剩余未形成的乐音数据,以预定的量,以分散的方式,在一个或多个相继的激活时间被形成,这些剩余未形成的乐音数据可以在后面以可选的不同的量(例如,预定数目,预定数目的一倍半,预定数目的一半)在后面形成。
作为措施1的另一个例子,由于内部中断信号产生的故障而未形成的所有的乐音数据,可以在同一帧内的最后或第10激活时间的结束逐渐形成。
图16为措施1的另一个例子的图示,显示了响应于内部中断信号(激活指令)要被形成的乐音数据的量不总是图5和6所示的“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”(预定数目的十分之一可被称为一个处理单元)的十分之一的整倍数,但是有时可以是处理单元加上一个分数。
图16的方案的特征在于,在每个对应于实际产生内部中断信号的点,响应于每个内部中断信号(激活信号)要被形成的乐音数据的量被确定为到该点的剩余未形成的乐音数据的量的函数。图16显示了与内部中断信号的产生相关的乐音数据的这样确定的量。在图16中,当一个内部中断信号在一帧内被产生时,“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”十分之一在该帧在第一激活时间(对应于所示的方案中的第0ms)被形成。由于内部中断信号产生的故障,没有乐音数据被形成在第二和第三激活时间(对应于该图中的第10和20ms点),然后,当有另一个内部中断信号被产生时,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.6/10的特定量的乐音数据被形成在第四激活时间(对应于第30ms点)。因此,到第四激活时间的结束,乐音数据已经被形成达到对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的2.6/10的量,如图中由“2.6”所示。
然后,当有另一个内部中断信号被产生时,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.5/10的特定量的乐音数据被形成在第五激活时间(对应于第40ms点)。因此,到第五激活时间的结束,乐音数据已经被形成达到对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的4.1/10的量,如图中由“4.1”所示。此后,当有另一个内部中断信号被产生时,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.4/10的特定量的乐音数据被形成在第六激活时间(对应于第50ms点)。因此,到第六激活时间的结束,乐音数据已经被形成达到对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的5.5/10的量,如图中由“5.5”所示。
由于内部中断信号产生的故障,没有乐音数据被形成在第七和第八激活时间(对应于该图中的第60和70ms点),然后,当有另一个内部中断信号被产生时,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.7/10的特定量的乐音数据被形成在第九激活时间(对应于第80ms点)。因此,到第九激活时间的结束,乐音数据已经被推迟地形成达到对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的7.2/10的量,如图中由“7.2”所示。此后,当有另一个内部中断信号被产生时,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.6/10的特定量的乐音数据被形成在第十激活时间(对应于第90ms点)。因此,到第十激活时间的结束,乐音数据已经被形成,对该帧整体上,达到对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的8.8/10的量,如图中由“8.8”所示。
然后,在另一个内部中断信号产生的下一帧的第一激活时间(在该图中的第100ms点),在前一帧剩余未形成的对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.2/10的另一个量的乐音数据,伴随着在当前帧形成的对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的0.3/10(如图中的“0.3”所示)的特定量的乐音数据被形成。因为超过“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的乐音数据目前已经被形成,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的形成的数据的这些(即,10/10)被从形成的数据组中取出,并提供到输出设备,使得它们的再生被预定。结果,对应于要被在一个输出缓冲区中写入的预定数目的0.3/10的乐音数据被留下作为“要形成的乐音数据”。
此后,当有另一个内部中断信号被产生时,对应于“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.4/10的另一特定量的乐音数据被形成在当前帧的第二激活时间(对应于第110ms点)。因此,到第二激活时间的结束,乐音数据已经被形成达到对应于该帧的“要被在一个输出缓冲区中写入的预定数目的乐音数据的取样”的1.7/10的量,如图中由“1.7”所示。此后,响应于每个内部中断信号以上述的方式,乐音数据将被形成,直到总量达到预定的上限值SRmax。当要形成的乐音数据的确定的量大于上限值SRmax,要进行一定的控制,使得所述的量落入或低于值SRmax。
根据图16的方案,每当内部中断信号或激活指令由软件定时器产生时,在一定的限度内,要形成的乐音数据的量被确定为到该点剩余未形成的乐音数据的量的函数,使得过多的时间将不被花费在乐音产生处理上,然后,执行处理形成乐音数据达到确定的量。利用响应于每个内部中断信号执行的处理,剩余未形成的乐音数据将以累进的方式被形成。即,图16的方案在以下方面与图5和6的方案相同,即,乐音产生处理响应于每个内部中断信号被激活,并具有图5和图6的方案相同的优点;但是,图16的方案与图5和图6的方案的不同之处在于,剩余未形成的乐音数据是根据预定的函数累进地形成的,而不是在一次共同地形成,因此它具有独一无二的优点。换言之,CPU 3可以被防止长时间的专用于软件乐音发生器模块SSM的乐音产生处理,使得当CPU 3以并行方式执行乐音产生处理和其它处理,或者当有必要执行除通过软件乐音发生器模块SSM进行的乐音发生处理之外的低优先级处理时,图16的方案允许迅速地转换到其它处理,从而实现资源的有效利用。
例如,利用图5的方案,剩余未形成的乐音数据的形成可以以最高的优先级执行,但是在许多内部中断信号不能被连续地产生的事件中,当内部中断信号在此之后被实际产生时,较大数量的乐音数据必须要被形成。在这种情况下,CPU 3将占用大量的时间执行由软件乐音发生器模块SSM进行的乐音产生处理,因此趋于被乐音产生处理独占使用。这样,当有触发具有比软件乐音发生器模块SSM的乐音产生处理优先级低的处理的因素时,CPU 3便不能迅速地执行该低优先级的处理。如果每单位时间要形成的乐音数据变为如此之大,能够同时形成乐音数据的乐音产生通道极大地减少。但是,这些不便可以通过采用图16的方案而得到避免。由于这个原因,下面将详细描述一个采用图16的方案的实施例。
顺便来说,如果许多内部中断信号没能被产生留下大量的未形成的乐音数据,乐音数据形成操作在每个指定的乐音产生通道在内部中断信号被实际产生的一个或多个随后的激活时间不能完全形成。因此,在措施1中,需要通过适当地减少用于该目的的乐音产生通道的数目来取得乐音数据的形成。这种要减少的乐音产生通道的数目在图5的方案中最大;在图6的情况下,在剩余未形成乐音数据被在最后的激活时间逐步形成的其它情况,以及在图16的情形,要减少的乐音产生通道的数目小于图5的例子中的情形;但是,如果剩余未形成的乐音数据要被迅速地形成的话,图5的例子是更需要的。
<措施2>
根据该措施,提供了一个第一寄存器(第一乐音发生器寄存器),作为用于每个乐音产生通道的乐音发生器寄存器,用于存储当通道未被使用或可用时指定的用于控制当前的乐音产生处理的参数,以及一个第二寄存器(第二乐音发生器寄存器),用于存储当通道仍然被用于当前的乐音产生处理时指定的控制新的乐音产生处理的参数。作为用于乐音产生通道的乐音发生器寄存器,第一乐音发生器寄存器被选择,直到启动新的乐音产生处理的预定的定时,第二乐音发生器寄存器在启动新的乐音产生处理的定时之后也被选择。
利用措施2,既使当新的乐音产生处理被指定给仍然用于当前的乐音产生处理的乐音产生通道中的一个,新的乐音产生处理也可以在第二乐音发生器寄存器中立即完成或被准备,同时保证当前的乐音产生处理在使用第一乐音发生器寄存器的通道中的连续执行。这样,就可以防止在乐音数据形成中的任何时间延迟,该时间延迟另一方面将造成新的乐音产生处理的准备中的时间延迟。
根据该措施,多个输出缓冲区被提供在RAM 5中,从一些输出缓冲区的再生在乐音发生器部分的启动以前被预定在输出设备。既使当由于其它处理的影响乐音发生器部分被防止在一个预定激活时间及时地产生时,乐音也能被产生,并且在一个产生的乐音流中没有明显的间断,只要乐音发生器部分被激活并且从其它的输出缓冲器的再生在前面预定的从输出缓冲区的再生以前被预定完成即可。因而,该措施扩大了在乐音发生器部分的激活中的时间延迟的容许范围,它可以防止在产生的乐音流中的间断。
图7是措施3的示例性细节的图示,根据该图,从四个输出缓冲区的再生在乐音发生器部分开始以前被预定在输出设备。在帧F1的开始预定的输出缓冲区的数目为″3″,从四个输出缓冲区之一的再生在以前的帧中已经被完成在,但在帧F1期间,预定的输出缓冲区的数目被增加到“4”,因为“要被写入一个输出缓冲区中的乐音数据的预定数目”的形成已经完成并且从输出缓冲区的再生已经被预定。然后,在F1之后,预定的输出缓冲区的数目减少到“3”,从四个输出缓冲区之一的再生被完成,但在下一帧F2期间,预定的输出缓冲区的数目再被增加到″4″,因为要被写在下一个输出缓冲区的乐音数据的数目的完成已经完成,并且从该输出缓冲区的再生已经被预定。
在此之后,预定的输出缓冲区的数目在帧F4的末端被减少到″1″,因为由于乐音发生器部分的启动的时间延迟没有乐音数据被形成。然后,在帧F5中,乐音数据被从最后一个预定的输出缓冲区(即,在帧2期间预定的输出缓冲区)再生;在帧2期间再生预定的发生被用一个重的白箭头表示,而帧F5用半色调点网表示。在帧F5期间,预定的输出缓冲区的数目被增加到″2″,因为“要被写入一个输出缓冲区中的乐音数据的预定数目”的形成已经完成,并且从该输出缓冲区的再生已经预定。同样地,在帧5之后,预定的输出缓冲区的数目响应于再生预定的再生和发生的完成被增加和减少。
在上述的方式中,既使乐音发生器部分在一个预定激活时间由于其它处理的影响没有被产生,乐音也可以没有延迟地被适当地再生,只要乐音发生器部分被激活,并且从其它的输出缓冲区的再生在从四个输出缓冲区的先前的预定的再生被完成之前,被及时地预定即可。如果要被写入下一个输出缓冲区的乐音数据的形成在预定的输出缓冲区的数目为“4”时的特定帧期间被完成,该输出缓冲区的再生预定只是在该帧的再生完成之后进行,使得预定的输出缓冲区的数目不超过“4”。
应该被提供在RAM5中执行措施3的输出缓冲区包括用于使再生预定在乐音发生器部分的激活之前进行的那些,一个用于向其中写入由乐音发生器部分完全形成的乐音数据的缓冲区,当由乐音发生器部分实际形成的乐音数据的量超过“要被写入一个输出缓冲区中的预定数目的乐音数据”时使用的一个或多个空闲的输出缓冲区。输出缓冲区的总数在图7的例子中为”6″。但是,如果当实际形成的乐音的量超过“要被写入一个输出缓冲区中的预定数目的乐音数据”时乐音数据形成被强制停止,空闲输出缓冲区也可以省略。因此,在图7的例子中,总数为5个的输出缓冲区将是足够的。
<措施4>
在一个预定时间内,没有输出缓冲区被预定在输出设备中时,在该时间应该被完成的乐音数据形成操作被强制中断,对于原计划在该时间的形成的乐音数据开始一个新的算术形成操作。根据该措施,既使再生预定不能被及时进行并在产生的乐音中产生暂时的紊乱,稳定的乐音形成也能及时地被恢复,使得伴随噪声被极小化。
在图7的措施3的例子中,已经在其中存储了有乐音发生器部分形成的乐音数据的输出缓冲区的再生预定被显示在这样一个时间进行,在该时间,对于每个在输出设备中预先预定的输出缓冲区,再生已经被完成。但是,当乐音发生器部分的激活由于其它处理的影响而被极大地延迟的情况下,已经在其中存储了有乐音发生器部分形成的乐音数据的输出缓冲区的再生预定在从每个先前预定的输出缓冲区的再生已经被完成(即,预定的输出缓冲区的数目减少为“0”)的帧中未被及时地形成也是可能的。在这种情况下,通过将措施3和措施4结合进行,应当在预定的输出缓冲区变为“0”之前被完成的乐音数据的算术形成操作被强制中断,另一个输出缓冲区预定在输出设备中被作出,然后,对于原计划在该时间进行的乐音数据,新的算术形成操作开始。
下面参照图8到图25详细描述利用被设计用于进行上述措施的计算机软件的乐音发生器系统的操作的例子。首先,描述对应于图1的系统配置的实施例(即,利用伪MIDI驱动器的例子)。
图8是由图1的CPU3执行的软件乐音发生器模块SSM的主程序的流程图。首先,在步骤S1,执行初始化过程,包括清除储存在用于所有的乐音产生通道的乐音发生器寄存器中的数据(包括结合措施2所述的第一和第二乐音发生器寄存器),以及在图9的步骤S21储存在RAM5的工作区(包括前面结合措施3描述的输出缓冲区)的数据。然后,在图9的步骤S23,记录在硬盘设备10上的波形数据被装入RAM5。然后,输出设备在步骤S23被初始化,在步骤S24,相前面结合措施3所述的在乐音发生器部分的启动之前,在输出设备中,从已清除的输出缓冲区(这里,“四”个如图7的例子中的输出缓冲区)的再生被预定。然后,在步骤S25,输出设备被D/A转换器12激活,该转换器产生和通过一个再生取样时钟脉冲到DMA控制器11,而软件定时器被激活,产生一个用于激活乐音发生器部分的内部中断信号。例如,软件定时器被设计通过CPU 3参照一个硬件定时器产生一个内部中断信号。
如前面结合措施1所述,软件定时器可以在每帧中的多个定时或激活时间(假定内部中断信号可以在长度为100ms的每帧中产生10次,即,如图5,6和16中的例子所示,以10ms为间隔)产生内部中断信号(激活指令)。如前面所规定,内部中断信号不必由软件定时器在每个激活时间(即,每10ms)产生;即,当CPU 3正在进行由操作系统的处理或其它软件处理时,既使激活时间达到,内部中断信号(激活指令)也不能产生。所以,根据该实施例,一旦定时器2计时超过对应于一个激活时间(例如10ms)的时间长度,即设置一个定时器标志,一旦CPU 3对于软件乐音发生器的处理可用时,即对定时器标志的当前状态进行核查,使得内部中断信号根据所述标志的当前状态被产生。当该标志指示必要的乐音产生处理被剩下未执行时,内部中断信号(激活指令)被产生并且该标志被复位。因此,一旦在对应于一个激活时间(例如10ms)的预定的时间长度期间CPU3对于软件乐音发生器的处理可用时,一个内部中断信号被产生。但是,一旦在对应于一个激活时间(例如10ms)的预定的时间长度期间CPU 3对于软件乐音发生器的处理被确定为不可用时,CPU 3不核查所述的时间标志,并且随着预定时间的过去,没有内部中断信号产生并且下一个标志将被设置;即,没有内部中断信号响应于前面的标志被产生。
这样,如图5,6和16所示,内部中断信号(激活指令)不必在每个激活时间产生。此外,从前面所述中可以理解,在几个激活时间连续地产生的内部中断信号之间的间隔并不总是精确地固定为预定的时间长度(例如10ms),可以略为改变大于或小于10ms。因为,内部中断信号(激活指令)的确切产生定时取决于CPU 3的处理状态(即,取决于CPU 3核查定时器标志的时间)。
回过来参见图8,在初始化过程之后,在显示器9上呈现一个显示板(未示出),用于指示对应于处理的进行的各种信息,以及用于被用户或操作者使用利用鼠标7在步骤2输入各种控制数据。由于从几个输出缓冲区的再生在乐音发生器部分的激活之前通过初始化(图9)已经在输出缓冲区中预定,输出设备首先执行先前预定的四个输出缓冲区的再生,然后是由乐音发生器部分在后续预定的输出缓冲区的再生。因此,响应于提供的MIDI消息的乐音再生将被延迟一个对应于先前预定的输出缓冲区(图7的例子中的四帧)的数目的帧的总时间长度(图7的例子中的四帧)。当基于提供的MIDI消息的信息被呈现于显示器9的显示板上时,将显示定时推延一个对应于先前预定的输出缓冲区的数目的帧的总时间长度是所希望的。
在步骤S2之后的步骤S3,主程序检查下面的激活或触发因素触发因素1通过软件乐音发生器模块(例如,“SGM MIDI outAPI以下将称为软件乐音发生器API”)的API的MIDI消息的提供;即,从应用软件APS1或APS2(参见图1)提供MIDI消息;触发因素2通过软件定时器,产生激活乐音发生器部分的内部中断信号(尽管内部中断信号被设置为以预定的间隔,即,10ms产生,没有必要准确地在该预定的间隔产生);触发因素3来自输出设备的处理请求的检测;触发因素4另一个请求的检测,例如,在显示器9的显示板上的输入事件或者在键盘8上的命令输入事件(不包括主程序结束命令);以及触发因素5在键盘8上的主程序结束的输入事件的检测。
在步骤S3之后,在步骤S4进行确定,是否发生上述的触发因素。如果在步骤S4的回答是否定的,主程序返回到步骤S3,以便重复步骤S3和S4的操作直到任一个上述的触发因素发生。根据任一个触发因素的发生,在步骤S4产生一个肯定的判定,并且主程序进至步骤S5,在这里进一步进行判定哪一个触发因素已经产生。然后,根据检测到触发因素进行不同的操作。
下面参照图17和18描述给出触发因素1的其它软件的示例程序。
图17是图1所示的伪MIDI驱动器FMD的示例程序的流程图。该用于伪MIDI驱动器FMD程序当MIDI消息从应用软件APS1(图1)提供到操作系统(OS)第一接口IF1(即,“MIDI API”)时被触发。这里假定从应用软件APS1(图1)提供的MIDI消息包括指示通道号1-16的MIDI通道号。在步骤S220,进行将从第一接口IF1(即,“MIDI API”)提供的MIDI消息中的MIDI通道号转换成任一个通道号17-36的操作。这是因为根据该实施例的软件乐音发生器包括36个具有通道号1-36(32个部分)的36个通道,其中号1-16的通道被分配给专用于应用软件APS2(图1)的软件乐音发生器,而其余的号17-36的通道被分配给包括使用伪MIDI驱动器FMD的其它应用软件APS1。因此,如果软件乐音发生器仅仅与包括使用伪MIDI驱动器FMD的应用软件APS1结合使用的话,步骤S220的操作可以省略。
在下一个步骤S221,进行向软件乐音发生器API(软件乐音发生器模块SSM的API)传送已经通过第一接口IF1(即,“MIDI API”)接收的MIDI消息,并且在步骤S220进行通道号转换。通过检测MIDI消息传送,软件乐音发生器模块SSM判定上述的触发因素1发生。
图18是一个专用于软件乐音发生器的应用软件APS2(图1)中的MIDI事件处理程序的例子的流程图。该MIDI事件处理响应于在应用软件APS2的执行中MIDI事件的发生被触发。在步骤S230,进行一个用于向软件乐音发生器API输入关于该MIDI事件的MIDI消息。通过检测该MIDI消息输入,软件乐音发生器模块SSM判定上述触发因素1发生。
在上述方式中,触发因素1响应于从在OS层面上与软件乐音发生器结合的专用应用软件APS2和应用软件APS1中的任一个的MIDI消息的提供而产生。软件乐音发生器通过适当地应用36个通道根据所述两个应用软件执行乐音产生处理。
MIDI通道号的转换也可以以上述以外的其它方式进行。例如,号1-16的通道可被分配给包括如MIDI驱动器FMD的使用的应用软件APS1,其余达到17-36号通道分配给专用于软件乐音发生器的应用软件APS2。在这种情况下,在图17的步骤的S220所示的MIDI通道号转换利用图18的程序进行。
回过来参见图8,如果在步骤S5判定触发因素1(即,MIDI消息提供)发生,在步骤S6,MIDI处理被执行,并且在步骤S7,进行接收的消息数据,例如,指示对于哪一个MIDI通道MIDI消息被提供的数据的预定的显示。此后,主程序循环回到步骤S3,以便重复在步骤S3及其之后的上述操作。
在步骤S6的MIDI处理包括基于音通和音断事件数据的音通事件和音断事件处理。图10是显示音通事件过程的例子流程图。在第一步骤S31,指示音符号(note number)和音通事件的速度,与音通MIDI通道相关的表演部分的部号和音通事件的发生时间被储存到相应的寄存器NN,VEL,P和TM。在下一步骤S32,乐音产生通道之一被指定给基于音通事件的乐音产生,指定的通道号被存储到寄存器上。然后,在步骤S33,存储到寄存器P中的部号(part number)的音色的话音数据从RAM 5中被读出并然后转换成控制参数(包括一个音调指定频率数FN),用于根据存储在寄存器NN,VEL(图2〕中的音符号和速度控制乐音发生器部分。
然后,在步骤S34,控制参数,与寄存器TM中的音通事件和发生时间一起,被存入用于由寄存器指示的通道号的乐音产生通道的乐音发生器寄存器,以便预定对应于发生时间的用于定时的音通操作。
将来自寄存器TM的事件发生时间存入乐音发生器的原因如下。如前所述,在音通事件发生时间和乐音根据音通事件实际开始再生之间有一个时间差,大约为四帧,即,乐音再生的开始被延迟一个对应于大约四帧的时间。乐音产生处理(对应于后述的乐音发生器处理I)在该时间差的范围内的任意时间,产生相应的乐音数据是足够的;也就是说,在该范围内的处理时间延迟都是允许的。因此,如果不知道音通时间发生时间,在任何与发生时间不同的定时执行的乐音产生处理将不能产生相应的乐音数据。
在感兴趣的乐音产生通道正在被使用时,步骤S34将控制参数存入第二乐音发生器寄存器,而不是第一乐音发生器寄存器,如前面针对措施2所述。这样,在第二乐音发生器寄存器中立即可以准备新的乐音产生处理,同时保证使用第一乐音发生器寄存器的乐音产生通道中的当前乐音产生处理的连续执行。在控制参数被存入第二乐音发生器寄存器的事件中,在第一乐音发生器寄存器的预定的预定区,进行预定,用于在对应于存储在寄存器TM中的发生时间实现阻尼(乐音音量包络的迅速衰减)。
在步骤S34之后的步骤S35,设置一个指定给乐音产生的所有乐音产生通道的计算次序,使得乐音产生计算从指定给产生最后音通发生时间的乐音的通道开始,在指定给产生最早的音通发生时间的乐音通道结束,即,指定产生最后音通发生时间的乐音的通道具有比乐音产生计算中的其它通道高的优先级。在步骤S35之后,CPU 3返回到主程序。
图11是显示音断时间处理的例子的流程图。首先在步骤S34,指示音断事件的音符号,从与音断MIDI通道相关的表演部分中的选择的音色和音断事件的发生事件的数据被存入相应的寄存器NN,t和TM。然后,在步骤S42,对指定利用存储在寄存器t中的音色产生乐音的乐音产生通道检索,其通道号(CHNO.)被存入寄存器i。此后,在用于存储在寄存器i(CHi)中的号数的乐音产生通道的第一和第二乐音发生器寄存器之一的预定预定区域中,在步骤S43,对在对应于存储在寄存器TM中的发生时间的定时的音断操作进行预定。
回来参见图8的步骤S5,如果触发因素2(即,通过软件定时器,产生激活乐音发生器部分的内部中断信号)发生,CPU 3在步骤S8执行“乐音发生器处理I”并进至步骤S9,以便在显示器9的显示板上可见地呈现预定的条件,例如,CPU 3的运算能力,每个产生的乐音的音量电平,然后,CPU 3环回到步骤S3重复在步骤S3和其后的操作。
乐音发生器处理I形成上述乐音发生器部分的一部分。如图12所详示,首先在步骤S50,CPU 3,从当前事件GT,减去乐音产生已经最后完成的一个MIDI消息的输入事件ST,然后,设置减的结果值为延迟量OR(该量OR表示至当前的时间还没有被形成的乐音数据的量,尽管它们应当已经被形成,它是以相应的时间长度表示的)。下一步在步骤S51,要形成量SR(以时间长度表示的,在对应于乐音发生器部分的当前的激活形成的乐音数据的取样的目标数在当前激活要形成的乐音数据的取样的目标数)被确定为延迟量OR的函数。
图19是显示该函数特性曲线的例子的图示。在该例子中,当延迟量OR小于预定值时,要形成量SR被设为10ms(对应于“要被写入一个输出缓冲区的乐音数据的预定数”的1/10),但是在延迟量OR超过给定值之后,它随着量OR的增加而增加。然后,在要形成量达到保证让乐音产生处理不占用过多时间的范围内的预定上限值SRmax,量SR保持在上限值SRmax,与延迟量OR的进一步增加无关。该上限值SRmax,例如,可以是20ms或任何其它的值。
图20是显示该函数特性曲线的另一个例子。在该例子中,当延迟量OR小于预定值时,要形成量为10ms,但是,当延迟量OR超过给定值时,它随着量OR的增加而逐步增加。然后,在要形成量SR达到预定上限值SRmax(保证乐音产生处理不占用过多时间的范围内),量SR保持在该上限值SRmax,与延迟量OR的进一步增加无关。
注意,按上述方式设置的要形成量并不总是取10ms的整数倍的值,但可能取10ms的倍数加上某个分数的值。结果,由“乐音发生器处理I”的一次执行形成的乐音数据量不必正好为“要写入一个输出缓冲区的乐音数据的预定数目” (一个处理单元)的1/10的整倍数,但是可以是对应于10ms的倍数加上一个分数,如果前面的例子中所述的情况。图12的乐音发生器处理I以图16中所示的方式执行乐音产生处理。因此,既使内部中断信号在一帧中某些预定的点没有产生,“要写入一个输出缓冲区的乐音数据的预定数目”可以在内部中断信号实际产生的其它激活时间执行的操作,总体上有效地形成。这种方式可靠地避免了对乐音产生处理和其它处理所产生的妨碍。
在步骤S51之后的S52,用于在时间ST开始的要形成量SR的乐音形成区被设置在初始化过程中预定的那些以外的一个输出缓冲区中。下一步骤S53设置用于形成乐音的特定号数的乐音产生通道的号数可以确定为延迟量OR的函数。图21是显示该函数的特性曲线的例子的图示。根据该例子,如果延迟量OR低于预定值,则在图10的音通处理中指定的通道号CHmax被直接设置为用于形成乐音数据的乐音产生通道的号数。如果延迟量OR不低于预定值,则用于形成乐音数据的乐音产生通道号被设置为小于指定的通道CHmax的号数,使得可以减少乐音产生处理的一次处理所需的时间。
在下一步骤S54,在音通事件处理的步骤S35设置的计算次序中处于第一位的乐音产生通道的通道号被存入寄存器i,并且开始指针sp指向最后的输入时间ST。在此之后,在从开始指针sp到当前时间GT期间内的第一预定(例如,用于音调转折(pitch bend),音断或阻尼的预定)在步骤S55通过参考用于被寄存器1指定的乐音产生通道的第一乐音发生器寄存器中的预定区被检测。然后,在步骤S56进一步判定是否有任何预定被检测到。
如果在步骤S56的判定是肯定的,到达检测的预定的时间乐音产生处理被执行并且开始指针sp在步骤S57前进到该时间。如前所述,乐音产生处理从RAM5以按照存储在乐音发生寄存器中的控制参数的速率读出波形数据。读出的波形数据然后经受音色控制(滤除算术运算),音量控制(被乐音音量包络值乘),按照控制参数进行音调,音色,音量和效果的调制控制,以便生成乐音数据。最后生成的乐音数据被累积地加到目前已经存储在输出缓冲区中的数据。
在下一个步骤S58,检测的预定的内容被存入乐音发生器寄存器,以便执行预定的内容。例如,如果检测的预定是用于音断操作的,则音断事件数据被存入该乐音产生通道的第一乐音发生器寄存器,以便开始乐音音量包络的释放。如果检测的预定是用于阻尼的,则要用于乐音产生通道的乐音发生器寄存器在阻尼完成后,即,在乐音音量包络电平减小到低于一个预定的电平后,从第一改变到第二,如前面结合措施2时所述。相反,在要用于乐音产生通道的乐音发生器寄存器从第一改变到第二后,阻尼可以在第一乐音发生器寄存器上进行。如前面结合图10的步骤S34所述,在控制参数,音通事件数据和音通事件发生时间被存入第二乐音发生器寄存器的情况下,在第一乐音发生器寄存器的预定区,作出一个预定,用于在对应于存储在寄存器TM中的发生时间的特定定时的阻尼。因此,对应于存储在寄存器TM中的发生时间的定时来到,使用第二乐音发生器寄存器的乐音产生处理在阻尼之后将被开始。
在步骤S58之后,CPU 3环回到步骤S55,重复在步骤S55和其之后的操作。
如果在步骤S56的回答是否定的,没有预定被检测到,或者如果由于在步骤S57和S58的操作一旦判定变为否定,乐音产生处理,在由寄存器i指定的通道中,从开始指针sp到当前时间Gt的时间段,在步骤S59被执行。这完成了向用于在前面的步骤S52在输出缓冲区中设置量SR的乐音形成区的乐音数据的写入。
然后,在步骤S60,判定是否乐音产生处理对于在步骤S53设置的所有的乐音产生通道都已经完成。如果在步骤S60的回答是否定的,在计算次序中处于下一位的乐音产生通道的通道号被存入寄存器i,并且开始指针在步骤S61被设置指向输入时间。然后,CPU 3环回到步骤S55,重复在步骤S55和其之后的操作。如果,另一方面,在步骤S60的回答为肯定,或者一旦判定由于在步骤S55和其之后的操作的执行变为肯定,CPU 3终止乐音产生处理进至步骤S62。在上述的方式中,通过累加各个乐音产生通道的乐音数据(具有或不具有向其施加的效果)得到的乐音数据被累积地写入到输出缓冲区的,用于量SR的,乐音形成区。如果并CPU 3确定的的得到的通道号小于指定的通道号,被用于同时发出乐音的乐音产生通道的数目,通过略除用于在计算次序中后面位置的一个或多个乐音产生通道的乐音产生处理,被减少。
在下一步S63,加上要形成量SR的开始时间被设置为新的时间ST。该新时间ST被用作用于“乐音发生器处理I”的下一个执行的计算开始时间。此后,在步骤S64,用于对应于当前的音断时间的乐音产生通道的乐音音量电平的幅度以逐渐形式降低为0。在下一步S65,进行一个判定,判定是否“要写入一个输出缓冲区的乐音数据的预定数目”的形成已经完成。如果在步骤S65的判定是否定的,CPU 3返回到主程序。一旦判定在步骤S65变为肯定,该输出缓冲区与在后面将要描述的“乐音发生器处理II”中耦合的其它输出缓冲区去耦,并且在步骤S66,其再生在输出装置中被预定。此后,CPU 3返回到主程序。步骤S66的操作对应于,将由图1或2中的软件乐音发生器SSM形成的乐音数据,输出到OS的第二接口IF2(“WAVEout API”)。
作为步骤S50和S51的操作的改进,减法“GT-ST”的结果可以直接设置为量SR。在这种情况下,如果乐音产生部分在任一预定点因为内部中断信号的产生的失败而没有被激活,在该时刻的所有的剩余未形成的乐音数据在内部中断信号被实际产生的下一个点被形成,如措施1的图5中的例子。因此,既使内部中断信号(激活指令)在一帧中的某些点没有产生,通过在内部中断信号实际产生的另一个点执行操作,“要写入一个输出缓冲区的乐音数据的预定数目”可以在一帧内被有效地形成。这种方式可靠地避免了对乐音产生的所不希望的妨碍。如前面针对措施1中所述,剩余未形成的乐音数据可以象图6的例子那样在内部中断信号实际产生的若干个后续的时间以分散的方式形成,或者在同一帧中的最后激活时间结束时渐进地形成。
此外,作为在步骤S3的操作的改进,乐音产生通道的号数可以以下述方式确定。首先,计算在给定的乐音产生通道中用于形成乐音数据量SR所需的时间和当前可以得到的计算时间EJ(即,从内部中断信号下一次被产生时的计算结束点SJ中,减去内部中断信号被实际产生时的计算开始点KJ,获得的时间),以此为基础,即可确定多少个乐音产生通道可用于形成乐音数据量SR。如果由CPU 3确定的乐音产生通道数不小于在音通时间过程中指定的乐音产生通道数,指定的乐音产生通道数被直接设置为用于乐音数据形成的通道。另一方面,如果由CPU 3确定的可得到的乐音产生通道小于指定的乐音产生通道,可得到的乐音产生通道被设置为用于乐音数据形成的通道。即,如前面针对措施1时所述,“要写入一个输出缓冲区的乐音数据的预定数目”的形成通过减少用于乐音数据形成的通道数即可以得到保证。
回过来参见图8的步骤S5,如果触发因素3(即,来自输出设备的处理请求的检测)发生时,CPU 3在步骤S10执行“乐音发生器处理II”并进至步骤S11,以便在显示板上可见地呈现预定的状态。然后,CPU 3环回到步骤S3重复在步骤S3和其之后的操作。
乐音产生处理II也构成乐音产生部分的一部分并响应于通过激活输出设备而产生的请求被执行(即,由DMA控制器11进行的外部中断处理)。该乐音发生器处理II对应于图1或图2中关于乐音数据从软件乐音发生器SSM转移到第二接口IF2(“WAVE out API”)的处理。
图13为每当一个乐音数据的样品被送到D/A转换器12时,即,以D/A转换器12的再生取样频率,由DMA控制器11执行的外部中断处理的流程图。通过该外部中断处理,用于该帧的存储在输出缓冲区的乐音数据,每个再生取样周期一个样品地,从输出缓冲区读出并提供到D/A转换器12。这对应于图1或图2中的输出设备的处理。更具体地说,它对应于,输出设备通过第二接口IF2(“WAVE outAPI”)接收来自软件乐音发生器模块SSM的乐音数据并然后将它们输出到外部硬件或D/A转换器12。
在外部中断处理中的第一步S71,向D/A转换器12提供由指针pp指向的并从由缓冲区指针PB指向的一个预定的输出缓冲区中读出的乐音数据的样品。然后指针pp在步骤S72递增一,并在步骤S73判定是否在输出缓冲区中的所有乐音数据都被全部地提供到D/A转换器12,即,对于输出缓冲区是否必要的再生处理已经完成。如果对于该输出缓冲区再生处理没有被完成,过程返回到主程序。
另一方面,如果在步骤S73确定对于该输出缓冲区再生处理已经完成,则在步骤S74进一步确定是否有任何其它的输出缓冲区被预定用于再生。这对应于输出设备通过OS访问第二接口IF2(“WAVEout API”)的操作,即,涉及使用OS的操作。
既使由于乐音发生器部分的激活受一些其它处理的影响而被延迟,而没有其中写有由乐音发生器形成的乐音数据的其它输出缓冲区被预定,在步骤S74则产生一个肯定的判定,直到从所有已经预定的输出缓冲区中(在图9的初始化中或“乐音发生器处理I”中预定的那些)的再生被完成为止。利用在步骤S74的肯定的判定,DMA控制器11进至步骤S75,以便将缓冲区指针PB设置为指向其它输出缓冲区。如前面结合措施3时所述,这种方式可以扩大在激活乐音产生处理中的可容许的时间延迟范围,这可以避免产生的乐音流中的不希望的间断。在步骤S75之后的步骤S76,对乐音数据的再生已经完成的输出缓冲区(再生完成输出缓冲区)发出返回到“乐音发生器处理II”的请求。然后,过程返回到主程序。
如果乐音发生器部分的激活被显著地延迟,可能会发生这种情况,既使在特定的帧中从所有预定的输出缓冲区的再生已经完成,但没有已经写入由乐音发生器形成的乐音数据的输出缓冲区被预定。如果是这种情况,在步骤S74产生一个否定的判定,使得DMA控制器11分支到步骤S77,对D/A转换器12的输出信号静音以防止噪音。在下一步骤S78,向“乐音发生器处理II”发出一个复位请求,用于对乐音产生复位。然后,过程返回。
图14为根据从输出设备发出的返回请求(图13的步骤S76)执行的“乐音发生器处理II”的例子的流程图。CPU 3在步骤S81接收从输出设备返回的输出缓冲区,然后在步骤S82,它在清除返回的输出缓冲区之后将返回的输出缓冲区耦合到已经被乐音发生器部分8处理的其它输出缓冲区的端部。这种耦合造成了这些输出缓冲区的实际上的串行链接,将它们作为一个单一的较大的缓冲区对待。这消除了在RAM 5的物理相邻区提供这些输出缓冲区的必要性。在下一步S83,指示何时返回请求已经被发出的数据被生成,通过确定乐音发生器部分和输出设备之间的操作定时中的差的存在与否,来调整乐音发生器部分的操作。在步骤S83之后,CPU 3返回到主程序。
图15为根据从输出设备发出的复位请求(图13的步骤S78)执行的“乐音发生器处理II”的例子的流程图。首先,在步骤S91,CPU3从用于每个乐音产生通道的乐音发生器寄存器中和RAM 5中的输出缓冲区中清除所有的数据。然后,象图9的初始化过程的步骤S23到S25那样,在步骤S91清除的四个输出缓冲区被再次预定用于在步骤S93的再生,并且输出设备被激活,软件定时器在步骤S94开始。然后,CPU 3返回到主程序。
在基于复位请求的“乐音发生器处理II”中,当没有输出缓冲区在输出设备中被预定时,目前在乐音发生器部分中已经被执行的乐音产生强制中断并且从已清除的输出缓冲区的再生在输出设备中被再次预定,如前面结合措施4所述。然后,通过根据在之后提供的MIDI消息激活乐音发生器部分,新的乐音产生被执行。因此,既使再生预定没有被及时作出并且在乐音产生中引起暂时的失真,也可以迅速地恢复稳定的乐音产生操作并使不希望的噪音被最小化。
参见图8的步骤S5,如果确定触发因素4发生,CPU 3在步骤S12响应于检测的请求执行一个处理,例如响应于显示器9的显示板上的输入事件或键盘8上的命令输入事件的处理。然后,对应于该处理的信息在步骤S13被呈现在显示板上。此后,CPU 3环回到步骤S3重复在步骤S3和其之后的操作。
最后,如果触发因素5(即,在键盘8上的主程序结束命令的检测)已经发生,CPU 3在步骤S14执行一个预定的处理终止主程序,在步骤S15使显示板从显示器9上消失并然后返回到主程序。
在两个或多个上述的触发因素在步骤S5被判定同时发生的事件中,在步骤S5或其之后的操作,被例如以触发因素数的上升的次序(即,从触发因素1到触发因素5)执行(除了触发因素2和3具有相同的优先级外)。步骤S3到步骤S5以伪多任务处理的形式实际上进行多任务管理;但是,在效果上,当一定的处理根据任一触发因素的发生被执行时,该处理可能由于更高优先级的触发因素的发生而被中断,去执行另一个处理。例如,当响应于触发因素2的发生“乐音发生器处理I”被执行时,由于触发因素1的发生,MIDI处理可以通过中断而被执行。
例如,如果触发因素4或触发因素5发生,同时乐音发生器处理I响应于更高优先级的触发因素2的发生被执行,响应于触发因素4或5的激活必须等待,直到响应于触发因素2的乐音发生器处理I的一个执行的终止。但是,通过按照图19或20中所示的适当的函数,适当地确定作为延迟量OR的函数的每个激活的要形成量SR,响应于触发因素2乐音产生处理I的一个执行可以被防止占用太多的处理时间,使得可以显著地减少响应于低优先级的处理被干扰的可能性。
下面将描述对应于图2的系统配置的实施例。
在利用图2的系统配置的情况下,软件乐音发生器模块SSM可基于图8-15中描述的相同的程序,并且上面结合图16,19-21所述的方式可被应用。当然,上面结合图17和18所述的方式不适用该情况。此外,当图2的系统配置被采用的情况下,在图8的步骤S3核查的触发因素的方式不同于前述。即,在例中,下述触发因素的发生被核查触发因素1通过“MIDI API”的MIDI消息的提供(“即,从应用软件APS1的MIDI接口的提供(图2);触发因素2通过软件定时器的激活乐音发生器部分的内部中断信号的产生;触发因素3来自输出设备的处理请求的检测;触发因素4另一个请求的检测,例如,在显示器9的显示板上的输入事件或者在键盘8上的命令输入事件(不包括主程序结束命令);以及触发因素5在键盘8上的主程序结束的输入事件的检测。
触发因素2到触发因素5与图1的系统中的对应的触发因素相同,但触发因素1是不同的。
如前所述,当图2的系统配置被采用时,软件乐音发生器模块SSM被安装在操作系统中并被编程鉴别已经通过操作系统的第一接口IF1(“MIDI API”)提供的MIDI消息。因此,软件乐音发生器模块SSM,本身作为应用软件,在OS上作为一个驱动器进行操作并接收通过第一接口IF1(“MIDI API”)从其它应用软件APS1提供的MIDI消息。然后,按照上述方式,软件乐音发生器模块SSM通过响应于内部中断信号(激活指令)的产生而被激活的乐音产生处理根据接收的MIDI消息执行乐音数据形成操作。最后形成的波形数据,如前所述,通过OS的第二接口IF2(“MIDI out API”),被逐帧地输出。
下面将描述对应于图25的系统配置的本发明的实施例。
图26为图25的系统配置被采用的情况下由CPU 3执行的软件乐音发生器模块SSM的主程序的流程图。在主程序中,与图8的步骤S1和S2相似的步骤S301和302的操作被进行,然后,在步骤S303,下述触发因素被核查触发因素1通过第一接口IF1(“MIDI API”)从应用软件APS1(图25)的MIDI消息的提供(图25);触发因素2通过软件定时器的激活乐音发生器部分的内部中断信号的产生;触发因素3来自输出设备的处理请求的检测;触发因素4通过第三接口IF3从应用软件APS1的波形数据的接收(图25);触发因素5另一个请求的检测,例如,在显示器9的显示板上的输入事件或者在键盘8上的命令输入事件(不包括主程序结束命令);以及触发因素6在键盘8上的主程序结束的输入事件的检测。
上述的触发因素1,2,3,5,和5分别与在图2的系统配置被采用的例子中图8的步骤S3核查的触发因素1,2,3,4和5相同,触发因素4是在图25的系统配置被采用的情况下新添加的。
图27是给出触发因素4的应用软件APS1的示例性程序的流程图。该程序在多媒体数据再生的事件定时被激活或触发,并且首先在步骤S401判定该数据是波形数据产生事件,MIDI消息产生事件和其它信息的产生事件中的哪一种。
如果在步骤S401判定δ该事件是波形数据产生事件,程序进至步骤S402,以便向第三接口IF3输出产生的波形数据(图25)。这产生触发因素4。如果在步骤S401确定该事件为MIDI消息产生事件,则程序进至步骤S403,以便向第一接口IF1(“MIDI API”)输出产生的MIDI消息(图25)。如果在步骤S41确定事件为其它信息的产生事件(例如图象数据),程序进至步骤S404,以便响应于该种信息向由操作系统拥有的接口API输出该信息。
回来参见图26,除了基于WAVE处理的步骤S312的WAVE处理和步骤S313的显示被加入和步骤S310的乐音发生器处理II与图8的步骤S10的对应处理部分不同以外,在步骤S304和其之后的操作与在图8的步骤S4和其之后的操作基本相同。
在步骤S305判定有两个或多个上述的触发因素同时发生的情况下,触发因素1具有最高的优先级其它触发因素2-6的优先级按下面的顺序由低向高设置,触发因素4,触发因素2,触发因素5和触发因素6。
图28为基于触发因素4的发生的WAVE处理的例子的流程图。首先在该程序的第一步骤S501,一个时间段Δt,当音通事件通过图25的第一接口IF1(“MIDI API”)从应用软件APS1被接收的点响应于音通事件当由乐音发生器处理I形成的乐音数据被再生的点(在由乐音发生器处理I进行的乐音产生中的时间延迟在时间段Δt的限度内是可容许的,并且可容许的时间延迟的长度对应于大约四帧),被加到当前时间并被写入RAM 5中提供的预定的寄存器WT。
在下一步骤S502,通过图25的第三接口IF3从应用软件APS1提供的波形数据连同存储在寄存器WT中的时间数据被写入波形缓冲区WB。
然后,在步骤S503,确定是否预定的标志WPF(当波形数据被写入输出缓冲区时指示数值“1”,当波形数据未被写入输出缓冲区时指示数值“0”)为“1”。如果在步骤S503的回答为肯定的,程序返回而不执行任何其它操作,但是如果回答为否定的,程序进至步骤S504,以便进一步判定存储在寄存器WT中的时间是否落入当在目前处理的输出缓冲区中的乐音数据将要被再生时的时间范围内。
如果在步骤S504的回答为肯定的,程序进至步骤S505,在这里,存储在波形缓冲区WB中的波形数据被写入到当前的输出缓冲区的特定的区,它对应于存储在寄存器WT中的时间之后的再生时间。值得注意的是,响应于一次波形数据的接收通过WAVE处理要被写入波缓冲区WB的波形数据的量明显大于能够被写入一个输出缓冲区的数据量(例如,对应于大于5秒的再生时间的波形数据量),在波缓冲区WB中只有对应于波形的前导部分的数据被写入输出缓冲区。在步骤S505之后,程序进至步骤S506去改变标志WPF的值为“1”并且然后返回到主程序。另一方面,如果在步骤S504的判定为否定的,程序返回到主程序而不执行步骤S505和S506。
图29为响应于来自输出设备的返回请求执行的乐音发生器处理II的例子的流程图(图76的步骤S76)。在该处理中,类似于图14的步骤S81到S83的操作的步骤S601到S603的操作被首先进行,然后在步骤S604判定是否标志WPF为值“1”。
如果在步骤S604的回答为否定的(即,波形数据没有被写入输出缓冲区),程序进至步骤S605以便核查在步骤S601被接收的输出缓冲区被再生的时间范围。在下一步骤S606,判定由WAVE处理写入寄存器WT的时间是否落入该再生时间范围。如果在步骤S606的回答是否定的,处理过程进至步骤S607,以便来自该输出缓冲区的所有波形数据并然后返回到主程序。另一方面,如果在步骤S606的回答为肯定的,程序进至步骤S608,从来自输出缓冲区的波形数据中清除对应于被写入寄存器WT的时间的点之前存储在其中的那些数据。在下一步骤S609,存储在波缓冲区WB中的波形数据的前导部分数据被写入到对应于写入寄存器WT中的时间之后的再生时间范围的输出缓冲区的一个区域。此后,程序进至步骤S610将标志WPF的值改变为“1”然后返回到主程序。
如果在步骤S604的回答是肯定的(即,如果波形数据被写入输出缓冲区),处理进至步骤S611,以便向输出缓冲区写入存储在波缓冲区WB中波形数据中对应于接收的输出缓冲区的再生时间的那些数据(即,在目前已经被写入输出缓冲区的波形数据之后的那些数据)。在下一步骤S612,判定在输出缓冲区中的存储区域结束以前,波形数据写入是否已经被完成。如果判定为否定,处理返回到主程序,如果判定为肯定,处理进至步骤S613,以便确定基于下一个波形数据接收事件的波形数据是否已经被写入波缓冲区WB。
如果在步骤S613的回答是否定的,处理进至步骤S614,以便清除在步骤S615波形数据写入已经被完成的存储区域之后写入到输出缓冲区的波形数据。此后,处理进至步骤S615,改变标志WPF的值为“0”并然后返回到主程序。
如果在步骤S613的回答为否定的,处理进至步骤S616,以便确定响应于下一个波形数据的接收连同波形数据写入到波缓冲区WB中的时间是在输出缓冲区的再生时间段的后或之中或者再生时间段之前(即,该时间已经过去)。
如果在步骤S616判定该时间在输出缓冲区的再生时间段之后,处理进至步骤S614,以便执行步骤S614和S615的上述操作。
如果在步骤S616判定该时间处于输出缓冲区的再生时间段之内,处理进至步骤S617,以便清除输出缓冲区中位于其中在对应于写入寄存器WT的时间的存储区域之前的波形数据。在下一步骤S618,存储在波缓冲区WB中的波形数据的前导部分数据被写入对应于写入寄存器WT之后的再生时间段的输出缓冲区的一个区域。此后,处理返回到主程序。
此外,如果在步骤S616判定该时间处于输出缓冲区的再生时间段之前,处理进至步骤S619,以便响应于下一个波形数据接收事件,向在步骤S611波形数据写入已经被完成的区域之后的区域写入存储在波缓冲区WB中的波形数据的前导部分数据,然后处理返回到主程序。
通过这种乐音发生器处理II的执行,从应用软件APS1提供的波形数据,作为一个初始值,在由乐音发生器处理I形成的波形数据被写入输出缓冲区之前,被写入到在考虑到由乐音发生器处理I进行的波形形成处理中的可容许的时间延迟的情况下确定的输出缓冲区的一个区域中。然后在图12所示的同一乐音发生器处理I中,为每个乐音产生通道形成的波形数据被累积地加到初始值,使得波形数据被同步地混合在一起,不受乐音发生器处理I中的波形数据形成定时的影响。
图30为响应于来自输出设备的复位请求(图13的步骤S78)执行的“乐音发生器处理II”。在步骤S701,CPU 3清除来自乐音发生器寄存器,输出缓冲区和波缓冲区WB中的所有数据。即,响应于目前已经发生的每个波形数据接收事件由WAVE处理进行写入到波缓冲区WB中的波形数据和时间数据都被删除,以便利用新接收的波形数据开始再生。在随后的步骤S702和S704,与图15中的步骤S92-S94相同的操作被执行。然后,CPU 3返回到主程序。
用于将来自应用软件APS1的波形数据,作为一个初始值写入到输出缓冲区的一个区域的上述操作不必总是作为响应于来自输出设备的复位请求执行的乐音发生器处理II的一部分被执行,如图29所示,但是,可以在由乐音发生器处理I执行的波形数据的形成之前被执行。因此,作为另外一个例子,当在图12的乐音发生器处理I中在步骤S52乐音形成区已经为量SR设置时,该初始值写入可以进行。从应用软件APS1产生的波形数据具有不同的取样频率,并且在取样频率方面也可能与在乐音发生器处理I中形成的波形数据不同。作为将存储在波缓冲区WB中的波形数据写入到输出缓冲区送的上述操作的准备,所述的波形数据可以经受预定的内插或过取样操作,用于与取样频率匹配。
考虑由乐音发生器处理I进行的波形形成处理中的可容许的时间延迟,上述的再生定时调整也可以应用于图象数据和从应用软件APS1中的产生的其它信息。
因此,在图25中的系统配置中,从应用软件APS1输出到第三接口IF3的波形数据,以同步的方式,与由软件乐音发生器模块SSM响应于通过第一接口IF1(“MIDI API”)接收的音通事件数据而形成的波形数据相混合,并且这样混合的波形数据通过第二接口IF2被提供到操作系统。以这种方式,由软件乐音发生器模块SSM执行的波形数据形成中的任何时间延迟都可以被适当地调整,用于匹配波形数据再生的定时。
根据上述实施例的中采用的措施1,预定数目的乐音数据的样品对于每一帧,在一些后续的激活时间被延迟地形成。但是这不意味着预定数目的乐音数据的样品的形成需要在同一帧内被完成。特别是,这些实施例是设计用来预定多个已经有乐音数据被在其中写入的输出缓冲区,用于如图7所示的再生,并且因此,既使当预定数目的乐音数据的算术形成在一帧内没有被完成时也可能执行算术运算去在一个后续帧中形成剩余的乐音数据。例如,在图6所示的例子中,由于内部中断信号在一个或多个预定点的产生的失败,造成的剩余未形成的乐音数据在同一帧的最后一个激活时间的结束被形成,这些剩余未形成的乐音数据的算术形成可以被送到下一帧。例如,在一帧的四个激活时间剩余未形成的所有乐音数据不必在如图6的例子所示的同一帧的第十个激活时间的结束被形成;相反,只有在第七和第八激活时间剩余未形成的乐音数据可以在该帧的第十激活时间的结束被形成,并且在第九和第十激活时间剩余未形成其它乐音数据的算术形成操作可以被送到内部中断信号产生发生时的后续帧中的一个或多个激活时间。如图16所示,在一定帧中剩余未形成的乐音数据的形成可以被送到下一帧。
此外,根据上述实施例,在MIDI处理例如音通和音断处理中,用于控制乐音发生器部分的控制参数和指示音通事件的数据以及事件的发生时间被存储到分别为具体的乐音产生通道提供的乐音寄存器中。不是被存储到用于各个指定的乐音产生通道的乐音寄存器中,这些控制参数和数据可以连同相应的通道的通道数被按顺序地写入到单一存储区中。如果是这种情况,序列数据将根据提供的MIDI消息被首先形成,乐音数据将根据该序列数据被形成。
而且,根据上述的实施例,从输出设备返回的输出缓冲区通过乐音发生器处理II被耦合到已经由乐音发生器部分拥有的输出缓冲区的末端,使乐音发生器处理I形成乐音数据并存储到互相耦合的输出缓冲区,按顺序地从一个输出缓冲区到另一个输出缓冲区。另一方面,乐音数据对于每个输出缓冲区可以被分别地形成和存储。
另外,在上述的实施例中,已经描述了在乐音发生器的激活之前从四个输出缓冲区中产生一个用于再生的预定,用于再生而被预定的输出缓冲区的数目当然可以是除了“4”以外的其它任何值。而且,在RAM 5中提供的输出缓冲区的数目可以大于上述的在乐音发生器部分的激活之前用于再生而预定的输出缓冲区的数目。
此外,尽管上面已经描述了执行措施1,措施2,措施3和措施4的实施例,既使当这些措施中的每一个与其它措施独立地被执行时,也可以防止乐音产生被乐音发生器部分的激活中的延迟造成的妨碍,只有这些措施中的两个或三个的适当的组合可被执行。
上述的实施例被设置成在输出缓冲区中存储最大为400ms的波形数据,并且然后输出这些波形数据。当波形数据输出与再生的音乐段相关的其它信息(例如用于卡拉OK的背景图象或文字图象)的再生定时失去同步的话,这种设置会造成很大的不便,所以,最后采取适当的对策用于同步。例如,MIDI消息的输出定时可以在其它信息(例如用于卡拉OK的背景图象或文字图象)的输出定时之前,使得,如软件乐音发生器执行的乐音产生处理在其它处理稍稍前面被执行;这种变通使得所有的必要的信息最后被以同步的方式输出。
此外,在所描述的实施例中,本发明是应用于软件乐音发生器的,其中CPU被编程根据波形存储方法执行乐音产生处理,本发明也可以用于一个软件乐音发生器,其中CPU被编程根据其它适当的方法,例如FM合成的方法执行乐音产生处理。
此外,在描述的实施例中,本发明被应用于一种软件乐音发生器,其中个人计算机的CPU被编程执行乐音产生处理,本发明也可以用于这样一种软件乐音发生器,其中,在一种专用的乐音产生设备中的CPU被编程,用于执行乐音产生处理。此外,被用作为形成波形数据的基础的表演信息可以是除MIDI形式以外的任何其它形式。
本发明所取得的各种优异的效果总结如下。
根据本发明的第一方面,提供了一个伪驱动器(FMD),使得从其它应用软件(APS1)通过第一接口(MIDI API)提供的表演信息(例如,MIDI消息)可被伪驱动器接收,然后传送到软件乐音发生器(SSM)。因此,本身为应用软件的软件乐音发生器可以接收从其它应用软件提供的表演信息并然后根据接收的表演信息执行波形形成处理。结果,软件乐音发生器可以容易地与其它应用软件在OS的基础上结合在一起,并可以接收从其它应用软件通过第一接口提供的表演信息(例如,MIDI消息),从而形成对应于表演信息的声音波形数据。利用这种结构,可以增加本身为应用软件的软件乐音发生器的应用范围,而且在所需的产生表演信息(例如,MIDI消息)的应用软件例如,游戏软件,音序器软件,或多媒体软件被加到计算机的操作系统在其中简单使用的情况下,排除了的硬件乐音发生器的需求。结果,本发明降低了成本同时增加了软件乐音发生器的简单应用软件的应用范围。
此外,在另一个实施例中,乐音发生器系统可以进一步包括一个用于向第一接口(MIDI API)提供表演信息的应用软件(APS1)作为第一部分,以及一个应用软件(APS2)作为第二部分,用于向软件乐音发生器(SSM)发送表演信息。使得软件乐音发生器既可以根据从第一部分通过第一接口提供的表演信息执行声音波形数据形成处理,以及根据从第二部分直接提供的表演信息执行声音波形数据形成处理。利用该结构,可以在结合在软件乐音发生器中专用的软件(APS2)和通过与软件乐音发生器结合的其它软件(APS1)之间共享该软件乐音发生器。
根据本发明的第二方面,本身为应用软件的软件乐音发生器(SSM),作为一个驱动器被安装在操作系统中,并被编程接收通过第一接口(MIDI API)提供的表演信息。于是,从其它应用软件通过第一接口提供的表演信息(例如,MIDI消息)可以通过操作系统由软件乐音发生器接收。利用该结构,本身作为应用软件的软件乐音发生器可以接收从其它应用软件提供的表演信息并根据接收的表演信息执行声音波形数据形成处理,总的来说可以取得与第一方面相同的效果。
根据本发明的第三方面,乐音发生器系统的计算机包括一个CPU作为主控制部分,该主控制部分包括当实现软件乐音发生器的程序可以实际执行时用于在预定的时间周期内的多个预定点中的一个或多个点产生激活的指令的部分。因此,该主控制部分可以在当实现软件乐音发生器的程序可以以与另一软件适当的交换当前执行状态的方式被实际执行时的预定点的一个或多个点产生激活指令,使得实现软件乐音发生器的程序和其它程序可以在适当的分时控制下以并行方式被执行。此外,该乐音发生器系统还包括一个调整部分,用于调整声音波形数据形成处理,使得通过响应于在预定点的一个或多个点实际产生的激活的指令执行声音波形数据形成处理,使得预定数目的声音波形数据的样品被整体上形成。因此,既使当激活指令没有被在该周期内的一些预定点产生,也可以产生适当的控制,使得通过响应于在预定点的一个或多个点实际产生的激活的指令执行声音波形数据形成处理,可以在整体上形成预定数目的声音波形数据的取样。因此,避免了在乐音产生中的时间延迟。因此,既使当声音波形数据形成处理和基于其它软件的处理是由同一软件乐音发生器在不具有完全多任务功能的操作系统的控制下以并行方式执行时,本发明也可以取得在执行两种处理中不产生任何问题的优点。因此,既使当激活声音波形数据形成处理而产生的激活指令由于基于其它软件的处理而不希望地减少时,也可以进行适当的控制,使得预定数目的声音波形数据的样本在整体上完全地形成,从而不希望的不便,例如在乐音产生中的时间延迟被有效地防止。由于声音波形数据形成处理不是以固定的分时执行的,避免基于其它软件的处理被声音波形数据形成处理妨碍和延迟的问题是可行的。
在该例子中,调整部分可以设置得使得在对应于实际产生的激活指令的每个点,它确定响应于激活指令要被形成的声音波形数据的量,作为应当在该点形成的声音波形数据的“剩余未形成”量的函数。在这种情况下,软件乐音发生器被设计成响应于激活指令形成确定的量的声音波形数据。因此,通过适当地确定上述函数,每个激活指令要被形成的与应当已被形成的声音波形数据的剩余未形成量适当交替的声音波形数据的适当数目可以被确定。结果,可以进行可靠的适当控制减少其它处理由于主控制部分被软件乐音发生器每个激活指令的处理所占用而被妨碍的问题。
根据本发明的第四方面,操作系统,作为用于接收和传送形成的波形数据一个接口,包括,除了第二接口以外的一个第三接口,和声音程序,该声音程序作为一个驱动器安装在操作系统中,根据通过第一接口接收的表演信息形成声音波形数据,以同步的方式,混合通过第三接口接收的波形数据和形成的波形数据,并向第二接口输出最后混合的波形数据。通过以同步的方式混合根据表演信息形成的波形数据和通过第三接口接收的波形数据并然后将向第二接口输出混合的波形数据,在波形数据形成中的时间延迟可以被适当地调整,用于再生定时的适当的匹配。
此外,利用混合步骤可以将形成步骤形成的波形数据累加到通过第三接口接收的波形数据,使得波形数据可以以同步的方式混合在一起,而不受基于表演信息的波形数据形成的影响。结果,声音波形数据可以在适当的匹配定时被稳定地再生。
权利要求
1.一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的产生乐音波形的方法,所述方法包括第一步骤,根据以非周期方式提供的表演信息激活乐音产生处理;第二步骤,变化地指示通过所述第一步骤在每次激活时通过乐音产生处理产生特定数量的乐音波形样本;以及第三步骤,使所述通用算术处理单元执行由所述第一步骤激活的乐音产生处理,以产生所述第二步骤指示的所述特定数量的乐音波形样本。
2.如权利要求1所述的方法,其中每次在给定的时间段内产生内部中断信号时由所述第一步骤激活所述乐音产生处理,以及其中,确定由所述第二步骤指示的所述特定数量的乐音波形样本,使得在给定时间段内产生的乐音波形样本总数达到预定的数量。
3.如权利要求2所述的方法,其中,当通过第三步骤不能在给定时间段内产生所述特定数量的乐音样本时,用于产生乐音波形样本的乐音产生通道总数减少,由此保证产生所述特定数量的乐音波形样本。
4.如权利要求1所述的方法,进一步包括临时存储所述第三步骤产生乐音波形样本的第四步骤;读取所述第四步骤存储的乐音波形样本并连续地重放读取的乐音波形样本的第五步骤;第六步骤,当不能及时产生用于乐音波形样本重放的乐音波形样本时,重置现在执行的乐音波形产生处理,然后重新开始乐音波形产生处理,以产生在当前时间点之后的时间点的乐音波形样本。
5.一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的产生乐音波形的方法,所述方法包括第一步骤,根据以非周期方式提供的表演信息激活乐音产生处理;第二步骤,当所述第一步骤激活乐音处理时,确定在所述第一步骤当前激活的时间点可以产生的乐音波形样本的目标数量,并以特定数量跟随所述目标数量的方式响应当前激活,确定要产生的乐音波形样本的特定数量;以及第三步骤,使所述通用算术处理单元执行由所述第一步骤激活的乐音产生处理,以产生所述特定数量的乐音波形样本来响应当前激活。
6.一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的产生乐音波形的方法,所述方法包括第一步骤,根据以间歇的方式提供的表演信息激活乐音产生处理;第二步骤,响应所述第一步骤的激活,使所述通用算术处理单元执行乐音产生处理,由此在乐音产生处理每次激活时共同地产生多个乐音波形样本并在缓冲器中临时地存储所产生的乐音波形样本;以及第三步骤,通过从所述缓冲器连续地读取存储的乐音波形样本而重放乐音波形;第四步骤,当所述第二步骤不再能够及时产生用于第三步骤乐音波形样本重放的乐音波形样本时,在此时间点,重置现在由所述第二步骤执行的乐音波形产生处理,然后通过所述第二步骤使乐音波形产生处理重新开始,以产生用于在当前时间点之后重放的另外的乐音波形。
7.如权利要求6所述的方法,进一步包括第五步骤,当由所述第四步骤重置乐音产生处理时,基于所述第三步骤重放的乐音波形,临时地减小乐音信号的音量。
8.一种用于通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的乐音产生装置,所述装置包括第一装置,根据以非周期方式提供的表演信息激活乐音产生处理;第二装置,变化地指示通过所述第一装置在每次激活时通过乐音产生处理产生特定数量的乐音波形样本;以及第三装置,使所述通用算术处理单元执行由所述第一装置激活的乐音产生处理,以产生所述第二装置指示的所述特定数量的乐音波形样本。
9.如权利要求8所述的乐音产生装置,其中每次在给定的时间段内产生内部中断信号时由所述第一装置激活所述乐音产生处理,以及其中,确定由所述第二装置指示的所述特定数量的乐音波形样本,使得在给定时间段内产生的乐音波形样本总数达到预定的数量。
10.如权利要求9所述的乐音产生装置,其中,当通过第三装置不能在给定时间段内产生所述特定数量的乐音样本时,用于产生乐音波形样本的乐音产生通道总数减少,由此保证产生所述特定数量的乐音波形样本。
11.如权利要求8所述的乐音产生装置,进一步包括临时存储所述第三装置产生乐音波形样本的第四装置;读取所述第四装置存储的乐音波形样本并连续地重放读取的乐音波形样本的第五装置;第六装置,当不能及时产生用于乐音波形样本重放的乐音波形样本时,重置现在执行的乐音波形产生处理,然后重新开始乐音波形产生处理,以产生在当前时间点之后的时间点的乐音波形样本。
12.一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的乐音产生装置,所述装置包括第一装置,根据以非周期方式提供的表演信息激活乐音产生处理;第二装置,当所述第一装置激活乐音处理时,确定在所述第一装置当前激活的时间点可以产生的乐音波形样本的目标数量,并以特定数量跟随所述目标数量的方式响应当前激活,确定要产生的乐音波形样本的特定数量;以及第三装置,使所述通用算术处理单元执行由所述第一装置激活的乐音产生处理,以产生所述特定数量的乐音波形样本来响应当前激活。
13.一种通过利用通用算术处理单元基于所提供的表演信息执行乐音产生处理的乐音产生装置,所述装置包括第一装置,根据以间歇的方式提供的表演信息激活乐音产生处理;第二装置,响应所述第一装置的激活,使所述通用算术处理单元执行乐音产生处理,由此在乐音产生处理每次激活时共同地产生多个乐音波形样本并在缓冲器中临时地存储所产生的乐音波形样本;以及第三装置,通过从所述缓冲器连续地读取存储的乐音波形样本而重放乐音波形;第四装置,当所述第二装置不再能够及时产生用于第三装置乐音波形样本重放的乐音波形样本时,在此时间点,重置现在由所述第二装置执行的乐音波形产生处理,然后通过所述第二装置使乐音波形产生处理重新开始,以产生用于在当前时间点之后重放的另外的乐音波形。
14.如权利要求13所述的乐音产生装置,进一步包括第五装置,当由所述第四装置重置乐音产生处理时,基于所述第三装置重放的乐音波形,临时地减小乐音信号的音量。
15.一种根据表演信息产生乐音波形的乐音产生装置,所述装置包括存储单元,存储包括乐音产生程序的多个程序;处理器单元,能够以并行方式同时地执行存储在所述存储单元内的程序,所述处理器单元使多个内部中断信号以非周期的方式产生,并激活乐音产生程序以响应内部中断信号根据表演信息产生乐音波形,其中由所述处理器单元激活的所述乐音产生程序包括第一步骤,变化地指示在所述乐音产生程序每次激活时产生特定数量的乐音波形样本;以及第二步骤,在所述乐音产生程序每次激活时产生所述第一步骤变化地指示的所述特定数量的乐音波形样本。
16.如权利要求15所述的乐音产生装置,其中每次在给定的时间段内产生内部中断信号时由所述处理器单元激活所述乐音产生程序,以及其中,确定由所述第一步骤指示的所述特定数量的乐音波形样本,使得在给定时间段内产生的乐音波形样本总数达到预定的数量。
17.如权利要求16所述的乐音产生装置,其中,当通过第二步骤不能在给定时间段内产生所述特定数量的乐音样本时,用于产生乐音波形样本的乐音产生通道总数减少,由此保证产生所述特定数量的乐音波形样本。
18.如权利要求15所述的乐音产生装置,其中由所述处理器单元激活的所述乐音产生程序进一步包括临时存储所述第二步骤产生乐音波形样本的第三步骤;读取所述第三步骤存储的乐音波形样本并连续地重放读取的乐音波形样本的第四步骤;以及第五步骤,当不能及时产生用于乐音波形样本重放的乐音波形样本时,重置由所述处理器单元现在执行的乐音波形产生处理,然后通过所述处理器单元重新开始乐音波形产生处理,以产生在当前时间点之后的时间点的乐音波形样本。
19.一种根据表演信息产生乐音波形的乐音产生装置,所述装置包括存储单元,存储包括乐音产生程序的多个程序;处理器单元,能够以并行方式同时地执行存储在所述存储单元内的程序,所述处理器单元使多个内部中断信号以非周期的方式产生,并激活乐音产生程序以响应内部中断信号根据表演信息产生乐音波形,其中由所述处理器单元激活的所述乐音产生程序包括第一步骤,确定在所述乐音产生程序当前激活的时间点可以产生的乐音波形样本的目标数量;以及第二步骤,响应所述乐音产生程序的当前激活,产生特定数量的乐音波形样本,所述特定数量是以特定数量跟随所述目标数量的方式确定的。
20.一种根据表演信息产生乐音波形的乐音产生装置,所述装置包括存储单元,存储包括乐音产生程序的多个程序;处理器单元,能够以并行方式同时地执行存储在所述存储单元内的程序,所述处理器单元使多个内部中断信号以间歇的方式产生,并激活乐音产生程序以响应内部中断信号根据表演信息产生乐音波形,其中由所述处理器单元激活的所述乐音产生程序包括在所述乐音产生程序每次激活时共同地产生多个乐音波形样本的步骤;缓冲器单元,临时地存储响应所述乐音产生程序当前的激活而共同地产生的乐音波形样本;重放单元,通过从所述缓冲器单元连续读取存储的乐音波形样本,重放乐音波形;其中所述处理器单元执行控制程序,所述控制程序包括如下步骤当所述处理单元已经变得不再能够及时产生用于所述重放单元的乐音波形重放的乐音波形样本时,在此时间点,重置现在由所述处理器单元执行的乐音产生处理,然后通过所述处理器单元使乐音产生处理重新开始,以产生用于在当前时间点之后重放的另外的乐音波形。
21.如权利要求20所述的乐音产生装置,进一步包括乐音音量控制装置,用于当所述重置步骤重置乐音产生处理时,根据所述重放单元重放的乐音波形临时地减小乐音信号的音量。
全文摘要
本发明涉及利用计算机软件的乐音发生器系统,其中MIDI表演信息通过操作系统(OS)被接收,根据接收的MIDI表演信息,驱动一个应用级别的软件乐音发生器,使得软件乐音发生器在OS上具有较大范围的简单应用。为了这个目的,在OS中安装了一个伪驱动器,从应用软件输出的表演信息通过操作系统被伪驱动器接收,并然后送到应用级别的软件乐音发生器。作为另一个例子,软件乐音发生器作为一个驱动器被安装在操作系统中,使得从应用软件输出的信息可通过操作系统被软件乐音发生器接收。
文档编号G10H7/00GK1545084SQ20041004854
公开日2004年11月10日 申请日期1997年1月16日 优先权日1996年1月17日
发明者田邑元一 申请人:雅马哈株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1