CN1838234A - 乐音合成方法和用于合成乐音的设备 - Google Patents

乐音合成方法和用于合成乐音的设备 Download PDF

Info

Publication number
CN1838234A
CN1838234A CN 200610073560 CN200610073560A CN1838234A CN 1838234 A CN1838234 A CN 1838234A CN 200610073560 CN200610073560 CN 200610073560 CN 200610073560 A CN200610073560 A CN 200610073560A CN 1838234 A CN1838234 A CN 1838234A
Authority
CN
China
Prior art keywords
vector data
waveform
data
vector
memory storage
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.)
Granted
Application number
CN 200610073560
Other languages
English (en)
Other versions
CN1838234B (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.)
Yamaha Corp
Original Assignee
Yamaha 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
Priority claimed from JP2001086165A external-priority patent/JP3674526B2/ja
Priority claimed from JP2001086166A external-priority patent/JP3630107B2/ja
Priority claimed from JP2001086163A external-priority patent/JP3649141B2/ja
Application filed by Yamaha Corp filed Critical Yamaha Corp
Publication of CN1838234A publication Critical patent/CN1838234A/zh
Application granted granted Critical
Publication of CN1838234B publication Critical patent/CN1838234B/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

本发明提供乐音合成方法和用于合成乐音的设备。该方法包括如下步骤:接收沿时间轴连续播放乐音的包流,所述包流包含先行包和接续包,每个包均包含有效指定在第一存储装置中存储的矢量数据的识别信息;根据包含在先行包中的识别信息,预测接续包中的矢量数据;在接收接续包之前将预测的矢量数据从第一存储装置传输到第二存储装置,以便在合成之前将预测的矢量数据高速缓存到该第二存储装置中;以及当接收到接续包并且包含在接续包中的识别信息命中高速缓存的矢量数据时,从第二存储装置中检索出高速缓存的矢量数据并由此合成乐音。通过本发明可以用丰富的表现力实时播放波形合成声音数据,并降低对低速存储装置例如硬盘等进行存取的频率。

Description

