JP3630106B2 - 音データ転送方法、音データ転送装置およびプログラム - Google Patents
音データ転送方法、音データ転送装置およびプログラム Download PDFInfo
- Publication number
- JP3630106B2 JP3630106B2 JP2001086164A JP2001086164A JP3630106B2 JP 3630106 B2 JP3630106 B2 JP 3630106B2 JP 2001086164 A JP2001086164 A JP 2001086164A JP 2001086164 A JP2001086164 A JP 2001086164A JP 3630106 B2 JP3630106 B2 JP 3630106B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- waveform
- vector
- sound data
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
この発明は、ハードディスク等、比較的低速な記憶媒体からの波形データの読み出し等に基づき、楽音あるいは音声若しくはその他任意の音の波形を生成する音データ転送方法、音データ転送装置およびプログラムに関し、特に、演奏者により行われた自然楽器固有の各種奏法若しくはアーティキュレーションによる音色変化を忠実に表現した波形を生成するものに関する。この発明は、電子楽器は勿論のこと、自動演奏装置、コンピュータ、電子ゲーム装置その他のマルチメディア機器等、楽音あるいは音声若しくはその他任意の音を発生する機能を有するあらゆる分野の機器若しくは装置または方法において広範囲に応用できるものである。なお、この明細書において、楽音波形という場合、音楽的な音の波形に限るものではなく、音声あるいはその他任意の音の波形を含んでいてもよい意味合いで用いるものとする。
【0002】
【従来の技術】
波形メモリにおいて、PCM(パルス符号変調)あるいはDPCM(差分PCM)又はADPCM(適応差分PCM)等の任意の符号化方式で符号化した波形データ(つまり波形サンプルデータ)を記憶しておき、これを所望の音楽ピッチに対応して読み出すことにより、楽音波形を形成するようにした、いわゆる「波形メモリ読み出し」技術は既に公知であり、また、様々なタイプの「波形メモリ読み出し方式」技術が知られている。従来知られた「波形メモリ読み出し方式」技術のほとんどは、発音開始から終了までの1つの音の波形を発生するためのものである。一例として、発音開始から終了までの1音の全波形の波形データを記憶する方式がある。また、別の例として、変化の複雑なアタック部などについてはその全波形の波形データを記憶し、変化のあまりないサステイン部などについては所定のループ波形を記憶する方式がある。なお、本明細書において、「ループ波形」とは繰り返し読出し(ループ読出し)される波形という意味で用いるものとする。
【0003】
波形データを記憶するための手段としては、ROM、RAM、ハードディスク、CD−ROM等が知られている。ハードディスク、CD−ROM等は単位記憶容量あたりの単価が安価であり大容量のデータ記憶に適している。しかし、ハードディスク等はアクセス時間が遅く、かつ一定していないため、楽音信号を出力するタイミングで必要な波形データを即座に読み出すことは不可能である。このため、以下のように様々な技術が提案されている。
まず、特開平6−308964号公報においては、ハードディスク等に記憶した複数の波形データの先頭部分を予めRAMに転送しておく技術が開示されている。すなわち、発音指示が供給されると、ハードディスク等の当該波形データの後続部分の読み出しが開始されるとともに予めRAMに記憶された先頭部分が再生される。そして、先頭部分の再生が終了した後に、後続部分の波形データが再生されるのである。
【0004】
また、特開昭63−181188号公報においては、順次発音すべき波形データがシーケンスデータとして予め定義されている場合に、各波形データを順次読み出しながら再生する技術が開示されている。この技術においては、各波形データの読出しを開始する時刻が発音タイミングよりも早くなるように、シーケンスタイミングに対応して予め定められる。
【0005】
【発明が解決しようとする課題】
しかし、特開平6−308964号公報に係る技術によれば、予め全ての波形データの先頭部分を予めRAMに転送しておく必要があるため、RAMの使用効率が低くなるという問題があった。また、特開昭63−181188号公報に係る技術は、一回のイベント毎にハードディスク等が必ずアクセスされるため、ハードディスク等の騒音が大きくなり、寿命も短くなる。しかも、ハードディスク等が頻繁にアクセスされることにより、他の処理に割り当てるリソースが少なくなる。
本発明は上述した事情に鑑みてなされたものであり、ハードディスク等に対するアクセス頻度を低減させることができる音データ転送方法、音データ転送装置およびプログラムを提供することを目的としている。
【0006】
【課題を解決するための手段】
上記課題を解決するため本発明にあっては、下記構成を具備することを特徴とする。なお、括弧内は例示である。
請求項1記載の構成にあっては、楽音波形の音データ(ベクトルデータ)を記憶する低速記憶装置(ハードディスク109)と、該音データをキャッシングする高速記憶装置(キャッシュメモリ44)とを用いて、前記低速記憶装置に記憶された音データのうちの一部を波形合成のために前記高速記憶装置に転送する音データ転送方法であって、使用されることが決定され、または使用されると予測される音データについて順次準備指示を行う(予測制御部41または奏法合成部101Cから先読みプリフェッチ部42へのベクトルIDまたはパケットを供給する)準備過程と、予め準備指示され、かつ前記高速記憶装置に記憶されている音データを用いて波形合成の開始指示を行う合成開始指示過程と、前記順次準備指示された音データが前記高速記憶装置に記憶されていない場合に、前記低速記憶装置から前記高速記憶装置に該音データを転送するとともに、該転送された音データに対応するカウント値(メンバdwCount)を初期値(1)に設定する転送過程(ステップS42,S43)と前記順次準備指示された音データが前記高速記憶装置に既に記憶されている場合に、該音データに対応するカウント値(メンバdwCount)を増加させるカウントアップ過程と、前記合成開始指示過程による開始指示に応じて、前記音データを用いた波形合成を開始する波形合成過程であって、使用済みの音データに係るカウント値(メンバdwCount)を減少させる(FILLED状態:S64におけるプリフェッチ)ものと、前記高速記憶装置に記憶された音データのうち今後の開始指示の予定の無い音データを各音データに対応するカウント値に基づいて決定し、決定した音データを消去可能な状態に設定する(メンバdwCountが「0」に達するとFILLED状態S64からUSED状態S63に遷移させる)設定過程とを有することを特徴とする。
さらに、請求項2記載の構成にあっては、請求項1記載の音データ転送方法において、イベントシーケンス(演奏データ)から再生開始時刻に先立ってイベントデータを先読みする先読み過程をさらに有し、前記準備過程においては該先読みされたイベントデータに基づいて準備指示に係る音データが決定され、これによって共通の音データが使用される複数のイベントデータに対して、前記転送過程を共用することを特徴とする。
さらに、請求項3記載の構成にあっては、請求項1記載の音データ転送方法において、イベントデータが供給された時刻から所定時間遅れた時刻を再生開始時刻として設定する過程をさらに有し、前記準備過程においては該供給されたイベントデータに基づいて準備指示に係る音データが決定され、これによって共通の音データが使用される複数のイベントデータに対して、前記転送過程を共用することを特徴とする。
さらに、請求項4記載の構成にあっては、請求項1記載の音データ転送方法において、前記準備過程においては、一つのイベントデータに基づいて、同一の音データに対する複数回の前記準備指示が行われ、前記波形合成過程においては、前記一つのイベントデータに対応して前記音データが使用される毎に、前記カウント値がその都度減少されることを特徴とする。
また、請求項5記載の構成にあっては、請求項1ないし4の何れかに記載の方法を実行することを特徴とする。
また、請求項6記載の構成にあっては、請求項1ないし4の何れかに記載の方法を実行することを特徴とする。
【0007】
【発明の実施の形態】
1.実施形態のハードウエア構成
以下、この発明の一実施形態を添付図面に従って詳細に説明する。
図1は、この発明に係る波形生成装置のハードウエア構成例を示すブロック図である。ここに示されたハードウエア構成例はコンピュータを用いて構成されており、そこにおいて、波形生成処理は、コンピュータがこの発明に係る波形生成処理を実現する所定のプログラム(ソフトウエア)を実行することにより実施される。勿論、この波形生成処理はコンピュータソフトウエアの形態に限らず、DSP(ディジタル・シグナル・プロセッサ)によって処理されるマイクロプログラムの形態でも実施可能であり、また、この種のプログラムの形態に限らず、ディスクリート回路又は集積回路若しくは大規模集積回路等を含んで構成された専用ハードウエア装置の形態で実施してもよい。また、この波形生成装置は、電子楽器あるいはカラオケ装置又は電子ゲーム装置又はその他のマルチメディア機器又はパーソナルコンピュータ等、任意の製品応用形態をとっていてよい。
【0008】
図1に示されたハードウエア構成例においては、コンピュータのメイン制御部としてのCPU101に対して、バスラインBL(データあるいはアドレスバス等)を介してリードオンリメモリ(ROM)102、ランダムアクセスメモリ(RAM)103、パネルスイッチ104、パネル表示器105、ドライブ106、波形取込部107、波形出力部108、ハードディスク109、通信インタフェース111がそれぞれ接続されている。CPU101は、後述する「波形データベース作成」や「制作したデータベースに基づく楽音合成(ソフトウエア音源)」等の処理を、所定のプログラムに基づいて実行する。これらのプログラムは、通信インタフェース111を介したネットワークあるいはドライブ106に装着されたCDやMO等の外部記憶メディア106A等から供給されてハードディスク109に記憶される。そして、実行時にハードディスク109からRAM103にロードされる。あるいは、ROM102にプログラムが記録されていてもよい。ROM102は、CPU101により実行あるいは参照される各種プログラムや各種データ等を格納するものである。RAM103は、演奏に関する各種情報やCPU101がプログラムを実行する際に発生する各種データを一時的に記憶するワーキングメモリとして、あるいは現在実行中のプログラムやそれに関連するデータを記憶するメモリとして使用される。RAM103の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。パネルスイッチ104は、楽音をサンプリングする指示やサンプリングされた波形データ等のエディットや各種情報の入力等を行うための各種の操作子を含んで構成される。例えば、数値データ入力用のテンキーや文字データ入力用のキーボード、あるいはパネルスイッチ等である。この他にも音高、音色、効果等を選択・設定・制御するための各種操作子を含んでいてよい。パネル表示器105は、パネルスイッチ104により入力された各種情報やサンプリングされた波形データ等を表示する、例えば液晶表示パネル(LCD)やCRT等のディスプレイである。
【0009】
波形取込部107はA/D変換器を内蔵し、外部波形入力(例えば、マイクロフォンなどからの入力)されたアナログ楽音信号をデジタルデータに変換(サンプリング)してRAM103あるいはハードディスク109に該デジタル波形データをオリジナル波形データ(生成すべき波形データの素材となる波形データ)として取り込むものである。CPU101によって実行する「波形データベース作成」処理では、上記取り込んだオリジナル波形データを基にして本発明に従う「波形データベース」の作成を行う。また、CPU101によって実行する「データベースに基づく楽音合成」処理では、上記「波形データベース」を使用して演奏情報に応じた任意の楽音信号の波形データを生成する。勿論、複数の楽音信号の同時発生が可能である。生成された楽音信号の波形データはバスラインBLを介して波形出力部108に与えられ、適宜バッファ記憶される。波形出力部108ではバッファ記憶された波形データを所定の出力サンプリング周波数にしたがって出力し、これをD/A変換してサウンドシステム108Aに送出する。こうして、波形出力部108から出力された楽音信号は、サウンドシステム108Aを介して発音される。ハードディスク109は、波形データや奏法に応じた波形を合成するためのデータ(後述する奏法テーブル、コードブック等のデータ)、各種音色パラメータ等からなる音色データなどのような演奏に関する複数種類のデータを記憶したり、前記CPU101が実行する各種プログラム等の制御に関するデータを記憶したりするものである。
【0010】
ドライブ106は、波形データや奏法に応じた波形を合成するためのデータ(後述する奏法テーブル、コードブック等の各種データ)、多種多様な音色パラメータ等からなる音色データなどのような演奏に関する複数種類のデータを記憶したり、前記CPU101が実行する各種プログラム等の制御に関するデータを記憶したりするための着脱可能なディスク(外部記憶メディア106A)をドライブするものである。なお、前記ドライブ106によりドライブされる外部記憶メディア106Aはフロッピーディスク(FD)の他に、コンパクトディスク(CD−ROM・CD−RAM)、光磁気ディスク(MO)、あるいはDVD(Digital Versatile Diskの略)等の着脱自在な様々な形態の記憶メディアであってよい。制御プログラムを記憶した外部記憶メディア106Aをドライブ106にセットし、その内容(制御プログラム)をハードディスク109に落とさずに、RAM103に直接ロードしてもよい。なお、外部記憶メディア106Aを用いて、あるいはネットワークを介して制御プログラムを提供するやり方は、制御プログラムの追加やバージョンアップ等を容易に行うことができるので好都合である。
【0011】
通信インタフェース111は、例えばLANやインターネット、電話回線等の通信ネットワーク(図示せず)に接続されており、該通信ネットワークを介して、サーバコンピュータ等(図示せず)と接続され、当該サーバコンピュータ等から制御プログラムや各種データあるいは演奏情報などを波形生成装置側に取り込むためのものである。すなわち、ROM102やハードディスク109に制御プログラムや各種データが記憶されていない場合に、サーバコンピュータから制御プログラムや各種データをダウンロードするために用いられる。クライアントとなる波形生成装置は、通信インタフェース111を介してサーバコンピュータへと制御プログラムや各種データのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求された制御プログラムやデータなどを通信インタフェース111を介してハードディスク109に蓄積することにより、ダウンロードが完了する。更に、MIDIインタフェースを含み、MIDIの演奏情報を受け取るようにしてもよいのは勿論である。また、音楽演奏用キーボードや演奏操作機器をバスラインBLに接続し、リアルタイム演奏によって演奏情報を供給するようにしてもよいのは言うまでもない。勿論、所望の音楽曲の演奏情報を記憶した外部記憶メディア106Aを使用して、演奏情報を供給するようにしてもよい。
【0012】
2.波形データベース作成処理
2.1.処理の概要
図2は、上述した波形生成装置において実行される「波形データベース作成処理」の一実施形態を示すフローチャートである。当該処理は、いろいろな奏法(若しくはアーティキュレーション)に対応するために、いろいろな奏法(若しくはアーティキュレーション)で演奏された演奏音の波形を素材としてベクトルデータを作成するための処理である。
ステップS1では、後述する奏法テーブル及びコードブックを記憶するためのデータベースを準備する。このデータベースとなる媒体としては、例えばハードディスク109を使用する。そして、様々な自然楽器の様々な演奏態様による波形データを収集する(ステップS2)。すなわち、様々な自然楽器の様々な実際の演奏音を外部波形入力(例えば、マイクロフォン等)から波形取込部107を介して取り込み、それらの演奏音の波形データ(オリジナル波形データ)をハードディスク109の所定のエリアに記憶する。この際に取り込む演奏音の波形データは演奏全体の波形データであってもよいし、あるフレーズ、あるいは1音、あるいはアタック部やリリース部といった特徴のある演奏の一部の波形データだけであってもよい。
【0013】
次に、こうして得られた自然楽器固有の様々な演奏態様による演奏音の波形データを特徴的な部分毎に切り分けて、チューニング及びファイル名付けする(ステップS3)。すなわち、取り込んだオリジナル波形データを波形形状の変化を代表する一部の波形(例えば、アタック部波形、ボディ部波形、リリース部波形、ジョイント部波形等)毎に分離して(▲1▼切り分け)、分離した1周期乃至複数周期の波形データがそれぞれいかなるピッチであるかを判定し(▲2▼チューニング)、さらにそれぞれ分離した波形データに対してファイル名を付与する(▲3▼ファイル名付け)。ただし、アタック部分やリリース部分といった演奏の一部の波形データを取り込んでいる場合には、このような波形の分離(▲1▼切り分け)を省略できる。
次に、周波数分析による成分分離を行う(ステップS4)。すなわち、ステップS3で分離生成された一部の波形データをFFT(高速フーリエ変換)分析して複数成分に分離し(この実施形態では、調和成分と調和外成分に分離する)、さらに各成分(調和成分、調和外成分等)から波形、ピッチ、振幅の各要素毎の特徴抽出、つまり特徴分離を行う(ただし、調和成分と調和外成分に分離する場合、調和外成分はピッチを持たないものであることから調和外成分についてのピッチ分離は行わなくてよい)。例えば「波形」(Timbre)要素は、ピッチと振幅をノーマライズした波形形状のみ特徴を抽出したものである。「ピッチ」(Pitch)要素は、基準ピッチに対するピッチ変動特性を抽出したものである。「振幅」(Amplitude)要素は、振幅エンベロープ特性を抽出したものである。
【0014】
ステップS5では、ベクトルデータの作成が行われる。すなわち、分離された各成分(調和成分、調和外成分等)の波形(Timbre)やピッチ(Pitch)や振幅(Amplitude)の各要素毎に複数のサンプル値を分散的に又は必要に応じて連続的に抽出し、当該サンプル値列に対して各々異なったベクトルID(識別情報)を付与して、サンプル値の時刻位置のデータとともにコードブックに記憶する(以下、このようなサンプルデータをベクトルデータと呼ぶ)。この実施形態では、調和成分の波形(Timbre)要素のベクトルデータ、ピッチ(Pitch)要素のベクトルデータ、振幅(Amplitude)要素のベクトルデータと、調和外成分の波形(Timbre)要素のベクトルデータ、振幅(Amplitude)要素のベクトルデータとがそれぞれ作成される。このように、これらの各成分要素毎のベクトルデータは、時間軸の進行に伴い変化しうるデータである。次に、奏法モジュールのデータ(詳しい内容については後述する)を作成して奏法モジュールを奏法テーブルに記憶する。こうして作成された奏法モジュール及びベクトルデータは、データベースにおける奏法テーブル及びコードブックへ書き込まれ(ステップS6)、データベースへのデータ蓄積がはかられる。上述したように、ベクトルデータは取り込んだオリジナル波形データそのままではなく取り込んだオリジナル波形の形状を代表する波形を各要素毎に分離したデータであって、このベクトルデータは各々が最終的には奏法モジュールの単位となるデータである。このように、コードブックには抽出した波形形状の変化を代表する一部の波形データを圧縮した形で記憶する。一方、奏法テーブルには、奏法モジュールのデータ(つまり、圧縮された形で記憶されたベクトルデータを元の波形形状の波形データに戻すために必要な各種のデータや、コードブックに記憶されたベクトルデータを指定するためのIDデータ)などが記憶される(詳しくは後述する)。
【0015】
上述した特徴分離(ステップS4参照)の際に、振幅、ピッチ、波形要素の他に時間を要素として特徴抽出を行う(以下、抽出された時間要素のベクトルデータのことを「タイムベクトルデータ」と呼ぶ)。この時間要素については、分離生成された一部の波形データの時間区間におけるオリジナル波形データの時間長をそのまま用いる。従って、当該時間区間のオリジナルの時間長(可変値である)を比「1」で示すこととすれば、当該「波形データベース作成処理」時においてこの時間長をあえて分析・測定する必要はない。その場合、時間要素についてのデータ(すなわち、「タイムベクトルデータ」)はどの時間区間でも同じ値“1”であるから、これをコードブックにあえて記憶しておかなくてもよい。勿論、これに限らず、この実際の時間長を分析・測定し、これを「タイムベクトルデータ」としてコードブックに記憶するようにする変形例も実施可能である。
【0016】
そして、データベース作成が充分に行われたか否かを判定する(ステップS7)。すなわち、外部波形入力から得られた様々な自然楽器の様々な演奏態様による演奏音のオリジナル波形データの収集を充分に行って、様々な奏法モジュールのデータ及びベクトルデータを充分に得たか否かを判定する。この判定は自動判定に限らず、ユーザによるスイッチ入力操作に基づく処理続行可否指示に従って行うようにしてもよい。オリジナル波形データの収集とそれに基づくベクトルデータの作成が充分に行われたと判定されたならば(ステップS7のYES)、当該処理を終了する。引き続き、オリジナル波形データの収集とそれに基づくベクトルデータの作成を行う場合(ステップS7のNO)、ステップS2の処理へ戻り、上述した各処理(ステップS2〜ステップS7)を繰り返し実行する。上記「ベクトルデータの作成が充分に行われたか否か」の判定(ステップS7)は、「作成したベクトルデータを実際に使用して楽音を生成してみる」ことにより行われてもよい。すなわち、ステップS7で一旦「ベクトルデータを充分作成した」(ステップS7のYES)と判断して図2に示すフローを抜けた後に、「その作成したベクトルデータを使用して楽音を再生してみたら満足できなかったので、再びステップS2以降の処理を行ってベクトルデータを追加する」というような処理を行ってもよい。つまり、「ベクトルデータを作成してデータベースに追加する」という処理は、必要に応じて随時行われる。
なお、上述の「波形データベース作成処理」において、奏法モジュールを任意に追加・削除したり、あるいは奏法モジュールのデータ等の編集を行うことができるようにしてもよい。
【0017】
2.2.奏法モジュールのデータ構成
ここで、奏法モジュールのデータについて具体的に説明する。
奏法モジュールはハードディスク109上にデータベース化されて構成される奏法テーブルに記憶され、1つの奏法モジュールは「奏法ID」と「奏法パラメータ」の組み合わせによって指定することができるようになっている。「奏法ID」は、その中に楽器情報及びモジュールパーツ名を含む。例えば、「奏法ID」は次のように定義される。例えば、1つの「奏法ID」が32ビット(第0〜31ビット)列で表現されているとすると、そのうちの6ビットを使用して楽器情報を表現する。例えば、当該6ビット列が「000000」であればAltoSax(アルト・サックス)を示し、「001000」であればViolin(バイオリン)を示す楽器情報である。この楽器情報は前記6ビット列のうち上位3ビット列を楽器種類の大分類に使用し、下位3ビット列を楽器種類の小分類のために使用するなどしてよい。また、32ビット列の別の6ビットを使用してモジュールパーツ名を表現する。例えば、当該6ビット列が「000000」であればNormalAttack、「000001」であればBendAttack、「000010」であればGraceNoteAttack、「001000」であればNormalShortBody、「001001」であればVibBody、「001010」であればNormalLongBody、「010000」であればNormalRelease、「011000」であればNormalJoint、「011001」であればGraceNoteJointを示すモジュールパーツ名である。勿論、上述した構成に限られないことは言うまでもない。
【0018】
上述したように、個々の奏法モジュールは、上記「奏法ID」と「奏法パラメータ」との組み合わせで特定される。すなわち、「奏法ID」に応じて所定の奏法モジュールが特定され、その内容が「奏法パラメータ」に応じて可変設定される。この「奏法パラメータ」は該奏法モジュールに対応する波形データを特徴付ける、若しくは制御するパラメータであり、各奏法モジュール毎に所定の種類の「奏法パラメータ」が存在している。例えば、AltoSax [NormalAttack]モジュールの場合にはAttack直後の絶対音高やAttack直後の音量などの種類の奏法パラメータが与えられてよいし、AltoSax [BendUpAttack]モジュールの場合にはBendUpAttack終了時の絶対音高、BendUpAttack時のBend深さの初期値、BendUpAttack開始(ノートオンタイミング)〜終了までの時間、Attack直後の音量、あるいはBendUpAttack中のデフォルトのカーブの時間的な伸縮などの種類の奏法パラメータが与えられてよい。また、AltoSax [NormalShortBody]モジュールの場合には当該モジュールの絶対音高、NormalShortBodyの終了時刻−開始時刻、NormalShortBody開始時のダイナミクス、NormalShortBody終了時のダイナミクスなどの種類の奏法パラメータが与えられてよい。なお、奏法モジュールには、「奏法パラメータ」の採りうる全ての値に対応するデータ(後述する要素データ)を必ずしも有しない。「奏法パラメータ」の飛び飛びの一部の値だけに応じたデータを記憶している場合もある。すなわち、例えばAltoSax [NormalAttack]モジュールの場合、Attack直後の絶対音高やAttack直後の音量の全ての値ではなく、一部のデータだけに対応したデータを記憶していてもよい。
このように、奏法モジュールを「奏法ID」と「奏法パラメータ」で指定できるようにすることで、例えばAltoSax [NormalAttack]であればアルトサックスのノーマルアタック部を示す複数データ(後述する要素データ)の中から所望の奏法パラメータに応じたデータを指定することができるし、Violin[BendAttack]であればバイオリンのベンドアタック部を示す複数データ(後述する要素データ)の中から所望の奏法パラメータに応じたデータを指定することができる。
【0019】
2.3.奏法テーブルのデータ構成
奏法テーブルにおいては、個々の奏法モジュールにつき、当該奏法モジュールに対応する波形を生成するために必要なデータ、例えば各成分要素毎のベクトルデータ(波形要素、ピッチ要素(ピッチエンベロープ)、振幅要素(振幅エンベロープ)等)を指定するためのベクトルIDや代表点値列(複数サンプル列の中の補正のための代表的サンプル点を指示するデータ)あるいは各成分要素毎のベクトルデータ(波形要素、ピッチ要素(ピッチエンベロープ)、振幅要素(振幅エンベロープ))の開始時間位置や終了時間位置などの情報等を記憶している。つまり、ベクトルデータという圧縮された形でデータベースに記憶されている波形から通常形状の波形を再生するために必要な各種のデータを記憶している(以下、このようなデータを「要素データ」とも呼ぶ)。奏法テーブルにおいて、1つの奏法モジュールに対応して記憶する具体的なデータの一例をAltoSax [NormalAttack]モジュールの場合について説明すると、次の通りである。
データ1:奏法モジュールのサンプル長。
データ2:ノートオンタイミングの位置。
データ3:調和成分の振幅(Amplitude)要素のベクトルIDと代表点値列。
データ4:調和成分のピッチ(Pitch)要素のベクトルIDと代表点値列。
データ5:調和成分の波形(Timbre)要素のベクトルID。
データ6:調和外成分の振幅(Amplitude)要素のベクトルIDと代表点値列。
データ7:調和外成分の波形(Timbre)要素のベクトルID。
データ8:調和成分の波形(Timbre)要素の塊部の開始位置。
データ9:調和成分の波形(Timbre)要素の塊部の終了位置(調和成分の波形(Timbre)要素のループ部の開始位置)。
データ10:調和外成分の波形(Timbre)要素の塊部の開始位置。
データ11:調和外成分の波形(Timbre)要素の塊部の終了位置(調和外成分の波形(Timbre)要素のループ部の開始位置)。
データ12:調和外成分の波形(Timbre)要素のループ部の終了位置。
【0020】
上記データ1〜12について、図3を参照して説明する。
図3は、当該奏法モジュールに対応する実波形区間を構成する各成分及び要素の一例を模式的に示す図であり、上から当該区間における調和成分の振幅(Amplitude)要素、調和成分のピッチ(Pitch)要素、調和成分の波形(Timbre)要素、調和外成分の振幅(Amplitude)要素、調和外成分の波形(Timbre)要素の一例を示す。なお、図に示している数字は上記各データの番号に対応するように付してある。
1は、当該奏法モジュールに該当する波形のサンプル長(波形区間長)である。例えば、当該奏法モジュールの基となったオリジナル波形データの全体の時間長さに対応している。2はノートオンタイミングの位置であり、当該奏法モジュールのどの時間位置にも可変に設定することが可能である。原則的には、このノートオンタイミングの位置から当該波形に従った演奏音の発音が開始されるが、ベンドアタックなどの奏法によってはノートオンタイミングよりも波形成分の立ち上がり開始時点が先行する場合がある。
【0021】
3は、コードブックに記憶された調和成分の振幅(Amplitude)要素のベクトルデータを指し示すためのベクトルID及び代表点値列を示す(図において、黒く塗りつぶした正方形で示す2点が代表点を示す)。4は、調和成分のピッチ(Pitch)要素のベクトルデータを指し示すためのベクトルID及び代表点値列を示す。6は、調和外成分の振幅(Amplitude)要素のベクトルデータを指し示すためのベクトルID及び代表点値列を示す。代表点値列データはベクトルIDによって指示されるベクトルデータ(複数サンプル列からなる)を変更制御するためのデータであり、代表的サンプル点のいくつかを指示(特定)するものである。特定された代表的サンプル点に関してその時間位置(横軸)とレベル軸(縦軸)を変更若しくは補正することにより、他の残りのサンプル点も連動して変更し、もってベクトルの形状を変更する。例えば、そのサンプル数より少ない数の分散的サンプルを示すデータであるが、勿論これに限らず、代表点値列データはサンプルとサンプルの間の中間位置のデータであってもよいし、あるいは所定の範囲(連続的な複数サンプル)にわたるデータであってもよい。また、サンプル値そのものでなく、差分や乗数等のデータであってもよい。この代表点を横軸及び/又は縦軸(時間軸)に移動することによって、各ベクトルデータの形状を変えることができる。つまり、エンベロープ波形の形状を変えることができる。
【0022】
5は、調和成分の波形(Timbre)要素のベクトルデータを指し示すためのベクトルIDである。7は、調和外成分の波形(Timbre)要素のベクトルデータを指し示すためのベクトルIDである。8は、調和成分の波形(Timbre)要素の波形の塊部の開始位置である。9は、調和成分の波形(Timbre)要素の波形の塊部の終了位置(あるいは、調和成分の波形(Timbre)要素の波形のループ部の開始位置)である。すなわち、8から開始する三角形は特徴のある波形形状が連続的に記憶されているノンループ波形の部分を示し、その後に続く9から開始する長方形は繰り返し読み出しすることのできるループ波形の部分を示す。ノンループ波形は、奏法(若しくはアーティキュレーション)等の特徴を有する高品質な波形である。ループ波形は、1周期または適当な複数周期分の波形からなる比較的単調な音部分の単位波形である。10は、調和外成分の波形(Timbre)要素の波形の塊部の開始位置である。11は、調和外成分の波形(Timbre)要素の波形の塊部の終了位置(あるいは、調和外成分の波形(Timbre)要素の波形のループ部の開始位置)である。12は、調和外成分の波形(Timbre)要素の波形のループ部の終了位置である。上記データ3〜データ7は各成分要素毎にコードブックに記憶されているベクトルデータを指し示すための識別情報のデータであり、上記データ2及びデータ8〜データ12はベクトルデータから元の(分離前の)波形を組み立てるための時間情報のデータである。
【0023】
このように、奏法モジュールのデータはベクトルデータを指し示すためのデータと時間情報のデータとから構成される。このような奏法テーブルに記憶されている奏法モジュールのデータを使用することにより、コードブックに記憶されている波形の素材(ベクトルデータ)を使って、波形を自由に組み立てることができることになる。つまり、奏法モジュールは、奏法(若しくはアーティキュレーション)に応じて生成する波形の挙動を表すデータである。なお、奏法モジュールのデータの種類や数は各奏法モジュール毎に異なっていてよい。また、上述したデータ以外にも他の情報等を具えていてよい。例えば、波形の時間軸を伸長/圧縮制御するためのデータなどを持っていてもよい。
【0024】
また、上述の例では説明を理解しやすくするために、1つの奏法モジュールが調和成分の各要素(波形、ピッチ、振幅)及び調和外成分の各要素(波形、振幅)の全てを具備している例について説明したが、これに限らず、奏法モジュールが調和成分の各要素(波形、ピッチ、振幅)や調和外成分の各要素(波形、振幅)の1つからなっていてもよいのは勿論である。例えば、奏法モジュールが調和成分の波形(Timbre)要素、調和成分のピッチ(Pitch)要素、調和成分の振幅(Amplitude)要素、調和外成分の波形(Timbre)要素、調和外成分の振幅(Amplitude)要素のいずれか1つの要素からなっていてもよい。こうすると、各成分毎に奏法モジュールを自由に組み合わせて使用することができることになり好ましい。
【0025】
このように、様々な自然楽器の様々な演奏態様による演奏音の波形データを全波形データで持つのではなく、波形形状の変化に必要な一部の波形(例えば、アタック部波形、ボディ部波形、リリース部波形、ジョイント部波形等)のみを抽出し、さらに成分、要素、代表点といった階層的な圧縮手法を用いて、データ圧縮された形で波形データをハードディスク109に記憶することから、波形データを記憶するために必要なハードディスク109の記憶容量を削減することができるようになっている。
【0026】
3.波形合成処理
図1に示す波形生成装置において、波形の合成はコンピュータがこの発明に係る波形合成処理を実現する所定のプログラム(ソフトウエア)を実行することにより実施される。図4は、前記波形合成処理を実現する所定のプログラム(「データベースに基づく楽音合成処理」)のフローチャートの一実施形態を示したものである。
但し、本実施形態においては、プログラムによって実現される様々な機能は相互に独立しているため、図5に示す機能ブロック図に基づいて動作を説明する。また、この種のプログラムの形態に限らず、波形合成処理を専用ハードウエア装置の形態で実施するようにしてもよい。この場合、図5は、図4と同様の波形合成処理を専用ハードウエア装置の形態で構成した場合のブロック図になる。そこで、以降は、主に、図5に従って説明し、図4については対応するステップを括弧書きして示す。
【0027】
3.1.曲データ再生部101A
曲データ再生部101Aは、奏法記号付き曲データの再生処理を行う(ステップS11)。最初に、曲データ再生部101Aは奏法記号付き曲データ(演奏情報)を受信する。通常の楽譜には、そのままではMIDIデータとならないような強弱記号(クレッシェンドやデクレッシェンド等)、テンポ記号(アレグロやリタルダンド等)、スラー記号、テヌート記号、アクセント記号等の音楽記号が付されている。そこで、これらの記号を「奏法記号」としてデータ化して、この「奏法記号」を含むMIDI曲データが「奏法記号付き曲データ」である。「奏法記号」は、チャートIDとチャートパラメータとから構成する。チャートIDは楽譜に記載される音楽記号を示すIDであり、チャートパラメータはチャートIDで示される音楽記号の内容の程度を示すパラメータである。例えば、チャートIDが“ビブラート”を示す場合にはビブラートの速さや深さ等がチャートパラメータとして付与され、チャートIDが“クレッシェンド”を示す場合にはクレッシェンドのスタート時の音量、クレシェンドのエンド時の音量、音量変化する時間長等がチャートパラメータとして付与される。
【0028】
3.2.楽譜解釈部101B
楽譜解釈部(プレーヤー)101Bでは、楽譜解釈処理を行う(ステップS12)。具体的には、曲データに含まれるMIDIデータと上述した「奏法記号」(チャートIDとチャートパラメータ)を奏法指定情報(奏法IDと奏法パラメータ)に変換し、時刻情報とともに奏法合成部(アーティキュレーター)101Cに出力する。一般的に、同じ音楽記号でも演奏家により記号の解釈が異なって、演奏家毎に異なった演奏方法(すなわち、奏法若しくはアーティキュレーション)で演奏が行われることがある。あるいは、音符の並び方等によっても、演奏家毎に異なった演奏方法で演奏が行われることもある。そこで、そのような楽譜上の記号(音楽記号や音符の並び方等)を解釈する知識をエキスパートシステム化したものが楽譜解釈部101Bである。
【0029】
楽譜解釈部101Bにおける楽譜上の記号を解釈する際の基準の一例としては、以下のようなものがある。例えば、ビブラートは8分音符以上でないとかけられない。スタッカートでは自然にダイナミクスが大きくなる。テヌート度で音符の減衰率が決まる。レガートは1音中で減衰しない。8分音符ビブラートのスピードは音価でほぼ決まる。音高によってダイナミクスは異なる。更には、1フレーズ内の音高の上昇又は下降によるダイナミクスの変化、減衰ダイナミクスはdbリニア、テヌートやスタッカート等に応じた音符の長さの変化、アタック部のベンドアップの記号に応じたベンドアップの幅とカーブ、といったような各種の解釈基準がある。楽譜解釈部101Bはこのような基準に従って解釈を楽譜に対して行うことにより、楽譜を演奏データに変換する。更に、楽譜解釈部101Bは、ユーザからのプレーヤー指定、すなわちユーザにより誰の演奏か(奏法か)の指定に応じて上述の楽譜解釈処理を行う。楽譜解釈部101Bは、このプレーヤー指定に応じて楽譜の解釈方法を異ならせて楽譜を解釈する。例えば、この複数プレーヤーに対応した異なる楽譜解釈方法はデータベースに蓄積されており、楽譜解釈部101Bはユーザからのプレーヤー指定に応じて選択的に楽譜解釈方法を異ならせて楽譜の解釈を行う。
【0030】
なお、楽譜の解釈結果を示すデータを予め含むように曲データ(演奏情報)を構成してもよい。そのような予め楽譜を解釈した結果のデータを含む曲データを入力した場合には、上述した処理を行う必要がないことは言うまでもない。また、楽譜解釈部101B(ステップS12)における楽譜の解釈処理は全自動で行うようにしてもよいし、ユーザによる人為的入力操作を適宜介在させて行うようにしてもよい。
【0031】
ここで、楽譜解釈部101Bにおいて作成される演奏データの内容を図21を参照し説明する。
演奏データは、通常のSMF(スタンダードMIDIフォーマット)と同様に、ヘッダと複数のトラックとから構成されている。各トラックには、プログラムチェンジおよびイベントデータ(ノートオン、ノートオフ等)が含まれているが、本実施形態においては、アタック部、ボディ部、ジョイント部およびリリース部のモジュールを指定するモジュール指定部(奏法IDと奏法パラメータを含む奏法指定情報)が含まれている。これらモジュール指定部は、実際には未定義のシステム・エクスクルーシブ・メッセージやメタイベント、14ビットのコントロールチェンジ等が用いられる。さらに、各トラックには、これらイベントデータまたはモジュール指定部間の時間差を指定する時間差データが含まれている。
【0032】
ここで、各トラックに音色を指定するプログラムチェンジ、すなわち新しいデータベース(奏法テーブル+コードブック)を指定するプログラムチェンジが含まれていた場合には、楽譜解釈部101Bは該プログラムチェンジを予測データとして波形合成部101Dに供給する。これは、波形合成部101Dは、次に使用されるベクトルデータを予測してコードブックから読み出すため、予測範囲をある程度絞りこむためにプログラムチェンジを特定したものである(詳細は後述する)。なお、予測データには、他の種々のデータも含まれる。楽譜解釈部101Bにおいては曲データに基づいて、「その後の奏法指定を示すデータ」が予測データとして波形合成部101Dに供給される。その予測データの一つとして上記プログラムチェンジが含まれるのである。
【0033】
3.3.奏法合成部101C
奏法合成部(アーティキュレーター)101Cは楽譜解釈部(プレーヤー)101Bにより変換された奏法指定(奏法ID+奏法パラメータ)に基づいて奏法テーブルを参照して、奏法指定(奏法ID+奏法パラメータ)に応じたパケットストリーム(あるいはベクトルストリームとも呼ぶ)及び奏法パラメータに応じた該ストリームに関するベクトルパラメータを生成し、波形合成部101Dに供給する(ステップS13)。パケットストリームとして波形合成部101Dに供給されるデータは、ピッチ(Pitch)要素及び振幅(Amplitude)要素に関してはパケットの時刻情報、ベクトルID、代表点値列などであり、波形(Timbre)要素に関してはベクトルID、時刻情報などである(詳しくは後述する)。
【0034】
次に、波形合成部101Dはパケットストリームに応じてコードブックからベクトルデータを取り出し、該ベクトルデータをベクトルパラメータに応じて変形し、変形したベクトルデータに基づいて波形を合成する(ステップS14)。それから、他パートの波形生成処理を行う(ステップS15)。ここで、他パートとは、複数の演奏パートのうち奏法合成処理を行わない、通常の楽音波形合成処理が適用される演奏パートである。例えば、これらの他のパートは通常の波形メモリ音源方式で楽音生成を行う。この「他パートの波形生成処理」は、専用のハードウエア音源(外部の音源ユニットやコンピュータに装着可能な音源カード)に行わせてもよい。説明を簡略化するために、この実施形態では奏法(若しくはアーティキュレーション)に応じた楽音生成を行うのは1パートのみの場合とする。勿論、複数パートで奏法再生してもよい。
【0035】
図6は、上述した奏法合成部101Cにおける奏法合成処理の流れを説明するためのブロック図である。ただし、図6では奏法モジュールとコードブックが別々に記憶されているように図示したが、実際には両方ともハードディスク109のデータベース内に記憶されている。
奏法合成部101Cは、楽譜解釈部101Bからの奏法指定(奏法ID+奏法パラメータ)と時刻情報のデータに基づいて、波形合成部101Dに供給する各種パケットストリームを作成する。奏法合成部101Cで各音色毎に使用している奏法モジュールは固定的ではなく、ユーザが新たに奏法モジュールを使用中の奏法モジュールに追加したり、使用している奏法モジュールの一部の奏法モジュールの使用を中止したりすることができる。また、奏法合成部101Cでは、選択された要素データと奏法パラメータの値との間のズレ分を補正するための補正情報を作成する処理や、前後の奏法モジュールの波形特性を滑らかに接続する接続部の平滑化などの処理も行う(詳しくは後述する)。
なお、標準的には楽譜解釈部101Bから奏法合成部101Cに対してデータが与えられるがそれに限らず、前述のとおり、楽譜解釈部101Bにより既に解釈の終わっている奏法指定付き曲データ乃至人間が楽譜の解釈をして奏法IDや奏法パラメータを付与した奏法指定付き曲データを用意して、それを再生したデータを奏法合成部101Cに供給するようにしてもよい。
【0036】
図7は、奏法合成処理の一実施形態を詳細に示したフローチャートである。
奏法合成部101Cは、奏法ID及び奏法パラメータに応じて奏法テーブルから奏法モジュールの選択を行う(ステップS21)。すなわち、楽譜解釈部101Bから送信された奏法ID(楽器情報+モジュールパーツ名)と奏法パラメータに応じて1つの奏法モジュールを選択する。この際に、楽譜解釈部101Bは楽譜を解釈する前に楽器情報の示す音色に対応してどのようなモジュールパーツが奏法テーブルに存在するかを予めデータベースをチェックして確認し、存在しているパーツの範囲で奏法IDを指定する。なお、存在しないパーツが指定された場合には、その代わりに類似の特性を有する奏法IDが選択されるようにしてもよい。次に、該指定された奏法IDと奏法パラメータに応じて複数の要素データを選択する(ステップS22)。すなわち、指定された奏法IDと奏法パラメータとにより奏法テーブルを参照することにより、奏法モジュールを特定し、該モジュールから該奏法パラメータに対応した複数の要素データを選択する。この際に、奏法モジュール中に奏法パラメータに完全一致する要素データが存在しない場合には、その値に近い奏法パラメータに対応した要素データが選択される。
【0037】
次に、時刻情報に応じて要素データ中の各位置の時刻を算出する(ステップS23)。すなわち、各要素データを、時刻情報に基づいて絶対的な時間位置に配置する。具体的には、時刻情報に基づいて、各相対的な時間位置を示す要素データから対応する絶対時間を算出する。こうして、各要素データのタイミングを決定する(図3参照)。そして、奏法パラメータに応じて各要素データの値を補正する(ステップS24)。すなわち、選択された要素データと奏法パラメータの値との間のずれ分を補正する。例えば、楽譜解釈部101Bから送信されたAltoSax [NormalAttack]モジュールのAttack直後の音量(奏法パラメータ)が「95」であり、奏法テーブルに存在するAltoSax [NormalAttack]モジュールのAttack直後の音量が「100」である場合、奏法合成部101CはAttack直後の音量が「100」であるAltoSax [NormalAttack]モジュールの要素データを選択する。しかし、このままではAttack直後の音量が「100」のままであることから、選択された要素データの代表点に対して補正を行うことによってAttack直後の音量を「95」に補正する。このように、選択された要素データの値を送信された奏法パラメータの値に近づけるようにして補正を行う。また、設定されているマイクロチューニング(楽器の調律)の値に応じた補正や楽器の音量変化特性に応じた音量の補正等も行う。これらの補正は各要素データの代表点値を変化することにより行われ、代表点値を大きく変化することもある。すなわち、補正を行うのに必要十分なデータが代表点であり、この代表点をコントロールすることによって各種の補正を行う。
【0038】
なお、上記ステップS23では、上記奏法パラメータのような補正情報によって、上記時刻情報が示す時間位置を補正するようにしてもよい。例えば、演奏データに基づいて得られる時間位置と上記時刻情報が示す時間位置とが一致しない場合に、演奏データに基づいて得られる時間位置に近い時間位置を示す時刻情報を選択して、そこで取得した時刻位置情報を演奏データに応じて補正することで、演奏データの意図する時刻位置情報を得ることができる。また、演奏データがタッチやベロシティのような可変制御ファクタを含む場合は、その可変制御ファクタに応じて時刻位置情報を補正することで、演奏データに応じた時刻位置情報の可変制御を行うことができる。補正情報は、このような時刻位置補正を行うための情報を含む。
【0039】
更に、各要素データを調整して隣り合う奏法モジュールの接続部を平滑化するためにリンク処理を行う(ステップS25)。すなわち、前後の奏法モジュールにおける接続部の代表点を互いに接近させて接続することによって、前後の奏法モジュールの波形特性が滑らかになるようにする。このような接続若しくはリンク処理は、調和成分の波形(Timbre)、振幅(Amplitude)、ピッチ(Pitch)等の各要素毎に、あるいは調和外成分の波形(Timbre)、振幅(Amplitude)の各要素毎に、別々に行われる。
【0040】
この際、前の奏法モジュールの「リンク開始点」から、後の奏法モジュールの「リンク終了点」までの範囲で調整を行う。すなわち、「リンク開始点」から「リンク終了点」の範囲内にある代表点を「歩みより率」に基づいて調整する。この「歩みより率」は、前の奏法モジュールと後の奏法モジュールからそれぞれどれだけ歩み寄ったところで接続するかを制御するためのパラメータであり、後述するように前後の奏法モジュールの組み合わせに従って決定される。また、前後の奏法モジュールを接続した際に、波形の接続がうまく行かない場合には、前後いずれかの奏法モジュールでその波形特性のベクトルIDを間引くことにより接続を滑らかにする。この間引きを実現するために、「奏法モジュール組み合わせテーブル」と、これから参照される「間引き実行パラメータ範囲テーブル」と、さらにこれから参照される「間引き時間テーブル」を用意する。
【0041】
この他にも、以下のような楽譜解釈部101Bにおけるリンク処理により波形特性を滑らかに接続することができる。例えば、奏法モジュールとは関係なく、奏法パラメータ(ダイナミクス値、ピッチパラメータ値等)の不連続部分を滑らかに接続する。あるいは、ビブラートからリリースへと移行する場合にビブラートを早めに減少させることにより、滑らかに接続する。
【0042】
ここで、上述のリンク処理について詳しく説明する。すなわち、前後の奏法モジュールの接続部を平滑化する(ステップS25参照)ための各要素データの調整について簡単に説明する。まず、図8を用いて奏法モジュールが振幅(Amplitude)要素又はピッチ(Pitch)要素と対応する場合のリンク処理について説明する。
【0043】
前の奏法モジュールと後の奏法モジュールとの接続部における代表点の値の不連続により両者間の接続点に段差が生じている場合、まずダイナミクス接続点(Amplitudeの場合)あるいはピッチ接続点(Pitchの場合)の目標値を、前後どちらの奏法モジュール側の値により近づけるかという指標の「歩みより率」を決定する。本実施形態では「歩みより率」が図示のようなテーブルによって与えられるとする。例えば前の奏法モジュールのベクトルIDが「3」であり、後の奏法モジュールのベクトルIDが「7」である場合の「歩みより率」はテーブルから「30」と決定される。こうして決定された「歩みより率」により前の奏法モジュールの「リンク開始点」から「奏法モジュールの終了点」まで、徐々に目標値に向けてエンベロープ形状を変形する。また、後の奏法モジュールの「リンク終了点」から「奏法モジュール開始点」まで、徐々に目標値に向けてエンベロープ形状を変形する。例えば「歩みより率」が「30」と決定された場合、前の奏法モジュールに対する目標値は「30」であり、前の奏法モジュールは後の奏法モジュール側に「30」%歩みよりを行う(本実施形態では、前の奏法モジュールにおける最後の代表点が下方に「30」%歩みよりする)。
【0044】
一方、後の奏法モジュールは前の奏法モジュール側に「70」(100−30)%歩みよりを行う(本実施形態では、後の奏法モジュールにおける最初の代表点が上方に「70」%歩みよりする)。また、リンク開始点からリンク終了点までに存在する前後の奏法モジュールの複数代表点が上記歩みよりに伴って各々上下に歩みよりを行う。このように、歩みよりは前後する奏法モジュールの複数の代表点で行われる。なお、リンク開始点とリンク終了点は適宜定めてよいが、リンク開始点やリンク終了点を所望の代表点と同一の点に設定すると、図に示したようなリンク開始点やリンク終了点におけるエンベロープ形状の折れ曲がりがなくなるので望ましい。勿論、リンク開始点やリンク終了点を所望の代表点と同一の点に設定していない場合でも、エンベロープ形状に折れ曲がりが生じないように歩みよりを行うようにしてよいことは言うまでもない。
【0045】
なお、「歩みより率」の決定は上述した例に限られるものではない。例えば、接続点の前後で指定された奏法パラメータに基づいて決定してもよい。または、奏法IDや奏法パラメータになる前の演奏データに基づいて決定してもよい。あるいは、それらのデータの組み合わせに基づいて決定してもよい。また、上述の例では「歩みより率」により歩みよりする代表点は1つであり、その他の代表点はその歩みよりに伴って適量だけ歩みよりするようにしたが、複数の代表点各々について別々に「歩みより率」を決定し、それに従って複数の代表点を各々「歩みより率」分だけ歩みよりするようにしてもよい。
【0046】
次に、奏法モジュールが波形(Timbre)要素である場合のリンク処理について説明する。図9〜図12は、奏法モジュールが波形(Timbre)要素である場合のリンク処理を説明するための概念図である。図9はアタック部波形とボディ部波形とを接続した場合の波形の間引きを説明するための概念図であり、図10はボディ部波形とリリース部波形とを接続した場合における波形の間引きを説明するための概念図である。図9では、ボディ部波形は5つのループ波形L1〜L5からなり、各々所定の時間範囲でループ再生されるものとする。同様に、図10のボディ部波形は6つのループ波形L1´〜L6´からなるものとする。
【0047】
波形に関する要素データの調整(つまり、波形のリンク処理)の方法には種々あるが、その一例として、例えばアタック部あるいはジョイント部の奏法モジュールとボディ部の奏法モジュールとの接続(あるいは、ボディ部の奏法モジュールとリリース部あるいはジョイント部の奏法モジュールとの接続)において、波形の部分的間引きにより滑らかに接続する方法を提案する。波形と波形とを接続する際に、クロスフェード合成することはよく知られている。しかし、図9の例の場合のように、接続時点から最初のループ波形L1の開始位置までの時間tが短い場合、短い時間t内で急なクロスフェード合成をしなければならなくなる。そのような急なクロスフェード波形合成、つまり接続する波形と波形との間の時間が非常に接近している場合に当該波形間でクロスフェード波形合成を行うと、それに伴って大きなノイズを発生する波形を生ずることになり、好ましくない。
【0048】
そこで、波形の一部を間引き(削除)して接続する波形と波形との時間間隔を広げることにより、急なクロスフェード波形合成を行わないようにする。この場合に、アタック部やリリース部あるいはジョイント部における波形は1つの塊であって、波形を間引くことができないので、この場合はボディ部側のループ波形の間引きを行う。図9及び図10では、黒く塗りつぶした長方形で示したループ波形L1、L6´を間引きする。例えば、図9では接続時点からの時間差が比較的長い2番目のループ波形L2とアタック部波形の末尾波形とをクロスフェード合成し、最初のループ波形L1は使用しない。同様に、図10ではループ波形L5´とリリース部波形との間でクロスフェード合成を行い、波形L6´は使用しない。
なお、ジョイント部とは音と音の間(又は音部分と音部分の間)を任意の奏法でつなぐ波形区間のことである。
【0049】
また、アタック部の奏法モジュールとリリース部あるいはジョイント部の奏法モジュールとの接続を波形間引きにより滑らかにする。図11及び図12は、アタック部波形とリリース部波形とを接続する場合における波形の間引きを説明するための概念図である。
この場合には、アタック部あるいはリリース部等の奏法モジュールが波形間引きできる場合とできない場合とがある。アタック部の奏法モジュールが波形間引きできる例としてはベンドアタック部(後半にいくつかのループ波形を持つ)がある。また、前半にいくつかのループ波形を持つリリース部の場合も波形間引きが行える。このように、波形間引きできる側の奏法モジュールを波形間引きする。例えば、ベンドアタック部とリリース部とを接続する場合には、図11に示すようにベンドアタック部側のループ波形を間引きする(図11では、ベンドアタック部側の黒く塗りつぶした長方形で示したループ波形を1つ間引きする)。また、ノーマルアタック部とループ波形を有するリリース部とを接続する場合には図12に示すようにリリース部側のループ波形を間引きする(図12では、リリース部側の黒く塗りつぶした長方形で示したループ波形を1つ間引きする)。
なお、間引く対象とするループ波形は奏法モジュールと奏法モジュールとの接続部に最も近いループ波形(先頭あるいは最後に位置するループ波形)とすることに限らず、複数ループ波形から所定の優先順位に従って間引く対象とするループ波形を特定するようにしてもよい。
【0050】
このように、ある奏法モジュールの組み合わせにおいて、ある奏法パラメータの範囲で接続がうまく行かない場合に波形を間引くが、これを実現するために、例えば「奏法モジュール組み合わせテーブル」と、これから参照される「間引き実行パラメータ範囲テーブル」と、更にこれから参照される「間引き時間テーブル」を用意する。「奏法モジュール組み合わせテーブル」は、接続する前後の奏法モジュールの組み合わせにより所定のパラメータを決定するためのテーブルである。「間引き実行パラメータ範囲テーブル」は、上記パラメータ毎に間引きを行う時間の範囲を決定するためのテーブルである。「間引き時間テーブル」は、間引き時間を決定するためのテーブルである。接続時点と最初の(又は最後の)ループ波形L1(又はL6´)との時間差(図9〜図12に示す時間t)が基準の間引き時間より短い場合に、該ループ波形を間引く。
【0051】
さらに、奏法モジュールのサンプル長が短く、当該奏法モジュールの後に続く奏法モジュールが開始されるよりも前に終了してしまう場合の波形接続について図13を用いて説明する。ただし、図13では、図の左側から右側に時系列にA.Sax[BendUpAttack]、A.Sax[NormalShortBody]、A.Sax[VibratoBody]、A.Sax[NormalRelease]の4つの奏法モジュールで波形(Timbre)要素のパケットストリームを形成している場合について説明する。各奏法モジュールのサンプル長(区間長)は、“length”で示す長さで表せられる。図13において、最上段に記載されている「ノートオン」と「ノートオフ」は、MIDIデータのイベントタイミングである。また、中段に記載されているA.Sax[BendUpAttack]等はそれぞれ奏法IDの発生タイミングであり、note、dynamics、depth等はそれぞれ奏法パラメータの発生タイミングを示す。
【0052】
A.Sax [BendUpAttack]モジュールは、時刻t0から開始される。また、時刻t1は当該モジュール内のノートオンのタイミングであり、指示されたノートオンタイミングにあわせる。また、当該モジュールのパケットストリームの内容は、上記note、dynamics、depth等の奏法パラメータに基づいて制御される。A.Sax[NormalShortBody]モジュールは、アタックモジュール直後の時刻t2から開始される。時刻t3は、接続部において、その途中からビブラート奏法がスタートしているタイミングである。このタイミングは、例えば、曲データに付与されたビブラート記号の開始タイミングに基づいて決定される。時刻t5は、A.Sax[NormalRelease] モジュール内のノートオフタイミングであり、指示されたノートオフタイミングにあわせる。A.Sax[NormalRelease]モジュールの始まりの時刻t4はそれに応じて特定される。
【0053】
すなわち、時刻t1においてノートオンされ、時刻t5においてノートオフされることから、実際に当該パケットストリームから生成される波形に従って発音される時間は時刻t1から時刻t5までの時間である。このようなパケットストリームの場合に、時刻t2から時刻t4までの時間長と、その間のA.Sax[NormalRelease] モジュールとA.Sax[VibratoBody] モジュールの各サンプル長lengthの合計が合わないことが多く、適切に対処する必要が生ずる。このような場合、同じ奏法モジュールを繰り返すことによってサンプル長lengthの合計を前記時間長にあわせるか、奏法モジュールのサンプル長を可変して前記時間長に合わせるか、あるいは前記両方を組み合わせて用いて前記時間長を合わせる。このようにして、各モジュール間で調節して波形接続を行うようになっている。上述の例では、A.Sax[NormalShortBody]モジュールを繰り返すことにより、その後に続くA.Sax[VibratoBody] モジュールと波形接続を行っている。同様に、A.Sax[VibratoBody] モジュールを繰り返すことにより、その後に続くA.Sax[NormalRelease]モジュールとの波形接続を行っている。
【0054】
上記のように、奏法モジュールを複数回繰り返して波形接続を行う場合、複数繰り返す側の奏法モジュールの時間長を可変する。この時間長の可変制御は、上述した例ではA.Sax[NormalShortBody]モジュールあるいはA.Sax[VibratoBody] モジュールにおける代表点を移動することによってなされる。すなわち、A.Sax[NormalShortBody]モジュールあるいはA.Sax[VibratoBody] モジュールを構成する複数のループ波形間のクロスフェード接続の時間を変化するなどの適宜の方法によって実現する。ループ波形の場合は、ループ回数乃至ループ継続時間を可変することによって、比較的簡単に、ループ再生波形全体の時間長を可変制御することができる。一方、ノンループ波形の場合は、時間軸上におけるその存在長を可変制御することはそれほど簡単ではない。従って、上記のように、ノンループ波形とループ波形とからなる一連の音の波形において、ループ読出区間の波形データの時間軸を伸縮可変制御することで全体の発音時間長を可変制御するように工夫することは、時間伸縮制御を容易にするので極めて好ましい。そのために、特開平10‐307586号で本出願人が先に提案した「Time Stretch & Compress」制御(略して「TSC制御」)を用いるとよい。特に、特殊な奏法に対応するノンループ波形において時間軸の長さを可変するために、上記「TSC制御」は好ましく応用できる。
【0055】
このようにして作成されるパケットストリームの一例を概念的に示すと、図14のようである。図14では、上から順に調和成分の振幅(Amplitude)要素、ピッチ(Pitch)要素、波形(Timbre)要素、調和外成分の振幅(Amplitude)要素、波形(Timbre)要素における各パケットストリームを示す。また、調和成分の振幅(Amplitude)要素、ピッチ(Pitch)要素、調和外成分の振幅(Amplitude)要素において、黒く塗りつぶした正方形は代表点であり、これらを結ぶ曲線はパケットストリームの中のパケットに含まれるベクトルIDで示されたベクトルの形状を示す。調和成分の波形(Timbre)要素、調和外成分の波形(Timbre)要素において、白抜きの長方形Lはループ波形を示すものであり、その他の長方形NLはノンループ波形を示すものである。なお、ノンループ波形のうち、斜線を引いたものは特に特徴のあるノンループ波形を示すものである。さらに、この実施形態では、NormalAttackモジュールにおける調和成分と調和外成分の波形(Timbre)要素をそれぞれ2個のベクトルで構成し、調和成分の振幅(Amplitude)要素とピッチ(Pitch)要素及び調和外成分の振幅(Amplitude)要素をそれぞれ1個のベクトルで構成している。
【0056】
本実施形態では、調和成分、調和外成分とも、波形(Timbre)要素がノンループ波形となっている部分については、振幅(Amplitude)要素及びピッチ(Pitch)要素がベクトルを持たないようになっている。しかしながら、波形(Timbre)要素がノンループ波形であるところでも、振幅(Amplitude)要素、ピッチ(Pitch)要素のベクトルを持ち生成波形を制御するようにしてもよい。VibratoBodyモジュールでは、調和成分の波形(Timbre)要素を5個のベクトルで構成し、調和成分の振幅(Amplitude)要素とピッチ(Pitch)要素及び調和外成分の波形(Timbre)要素と振幅(Amplitude)要素をそれぞれ1個のベクトルで構成している。ここで、VibratoBodyモジュールは3回繰り返されているが、各繰り返し毎に各ベクトルの形状が異なっていることに注意してほしい。これは各繰り返し毎に異なる奏法パラメータが指定されたからである。異なる奏法パラメータに応じて異なる要素データが選択されたり、異なる奏法パラメータに応じて異なるレベル制御、時間軸制御が行われたりする。NormalJointモジュールでは、調和成分と調和外成分の波形(Timbre)要素をそれぞれ3個のベクトルで構成し、調和成分の振幅(Amplitude)要素とピッチ(Pitch)要素及び調和外成分の振幅(Amplitude)要素をそれぞれ2個のベクトルで構成している。なお、NormalBodyモジュールの説明は省略する。
【0057】
奏法合成部101Cは、上述したようにパケットストリームを各成分(調和成分及び調和外成分)毎に生成する。これらのパケットストリームは複数個のパケットで構成されてなり、1個1個のパケットはベクトルIDとパケットの時刻情報とを具える。それに加えて、調和成分の振幅(Amplitude)要素、ピッチ(Pitch)要素、調和外成分の振幅(Amplitude)要素の場合には各代表点の確定値などを具える。勿論、これに限られるものではなく、ベクトルIDとパケットの時刻情報に加えて他の情報を具えていてよい。このような1つ1つのパケットの内容に従って、各成分毎にパケットストリームが構成されている。このように、パケットストリームには複数のパケット及びその各パケットの時刻情報(開始時刻)が含まれる。
なお、楽器の種類等によってパケットストリームの数が異なっていてよいことは言うまでもない。
【0058】
3.4.波形合成部101D
3.4.1.波形合成部101Dの全般動作
波形合成部101Dは、奏法合成部101Cから供給される各成分毎のパケットストリーム(ベクトルID、時刻情報、補正情報等を含む複数のパケットの列)に基づいて波形を合成する。図15は、波形合成部101Dにおける動作を説明するために全体構成を示した概念図である。図16〜図19,図22,図23は、波形合成部101Dにおける各動作を詳細に説明するための図面である。図16は、波形合成の全体の流れを簡単に示すブロック図である。図17は、ベクトルローダを説明するためのブロック図である。図18は、ベクトルオペレータを説明するためのブロック図である。図19は、ベクトルデコーダを説明するためのブロック図である。図22は、奏法合成部101Cから波形合成部101Dに各パケットが供給されるタイミングを示す図であり、図23はキャッシュ制御部40を説明するためのブロック図である。
【0059】
図15において、奏法合成部(アーティキュレーター)101Cで作成された各成分要素毎のパケットストリームは、波形合成部101Dにおける各成分要素毎に対応して設けられる所定のパケットキューバッファ21〜25に順次にパケット入力(つまり、パケット単位での入力)される。入力されたパケットはパケットキューバッファ21〜25に蓄積され、順次所定の順番でベクトルローダ20に送られる。ベクトルローダ20ではパケット内のベクトルIDを参照して、当該ベクトルIDに対応するオリジナルのベクトルデータをキャッシュ制御部40を介してコードブック26から読出し(ロード)する。読出しされたベクトルデータは、各成分要素毎に対応して設けられる所定のベクトルデコーダ31〜35へ送られ、ベクトルデコーダ31〜35で各成分要素毎の波形が生成される。
【0060】
さらに、ベクトルデコーダ31〜35では、生成された各成分要素毎の波形を各ベクトルデコーダ31〜35間で同期しながら各成分毎(調和成分及び調和外成分)の波形を生成する。こうして生成された各成分毎の波形は、ミキサ38に送られる。奏法合成部(アーティキュレーター)101Cでは、パケットキューバッファ21〜25に対してパケットを入力する他、ストリーム管理(個々のベクトルデータの生成や削除あるいはベクトルデータ間の接続に関する管理)や再生コントロール(所望の波形生成の実行あるいは生成された所望の波形の再生/停止などのコントロール)などの各種の制御を波形合成部101Dに対して実行する。
【0061】
上述したように、ベクトルローダ20にはパケットキューバッファ21に蓄積されたパケットストリームを構成するパケットを順次に入力され、ベクトルローダ20は各パケット内のベクトルIDに基づいて、キャッシュ制御部40を介してコードブック26から当該ベクトルIDに対応するベクトルデータを読み出し、読み出したベクトルデータをベクトルデコーダ31に送る(図16参照)。この際に、読み出した各パケット内に補正情報(例えば、代表点に関する補正情報)が付されている場合がある。このような場合、ベクトルローダ20では読み出したオリジナルのベクトルデータを補正情報に従って変形し、変形したベクトルデータ(これをオリジナルのベクトルデータと区別するためにベクトル情報データと呼ぶ)を情報として持つパケット(これを奏法合成部101Cから入力されたパケットと区別するためにベクトルパケットと呼ぶ)をベクトルデコーダ31〜35へ出力する。このように、ベクトルローダ20は奏法合成部(アーティキュレーター)101Cから入力されたパケットのベクトルIDに基づきオリジナルのベクトルデータをコードブック26から読出し、必要に応じて補正情報でベクトルデータの補正を行った上でベクトルデコーダ31〜35にベクトルパケットを渡す(図17参照)。上述したようなベクトルデータの代表点に関する補正情報には、例えば乱数に基づいて時刻情報をずらすための補正情報等いろいろな補正情報がありうる。
【0062】
図18に示すように、ベクトルデコーダ31〜35は入力されたベクトルパケットを処理するためのベクトルオペレータの生成や破棄、ベクトルオペレータ間の接続・同期管理、時刻管理、他ベクトルIDストリームからの入力のベクトルオペレータ毎のパラメータへの変換設定などの各種のオペレータ動作管理を行うものである。ベクトルオペレータ36及び37では、ベクトル情報データの読み出し、あるいはベクトル情報データの読み出し位置制御(Speed入力)やゲイン制御(Gain入力)などが行われる。このベクトルオペレータ36及び37に設定される各種のパラメータは、ベクトルデコーダ31〜35で管理される。各成分要素毎に対応するようにベクトルデコーダ31〜35が設けられており、当該ベクトルデコーダ31〜35がベクトルパケット内のベクトル情報データを読み出して所望の波形の時系列的生成を行う。
【0063】
例えば、図19に示すように、ベクトルデコーダ31は調和成分の振幅(Amplitude)要素のエンベロープ波形を生成し、ベクトルデコーダ32は調和成分のピッチ(Pitch)要素のエンベロープ波形を生成し、ベクトルデコーダ33は調和成分の波形(Timbre)要素の波形を生成し、ベクトルデコーダ34は調和外成分の振幅(Amplitude)要素のエンベロープ波形を生成し、ベクトルデコーダ35は調和外成分の波形(Timbre)要素のエンベロープ波形を生成する。ベクトルデコーダ33は、ベクトルデコーダ31及び32で生成された調和成分の振幅(Amplitude)要素のエンベロープ波形と調和成分のピッチ(Pitch)要素のエンベロープ波形を付与した調和成分の波形を生成してミキサ38へ出力する。すなわち、ベクトルデコーダ33に対して、調和成分の振幅(Amplitude)要素のエンベロープ波形をゲイン制御(Gain入力)を行うためのベクトルオペレータとして、調和成分のピッチ(Pitch)要素のエンベロープ波形をベクトル情報データの読み出し位置制御(Speed入力)を行うためのベクトルオペレータとして入力する。また、ベクトルデコーダ35では、ベクトルデコーダ34で生成された調和外成分の振幅(Amplitude)要素のエンベロープ波形を付与した調和外成分の波形を生成してミキサ38へ出力する。すなわち、ベクトルデコーダ35に対しては、調和外成分の振幅(Amplitude)要素のエンベロープ波形をゲイン制御(Gain入力)を行うための制御命令として入力する。
【0064】
さらに、各成分、要素における波形の時系列的生成の際には、各ベクトルデコーダ31〜35間で波形の同期を行いながら波形生成が行われる。例えば、波形(Timbre)要素のベクトルパケットと振幅(Amplitude)要素のベクトルパケットを入力した場合、波形(Timbre)要素のベクトルパケットに基づく波形合生成の時間を基準として、それに同期して振幅(Amplitude)要素のベクトルパケットに基づく振幅波形を生成する。該振幅波形により、波形(Timbre)要素のベクトルパケットに基づいて生成される波形の振幅が制御される。波形(Timbre)要素のベクトルパケットとピッチ(Pitch)要素のベクトルパケットを入力した場合、波形(Timbre)要素のベクトルパケットに基づく波形生成の時間を基準として、それに同期してピッチ(Pitch)要素のベクトルパケットに基づくピッチ波形を合成する。
【0065】
該ピッチ波形により、波形(Timbre)要素のベクトルパケットに基づいて生成される波形のピッチが制御される。調和成分の波形(Timbre)要素のベクトルパケットと調和外成分の波形(Timbre)要素のベクトルパケットを入力する場合、調和成分の波形(Timbre)要素のベクトルパケットに基づく調和成分合成の時間を基準として、それに同期して調和外成分の波形(Timbre)要素のベクトルパケットに基づく調和外成分が合成される。合成された調和成分と調和外成分の波形を混合することにより、所望の楽音波形を生成する。
なお、この実施形態において、調和成分と調和外成分の同期または非同期を選択できるように構成し、同期が選択された場合にのみにおいて、上述の調和成分の波形(Timbre)要素のベクトルパケットに基づいて生成される調和成分の波形合成の時間を基準として、それに同期して調和外成分の波形(Timbre)要素のベクトルパケットに基づいて生成される調和外成分の波形を合成するようにしてもよい。
【0066】
上述したように、パケットストリームは複数パケット列で構成されており、ベクトルバケットのパケットストリームの場合、各パケットには各々ベクトルデータが含まれている。すなわち、パケットストリームとはベクトルデータが時間方向に並んだものであり、振幅(Amplitude)要素のベクトルデータもピッチ(Pitch)要素のベクトルデータも波形(Timbre)要素のベクトルデータもデータ構造や意味は違うが、ベクトルオペレータ36及び37から見た場合は基本的に同じものである。
【0067】
3.4.2.ベクトルデータの構造
図20は、ベクトルデータのデータ構造の一実施形態を概念的に示す概念図である。例えば、ベクトルデータの読み出し位置の単位は[SEC]で、読み出し速度を等速とした場合、ベクトルデータ上での1サンプルは出力波形の1サンプルと一致する。また、読み出し速度の単位は1/1200[cent](=2のn乗)で、指数nが0だと等速、1.0だと2倍(例えば、波形(Timbre)要素の場合には1オクターブ上がる)、−1.0だと0.5倍(例えば、波形(Timbre)要素の場合には1オクターブ下がる)となる(図20の上段図参照)。また、コードブック26には実際のベクトルデータが格納される。例えば、振幅(Amplitude)要素のベクトルデータあるいはピッチ(Pitch)要素のベクトルデータはVECTORPOINT構造体の配列と、代表点データとからなっている。
【0068】
VECTORPOINT構造体の配列には各点のサンプル位置と値が順番に入っており、例えば振幅(Amplitude)要素のベクトルデータの値は[db]単位であり、ピッチ(Pitch)要素のベクトルデータの値はMIDIのノートナンバ0を0.0としたときの1/1200[cent]単位である。また、代表点データはDWORD型の配列で、代表点となるVECTORPOINT構造体の配列のインデックス番号が格納されている(図20の下段図参照)。勿論、上述した例に限られるものでないことは言うまでもない。
【0069】
3.4.3.キャッシュ制御部40の詳細
(1)キャッシュ制御部40の全体構成
次に、キャッシュ制御部40の全体構成を図23を参照し説明するが、このキャッシュ制御部40を設けた意義について説明しておく。コードブック26はハードディスク109内に格納されているため、ベクトルデコーダ31〜35が必要とするベクトルデータはハードディスク109から読み出されることになる。しかし、ハードディスク等はアクセス時間が遅く、かつ一定していないため、ベクトルデコーダ31〜35が当該ベクトルデータを加工するタイミングで即座に読み出すことは不可能である。そこで、本実施形態においては、波形合成部101D内にキャッシュ制御部40を設け、将来使用される(または使用が予測されている)ベクトルデータを予めキャッシュメモリにロードすることとしている。
【0070】
図23において42は先読みプリフェッチ部であり、奏法合成部101Cから波形合成部101Dに供給されるパケットからベクトルIDを抽出し、コードブック26からこのベクトルIDに係るベクトルデータをプリフェッチ(先読み)するようにハードディスク109に読み出し制御を行う。上述したように、これらパケットはパケットキューバッファ21〜25内のパケットストリームを構成し、やがてベクトルローダ20によって読み出されることになるが、これと並行してプリフェッチ処理が行われることになる。
【0071】
41は予測制御部であり、楽譜解釈部101Bから供給される予測データ(プログラムチェンジ等)と、先読みプリフェッチ部42から供給される予測条件とに基づいて、将来使用される可能性の高いベクトルデータを予測し、予測したベクトルデータに係るベクトルIDを先読みプリフェッチ部42に供給する。ここで、「予測条件」とは、使用されることが確定した(すなわち奏法合成部101Cから供給された)ベクトルID等である。このように、先読みプリフェッチ部42においては、奏法合成部101Cおよび予測制御部41の双方からベクトルIDが供給される。そして、先読みプリフェッチ部42は、使用されることが確定しているベクトルデータのロード(すなわち奏法合成部101Cから指定されたベクトルデータのロード)を優先しつつ、双方のベクトルIDに係るベクトルデータについてプリフェッチ処理を行う。以下、使用されることが確定しているベクトルデータのロードを「指定ロード」と呼び、使用されることが確定していない(単に予測されたのみの)ベクトルデータのロードを「予測ロード」と呼ぶ。44はキャッシュメモリであり、プリフェッチされたベクトルデータを格納する。43は読出し制御部であり、ベクトルローダ20からベクトルIDを受信すると、このベクトルIDに対応するベクトルデータを主としてキャッシュメモリ44から読出し、ベクトルローダ20に供給する。45は時刻管理部であり、プリフェッチ等のタイミング制御を行う。
【0072】
(2)予測制御部41の動作
次に、予測制御部41における処理内容を図24の状態遷移図を参照し説明する。この予測制御部41の状態は、ベクトルデコーダ31〜35において波形合成が行われているか否か、および合成が行われている場合にはどのモジュールに係るものかに応じて決定される。初期状態においては、ベクトルデコーダ31〜35において何ら波形合成が行われていないため、予測制御部41においてはステップS30の処理が行われる。ここでは、アタック部のベクトルデータの候補が予測され、予測されたベクトルIDが先読みプリフェッチ部42に逐次供給される。但し、ステップS30においては、楽譜解釈部101Bから予測データとして「プログラムチェンジ」が供給されていない限り、アタック部の予測は実行されない。プログラムチェンジが未定であれば、指定される可能性のあるアタック部のベクトルデータは膨大な数になるからである。従って、初期状態においては、楽譜解釈部101Bからプログラムチェンジが供給されると、直ちに該プログラムチェンジに応じたアタック部のベクトルデータの予測ロードが開始されることになる。
【0073】
例えば、該プログラムチェンジとして「ピアノ」が指定され、「ピアノ」に係るアタック部のベクトルデータが100種類あれば、100種類のベクトルデータの予測ロードが開始されることになる。アタック部に係るパケットが確定されると、やがてベクトルローダ20およびベクトルデコーダ31〜35においてアタック部の波形合成処理が開始される。その際、予測制御部41の状態はステップS31に遷移する。
【0074】
ステップS31においては、確定されているアタック部のベクトルIDに基づいて、ボディ部のベクトルデータの候補について予測ロードが行われる。すなわち、アタック部のピッチは既知であるから、候補となるベクトルデータはアタック部と同一のピッチに対応するものに限られる。さらに、確定されているアタック部のエンベロープ波形等に対応して、これに繋がる可能性があるボディ部のベクトルデータは、さらに限定される。ステップS31においては、このような条件に応じて絞りこまれた候補が予測ロードされるのである。ここで、ボディ部に係るパケットが実際に奏法合成部101Cから供給され、当該ボディ部のパケットが確定されると、予測制御部41の状態はステップS33に遷移する。
【0075】
ステップS33においては、確定されているボディ部のベクトルIDに基づいて、次のベクトルデータの候補について予測ロードが行われる。上述したように、ボディ部に繋がるモジュールは、他のボディ部、ジョイント部あるいはリリース部のうち何れかである。従って、予測制御部41においては、これらのベクトルデータが予測ロードされる。なお、予測ロードされるベクトルデータの候補は、確定されたボディ部のピッチやエンベロープ波形等に応じて絞りこまれることはステップS31と同様である。
【0076】
ステップS33の実行中に実際に奏法合成部101Cからパケットが供給されると、当該パケットに応じて予測制御部41の状態が遷移する。まず、供給されたパケットがボディ部のパケットであった場合には、状態はステップS33に留まり、再び当該ボディ部に基づいて、他のボディ部、ジョイント部あるいはリリース部の予測ロードが実行される。また、供給されたパケットがジョイント部のパケットであった場合には、予測制御部41の状態はステップS32に遷移する。
【0077】
ステップS32においては、ボディ部のベクトルデータの候補が予測ロードされる。ここで、予測ロードされるベクトルデータの候補は、確定されているジョイント部に繋がる可能性のあるボディ部のベクトルデータに絞りこまれる。ここで、奏法合成部101Cから次のボディ部に係るパケットが供給されると、予測制御部41の状態は再びステップS33に戻り、他のボディ部、ジョイント部あるいはリリース部のベクトルデータが予測ロードされる。ここで、奏法合成部101Cからリリース部のパケットが供給されると、予測制御部41の状態はステップS30に遷移する。
【0078】
ステップS30においては、上述したように、アタック部のベクトルデータの候補が予測ロードされる。但し、その直前のリリース部のピッチが既に確定されているならば、次に来るアタック部のピッチはあまり大きく外れない可能性が高い。従って、リリース部の合成中において、予測ロードされるアタック部のベクトルデータは、当該リリース部のピッチの周辺(例えば±1オクターブの範囲)に対応するものに限定してもよい。
【0079】
(3)先読みプリフェッチ部42の動作
(3.1)ロード処理(図25)
次に、先読みプリフェッチ部42の動作を説明する。まず、先読みプリフェッチ部42においては、所定周期毎に図25に示すロード処理が実行される。図において処理がステップS41に進むと、未だ実行されていない指定ロード要求を受けているか否かが判定される。ここで「YES」と判定されると、処理はステップS42に進み、要求を受けたベクトルデータの指定ロードが実行される。これにより、暫くの読出し時間が経過すると、ハードディスク109からこれらベクトルデータが読出されキャッシュメモリ44に格納されることになる。
【0080】
一方、ステップS41において「NO」と判定されると、処理はステップS43に進み、予測ロードが実行される。すなわち、予測ロード要求のあったベクトルデータのうち、キャッシュメモリ44内への読出し指令が行われているもの(既にキャッシュメモリ44内にロードされているものと、他のロード要求に応じてロードが予定されているもの)と、未だハードディスク109に読出し指令が行われていないものとが検出され、後者のみについてハードディスク109に読出し指令が供給される。なお、予測ロードされるベクトルデータが多い場合には、予測ロードの途中で再び本ルーチンが呼び出される場合もある。かかる場合にも、要求された指定ロードが存在する限りは、当該予測ロードが中断され、ステップS42を介して指定ロードが実行されることになる。このように、先読みプリフェッチ部42においては、予測ロードよりも指定ロードの方が優先的に実行される。
【0081】
(3.2)パケット受信処理(図26)
また、先読みプリフェッチ部42においては、奏法合成部101Cからパケットが供給される毎に図25に示すパケット受信処理が実行される。図において処理がステップS51に進むと、供給されたパケットからベクトルIDが抽出され、該ベクトルIDに対応するベクトルデータがヒットしているか否かが判定される。ここで、「ヒットした場合」とは、(1)既にキャッシュメモリ44内に予測ロードされたベクトルデータのうち何れかが的中した場合、(2)未だキャッシュメモリ44にロードされいないが、当該ベクトルデータの予測ロードが予定されていた場合、(3)過去にロードされ使用済みになった(USED状態の)ベクトルデータがそのまま使用できる場合、のうち何れかである。
【0082】
なお、本実施形態においては、使用済みのベクトルデータは直ちに解放されるのではなく、「USED状態」のベクトルデータとして一応キャッシュメモリ44内に残される。そして、他のベクトルデータを記憶する記憶容量が足りなくなった場合等において、USED状態のベクトルデータの領域が解放され、新たなベクトルデータが記憶されるのである。なお、その詳細については後述する。
【0083】
さて、ヒットするベクトルデータが存在しなかった場合は、ステップS51において「NO」と判定され、処理はステップS53に進む。ここでは、上記パケットに含まれていたベクトルIDについて、指定ロード要求が発生する。従って、次に上述したパケット受信処理(図26)が実行される際に、該ベクトルデータが指定ロードされることになる。
【0084】
一方、ヒットしたベクトルデータが存在する場合は「YES」と判定され処理はステップS52に進む。ここでは、該ベクトルデータに係る予測ロードが完了していなければ、該予測ロード要求が指定ロード要求に変更される。これは、その後にパケット受信処理が実行される際、優先的にロードされるからである。次に、処理がステップS54に進むと、奏法合成部101Cに対して、指定ロード要求されたベクトルデータのハンドルが返される。このハンドルは、ベクトルデータに対して一意に対応するものである。仮に指定ロード要求されたベクトルデータが既にキャッシュメモリ44に格納されていればそのベクトルデータのハンドルが返され、格納されていなければ、新たなハンドルが生成され奏法合成部101Cに返されることになる。
【0085】
次に、処理がステップS55に進むと、先に発生した予測ロード要求のうち外れたものがキャンセルされる。ここで、「キャンセル」の具体的内容については後述する。次に、処理がステップS56に進むと、予測制御部41における予測条件が変更される。すなわち、奏法合成部101Cから供給されたパケットに応じて、図24の各状態における予測ロードの候補が絞りこまれ、あるいは予測制御部41における状態が遷移される。
【0086】
このパケット受信処理は、奏法合成部101C側から見れば図28に示す「GetVector指令」になる。すなわち、奏法合成部101Cが波形合成部101Dに対してパケットを供給する動作は、該パケットに含まれるベクトルIDに基づいて「ベクトルデータを得よ」という意味のGetVector指令を送信することに他ならない。このベクトルデータは後にベクトルローダ20において読み出されるまでに準備しなければならないが、その時点において多数のベクトルデータの中から所要のベクトルデータを特定するためにハンドルが必要なのである。
【0087】
(4)キャッシュメモリ44内のデータ構造
(4.1)キャッシュページ(図27)
キャッシュメモリ44に格納されるベクトルデータのうち同時に使用されるものは、パッキングされ、1ファイル(あるいはベクトルデータの総数以下の複数ファイル)に変換される。この変換は、ユーザの指示あるいは作成された曲データに応じて、演奏に先立って自動的に実行される。その例を図27に示す。図において、コードブック26から読み出されるベクトルデータのうち指定ロードされるものは、時刻情報が含まれている。従って、同時に使用される複数のベクトルデータを抽出することができる。コードブック26から読み出された各ベクトルデータは個々にヘッダを有している。同時に使用されるベクトルデータは、例えば1つのファイルにまとめられ、このファイルに対して共通のヘッダが付与される。これにより、ベクトルローダ20が各ベクトルデータにアクセスする時間を短縮することができる。
【0088】
このファイルのヘッダには、以下のような情報が記憶される。
データID:ここには、ファイルの種類を識別する4バイトの識別文字「PACK」が記憶される。
Data Size:ファイルのデータサイズを示す
VQ Type:記憶されているベクトルデータの種別を示す。
Version:ファイルフォーマットのバージョンを示す。
なお、パッキングされる前のベクトルデータについても同様のヘッダが設けられているが、データIDは「PACK」ではなく、個々のベクトルデータの種別を識別するデータIDが付与される。
【0089】
本実施形態の波形生成装置は、パーソナルコンピュータ上のアプリケーションプログラムによって実現されており、そのキャッシュはシステムメモリ上に存在する。ベクトルデータをキャッシュに記憶する場合、一つのベクトルデータ単位(サイズが不均一)で制御するのではなく、所定サイズのキャッシュページを単位としてキャッシュ制御が行われる。つまり、一つのキャッシュデータは複数のキャッシュページに分割され、キャッシュページ単位でキャッシュに記憶され管理される。また、システムメモリには、各キャッシュページに対応するキャッシュ管理データ(ページヘッダ)が記憶されている。なお、ハードディスクへのデータ記憶は、通常、固定サイズのクラスタ単位で行われているので、キャッシュページのサイズは、そのサイズと同じか、あるいはその整数倍にするとよい。ベクトルデータの容量等を考慮すると、キャッシュページのサイズは1k〜10kバイトにすることが好適である。
【0090】
(4.2)ページヘッダのデータ構造
次に、各キャッシュページに付与されているヘッダのデータ構造について説明する。各ヘッダは、「VDDLCSPAGE」なる構造体によって構成されており、該構造体のメンバは以下の通りである。
dwPage:当該キャッシュページに対して一意に付与されるページ番号である。
dwID:このキャッシュページに含まれるベクトルデータのベクトルIDである。
dwSize: このキャッシュページのデータサイズである。
dwCount:プリフェッチ回数を示す。このメンバdwCountは、指定ロードによってプリフェッチされる毎に「1」づつインクリメントされ、ベクトルローダ20によって読み出される毎に「1」づつデクリメントされる。
dwStatus: 当該キャッシュページの状態を示す。キャッシュページの状態は、FREE,ALLOCATED,USED,FILLED,LOCKEDのうち何れかである。
lpBuf: 当該キャッシュページにおけるベクトルデータの実体(ヘッダ以外の部分)の先頭アドレスを指標するポインタである。
lpForward/lpBackward:本実施形態においては、複数のVDDLCSPAGE構造体によって双方向リンクドリストが形成される。メンバlpForwardは、リンクの前方向に存在する他のVDDLCSPAGE構造体へのポインタであり、メンバlpBackward:は、リンクの後方向に存在する他のVDDLCSPAGE構造体へのポインタである。
lpNext: 上述したように、波形生成装置を専用のハードウエア上で実現する場合等においては、同時の使用される複数のベクトルデータが複数のキャッシュページに分割される。これら複数のキャッシュページは「グループ」を構成しており、メンバlpNextは同一グループに属する他のVDDLCSPAGE構造体を順次指標してゆくポインタである。
【0091】
ここで、上記メンバdwCountの役割について述べておく。例えば、一連のパケットストリームにおいて、同一のベクトルデータが2回使用されるならば、該ベクトルデータについて2回の指定ロード要求が発生することになる。しかし、ベクトルローダ20によって1回目に読出された際に該キャッシュページをUSED状態に設定してしまうと、2回目の読出しができなくなる。そこで、該キャッシュページがあと何回読み出されるのかをカウントすることにより、かかる不具合を防止したものである。
ところで、ベクトルデータが複数回用いられる場合としては、同一のイベントデータに対する波形合成処理において同一のベクトルデータが複数回用いられる場合と、複数のイベントデータに対する波形合成処理において同一のベクトルデータが複数回用いられる場合とが考えられる。本実施形態においては、何れの場合においてもメンバdwCountによって残りの使用回数が判別されるから、キャッシュメモリ44内のキャッシュページに対して統一的な取扱が可能になる。
【0092】
(4.3)ページヘッダのリンク構造(図29)
次に、ポインタlpForwardとポインタlpBackwardによって実現される双方向リンクドリストの構造を図29に示す。本実施形態においては、データの並べ替えや、追加/削除を自由にかつ高速に実行するため、図示のようなリスト構造を採用した。
図においてA−1は双方向リンクドリストの先頭に位置するページヘッダであり、その先頭は所定のポインタlpTopによって指標され、末尾はポインタlpTailによって指標されている。A−2,A−3はページヘッダA−1と同一のグループに属するページヘッダである。すなわち、この「グループ」は、一つのファイルが分割されて形成された個々のキャッシュページのデータに相当する。ページヘッダA−2の先頭アドレスはページヘッダA−1のメンバlpNextによって指標され、ページヘッダA−3の先頭アドレスはページヘッダA−2のメンバlpNextによって指標されている。
【0093】
また、B−1はページヘッダA−1の次段にリンクされているページヘッダであり、ページヘッダB−1の先頭アドレスはページヘッダA−1のメンバlpForwardによって指標されている。そして、このページヘッダB−1のメンバlpNextによって、同一グループに属するページヘッダB−2の先頭アドレスが指標されている。また、ページヘッダB−1のメンバlpForwardによって、次段にリンクされているページヘッダC−1の先頭アドレスが指標され、ページヘッダC−1,C−2のメンバlpNextによって、各々ページヘッダC−2,C−3の先頭アドレスが指標されている。ここで、FREE状態のキャッシュページも1グループを構成するため、例えばグループA,BはFILLED状態、グループCはFREE状態に設定される。新しいベクトルデータをキャッシングしようとするときは、FREE状態あるいはUSED状態のグループからキャッシュページが取得され、そのキャッシュページが新たなベクトルデータのキャッシュページに設定されることになる。
【0094】
また、システムメモリ上に新たなキャッシュページおよび対応するページヘッダを作成し、これを新たなベクトルデータのキャッシュページにしてもよい。但し、その場合には、キャッシュページの総量を指定値に制限し、メモリ資源を消費しすぎないようにしておくと好適である。この指定値は、システムメモリ量に応じて自動設定してもよく、ユーザが手動設定してもよい。また、FREE状態のグループのメモリ量としてある一定値を常に確保するように制御すると、新たなベクトルデータのキャッシュページへの割当を高速化することができる。
【0095】
図29の双方向リンクドリストによれば、メンバlpForwardを参照してゆくことにより、リストを構成する各グループの先頭のページヘッダA−1,B−1,C−1を順番に辿ることができる。また、メンバlpBackwardを参照してゆくことにより、該双方向リンクドリストを逆方向に辿ることができる。従って、あるベクトルデータがキャッシュされているか否かを調査する場合は、リストを構成する先頭のページヘッダを順次辿ってゆき、ページヘッダ内のメンバdwIDが該ベクトルデータと同一のベクトルIDと一致するか否かを判定してゆくとよい。もし一致するものが存在すれば、そのページヘッダに係るキャッシュページが、該ベクトルデータをキャッシングしているグループの先頭のキャッシュページになる。なお、同時に使用される全ベクトルデータが必ず1ページに格納される場合には、上記双方向リンクドリストはページヘッダA−1,B−1,C−1のみによって構成されることになり、これらページヘッダのメンバlpNextには、ヌルデータが格納されることになる。
【0096】
なお、上記メンバdwStatusで示される各状態を重要度順に配列すると、「LOCKED≧FILLED>ALLOCATED>USED>FREE」の順になる。そこで、この重要度順でキャッシュページの順序を設定しておけば、新たなベクトルデータに対するキャッシュページの割当を高速化することができる。さらに、メンバdwCountの値をそのまま重要度に反映させてもよい。すなわち、メンバdwCountが大きいほど重要度を高くするとよい。また、USED状態のキャッシュページ間では、先にUSED状態に遷移したものの重要度がより低くなるように設定しておくと好適である。
【0097】
(5)読出し制御部43における動作
次に、読出し制御部43の動作を再び図28を参照し説明する。
ベクトルローダ20においては、パケットストリームの内容すなわち各パケット内のベクトルIDに基づいて、キャッシュメモリ44を読み出すように読出し制御部43にコマンドが送信される。このコマンドをLockVector指令と呼ぶ。このLockVector指令には、先にGetVector指令に応じて返したハンドルが付随されている。通常の動作状態であれば、該ベクトルデータはキャッシュメモリ44内に格納されている筈であるから、該ベクトルデータに係るキャッシュページの先頭アドレスのポインタがベクトルローダ20に返される。
【0098】
これにより、ベクトルローダ20およびベクトルデコーダ31〜35によって、キャッシュメモリ44の内容が適宜読み出され、波形合成処理が実行される。このように、ベクトルローダ20等によって読み出され得るキャッシュページは、LOCKED状態(詳細は後述する)に設定され、他の処理によって内容が改変されないよう設定されている。
【0099】
ところで、状況によっては、ベクトルローダ20からLockVector指令を受信した際にキャッシュメモリ44上に必要なベクトルデータが未だロードされていない場合がある。特に本実施形態の波形生成装置をパーソナルコンピュータのアプリケーションプログラムによって実現した場合には、パーソナルコンピュータのオペレーティングシステムの都合によって比較的長時間ハードディスク109が占有されることがあり、かかる状況がしばしば発生し得る。この場合には、波形生成装置の動作モードによって異なる処理が実行される。
【0100】
まず、ノンリアルタイムで波形合成を行っている場合は、指定されたベクトルデータがロードされるまで以降の処理を停止することが好適である。そこで、読出し制御部43においては、ハードディスク109に対する同期読出しが実行される。この同期読出しは、所望のデータが読み出されるまで他の処理を行わないことを意味する。
【0101】
一方、波形生成装置がリアルタイムで動作している場合には、同期読出しを実行することは楽音が途切れることになりかねないため、代替ページのポインタがベクトルローダ20に返される。本実施形態においては、様々な音色変化を忠実に表現するために多種類のベクトルデータを用いているが、プログラムチェンジで選択された音色について、奏法表現等を伴わない基本的な発音を行うためのベクトルに限定すれば、その容量はあまり大きくない。そのようなベクトル(複数)が、その音色のデフォルトのベクトルとして予めRAM103内に格納されており、キャッシュメモリ44内に準備できなかったベクトルデータの代替として用いられる。
【0102】
なお、リアルタイム合成を行う場合であっても、波形合成処理S14(波形合成部101D)における時間遅延が充分確保されており、その範囲内で必要なベクトルのロードおよび波形合成が可能な場合は、ノンリアルタイムで波形合成を行う場合と同様に、必要なベクトルデータがロードされていないことが判明した段階で、該ベクトルデータを緊急に読み出して波形合成を行うことができる。ベクトルローダ20およびベクトルデコーダ31〜35による使用が終了したキャッシュページについては、ベクトルローダ20から読出し制御部43にハンドルを伴ったRelease指令が供給される。このRelease指令が供給されると、該キャッシュページのLOCKED状態が解消され、ハンドルが解放される。
【0103】
(6)キャッシュページに対する状態遷移動作
次に、図30の状態遷移図を参照し、各キャッシュページの状態を遷移させてゆく動作について説明する。
まず、初期状態においては、全キャッシュページはFREE状態(S61)に設定される。すなわち該キャッシュページのヘッダのメンバdwStatusが‘FREE’に設定される。これは、未使用状態であって、内容が保証されていないことを意味する。このキャッシュページに対して、ベクトルデータのロードが行われる場合は、該キャッシュページがALLOCATED状態(S62)に設定される。ALLOCATED状態は、未だデータの格納は完了していないが、コードブック26からのデータ読出しのために予約されていることを意味する。その際、メンバdwCountに「1」が格納される。
【0104】
その後、ベクトルデータが該ページに格納されると、キャッシュページの状態はFILLED状態に遷移する。ALLOCATED状態またはFILLED状態において、同一のベクトルデータについて再び指定ロード要求が発生すると、その度にメンバdwCountが「1」づつインクリメントされる。また、ALLOCATED状態またはFILLED状態において、予測ロード要求がキャンセルされると(ロード処理(図25)のステップS55)、メンバdwCountが「1」づつデクリメントされる。そして、これらの状態においてメンバdwCountの値が「0」になると、該キャッシュページはUSED状態(S63)に設定される。
【0105】
キャッシュページがFILLED状態に遷移した後、ベクトルローダ20からLockVector指令が供給されると、該キャッシュページがLOCKED状態(S65)に設定される。そして、ベクトルローダ20およびベクトルデコーダ31〜35による当該キャッシュページの使用が終了しRelease指令が供給されると、LOCKED状態が解消され(UnLockされ)、該キャッシュページが再びFILLED状態(S64)に設定される。その際、該キャッシュページのメンバdwCountが「1」だけデクリメントされる。その際、メンバdwCountが「0」になった場合には、該キャッシュページの状態は直ちにUSED状態(S63)に設定される。
【0106】
また、キャッシュページがUSED状態に設定された後、該キャッシュページに対して再び予測ロード要求または指定ロード要求(プリフェッチ)が発生すると、該キャッシュページは再びFILLED状態に戻される。以上のような処理が続行すると、やがてキャッシュメモリ44内にUSED状態のキャッシュページが増加してゆき、FREE状態のキャッシュページが減少してゆく。そして、FREE状態のキャッシュページが無くなった後に、新たなベクトルデータについてプリフェッチが発生すると、USED状態であるキャッシュページのうち最も古くUSED状態になったものから順にキャンセル(SwapOut)され、FREE状態(S61)に戻される。そして、このFREE状態に戻されたキャッシュページが、上記新たなベクトルデータのロードのためにALLOCATED状態に設定される。
【0107】
ここで、USED状態であるキャッシュページのうち最も古いものを速やかに特定する方法として、先に図29において説明した双方向リンクドリストを用いるとよい。すなわち、何れかのキャッシュページがUSED状態に設定されると、リンクドリストの先頭に該キャッシュページを追加し、FREE状態のキャッシュページが不足する場合には、リンクドリストの末尾のキャッシュページから順次リンクドリストから外し、FREE状態に変更してゆくとよい。
【0108】
(7)時刻管理部45
時刻管理部45は波形合成部101D全体のタイミングを制御する。ここで、本実施形態におけるタイミング制御の概要を図31を参照し説明する。
図において、時刻t30に再生開始が指示された(例えばユーザにより再生ボタンが押下された)こととし、実際に楽音出力が開始される時刻をt40とする。この時刻t30からt40に至るまでの時間をレーテンシβと呼ぶ。レーテンシβは、例えば2000msec程度に設定されるが、特に設定しなくてもよい。
【0109】
再生開始が指示されると、CPU101において再生スレッドが所定時間毎に生成される。この再生スレッドにおいては曲データが読み出され、その内容に応じてハードディスク109等に対するプリフェッチ処理が実行される。ある曲データが読み出される時刻t32から実際の発音開始時刻t40までの時間を先送り時間γと呼ぶ。先送り時間γの基準値は例えば4000msec程度にしておき、処理状況に応じて1000〜10000msec程度の範囲で伸縮できるようにしておくとよい。
【0110】
このように、先送り時間γをある程度確保しておくことにより、再生スレッドを断続的に発生させ曲データの読出しを断続的に(ある程度づつまとめて)行うことが可能になる。再生スレッドが発生する間隔を再生スレッド発生間隔εと呼ぶ。再生スレッド発生間隔εの基準値は例えば20msecにしておき、処理状況に応じて5〜100msec程度の範囲で伸縮できるようにしておくとよい。
【0111】
時刻t32に曲データが読み出されると、上述したようにステップS11において曲データの一部が取り出され、ステップS12において楽譜が解釈され、しかる後にステップS13において奏法合成が実行される。この結果、時刻t34においてベクトルデータのプリフェッチが行われる。プリフェッチ時刻t34から発音開始時刻t40までの時間をプリフェッチ時間αと呼ぶ。
【0112】
ハードディスク109から読み出されたベクトルデータは、やがてキャッシュメモリ44に書き込まれる。その後、時刻t36において、ベクトルローダ20によって読出し制御部43を介してキャッシュメモリ44から該ベクトルデータが読み出され、波形合成が開始される。この波形合成開始時刻t36から発音開始時刻t40までの時間を出力レーテンシδと呼ぶ。出力レーテンシδの基準値は例えば300msec程度にしておき、処理状況に応じて10〜1000msec程度の範囲で伸縮できるようにしておくとよい。
【0113】
なお、かかる波形合成処理についても、再生スレッドの場合と同様に、ある程度の時間範囲をまとめて断続的に実行すると好適である。この波形合成処理の起動頻度間隔の基準値は例えば50msecにしておき、処理状況に応じて10〜500msec程度の範囲で伸縮できるようにしておくとよい。
【0114】
図31から明らかなように、先送り時間γ、プリフェッチ時間αおよび出力レーテンシδには、「γ>α>δ」の関係がある。ここで、プリフェッチ時刻t34から波形合成開始時刻t36までの時間間隔「α−δ」は、ハードディスク109からベクトルデータをロードできる程度に設定しておく必要がある。ベクトルデータのロード量のピーク値が高い場合には、この時間間隔「α−δ」を長くすることにより、ノイズの発生等を防止することができる。
【0115】
4.変形例
本発明は上述した実施形態に限定されるものではなく、例えば以下のように種々の変形が可能である。
(1)上述したような波形生成装置を電子楽器に用いた場合、電子楽器は鍵盤楽器の形態に限らず、弦楽器や管楽器、あるいは打楽器等どのようなタイプの形態でもよい。また、その場合に、曲データ再生部101A、楽譜解釈部101B、奏法合成部101C、波形合成部101D等を1つの電子楽器本体内に内蔵したものに限らず、それぞれが別々に構成され、MIDIインタフェースや各種ネットワーク等の通信手段を用いて各構成部を接続するように構成されたものにも同様に適用できることはいうまでもない。また、パソコンとアプリケーションソフトウェアという構成であってもよく、この場合処理プログラムを磁気ディスク、光ディスクあるいは半導体メモリ等の記録媒体に格納して供給したり、ネットワークを介して供給するものであってもよい。さらに、自動演奏ピアノのような自動演奏装置などにも適用してよい。
【0116】
(2)上記実施形態においては、一つのキャッシュページに複数のベクトルデータを格納したが、一つのキャッシュページに一つのベクトルデータを格納するようにしても良いことは言うまでもない。
【0117】
(3)上記実施形態においては、キャッシュページのヘッダのメンバdwCountをインクリメントあるいはデクリメントすることによって、USED状態に遷移させるものを判定した。しかし、かかる方法では、未使用状態のキャッシュページが増大した時にキャッシュメモリ44が容量不足になる可能性がある。かかる場合には、FILLED状態であるキャッシュページに対して「優先度」を定義し、優先度の低いFILLED状態のキャッシュページを順次USED状態そしてFREE状態に遷移させてもよい。この場合、FREE状態に遷移させたキャッシュページに対してベクトルローダ20からLockVector指令を受信すると、上述した代替ページが使用されることになる。「優先度」の具体例としては、メンバdwCountの値をそのまま用いてもよい(値が大きいほど優先度が高いこととする)。また、過去に当該キャッシュページが使用された回数、メンバdwCountの最大値(過去の履歴上での最大値)を加味してもよい。
【0118】
(4)上記実施形態においては、USED状態であるキャッシュページを双方向リンクドリストによって結合し、FREE状態のキャッシュページが不足する場合には、リンクドリストの末尾のキャッシュページから(最も古いものから)順次外してゆき、FREE状態に変更した。しかし、FREE状態に遷移させる順序はこれに限定されるものではない。例えば、使用された累積回数の多いキャッシュページ、メンバdwCountの履歴上の最大値の大きいキャッシュページ、あるいは各モジュールの先頭部分において使用されるベクトルデータについては、なるべくFREE状態に遷移しないように、換言すればキャッシュメモリ44内に優先的に残すように設定してもよい。また、実際に使用された使用済みのベクトルデータを、実際には使用されなかった(予測が外れた)ベクトルデータよりも優先的に残すようにしてもよい。
【0119】
また、モジュールの先頭部分で使用されるベクトルデータを優先的に残しておくことにより、ハードディスク109の動作に対する余裕が大きくなり、代替ページを使わざるを得なくなるような事態を減らすことができる。
具体的には、優先的に残すべきキャッシュページをUSED状態に遷移させる時は当該キャッシュページをリンクドリストの先頭に追加し、それ以外のキャッシュページをUSED状態に遷移させる時は該キャッシュページをリンクドリストの中間部分に挿入するようにするとよい。
【0120】
(5)上記実施形態においては、音データの具体例としてベクトルデータを用いた例を示したが、該音データはベクトルデータに限定されるものではなく、楽音波形を規定する種々の波形データあるいはパラメータを音データとして用いてもよいことは言うまでもない。
【0121】
(6)上記実施形態においては、図15ないし図23において説明したように、奏法合成部101Cからのパケットストリームが先読みプリフェッチ部42に直接入力された。しかし、かかる動作に代えて、一旦パケットキューバッファ21〜25に書き込まれたパケットストリームを先読みプリフェッチ部42が読み出すようにしてもよい。その場合、先読みプリフェッチ部42は、ベクトルローダ20がパケットキューバッファに記憶されたパケットを読み出して処理するタイミングよりも所定時間前のタイミングで、同パケットキューバッファから同パケットを読み出して処理することが好適である。
【0122】
【発明の効果】
以上説明したように本発明によれば、高速記憶装置に転送された音データが将来も利用されるか否かをカウント値に基づいて判定できるから、実際に当該音データが後に使用された場合にはハードディスク等の低速記憶装置をアクセスする必要がなくなる。これにより、ハードディスク等の低速記憶装置に対するアクセス頻度を低下させることができる。
【図面の簡単な説明】
【図1】この発明に係る波形生成装置のハードウエア構成例を示すブロック図。
【図2】波形生成装置において実行される「波形データベース作成処理」の一実施形態を示すフローチャート。
【図3】奏法モジュールに対応する実波形区間を構成する各成分及び要素の一例を模式的に示す図。
【図4】「データベースに基づく楽音合成処理」の一実施形態を示すフローチャート。
【図5】図4と同様の波形合成処理を専用ハードウエアの形態で構成した場合の一実施形態を示すブロック図。
【図6】上述した奏法合成部における奏法合成処理の流れを説明するためのブロック図。
【図7】奏法合成部で行われる奏法合成処理の一実施形態を詳細に示したフローチャート。
【図8】奏法モジュールが振幅要素又はピッチ要素に対応する場合におけるリンク処理を説明するための概念図。
【図9】アタック波形とボディ波形とを接続した場合の波形の間引きを説明するための概念図。
【図10】ボディ波形とリリース波形とを接続した場合の波形の間引きを説明するための概念図。
【図11】ベンドアタック波形とリリース波形とを接続した場合の波形の間引きを説明するための概念図。
【図12】ノーマルアタック波形とループ部を有するリリース波形とを接続した場合の波形の間引きを説明するための概念図。
【図13】後に続く奏法モジュールが開始されるよりも前の奏法モジュールが終了してしまう場合の波形接続について説明するための概念図。
【図14】奏法合成部で生成されるパケットストリームを説明するための概念図。
【図15】波形合成部における動作を説明するために全体構成の一実施形態を示した概念図。
【図16】波形合成の全体の流れを簡単に示すブロック図。
【図17】ベクトルローダを説明するためのブロック図。
【図18】ベクトルオペレータを説明するためのブロック図。
【図19】ベクトルレコーダを説明するためのブロック図。
【図20】ベクトルデータのデータ構造の一実施形態を概念的に示す概念図。
【図21】楽譜解釈部101Bにおいて作成される演奏データの内容を示す図。
【図22】奏法合成部101Cから波形合成部101Dに各パケットが供給されるタイミングを示す図。
【図23】キャッシュ制御部40の全体構成を示すブロック図。
【図24】予測制御部41の予測動作の状態遷移図。
【図25】先読みプリフェッチ部42において実行されるロード処理のフローチャート。
【図26】先読みプリフェッチ部42において実行されるパケット受信処理のフローチャート。
【図27】キャッシュページの構成方法を示す動作説明図。
【図28】奏法合成部101Cおよび波形合成部101D間のシグナルフロー図。
【図29】キャッシュメモリ44内におけるページヘッダのリンク構造を示す図。
【図30】キャッシュメモリ44内における各ページの状態遷移図。
【図31】上記実施形態のタイミング制御の概要を示すタイミングチャート。
【符号の説明】
1〜12……データ、20……ベクトルローダ、21〜25……パケットキューバッファ、26……コードブック、31〜35……ベクトルデコーダ、36,37……ベクトルオペレータ、38……ミキサ、40……キャッシュ制御部、41……予測制御部、42……先読みプリフェッチ部、43……読出し制御部、44……キャッシュメモリ(高速記憶装置)、45……時刻管理部、50……アタック部奏法モジュール、101……CPU、101A……曲データ再生部、101B……楽譜解釈部、101C……奏法合成部、101D……波形合成部、102……ROM、103……RAM、104……パネルスイッチ、105……パネル表示器、106……ドライブ、106……前記ドライブ、106A……外部記憶メディア、107……波形取込部、108……波形出力部、108A……サウンドシステム、109……ハードディスク(低速記憶装置)、111……通信インタフェース。
Claims (6)
- 楽音波形の音データを記憶する低速記憶装置と、該音データをキャッシングする高速記憶装置とを用いて、前記低速記憶装置に記憶された音データのうちの一部を波形合成のために前記高速記憶装置に転送する音データ転送方法であって、
使用されることが決定され、または使用されると予測される音データについて順次準備指示を行う準備過程と、
予め準備指示され、かつ前記高速記憶装置に記憶されている音データを用いて波形合成の開始指示を行う合成開始指示過程と、
前記順次準備指示された音データが前記高速記憶装置に記憶されていない場合に、前記低速記憶装置から前記高速記憶装置に該音データを転送するとともに、該転送された音データに対応するカウント値を初期値に設定する転送過程と
前記順次準備指示された音データが前記高速記憶装置に既に記憶されている場合に、該音データに対応するカウント値を増加させるカウントアップ過程と、
前記合成開始指示過程による開始指示に応じて、前記音データを用いた波形合成を開始する波形合成過程であって、使用済みの音データに係るカウント値を減少させるものと、
前記高速記憶装置に記憶された音データのうち今後の開始指示の予定の無い音データを各音データに対応するカウント値に基づいて決定し、決定した音データを消去可能な状態に設定する設定過程と
を有することを特徴とする音データ転送方法。 - イベントシーケンスから再生開始時刻に先立ってイベントデータを先読みする先読み過程をさらに有し、
前記準備過程においては該先読みされたイベントデータに基づいて準備指示に係る音データが決定され、これによって共通の音データが使用される複数のイベントデータに対して、前記転送過程を共用することを特徴とする請求項1記載の音データ転送方法。 - イベントデータが供給された時刻から所定時間遅れた時刻を再生開始時刻として設定する過程をさらに有し、
前記準備過程においては該供給されたイベントデータに基づいて準備指示に係る音データが決定され、これによって共通の音データが使用される複数のイベントデータに対して、前記転送過程を共用することを特徴とする請求項1記載の音データ転送方法。 - 前記準備過程においては、一つのイベントデータに基づいて、同一の音データに対する複数回の前記準備指示が行われ、
前記波形合成過程においては、前記一つのイベントデータに対応して前記音データが使用される毎に、前記カウント値がその都度減少される
ことを特徴とする請求項1記載の音データ転送方法。 - 請求項1ないし4の何れかに記載の方法を実行することを特徴とする音データ転送装置。
- 請求項1ないし4の何れかに記載の方法を実行することを特徴とするプログラム。
Priority Applications (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001086164A JP3630106B2 (ja) | 2001-03-23 | 2001-03-23 | 音データ転送方法、音データ転送装置およびプログラム |
EP02005887.1A EP1260964B1 (en) | 2001-03-23 | 2002-03-14 | Music sound synthesis with waveform caching by prediction |
TW091104809A TWI228704B (en) | 2001-03-23 | 2002-03-14 | Music sound synthesis with waveform caching by prediction |
US10/098,670 US6576827B2 (en) | 2001-03-23 | 2002-03-14 | Music sound synthesis with waveform caching by prediction |
EP09180304A EP2175440A3 (en) | 2001-03-23 | 2002-03-14 | Music sound synthesis with waveform changing by prediction |
SG200201610A SG102667A1 (en) | 2001-03-23 | 2002-03-19 | Music sound synthesis with waveform caching by prediction |
CN2006100735605A CN1838234B (zh) | 2001-03-23 | 2002-03-22 | 乐音合成方法和用于合成乐音的设备 |
CNB021080259A CN1258751C (zh) | 2001-03-23 | 2002-03-22 | 乐音合成方法和用于合成乐音的设备 |
HK02109273.7A HK1048011B (zh) | 2001-03-23 | 2002-12-21 | 樂音合成方法和用於合成樂音的設備 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001086164A JP3630106B2 (ja) | 2001-03-23 | 2001-03-23 | 音データ転送方法、音データ転送装置およびプログラム |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002287755A JP2002287755A (ja) | 2002-10-04 |
JP3630106B2 true JP3630106B2 (ja) | 2005-03-16 |
JP2002287755A5 JP2002287755A5 (ja) | 2005-06-30 |
Family
ID=18941581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001086164A Expired - Fee Related JP3630106B2 (ja) | 2001-03-23 | 2001-03-23 | 音データ転送方法、音データ転送装置およびプログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP3630106B2 (ja) |
CN (1) | CN1838234B (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6372407B2 (ja) * | 2015-03-30 | 2018-08-15 | ブラザー工業株式会社 | 楽曲演奏装置及び楽曲演奏用プログラム |
CN111341290A (zh) * | 2020-02-28 | 2020-06-26 | 腾讯音乐娱乐科技(深圳)有限公司 | 确定音频的波形的方法、装置、设备及存储介质 |
Family Cites Families (5)
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 (ja) * | 1994-11-02 | 1996-08-01 | Seikosha Kk | |
DE69836393T2 (de) * | 1997-09-30 | 2007-09-06 | Yamaha Corp., Hamamatsu | Verfahren, Vorrichtung und maschineslesbares Speichermedium zur Klangsynthesierung |
JP3806263B2 (ja) * | 1998-07-16 | 2006-08-09 | ヤマハ株式会社 | 楽音合成装置および記憶媒体 |
-
2001
- 2001-03-23 JP JP2001086164A patent/JP3630106B2/ja not_active Expired - Fee Related
-
2002
- 2002-03-22 CN CN2006100735605A patent/CN1838234B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1838234B (zh) | 2011-04-20 |
JP2002287755A (ja) | 2002-10-04 |
CN1838234A (zh) | 2006-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6576827B2 (en) | Music sound synthesis with waveform caching by prediction | |
US7259315B2 (en) | Waveform production method and apparatus | |
JP3744216B2 (ja) | 波形形成装置及び方法 | |
JP2001100760A (ja) | 波形生成方法及び装置 | |
JP2003241757A (ja) | 波形生成装置及び方法 | |
JP3601371B2 (ja) | 波形生成方法及び装置 | |
JP3654079B2 (ja) | 波形生成方法及び装置 | |
JP3654083B2 (ja) | 波形生成方法及び装置 | |
JP3654080B2 (ja) | 波形生成方法及び装置 | |
JP3654082B2 (ja) | 波形生成方法及び装置 | |
JP3654084B2 (ja) | 波形生成方法及び装置 | |
JP3630107B2 (ja) | 音データ転送方法、音データ転送装置およびプログラム | |
JP3630106B2 (ja) | 音データ転送方法、音データ転送装置およびプログラム | |
JP3674526B2 (ja) | 波形合成方法、音データ転送装置およびプログラム | |
JP3649141B2 (ja) | 音データ転送方法、音データ転送装置およびプログラム | |
JP4007374B2 (ja) | 波形生成方法及び装置 | |
JP3933161B2 (ja) | 波形生成方法及び装置 | |
JP3933162B2 (ja) | 波形生成方法及び装置 | |
JP3674527B2 (ja) | 波形生成方法及び装置 | |
JP3829732B2 (ja) | 波形生成装置及び方法 | |
JP3829707B2 (ja) | 波形生成装置及び方法 | |
JP3613191B2 (ja) | 波形生成方法及び装置 | |
JP3778036B2 (ja) | 波形生成装置及び方法 | |
JP3829733B2 (ja) | 波形生成装置及び方法 | |
JP3876896B2 (ja) | 波形生成方法及び装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041001 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041021 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041124 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041207 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313532 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081224 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081224 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091224 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101224 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101224 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111224 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111224 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121224 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131224 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |