乐音发生方法与设备的制作方法

文档序号:2823547阅读:183来源:国知局
专利名称:乐音发生方法与设备的制作方法
技术领域
本发明涉及一种乐音发生方法与设备,该方法和设备允许用一种具有一个计算装置的通用处理器来形成乐音。
本发明还涉及一种乐音发生方法,该方法通过在一个可编程计算单元上,例如一个CPU或DSP(数字信号处理器)上,执行一个乐音发生程序来形成一种乐音波形。
背景技术
众所周知,通常的乐音发生设备包括一个MIDI(乐器数字接口);一个演奏输入部分,用于从一个键盘或定序器接收演奏信息;一个乐音发生器部分,用于形成一种乐音波形;和一个微处理器或中央处理单元(CPU),用于根据输入演奏信息控制乐音发生器部分。CPU根据输入演奏信息,进行乐音发生器驱动器处理(演奏处理),例如把每个乐音分配给一个选择的通道(通道分配),和参数转换;并且把经转换的参数和一个乐音发生指令(音通信号)供给乐音发生器部分分配的通道。乐音发生器部分是由一个电子电路,例如一个LSI(大规模集成电路),来实现的,并且根据所提供的参数形成乐音波形。
然而,已知的乐音发生设备是专用于乐音发生用途的,在过去,必须无条件地采用这样一种专用乐音发生设备去发生乐音。
为了解决这个问题,已提出一种经改进的乐音发生设备,其中CPU执行一个专门的应用程序,以便根据该应用程序发生乐音。这种乐音发生设备能够用一个通用计算单元来实现,该单元不但可以通过执行乐音发生应用程序来完成乐音发生和其他功能,而且可以通过执行其他应用程序来完成。一种通用计算机,例如个人计算机,能够用作上述乐音发生设备的硬件,它执行一个用于乐音发生操作的乐音发生器程序。这样,可用通用计算机提供一种所谓的“软件乐音发生器”。
在在一个有计算单元(CPU)的通用设备上通过执行一个应用程序来发生乐音的这种情况下,通常在每个抽样周期(即,所用D/A转换器的转换时间),为各个乐音发生通道形成乐音波形采样。这样,当CPU对每个乐音发生通道执行所需的操作时,通过CPU把例如通道最后计算中所用的各种寄存器值读入CPU寄存器中,进行某些准备操作。此外,在终止通道的乐音发生处理以后,有必要把CPU寄存器值写入一个存储器中,以供下次执行处理之用。
然而,因为在每个乐音发生通道中逐个采样地进行乐音波形采样形成或计算过程,故常规的软件乐音发生器会出现一个问题,即大量CPU的计算时间花在准备操作上,而不是花在乐音发生过程(导致增加系统开销),从而不合乎需要地降低乐音发生器的计算效率和响应与乐音器形成速度。即,在每个抽样周期为各个乐音发生通道而进行乐音波形采样形成过程时,有必要让CPU使通道最后计算中所用的各种数据,从存储器回复到上述寄存器中;并且在终止波形形成计算以后,使寄存器的存储内容保存于存储器中,以供下次执行过程之用。这样,大量处理时间花在操作上,而不是花在初始波形形成计算上。
此外,在CPU既进行乐音发生器处理,又进行演奏处理的已知乐音发生方法中,“演奏处理”是创立控制信息的处理,控制信息用于控制根据输入演奏信息发生的乐音;“乐音发生器处理”是根据已创立的控制信息而形成波形数据的处理。例如,CPU通常在每个抽样周期根据一个中断信号执行乐音发生器处理的同时,执行演奏处理,例如检测压下低键。在乐音发生器处理中为一个采样完成波形数据形成以后,CPU回复到演奏处理。
演奏信息(MIDI事件信息)是通过演奏者的演奏操作或经一个定序器的事件复制而产生的,并且所产生的演奏信息是在演奏处理时处理的。即,每当产生上述演奏信息时,CPU除了执行正常的乐音发生器处理之外,还必须执行演奏处理;这样,非周期性地产生演奏信息会导致临时增加计算量。然而,根据未安排成适当地处理上述计算量临时增加的已知乐音发生方法,不论是否已输入演奏信息,都以一种周期性的方式优先执行乐音发生器处理,从而有时明显地推迟演奏处理。
通过提高演奏处理的优先权,可以避免推迟演奏处理,然而,在这样一种情况下,乐音发生器处理的操作会变成不稳定的,使同时生成乐音的数目临时减少,或使乐音波形断开。

发明内容
因此,本发明的一个目的是提供一种乐音发生方法和设备,能够减少软件乐音生成器系统中CPU的系统开销。
本发明的另一个目的是提供一种乐音发生方法,它能够防止临时增加处理量。
本发明又一个另外的目的提供一种乐音发生方法,它能够以稳定的方式执行波形形成计算,能够在波形再生部分要求提供波形数据时迅速地输出波形数据,还能够在一系列软件乐音发生器的操作期间提供输入波形数据,供音色控制过程之用。
本发明之一个另外的目的是甚至在处理量由于出现演奏信息而增加时,也容许稳定的乐音发生器处理。
本发明又一个另外的目的是把波形形成所需的算术运算量减至最少。
为了达到上述目的,一种根据本发明第一方面的乐音发生方法,包括第一步,发布发生指令,以发生多个指定的乐音;第二步,对从多个乐音发生通道中指定的各个乐音发生通道,分配指定的乐音,并且把用于指定乐音的控制数据写入各个指定的乐音发生通道的通道寄存器中,以便在其中存储;第三步,以预定的间隔发布计算开始指令;第四步,为了响应第三叔所发布的计算开始指令,就根据第三步所发布的计算开始指令,对指定的乐音发生通道,相继地进行乐音形成计算,以便根据存储于通道的通道寄存器中的控制数据,对每个指定的乐音发生通道,用算术方法形成多个采样的波形数据;第五步,对每个采样,把由第4步为指定乐音发生通道而形成的波形数据加以混合,以便形成混合的采样数据;和第六步,把多个采样中每个采样的混合采样数据,在每个抽样周期转换成模拟信号。在乐音形成计算中,第四步根据在波形数据形成以后从通道寄存器读出控制数据和把该控制数据写入通道寄存器,对每个指定的乐音发生通道,都进行多个采样的波形数据的形成。该乐音发生方法可以还包括一个第七步骤根据第一步骤为每个指定乐音发布的发生指令,发布一个中途计算开始指令,以便根据中途计算开始指令,第四步形成多个采样的波形数据,这相当于一个从最后形成波形的一个端点到发生指令由第一步发布时的时间点的部分。
根据本发明第一方面的乐音发生方法的另一实施例,包括第一步,把指定的乐音分配给各个从多个乐音发生通道中指定的乐音发生通道,并且把指定乐音的控制数据写入指定乐音发生通道的通道寄存器中,以在其中存储;第二步,以预定的间隔发布计算开始指令;第三步,应第二步发布的计算开始指令的要求,根据储存于通道的通道寄存器中的控制数据,对每个指定的乐音发生通道,用算术方法形成多个采样的波形数据;第四步,对多个采样中的每个采样,把由第三步为指定乐音发生通道形成的波形数据进行混合,以便对多个采样中每一个采样都形成混合采样数据;第五步,在每个抽样周期,都把多个采样的混合采样数据转换成一个模拟信号;和第六步,发布一项指令,以便利用第五步处理期间的空闲时间发生多个乐音。第三步只对发出一个乐音的通道进行波形数据的算术形成。该乐音发生方法还可以包括一个第七步骤,设置一个预定的极限周期;和一个第八步骤,确定对全部指字乐音发生通道的计算,是否会在预定的极限周期内完成。如果确定对全部指定乐音发生通道的计算不会在预定的极限周期内完成,则第八步下达指令乐音应当在任何乐音发生通道中失效或消失。
根据本发明第一方面的乐音发生方法的又一个另外的实施例,包括第一步,发布发生指令,以便发生多个指定的乐音;第二步,把这些指定的乐音分配到各个从多个乐音发生通道中指定的乐音发生通道内,并且把用于指定乐音的控制数据写入各个指定乐音发生通道的通道寄存器内,以便存入其中;第三步,根据要在指定乐音发生通道中发生的各个乐音的重要程度,确定各指定乐音发生通道的计算处理次序;第四步,以预定的间隔发布计算开始指令;第五步,应第四步发布的计算开始指令的要求,根据在指定乐音发生通道的通道寄存器中储存的控制数据,用算术方法形成用于多个采样的波形数据;第六步,对多个采样中的每个采样,都把为各通道形成的波形数据加以混合,以便形成用于多个采样的混合采样数据;和第七步,在每个抽样周期都把多个采样的混合采样数据转换成一个模拟信号。第五步根据第三步确定的计算处理次序,为形成用于指定乐音发生通道的波形数据而进行计算;并且当很可能由第五步为形成波形数据而作的计算不会在预定的时间内完成时,和由第七步转换的模拟信号被断开时,用于形成波形数据的计算,就在一个正在按计算处理顺序在一个通道上进行计算的时刻,被中断,以防止模拟信号被中断。
就根据第一方面的上述本发明而论,只是在形成多个波形采样以后才需要作一次每个通道的准备工作,从而可以大量减少系统开销。这可提高所发生乐音的质量,并且允许增加那些能够同时发生乐音的通道数目。此外,通过控制每次输入一个MIDI事件时以这样的方式要发生波形采样的计算或算术形成,就能够用一种分散的方式进行计算,并且有可能防止所发生乐音的数目由于初始乐音形成操作而不合需要地减少。此外,安排在演奏信息发生时间执行演奏信息输入操作,并且在输入操作期间,在空闲时间执行的主要步骤中包括以读入演奏信息为基础的乐音控制或波形形成;就能够把演奏信息发生时增加的处理量分散于空闲时间内,从而能够避免临时增加处理量。在正在进行乐音形成的通道(即,发音通道)中,把其音级(AEG波形)业已充分衰减的通道排斥于进一步计算之外,使之成为不发音的通道。
根据本发明第一方面的乐音发生方法的又一个另外的实施例,包括一个提供演奏能信息的提供步骤;一个用算术方法形成波形数据的主步骤;一个中断步骤,在由提供步骤提供演奏信息时,临时中断主步骤,以便进行一项用于接收所提供演奏信息的预定输入操作,并且在完成输入操作时,在主步骤中断恢复进行主步骤;和一个发生步骤,根据由主步骤形成的波形数据,在晚于一个由中断步骤用算术方法形成波形数据时刻的时刻,发生一个相应的乐音。主步骤包括一个演奏信息处理步骤,用于根据已经历输入操作的演奏信息来建立乐音控制数据,和一个乐音发生器处理步骤,用于根据乐音控制数据,用算术方法形成格式波形数据。当演奏信息由提供步骤提供时,为接收所提供的演奏信息而进行输入操作,并且在输入操作期间的空闲时间执行的主步骤中,包括以所接收演奏信息为基础的乐音控制或波形形成,因为如上安排,所以能够把在演奏信息发生时间增加的处理量分散于空闲时间内,从而能够有效地避免处理量的临时增加。
一种根据本发明第二方面在一个计算单元上实施的乐音发生方法,包括一个系统步骤,用于执行操作系统;一个波形形成步骤,用于根据通过在操作系统上执行的应用程序所提供的演奏信息,在每个特定的周期用算术方法形成用于多个采样的波形数据;一个输出步骤,用于在每个采样循环,输出由波形形成步骤用算术方法形成的波形数据的一个采样;和一个控制步骤,应输出步骤的请求,在所述周期内进行一项在系统步骤与波形形成步骤之间的任务转换。
根据本发明第二方面的乐音发生方法的另一实施例,包括一个输入步骤,用于输入演奏信息;一个波形形成步骤,用于根据在一个预定周期内输入的演奏信息,用算术方法形成相应于预定周期的波形数据;一个输出步骤,用于在每个抽样周期输出一个相应于预定周期的波形数据采样;一个波形提供步骤,用于给输出步骤提供由波形形成步骤形成的相应于预定周期的波形数据;和一个请求步骤,用于检测何时由输出步骤输出的波形数据已有进展,以便请求从波形数据提供步骤再提供波形数据。波形数据提供步骤是应请求步骤的请求而执行的,且波形形成步骤是在波形数据提供步骤以后执行的。
根据本发明第二方面的乐音发生方法的又一个另外的实施例,包括一个输入步骤,用于输入演奏信息,一个波形形成步骤,用于根据在一个预定的周期内输入的演奏信息,用算术方法形成相应于该预定周期的波形数据;一个波形合成步骤,用于输入相庆于预定周期的外部波形数据,并且把外部波形数据同由波形形成步骤用算术方法形成的波形数据结合起来,以便形成用于预定周期的合成波形数据;和一个输出步骤,用于在每个抽样周期都输出一个合成波形数据的采样。
根据本发明第二方面的乐音发生方法的又一个另外的实施例,包括一个输入步骤,用于输入演奏信息;一个波形形成步骤,用于根据由输入步骤输入的演奏信息,在多个阶段内进行计算,以便用算术方法形成波形数据;一个用于输入外部波形数据的步骤;和一个把所输入的外部波形数据插入诸计算阶段的一个中的步骤。
作为一个在通用操作系统上运行的应用程序来提供常规软件乐音发生器,象MIDI定序器和游戏软件之类的软件也是一种在通用操作系统上运行的应用程序。在一个不完整(非优先)的多任务操作系统的控制下,不执行新的任务,除非一项运行任务恢复对该操作系统的控制。这样,有时可以预定的时间间隔执行软件乐音发生器,结果,在每个抽样周期乐音波形采样不能够稳定地输出到一个D/A转换器中。与此不同,使根据本发明第二方面的软件乐音发生器,在多任务管理程序的控制下,而不是在应用程序的控制下,进行操作。这就允许用实时处理所需的上述时间间隔可靠地执行软件乐音发生器,还允许通用操作系统进行操作,以便在软件乐音发生器不进行任何处理的周期在其上执行应用程序的处理。
另外,在像根据本发明第一方面的发生器之类的软件乐音发生器中,其中为了提高计算效率,在一个波形缓冲器上用算术方法集体地形成多个采样的波形数据;当波形再生部分(DAC)提出一个波形信息的请求时,有必要迅速地在一个预定的时间范围内交付波形数据。然而,如果例如在那时发生一些事件,则不能迅速地交付波形,稳定的乐音发生也困难。这一问题可通过根据本发明第二方面的改进来克服。此外,许多常规通用计算机,例如个人计算机,都装有A/D转换器,输入声音用的数字波形输入插件,但它们不能根据这样输入的波形数据执行一个软件乐音发生器的乐音控制处理功能。这一问题也能够通过根据第二方面的改进来克服。
根据本发明经二方面的乐音发生方法的又一个另外的实施例,包括一个提供步骤,用于提供演奏信息;一个形成步骤,用于根据控制信息用算术方法形成波形数据;一个中断步骤,用于在由提供步骤提供演奏信息时,临时中断形成步骤,以便执行演奏信息的处理,并且在完成演奏信息的处理时,在形成步骤中断处继续执行形成步骤;和一个乐音发生步骤,用于根据由形成步骤形成的波形数据,在迟于由形成步骤形成波形数据的时刻,发生一个相应的乐音。
一种根据本发明第二方面的乐音发生设备,包括一个存储器,用于存储一个乐音发生器处理程序和一个演奏处理程度;一个供应部分,用于供应演奏信息;一个寄存器,用于存储控制信息;一个计算部分,用于执行乐音发生器处理程序和演奏处理程序。计算部分通常执行乐音发生器处理程序,以便根据控制信息形成波形数据。当供应部分供应演奏信息时,计算部分临时中断乐音发生器处理程序的执行,以便执行演奏处理程序,从而创立相应于所供应演奏信息的控制信息,并且把所创立的控制信息存入寄存器中;还在完成演奏处理程序时,在乐音发生器处理程序的中断处,继续执行乐音发生器处理程序。该设备还包括一个乐音输出部分,用于根据由乐音发生器处理程序形成的波形数据,在迟于由计算部分形成波形数据的时刻,发生一个相应的乐音。
根据本发明第二方面的乐音发生方法的又一个另外的实施例,包括一个供应步骤,用于供应演奏信息;一个形成步骤,用于用算术方法形成波形数据;一个中断步骤,用于在由供应步骤供应演奏信息时,临时中断形成步骤,以便执行演奏信息的处理,然后在完成演奏信息的处理时,在形成步骤中断处,继续执行形成步骤;和一个乐音发生步骤,用于根据由形成步骤形成的波形数据,在迟于由形成步骤形成波形数据的时刻,发生一个相应的乐音。形成步骤根据由中断步骤处理的演奏信息,用算术方法形成波形数据。
根据本发明第二方面的乐音发生方法的又一个另外的实施例,包括一个系统步骤,用于执行一个预定的操作系统;一个波形形成步骤,用于根据一个来自在预定操作系统上执行的应用程序的指令,在每个预定的周期,对预定数目的采样用算术方法形成波形数据;一个输出步骤,用于在每个抽样周期,都输出一个由波形形成步骤用算术方法形成的波形数据的采样,和一个控制步骤,用于应输出步骤的请求,在预定的周期内,进行一个在系统步骤与波形形成步骤之间的任务转换。波形形成步骤用一种间歇方式,进行乐音参数计算操作。
根据本发明第二方面的乐音发生方法的又一个另外的实施例,包括一个输入步骤,用于输入演奏信息;一个波形形成步骤,用于根据在一个预定周期内输入的演奏信息,用算术方法形成相应于预定周期的波形数据;一个输出步骤,用于在每个抽样周期输出一个相应于预定周期的波形数据的采样,一个波形数据交付步骤,用于给输出步骤提供波形形成步骤形成的相应于预定周期的波形数据;和一个请求步骤,用于检测何时在由输出步骤输出波形数据方面已有进展,以便请求由波形数据交付步骤另外提供波形数据。波形形成步骤以一种间歇的方式进行乐音参数计算操作,波形数据交付步骤是应请求步骤的请求来执行的,而波形形成步骤是在交付步骤以后执行的。
根据本发明第二方面的乐音发生方法的又一个另外的实施例,包括一个输入步骤,用于输入演奏信息;一个波形形成步骤,用于根据在一个预定周期内输入的演奏信息,用算术方法形成相应于该预定周期的波形数据;一个波形合成步骤,用于输入相应于预定周期的外部波形数据,并且把该外部波形数据同由波形形成步骤用算术方法形成的波形数据结合起来,以便形成用于预定周期的合成波形数据;一个波形处理步骤,用于对预定周期的合成波形数据进行信号处理;和一个输出步骤,用于在每个抽样周期输出合成波形数据的一个采样。波形形成步骤以一种间歇的方式进行一个乐音参数计算操作。
根据如上所述的本发明第二方面,演奏处理最好依据演奏信息的发生情况来执行,乐音发生器处理是在演奏处理期间在空闲时间里相继地执行的。就这种安排而论,甚至在由于响应演奏信息的发生而增加处理量,从而不能以充分的程度执行乐音发生器处理之处,也能够在某些其他时间里弥补其不足额;因此,能够以一种稳定化的方式执行乐音发生器处理。此外,因为有安排当提供步骤提供演奏信息时,就进行输入操作,以接收所提供的演奏信息,并且在输入操作期间的空闲时间里执行的主步骤中,包括以所接收的演奏信息为基础的乐音控制或波形形成;所以在演奏信息发生时间增加的处理量能够分散于空闲时间里,从而能够有效地避免处理量的临时增加。