乐音合成方法和用于合成乐音的设备
本发明是申请号为02108025.9、申请日为2002年3月22日、发明名称为“通过借助预测完成的波形高速缓存实现音乐合成”的申请的分案申请。
技术领域
本发明涉及一种声音数据传输方法,声音数据传输设备,和根据从较低速度的存储介质,例如,以较低存取速率存储数据的硬盘中读取的信息,产生乐音、语音和任何其他声音的设备程序。更确切地说,本发明涉及波形的产生或合成,所产生或合成的波形能根据演奏者不同的演奏风格或常规乐器的发音特性准确地表现乐音的音调。本发明不仅广泛应用于电子乐器,而且还适用于能够产生乐音、语音或所有其他声音的所有领域中的装置、设备或方法。所述装置、设备包括例如机械乐器、计算机、电子游戏设备和其它多媒体装置。在本说明书中,乐音波形并不限于纯音乐感觉的波形,还可以包括语音或其它任何声音的波形。
背景技术
“波形存储器读取”技术是众所周知的技术。该技术能够存储用任何编码系统例如PCM(脉冲编码调制)、DPCM(差分PCM)和ADPCM(自适应差分PCM)编码的波形数据(例如波形采样数据),并根据所需要的音乐定音读取存储的数据,以产生或合成乐音。此外,公知的还有各种类型的“波形存储器读取系统”技术。可以用最传统的“波形存储器读取系统”技术产生从发音期开始到发音期结束的单音波形。一个实例是存储从发音期开始到发音期结束的整个声音波形的波形数据。另一个实例是用复杂变化在声音硬起音(attack)部分,存储部分波形数据,和用少变化在保持部分存储连续部分的特定环状波形(loop waveform)。在本说明书中,术语“环状波形”指的是在一个环状中反复读取的波形。
公知的作为存储波形数据的装置有ROM、RAM、硬盘、CD-ROM等。硬盘和CD-ROM每单位存储容量的单位价格较低,并且,适合存储大量数据。然而,硬盘和CD-ROM的存取速度较慢且不稳定,不能在刚好输出乐音信号的时刻瞬间读取所需波形数据。为此,而提出了以下技术。
日本待审专利申请公开号平成6-308964(对应于美国专利5463183)中公开了预先向RAM传送存储在硬盘中的多个波形数据起始部分的技术。即,当给出发声指令时,开始执行从硬盘中先行读取合适波形的数据后续部分的操作,并且同时播放先前存储在RAM中的数据起始部分。在完成了播放数据开始部分的操作后,播放波形数据的后续部分。
日本待审专利申请公开号昭63-181188公开了通过顺序读取从而播放波形数据的技术。将顺序发声的波形数据预先定义为序列数据。该技术预定了与时序对应的每个波形数据的开始读取时间,从而使启动时间早于添加音符时刻的时间。
发明内容
然而,根据日本待审专利申请公开号平成6-308964的技术,需要预先向RAM传送所有波形数据的起始部分,因此妨碍了精密RAM的有效使用。由于按照日本待审专利申请公开号昭63-181188的技术,是以非实时产生乐音信号的假设为基础的,所以在实时提供音乐序列数据的情况下不可能应用该技术。
本发明是在考虑了上述问题的情况下做出的。因此,本发明的第一个目的是提供一种声音数据传输方法,声音数据传输设备,和有效地以及大量地使用RAM和同时使用硬盘等装置实时产生乐音信号用的设备程序。
按照日本待审专利申请公开号平成6-308964所述技术,需要预先向RAM传输所有波形数据的开始部分。按照日本待审专利申请公开号昭63-181188所述的技术,总是要求硬盘存取每一个事件,因此,增加了来自硬盘的噪音并会缩短硬盘的寿命。此外,硬盘频繁存取会消耗应分配给其他程序的额外资源。
本发明是在考虑了上述问题的情况下做出的。因此,本发明的第二个目的是提供一种声音数据传输方法,声音数据传输设备,和用于减少硬盘不必要存取的设备程序。
通常,“波形存储器读取系统”技术存储的是一种从声音发声期开始到发声期结束这一完整波形的波形数据,或存储作为硬起音部分的一种声音中的分音波形数据。这种技术必须存储大量与各种演奏风格(或发音)对应的不同波形数据,因此,需要大储存容量来存储这些不同的波形数据。
上述用于存储完整波形之波形数据的系统能如实地表达因各种演奏风格(或发音)特别是常规乐器产生的音调(timbre)。然而,这种系统可以仅根据存储的波形数据来简单地播放音乐,并提供有限的可控性和编辑性。例如,很难根据音乐特性数据提供与所需演奏风格(或发音)相应的例如波形数据之时间轴控制的特征控制。
本发明是在考虑了上述问题的情况下做出的。因此,本发明的第三个目的是提供一种波形合成方法,声音数据传输设备,和能够容易、简单和实时产生适合各种演奏风格(或发音)的高质量波形数据的设备程序。
按照日本待审专利申请公开号平成6-308964所述技术,需要预先向RAM传输各种音调的全部波形数据的起始部分,因此不利于RAM的充分利用。此外,按照日本待审专利申请公开号昭63-181188所述的技术,总是要求硬盘存取每一个事件,因此,增加了来自硬盘的噪音,并会缩短硬盘的寿命。此外,硬盘频繁存取会损失机器的有限资源。
本发明是在考虑了上述问题的情况下做出的。因此,本发明的第四个目的是提供一种声音数据传输方法,声音数据传输设备,和节约硬盘存取等的设备程序。
为了实现上述第一目的,本发明的特征在于具备以下构成特点。同时应注意括号内的实例。
按照本发明第一方案所提及的构成特点,涉及声音数据传输方法,该方法使用了用于存储乐音波形的声音数据(矢量数据)的低速存储装置(硬盘109),和用于高速缓存声音数据的高速存储装置(高速缓冲存储器44),并将存储在低速存储装置中的一部分声音数据输送到高速存储装置。所述方法的特征在于具有:接收音调类别(specification)(MIDI程序变化信息)的音调类别接收程序(process),所述音调类别与将要传输到高速存储装置的声音数据有关;预测候选声音数据的声音数据预测程序(步骤S30),所述候选声音数据是指后面将根据接收到的音调类别指定的数据;和将预测的候选声音数据从低速存储装置传输到高速存储装置的程序(步骤S43)。
优选的是,存储在低速存储装置中的声音数据包括与发声起始部分(硬起音部分)对应的第一声音数据和与除发声开始部分之外的后续部分(主体部分)对应的第二声音数据,而按照音调类别预测的声音数据是第一声音数据。所述方法的特征在于还具有:接收任何第一类声音数据类别的第一类声音数据类别接收程序;预测候选的第二声音数据的第二声音数据预测程序(步骤S30),所述候选的第二声音数据是指随后将根据第一声音数据类别指定的第二声音数据;和用于将预测的第二声音数据从低速存储装置传送到高速存储装置的程序(程序43)。
优选的是,存储在低速存储装置中的声音数据还包括在第一和第二数据之后使用的第三声音数据(释放(release)部分或接合部分)。所述方法的特征在于还具有:接收所有第二声音数据类别的第二类声音数据类别接收程序;预测候选的第三声音数据的第三声音数据预测程序(步骤S33),所述候选的第三声音数据是指随后将根据第二声音数据类别指定的第三声音数据;和用于将预测的第三声音数据从低速存储装置传送到高速存储装置的程序(程序43)。
优选的是,本发明所述声音数据传输方法还具有提供识别信息(设要素dwStatus为‘USED’)的程序,在接收任何声音数据类别时,这些信息都保存在高速存储装置中,而且这些信息能指示出释放未经预测的候选声音数据的可能性。
优选的是,本发明所述声音数据传输方法还具有,在音调类别接收程序之前,预先将每个音调的基本声音数据(替换页)传送到高速存储装置的程序。当未将在第一、第二、或第三数据类别接收程序中指定的声音数据传送到高速存储装置中时,用基本声音数据代替指定的声音数据。
为了实现上述第二目的,本发明的特征在于具备以下构成特点。同时应注意括号内的实例。
按照本发明第二方面的构成特点,提供一种声音数据传输方法,该方法使用了用于存储音乐波形声音数据(矢量数据)的低速存储装置(硬盘109),和用于高速缓存声音数据的高速存储装置(高速缓冲存储器44),并将存储在低速存储装置中的一部分声音数据输送到高速存储装置以便进行波形合成。该方法的特征在于具有:准备将要用到的确定的声音数据或准备将要用到的预测声音数据的准备程序(把矢量ID或包从预测控制部分41或演奏风格合成部分101C施加到预取部分42);通过使用预先已命令准备并存储在高速存储装置中的声音数据,发出开始合成命令的合成开始命令程序;当未将命令准备的声音数据存储在高速存储装置中时,将声音数据从低速存储装置传送到高速存储装置,并根据传送的声音数据在初始值上设定计数值(要素dwCount)的传输程序(步骤S42和S43);当已将命令准备的声音数据存储在高速存储装置中时,增加声音数据计数值(要素dwCount)的增加程序;根据来自合成开始命令程序的开始命令,使用声音数据开始进行波形合成并减去(FILLED状态:S64中的预取)与所用声音数据有关的计数值(要素dwCount)的波形合成程序;检测存储在高速存储装置中的声音数据,而且根据与每个声音数据对应的计数值预定在下一个开始命令中不使用的声音数据,并将检测的声音数据设定成可擦除状态(当要素dwCount达到“0”时,将FILLED状态S64转到USED状态S63)的设置程序。
优选的是,本发明所述声音数据传输方法的特征在于,还具有在播放开始时刻之前从事件序列中(音乐演奏数据),预取事件数据的预取程序,其中准备程序根据预取的事件数据确定与准备命令有关的声音数据,从而使多个使用同样声音数据的事件数据共用传输程序。
优选的是,本发明的声音数据传输方法的特征在于还具有设定播放开始时间的程序,它用从提供事件数据时刻开始的延迟时间设定播放开始时间。通过这种方式,准备程序能够根据在延迟时间内连续提供的事件数据确定与准备命令有关的共享声音数据,因此,使用共享声音数据的多个事件数据共用传输程序。
优选的是准备程序根据单个事件数据执行相同声音数据适合的多个准备命令;而且波形合成程序在将声音数据作为单个事件数据使用时用来确定计数值。
为了实现上述第三目的,本发明的特征在于具有以下构成特点。同时应注意括号内的实例。
按照本发明第三方面所述的构成特点,涉及一种乐音合成方法,借助于第一存储装置和第二存储装置合成乐音,其中,该第一存储装置存储代表各种乐音的波形的矢量数据,所述的第一存储装置按第一存取速率存取,该第二存储装置以快于该第一存取速率的第二存取速率高速缓存该矢量数据,用于迅速提供代表将要合成的乐音波形的矢量数据,该方法包括以下步骤:接收沿时间轴连续播放乐音的包流,所述包流包含先行包和接续包,每个包均包含有效指定在该第一存储装置中存储的矢量数据的识别信息;根据包含在先行包中的识别信息,预测接续包中的矢量数据;在接收接续包之前将预测的矢量数据从该第一存储装置传输到该第二存储装置,以便在合成之前将预测的矢量数据高速缓存到该第二存储装置中;以及当接收到接续包并且包含在接续包中的识别信息命中高速缓存的矢量数据时,从该第二存储装置中检索出高速缓存的矢量数据并由此合成乐音。
优选的是,本发明所述波形合成方法的特征在于,当未命中高速缓存的矢量数据时,将由包含在接续包中的识别信息指定的矢量数据从该第一存储装置传输到该第二存储装置,以确保乐音的连续合成。
优选的是,本发明所述波形合成方法的特征在于,该第一存储装置存储的矢量数据分成第一矢量数据和第二矢量数据,所述第一矢量数据代表对应于乐音前部的起音波形,而第二矢量数据代表对应于同一乐音后部的主体波形,从而所述预测步骤将预测代表主体波形的第二矢量数据能否与由包含在先行包中的第一矢量数据指定的起音波形相接。
优选的是,本发明所述波形合成方法的特征在于,该第一存储装置还存储第三矢量数据,该数据代表的是乐音主体波形之后的释放波形或连接波形,从而所述预测步骤将预测代表释放波形或连接波形的第三矢量数据能否与由包含在先行包中的第一矢量数据指定的主体波形相接。
优选的是,本发明所述波形合成方法的特征在于,还包括如下步骤:使没有被命中的高速缓存矢量数据成为可释放状态,以便能够在接收下一包之前将处于可释放状态的高速缓存矢量数据从该第二存储装置中删除。
优选的是,本发明所述波形合成方法的特征在于,该第一存储装置设置成硬盘驱动器的形式,而该第二存储装置设置成随机存取存储器芯片的形式。
优选的是,本发明所述波形合成方法的特征在于,还包括如下步骤:在该第二存储装置中保持在对应于先前包的合成中使用的矢量数据,以便在对应于接续包的另一次合成中再次使用所述数据。
优选的是,本发明所述波形合成方法的特征在于,所述传输步骤周期性地传输足以连续生成乐音的预定量的矢量数据。
优选的是,本发明所述波形合成方法的特征在于,还包括如下步骤:检测该第二存储装置何时没有足够的空白区域来接收将要传输到该第二存储装置中的新矢量数据,并且从该第二存储装置中释放旧矢量数据以产生用于接收新矢量数据的空白区域。
优选的是,本发明所述波形合成方法的特征在于,所述矢量数据用于合成具有预定长度的乐音波形,所述矢量数据包含用于合成预定波形长度前部的有实义的矢量数据以及用于合成预定波形长度保持部分的无实义的矢量数据;其中相比释放有实义的矢量数据,所述释放步骤更易于释放无实义的矢量数据。。
为了实现上述第四目的,本发明的特征在于具有以下构成特点。同时应注意括号内的实例。
按照本发明第四方面所提及的构成特点,涉及声音数据传输方法,该方法使用了用于存储乐音波形的声音数据(矢量数据)的低速存储装置(硬盘109),和用于高速缓存声音数据的高速存储装置(高速缓冲存储器44),并将存储在低速存储装置中的一部分声音数据输送到高速存储装置以便进行波形合成。本发明方法的特征在于具有:根据发声命令(加音符)将声音数据从低速存储装置传送到高速存储装置的传输程序(步骤S43);和在使用了数据合成波形后将声音数据以可在将来使用的状态保留在高速存储装置内的保持程序(设要素dwStatus为‘USED’)。
优选的是,传输程序将声音数据从低速存储装置传送到高速存储装置中有特定容量的多个单元内(存储块的多个单元内)。
优选的是,传输程序包括:检测是否有足够的空间存储最新传送到高速存储装置的声音数据的程序;在没有足够的空白空间的情况下,释放先前保留的声音数据,以建立空白区的程序(设要素dwStatus为‘USED’);和将最新传输的声音数据传送到空白区的程序。
优选的是,用声音数据对每个指定的部分(模式)进行波形合成,和所述方法的特征在于还包括:设定高速存储装置中数据管理方式的程序,该程序使得在每部分开始时使用的声音数据与其他声音数据相比不容易释放(有这种变化:在链接表开始之前添加要高速缓存的矢量数据和将其他矢量数据插在链接表中间)。
本发明的又一目的是提供一种乐音合成方法。该方法借助于第一存储装置和第二存储装置合成乐音,其中,该第一存储装置存储代表各种乐音的波形的矢量数据,所述的第一存储装置按第一存取速率存取,该第二存储装置以快于该第一存取速率的第二存取速率高速缓存该矢量数据,用于迅速提供代表将要合成的乐音波形的矢量数据,该方法包括以下步骤:接收沿时间轴连续播放乐音的包流,每个包均含有:识别信息,该信息可有效识别存储在该第一存储装置中用于合成的矢量数据;以及时间信息,该信息可有效指定沿该时间轴合成的时间;在规定的时间之前,将识别的矢量数据从该第一存储装置传输到该第二存储装置,由此可在合成之前,将识别出的矢量数据及时地高速缓存在该第二存储装置中;和当达到规定的时间时,从该第二存储装置中检索高速缓存的矢量数据,以便将由检索到的矢量数据定义的波形合成为乐音。
上述方法还包括以下步骤:判断是否已将由接收到的包识别出的矢量数据高速缓存到该第二存储装置中,从而在判断步骤判断该第二存储装置还没有存储所识别的矢量数据时,在传输步骤中对所识别的矢量数据进行传输。
上述方法还包括以下步骤:检测该第二存储装置何时没有足够的空闲区域来接收将要传输到该第二存储装置中的新矢量数据,以及从该第二存储装置中释放旧矢量数据,以产生接收新矢量数据的空闲区域,所释放的旧矢量数据包括已在先前的合成中用过的矢量数据和在先前的合成中一直未用的矢量数据。
上述方中使用矢量数据合成具有预定长度的乐音波形,所述矢量数据包括用于合成预定波形长度前部的有实义的矢量数据,和用于合成预定波形长度剩余部分的无实义的矢量数据,其中所述释放步骤释放无实义的矢量数据比释放有实义的矢量数据更容易。
上述方法中,该第一存储装置设置成硬盘驱动器的形式,而该第二存储装置设置成随机存取存储器芯片的形式。
上述方法还包括以下步骤:对应于先行包保持合成中使用的矢量数据,以便在另一次合成中,对应于接续包再次使用所述数据。
上述方法中,所述传输步骤周期性地传输足以成连续方式传输的预定数量的矢量数据。
上述方法还包括以下步骤:指出用于在合成时间之前准备合成乐音的矢量数据,指出的矢量数据包括表示已确定或预测将在合成中使用的波形的矢量数据;在所指出的矢量数据还没有被高速缓存时,把具有相关计数的所指出的矢量数据从该第一存储装置传输到第二存储装置中,用于高速缓存,其中所述相关计数被设定为初始值;在已经高速缓存了所指出的矢量数据时,递增所指出的矢量数据的相关计数的当前值;在到达合成时间时,利用所指出并高速缓存的矢量数据进行乐音合成;然后,递减在合成中使用的所指出并高速缓存的矢量数据的相关计数的当前值;以及根据所述相关计数的当前值检测在该第二存储装置中的可释放的矢量数据。
上述方法中,该指出步骤根据在接收到的包中所含的识别信息指出矢量数据,从而对于多个接收到的包可以共同指出矢量数据,而该传输步骤将共同指出的矢量数据一次传输到该第二存储装置。
上述方法还包括以下步骤:设定在包的接收和相应乐音合成之间的时间间隔,从而使所述指出步骤能够在设定的时间间隔内指出对于多个接收到的包共有的矢量数据。
上述方法中,所述指出步骤根据在接收到的包中所含的识别信息两次或更多次地指出同一矢量数据,所述递增步骤在每次指出同一矢量数据时使高速缓存的矢量数据的相关计数的当前值递增,而所述递减步骤在每次使用同一矢量数据合成乐音时,使高速缓存的矢量数据的相关计数的当前值递减。
本发明的又一目的是提供一种用于合成乐音的设备。该设备包括:第一存储装置,其存储代表各种乐音波形的矢量数据,所述第一存储装置可以第一存取速率进行存取;第二存储装置,其以快于该第一存取速率的第二存取速率高速缓存矢量数据,以便迅速提供代表将要合成的乐音波形的矢量数据;和处理器,其控制矢量数据从该第一存储装置传输到该第二存储装置并且从该第二存储装置中获得用于乐音合成的矢量数据,其中该处理器包括:接收部分,其接收沿时间轴连续播放乐音的包流,所述包流包含先行包和接续包,每个包中均包含有效指定在该第一存储装置中存储的矢量数据的识别信息;预测部分,其根据包含在先行包中的识别信息预测接续包中的矢量数据;传输部分,其在接收到接续包之前,将预测的矢量数据从该第一存储装置传输到该第二存储装置,以便在合成之前将预测的矢量数据高速缓存到该第二存储装置中;以及检索部分,其在接收到接续包并且包含在接续包中的识别信息命中高速缓存的矢量数据时,从该第二存储装置中检索出高速缓存的矢量数据并由此合成乐音。
上述设备中,该控制器还包括:指出部分,用于指出准备乐音合成的矢量数据,所指出的矢量数据包括合成时使用的代表确定波形或预测波形的矢量数据;指令部分,用于根据矢量数据指示合成的开始,所述矢量数据高速缓存在该第二存储装置中,而且可以包含或不包含所指出的矢量数据;另一传输部分,在没有高速缓存所指出的矢量数据时,将具有相关计数的所指出的矢量数据从该第一存储装置传输到该第二存储装置,所述相关计数被设定为初始值;递增部分,用于在已经高速缓存了所指出的矢量数据时,使所指出的矢量数据的相关计数的当前值递增;执行部分,响应于开始指令,利用所指出并高速缓存的矢量数据执行乐音的合成;递减部分,使在合成中使用的、所指出并高速缓存的矢量数据的相关计数的当前值递减;以及检测部分,按照相关计数的值,检测在该第二存储装置中可释放的矢量数据。
上述设备中,该控制器还包括:保持部分,其对应于先行包保持在一合成中使用的矢量数据,用于对应于接续包在另一合成中再次使用。
附图说明
图1是按照本发明所述波形发生器硬件结构范例的方框图;
图2是表示在波形发生器内执行的“波形数据库建立程序”的实施例流程图;
图3表示产生与演奏风格模式相应的实际波形的元器件实例示意图;
图4是表示“根据数据库完成乐音合成程序”的实例流程图;
图5是与图4所述一样,以给定的硬件形式表示完成相同波形合成程序的实施例方框图;
图6是表示在上述演奏合成部分中演奏合成程序的流程方框图;
图7是详细表示在演奏合成部分中完成的演奏合成程序的实施例流程图;
图8是用于解释当演奏风格模式与振幅分量或定音分量相对应时的链接程序示意图;
图9是用于说明当硬起音部分的波形与主体部分波形相接时波形变薄的示意图;
图10是用于说明当主体波形与释放波形相接时波形变薄的示意图;
图11是用于说明当转弯的硬起音波形与释放波形相接时波形变薄的示意图;
图12是用于说明当正常的硬起音波形与具有环形部分的释放波形相接时波形变薄的示意图;
图13是用于说明当一个演奏风格模式结束而在随后的另一个演奏风格模式启动前的演奏风格模式所波形连接示意图;
图14是用于说明在演奏合成区内产生的包流示意图;
图15表示在波形合成区内工作的所有结构示意图;
图16是用于简要表示所有波形合成的过程方框图;
图17是用于解释矢量加载器的方框图;
图18是用于解释矢量运算器的方框图;
图19是用于解释矢量记录器的方框图;
图20表示矢量数据之数据结构的实施例示意图;
图21表示在乐谱注释部分101B内建立的音乐演奏数据的内容示意图;
图22表示把包从演奏合成部分送到波形合成部分的时间示意图;
图23是表示高速缓存控制部分所有结构的方框图;
图24是用于在预测控制部分内进行预测运算的状态过渡图;
图25是表示在预取部分完成的加载过程的流程图;
图26是表示在预取部分完成的数据接收过程的流程图;
图27表示构成高速缓存页面的操作示意图;
图28是演奏合成部分和波形合成部分之间的信号流向图;
图29表示在高速缓冲存储器中页面标题的链接结构示意图;
图30是高速缓冲存储器内页面之间的状态过渡图;和
图31是表示上述实施例之时间控制的时基图。
具体实施方式
1.按照本发明实施例所述的硬件结构
下面将参照附图更详细地描述本发明的实施例。
图1是表示本发明所述波形发生器硬件结构的范例方框图。该结构实例使用了一台计算机。在该结构中,计算机执行指定的程序(软件)以实现本发明所述的波形发生。当然,波形发生并不限于计算机软件的形式,还可以用由DSP(数字信号处理器)处理的微程序的形式。此外,波形发生并不限于这些程序种类的形式。而是还可以采用的结构包含分离电路、集成电路、大规模集成电路等给定的硬件形式。波形发生器可以应用于各种产品,例如电子乐器、卡拉OK设备、电子游戏设备、其他多媒体装置、个人计算机等。
在图1所示的硬件结构实例中,CPU101作为计算机的主要控制部分。通过总线BL(数据或地址总线等),将CPU101与只读存储器(RAM)102、随机存取存储器(RAM)103、面板开关104、面板显示器105、驱动器106、波形输入部分107、波形输出部分108、硬盘109、和通信接口111相连。CPU101根据指定的程序完成例如“建立波形数据库”、“乐音合成(以所建数据库为基础的软件声源)”等处理(下面将进行描述)。这些程序由网络通过通信接口111或例如CD、MO等安装在驱动器106上的外部存储媒体106A提供并存储在硬盘109中。在执行时,由硬盘109将程序加载到RAM103上。此外,可以优选将程序记录在ROM102中。ROM102存储由CPU101执行或参照各种程序、数据等。RAM103作为工作存储器使用,用于暂时存储有关音乐演奏的各种信息,或者暂时存储CPU101执行程序时产生的各种数据。RAM103还用作存储当前执行的程序或相关数据的存储器。赋予RAM103中的特定地址区域以相关的功能,并用作寄存器、标志、表格、存储器等。面板开关104的结构包括各种用于发布指令以便对乐音进行采样、对采样的波形数据等进行编辑、和输入各种信息等的运行装置。运行装置包括用于输入数字数据的数字键座、用于输入字符数据的键盘、面板开关等。此外,最好还包括各种用于选择、设定或控制定音、音调、效果等的运行装置。面板显示器105显示从面板开关104输入的各种信息或采样波形数据等。例如,用液晶显示器(LCD)、CRT等作为面板显示器150。
波形输入部分107包括用于将模拟乐音信号(外部波形输入信号,例如,从麦克风输入的信号)转换(采样)成数字式数据的A/D转换器。把数字波形数据输入到RAM103或硬盘109中作为原始波形数据(该波形数据作为要产生的波形数据的资料)。CPU101进行“建立波形数据库”的处理以便根据输入的原始波形数据建立按照本发明所述的“波形数据库”。此外,CPU101进行“以数据库为基础的乐音合成”的处理,以便利用“波形数据库”形成与音乐演奏信息相对应的适合任何乐音信号的波形数据。当然,可以同时产生多个乐音信号。通过总线BL将适合产生乐音信号的波形数据送到波形输出部分108并适当缓冲。波形输出部分108根据指定的输出采样频率输出缓冲的波形数据,对数据进行数一模转换,并将其发送到发声系统108A。最后,发声系统108A使得从波形输入部分108输出的乐音信号发出声音。硬盘109存储多种与音乐演奏有关的数据,例如波形数据、使对应于音乐演奏的使波形同步的数据(即后面将描述的演奏风格表、代码本等的数据)、由各种音调参数构成的音调数据等。硬盘109还存储由CPU101执行的用于控制各种程序等的数据。
驱动器106驱动可拆盘(外存储媒体106A),该可拆卸盘可存储多种与音乐演奏相关的数据,例如,波形数据、使与音乐演奏对应的使波形同步的数据(后面将要描述的演奏风格表、代码本等的数据)、由各种音调参数构成的音调数据等,以及由CPU101执行的用于控制各种程序等的数据。受驱动器106驱动的媒体106A不仅可以是软盘(FD),还可以是高密盘(CD-ROM或CD-RAM),磁光盘(MO),DVD(数字式通用盘),和其他类型的可拆卸媒体。当将存储控制程序的外部存储媒体106A安装到驱动器106上时,最好将其内容(控制程序)直接加载到RAM103中,而不必将其复制到硬盘109上。因为能容易地添加控制程序或使其升级,使用外部存储媒体106A或通过网络能很容易地提供控制程序。
通信接口111连接到通信网络(图中未示),例如LAN网、因特网、电话线等。通信接口通过通信网络与服务性计算机(图中未示)相连,以便将控制程序、各种数据或音乐演奏信息从服务性计算机等输入到波形发生器。当ROM102或硬盘109未存储控制程序或数据时,用通信接口111从服务性计算机上下载控制程序或各种数据。随同客户一起工作的波形发生器通过通信接口将命令发送到服务性计算机上,以便下载控制程序或各种数据。当接收该命令时,服务性计算机通过通信接口将请求的控制程序或数据存储在硬盘109中,从而完成下载。此外,所述接口最好包括用于接收MIDI音乐演奏信息的MIDI接口。显然,音乐演奏键盘或演奏操作装置可以与总线BL相接,以便实时提供音乐演奏信息。此外,最好使用存储了所需歌曲音乐演奏信息的外部存储媒体106A来提供音乐演奏信息。
2.波形数据库建立程序
2.1程序的概述
图2是表示在上述波形发生器中完成的“波形数据库建立程序”的实施例流程图。为了适应各种演奏(或发音),该程序将以用各种演奏风格(或发音)演奏的声波为基础建立矢量数据。
在步骤S1,程序将准备用于存储演奏风格表和代码本(下面将提及)的数据库。例如,用硬盘109作为数据库的媒体。所述程序根据常规乐器的各种演奏模式收集波形数据(步骤S2)。即,通过波形输入部分107从外部的波形输入信号(例如麦克风)中获取各种常规乐器的实际演奏声音。程序把适合这些演奏声音的波形数据存储到硬盘109上指定的区域中。待输入的演奏声音的波形数据可以包括所有的音乐演奏或其特征段,例如给定的分句、一个音符、一个硬起音部分或释放部分。
因此,波形数据是根据常规乐器的各种演奏模式特征从演奏声音中获得的。然后,程序将该波形数据分段成特定部分,将其定调和为其起文件名(步骤S3)。即,程序将把输入的原始波形数据分成代表波形变化的单个波形(例如,硬起音波形,主体部分的波形,释放部分的波形,接合部分的波形等)([1]分段)。由程序确定在一个或多个循环中每个独立的波形数据的定音([2]定调)。由程序还为每个独立的波形数据指定文件名([3]起文件名)。当程序输入部分演奏波形数据例如硬起音部分或释放部分时可以省略波形分离([1]分段)。
然后程序借助频率分析分离各分量(步骤S4)。即,程序通过FFT(快速傅里叶变换)分析把在步骤S3中分别产生的一部分波形数据分成多个分量。在该实施例中,波形数据分成谐波(harmonic)分量和非谐波(non-harmonic)分量。程序还从每个分量(谐波分量,非谐波分量等)中抽取适合各要素的特征,例如波形、定音和振幅。通常,这意味着特征分离。(当将波形数据分成谐波分量和非谐波分量时,对非谐波分量来说,因为其没有定音,所以不需要定音分离)。例如,“波形”(音调)要素是一个抽取的特性,它仅包括具有正常定音和振幅的波形形状。“定音”要素包括抽取的定音相对于参考定音的变化特性。“振幅”要素包括抽取的振幅包络特性。
在步骤S5,建立矢量数据。即,程序间断地或按需要可以连续地从各要素抽取多个采样值,所述要素可以是例如在分离的谐波分量、非谐波分量中的波形(音调)、定音和振幅等。用唯一矢量(识别信息)指定相关采样值顺序,并将其与采样值的时间位置数据一起存在代码本中。这样的采样数据在下文中将称为矢量数据。该实施例建立了波形(音调)要素和振幅要素在非谐波分量中的矢量数据。每个分量要素的矢量数据可随着沿时间轴的进程而改变。程序随后将建立演奏风格模式(下面将详细说明)的数据,并将演奏风格模式存储在演奏风格表中。由此,将已建立的演奏风格模式和矢量数据写到数据库中的演奏风格表和代码本上(步骤S6),从而将数据存到数据库内。如上所述,矢量数据本身并不是原始的波形数据,而是代表输入的原始波形形状的波形中的各要素的独立数据。这个矢量数据最终成为演奏风格模式的单位数据。代码本存储经过压缩的并代表抽取波形形状变化的一部分波形数据。演奏风格表存储演奏风格模式数据(将在下文中详细说明)。即,该包把以压缩形式存储的矢量数据存储成具有波形形状的原始波形数据,和用来指定存储在代码本中的矢量数据之ID数据所需的各种数据。
在上述特征分离过程中(步骤S4),程序还使用除振幅、定音和波形要素之外的时间要素来进行特征抽取。在下文中将抽取时间要素的矢量数据称为“时间矢量数据”。分别产生的分音波形数据的时间周期中的该时间要素用作原始波形数据的时间长度。因此,如果用系数“1”表示时间周期的原始时间长度(可变的),则“波形数据库建立程序”不需要分析或测量该时间长度。在这种情况下,代码本不必一定要存储时间要素的数据(即,时间矢量数据),这是因为在任何时间周期里总是取相同的值“1”。当然,本发明并不限于此。也可以采用分析和测量实际时间长度的实例,并将其作为“时间矢量数据”存储在代码本中。
然后,判断数据库是否已完全建立(步骤S7)。即,通过大量收集从外部波形输入信号获得的常规乐器不同演奏模式的演奏声音原始波形数据,该程序能据此判断是否已完全获得各种演奏风格模式的数据和矢量数据。该判断不总是自动进行的。最好跟随以下指令进行操作,该指令为:是否能根据用户的转换操作继续进行处理。当判断结果是已经收集到原始波形数据和以此为基础的矢量数据已完全建立时,程序将终止(步骤S7中的YES)。为了继续收集原始波形数据和建立以原始波形数据为基础的矢量数据(步骤S7中的NO),程序将转向步骤S2并重复步骤S2-S7。最好实际使用为判断是否已完全建立矢量数据(步骤S7)而建立的矢量数据来产生乐音。即,在断定矢量数据完全建立(步骤S7中的YES)的情况下,随后从图2的流程中退出控制。此后,可能出现通过使用所建立的矢量数据播放音乐的情况,但这不能令人满意。在这种情况下,优选在步骤S2之中和之后进行处理来添加矢量数据。即,不管何时,只要需要便建立矢量数据和将其添加到数据库中。
在上述“波形数据库建立程序”中,优选设置添加或删除任何演奏风格模式或编辑演奏风格模式数据等的能力。
2.2演奏风格模式数据结构
下面将具体描述演奏风格模式数据。
演奏风格模式存储在演奏风格表中,所述演奏风格表构成硬盘102上的数据库。将演奏风格ID和演奏参数相结合可以指定一种演奏风格模式。演奏风格ID包含乐器信息和模式部分的名称。例如演奏风格ID的定义如下。当用32位(0-31位)的序列描述一种演奏风格ID时,用6位表示乐器信息。例如,当6位序列是“000000”时,乐器信息表示中音萨克斯。当序列是“001000”时,乐器信息表示小提琴。优选使用三个高等级位的6位序列对乐器类型进行粗分类,和使用三个低等级位对乐器进行细分类,例如用32位序列中的另6位表示模式部分的名称。例如,当模式部分的名称表示正常硬起音(NormalAttack)时,用6位序列“000000”;转弯起音(BendAttack)用“000001”;装饰音音符起音(GraceNoteAttack)用“000010”;正常短音主体(NormalShortBody)为“001000”;颤音主体(VibBody)用“001001”;正常长音主体(NormalLongBody)用“001010”;正常释放(NormalRelease)用“010000”;正常接合(NormalJoint)用“011000”;或装饰音音符接合(GraceNoteJoint)用“011001”。当然,模式部分的名称并不限于这一结构。
如上所述,可利用演奏风格ID和演奏参数的结合来确定每种演奏风格模式。即,演奏风格模式是根据演奏风格ID确定的。按照演奏参数变化地设定演奏模式的内容。演奏参数具有与演奏风格模式相应的波形数据特性,或者可控制所述与演奏风格模式相应的波形数据。特定类型的演奏参数对每个演奏风格模式都是有效的。例如,可以赋予中音萨克斯正常硬起音(NormalAttack)多种演奏参数,例如紧跟在硬起音之后的独立定音或音量等。中音萨克斯上弯起音(BendUpAttack)模式可以设置多种演奏参数,例如在上弯起音(BendUpAttack)结束时的独立定音,上弯起音(BendUpAttack)时刻转弯深度的初始值,从上弯起音
(BendUpAttack)开始到结束的时间周期(加音符的时间),在硬起音之后瞬间的音量,在上弯起音(BendUpAttack)期间默认曲线的瞬时伸展和收缩等。此外,中音萨克斯正常短音主体(NormalShortBody)模式可以用该模式的独立定音,正常短音主体(NormalShortBody)的停止时间和开始时间,正常短音主体(NormalShortBody)开始或结束时的力度等来表示。演奏风格模式并不需要包括与所有有效演奏参数相应的数据。演奏风格模式可以存储与某些断续演奏参数值相应的数据。例如,中音萨克斯正常硬起音(NormalAttack)模式可以存储与部分数据相应的数据,而不是所有绝对定音值或在硬起音之后的瞬间音量值。
如上所述,可以用演奏风格ID和演奏参数来确定演奏风格模式。因此,例如,中音萨克斯正常硬起音(NormalAttack)模式可以确定除了表示萨克斯管正常硬起音的多个数据(后面将要描述的基本数据)之外的与所需演奏参数相应的数据。提琴转弯起音(Bendattack)模式可以确定除表示提琴转弯的硬起音部分多个数据(下面将描述的基本数据)之外的与所需演奏参数据相对应的数据。
2.3演奏风格表数据结构
演奏风格表根据每个演奏风格模式,存储和产生对应于每个演风格模式的相关演奏风格模式波形所需的数据。例如,演奏风格表存储矢量ID和典型点值序列(用于确定典型采样点的数据,以便修正多个采样序列,)以便确定每个分量要素的矢量数据(波形要素、定音要素(定音包络线)、振幅要素(振幅包络线)等)。或者,演奏风格表存储每个分量要素的信息,这些信息例如矢量数据(波形要素、定音要素(定音包络线),振幅要素(振幅包络线))的开始或停止时间位置。即,演奏风格表存储各种以正常形状播放波形所需的数据(下文中也称作“要素数据”),所述波形来自数据库中以压缩形式作为矢量数据存储的波形。下面的描述用中音萨克斯正常起音(NormalAttack)模式来解释存储在与演奏风格模式相应的演奏风格表中的特定数据实例。
数据1:演奏风格模式的采样长度。
数据2:加音符的时间位置。
数据3:在谐波分量中振幅要素的矢量ID和典型点值序列。
数据4:在谐波分量中定音要素的矢量ID和典型点值序列。
数据5:在谐波分量中波形(音调)要素的矢量ID。
数据6:在非谐波分量中振幅要素的矢量ID和典型点值序列。
数据7:在非谐波分量中波形(音调)要素的矢量ID。
数据8:在谐波分量中波形(音调)要素块(block)的开始位置。
数据9:在谐波分量中波形(音调)要素块的结束位置(在谐波分量中波形(音调)要素环(loop)的开始位置)。
数据10:在非谐波分量中波形(音调)要素块的开始位置。
数据11:在非谐波分量中波形(音调)要素块的结束位置(在非谐波分量中波形(音调)要素环的开始位置)。
数据12:在非谐波分量中波形(音调)要素环的结束位置。
下面将参照图3描述上述数据1-12。
图3示出了构成与演奏奏风格模式对应的实际波形部分的分量和要素的范例。在该图中,从顶部到底部,示出了在谐波分量中的振幅要素,谐波分量中的定音要素,谐波分量中的波形(音调)要素,非谐波分量中的振幅要素,和非谐波分量中的波形(音调)要素。图中的参考标记对应于上述数据号。
参考标记1代表与演奏风格模式对应的波形采样长度(波期)。例如,采样长度对应于以作为演奏风格模式基础的原始波形数据的整个时间长度。参考标记2表示加音符的时间位置,在演奏风格模式中的任何时间位置上均能以可变的形式确定该加音符的时间位置。原则上,与波形对应的演奏声音从这个加音符的时间位置开始发声。例如,根据转调硬起音等演奏风格,波形分量的上升时间可以先于加音符的时间。
参考标记3表示的矢量ID和典型点值序列显示出了以谐波分量的形式存储在代码本内的振幅要素之矢量数据。在图3中,典型点用两个黑色方块表示。参考标记4表示的矢量ID和典型点值序列示出了谐波分量中定音要素之矢量数据。参考标记6表示的矢量ID和典型点值序列显示出了非谐波分量中的振幅要素之矢量数据。用典型点值序列数据改变或控制由矢量ID指定的矢量数据(包括多个采样序列)和指示或指定某些常规采样点。根据指定的常规采样点,可以改变和校正它的时间位置(横轴)和水平轴(纵轴)。由此,可使其它采样点发生变化,并因此改变矢量形状。例如,常规的点值序列数据表示比所述采样量少的分散采样量,但并不限于此。常规的点值序列数据可以是采样之间的间断数据或是指定范围内的数据(多个连续的采样)。此外,常规的点值序列数据可以是差值、倍数等,而不是采样值本身。可以通过使该典型点沿着横轴和/或纵轴(时间轴)移位来改变每个矢量数据形状。即,可以改变包络波形形状。
参考标记5表示的矢量ID示出了谐波分量中波形(音量)要素的矢量数据。参考标记7表示的矢量显示出了非谐波分量中波形(音调)要素的矢量数据。参考标记8表示的是谐波分量中波形(音调)要素块的开始位置。参考标记9表示谐波分量中波形(音调)要素块的结束位置(或谐波分量中波形(音调)要素环的开始位置)。即,从参考标记8开始的三角形表示连续存储特性波形状的非环状波形部分。从参考标记9开始的连续矩形表示能反复读取的环状波形部分。非环状波形是具有演奏风格(或发音)等特性的高质量波形。环状波形是与比较单调的声音部分相对应的单位波形,而且它包括一个周期或适量周期的波形。参考标记10表示非谐波分量中波形(音调)要素块的开始位置。参考标记11表示非谐波分量中波形(音调)要素块的结束位置(或非谐波分量中波形(音调)要素环的开始位置)。参考标记12表示非谐波分量中波形(音调)要素环的结束位置。用上述数据3-7作为指示存储在每个分量要素代码本中的矢量数据的信息。用上述数据2和8-12作为从矢量数据恢复原始波形(在分离之前)的时间信息。
如上所述,演奏风格模式包括用于指示矢量数据和时间信息数据的数据。通过使用存储在演奏风格表中的演奏风格模式数据,和使用存储在代码本中的波形资料(矢量数据),可以自由地构筑波形。即,演奏风格模式是代表波形状态的数据,该波形可根据演奏风格(或发音)产生。各演奏风格模式可以包含不同的数据种类或数据量。除了上述数据外,还可以在演奏风格模式上设置其它信息等,例如,用于控制波形时间轴扩展和压缩的数据。
为了容易地理解所述解释,上述实例示出的一种演奏风格模式包括谐波分量中的所有要素(波形、定音、振幅)和非谐波分量中的要素(波形和振幅)。然而,本发明并不限于此。显然,演奏风格模式可以包括谐波分量中多种要素(波形、定音、振幅)的一种或非谐波分量中多种要素(波形和振幅)中的一种。例如,演奏风格模式可以包括谐波中的波形(音调)要素、谐波分量中的定音要素、谐波分量中的振幅要素、非谐波分量中的波形(音调)要素、非谐波分量中的振幅要素中的一种。由于对每种分量而言,演奏风格模式可以自由组结,所以很方便。
如上所述,按照各种常规乐器的不同演奏模式,所有波形数据并不保持演奏声音。波形数据库建立程序仅抽取改变波形形状所需的分音波形
(例如,硬起音部分的波形,主体部分的波形,释放部分的波形,接合部分的波形等)。此外,按照分量、要素和典型点使用分层压缩技术存储波形数据作为硬盘109中的压缩数据。可以保存存储波形数据所需的硬盘109的存储容量。
3.波形合成过程
图1中的波形发生器,允许计算机执行指定程序(软件)完成本发明所述波形合成过程来合成波形。图4是执行上述波形合成过程(“以数据库为基础的音乐合成程序”)的程序流程图。
然而,在该实施例中,由程序完成的各种功能彼此是独立的。下面将描述以图5所示功能方框图为基础的操作。本发明不限于这种程序。波形合成过程是在专用硬件设备上进行的。在这种情况下,图5是专用硬件设备的方框图,所述硬件设备能提供与图4中所示相同的波形合成过程。以下主要参照图5进行描述并且用括号表示图4中相应的步骤。
3.1声音数据播放部分101A
声音数据播放部分101A播放带有演奏符号的声音数据(步骤S11)。首先,声音数据播放部分接收带有演奏符号的声音数据(音乐演奏信息)。原始乐谱包括音乐标记例如动态标记(渐强,渐弱等)、速度标记(快板,慢板等)、连线、持续、重音等。这些标记如果不改变的话,不会成为MIDI数据。为此,需将这些标记转换成“演奏符号”数据。将包含演奏符号的MIDI声音数据称为“带有演奏符号的歌曲数据”。演奏符号包括图表ID和图表参数。图表ID表示乐谱上的音乐标记。图表参数表示用图表ID指出的音乐标记的内容范围。例如当图表表示“颤音”时,将提供图表参数来指定颤音的速度、深度等。当图表ID表示“渐强”时,将提供图表参数来指定在渐强开始或结束时的音量、音量变化的时间长度等。
3.2乐谱注释部分101B
乐谱注释部分(演奏者)101B完成乐谱注释过程(步骤S12)。特别是,该部分将MIDI数据和上述包含在声音数据中的“演奏符号”(图表ID和图表参数)转换成演奏风格指定信息(演奏风格ID和演奏参数)。经转换的数据与时间信息一起输出到演奏合成部分(发音器)101C。通常,演奏者可以用相同的音乐标记进行不同的注释。他们可以用不同的演奏风格或发音进行演奏。此外,演奏者可以根据不同的演奏风格表演一系列的音符。乐谱注释部分是一个可了解表现乐谱标记(音乐标记、音符的分布等)的专家系统。
例如,乐谱注释部分使用以下标准来注释乐谱上的标记。颤音只可用于八分音符或更长的音符。断奏实际上增加了动感。持续的长短决定着音符的衰减。连奏并不减弱音符。时间值决定着八分音符颤音的速度。动态取决于定音。此外,存在不同注释标准,例如因提高或降低短句内的定音和减小动态的dB线性增益而引起的动态变化,和与持续或断奏相应的音符长度以及与硬起音部分的上弯标记相应的上弯宽度和曲线变化。根据这些标准,乐谱注释部分101B注释乐谱以把乐谱转换成音乐演奏数据。此外,乐谱注释部分101B根据用户的表演者指令,即,表演者进行演奏(演奏风格)的指令,换行上述乐谱注释过程。乐谱注释部分101B根据该表演者指令,通过改变注释方法来注释乐谱。例如,数据库内存储根据多个演奏者得到的不同的乐谱注释方法。乐谱注释部分101B根据用户的演奏者指令,通过选择不同的乐谱注释方法来注释乐谱。
使构成的歌曲数据(音乐演奏信息)预先包括显示乐谱注释结果的数据。显然,在输入的声音数据包含预先注释的乐谱结果数据时,将不再需要上述过程。通过适当的用户输入操作由乐谱注释部分101B完全自动地或半自动地进行注释乐谱(步骤S12)。
现在参照图21,下面将描述在乐谱注释部分101B建立的音乐演奏数据的内容。
象常规的SMF(标准MIDI格式)一样,音乐演奏包括标题和多个音轨。每个音轨包含程序和事件数据(添加音符,除去音符等)。在该实施例中,每个音轨包含,其用于指定硬起音部分、主体部分、接合部分和释放部分模式的模式指定部分。模式指定部分是包含演奏风格ID和演奏参数的演奏风格指定信息。实际上,这些模式指定部分采用了未定义的系统专用信息、元事件、14位控制变化等。此外,每个音轨包含时间差数据,该数据用于指定事件数据或模式指定部分之间的时间差。
可能存在这样一种情况,即每个音轨包含指定音调的程序变化,也即新数据库(演奏风格表和代码本)。在这种情况下,乐谱注释部分101B向波形合成部分101D提供作为预测数据的程序变化。由于波形合部分101D从代码本中读取下一次预测将用到的矢量数据,所以需确定程序变化,以便将预测范围限制在某种程度上(下面将详细说明)。预测数据还包含其它各种数据。根据歌曲数据,乐谱注释部分101B向波形合成部分101D提供“指示后续演奏风格指令的数据”作为预测数据。以上所述包含的程序变化是一种预测数据。
3.3演奏合成部分101C
演奏合成部分(发音器)101C在由乐谱注释部分(演奏者)101B转换的演奏风格指令(演奏风格ID和演奏参数)的基础上参照演奏风格表。该部分产生与演奏风格指令(演奏风格ID和演奏参数)相应的包流(也称为矢量流)和与演奏参数对应的数据流有关的矢量参数,并且将所述包流和矢量参数提供给波形合成部分101D(步骤S13)。提供给波形合成部分101D的数据是包含包时间信息、矢量ID、典型点值序列等与定音要素和振幅要素有关的包流。就波形(音调)要素而言,所述包含矢量ID、时间信息等(下面将详细说明)。
波形合成部分101D根据包流从代码本中检索矢量数据,按照矢量参数修正矢量数据,并根据修正的矢量数据合成波形(步骤S14)。然后,波形合成部分101D完成其他部分的波形生成过程(步骤S15)。多个演奏部分中的其他部分是指那些不进行演奏合成过程而是采用常规乐音波形合成过程的演奏部分。例如,用常规波形存储器声源系统为这些其他部分产生乐音。这种“其他部分的波形产生过程”可以在专用硬件声源(外部发声设备或可安装到计算机上的声卡)上完成。为了便于说明,该实施例仅使用了一个部分来产生与演奏风格(或发音)相应的乐音。当然,也可以用多个部分来播放演奏风格。
图6是用于表示上述演奏合成部分101C的演奏合成过程之流程的方框图。尽管图6中示出的是分别存储演奏风格模式和代码本的情形,但是实际上也可以将两者都存在硬盘109上的数据库内。
演奏合成部分101C建立了根据演奏风格指令(演奏风格ID和演奏参数)和来自乐谱注释部分101B的时间信息数据供给波形合成部分101D的不同的包流。演奏合成部分101C并不使用针对每个音调的永久演奏风格模式。用户可以在当前使用的演奏风格模式上添加新的演奏风格模式或停止使用它们当中的某些模式。演奏合成部分101C还执行建立校正信息以便校正选定要素数据和演奏参数值之差的程序,和平滑前后演奏风格模式的连接波形特征的平滑连接程序。
通常,乐谱注释部分101B向演奏合成部分101C提供数据,但是本发明并不限于此。如上所述,最好是根据演奏风格准备歌曲数据,其中所述歌曲数据已经由乐谱注释部分101B注释。或者,根据演奏风格准备歌曲数据,其中用户通过注释乐谱为歌曲数据提供演奏风格ID和演奏参数。通过播放歌曲数据向演奏合成部分101C提供数据。
图7是详细表示演奏合成过程的实施例流程图。
演奏合成部分101C根据演奏风格ID和演奏参数从演奏风格表中选择演奏风格模式(步骤S21)。即,演奏合成部分101C根据从乐谱注释部分101B发出的演奏风格ID(乐器信息和模式部分名称)和演奏参数选择一个演奏风格模式。在注释乐谱之前,乐谱注释部分101B检查数据库以便确定在与乐器信息指示的音调相应的演奏风格表中存在哪些模式部分。乐谱注释部分101B指定现存部分范围内的演奏风格ID。当指定的是非现存部分时,优选代之以选择具有类似特征的演奏风格ID。然后,演奏合成部分101C选择与指定的演奏风格ID和演奏参数相应的多个要素数据(步骤S22)。即,演奏合成部分101C通过参照演奏风格表并根据指定的演奏风格ID和演奏参数来指定演奏风格模式,并且从所述模式中择出多个与演奏参数对应的要素数据。当演奏风格模式不包含与演奏参数完全匹配的要素数据时,演奏合成部分101C选择与和演奏参数相近的值对应的要素数据。
然后,该程序根据时间信息计算要素数据中每个位置的时间(步骤S23)。即,根据时间信息将每个要素数据布置在绝对时间位置上。特别是,该程序根据来自指示每个相对的时间位置的要素数据的时间信息计算绝对时间。因此,由程序来确定每个要素数据的时间(见图3)。此外,程序根据演奏参数来校正每个要素数据的值(步骤S24)。即,用程序校正选定的要素数据和演奏参数之间的偏差。例如,乐谱注释部分101B在硬起音音量(演奏参数)刚设定为“95”后发送中音萨克斯正常起音[NormalAttack]模式。当演奏风格表内包含在硬起音音量刚设定为“100”后的中音萨克斯正常起音[NormalAttack]模式时,演奏合成部分101C选择在硬起音音量刚设定为“100”后的中音萨克斯正常起音[NormalAttack]模式的要素数据。然而,在硬起音后的瞬间音量保持在“100”。通过对选定要素数据的典型点修正,可以将硬起音之后瞬间的音量修正到“95”。进行该修正可以使选定的要素数据值近似于演奏参数值。此外,可以按照预定的微调值(乐器调音)进行修正,和按照乐器的音量变化特性进行音量修正等。这些修正可以通过改变典型点值或各要素数据来实现。典型点值可以有很大变化。即,典型点是必需的和足以进行修正的数据。通过控制所述典型点,可以进行各种修正。
上述步骤S23通过使用例如演奏参数等修正信息,修正由时间信息指示的时间位置。例如,根据音乐演奏数据得出的时间位置和用上述时间信息指示的时间位置之间可能有差异。在这种情况下,程序选择的时间信息所指示的时间位置应近似于根据音乐演奏数据得出的时间位置。程序根据音乐演奏数据修正所得到的时间位置信息。这样便可以得到所希望的音乐演奏数据的时间位置信息。此外,音乐演奏数据可以包含如触摸或速度等可变的控制因素。在这种情况下,可以根据音乐演奏数据并通过根据可变控制因素修正时间位置信息而对时间位置信息进行可变控制。修正信息包括该时间位置的修正信息。
此外,调节每个要素数据以便进行相邻演奏风格模式之间平滑连接的连接程序(步骤S25)。即,在连接前后演奏风格模式时紧密连接各典型点,而使前后演奏风格模式的波形特性平滑的程序。对于谐波分量中的波形(音调)、振幅、和定音各要素或非谐波分量中的波形(音调)和振幅各要素而言,分别进行这种连接或链接程序。
这时,从前一演奏风格模式中的“链接开始”到后一演奏风格模式中的“链接结束”进行调节。即,该程序根据“近似率”在从链接开始”到“链接结束”的范围内调节典型点。所述“近似率”是控制近似量的参数,它是指在前后演奏风格模式之间形成连接时从它们中的一个得出的近似量。正如后面将要描述的那样,近似率取决于前后演奏风格模式的结合情况。当前后演奏风格模式相连时,波形不会很好地连接。在这种情况下,使来自前后演奏风格模式中任一模式的波形特性的矢量ID变薄,来实现平滑连接。为了实现这一跳跃,而设置了“演奏风格模式结合表”、作为参照的“跳跃执行参数范围表”和作为参照的“跳跃时间表”。
此外,借助于乐谱注释部分101B中的以下链接程序可以将波形特征平滑地连接。例如,所述程序能不考虑演奏风格模式,平滑地连接演奏参数中的间断部分(动态值、定音参数值等)。此外,在从颤音移到释放的情况下,通常极早地将颤音减半音便可以实现平滑连接。
下面将详细讨论上述链接程序。即,下面将简明地描述用于在前后演奏风格模式之间进行平滑连接的每个要素数据的调节(参见步骤S25)。参见图8,下面将说明演奏风格模式与振幅要素或定音要素对应的情况的链接程序。
由于在前后演奏风格模式之间的链接程序中会出现间断的典型点值,所以在前后演奏风格模式之间的连接出现偏差。在这种情况下,需要首先确定作为指数的“近似率”,以确定前后演奏风格模式达到该值时连接点目标值应当近似。这时,动态连接点用作振幅,或定音连接点用作定音。在该实施例中,假设在图8所示的表格中给出了近似率。例如,当前面的演奏风格模式的矢量ID为“3”,而后面的演奏风格模式的矢量ID为“7”时,从表中得出的“近似率”是“30”。根据选定的“近似率”,从前一演奏风格模式的“链接开始”到“演奏风格模式结束”这一过程中的包络线形状逐渐转向目标值。此外,从后一演奏风格模式的“链接结束”至“演奏风格模式开始”这一过程中的包络线形状逐渐转向目标值。例如,当将“近似率”设定为“30”时,前一演奏风格模式的目标值是“30”。前一演奏风格模式近似于后一演奏风格模式的“30%”。(在该实施例中,前一演奏风格模式中的最后一个典型点下移了接近“30%”)。
相反,前一演奏风格模式近似于后一演奏模式的“70%”(100%-30%)。(在该实施例中,后一演奏风格模式中的第一典型点上移了接近“70%”)。从链接开始到链接结束,有多个典型点存在于前后演奏风格模式内,并且近似上移和下移上述近似值。如上所述,在前后演奏风格模式中的多个典型点上出现近似值。可以适当设定链接的开始和结束。优选的是,将链接的开始或结束设在与所期望的典型点相同的点上,以消除如图中所示在链接开始或结束时包络线形状出现弯形。即使是当没有将链接开始或结束设在与所希望的典型点相同的点上时,也显然允许近似,这样不会在包络线形状中出现弯形。
确定“近似率”并不限于上述实例所述方法。例如,可以根据在连接点之前和之后给出的演奏参数来确定近似率。此外,可以根据产生演奏风格ID或演奏参数之前的音乐演奏数据来确定近似率。另外,可以根据这些数据的结合来确定近似率。上述实例采用了以“近似率”为基础的单一近似典型点。根据该近似量,其它典型点也近似适当量。最好对多个典型点中的每个点确定各自的“近似率”并且根据每个“近似率”使多个典型点近似。
下面,针对演奏风格模式是波形(音调)要素的情况描述其链接程序。图9-12是表示当演奏风格模式是波形(音调)要素时链接程序的示意图。图9是用于说明当将硬起音部分的波形连接到主体部分波形上时波形变薄的示意图。图10是说明当将主体部分的波形连接到释放部分的波形上时波形变薄的示意图。在图9中,主体部分的波形包括5个环状波形L1到L5,每个波形在特定的时间范围内以环状的形式播放。同样,图10中主体部分的波形包括六个环状波形L1’到L6’。
有各种方法调节与波形有关(例如波形连接过程)的要素数据。例如,局部减薄波形以便平滑连接例如硬起音部分或接合部分的演奏风格模式和主体部分的演奏风格模式(或主体部分与释放部分或接合部分的演奏风格模式之间的连接)的方法。对于波形之间的连接来说,平滑转换是众所周知的。然而,如图9中所示,当时间t离连接环状波形L1的起始时间点较短时,需要在较短的时间t内快速进行平滑转换。即,快速的平滑转换表示在要连接的波形之间的极短时间内进行的平滑转换。进行这样的快速平滑转换会导致产生很大噪音的波形。这是不可取的。
为了避免快速的波形平滑转换,可以跳过(删除)一部分波形以加大要连接的波形之间的时间间隔。在这种情况下,硬起音部分、释放部分或接合部分的波形将构成一个方块,以防止波形跳越。因此,环状波形从主体部分跳过。在图9和10中,环状波形L1和L6’被跳过。这些波形用黑色方块表示。例如,在图9中,完成的是与连接时间点具有较长时间差的第二环状波形L2和硬起音部分波形中最后一个波形之间的平滑转换。没有使用第一环状波L1。同样,在图10中,完成的是环状波L5’和释放部分波形之间的平滑转换,其中没有使用环状波L6’。
应该注意到,接合部分采用的是在任何演奏风格的声音之间(或声部之间)进行连接的波形区。
进行波形跳越以使硬起音部分的演奏风格模式和释放部分或接合部分的演奏风格模式之间形成平滑连接。图11和12是说明当硬起音部分的波形与释放部分的波形连接时,产生波形跳越的示意图。
在这种情况下,波形可以从硬起音部分或释放部分的演奏风格模式跳越也可以不跳越。转弯的硬起音部分是允许波形从相关演奏风格模式跳越的硬起音部分的实例。第二半转弯的硬起音部分包含几个环状波形。对于第一半包含几个环状波的释放部分,波形跳越也是可行的。波形从能产生波形跳越部分的演奏风格模式跳越。例如,当将转弯的硬起音部分连接到释放部分时,如图11所示,从转弯的硬起音部分一侧跳过环状波形。(图11表示从转弯的硬起音部分一侧跳过用黑色方块表示的一个环状波形)。当将正常的硬起音部分连接到具有环状波形的释放部分时,如图12所示,从释放部分一侧跳过环状波形。(图12表示从释放部分一侧跳过用黑色方块表示的一个环状波形)。
待跳越的环状波形实际上并不需要最靠近演奏风格模式之间的接合部。即,不必是第一个或最后一个环状波形。最好是根据给定的次序选择需从多个环状波形上跳过的环状波形。
如上所述,当在演奏风格模式的给定结合中不能在演奏风格模式的范围内进行成功连接时,便可进行波形跳越。为了实现所述跳越,而设置了例如“演奏风格模式结合表”、作为参照的“跳越执行参数范围表”、和作为参照的“跳越时间表”。“演奏风格模式结合表”根据要连接的前后演奏风格模式的结合情况确定给定的参数。“跳越执行参数范围表”确定时间范围以便完成相对于上述每个参数的跳越。“跳越时间表”确定跳越时间。在连接时间点和第一个(或最后一个)环状波形L1(或L6’)之间存在时间差(图9-12中的时间t)。当该时间差短于参考跳越时间时,将跳过相应的环状波形。
参照图13,下面将描述当演奏风格模式具有较短的采样时间而且当该演奏风格模式在启动之后先于另一个演奏风格模式结束时所进行的波形连接。在图13中,波形(音调)要素的的包流包括四个演奏风格模式,即,在图中从左到右按顺序排列的A.萨克斯上弯硬起音[BendUpAttacl],A.萨克斯正常短音主体[NormalShortBody],A.萨克斯主体颤音[VibratoBody],A.萨克斯正常播放[NormalRelease]。每一个演奏风格模式的采样时间(持续时间)用“长度”表示。在图13中,上部所述“添加音符”和“断开音符”是MIDI数据的事件时间。在图的中部,A.萨克斯上弯硬起音[BendUpAttacl]等表示各演奏风格ID的产生时间。音符、跳动、深度等表示各演奏参数的产生时间。
A.萨克斯上弯硬起音[BendUpAttacl]模式从时间t0开始。时间t1是在该模式内添加音符的时间而且该时间应当对应于指定的添加音符的时间。根据演奏参数,例如上述音符、跳动、深度等,来控制模式包流的内容。A.萨克斯正常短音主体[NormalShortBody]模式从硬起音模式之后紧接的时间t2开始。时间t3表示从接合部的中部开始颤音演奏风格的时间。该时间是根据例如设在歌曲数据中的颤音标记的开始时间确定的。时间t5表示在A.萨克斯正常播放[NormalRelease]模式中断开音符的时间,而且该时间应当对应于指定的断开音符时间。因此,A.萨克斯正常播放[NormalRelease]开始的时间t4是指定的。
由于添加音符的事件发生在时间t1而中断音符的事件发生在时间t5,所以,根据由包流产生的波形,实际的发声时间范围是从时间t1至时间t5。在这种包流的情况下,从时间t2到时间t4的时间周期与A.萨克斯正常播放[NormalRelease]模式和A.萨克斯主体颤音[VibratoBody]模式的总采样时间常常不匹配。因此,需要适当的修正性测量。在这种情况下,通过反复运行相同的演奏风格模式,或通过改变演奏风格模式的采样时间或通过将两种方法结合,将总的采样时间调整到上述时间周期。用这种方式,可以将模式调整到可进行波形连接。在上述实例中,反复运行A.萨克斯正常播放[NormalShortBody]模式从而使之与后面的A.萨克斯主体颤音[VibratoBody]模式进行波形连接。同样,反复运行A.萨克斯主体颤音[VibratoBody]模式,使之与后面的A.萨克斯正常播放[NormalRelease]模式进行波形连接。
如上所述,当反复运行演奏风格模式进行波形连接时,将为反复运行的演奏风格模式提供不同的时间长度。通过移动A.萨克斯正常短音主体[NormalShortBody]模式或A.萨克斯主体颤音[VibratoBody]模式中的典型点可以对时间长度进行可变控制。可以通过合适的方法,例如改变构成A.萨克斯正常短音主体[NormalShortBody]模式或A.萨克斯主体颤音[VibratoBody]模式的多个环状波形之间的平滑转换连接时间便可实现所述控制。通过设定可变的环数量和环的延续时间,环状波形能较容易地实现对整个环状播放波形时间长度的可变控制。另一方面,在非环状波形的情况下,并不能如此容易地可变控制其时间轴上现有的长度。因此,如上所述,提供可变控制以便在环形读取周期内按照由非环状波和环状波构成的声波顺序扩展和收缩波形数据的时间轴。在整个发声时间长度提供可变控制的发明对简单地控制临时扩展和收缩是非常有益的。为此,建议使用早先由日本待审专利申请公开号平成10-307586的申请人提出的“时间的延长和压缩”控制(TSC控制)。尤其是,该“TSC”控制是适用的,这是因为时间轴的长度是针对与特定演奏风格相应的非环状波形而变的。
图14示意性地示出了如此建立的包流的实例。在图14中,从顶部到底部示出了在谐波分量中振幅要素、定音要素、和波形(音调)要素等的包流,以及在非谐波分量中振幅要素和波形(音调)要素的包流。黑色方块表示谐波分量中振幅要素和定音要素的典型点以及非谐波分量中的振幅要素的典型点。连接这些点的曲线代表了由包含在包流之包内的矢量ID表示的矢量形状。白色的矩形L表示谐波分量和非谐波分量中波形(音调)要素的环状波形。另一个矩形NL表示非环状波形。阴影表示的非环状波形是特别有特点的一个波形。在该实施例中,用两个矢量来构筑正常起音(NormalAttack)模式中谐波分量和非谐波分量的每个波形(音调)要素。用一个矢量来构筑谐波分量的每个振幅要素和定音要素以及非谐波分量的振幅要素。
在该实施例中,振幅要素和定音要素在波形(音调)要素形成谐波分量或非谐波分量中非环状波形的部分不包含矢量。然而,优选通过在波形(音调)要素形成非环状波的部分向振幅要素和定音要素提供矢量来控制已产生的波形。在主体颤音(VibratoBody)模式中,用五个矢量来构筑谐波分量中的波形(音调)要素。用一个矢量构筑谐波分量中的每一个振幅要素和定音要素,以及非谐波分量中的波形(音调)要素和振幅要素。在此,将主体颤音VibratoBody重复三次。应当注意到,每一次重复使用不同的矢量形状。这是因为相对每次重复指定不同的演奏参数。按照不同的演奏参数,选择不同的要素数据,或完成不同程度的控制或时间轴的控制。在正常接合NormalJoint模式中,使用三个矢量来构筑谐波分量和非谐波分量中的每个波形(音调)要素。用两个矢量来构筑谐波分量中每个振幅要素和定音要素,以及非谐波分量中的振幅要素。省略关于正常主体NormalBody模式的描述。
如上所述,演奏合成部分101C产生适合每个谐波分量和非谐波分量的包流。这些包流中的每一个都由多个包构成。每个包都含有包的矢量ID和时间信息。此外,所述包中含有在谐波分量中的振幅要素和定音要素以及非谐波分量中的振幅要素的情况下为每个典型点设定的数值。当然,本发明并不限于此。本发明优选的是提供除矢量ID和包的时间信息之外的其它信息。根据每个包的内容,为每个分量构筑包流。包流包含多个包和与每个包有关的时间信息(启动时间)。
显然,包流的数量等可以按照乐器的类型而不同。
3.4波形合成部分101D
3.4.1波形合成部分101D的所有操作
波形合成部分101D根据从演奏合成部分101C提供的每个分量的包流(包含矢量ID、时间信息、修正信息等多个包的序列)进行波形合成。图15是用于解释波形合成部分101D内工作情况的完整结构示意图。图16-19、22和23详细地表示波形合成部分101Dk的每个操作。图16是简要表示波形合成所有流程的方框图。图17是用于解释矢量加载器的方框图。图18是用于解释矢量操作器的方框图。图19是用于解释矢量解码器的方框图。图22表示把包从演奏合成部分101C送到波形合成部分101Dr时间。图23是用于解释高速缓存控制部分40的方框图。
在图15中,演奏合成部分(发音器)101C建立适合每个分量要素的包流。然后,对应于包基上的每个分量要素,将包流依次输入到设在波形合成部分101D内的指定包队列缓冲器21-25中(即,输入到包的单元中)。输入的包存储在包队列缓冲器21-25中并且按指定的顺序依次发送到矢量加载器20上。矢量加载器20使包中的矢量ID定位并通过高速缓存控制部分40从代码本26中读取(加载)与所述矢量ID相应的原始矢量数据。将读出的矢量数据发送到指定的矢量解码器31-35。这些矢量解码器是对应于每个分量要素设置的并且产生适合每个分量要素的波形。
此外,矢量解码器31-35对在矢量解码器31-35之间产生的适合每个分量元素的波形进行波形合成并产生适合每个分量(谐波分量和非谐波分量)的波形。将针对每个分量产生的波形发送到混合器38。除了把包的输入输入到包队列缓冲器21-25之外,演奏合成部分(发音器)101C进行诸如包流管理等各种控制和针对波形合成部分101D的播放控制。包流管理涉及产生或删除单个矢量数据或在矢量数据之间进行连接。播放控制对产生理想波形、或播放或中断所产生的理想波形起着重要作用。
如上所述,顺序地向矢量加载器20提供构成包流的多个包,,所述包流存储在包队列缓冲器21中。根据每个包中的矢量ID,矢量加载器20通过高速缓存控制部分40从代码本26中读取与所述矢量ID相对应的矢量数据。矢量加载器20随后将读取的矢量数据发送到矢量解码器31(参照图16)。此时,已读出的每个包可以包含修正信息(例如与典型点有关的修正信息)。在这种情况下,矢量加载器20根据修正信息改变读出的原始矢量数据。把经改变的矢量数据称之为不同于原始矢量数据的矢量信息数据。矢量加载器20把带有矢量信息数据的包以信息的形式输出到矢量解码器31-35。将所述包称为与从演奏合成部分101C输入的包不同的矢量包。用这种方式,矢量加载器20根据演奏合成部分(发音器)101C输入的包矢量ID从代码本26中读取原始矢量数据。需要时,矢量加载器20根据修正信息修正矢量数据并且将矢量包传送到矢量解码器31-35(参见图17)。存在各种与矢量数据典型点有关的修正信息,例如根据随机数来改变时间信息的修正信息。
如图18所示,矢量解码器31-35控制各操作器的操作,例如,启动或关掉矢量操作器以便处理输入的矢量包,控制矢量操作器之间的连接或同步,控制时间,针对来自其他矢量ID流的每个矢量操作器输入设定参数转换等。矢量操作器36和37读取矢量信息数据,控制读取矢量信息数据的位置(速度输入),控制增益(增益输入)等。在矢量解码器31-35中控制矢量操作器36和37定义的各种参数。设置矢量解码器31-35使之对应于每个分量要素。相应的矢量解码器31-35从矢量包中读取矢量信息数据并按时间顺序产生所需的波形。
如图19所示,例如,矢量解码器31产生适合谐波分量中振幅要素的包络波形。矢量解码器32产生适合谐波分量中定音要素的包络波形。矢量解码器33产生适合谐波分量中波形(音调)要素的包络波形。矢量解码器34产生适合非谐波分量中振幅要素的包络波形。矢量解码器35产生适合非谐波分量中波形(音调)要素的包络波形。矢量解码器33产生的谐波分量波形带有谐波分量中振幅要素的包络波形和谐波分量中定音要素的包络波形。这些包络波形在矢量解码器31和32中产生。矢量解码器33随后向混合器38输出产生的波形。即,象增益控制(增益输入)的矢量操作器那样,向矢量解码器33提供谐波分量中振幅要素的包络波形。象控制矢量信息数据读取位置(速度输入)的矢量操作器那样,提供适合谐波分量中定音要素的包络波形。矢量解码器35产生的非谐波分量波形还有非谐波分量中振幅要素的包络波形。该包络波形在矢量解码器34中产生。矢量解码器35随后向混合器38输出产生的波形。即,向矢量解码器35提供非谐波分量中振幅要素的包络波形作为增益控制(增益输入)的控制命令。
当在每个分量和要素中按时间顺序产生波形时,矢量解码器31-35使波形形成时的波形同步。例如,当输入波形(音调)要素的矢量包和振幅要素的矢量包时,根据以波形(音调)要素的矢量包为基础的波形产生时间并与之同步地产生以振幅要素的矢量包为基础的振幅波形。该振幅波形控制以波形(音调)要素矢量包为基础产生的波形的振幅。当输入波形(音调)要素的矢量包和定音要素的矢量包时,根据以波形(音调)要素矢量包为基础产生波形的时间并与之同步地产生以定音要素的矢量包为基础的定音要素。
定音波形控制以波形(音调)要素矢量包为基础产生的波形的定音。当输入谐波分量中波形(音调)要素的矢量包和非谐波分中波形(音调)要素的矢量包时,根据以谐波分量中波形(音调)要素的矢量包为基础的谐波分量合成时间并与之同步地合成以非谐波分量中波形(音调)要素的矢量包为基础的非谐波分量。通过将合成的谐波分量和非谐波分量波形混合可产生理想的音乐波形。
可以将该实施例设计成在谐波分量和非谐波分量之间选择同步或不同步。只有当选择同步时,才可以优选根据以上述谐波分量中波形(音调)要素矢量包为基础产生的谐波分量波形合成时间,并与之同步地合成以非谐波分量中波形(音调)要素矢量包为基础产生的非谐波分量波形。
如上所述,包流包括多个包。在矢量包包流的情况下,每个包都包含矢量数据。即,包流包括沿临时方向布置的矢量数据。根据振幅、定音、和波形(音调)要素,矢量数据包含不同的数据结构和含义。然而,从矢量操作器36和37的角度看,矢量数据基本上相同。
3.4.2矢量数据结构
图20是矢量数据结构的实施例示意图。例如,用单位(SEC)表示读取矢量数据的位置。当假定读取速度不变时,矢量数据上的一个采样值与输出波形的一个采样值匹配。用单位1/1200(音程)(取2的n次方)表示读取速度。幂n=0意味着速度不变。幂n=1.0意味着速度加倍,例如,波形(音调)要素高八度。幂n=-1.0意味着速度减半,例如,波形(音调)要素低八度(参见图20中的上图)。代码本26存储实际的矢量数据。例如,振幅要素或定音要素的矢量数据包括阵列式矢量点(VECTORPOINT)结构和典型点数据。
阵列式矢量点(VECTORPOINT)结构包含采样位置和按序排列的每个点值。例如,用单位(db)表示振幅要素的矢量数据值。当假设编号为0的MIDI音符是0.0时,用单位1/1200(音程)表示定音要素的矢量数据值。典型点数据是DWORD阵列并存储了作为典型点使用的阵列式矢量点(VECTORPOINT)结构的指数(参见图20中的下图)。显然,本发明并不限于上述实例。
3.4.3高速缓存控制部分40的细节
(1)高速缓存控制部分40的整体结构
该部分参照图23描述了高速缓存控制部分40的整体结构。首先描述的是设置该高速缓存控制部分40的目的。由于硬盘109中存储着代码本26,所以可从硬盘109中读取矢量解码器31-35所需的矢量数据。然而,硬盘等提供的存取速度即慢又不稳定。因此不能在矢量解码器31-35处理相关矢量数据时及时读出矢量数据。作为一种方案,本实施例在波形合成部分101D设置了高速缓存部分40以便将待用(或是预计将使用的)的矢量数据加载到高速缓冲存储器中。
在图23中,参考标记42表示预取部分。预取部分从演奏合成部分101C送到波形合成部分101D的包中抽取矢量ID。预取部分对硬盘109提供读取控制,以便使预取矢量数据与来自代码本26的矢量ID相关联。如上所述,这些包在包队列缓冲器21中构成包流,并且由矢量加载器20读取。同时,进行预取处理。
参考标记41表示预测控制部分。预测控制部分根据从乐谱注释部分101B提供的预测数据(程序改变等)和从预取部分42提供的预测条件来预测具有极高实用性的矢量数据。预测控制部分随后向预取部分42提供与预测的矢量数据有关的矢量ID。因此,供给预取部分42的矢量ID可以包含那些与舍去的矢量数据有关的数据,所述舍去的矢量数据在将来可以不实际使用。在此,“预测条件”包括确定将要使用的矢量ID等(即,从演奏合成部分101C提供的矢量ID)。用这种方式,演奏合成部分和预测控制部分41将矢量ID送给预取部分42。预取部分42预取与两个矢量ID相关的矢量数据,同时按优先序排列确定将要使用的矢量数据负载(即,由演奏合成部分101C确定的矢量数据负载)。在下文中,把确定将要使用的加载矢量数据称为“指定的负载”;把不是确定要使用的加载矢量数据(只是预测将会使用)称为“预测负载”。参考标记44表示存储预取矢量数据的高速缓冲存储器。参考标记43表示读取控制部分。当从矢量加载器20接收矢量ID时,读取控制部分主要从高速缓冲存储器44中读取与该矢量ID相应的矢量数据,并将该矢量数据送到矢量加载器20。参考标记45表示时间控制部分,其为预取等提供时间控制。
(2)预测控制部分41的操作
下面将参照图24中的状态转换图描述预测控制部分41中的处理内容。预测控制部分41的状态取决于波形合成是否发生在矢量解码器31-35中,并且当进行合成,根据进行合成的模式来合成波形。最初时,在矢量解码器31-35中没有进行波形合成。预测控制部分41完成步骤S30的程序。在此,程序预测硬起音部分中的候选矢量数据。预测的矢量ID依次送到预取部分42。然而,在步骤S30,并不预测硬起音部分,除非乐谱表演部分101B提供作为预测数据的“程序变化”。这是因为不确定的程序变化会产生大量用于指定硬起音部分的矢量数据。在初始状态下,当从乐谱注释部分101B提供变化的程序时,预测控制部分瞬时启动适合硬起音部分的矢量数据预测负载,所述硬起音部分对应于所述程序变化。
例如,假设指定“钢琴”作为变化的程序并且有100种适合硬起音部分的矢量数据与“钢琴”有关。在这种情况下,预测控制部分启动100种矢量数据的预测负载。当一个包满足硬起音部分时,矢量加载器20和矢量解码器31-35启动硬起音部分的波形合成程序。这时,预测控制部分41的状态移到步骤S31。
在步骤S31,在设定的硬起音部分矢量ID的基础上,根据主体部分的候选矢量数据进行预测加载。由于硬起音部分的定音是已知的,所以需限制候选的矢量数据,使之与硬音部分的定音相适应。将矢量数据还限制到适合与设定的硬起音部分的包络波形对应的主体部分的范围内。在步骤S31,预测控制部分根据这些条件预测性地加载缩小了的候选数据。在此,演奏合成部分101C实际上提供主体部分的包。当设定了主体部分的包时,预测控制部分41的状态转向步骤S33。
在步骤S33,预测控制部分根据设定的主体部分的矢量ID,预测性地加载下一矢量数据的候选数据。如上所述,与主体部分有关的模式是其他主体部分、接合部分、或释放部分之一。因此,预测控制部分41预测性加载这些矢量数据。用与步骤S31同样的方式,根据设定的主体部分的定音、包络波形等使将要预测性加载的候选矢量数据缩小。
当演奏合成部分101C在执行步骤S33期间实际上传送包时,预测控制部分41的状态随所述包而变化。当提供的包与主体部分相关时,将保持步骤S33的状态。在该主体部分的基础上,针对其他主体部分、接合部分、或释放部分再度执行预测加载。当提供的包与接合部分相关时,预测控制部分41的状态转移到步骤S32。
在步骤S32,预测控制部分预测性地加载适合主体部分的矢量数据。预测性加载的候选矢量数据使可能连接到固定接合部分的主体部分之矢量数据变窄。当演奏合成部分101C提供与下一个主体部分相关的包时,预测控制部分41的状态转向步骤S33以便预测性地加载其他主体部分、接合部分、或释放部分的矢量数据。当演奏合成部分101C提供适合释放部分的包时,预测控制部分41的状态转向步骤S30。
如上所述,在步骤S30,预测控制部分预测性地加载硬起音部分的候选矢量数据。当已确定了前一释放部分的定音时,随后的硬起音部分的定音很有可能并不明显偏离。在合成释放部分期间,优选限制将要预测性地加载到释放部分定音附近的硬起音部分的矢量数据(例如,在±1个八度音的范围内)。
(3)预取部分42的操作
(3.1)加载程序(图25)
下面将描述预取部分42的操作。首先,预取部分42在特定的周期执行图25的加载程序。当程序进入图中的步骤S41时,将判断是否接收目前不执行的指定加载请求。如果判断的结果是YES,程序将转向步骤S42并完成请求矢量数据的指定加载。在给定的读取时间过后,从硬盘109中读出这些矢量数据并将其存储到高速缓冲存储器44中。
当步骤S41的判断结果是NO时,程序转入步骤S43并完成预测加载。对于为预测加载而请求的矢量数据,程序需检测将读取命令发送到高速缓冲存储器44的矢量数据(按照其它加载请求已经加载到高速缓冲存储器44中的矢量数据和计划加载的矢量数据);和不向硬盘109发送读取命令的矢量数据。向硬盘109提供的是读取后者的命令。当需要预测性地加载很多矢量数据时,可在预测加载的中期将该程序再次调入。在这种情况下,只要请求的指定加载生效,相关的预测加载将中断并且通过步骤S42完成指定加载。在预取部分42中,指定加载在预测加载前进行。
(3.2)包接收程序(图26)
每当演奏合成部分101C传送包时,预取部分42便执行图26中的包接收程序。当程序进入图中的步骤S51时,将从提供的包中抽取矢量ID以判断是否命中了与该矢量ID对应的矢量数据。在此,在以下情况下可以应用“击中的矢量数据”:(1)当已预测性加载到高速缓冲存储器44中的这些矢量数据中的任何矢量数据被击出时,(2)当矢量数据目前并没加载到高速缓冲存储器44中但是已计划作为预测加载时,或(3)一旦可以使用加载的和可用的矢量数据(使用状态)时。
在本实施例中,所用矢量数据并不立即释放,而是暂时保持在高速缓冲存储器44中作为处在“使USED状态”的矢量数据。在例如存储容量太小以致于不能存储其他矢量数据时,释放使用(USED)状态矢量数据区以便存储新的矢量数据。细节将在下面描述。
当没有击中矢量数据时,步骤S51的判断结果是NO。程序转入步骤S53。此时,将产生指定的加载请求,该请求对应于包含在上述包内的矢量ID。当紧接着执行包接收程序(图26)时,完成适合该矢量数据的指定加载。
当出现击中的矢量数据时,步骤S51的判断结果是YES。程序转入步骤S52。如果没有完成该矢量数据的预测加载,预测加载请求将变为指定加载请求。这是因为,当执行接续包接收程序时,将优先加载所述矢量数据。当程序转向步骤S54时,程序把特定加载请求的矢量数据句柄(handle)返回到演奏合成部分101C。这个句柄唯一地对应于每个矢量数据。当已经把特定加载请求的矢量数据存储到高速缓冲存储器44中时,使所述矢量数据的句柄返回。此外,产生新的句柄并将使返回到演奏合成部分101C。
当程序转向步骤S55时,程序将取消预测的加载请求,该预测的加载请求是在先前出现的和不成功的。下面将描述“消除”的特定内容。当程序转入步骤S56时,程序将改变预测控制部分41中的预测条件。即,程序使图24中每种状态下的候选预测加载变窄或根据由演奏合成部分101C提供的包改变预测控制部分41的状态。
从演奏合成部分101C的角度看,该包接收程序相当于图28中的“发出矢量(GetVector)命令”。即,演奏合成部分101C向波形合成部分101D提供包。该操作刚好等同于根据包含在包内的矢量ID发送“发出矢量数据”的GetVector命令。必须在矢量加载器20随后读出矢量数据之前准备该矢量数据。从这一点上看,指定所期望的矢量数据需要不多的句柄。
(4)高速缓冲存储器44中的数据结构
(4.1)高速缓存页面(图27)
高速缓冲存储器44可以存储将要同时使用的矢量数据。这些矢量数据构成包并且转换成一个文件(或少于或等于矢量数据总量的多个文件)。转换是根据用户的指令或建立的歌曲数据在音乐演奏之前自动执行的。图27中示出了一个实例。在图27中,对从代码本26中读出的某些矢量数据进行指定加载。这些矢量数据包括时间信息。因此,可以抽取多个将要同时使用的矢量数据。从代码本中读出的矢量数据包含各自的标题。例如,把将要同时使用的矢量数据收集在一个文件中。给该文件起一个命令标题。这样能够缩短矢量加载器20存取每个矢量数据的时间。
该文件标题包含以下信息。
数据ID:存储识别文件类型用的4位识别字符“PACK”。
数据量:表示文件数据量。
VQ类型:表示存储的矢量数据类型。
版本:表示文件格式的版本。
按照本实施例,在个人计算机上运行的应用程序发挥波形发生器的作用。系统存储器包含其高速缓冲存储器。当高速缓存矢量数据时,根据具有特定尺寸的高速缓存页面,而不根据单个矢量数据(具有自由尺寸)实施高速缓存控制。即,将单个高速缓存数据分成多个高速缓存页面,并且,将其高速缓存,以便在高速缓存页面单元内进行管理。系统存储器存储对应于每个高速缓存页面的高速缓存管理数据(页面标题)。即,硬盘根据尺寸固定的群集存储数据。高速缓存页面尺寸优选与群集尺寸或是该尺寸的整数倍相同。考虑到矢量数据的尺寸等,合适的是将高速缓存页面尺寸设定为1-1万个字节。
(4.2)页面标题的数据结构
下面将描述供给每个高速缓存页面的标题数据结构。每个标题包括具有以下成员的的VDDLCSPAGE结构。
dwPage:为高速缓存页面指定的专用页号。
dwID:该高速缓存页面内包含的矢量数据的矢量ID。
dwSize:该高速缓存页面的数据尺寸。
dwCount:表示预取的数目。每当指定负载预取矢量数据时,该成员dwCount将递增“1”,而且每当矢量加载器20读取矢量数据时,该成员dwCoun将递减“1”。
dwStatus:表示高速缓存页面的状态。高速缓存页面的状态是FREE、ALLOCATED、USED、FILLED和LOCKED之一。
lpBuf:表示矢量数据实体(非标题部分)在高速缓页面中的起始地址。
lpForward/lpBackward:在本实施例中,多个VDDLCSPAGE结构形成了双向链接表。成员lpForward是一个可有效指向链路前方其它VDDLCSPAGE结构的指示字。成员lpBackward是一个可有效指向链路后方其它VDDLCSPAGE结构的指示字。
lpNext:如上所述,例如,波形发生器可以设置在专用硬件上。在这种情况下,把将要同时使用的多个矢量数据分成多个高速缓存页面。这些高速缓存页面形成“组”。成员lpNext是一个连续指示属于同一组的其它VDDLCSPAGE结构的指示字。
上述成员dwCount具有以下作用。当包流序列中的同一矢量数据被使用两次时,将出现两次针对该矢量数据的指定加载请求。然而,当矢量加载器20首次读取矢量数据时,相应的高速缓存页面将设定为USED状态,从而不能进行第二次读取。这个问题的解决方式是对应能连续读取高速缓存页面的次数进行计数。
所以,如下所述,可以多次地使用矢量数据。即,在同一事件数据或多个事件数据的波形合成过程中,可以多次地使用同一矢量数据。在任一情况下,本实施例均使用成员dwCount来判断矢量数据的使用次数,从而能够均匀地处理高速缓冲存储器44中的高速缓存页面。
(4.3)页面标题的链接结构(图29)
图29表示用指示字lpForward和lpBackward构筑的双向链接表格结构。本实施例采用了图中所示的表格结构,从而能自由地和快速地重新配置、添加或删除数据。
在图29中,A-1是位于双向链接表格始端的页面标题。始端由特定指示字lpTop指示而终端由指示字lpTail指示。A-2和A-3是与A-1属于同一组的页面标题。即,该“组”相当于各高速缓存页面的数据,所述高速缓存页面是通过分割一个文件形成的。页面标题A-2的起始地址由页面标题A-1的成员lpNex指示。页面标题A-3的起始地址由页面标题A-2的成员lpNext指示。
B-1是链接到页面标题A-1下一级的页面标题。页面标题B-1的起始地址由页面标题A-1的成员lpFoward指示。页面标题B-1的成员lpNext指向属于同一组的页面B-2的起始地址。页面标题B-1的成员lpForward指向链接到下一组的页面C-1的起始地址。每个页面标题C-1和C-2的成员lpNext分别指向每个页面标题C-2和C-3的起始地址。在此,FREE状态下的高速缓存页面构成一组。例如,将多个组A和B设定为FILLED状态。将C组设定为FREE状态。当高速缓存新的矢量数据时,从FREE或USED状态下的组中获得高速缓存页面。将该高速缓存页面设定成新矢量数据的高速缓存页面。
优选建立新的高速缓存页面和系统存储器上的相应页面标题,并用所述高速缓存页面作为新矢量数据的高速缓存页面。在这种情况下,希望将高速页面的总量限制到特定值,以节约存储器资源。所述特定值可以根据系统存储量自动设定或由用户手工设定。当通过控制而总是将给定的恒定值作为FREE状态组的存储量时,能够将新矢量数据加速分配给高速缓存页面。
按照图29中的双向链接表格,参考成员lpForward可向前跟踪构成表格组的起始页面标题A-1、B-1和C-1。参考成员lpBackward可向后跟踪双向链接表格。为了检查是否已高速缓存给定的矢量数据,优选连续跟踪构成表格的起始页面标题和检查页面标题中的成员dwID是否与作为相关矢量数据的同一矢量ID匹配。如果匹配,与该页面标题有关的高速缓存页面是高速缓存所述矢量数据的那一组的起始高速缓存页面。当总是用单个页面同时存储将要使用的所有矢量数据时,双向链接表格将仅包括页面标题A-1,B-1,和C-1。将无效数据存储在这些页面标题的成员lpNext中。
上述成员dwStatus表示重要等级顺序中诸如LOCKED≥FILLED>ALLOCATED>USED>FREE等高速缓存页面状态。在按该重要等级顺序将高速缓存页面排序的情况下,能够将高速缓存页面加速分配给新的矢量数据。此外,优选直接在重要等级上反映成员dwCount的值。即,优选把较重要的等级分配给较大值的成员dwCount。在USED状态的高速缓存页面之间,优选将不太重要的等级分配给预先移到USED状态的高速缓存页面。
(5)读取控制部分43的操作
再次参照图28,下面将描述读取控制部分43的操作。矢量加载器20向读取控制部分43发送命令,以便根据包流内容,即,根据每个包中的矢量ID读取高速缓冲存储器44。该命令称为锁存(LockVector)。该锁存(LockVector)命令带有预先响应发出矢量(GetVector)命令返回的句柄(handle)。在正常工作状态下,矢量数据应存储在高速缓冲存储器44中。锁存(LockVector)命令使得与所述矢量数据相关的高速缓存页面起始地址指示字返回到矢量加载器20。
根据上述操作,矢量加载器20和矢量解码器31-35适当读取高速缓冲存储器44的内容以便完成波形合成程序。用这种方式,使由矢量加载器20准备的高速缓存页面呈现已锁存(LOCKED)状态(下面将详述),从而防止其内容被其它程序修改。
然而,根据情况,当从矢量加载器接收到LockVector命令时,可以不将所需的矢量数据加载到高速缓冲存储器44中。按照本实施例,当个人计算机应用程序发挥波形发生器的作用时,这种情况将经常发生。这是由于因个人计算机操作系统的条件而较长时间地占据了硬盘109。在这种情况下,需根据波形发生器的操作模式执行不同的程序。
当非实时进行波形合成时,最好停止后序程序,直到加载了指定的矢量数据为止。为此,读取控制部分43以完成硬盘109的同步读取操作。该同步读取操作意味着在读出期望的数据之前不会执行其他程序。
波形发生器实时工作时,可通过进行同步读取操作中断乐音。替换面的指示字返回到矢量加载器20。本实施例使用了各种用于忠实表现不同音调变化的矢量数据。当通过程序变化选出的音调限制在没有表现演奏风格的基音矢量时,其容量不会很大。RAM103存储多个这样的矢量作为所述音调的缺陷矢量。这些矢量替换不能在高速缓冲存储器44中准备的矢量数据。
即使是完成了实时合成,也可能出现这样的情况,即,在确保波形合成程序S14(波形合成部分101D)有足够的时间延迟的情况下,使该程序能够加载所需的矢量并合成该范围内的波形。在这种情况下,与非实时波形合成一样,当发现没有加载所需的矢量数据时,通过立即读取相应的矢量数据,便可完成波形合成。当矢量加载器20和矢量解码器31-35用完高速缓存页面后,矢量加载器20向读取控制部分43发出与该高速缓存页面对应的附有句柄的释放命令。通过发送该释放命令可取消高速缓存页面的已锁存(LOCKED)状态和释放句柄。
(6)高速缓存页面的状态转换操作
下面将参照图30中的状态转换程序描述每个高速缓存页面状态转换的操作。
最初时,将所有高速缓存页面设置到空白(FREE)状态(S61)。即,高速缓存页面的标题包含设为空白(‘FREE’)的成员dwStatus。这意味着不使用高速缓存页面并且不保证其内容。当将矢量数据加载到高速缓存页面中时,该高速缓存页面将成为已指定(ALLOCATED)状态(S62)。已指定(ALLOCATED)状态(S62)意味着不存储数据而是将数据保留以便从代码本26中进行数据读取操作。这时,在成员dwCount中存储“1”。
当将矢量数据存储在所述随后页面时,高速缓存页面的状态变为已填充(FILLED)状态。每当相对于已指定(ALLOCATED)或已填充(FILLED)状态下的同一矢量数据出现指定的加载请求时,成员dwCount将递增“1”。每当在ALLOCATED或FILLED状态下取消预测加载请求时,成员dwCount将递减“1”。当成员dwCount在这些状态下的值变为“0”时,高速缓存页面设定为USED状态(S63)。
高速缓存页面变成已填充(FILLED)状态之后,矢量加载器20发出锁存矢量(LockVector)命令并将高速缓存页面设定到已锁存(LOCKED)状态(S65)。当矢量加载器20和矢量解码器31-35用完高速缓存页面时,释放(解开)已锁存(LOCKED)状态并且发出释放命令。高速缓存页面再次设定到已填充(FILLED)状态(S64)。这时,高速缓存页面的成员dwCount递减“1”。当成员dwCount成为“0”时,高速缓存页面马上成为已使用(USED)状态(S63)。
高速缓存页面成为已使用(USED)状态后,可以重复适合所述高速缓存页面的预测加载请求或指定加载请求(预取)。在这种情况下,高速缓存页面再次返回到已填充(FILLED)状态。随着所述程序的继续,高速缓冲存储器中已使用(USED)状态的高速缓存页面增加而FREE状态的高速缓存页面减少。在高速缓存页面不保持空白(FREE)状态后,预取的新矢量数据最先连续取消(SwapOut)已使用USED状态的高速缓存页面并且将该高速缓存页面返回到空白(FREE)状态(S61)。该返回到空白(FREE)状态的高速缓存页面变为已指定(ALLOCATED)状态以便加载所述的新矢量数据。
优选使用图29中所示双向链接表格作为迅速指定已使用(USED)状态下最早高速缓存页面的方法。当高速缓存页面设定成为已使用(USED)状态时,将该高速缓存页面添加到链接表的始端。当空白(FERR)状态的高速缓存页面不够时,高速缓存页面将从链接表格的终端分离并变成空白(FREE)状态。
(7)时间管理部分45
时间管理部分45控制整个波形合成部分101D的时间。下面将参照图31说明本实施例中的时间控制。
图31假设在时间t30发出(例如,由用户按下播放按钮)开始播放的指令,并在时间t40开始实际输出乐音。时间t30和t40之间的时间周期称为等待时间β。例如,将等待时间β设为2000毫秒(msec),但不需要特别指定。
发出开始播放指令时,CPU101在每个特定时间产生播放线索。播放线索允许读取歌曲数据。根据歌曲内容,由硬盘109执行预取程序。从读出给定歌曲数据的时间t30到歌曲实际开始的时间t40之间存在时间周期。该时间周期称为先期时间γ。优选将先期时间γ的参考值设定为,例如,接近4000毫秒(msec),并且根据处理的情况使其在1000到10000毫秒(msec)的范围内变化。
如果在某种程度上能确保先期时间γ,则可以间断地产生播放线索而且间断地读取(在给定的数据块中)歌曲数据。产生播放线索的间隔称为播放线索发生间隔ε。优选将播放线索发生间隔ε的参考值设为,例如,20毫秒(msec)并根据处理情况,使其能在5-100毫秒的范围内变化。
当在时间t32读取歌曲数据时,如上所述,在步骤S11检索歌曲数据部分。在步骤S12注释乐谱。在步骤S13完成演奏合成。结果,在时间t34预取矢量数据。从预取时间T34至歌曲开始时间t40之间的时间周期称为预取时间α。
从硬盘109读出的矢量数据最终写入高速缓冲存储器44中。此后,矢量加载器20通过读取控制部分43从高速缓冲存储器44中读出矢量数据,以便开始波形合成。从波形合成开始的时间t36到歌曲开始的时间t40的时间周期称为输出等待时间δ。将输出等待时间δ的参考值最好设为,例如,近似于300毫秒(msec),并且根据处理情况使其在10-1000毫秒(msec)的范围内变化。
与播放线索相同,还适合在指定的时间范围内间断地进行给定量的波形合成处理。将开始波形合成处理的间隔参考值最好设定为,例如,50毫秒(msec),并根据处理情况使其在10-500毫秒的范围内变化。
如图31中所示,在先期时间γ、预取时间α和输出等待时间δ之间存在关系γ>α>δ。在此,从预取时间t34至波形合成开始时间t36的时间间隔“α-δ”要足够长,以便从硬盘109加载矢量数据。当加载的矢量数据量形成高峰值时,能够避免因时间间隔“α-δ”的加大引起的噪音。
4.改型
本发明并不限于上述实施例。例如,可以如以下面所述做出各种变化。
(1)当将上述波形发生器作为电子乐器使用时,该电子乐器可以是各种形式,例如弦乐器、管乐器、打击乐器等。在这种情况下,本发明并不限于包括歌曲数据播放部分101A、乐谱注释部分101B、演奏合成部分101C、波形合成部分101D等的单一电子乐器。当然,本发明还适用于分离部件,这些分离部件使用通信装置例如MIDI接口、各种网络等而相互连接。设备配置可包括个人计算机和应用软件。在这种情况下,优选提供存储在例如光盘、半导体存储器等上的或是通过网络存储的处理程序。此外,本发明可以用于自动演奏设备,例如弹奏钢琴。
(2)在上述实施例中,单个高速缓存页面可以存储多个矢量数据。显然,单个高速缓存页面也可以存储一个矢量数据。
(3)上述实施例需判断将要通过递增或递减高速缓存页面标题中的成员dwCount转到已使用(USED)状态的高速缓存页面。然而,当未使用的高速缓存页面增加时,该方法将使得高速缓冲存储器44变得不够用。在这种情况下,可以优选规定已填充(FILLED)状态的高速缓存页面“优先”,然后将具有低优先性的已填充(FILLED)状态的高速缓存页面移到已使用(USED)状态,随后移到空白(FREE)状态。当从矢量加载器20接收到高速缓存页面已移到空白(FREE)状态的锁存矢量(LockVector)命令时,使用上述替换页。作为“优先”的实例,可以使用成员dwCount的值(前提是,所述值越大,预先产生的影响越大)。此外,优选考虑使用过的高速缓存页面的量或成员dwCount的最大值(历史上的最大值)。
(4)在上述实施例中,用双向链接表格将已使用(USED)状态的高速缓存页面结合。当空白(FREE)状态的高速缓存页面变得不够时,连续释放链接表格终端的高速缓存页面(从最早开始)并将高速缓存页面变成空白(FREE)状态。然而,并不限于向空白(FREE)状态转换的顺序。例如,相对于具有很多用途的高速缓存页面,在成员dwCount历史中具有较大最大值的高速缓存页面或在每个模式开始时使用的矢量数据,优选避免转到空白(FREE)状态。换句话说,如果可能的话,可以将这些高速缓存页面或矢量数据设计成保持在高速缓冲存储器44中的结构,此外,最好在实际上不使用的矢量数据之前高速缓存实际使用的矢量数据(由于没有预测)。
通过优先高速缓存在模式开始时使用的矢量数据,硬盘109可以以增大的存取容量工作,从而降低了使用替换页的需要。
特别是,当需要将优先高速缓存的高速缓存页面转换到已使用(USED)状态时,优选将该高速缓存页面添加到链接表格的始端。当需要将其他高速缓存页面转换到已使用(USED)状态时,优选将这些高速缓存页面添加到链接表格的中部。
(5)在上述实施例中,是用矢量数据作为声音数据的实例。然而,声音数据并不限于矢量数据。当然,可以优选使用指定乐音波形的各种波形数据或参数作为声音数据。
(6)在上述实施例中,如图15-23所示,演奏合成部分101C直接向预取部分42输入包流。代替这一操作,预取部分42可以读取暂时写入包队列缓冲器21-25中的包流。在这种情况下,优选的是,预取部分42在矢量加载器20工作之前的特定时间内读取和处理存储在包队列缓冲器中的包。
如上所述,按照本发明的第一方面,音响设备接收音调类别或第一到第三声音数据类别中的一个,预测候选的和将随后指定的声音数据,并预先将所述候选数据从低速存储装置转送到高速存储装置中。因此,可以迅速处理第一至第三声音数据类别,同时将大量声音数据存储在低速存储装置中。这样便可以用丰富的表现力实时播放波形合成声音数据。
如上所述,根据本发明的第二方面,合成方法能够根据相关的计数值判断出下面是否使用转换到高速存储装置的声音数据。当声音数据是后面实际使用的声音数据时,不需要对低速存储装置例如硬盘等进行存取。这能降低对低速存储装置例如硬盘等进行存取的频率。
如上所述,按照本发明的第三方面,本方法利用致密存储容量能够实时产生与演奏风格或乐音的发音相关的高质量波形。即,根据演奏风格参数修正所产生的矢量数据。这样便不需要存储与多种音乐演奏模式(演奏风格)相应的矢量数据,因此,节约了预先存储矢量数据的存储容量。此外,可以根据演奏风格参数,并依据共用演奏风格识别信息,精细地控制演奏声音波形的特性,由此提高了可控性。
用这种方式,可以使用具有不同演奏风格(发音)特性的高质量波形。这些波形包括例如颤音和震音等进行了调制的波形,拐弯音等经过定音调制的波形,连奏波形,具有经过定音变化的过渡音或装饰音的波形。把产生自由波形的高质量波形简单地结合可以还改善所用的高质量波形。用改善可控性和可编辑性的方式可以使实时产生的与演奏风格或发音有关的高质量波形具有极佳效果。
如上所述,按照本发明的第四方面,在用声音数据进行波形合成后,将所用数据存储在将来能够使用状态下的上述高速存储装置中。如果在下面实际使用了声音数据,则不再需要对诸如硬盘等低速存储装置进行存取。这将能够降低对诸如硬盘等低速存取装置存取的频率。

Claims (12)

1.一种乐音合成方法,借助于第一存储装置和第二存储装置合成乐音,其中,该第一存储装置存储代表各种乐音的波形的矢量数据,所述的第一存储装置按第一存取速率存取,该第二存储装置以快于该第一存取速率的第二存取速率高速缓存该矢量数据,用于迅速提供代表将要合成的乐音波形的矢量数据,该方法包括以下步骤:
接收沿时间轴连续播放乐音的包流,所述包流包含先行包和接续包,每个包均包含有效指定在该第一存储装置中存储的矢量数据的识别信息;
根据包含在先行包中的识别信息,预测接续包中的矢量数据;
在接收接续包之前将预测的矢量数据从该第一存储装置传输到该第二存储装置,以便在合成之前将预测的矢量数据高速缓存到该第二存储装置中;以及
当接收到接续包并且包含在接续包中的识别信息命中高速缓存的矢量数据时,从该第二存储装置中检索出高速缓存的矢量数据并由此合成乐音。
2.如权利要求1所述的方法,还包括如下步骤:当未命中高速缓存的矢量数据时,将由包含在接续包中的识别信息指定的矢量数据从该第一存储装置传输到该第二存储装置,以确保乐音的连续合成。
3.如权利要求1所述的方法,其中该第一存储装置存储的矢量数据分成第一矢量数据和第二矢量数据,所述第一矢量数据代表对应于乐音前部的起音波形,而第二矢量数据代表对应于同一乐音后部的主体波形,从而所述预测步骤将预测代表主体波形的第二矢量数据能否与由包含在先行包中的第一矢量数据指定的起音波形相接。
4.如权利要求3所述的方法,其中该第一存储装置还存储第三矢量数据,该数据代表的是乐音主体波形之后的释放波形或连接波形,从而所述预测步骤将预测代表释放波形或连接波形的第三矢量数据能否与由包含在先行包中的第一矢量数据指定的主体波形相接。
5.如权利要求1所述的方法,还包括如下步骤:使没有被命中的高速缓存矢量数据成为可释放状态,以便能够在接收下一包之前将处于可释放状态的高速缓存矢量数据从该第二存储装置中删除。
6.如权利要求1所述的方法,其中该第一存储装置设置成硬盘驱动器的形式,而该第二存储装置设置成随机存取存储器芯片的形式。
7.一种用于执行如权利要求1所述方法的计算机程序。
8.如权利要求1所述的方法,还包括如下步骤:在该第二存储装置中保持在对应于先前包的合成中使用的矢量数据,以便在对应于接续包的另一次合成中再次使用所述数据。
9.如权利要求1所述的方法,其中所述传输步骤周期性地传输足以连续生成乐音的预定量的矢量数据。
10.如权利要求8所述的方法,还包括如下步骤:检测该第二存储装置何时没有足够的空白区域来接收将要传输到该第二存储装置中的新矢量数据,并且从该第二存储装置中释放旧矢量数据以产生用于接收新矢量数据的空白区域。
11.如权利要求10所述的方法,其中所述矢量数据用于合成具有预定长度的乐音波形,所述矢量数据包含用于合成预定波形长度前部的有实义的矢量数据以及用于合成预定波形长度保持部分的无实义的矢量数据;其中相比释放有实义的矢量数据,所述释放步骤更易于释放无实义的矢量数据。
12.一种用于合成乐音的设备,包括:
第一存储装置,其存储代表各种乐音波形的矢量数据,所述第一存储装置可以第一存取速率进行存取;
第二存储装置,其以快于该第一存取速率的第二存取速率高速缓存矢量数据,以便迅速提供代表将要合成的乐音波形的矢量数据;和
处理器,其控制矢量数据从该第一存储装置传输到该第二存储装置并且从该第二存储装置中获得用于乐音合成的矢量数据,其中该处理器包括:
接收部分,其接收沿时间轴连续播放乐音的包流,所述包流包含先行包和接续包,每个包中均包含有效指定在该第一存储装置中存储的矢量数据的识别信息;
预测部分,其根据包含在先行包中的识别信息预测接续包中的矢量数据;
传输部分,其在接收到接续包之前,将预测的矢量数据从该第一存储装置传输到该第二存储装置,以便在合成之前将预测的矢量数据高速缓存到该第二存储装置中;以及
检索部分,其在接收到接续包并且包含在接续包中的识别信息命中高速缓存的矢量数据时,从该第二存储装置中检索出高速缓存的矢量数据并由此合成乐音。
CN2006100735605A 2001-03-23 2002-03-22 乐音合成方法和用于合成乐音的设备 Expired - Fee Related CN1838234B (zh)