为了更好地了解本发明的上述特点和其他特点,下面参照附图,详述本发明的一些最佳实施例,在附图中图1是一个方块图,说明根据本发明第一方面的一个乐音发生设备实施例的硬件结构;图2是一个说明图1所示RAM的一个音色数据区的图;
图3是一个说明图1的RAM的一个输入缓冲区的图;图4是一个说明图1的RAM的一个通道寄存区的图;图5是一个说明图1的RAM的一个输出缓冲区的图;图6是一个由图1的CPU执行的主程序的流程图;图7是一个根据本发明的乐音发生处理中一个MIDI接收中断过程的流程图;图8是一个说明图6主程序中由CPU执行的一个MIDI过程的细节的流程图;图9A是一个当所接收数据是音通事件数据时,在图8的MIDI过程中由CPU执行的音通过程的流程图;图9B是一个当所接收数据是音断事件数据时,在图8的MIDI过程中由CPU执行的音断过程的流程图;图10是一个在图8的主程序中的CPU执行的乐音发生器过程的流程图;图11是一个在图9A、9B和10的过程中执行的波形形成计算过程的流程图;图12是一个说明本发明第二个实施例的时间图;图13是一个根据本发明第二个实施例说明软件模块配置的方块图;图14是一个说明在实施例中是怎样执行一项特定任务的图;图15是一个说明图13的乐音发生器任务中全部处理的等效电路图;图16是一个说明各种发生乐音的操作的处理时间的图;图17是一个乐音发生器任务的流程图;和图18A与18B是波形形成计算过程的流程图;图19是一个说明处理设备的典型硬件配置的方块图,在该设备上实现本发明的乐音发生方法;图20是一个说明波形形成计算过程另一实施例的流程图;图21是一个说明波形形成计算过程的又一个另外的实施例的流程图;图22是一个说明包络波形计算操作的流程图;图23是一个说明低频信号的包络波形计算操作的流程图;图24是一个说明音量值与移动(panning)值内插操作的流程图;和图25A和25B是说明包络和低频信号波形实例的图。
具体实施例方式
首先,参照附图1至12,描述根据本发明第一方面的一个实施例;在附图中,图1是一个说明一个能够执行本发明乐音发生方法的乐音发生设备实施例的硬件结构的方块图。
在图1中,乐音发生设备包括一个微处理机(CPU)1,它执行应用程序等,以便在乐音波形采样等形成中进行各种控制;一个只读存储器(ROM),其中已存有预置音色数据等;一个随机存取存储器(RAM),其中包括一个供CPU1使用的工作存储区,一个音色数据区,一个输入缓冲区,一个通道寄存器区,一个输出缓冲区等;一个计时器4,用于计算时间和指令CPU计时器中断计时;一个MIDI接口,通过该接口把MIDI事件数据输入和输出该设备;一个键盘6,类似于个人计算机键盘,包括键入英文和日文字母、数字和符号用的键。
该乐音发生设备还包括一个显示器(监视器)7,它能使用户与设备对话;一个硬盘8,其中装有一个应用程序,例如用于发生乐音的程序,并且其中存有乐音波形数据,用于形成乐音波形采样;一个再生部分(DMA直接存储器存取),它在不干预CPU1的情况下,读出存于CPU1指定的RAM3的一个区中的乐音波形数据,并且把读出的数据以预定的抽样频率(例如48KHz)供给一个D/A转换器(DAC)10;和一个音响系统11,用于从D/A转换器10可听地再生或发出模拟乐音信号。
上述部件都类似于个人计算机或工作站的部件,都能够用来实现本发明的乐音发生方法。
在RAM3内的各种数据存储区中,其音色数据区示于图2中,输入缓冲区示于图3中,通道寄存区示于图4中,和输出缓冲区示于图5中。
在图2的音色数据区中,“PD1,PD2...,PD16”表示16种音色数据,每种音色数据包括指定给定音调范围的波形的数据(音调范围波形指定数据);控制LFO(低频振荡器)的数据,用于给出颤音效果或类似效果;控制滤波器包迹发生的数据,用于提供一种受控的音色滤波特性;用于控制一种振幅-控制包迹发生的数据;按键控制数据,用于根据检出的键-按速度来改变乐音或类似音的上升速度;和其他数据。这些在图2的音色数据区存储的数据都是随着一个乐音发生指令而提供的原始数据,这些数据都将按照按键数据、音调数据等进行处理,以便建立由一个乐音发生器使用的乐音形成数据。
此外,在图2中的“WD1,WD2,...,WDn”表示波形数据,其中任何一个数据都是根据输入音调数据,由音色数据PD1,PD2,...PD16之一的音调范围波形指定数据来指定的。
MIDI事件数据ID1,ID2,ID3,...,表示各种事件,例如音通和音断事件,并且通过MIDI接口5而接收;它们都被顺序写入图3所示的输入缓冲器中。通过读出这些MIDI事件数据ID1,ID2,ID3,...,可在乐音发生设备中进行一个事件过程。MIDI事件数据ID1,ID2,ID3,...的每个都包括指示MIDI事件内容的和事件数据发生时间的(数据发生时间或事件发生时间)数据。在接收MIDI事件数据时,通过读由计时器4计数的当前时间,能够确定数据发生时间。
图4所示的区用作一个通道(CH)寄存器,以存储控制各个单乐音形成的数据,并且在所说明的实例中,通道寄存区可提供总计32个通道的存储位置。每个通道存储位置都存储一个音符号,波形指定数据,LFO控制数据,滤波器包迹指定数据(FEG控制数据),振幅包迹控制数据(AEG控制数据),音通数据和其他数据,以及一个CPU在执行程序期间使用的工作区。在图4的通道寄存区中的波形指定数据、LFO控制数据、FEG控制数据和AEG控制数据都是通过处理图2的各个原始数据而得出的乐音形成数据。
图5所示的区是用于多个输出缓冲器的,它们依次用作乐音波形形成输出缓冲器X。每当用于各个乐音发生通道SD1、SD2、SD3...的乐音波形采样数据,按照稍后所述的算术操作而形成时,这些数据就逐个通道地被累积,并且所得的累积数据被存入输出缓冲器中。两个或多个这类输出缓冲器被指定为乐音波形形成输出缓冲器X,并且用于波形计算操作。最简单的形式是,可用两个输出缓冲器X提供一种双缓冲器结构,以便在存储于缓冲器X的一个中的数据正在由再生部分(DMA)9再生的同时,通过波形形成操作得出的新的波形采样数据,可存入另一个缓冲器X。
输出缓冲器可被设置成具有任一任选尺寸,例如100、500、1K或5K字长。如果输出缓冲器被设置成大尺寸,就会在乐音形成时发生明显的时间延迟;如果输出缓冲器被设置成小尺寸,就会大大减小时间余量,从而在临时增加要作的算术运算量时,导致不良的响应。这样,对于不需要实时处理能力的定序器性能或类似性能来说,输出缓冲器的尺寸可以作得大一些,因为乐音形成时的时间延迟能够用提前演奏定时的方法来补偿。另一方面,对于需要实时处理能力的键盘演奏或类似演奏来说,最好是,输出缓冲器的尺寸被设置成100至200字长,以便防止在乐音形成时的时间延迟。在抽样频率为40至50KHz的情况下,上面提出的数据尺寸是最好的。然而,对于更低的抽样频率,输出缓冲器的尺寸必须更小,才能避免乐音形成时的时间延迟。
其次,下面将描述本发明的乐音发生方法的第一至第五个实施例,其中每个实施例都能够用图1所示的乐音发生设备来实现。
根据第一实施例的乐音发生方法之特征在于通过CPU1执行一个乐音形成应用程序,在乐音形成过程中对每个通道都集体地形成多个(例如100个)乐音波形采样。尤其是,在乐音形成过程中,根据D/A转换器10的100个抽样周期,对每个乐音发生通道,集体地形成乐音波形采样。
这样,在每个预定的计算点,对全部通道进行乐音形成过程。在此,所形成的乐音波形采样数是“100”,顺序地累积这些采样,作为D/A转换器10的100个抽样周期的通道特有累积值,并且存入上述输出缓冲器中。在对全部的乐音发生通道完成采样累积以后,存储于输出缓冲器中的乐音波形采样,按照一个抽样周期一个采样的方式,由再生部分(DMA)9读出,并且通过D/A转换器10供给音响系统11,以便可听地再生。本实施例中的预定计算点是受控的,以便以下述间隔出现当依次用输出缓冲器执行乐音形成过程时,能够读出全部的乐音波形采样,并且在没有中途停顿的情况下把它们完全再生。
根据乐音发生方法的第一个实施例,对每个通道进行准备性操作,但对于要集体形成的多个乐音波形采样仅需一次,从而允许减少算术运算或花在准备操作上的计算时间对整个计算时间的比例,故大大减少系统开销操作。这就能够大大提高所形成乐音波形采样的质量,并增加可同时发生的乐音数目。
在预定计算点之间的每个时间区段可以分成“n”个相等的部分,以便在相应于“n”个部分的间隔进行波形采样形成计算;并且再生段(DMA)9可以,对在第“n”个部分完成计算的各组乐音波形采样,进行读出。
下面描述根据第二个实施例的乐音发生方法,其中,按照类似于第一实施例的方式,通过CPU1执行乐音形成应用程序,在乐音发生过程中对每个通道,集体地形成多个乐音波形采样;并且还要在每当通过MIDI接口5接收输入数据(在这种情况下是MIDI事件数据)时,都对采样进行波形算术运算或计算,直至时间点为止。在预定的计算点,只对预定的多个乐音波形采样(即,相应于各个输出缓冲器尺寸的采样)中的未计算过的采样,进行乐音波形采样计算。
在乐音形成过程中,波形采样计算是对当前正在发声的各个乐音发生通道进行的;在这种情况下,如果各个通道出现一种涉及随输入数据(音调偏移或音量变化)而变的特殊形式乐音发生的键通或键断事件,则所需的算术运算多于其他通道的算术运算;在其他通道中,由于不随输入数据而变化,故仍在继续进行乐音发生。在这种情况下,由于计算点设置成发生于固定的间隔,故操作周期中的大量时间,被涉及乐音发生的形式变化的通道所占据,这就最终减少乐音发生通道的数目,对这些通道来说,所需的算术运算是能够在有限时间内完成的。尤其是,对于要开始进行乐音发生的各个通道来说,都需要许多初始化的操作,例如地址计数器和包迹发生器的初始化以及一种“F”数的发生等,这就占用了长的操作时间。
图12是一个说明第二个实施例的计时图,其中按照上述双缓冲器结构装有第一和第二输出缓冲器A和B,并且示于(e)部的图中。从缓冲器A和B再生所需的时间,分别用TA和TB示出,并且在本实施例中TA等于TB。
首先,在如图12的(a)部所示的分配给第一输出缓冲器A的从点t0到t1的计算时间范围内,由一个MIDI接收部分在点ta接收两个MIDI事件之后,一个乐音发生器(T.G.)驱动部分进行如(b)部所示的处理,并且一个乐音发生器(T.G.)部分对相应于从t0点到ta点的期间接收的输入的乐音波形采样A1进行计算。
MIDI接收部分包括用来接收各个输入MIDI事件的MIDI接口5,MIDI接收部分还把MIDI事件同它的发生时间一起写入输入缓冲器中。乐音发生器驱动部分从输入缓冲器或从个人计算机键盘6接收数据,把所接收的数据分配给多个乐音发生器通道之一,并且根据输入数据执行从声音参数到乐音发生器参数的转换。此外,乐音发生器部分接收乐音发生器参数,并且处理波形数据,以形成要实际发音的乐音波形采样。一个LPF部分把混淆的噪声成分从所形成的乐音波形采样中清除,并且把从LPF部分输出的数据写入第一与第二输出缓冲器A和B。上述乐音发生器驱动部分、乐音发生器部分和LPF部分都是通过CPU1执行应用程序来实施的功能。
其次,当MIDI接收部分在点tb接收一个MIDI事件以后,乐音发生器驱动部分就进行如(b)部所示的与上述情况类似的处理,并且乐音发生器部分计算相应于从点ta到点tb的期间接收的输入的乐音波形采样A2。其后,在到达点t1时,乐音发生器部分计算相应于从点tb到点t1期间所接收输入的乐音波形采样A3。在这种情况下,在点ta和tb接收一些键通事件时,就在这个点t1进行乐音发生初始化和算术运算。此后,LPF进行一个滤波操作,从而为第一输出缓冲器A完成所需的乐音波形采样形成。
其次,在如图12的(a)部所示的为第二输出缓冲器B分配的从点t1到点t2的计算时期中,MIDI接收部分在点tc接收三个MIDI事件。因为乐音发生器部分现在正在计算乐音波形采样A3,故输入事件数据被临时地保存于输入缓冲器中,直至把计算时间分配到该数据为止。在乐音发生器部分完成乐音波形采样A3的计算和LPF部分完成滤波操作以后,乐音发生器驱动部分从要处理的输入缓冲器读出事件数据,这样乐音发生器部分计算相应于从点t1到点tc期间所接收输入的乐音波形采样B1。即使在计算操作中发生一些时间延迟,也不会影响乐音发生时间,因为输入事件数据的发生时间也已被写入输入缓冲器中。
此后,MIDI接收部分在乐音波形采样B1的计算期间接收4个MIDI事件,并且处理这些事件,以便在计算乐音波形采样B1之后计算相应的乐音波形采样,其情况类似于上述情况。
用相同的方式,作为相应于从点tc到点td期间所接收的输入的采样,形成乐音波形采样B2,作为相应于从点td到点te期间所接收的输入的采样,形成乐音波形采样B3,和作为相应于从点te到点t2期间所接收的输入的采样,形成乐音波形采样B4。其后,作为相应于从点t2到点t3期间所接收的输入的采样形成乐音波形采样A5。
正如从上面看到的那样,每当输入数据发生时,第二实施例都在输入数据发生以前的一段时期计算波形采样,从而能够以基本上分散的方式进行波形采样计算。这样,以预定的间隔在每个计算时期进行的操作量就被适当地限制,从而甚至在发生许多涉及乐音发生的形式变化的输入数据,例如键通事件数据时,也有可能避免一些不便之处,例如可同时发生乐音的数目被减少。
下面描述根据第三个实施例的乐音发生方法。
为了在计算点是以预定间隔发生的情况下,和在预定数目的乐音波形采样是通过算术运算在每个计算周期集体地形成的情况下,相继地发生乐音,就必须在形成以前的乐音波形采样被完成之前,供给预定数目的乐音波形采样。然而,如果乐音发生通道的数目相当大,从而波形计算操作量过大,就会出现一个问题不能够及时供应全部通道的乐音波形采样,使所发生的乐音不合乎需要地中断或间断。
根据第三个实施例的乐音发生方法打算用于解决上述的麻烦问题。更准确地说,第三实施例确定是否能够在D/A转换器10的数据转换期间及时地供应预定数目的乐音波形采样。如果确定能够在数据换期间及时地供应乐音波形采样,就选择一个或多个这样的乐音发生通道其乐音在当前时间正在发生的全部乐音中所具有的重要程度是比较小的。然后,对指定的通道,本实施例在短期内计算相当于波形的初始时期的阻尼波形采样。
因为只对指定的乐音发生通道计算短期阻尼波形采样,所以能够减少该通道所需的计算时间,从而可在D/A转换器10的数据转换期间及时地供应全部的预定数目的乐音波形采样。
一般说来,在第三实施例中被定为“重要”的乐音有(1)当前有大音量的乐音;(2)其初始部位(attack portion)刚开始发声的乐音;(3)当两个或多个部分的乐音正在发声时的最低音调乐音(低音部);(4)当两个或多个部分的乐音正在发声时的最高音调乐音;和(5)当两个或多个部分的乐音正在发声时的一个独奏部分的乐音。
第三实施例可以修正如下。按照在波形采样计算之前要在其中发生乐音的重要性递降顺序,以下述方式布置乐音发生通道从最重要的乐音到最不重要的乐音顺序地完成采样计算。如果不能及时地完成全部通道的波形采样计算,就中断计算,以便只用迄今已形成的乐音波形采样发生乐音。这样,如果需要中断采样计算,则只是重要性较小的一个乐音或几个乐音被停用或消去,从而影响较小。
在上述第三实施例及其修正例中,可以总是在输入数据发生时进行波形采样的计算。换句话说,可以为每个时间段,而不是根据每个输入数据的发生,集体地进行波形采样的计算;在这种情况下,可能最好是按照输入数据的数量超前计算点发生触发信号。在另一修正例中,预定计算点之间的每个时间段可以被分成“n”个相等的部分,以便按照相应于“n”个部分的间隔进行波形采样计算,并且再生部分(DMA)9可以读出在第“n”个部分完全形成的各组乐音波形采样。
为了在计算点都是在预定的间隔下发生的情况下,和在预定数目的乐音波形采样都是通过算术运算集体地形成的情况下,相继地发生乐音,就必须在以前的乐音波形采样的形成被完成之前,供给预定数目的乐音波形采样。然而,如果乐音发生通道的数目比较大,从而波形计算操作量过大,或如果例如由于花在其他处理上的时间比花在乐音形成处理(例如定序器处理)上的时间多得多,而不能及时地供给预定数目的乐音波形采样,就在仍然在进行处理的过程中读出一个或多个乐音波形采样,从而造成不希望有的噪声。
根据第四个实施例的乐音发生方法打算解决这一麻烦问题。在第四实施例中,CPU1指令再生部分(DMA)9发送存储于任何一个输出寄存器中的数据,并且能够在再生部分9中设置它本身就用于存储预定数目的所形成乐音波形采样的输出缓冲器的地址,将此地址用作读出部分的地址,或要从其中重复地读出数据的重复读出部分的地址。此外,可以用下列方式作成读出部分保留能够在一个当前正在从其中读出数据的特定读出部分之后,立即读出该地址中的数据。
根据第四个实施例,读出部分保留允许所形成的乐音波形采样,寄存于供保留用的输出缓冲器中,并且在一个当前正在读出的特定波形之后立即读出。在预定数量的乐音波形采样的计算没有及时完成的情况下,这样一种保留寄存是无效的,从而有可能防止发生噪声;换句话说,任何处于正在处理过程中的乐音波形采样发声都会引起噪声。这会临时中断某一乐音的发声,但通过在例如44.1KHz的抽样频率情况下把中断时间限制成只有几个抽样周期,就会大大减少中断所带来的负作用。如上所述,通过限制发生乐音的通道数目,可以实现中断时间的限制。在完成计算以后,进行保留寄存,使相应波形的采样发声。
可以为每个时间段集体地进行波形采样计算,而不是根据每个输入数据的发生来进行。在这种情况下,可能最好是按照输入数据的数目提前于计算点发生一个触发信号。在另一修正例中,在预定计算点之间的每个时间段可以被分成“n”个相等的部分,以便在相应于“n”个部分的间隔进行波形采样计算,并且可对一个时间段的已在最后第“n”次计算中完全形成的乐音波形采样,为其发声而作一种保留寄存。
如上所述,在计算点是在预定间隔发生的,和预定数目的乐音波形采样是通过算术运算集体地形成的情况下,或者在波形采样计算是根据每个输入数据的出现执行的情况下,为了相继地发生乐音,必须在以前的乐音波形采样的形成被完成之前,供应预定数目的乐音波形采样。
根据一个以前的乐音波形采样的形成被结束的时间点(以前的乐音波形采样的结束时间点),指定这样的一个点作为一个特定乐音波形采样的计算点,这个点比规定的结束时间点早完成一个波形所需的时间。因为结束时间点是通过CPU1核查再生部分(DMA)9的当前状态(标志)而确认的,借此检测何时采样再生时间段已移到下一个时间段,所以实际结束时间点会延迟,直到CPU1检测出再生部分(DMA)9的状态(标志)变化为止。此外,因为这种时间延迟取决于何时CPU1完成上述的检测,所以单独形成的采样会出现取决于各自的检测计时的不均匀的延迟。
在根据这样不均匀地延迟的结束时间点产生计算点时,不能够得到正确的计算点。尤其是,如果根据延迟大的计时产生计算点时,则在计算开始与供给波形数据之间的总时间长度被显著地缩短,从而同时发生的乐音数目被临时减少。
根据第五个实施例的乐音发生方法打算解决这一麻烦问题。
根据第五个实施例,CPU1把多个时间点存入存储器,这些时间点是过去测出其再生部分(DMA)9状态有变化时的时间点;CPU1还通过平均这些已存储的时间点,预测会在下次检测出这种变化的时间点。因为预测的时间点相应于再生部分(DAM)9中规定的结束时间点的时间延迟的平均,所以在预测时间点以前的一个预定的时间点能够看成是一个实际上的正确结束时间点。这样,可根据正确的结束时间点产生计算点。用这种方法,平均所检测的结束时间点,以减少其不均匀性,从而分配给各个计算点的操作周期就按下述方式有效地均匀化用稳定化的方式进行乐音形成操作。
波形采样的计算可以对每个时间段集体地进行,而不是根据每个输入数据的出现进行。在这种情况下,可能最好是按照输入数据的数量超前计算点发生一个触发信号。在另一修正例中,在预定计算点之间的各个时间段可以分成“n”个相等的部分,以使在相应于“n”个部分的间隔进行波形形成计算过程,并且可对一时间段的已在最后第“n”次计算中全部形成的乐音波形采样,为其发声而作一种保留寄存。
下面参照流程图,对与第一至第五实施例有关的如上所述的乐音发生设备与方法,描述其基本的操作。
图6是一个由CPU1执行的主程序的流程图。主程序开始时,在步骤S10执行一个初始化过程;在此步骤中,计时器4和DMA9被设置成各自的初始状态,全部乐音发生通道被清零,和音色数据和波形数据等被准备。其后,CPU1移到步骤S20,在此执行一个键盘过程,以处理从键盘6输入的数据。在下一步骤S30,对相应于一个输入MIDI事件的操作执行一个MIDI过程。此外,在步骤S40执行一个乐音发生器过程,用于进行波形采样计算,以形成乐音波形采样等;还在步骤S50执行其他必要的过程。在步骤S50之后,主程序循环返回到步骤S20,以便在一个恒定的循环中重复地进行上述的S20至S50的过程。在使用多任务技术执行另一软件程序时,可以同时进行这些过程。
图7是一个由CPU1执行一个MIDI接收中断过程的流程图,它在通过MIDI接口5从外部接收MIDI事件数据时,用一个中断信号来启动。在优先于任何其他过程的情况下执行这个MIDI接收中断过程。启动MIDI接收中断过程时,在步骤S100把通过接口5接收的MIDI事件数据读入乐音发生设备;并且在步骤S110,同数据的发生时间或接收时间一起,写入上述的输入缓冲器中;然后CPP1返回到在给出中断信号时正在执行的主程序中的某一个过程中。用这种方式,把每个接收的MIDI事件数据都与接收时间一起写入输入缓冲器中。
图8是一个说明在主程序中的步骤S30执行的MIDI过程的细节的流程图。首先,CPU1在步骤S200核查输入缓冲器,并且在步骤S210,它查明是否输入缓冲器含有任何仍未处理或未计算的所接收的数据。如果按照在步骤S210的测定,在输入缓冲器中存在任何未计算的接收数据,就在步骤220进行一个相应于未计算接收数据内容的操作。即,如果接收数据是音通事件数据,CPU1就转到步骤S230,以执行一个音通过程;如果接收数据是音断事件数据,CPU1就转到步骤S240,以执行一个音断过程;和如果接收数据是其他数据,CPU1就转以步骤S250,以进行其他过程。在完成步骤S220中的过程之一时,MIDI过程结束。在按照步骤S210的测定而在输入缓冲器中不存在未计算的接收数据的情况下,MIDI过程立即结束,而不再执行下面的操作。
图9A是一个在所接收的数据是音通事件数据时在MIDI过程中S230步骤执行的音通过程的流程图。首先,作为步骤S300,把输入缓冲器中音通事件的音符号码、速度和发生时间作为“NN”、“VEL”和“TM”装入音符号码、速度和发生时间寄存器中。然后,在步骤S310、把音符号码“NN”指定到通道之一中,并且把所指定通道的通道号码作为“i”装入一个通道号码寄存器中。
此外,在步骤S320,把相应于音符号码“NN”和速度“VEL”的乐音控制数据置入为通道号码“i”分配的图4的通道寄存器CH之一中。这样设置的乐音控制数据是按照音符号码“NN”和速度“VEL”值相应于已接收音通事件数据的MIDI通道,通过处理图2的音色数据而导出的乐音形成数据(图4的其他数据)。在此,乐音形成数据中的波形指定数据是相应于音符号码“NN”,通过读出图2音色数据的音调范围波形指定数据而得到的,并且读出指定数据规定波形数据WD1到WDn中任何一个数据。在设置乐音控制数据以后,一个用于通道“i”的音通标志,在步骤S330被设置载或建起。
此后,CPU1着手步骤S340,以进行波形形成计算过程。在这种情况下,进行波形形成计算过程,旨在计算那些要写入当前可写输出缓冲器X中的波形未计算部分的采样,并且把这样算出的部分波形写入输出缓冲器X中。部分波形相当于这样一种范围的波形,它变成能够在一个时间点被计算或形成;在该时间点以步骤S210检测所接收的数据(即,认可数据的接收)。要在此形成的部分波形是,在所接收音通事件的发生时间TM以前的一段时期里未计算的波形采样,并且一个应当根据音通事件开始发声的波形未包含在当前的波形中,而是包含在一个要在以后形成的波形中,以后将参照图11详述。
在步骤S340和S350的操作相当于波形采样A1,A2或上面曾参照图12描述的类似采样的波形计算。在步骤S350,根据已在上述步骤S320为通道号码“i”设置的乐音控制数据,为乐音发生而对通道号码“i”的通道寄存器的工作区进行初始化。在这工作区中存储地址的当前值,LFO波形的各种包迹、当前状态、当前值,和形成各个通道波形所需的其他数据。在完成这个乐音发生初始化过程以后,音通过程结束。在初始化过程中,进行各种初始化操作,例如对当前波形读地址初始地设定一个启动地址,发生一个相应于音符号码NN的“F”号码,初始地设定LFO、滤波器EG、音量EG,内插操作和滤波器操作。这一初始化过程占用大量计算时间,已如上述。
图13是当所接收的数据是音断事件数据时,在MIDI过程中以步骤S240执行的音断过程的一个流程图。首先,按照步骤S400,把存储于输入缓冲器中的音断事件的音符号码和发生时间作为“NN”和“TM”,装入音符号码和发生时间寄存器。然后,在步骤S410,确认一个当前正在发声的音符号码NN的乐音发生通道CH,并且把所确认的通道的通道号码作为“i”,装入通道号码寄存器中。
此后,在步骤S420记下或重置用于“i”通道的音通标志;并且在步骤S430,以类似于上述步骤S340的方式,进行波形形成计算过程,以便计算应当在发生时间TM之前形成的未计算波形采样(部分波形),并把这样计算的波形采样写入输出缓冲器X。在步骤S440释放“i”通道的启动操作以后,音断过程结束。在释放启动操作中,重写工作区中所含“i”通道的各种包迹的各个状态,以便把该通道中的乐音形成状态变成释放状态。
下面参照图10,详细描述在主程序中的步骤S40执行的乐音发生器过程的流程图。首先,在步骤S500,核查再生部分(DMA)9的再生状态。如果DMA9已前进到下一个要被再生的段,则CPU1转到下一步骤S510;但如果否,则CPU1跳到步骤S520。DMA9从一个由CPU1指定的RAM3的专用区,以预定的抽样频率,逐一地读出波形采样;并且把读出的采样供给可听再生的DAC10。在这样从指定区读波形采样的同时,DMA9从CPU1指定的另一个要再生的区接收一个预约。在已完成前区的再生以后,这样预约的下一区的波形采样类似地由DMA逐一读出,并且供给可听再生的DAC10。DMA9前进到下一个要再生的段意味着其中,最后作为要再生段指定专用区再生被完成以后,DMA9已移到另一个作为下一个要再生段而预约的专用区。在这种情况下,按照它们用来预约的顺序再生RAM3的专用区。
其后,在步骤S510,将在下次检测的这样一种推进时间(下一次推进检测时间)是,根据当前时间和以前推进检测时间来预测的;并且一个在预测检测时间以前是一个预定时间的时间点是,作为下一个计算点而被指定的。下次推进检测时间可用例如下面的方法来预测根据包括当前时间和最后时间在内的多个推进检测时间,通过“最小二乘法”以小的误差计算出一个近似值;或者使用一个二次函数或类似函数去逼近一个检测时间的变量。在推进发生与检测之间的一个时期中,由于各个操作步骤位置与状态的不同,而在DMA9中发生不均匀的时间延迟,使推进检测时间包含不规则的非均匀性。因此,逼近函数的计算涉及一种平均非均匀检测时间的运算。
上述在预定检测时间以前的“预定时间”是一个为形成乐音波形而分配的时间,并且取决于波形形成算术运算所需的量;这运算量是由要发生乐音的要求数,算术运算的要求质量等决定的。“预定时间”的长度可以是固定的,也可以通过用户在键盘6上的选择来可变地设置,或由CPU1按照两个或多个同时运行的程序来自动地设置。
其后,在步骤S520,在下一个计算点与由计时器4显示的当前时间之间作比较,以便确定当前时间是否已到达下一个计算点。如果确定是肯定的,CPU1就进行步骤S530至S580的步骤。首先,在步骤S530,决定特定的计算顺序,其中当前发声的通道应当以后在步骤S550经历波形采样计算,以形成用于每个当前发声通道的多个采样的波形数据。
那就是说,在步骤S530,以下述方式设置计算顺序从一个音乐上有效的乐音开始,或从一个如果它失效或消失,就会出现重大的音乐麻烦的乐音开始,相继地进行波形采样计算。然后,在步骤S540,确定是否全部当前发声通道的波形采样计算能够在一个预定的计算时间(即涉及步骤S510描述的预定时间)内完成。如果以否定的形式应答,则一个或多个要在最后或在迟于任何其他通道的时间进行波形采样计算的乐音发生通道,就被指定为要消失乐音的通道(乐音消失通道),以便按如此方式减少算术运算量,以致于能够在预定的计算时间范围内完成全部当前发声通道的波形采样计算。这一过程的处理详情见上述乐音发生方法第三个实施例。
在步骤S550,现在进行波形采样计算。尤其是,对未计算的波形采样进行计算,并且把它们写入当前可用的输出缓冲器X中,使缓冲器X装满计算波形数据,从而为乐音发生作好准备。这一操作相当于形成波形A3或类似波形,如上面提及图12时所述。
然后在步骤S560,使每个写入已装满的输出缓冲器X中的采样受到一种低通滤波操作,以便从其中消除高频成分。此后,在步骤S570,把存储低通滤波波形的输出缓冲器X预置成一个用于下次再生波形的专用存储区,以便在完成当前再生的和业已预置的存储区中的波形再生以后这个存储区被再生。然后,在步骤S580,与迄今使用缓冲器X不同的另一输出缓冲器被清零,并且新设成输出缓冲器X,以便为下一个被再生段准备波形。
如果当前时间尚未达到按步骤S520确定的计算点,则乐音发生过程结束,而不进行其他的操作。
图11是一个在音通、音断和乐音发生器过程中进行的波形形成计算过程的流程图。对这一过程,按上面所述预置一个波形计算时间范围。也就是说,在MIDI数据接收过程期间,例如在音通过程期间,执行目前程序流程的情况下,波形计算时间范围相当于上述的部分波形;而在乐音发生器过程期间执行日前程序流程的情况下,则波形计算时间范围相当于缓冲器X中一个未计算段的那些波形采样。因为按照由乐音发生器过程的先前执行确定的计算顺序来进行计算,故在MIDI数据接收时间不确定通道的新计算顺序。每当一个新的音通事件发生,并且被指定到通道中的一个特定通道时,则该特定通道被首先(给出一个第一顺序)置入计算顺序,并且各个其他通道的顺序被向下移动一位。
首先,在步骤S600,为按计算顺序首先安置的通道的第一个波形采样作计算准备。计算准备包括设置各式各样的数据,例如最后阅读地址,各种包迹EG的数值和状态(投入、释放等),和可存取条件下的LFO值;并且包括把这些数据装入CPU1的内寄存器,以便计算时直接利用。其后,在步骤S610,对LFO、滤波器G和音量EG进行波形采样计算,以便形成LFO、FEG(滤波器包迹)和AEG(振幅包迹)波形的采样。把LFO波形加到计算指定时间范围所需的“F”数、FEG波形和AEG波形上,以便调制各个数据。对每个被指定为消音通道的乐音发生通道,按照在该时间范围内迅速衰减的音量EG来计算一种阻尼AEG波形。
其后,在步骤S620,F数被反复地添加到用作起始值的最后读地址上,以便在该时间范围内产生用于各个采样的读地址。此外,根据阅读地址的整数部分,从音色数据区中的波形存储区WD读出波形数据;并且根据读地址的小数部分,在各个读出波形采样之间作内插,以形成在该时间范围以内的全部内插采样。例如,如果计时范围相当于100个采样所用的时间,就通过这步操作可集体地形成100个采样。因为在该时间范围内的多个采样的操作中,是作为一个整个的系统操作来进行相应于读地址的F数加和内插的,故只需要把读地址读入CPU寄存器中一次,从而总的来说,能够显著地提高处理速度。
此外,在步骤S630,在该时间范围内的内插采样经历一个音色滤波操作,在此根据上述FEG波形进行采样的音色控制。在下一个步骤S640,对滤波后的采样进行一个振幅控制操作,以便根据上述AEG(振幅包迹)和音量数据控制采样的振幅;还进行一个累加写入操作,以便把所得的振幅控制采样添加到存储于指定通道的输出缓冲器X的相应采样上。因为在这一过程中,振幅控制和添加到输出缓冲器X中相应采样上是相继地进行的,故有可能把需要装入CPU寄存器中的采样数目减至最少,从而显著地提高处理速度。
进行步骤S620至S640的采样形成操作之基本目的在于形成预定时间范围内的全部采样,然而由于步骤S610作了音量EG波形计算,这些采样具有充分低的AEG波形水平,和充分小的音量,故不需要进一步计算,从而能够减少所需的操作量。尤其是,在乐音发生通道根据步骤S540的指定而产生了阻尼AEG波形的情况下,可能经常在预定时间范围内中途得到充分的衰减。
其后,在步骤S650,对于是否要在继续进行波形形成计算处理情况下,把波形在时间极限范围内供给DMA9,和是否应当中止波形采样计算,作出一个决定。在时间极限范围内及时地供应波形在此意味着,当前正在再生来自专用存储区的以前形成的波形采样的DMA9,能够在缓冲器X的一个新区预置接连的波形采样,并且能够在来自专用存储区的以前形成的波形采样的再生被完成之前,预置用于以后再生的缓冲器X的新区。如果在步骤S650确定,不会及时供应波形,并且不会进一步继续进行计算,就在步骤S670中止波形采样计算,并且结束波形计算过程。
如果在步骤S650确定,可以继续计算,就在步骤S660作出进一步的确定是否已为全部的指定通道完成了波形采样的计算。在否定的应答下,就在步骤S680指定按照计算顺序(给出的下一个计算顺序)在下次置于乐音发生通道中的第一个波形采样,并且为计算这下一个通道中的波形采样而作好准备。在完成这样的准备时,CPU1回复步骤S610以便为该通道重复步骤S610至S640的操作。这样,为所有指定的通道重复地进行步骤S610至S660的操作,并且每为诸通道的一个进行操作一次,就在步骤640把为预定时间范围结果形成的采样累积地加到在缓冲器X中存储的对应采样上。
当在步骤S660中确定对于所有指定的通道已经完成波形采样计算时,该波形计算过程结束。于是,对于所有指定的通道现在已经新存储了预定数量的对应于时间范围形成的波形采样的累计值。
当根据步骤S650的肯定确定在步骤S670中止波形采样计算时,对于每一个指定的通道现在已经新存储了预定数量的对应于时间范围形成的波形采样的累计值。
对于每一个计算转向晚于计算中止的通道,并不完成波形采样形成,结果,已经通过通道产生的乐音将被消去。然而,因为那些给定的产生较不重要乐音的通道在步骤S530的计算次序中转向较晚,所以能把由中止产生的不利影响减至最小。在步骤S670以这样的方式设定通道寄存器CH,以致于如此排拆于计算这外的通道保持在消音状态,即使在下次波形形成计算过程的执行中和执行后也是如此。
在图9A中用流程图表示的配音过程(nott-on process)的步骤S340,执行上述的波形形成计算过程,在这种情况下,这一过程一结束就进行步骤S350的操作,然后配音过程结束。在图9B中用流程图表示的去音过程(note-off process)的步骤430,执行上述的波形形成计算过程,在过程情况下,这一过程一结束就进行步骤S440的操作,然后去音过程结束。另外,在图10中用流程图表示的去音过程的步骤S550,执行上述的波形形成计算过程,在这种情况下,一结束这一形成过程就进行步骤S560至S580的操作,然后乐音发生器过程结束。
在图6的主程序的恒定循环中周期地重复这些配音、去音和乐音发生器过程,以便为后来的声音复制顺序地形成波形采样。
就本发明的乐音产生方法而论,应该明白,这些相互独立的处理数据步骤,如命令产生多个乐音的步骤如命令以预定的时间间隔开始波形采样计算的步骤,可以以任意选择的次序进行,而不是以上述的次序进行。
另外,根据本发明的乐音发生方法,另一个应用软件请求的操作,包括乐音形成指令,可以利用在波形形成计算过程中的空闲时间来进行。在这种情况下,其他应用软件可以是如游戏、通信或办公室事务处理之类的软件。
上文把本发明的乐音产生方法描述成由图1中乐音发生设备执行的一个程序。另一方面,在基于操作系统(OS)如可从美国微软件公司(Microsoft Corporation)买到的“Windows”(窗口)的通用计算机上,可以把本发明的乐音产生方法作为一个单一的应用程序与另一个应用程序同时完成。
就已经描述的本发明而论,对于多个波形采样的形成在每个通道中的准备仅需进行一次,因而实现了系统开销的大幅度降低。这提高了发生的乐音的音质并有可能增加能同时发生乐音的通道数量。
另外,通过控制每次MIDI(音乐器材数字界面)事件输入时要出现的波形采样计算,能以分散的方式进行该计算并能够防止初始乐音形成操作对发生的乐音数量的不利减少。
此外,在演奏信息(performance information)出现时执行演奏信息的输入或读入操作并把基于读入演奏信息的乐音控制或波形形成包括在读入操作期间的空闲时间执行的主步骤中,利用这种安排,在演奏信息出现时增加的处理量能分散在空闲时间内,因此能有儿地避免处理量的暂时增加。
下面,参照图13至25B,将进行根据本发明第二方面的一个实施例的描述。
在这个实施例中,依靠多任务管理程序运行一个在其上应用程序如定序器和游戏软件是可操作的通用操作系统,并使软件乐音发生器在多任务管理程序的控制下而不是在应用程序的控制下运行。因为这种安排,使软件乐音发生器可以在实时处理必需的时间间隔内可靠地工作,并且当软年乐音发生器中不执行处理时,可以使通用操作系统运行以便在该操作系统上执行该应用程序。
在实施第二方面的实施例时,可以使用一个包括有如图1中所示建立的硬件的音频发生设备,或者使用一个包括有如图19所示建立的硬件的音频发生设备。在如下的描述中,将假定使用图19的音频发生设备来描述该实施例。
在图19中,与图1中相同的标号代表的元件与该图中的对应元件基本上具有相同的功能。本实施例在如下方面本质上不同于图1的实施例,本实施例包括有一个连接到CODEC设备32上用来输入外部模拟音频信号的输入终端,并且通过在CPU1的总线35与音响系统11或输入终端34之间的CODEC设备32互换声学数据。CODEC设备32包括一个数/模转换器(DAC)或一个模数转换器(ADC)。根据每个取样时钟脉冲,把经由CPU1处理形成的数字乐音波形数据经总线35供给数/模转换器,以便把供给的波形数据转换成要供给音响系统11的模拟信号。模拟音频信号经输入终端34输入给模/数转换器以便把供给的音频信号转换成将要供给总线35的数字数据。当乐音发生器波形数据是从外部取样并存储在内存中时,能方便地利用输入终端34的模拟音频信号输入功能和模数转换功能。图1和19的设备可以都装有可选择的外围存储设备,如软盘驱动器、CD-ROM驱动器或MO(磁光盘)驱动器。例如,存储用来实现本发明实施例的程序的记录媒体(如软盘或CD)可以置于外围存储设备中,因此读出诸程序的任何一个并经总线35传送给硬盘8或RAM3以便存储在其中。然后,借助于执行该程序的CPU1,能根据要求的程序实施本发明。在图19所示的例子中,为此目的装有一个CD-ROM驱动器33。
图13是一张框图,说明在该实施例中软件模块的建立,其中为了简明起见,仅表示了与需要实施数据处理的音频信号处理有关的部分,即与软件乐音发生器和波形数据的处理有关的部分。
如所表示的那样,一组包括乐音发生器(T.G.)混频器控制软件30、MIDI字序器软件31、游戏之类的软年13和波形复制软件14的应用程序位于顶层中。在应用程序下面有一组系统程序,包括一个界面15,通过它应用程序能利用由系统程序组提供的各种服务;一个乐音发生器(T.G.)MIDI驱动器16,起MIDI乐音发生器驱动器的作用以形成一个乐音发生器(T.G.)任务20如下文所述;一个波输入/输出驱动器17,具有打开波输入/输出设备的功能;一个界面18,在乐音发生器MIDI驱动器16和波输入/输出驱动器17与内核程序(环0)之间;及一个外部MIDI驱动器25。当处理器处于用户状态(环3)时,执行这些程序。
系统软件组还包括一个任务调度程序19、乐音发生器任务20、一个波任务21、一个混频器任务22、一个包括一组用来完成混频、分频和取样率转换或音频信号流的格式转换的子程序的程序库23、及一个CODEC驱动器24。当处理器处于核心状态(环0)时,执行这些程序。
任务调度程序19是一个用来进行控制的模块,以便从多个就绪任务(过程)中选择下次要完成的任务然后实际上再由处理器完成。在本发明中,任务调度程序19根据所谓的优先法(完全多任务法)完成任务调度。
如下文更彻底地描述的那样,由乐音发生器MIDI驱动器16生成了乐音发生器任务20,并且乐音发生器任务20根据从MDI驱动器16供给的乐音控制参数TGPARA为指定的通道(最多32个通道)提供波形表合成功能和音色控制处理功能。另外,根据由波输入/输出驱动器17打开的波输入/输出设备生成了波任务21和混频器任务22。标号26代表一个CODEC电路,该电路包括用来输入和输出波形数据的模/数和数/模转换器,而27代表一个MIDI接口(MIDI I/O)。尽管没有特别表示,该系统程序组还包括磁盘驱动器、存储器管理程序、文件系统、用户界面等,这些通常包含在通用的操作系统中。
下面,参照图14,描述在根据第二方面的实施例中是如何执行特定任务(过程)的。通过执行CREATE(生成)指令生成一个任务,并把生成的任务置于“就绪”状态,然后再放入队列中。根据预定的优先权次序,任务调度程序19从开始对其处理的队列中选出就绪任务的一项,并把该选到任务置于“运行”状态中。在该状态,一旦从计时器等产生时间片中断,该运行任务就被中断并再次被置于“就绪”状态中且放到队列中。然后,任务调度程序19从紧接着开始对其处理的队列中选出一项任务,并这样控制以便执行选到的任务。
因此,即使当特定的任务正在运行时,利用以预定频率产生的时间片中断等也能强制地中断该任务。通过给乐音发生器任务20较高的优先权,能以预定的时间间隔可靠地执行乐音发生器任务20。以类似的方式在通用的计算机上能执行其他任务如要求实时处理的波任务21。此外,只要不在进行非实时处理,通用的操作系统就能作为一项单一的任务进行操作,因而能在实时处理的同时执行在该操作系统上运行的应用程序。
一旦在运行一个任务的同时执行等待特殊事件如SLEEP(休眠)或PEND(未决)指令出现的指令,就把该任务置于“阻塞”(blocked)状态中并分配另一个任务。然后,当特殊事件发生时,把“阻塞”的任务置于“就绪”状态并放到队列中。其次,当执行EXIT(退出)或DELETE(删除)指令时,把该任务置于“终止”状态。
利用上述的安排,乐音发生器MIDI驱动器16、乐音发生器任务20、CODEC驱动器24和CODEC电路26共同实现本发明的软件乐音发生器。
当从MIDI定序器软件31等经界面15输入一个MIDI信号时,就启动乐音发生器MIDI驱动器16。一旦乐音发生器MIDI驱动器16被启动,就依据输入的MIDI信号进行处理,如配音过程、去音过程、程序改变、控制改变、系统排他过程等等。在配音事件出现的情况下,乐音发生器MIDI驱动器16把一个新乐音分配给起乐音发生器作用的乐音发生器任务20的一个通道,并准备要置于分配的或指定的通道中的乐音控制参数和配音数据。该乐音控制参数是根据音符数(note number)和伴随配音事件的性能特征(performancetouch)通过处理音色参数而得到的、为各个MIDI通道选出的参数。当启动任务20时,把准备好的乐音控制参数发送给在乐音发生器任务20中的乐音发生器寄存器。
该乐音发生器任务20具有一个用于32个通道的任一个的波形表合成功能和一个单声道输入/立体声输出混响功能,并且对于每个帧时间根据来自一个包括CODEC驱动器24和CODEC电路26的输出设备的波形数据请求,启动任务20。乐音发生器任务20接收外部的音频输入,并根据外部的音频输入和由此形成的波形表合成数据完成混响过程,以便把合成的音频波形提供给输出设备。
图15是一张等效电路图,说明在乐音发生器任务20中的全部处理,其中41代表对于32个通道的任一个的波形表合成过程,虚线方框42代表外部立体声音频信号输入过程,及43代表混响过程。另外,44代表一个波形数据存储器,50代表内插操作部分,51和65代表数据转换部分,及52、53和54代表放大器部分。55代表数据转换部分,它接收以整数数据形式表示的立体声音频输入信号并把接收到数据转换成以浮点形式表示的数据,然后再输出左声道信号L、右声道信号R和一个代表左右声道信号之和L+R的信号。另外,56、57、59和62代表加法器部分,58和64代表用来交插数据的加法器部分,60、61、63、66和67代表缓冲器,及65代表一个数据转换部分,用来把以浮点形式表示的数据转换成以整数数据形式表示的数据。要送给数据转换部分55的立体声音频输入信号可以是来自CODEC电路26的信号或是从波形复制软件14经波输入/输出驱动器17转送来的信号。
尽管传统的硬件乐音发生器为每一个采样形成波形数据并且须经数/模转换,但本发明的软件乐音发生器和音频输入/输出却一帧一帧地处理波形数据。用在这里的术语“帧”是给定过程的一个基本单位,并且本发明的软件乐音发生器和音频输入/输出为预定数量的、与大约5ms(毫秒)的复制周期相符的采样分配一个缓冲区,且把该缓冲区用作一个帧。这个缓冲器的大小取决于波形计算频率(取样频率)。在图15中,缓冲器60、61、63、66主67的每一个都具有一帧的容量。
另外,在图15中,每个粗线箭头都代表以浮点形式表示的32位数据,而每个细线箭头都代表16位整数数据。以粗线方框表示的缓冲器60、61、63的每一个都用来存储以浮点形式表示的32位数据,而以细线方框表示的缓冲器66和67的每一个都用来存储16位整数数据。
在本系统使用的CPU中,浮点倍增比整数倍增进行得更快,因此信号处理尽可能以浮点形式实现。然而,由存储在波形数据存储器44,44中的大部分波形数据是8位整数数据,所以为减少必需的执行时间,内插运算部分50以整数形式实现倍增,然后数据转换部分51把形成的倍增数据转换成浮点表示。
波开表合成过程41基本上包括波形内插和增益调整。内插运算部分50利用从乐音发生器MIDI驱动器16供给的音调信息(pitchinformation)把从波形数据存储器44读出的波形数据内插,数据转换部分51再把每个形成的内插数据转换成浮点表示。把从转换部分51的输出传给三个输出声道,即分成左声道信号L、右声道信号R和混响输入信号L+R,这些信号送给各自的放大器部分52、53和54,再利用从乐音发生器MIDI驱动器16供给的音量信息进行放大;该音量信息是通过用各个乐音产生通道的音量包迹信号乘以三个输出声道的电平而得到的数据。从各个乐音产生通道输出的波形数据经加法器部分56、57和62加在一起,从数据转换部分55还分别向加法器部分56、57和62供有外部立体声音频信号的左声道信号L、右声道信号R及左右声道信号之和L+R。因此,加法器部分56、57和62把所有通道的波形数据与外部立体声音频输入信号相混合。
来自加法器部分56和57的输出数据分别存进DRYL缓冲器60和DRYR寄存器61中,而来自加法器部分62的输出数据存进混响(REV)缓冲器63中。如此存储在混响缓冲器63中的“L+R”数据传给用于混响操作的混响过程43。形成的混响数据(混响声数据)对于左右声道L和R独立地受到增益控制,然后再分别加到存储在缓冲器60和61中的数据上。在此之后,数据转换部分65把该混响数据进一步转换成整数形式,并作为音频输出数据经缓冲器66和67送给CODEC电路26的数/模转换器。
参照图16将解释这些操作的处理计时,其中横轴是时间轴,并且在时间轴之上的〔A〕代表在乐音发生器MIDI驱动器16中的处理,而在时间轴下方的〔B〕代表在乐音发生器任务20中的处理。另外,在图16中,从底部数第一和第二条线代表音频数据流,并且“音频输入设备”是一个波形数据输入程序,用来接收从CODEC电路26送来的数据并转换成数字形式的波形数据,而“音频输出设备”是一个波形数据输出程序,用来把数据转换成模拟形式并把波形数据输出到CODEC电路26。
本系统中的所有处理根据其处理优先权能分为三个主要的过程。具有第一或最高优先权的组是由作为时间中断信号给出的MIDI信号启动乐音发生器MIDI驱动器16的过程,在此期间完成把MIDI信号转换成乐音控制参数。然而,当直接从应用程序接收到MIDI信号而不是作为计时器中断时,则给乐音发生器MIDI驱动器16的这一过程第三级或最低的优先权。把第二级优先权给乐音发生器任务20,该乐音发生器任务20由来自音频输入/输出缓冲器的READY信息(即,当需要接着的数据时从音频输出设备产生的OUTPUTREADY信息,或当音频输入设备准备传送数据时从该设备产生的INPUT READY信息)启动,当乐音发生器MIDI驱动器16发送新的乐音控制参数信息时则由从该驱动器16产生的TG PARARECEIVED信息启动,或者当乐音发生器MIDI驱动器16装有波形数据时则由从该驱动器16产生的WAVE LOAD REOUEST信息启动。MIDI定序器软件和其他应用程序所给的优先权最低。
在图16的乐音发生器任务20中的处理〔B〕中,用于一个帧的数据处理包括如下操作(1)读输入音频数据;(2)处理乐音控制参数;(3)形成用于32个通道的波形;(4)如有必要实行强制衰减;(5)发送乐音发生器状态;(6)进行混响计算;及(7)把数据作为音频输出数据转送。在这些操作中,在上文的条目(3)中用于32个通道的波形计算操作包含有在CPU上的最大负载和最大波动,因此非常可能在一帧的周期内不能完成必需的计算。由此看来,在所有的操作中最后进行这一不确定的操作是合理的,因此安排本系统从条目(5)的操作开始处理而不是从条目(1)的操作开始处理。
把条目(5)至(7)的操作指定为由来自音频输出设备的OUTPUT READY信息启动的一系列操作。一旦接收到OUTPUTREADY信息并启动了乐音发生器任务20,为了调用MIDI驱动器16的CALL BACK(回呼)功能,就把表示任务20的可操作状态的乐音发生器状态(TG STATUS)送给在条目(5)的操作中的乐音发生器MIDI驱动器16。在CALL BACK功能中,乐音发生器MIDI驱动器16读TG STATUS并把包括乐音控制参数和为任务20准备的配音信号的乐音形成参数TG PARA放入乐音发生器任务20的乐音发生器寄存器中。然后,乐音发生器任务20在条目(6)启动混响计算,其中利用存储在缓冲器63中的波形数据进行混响计算并把形成的计算数据加到每个具有一帧容量的缓冲器60至61中。在此之后,乐音发生器任备20启动上文条目(7)的音频数据输出操作,其中,把存储在DRYL缓冲器60和DRYR缓冲器61中的波形数据转换成一帧波形数据以便发送给输出驱动器。然后,该操作系列终止。
在条目(7)的操作之后是由INPUT READY信息启动的条目(1)的音频输入操作。因为事实上输入数据在输出数据就绪之前已经就绪,如图16中所示,所以接着条目(7)的操作就调用条目(1)的操作。在音频输入操作时,从音频输入设备或波输入/输出驱动器17中读入一帧输入数据。
最后,条目(2)至条目(4)的操作作为系统操作来进行,利用确认收到了乐音形成参数TG PARA的信息启动该系列操作。因为事实上在条目(6)的操作之前已经接收到了乐音形成参数TGPARA,所以接着条目(1)的操作启动条目(2)至条目(4)的这些操作。在条目(2)的操作中,把由乐音发生器MIDI驱动器16存储在乐音发生器寄存器中的、包括乐音控制参数和配音信号的乐音形成参数的TG PARA译码并转换成波形计算数据。然后,在条目(3)的操作中,为32个通道的任何一个进行波形形成计算过程。对于每一个指定的通道,在以与要产生的音调相符的速率移动波形数据存储器44的读地址的同时读出波形数据,在读出的采样数据之间内插,然后再根据基于音量信息如音量包(AEG)的内插数据实现音量控制,通过以操作实现波形形成计算过程。在左声道L、右声道R和混响声道L+R上相互独立地进行乐音控制,并把一帧的、用于三个声道的音量控制波形数据加到各自的缓冲器60、61和63中。
通过条目(3)的操作完成结束了所讨论的用于帧的处理,然后使通用的操作系统运行直到下次OUTPUT READY信息的到来。如左部分(b)中所示,即使当接收到下次的OUT PUT READY信息时,如果条目(3)的波形形成没有完成则也强制中止波形形成计算过程,并且此时,对没有计算的通道实行强制衰减以便避免多余的噪声的出现。根据该实施例,对于指定的通道,从一个特定的通道开始顺序地为32个通道的任何一个进行波形计算操作,例如,这个特定的通道现在正在发出较高电平的乐音,如果以上述方式强制地中止,则该乐音会产生明显的效果。
在乐音发生器20的执行期间,当较高优先权的计时器中断产生MIDI事件时,强制地把控制转移到乐音地发生器MIDI驱动器16上,并对应于MIDI事件的操作,如图16的部分〔A〕所示,其中七个MIDI事件的发生用向下的箭头画出。
参照图17、18A和18B的流程图,将进一步描述上述的乐音发生器任务20。
首先,在图17的步骤100产生该乐音发生器任务20,并在步骤101把产生的乐音发生器任务20置于SLEEP状态中。利用事件的发生,如信息的接收,把置于SLEEP状态的乐音发生器任务20唤醒进入READY(就绪)状态,并且当利用任务调度程序调度处于READY状态的任务20时,为了确定该事件程序转到步骤102。就是说,在步骤102确定事件是(a)来自音频输入/输出设备的READY信息,还是(b)来自乐音发生器MIDI驱动器16的WAVE LOAD(波载)请求,或者是来自MIDI驱动器16的参数TG PARA确认信息。
如果在步骤102确定的事件是来自音频输入/输出设备的READY信息,则程序分支到步骤103,在这里进一步确定该信息是来自音频输出设备的OUTPUT READY(输出就绪)还是来自音频输入设备的INPUT READY(输入就绪)信息。如果该信息是来自音频输出设备的OUTPUT READY,则在步骤104把触发标志置于“1”并把TG STATUS发送给MIDI驱动器16(图16中条目(5)的操作)-当终止条目(3)的波形形成计算时把触发标志置于“0”而当接收到OUTPUT READY信息时把触发标志置于“1”。然后,在步骤106,确定混响效果是ON(接通)还是否。如果在步骤106回答是肯定的,则在步骤107进行混响计算(图16中条目(6)的操作),然后程序再转到步骤108;否则,程序直接发转到步骤108而不进行步骤107的操作。在步骤108输出音频数据(图16中条目(7)的操作),程序再回复步骤101以返回SLEEP状态。
如果在步骤103确定的事件是来自音频输入设备的INPUTREADY信息,则程序转到步骤109以查明触发标志的状态。如果触发标志处于“1”,则程序转到步骤110以读入音频输入数据(图16中条目(1)的操作)然后再回复步骤101以返回SLEEP状态。如果在步骤109确定的触发标志处于“0”,则程序回复步骤101以返回SLEEP状态。如前所述,当条目(3)的波形形成计算终止时把触发标志置为“0”,而当接收到OUTPUT READY信息时则把标志置为“1”。因此,通过在步骤109查明触发标志的现行状态,能够进行控制以防止在根据OUTPUT READY信息的处理之前进行根据INPUT READY信息的处理。如果在步骤102确定的事件是来自乐音发生器MIDI驱动器16的WAVE LOAD请求,则程序转到步骤111以便把波形数据读入和存入存储器,然后再回复步骤101以返回SLEEP状态。WAVE LOAD请求是为乐音发生器任务20等的初始化而从MIDI驱动器16产生的信息。
如果在步骤102确定的事件是参数TG PARA的确认信息,则程序分支到步骤112,在这里根据由MIDI驱动器16置于乐音发生器寄存器中的乐音控制参数TG PARA进行处理(图16中条目(1)的操作)。更准确地说,由接收到的乐音控制参数TG PARA确定乐音发生器控制参数,如波形数据存储器地址、音调信息、EG(包)参数、移动数据和LFO(低频振荡器)控制数据。然后,程序移到步骤113以确定现行状态是否是TG EXIT(退出)。对于肯定的确定,该任务在步骤116终止;对于否定的确定,程序运行到步骤114,在这里为指定的通道(最多32个通道)完成波形形成计算过程(图16中条目(3)的操作),正如参照图18A和18B将要更完全地描述的那样。在步骤114的波形形成计算过程之后,程序进行到步骤115以使触发标志复位到“0”,然后再回复步骤101以返回SLEEP状态。
参照图18A和18B,在上述步骤114完成的波形形成计算过程下文中将作更详细的描述。在步骤200波形形成计算过程的开始,就在步骤201首先确定是否存在有新的接通数据。如果在步骤201确定了有新的接通数据,则程序转到步骤202以便再确定乐音间生通道的计算次序。这是因为这些计算有时可能应上述的OUTPUTREADY请求在途中中止,因此用于重要通道的计算可能事先已经完成。在下面的描述中及在图中,“C”代表由通道寄存器计算出的乐音产生通道的数量。
在这一步骤202之后,或者在前面的步骤201确定了没有新的接通数据,程序转到步骤203,在这里把对已经完成波形形成计算过程的通道数量进行计数的计数器i置为“0”,并且把通道数c和允许同时产生乐音的通道数R中较小的一个设置为变量vNum。变量vNum是一个代表要进行计算的通道数量的变量。此后,为了确定计数器i的计数值是否小于变量vNum,程序转到步骤204。如果回答是否定的,即,如果计数器i的计数值等于或大于变量vNum,则在步骤209终止波形形成计算过程。
如果回答是肯定的,即,如果在步骤204确定了计数器i的计数值小于变量vNum,则程序转到步骤205以便进一步确定是否已经出现了OUTPUT READY请求。对于肯定的确定,程序转到步骤206以便实现对通道CH(i)的音频信号的强制衰减(图16中条目(4)的操作)。如果在步骤205回答是否定的,则在步骤207对通道CH(i)完成波形形成计算过程,正如参照图18B将要详细描述的那样。在步骤206的强制衰减或在步骤207的波形形成计算过程之后,程序转到步骤208以增加数量i,然后再回复步骤204以便对下一个通道i+1重复步骤204至208的操作。
参照图18B,将描述对每个通道的波形形成计算过程的细节。通过步骤211至218的一系列操作,该波形形成计算过程形成用“i”通道的一个采样的波形数据。因此,通过重复这些操作形成用于多个采样的波形数据。在步骤210开始波形形成计算过程时,根据在执行上次波形形成计算过程时在步骤214已经计算出的读地址(readPtr)的整数部分,从波形数据存储器读出一个内插采样必须的波形数据,并根据该地址的小数部分在读出的波形数据之间进行内插计算,从而形成一个内插的采样。在下一步骤212,进行要加到DRYL缓冲器60、DRYR缓冲器61和REV缓冲器63中的数据的音量电平计算。通过对音量包络线AEG、音量VOL、调谐AM、W移动值PAN和三个通道SENDLEVEL(输送电平)的电平的参数求和实现该音量电平计算。然后,在步骤213,用对应的内插数据乘以三个通道的各个音量电平,然后把乘积结果加到各自的缓冲器中。
在此之后,程序转到步骤214以便通过加上“F”数(音调信息)产生一个用来读波形数据存储器44的新读地址read Ptr。通过以与F数相符的速率如此增加读地址read Ptr,将从波形数据存储器(波形表)中读出具有与F数相符的音调的波形。在这种情况下,如果F数带有小数部分,则能够实现较精细的音调控制。然后,程序转到步骤215以更新音量包络线AEG。在下一步骤216,确定更新的音量或振幅包络线AEG是否小于预定的切断电平。如果在步骤216的回答是否定的,则程序转到步骤217以更新LFO,然后再转到步骤218以便根据音量参数VOL和移动参数PAN执行变平操作(即内插操作)。这些步骤215、217和218的细节将在下面描述。在下一步骤219,确定是否还有其他的采样要形成,即,用于讨论通道的一帧波形采样的形成是否仍没有完成。对于在步骤219的肯定确定,即,如果仍有其他的采样要形成,则程序回复步骤211;如果回答是否定的,就意味着对于该通道的所有采样已经完成波形形成计算过程,因此在步骤221,程序就终止对该通道步骤207的波形形成计算过程。
另一方面,如果在步骤216确定了更新的音量值小于预定的切断电平,则程序转到步骤220以便执行切断过程而把该通道置于消音状态。在下一步骤221,程序终止对该通道步骤207的波形形成计算过程。
参照图25A和25B将解释上述的包络线和LFO波形。图25A表示包络线(EG)波形的典型例子,该包络线波形包括上升、下降、保持和断开段。更准确地说,一旦接通事件发生,波形振幅就以上升率(ATKrate)的斜率迅速升到最高电平(EGMAXlevel)(上升段),以下降率(DCrate)的斜率从最高电平降低到保持电平(下降段),然后在给定的时间内保持恒定的保持电平(SUSlevel)(保持段)。当接收到切断事件数据时,波形振幅以断开率(RLSrate)的斜率减小。然后,一旦振幅达到人耳听不到的切断电平时,就以衰减率(DMPrate)迅速减小以防止产生多余的噪声。
LFO(低频振荡器)波形被用来得到用来调制乐音波形的波形,事实上LFO波形是具有由斜率LFOrate确定的LFO周期的锯齿波,如图25B中所示。通过查表或利用LFO波进行算术运算,就能得到必需的调制波形如正弦波。
这些EG波形和LFO波形的变化比乐音波形取样循环要慢的多。其实,在图18B中所示的对“i”通道的波形形成计算时,对每一个采样更新振幅EG和LFO(步骤215和217)并执行音量和移动值的内插操作(步骤218),对每组较大数目的取样循环而不是对每个取样循环进行这些计算一次,因为正如所述的那样,EG波形和LFO波形的变化要比乐音波形取样循环慢的多。通过这样做,就能减小波形形成所必需的计算量。
在图20中,表示了用于“i”通道的波形形成计算过程的改进实施例,该实施例进行上述的振幅EG和LFO更新及音量和移动参数内插是每八个采样一次。然而,应该理解,这些操作的频率不必是每八个采样一次,而是可以根据处理速度或CPU的载荷选择任何一个最佳的频率。在图20中,在步骤231开始“i”通道的波形形成过程,在步骤231把用来计数采样的计数器SN复位到“0”,并在步骤232,以与上述步骤211类似的方式从波形数据存储器中读出必要的波形采样并对这些采样进行内插操作。然后,在步骤233,用对应的内插数据乘以上次执行该计算过程时在步骤250已经计算出的各个音量电平,并把乘积结果加到对应通道的缓冲器中。此后,程序转到步骤234以产生用来读波形数据存储器的新读地址。
然后,在步骤235,确定计数器SN的计数值是否是“0”或是“8”的倍数。如果在步骤235的回答是肯定的,则意味着EG和LFO计算要在现行的采样上进行,因此程序转到步骤236以更新振幅(EG)然后再转到步骤237。另一方面,如果计数器SN的计数值不是“0”而是“8”的倍数,则程序转到步骤237而不更新AEG。在步骤237,进一步确定现行的AEG值是否小于切断电平。如果回答是否定的,则程序转到步骤238以便进一步确定EG和LFO计算是否在现行的采样上进行,这类似于步骤235。如果在步骤238确定是肯定的,则在步骤239更新LFO并在步骤240在音量和移动参数上进行内插操作,然后在步骤241更新三个通道的数据音量极。这些操作完成用于现行采样的波形形成,并且程序转到步骤242。
如果在上述的步骤238回答是否定的,则意味着现行采样没有受到LFO更新操作等,因此对现行采样的波形形成已经完成,程序转到步骤242。在步骤242,确定对所有的采样是否已经完成了波形形成计算过程,即,是否还有另外的采样要处理,在步骤232和之后的上述操作在采样计数器SN增加一之后重复。
如果在上述的步骤237确定了现行的AEG值小于切断电平,则程序分支到步骤244的切断过程,在这里波形振幅以图25A的衰减率迅速减小,因此对“i”通道完成波形形成过程。
根据图20的改进实施例,步骤236和239的AEG和LFO更新操作、步骤240的音量和移动值内插操作及步骤241的音量级计算是每八个采样执行一次,结果,与图18A和18B中所示的实施例相比能充分地减轻CPU的计算载荷。
在图21中,表示了另一个用于“i”通道的波形形成计算过程的改进实施例,其中步骤261至266的操作与图20中所述的步骤231至236的相同,步骤267至269的操作与上术步骤239至241的相同,步骤270的操作与上述步骤237的相同,及步骤271至273的操作与上述步骤242至244的相同。因此,在图21中这些步骤的详细内容将不再描述以避免不必要的重复。
根据图21的改进实施例,如果在步骤265确定了不对现行采样进行EG和LFO计算,则程序跳到步骤270以便进一步确定现行AEG值是否小于切断电平。另一方面,如果在步骤265确定了对现行采样进行EG和LFO计算,则连续执行步骤266和267的AEG和LFO更新操作、步骤268的音量和移动值的内插操作及步骤269的音量级计算。
就是说,在图20中,步骤236的AEG更新操作与步骤239的LFO更新操作、步骤240的音量和移动参数插入操作及步骤241的音量级计算是分开进行的,并且在AEG更新操作之后确定现行AEG值是否小于切断电平,与该实施例不同,图21的实施例以这样的方式安排集体或连续地进行这些操作并且AEG值的确定紧接着这些连续的操作。采用这种安排,与图18B的上述实施例相比,能充分减小图21的实施例中CPU的计算载荷或计算量,尽管计算载荷稍大于图20中的实施例。
尽管通过对每组预定数目较大的采样进行一次AEG、LFO等的更新操作来安排这些实施例以减少计算量,但根据现行采样属于那个波形段,可以确定是否应该实现EG计算。例如,可以仅对在上升和下降段中的采样实行EG计算而对在保持段中的采样可以省去EG计算,因为在保持段中的采样处于恒定状态。通过如此省去EG计算,也能降低必需的计算频率。
下面,参照图22将描述AEG更新操作(图18B的步骤215、图20的步骤236和图21的步骤266)的细节。一开始AEG更新操作,就在步骤301读入EG参数(EGPARA)、振幅EG(aeg)的现行值和性能触发信息(TOUCH)。该EG控制信息典型地包括通过讨论的通道产生的乐音的各个波形段的各持续时间和目标值(EGMAXlevel和SUSlevel)及上升率(ATKrate)、下降率(DCrate)断开率(RLSrate)。
然后,在步骤302,确定现行状态是否是接通状态。如果在步骤302回答是否定的,则意味着现行状态是切断状态,并且控制转到步骤303以转移到断开段。如果现行状态是接通状态,则控制转到步骤304,在这里进一步确定现行段是否是保持段以外的其他段。如果在步骤304的回答是否定的,即,如果现行段是保持段,则意味着AEG处于恒定状态,因此立即终止AEG更新操作。另一方面,如果在步骤304确定了现行段是保持段以外的其他段,则程序转到步骤305以实现AEG更新。
由于本发明把EG值作为整数来处理,尽管以实数形式存储EG参数如每段独立EG段的速率值,所以以如下方式进行AEG更新。即,在实施例中这样进行设定如果f>0,则m=n+1,且K=RATE/(n+1);而如果f=0,则m=n,且K=RATE/n=1,其中RATE代表现行段的速率值并且n和f分别代表该速率值的整数和小数部分。通过累计值“K”,并当该累计值超过“1”一次就把整数值“m”加到现行AEG值上(aeg)上一次,更新AEG。通过这样做,能用RATE/m的概率加到小数集拢值“m”上,这就相当于通过把“m·(RATE/m)=RATE”加到现行AEG值(aeg)上更新AEG值。
为此目的,在步骤305把值“K”加到一个aeg小数寄存器AEGFRA中,该寄存器是一个用来累计所述的值“K”的寄存器。在步骤306,确定存储在该小数寄存器AEGFRA中的现行值是否已变得大于“1”。对于否定的确定,AEG更新操作结束而不更新该现行的AEG值。一旦在小数寄存器AEGFRA中的现行值超过“1”且在步骤306的确定成为肯定的,程序就转到步骤307,在这里把m=(现行段的斜率值的整数部分n+1)加到现行AEG值(aeg)上以得到新的AEG值(aeg)并用性能触发信息TOUCH乘以新的AEG值以便得到更新的AEG值。
在下个步骤308,在小数寄存器AEGFRA中的值减一以便准备“K”累计的下次执行,然后在步骤309确定AEG值(aeg)是否已经达到目标值(在上升段情况下的EGMAXlevel和在下降段情况下的SUSlevel)。如果在步骤309的回答是肯定的,则程序转移到步骤310的下一个波形段;否则,AEG更新操作结束而不进行步骤310的操作。
下面,参照图23将描述LFO更新操作(图18B的步骤217、图20的步骤239和图21的步骤267)的细节。由于本发明把LFO参数作为整数来处理,尽管它是以实数的形式存储的,所以用类似于EG值的概率计算来进行LFO更新。首先,在步骤321,读入现在存储的LFO控制数据,即,LFO速率(LFOrate)和现行的LFO相值(lfop)。
此后,类似于EG值,这样进行设定如果f>0,则m=n+1,且K=LFOrate/(n+1);而如果f=0,则m=n,且K=LFOrate/n=1,其中LFOrate代表读出的LFO速率值,并且n和f分别代表速率值的整数部分和小数部分。通过累计值“K”及每当该累计值超过“1”时把整数值“m”加到现行的LFO值(lfop)上,更新LFO值。
为此目的,在步骤322把值“K”加入一个lfop小数寄存器LFOFRA中。在步骤323,确定在该小数寄存器LFOFRA中存储的现行值是否变得已经大于“1”。对于否定的确定,LFO更新操作结束而不更新现行的LFO值。一旦在小数寄存器LFOFRA中的现行值超过“1”且在步骤323的确定成为肯定的,程序就转到步骤324,在这里把m=(LFOrate的整数部分n+1)加到现行的LFO值(lfop)上以得到新的LFO值(lfop)。
在下一步骤325,把在小数寄存器LFOFRA中的值减一以准备操作的下次执行,然后在步骤326确定现行的LFO值(lfop)是否已经达到目标值。如果在步骤326回答是肯定的,则程序把现行的LFO值(lfop)复位到“0”。这样,形成锯齿波形的LFO值,如图25B中所示。然后,在步骤328,通过根据现行的LFO相值(lfop)查表或计算得到预定LFO波形的振幅值。
上文已经给出关于本方法的最佳实施例的描述,其中产生的图25B中所示的锯齿波形的LFO值被用作调制,或根据这些锯齿波形的LFO值产生多种调制波形。
另一方面,可以通过其他的直接算术运算或者仅利用顺序地查阅预定的调制波形表得到需要调制波形的LFO值。
下面,参照图24将描述音量和移动值内插操作(图18B的步骤218、图20的步骤240和图21的步骤268)。音量和移动信息是通过用户的操作设定的。在步骤331,确定音量信息(vol)的现行值是否还没有达到用户设定的目标值。如果现行的音量信息值(vol)已经达到用户设定的目标值,则在步骤331产生否定的确定,程序就转到步骤333;如果现行的音量信息值(vol)还没有到用户设定的目标值,则在步骤331产生肯定的确定,程序就转到步骤332执行该vol数据的内插操作以把内插向的数据作为新的vol数据。
在步骤333,确定移动信息(pan)的现行值是否还没达到用户设定的目标值。如果现行的移动信息值(pan)已经达到用户设定的目标值,则在步骤333产生否定的确定,程序就终止该操作;如果现行的移动信息值(pan)还没有达以用户设定的目标值,则在步骤333产生肯定的确定,程序就转到步骤334执行移动数据的内插操作以把内插后的数据作为新的pan数据。
虽然上述的实施例是根据由输出驱动器在一帧复制结束时产生的OUTPUT READY信息启动乐音发生器任务20,当然也可以不同地安排。例如,可以在一帧复制的中间点处启动乐音发生器任务20,因为在比一帧时间短的时间内能完成条目(5)至(7)的操作。另外,当探测到置于输出驱动器中的波形数据已经减少到低于预定数量时启动任务20,而不是在一帧具有恒定时间长度的时间内启动乐音发生器任务20。
而且,本发明的波形计算方法不仅可以以软件乐音发生器的方式实现,而且还可以以在电子乐器中装上与OUTPUT READY信息相符的专用乐音发生设备的方式来实现。
况且,上述的形成的波形数据和外部输入波形数据的合成、及在波形形成计算过程的中间阶段的外部输入波形数据的插入不仅适用于软件乐音发生器,而且还适用于装在电子乐器内的专用乐音发生设备。
而且,尽管已经描述的实施例是按所述的次序依次进行条目(5)、(6)、(7)、(1)、(2)和(3)的操作,但也可以按任何其他的次序进行这些操作。
此外,条目(3)的上述波形计算操作可以划分成多个部分分开进行,而不是像在上述的实施例中那样连续地进行。
况且,尽管已经把最佳实施例描述成在MIDI事件中断过程中集体地执行乐音分配和乐音发生器寄存器的设定,但是仅可以在中断过程中执行乐音分配,或者中断过程可以进行操作以把发生的MIDI事件读入缓冲器中。在这种情况下,可以在乐音发生器处理时进行乐音分配和乐音发生器寄存器的设定,而不是在MIDI事件中断过程中进行。另外,可以在同上述MIDI事件中断过程分开的计时器中断过程中进行。
而且,对于任何其他的演奏信息处理都可以进行上述的中断过程,而不是限于乐音分配和读入操作。
此外,本发明的乐音产生方法不应该理解为仅限于基于波形存储器的方法,而该方法可以基于任何其他原理,如FM(调频)、物理方式或ADPCM。
就已经描述的本发明而论,在任选的通用操作系统的同时,能以稳定的方式执行波形形成计算。
而且,根据来自波形复制部分的请求,本发明方便的允许迅速输出输出波形数据。
而且,就本发明而论,允许软件乐音发生器根据外部的输入波形数据执行音色控制过程。
而且,由于与演奏信息的出现相对应而增加的处理量,使乐音发生器过程不能执行到足够的程度,即使在这种场合,本发明也能用一些其他的时间来弥补不足,因此能有效地稳定乐音发生器处理。
况且,能把演奏信息增加的处理量分散到空闲时间,因而能有效地避免处理量的暂时增加。
而且,通过间断进行EG波形和LFO计算,本发明能减小波形形成必需的计算量,并因而有效地减小了用于波形形成的处理载荷。
权利要求
1.一种音调产生方法,包括第一步骤,接收产生一个或多个指定的音调的一个或多个产生指令;第二步骤,响应所述产生指令,将指定的音调分配给多个音调产生通道中的相应音调产生通道,并将用于指定的音调的控制数据写入与所述指定的音调已被分配给的相应音调产生通道对应的通道寄存器中;第三步骤,顺序发出计算开始指令;第四步骤,响应每个所述计算开始指令,对多个音调产生通道执行音调形成计算,以便根据存储在所述通道的所述通道寄存器中的控制数据,以集中方式对多个音调产生通道形成多个采样的波形数据;第五步骤,混和由所述第四步骤对多个音调产生通道形成的多个采样的波形数据,以便形成多个采样的混和采样数据;以及第六步骤,缓冲用于所述多个采样的每一个的混和采样数据并给予其一个预定的效果。
2.如权利要求1所述的音调产生方法,还包括第七步骤,用于在每个采样周期将对于多个采样周期的混和采样数据的多个采样转换成模拟信号。
3.如权利要求1所述的音调产生方法,其中所述第四步骤顺序地对相应音调产生通道执行音调形成计算,以便在执行所述音调形成计算之前,根据从所述通道寄存器中读出的控制数据,以算术方式对多个采样周期形成波形数据的多个采样。
4.如权利要求1所述的音调产生方法,其中在所述第四步骤中,在形成所述波形数据之后,把控制数据写入所述通道寄存器中。
5.如权利要求1所述的音调产生方法,其中所述第四步骤执行计算以对音调产生通道之一集中地形成多个采样的波形数据,然后执行计算以对另一个音调产生通道集中地形成多个采样的波形数据,由此对各个音调产生通道顺序执行音调形成计算,并且其中所述第五步骤在能够以混合采样数据形成于其中的方式缓冲多个采样的缓冲器的选定位置,累计由所述第四步骤顺序形成的各个音调产生通道的多个采样中的每个对应采样。
6.如权利要求1所述的音调产生方法,其中所述第三步骤还包括以预定的间隔发出所述计算开始指令。
7.如权利要求1所述的音调产生方法,其中要由所述第二步骤写入所述通道寄存器中的所述控制数据根据所述产生指令而产生。
8.如权利要求1所述的音调产生方法,其中所述第四步骤根据预定的条件执行音调形成计算,同时对于与其他通道相比,当前产生具有较高音量的音调的至少一个通道给予优先级。
9.如权利要求1所述的音调产生方法,其中还包括用于设置一个预定的限制周期的步骤,以及用于确定对于所有的指定音调产生通道,音调形成计算是否都将在预定的限制周期内完成的步骤,并且如果确定不是对于所有的音调产生通道,音调形成计算都将在预定的限制周期内完成,则指令音调应当在至少一个音调产生通道内被抑制。
10.如权利要求1所述的音调产生方法,其中还包括根据要在指定的音调产生通道中产生的音调的相应重要性,确定在指定的音调产生通道上的计算处理顺序的步骤,并且其中所述第四步骤根据由所述确定步骤确定的计算处理顺序对指定的音调产生通道执行音调形成计算。
11.如权利要求1所述的音调产生方法,其中所述第四步骤根据预定的计算处理顺序对每个指定的音调产生通道执行音调形成计算,并且其中当由所述第四步骤进行的音调形成计算可能不能在预定时间内完成且由所述第五步骤输出的采样数据将中断时,所述第四步骤在正在按照计算处理顺序在通道之一上执行音调形成计算的时间点上断开音调形成计算,以防止由所述第五步骤输出的采样数据被中断。
12.如权利要求11所述的音调产生方法,其中还包括对音调形成计算应当被中断的所述一个通道给予快速衰减的包络,由此终止所述一个通道的音调产生。
13.如权利要求11所述的音调产生方法,其中到要对所述一个通道中断音调形成计算的时刻之前,已经在按照计算处理顺序位于所述一个通道之前的一个或多个其他通道中完成用于形成多个采样的波形数据的计算,并且所述第五步骤对于一个或多个其他通道输出多个采样的所述波形数据的混和采样数据。
14.如权利要求1所述的音调产生方法,其中还包括如下步骤当在由所述第四步骤执行音调形成计算期间由所述第一步骤接收到产生指令时,执行控制,以暂时停止所述第四步骤的音调形成计算,执行用于输入接收的产生指令的预定输入过程,并且在所述输入过程之后,恢复所述第四步骤的音调形成计算。
15.如权利要求1所述的音调产生方法,其中还包括第七步骤,执行一个预定的操作系统;以及第八步骤,响应所述第六步骤的请求,在所述第一至第五步骤和所述第七步骤之间进行任务切换,以及其中所述第一步骤根据来自在所述预定操作系统上执行的应用程序的指令接收所述产生指令。
16.如权利要求1所述的音调产生方法,还包括第七步骤,响应每个计算开始指令,在所述第四步骤和所述第五步骤之前执行所述第六步骤,以及其中所述第六步骤缓冲响应在所述计算开始指令之前的其它计算开始指令,已经由所述第四步骤和所述第五步骤形成并混和的新的混和采样数据。
17.如权利要求1所述的音调产生方法,还包括第七步骤,输入对应于预定的周期的外部波形数据,其中所述第五步骤混和输入的外部波形数据和由所述第四步骤对多个音调产生通道形成的多个采样的波形数据,以便形成所述混和采样数据。
18.如权利要求1所述的音调产生方法,其中所述控制数据包括用于控制音调的参数,并且在要由所述第四步骤形成用于多个采样的所述波形数据时,所述参数的值针对多个采样中的每一个或多个而改变。
19.如权利要求18所述的音调产生方法,其中所述第四步骤包括以间歇方式执行音调参数计算操作的步骤。
20.如权利要求1所述的音调产生方法,其中所述第三步骤以可变的时间点发出所述计算开始指令,并且所述第四步骤在所述可变时间点的对应可变时间点上,在相应于所述计算开始指令的多个计算周期中的每个计算周期期间,形成多个采样周期的波形数据的多个采样。
21.一种音调产生设备,包括第一装置,用于接收产生一个或多个指定的音调的一个或多个产生指令;第二装置,用于响应所述产生指令,将指定的音调分配给多个音调产生通道中的相应音调产生通道,并将用于指定的音调的控制数据写入与所述指定的音调已被分配给的相应音调产生通道对应的通道寄存器中;第三装置,用于顺序发出计算开始指令;第四装置,用于响应每个所述计算开始指令,对多个音调产生通道执行音调形成计算,以便根据存储在所述通道的所述通道寄存器中的控制数据,以集中方式对多个音调产生通道形成多个采样的波形数据;第五装置,混和由所述第四装置对多个音调产生通道形成的多个采样的波形数据,以便形成多个采样的混和采样数据;以及第六装置,用于缓冲用于所述多个采样的每一个的混和采样数据并给予其一个预定的效果。
全文摘要
对于给定的乐音发生通道,用算术方法集体地形成对应于多个取样循环的波形试样数据。一旦把性能信息如MIDI事件数据供给来自在应用程序的乐音发生器MIDI驱动器,该MIDI驱动器就根据输入MIDI信号把新的乐音发生分配给乐音发生器任务的指定乐音发生通道。该乐音发生器任务利用乐音控制参数用算术方法形成乐音波形数据并把该乐音波形数据送给数/模转换器作用的CODEC电路。利用优先权多任务管理程序定序和执行该程序和通用的操作系统以系统开销。
文档编号G10H1/18GK1763839SQ20051011617
公开日2006年4月26日 申请日期1996年5月17日 优先权日1995年5月19日
发明者田邑元一 申请人:雅马哈株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1