Applications Claiming Priority (12)

Application Number Priority Date Filing Date Title
JP2001086165A JP3674526B2 (ja) 2001-03-23 2001-03-23 波形合成方法、音データ転送装置およびプログラム
JP2001086164A JP3630106B2 (ja) 2001-03-23 2001-03-23 音データ転送方法、音データ転送装置およびプログラム
JP2001086166A JP3630107B2 (ja) 2001-03-23 2001-03-23 音データ転送方法、音データ転送装置およびプログラム
JP2001086166 2001-03-23
JP2001-086163 2001-03-23
JP2001086163A JP3649141B2 (ja) 2001-03-23 2001-03-23 音データ転送方法、音データ転送装置およびプログラム
JP2001086163 2001-03-23
JP2001-086164 2001-03-23
JP2001086165 2001-03-23
JP2001-086166 2001-03-23
JP2001-086165 2001-03-23
JP2001086164 2001-03-23

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CNB021080259A Division CN1258751C (zh) 2001-03-23 2002-03-22 乐音合成方法和用于合成乐音的设备

Publications (2)

Publication Number Publication Date
CN1838234A true CN1838234A (zh) 2006-09-27
CN1838234B CN1838234B (zh) 2011-04-20

Family

ID=18941581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006100735605A Expired - Fee Related CN1838234B (zh) 2001-03-23 2002-03-22 乐音合成方法和用于合成乐音的设备

Country Status (2)

Country Link
JP (1) JP3630106B2 (zh)
CN (1) CN1838234B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111341290A (zh) * 2020-02-28 2020-06-26 腾讯音乐娱乐科技(深圳)有限公司 确定音频的波形的方法、装置、设备及存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6372407B2 (ja) * 2015-03-30 2018-08-15 ブラザー工業株式会社 楽曲演奏装置及び楽曲演奏用プログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4980823A (en) * 1987-06-22 1990-12-25 International Business Machines Corporation Sequential prefetching with deconfirmation
JP2671747B2 (ja) * 1993-04-27 1997-10-29 ヤマハ株式会社 楽音形成装置
TW282537B (zh) * 1994-11-02 1996-08-01 Seikosha Kk
SG81938A1 (en) * 1997-09-30 2001-07-24 Yamaha Corp Tone data making method and device and recording medium
JP3806263B2 (ja) * 1998-07-16 2006-08-09 ヤマハ株式会社 楽音合成装置および記憶媒体

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111341290A (zh) * 2020-02-28 2020-06-26 腾讯音乐娱乐科技(深圳)有限公司 确定音频的波形的方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN1838234B (zh) 2011-04-20
JP2002287755A (ja) 2002-10-04
JP3630106B2 (ja) 2005-03-16

Similar Documents

Publication Publication Date Title
CN1258751C (zh) 乐音合成方法和用于合成乐音的设备
CN1223983C (zh) 乐音语音再现装置及其控制方法、及服务器装置
CN1249663C (zh) 基于不同种类音乐数据的合奏的音乐播放器
CN1103987C (zh) 记录音乐数据的方法及再现仪器,压缩音乐数据的仪器
JP3744216B2 (ja) 波形形成装置及び方法
CN1479916A (zh) 使用演奏乐器的声音信息的音乐分析方法
CN1906660A (zh) 语音合成装置
CN1525433A (zh) 通过空闲琴键改变演奏风格的乐器、方法及其计算机程序
CN1873775B (zh) 乐音合成装置及方法
CN1813285A (zh) 语音合成设备、语音合成方法和程序
CN101046951A (zh) 自动演奏乐器以及合并在其中的自动演奏系统
JP2001100760A (ja) 波形生成方法及び装置
JP3601371B2 (ja) 波形生成方法及び装置
CN1612204A (zh) 乐器,音乐数据产生器和用于乐器的音乐数据源
CN1159698C (zh) 利用计算机软件的乐音发生器系统
JP2001100762A (ja) 波形記録、再生及び生成方法並びに装置
CN1838234A (zh) 乐音合成方法和用于合成乐音的设备
JP2001100758A (ja) 波形生成方法及び装置
CN1816846A (zh) 用于选择话音数据的设备、方法和程序
JP2001100759A (ja) 波形生成方法及び装置
CN86101238A (zh) 语音合成组件
JP2001100761A (ja) 波形生成方法及び装置
JP3630107B2 (ja) 音データ転送方法、音データ転送装置およびプログラム
JP3904012B2 (ja) 波形生成装置及び方法
JP3674526B2 (ja) 波形合成方法、音データ転送装置およびプログラム

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110420

Termination date: 20160322

CF01 Termination of patent right due to non-payment of annual fee