(57)【特許請求の範囲】
【請求項１】
楽音の時間軸を伸縮制御するための時間軸伸縮制御情報を発生する手段と、
前記時間軸伸縮制御情報を累算することによりバーチャル時間データを生成する手段であって、前記バーチャル時間とは前記時間軸伸縮制御情報に応じて実時間を伸縮制御した時間を示すものであるものと、
時間の関数である楽音特性制御情報を発生する手段であって、前記バーチャル時間データを引き数として該楽音特性制御情報を前記バーチャル時間に従って発生させるものと
を具える楽音制御装置。
【請求項２】
前記楽音特性制御情報は、所定の楽音特性を制御するために使用されるものである請求項１に記載の楽音制御装置。
【請求項３】
前記所定の楽音特性とは、波形、ピッチ及び振幅の少なくとも１つの楽音要素に対応する特性である請求項２に記載の楽音制御装置。
【請求項４】
波形、ピッチ及び振幅のような所定の複数の楽音要素のそれぞれに対応して前記楽音特性制御情報を夫々発生する請求項１に記載の楽音制御装置。
【請求項５】
前記時間軸伸縮制御情報は時間の関数からなるものであり、前記時間軸伸縮制御情報を発生する手段では、前記バーチャル時間データを引き数として該時間軸伸縮制御情報を前記バーチャル時間に従って発生させる請求項１乃至４のいずれかに記載の楽音制御装置。
【請求項６】
プログラムに従って動作する中央処理部に、
楽音の時間軸を伸縮制御するための時間軸伸縮制御情報を発生するステップと、
前記時間軸伸縮制御情報を累算することによりバーチャル時間データを生成するステップであって、前記バーチャル時間とは前記時間軸伸縮制御情報に応じて実時間を伸縮制御した時間を示すものであるものと、
時間の関数である楽音特性制御情報を発生するステップであって、前記バーチャル時間データを引き数として該楽音特性制御情報を前記バーチャル時間に従って発生させるものと
を実行させることからなる楽音制御方法。
【請求項７】
前記楽音特性制御情報は、所定の楽音特性を制御するために使用されるものである請求項６に記載の楽音制御方法。
【請求項８】
前記時間軸伸縮制御情報は時間の関数からなるものであり、前記時間軸伸縮制御情報を発生するステップでは、前記バーチャル時間データを引き数として該時間軸伸縮制御情報を前記バーチャル時間に従って発生させる請求項６又は７に記載の楽音制御方法。
【請求項９】
請求項６乃至８のいずれかに記載の楽音制御方法における各ステップをコンピュータに実行させるための命令群で構成されるコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、メモリに記憶した波形データを読み出すことに基づき、楽音あるいは音声若しくはその他任意の音の波形を形成する技術分野に関し、特に、楽音の時間軸を伸縮制御する楽音制御装置及び方法に関する。この発明は、電子楽器は勿論のこと、自動演奏装置、コンピュータ、電子ゲーム装置その他マルチメディア機器等、楽音あるいは音声若しくはその他任意の音を発生する機能を有する汎ゆる分野の機器若しくは装置または方法において広範囲に応用できるものである。なお、この明細書において、楽音波形という場合、音楽的な音の波形に限るものではなく、音声あるいはその他任意の音の波形を含んでいてもよい意味合いで用いるものとする。
【０００２】
【従来の技術】
波形メモリにおいて、ＰＣＭ（パルス符号変調）あるいはＤＰＣＭ（差分ＰＣＭ）又はＡＤＰＣＭ（適応差分ＰＣＭ）等の任意の符号化方式で符号化した波形データ（つまり波形サンプルデータ）を記憶しておき、これを所望の楽音ピッチに対応して読み出すことにより、楽音波形を形成するようにした、いわゆる「波形メモリ読み出し」技術は、既に公知であり、また、様々なタイプの「波形メモリ読み出し」技術が知られている。従来知られた「波形メモリ読み出し」技術のほとんどは、発音開始から終了までの１つの音の波形を発生するためのものである。一例として、発音開始から終了までの１音の全波形の波形データを記憶する方式がある。また、別の例として、変化の複雑なアタック部についてはその全波形の波形データを記憶し、変化のあまりないサステイン部については所定のループ波形を記憶する方式がある（例えば特開昭５９−１８８６９７号）。後者の方式では、ループ波形を記憶する構成であることにより波形データ記憶量を簡素化することができると共に、ループ波形を繰り返し読み出すことにより、音の持続時間を任意に調節することができる。なお、本明細書において、「ループ波形」とは、繰り返し読み出し（ループ読み出し）される波形という意味で用いるものとし、「ループ再生波形」とは、「ループ波形」を繰り返し読み出し（ループ読み出し）することで得られた（再生された）波形という意味で用いるものとする。
【０００３】
また、１つの音の発生のために、複数のループ波形を使用し、各ループ波形を特定のシーケンスに従って順次切り替えて読み出し、相前後するループ波形のループ読出出力データ（つまり「ループ再生波形」）をクロスフェード合成することで、各ループ再生波形が滑らかに接続されるようにした技術も知られている（例えば特開昭６２−１４６９６号）。この場合、クロスフェード合成は、所定のクロスフェード区間において行なわれるようになっており、上述した単純な１つのループ波形の繰り返し読み出し技術とは異なり、個々のクロスフェード区間の時間長を任意に可変調節することについては示されていない。また、クロスフェード合成の対象となる波形は位相が合っている（あるいは少なくとも大きくずれていない）ことが必要であり、予め位相合わせしたループ波形の波形データを記憶しておく必要があった。
【０００４】
一方、従来の電子楽器の波形メモリ音源では、読み出された波形データの時間長は、読み出し速度に応じて一意的に決定され、自由に伸縮することはできないという不都合があったことに鑑み、特開平１０−３０７５８６号公報においては、波形メモリ読み出し方式の音源において、その読み出し速度（ピッチ）を任意に可変制御する一方で、その読み出し速度（ピッチ）とは独立に、読み出す波形データを時間軸上で任意に伸張及び圧縮制御することができるようにした技術が示されている。この場合、実アドレスデータと仮想アドレスデータとの比較に基づきアドレスシフト量を決定し、シフト制御された実アドレスデータで波形データを読み出すことにより、時間軸の伸張又は圧縮制御を行うようにしている。
【０００５】
【発明が解決しようとする課題】
上述したような従来の時間軸の伸張又は圧縮制御技術は、実アドレスデータと仮想アドレスデータとの比較に基づきアドレスシフト量を決定し、シフト制御された実アドレスデータで波形データを読み出すことにより、時間軸の伸張又は圧縮制御を行うようにしていたので、仮想アドレス算出処理と比較処理とシフト処理が要求され、面倒であった。
この発明は上述の点に鑑みてなされたもので、時間軸の伸張又は圧縮制御技術の改良を図るものである。
【０００６】
【課題を解決するための手段】
この発明に係る楽音制御装置は、楽音の時間軸を伸縮制御するための時間軸伸縮制御情報を発生する手段と、前記時間軸伸縮制御情報に基づきバーチャル時間データを生成する手段であって、前記バーチャル時間とは前記時間軸伸縮制御情報に応じて実時間を伸縮制御した時間を示すものであるものと、時間の関数である楽音特性制御情報を発生する手段であって、前記バーチャル時間データを引き数として該楽音特性制御情報を前記バーチャル時間に従って発生させるものとを具える。
【０００７】
この発明に係る楽音制御方法は、プログラムに従って動作する中央処理部に、楽音の時間軸を伸縮制御するための時間軸伸縮制御情報を発生するステップと、前記時間軸伸縮制御情報を累算することによりバーチャル時間データを生成するステップであって、前記バーチャル時間とは前記時間軸伸縮制御情報に応じて実時間を伸縮制御した時間を示すものであるものと、時間の関数である楽音特性制御情報を発生するステップであって、前記バーチャル時間データを引き数として該楽音特性制御情報を前記バーチャル時間に従って発生させるものとを実行させることからなる。
【０００８】
この発明によれば、楽音の時間軸を伸縮制御するための時間軸伸縮制御情報に基づき、実時間を伸縮制御した時間を示すバーチャル時間データを生成し、該生成したバーチャル時間データを引き数として、時間の関数である楽音特性制御情報を該バーチャル時間に従って発生させるようにしたので、所望の楽音特性制御情報を時間軸伸張又は圧縮制御することを容易に行うことができるようになる。
【０００９】
以下説明する実施例との対応を示すと、例えば図７に示されるように楽音制御パラメータの１つとしてタイムベクトルＴＶ（時間制御情報）が与えられ、これに応じて楽音の時間軸を伸縮制御するための時間伸縮制御データＣＲａｔｅ（時間軸伸縮制御情報）が発生される。図９のステップＳ２１では、この時間伸縮制御データＣＲａｔｅに基づきバーチャルタイムｖｔ（バーチャル時間データ）を演算生成する。図９のステップＳ２２，Ｓ２４，Ｓ２５，Ｓ２９，Ｓ３３〜Ｓ３８等では、このバーチャルタイムｖｔを引き数として、時間の関数である各種楽音特性制御情報、すなわちピッチベクトル値ＰＶ（ｖｔ），振幅ベクトル値ＡＶ（ｖｔ），タイムベクトル値ＴＶ（ｖｔ），波形読み出し用のアドレスＡＤｉ，ＡＤｉ−１など、を発生する。これらの楽音特性制御情報に基づき楽音が生成され且つ制御される。
【００１０】
一実施態様として、前記楽音特性制御情報は、所定の楽音特性を制御するために使用されるものであってよい。ここで、前記所定の楽音特性とは、波形、ピッチ及び振幅の少なくとも１つの楽音要素に対応する特性でってよい。
一実施態様として、波形、ピッチ及び振幅のような所定の複数の楽音要素のそれぞれに対応して前記楽音特性制御情報を夫々発生してよい。
【００１１】
前記時間軸伸縮制御情報は時間の関数からなるものであり、前記時間軸伸縮制御情報を発生するために、前記バーチャル時間データを引き数として該時間軸伸縮制御情報を前記バーチャル時間に従って発生させるようにしてよい。
【００１２】
この発明は、装置発明として構成し、実施することができるのみならず、方法発明として構成し、実施することもできる。また、この発明は、コンピュータプログラムの形態で実施することができるし、そのようなコンピュータプログラムを記憶した記録媒体の形態で実施することもできる。更に、この発明は、新規なデータ構造からなる波形データを記憶した記録媒体の形態で実施することもできる。
【００１３】
【発明の実施の形態】
以下、添付図面を参照してこの発明の実施の形態を詳細に説明しよう。
図１は、この発明の一実施例に係る楽音制御方法を適用した波形形成装置のハードウェア構成例を示すブロック図である。ここに示されたハードウェア構成例はコンピュータを用いて構成されており、そこにおいて、波形形成処理は、コンピュータがこの発明に係る波形形成処理を実現する所定のプログラム（ソフトウェア）を実行することにより実施される。勿論、この波形形成処理は、コンピュータソフトウェアの形態に限らず、ＤＳＰ（ディジタル・シグナル・プロセッサ）によって処理されるマイクロプログラムの形態でも実施可能であり、また、この種のプログラムの形態に限らず、ディスクリート回路又は集積回路若しくは大規模集積回路等を含んで構成された専用ハードウェア装置の形態で実施してもよい。また、この波形形成装置は、電子楽器あるいはカラオケ装置又は電子ゲーム装置又はその他のマルチメディア機器又はパーソナルコンピュータ等、任意の製品応用形態をとっていてよい。
【００１４】
図１に示されたハードウェア構成例においては、コンピュータのメイン制御部としてのＣＰＵ（中央処理部）１００に、ＲＯＭ（リードオンリーメモリ）１０１、ＲＡＭ（ランダムアクセスメモリ）１０２、ハードディスク装置１０３、リムーバブルディスク装置（例えばＣＤ−ＲＯＭドライブ若しくはＭＯドライブなど）１０４，表示器１０５，キーボード及びマウス等の入力操作装置１０６，波形インタフェース１０７，タイマ１０８、通信インタフェース１０９，ＭＩＤＩインタフェース１１０等が、バス１１１を介して接続されている。波形インタフェース１０７は、外部からアナログ波形信号（オーディオ信号）を入力してディジタル信号に変換してバス１１１に送り出す機能と、このコンピュータにより実行した波形形成処理によって形成されたディジタル波形データをバス１１１を介して受け取り、アナログ変換してスピーカシステム等に出力する機能等を有するものである。もちろん、形成されたディジタル波形データをディジタルデータのまま外部に転送出力することも可能である。
【００１５】
この波形形成装置が楽器の製品応用形態をとっている場合は、入力操作装置１０６におけるキーボードとして、所望の楽音ピッチを選択・指定するための演奏キーボードを含んでいる。一方、この波形形成装置が楽器以外の製品応用形態をとっている場合は、ＭＩＤＩインタフェース１１０にＭＩＤＩキーボードモジュールを接続し、これにより所望の楽音ピッチを選択・指定することができる。また、所望の楽音ピッチを選択・指定は、自動演奏データの形態で与えるようにしてもよい。自動演奏データは、ＲＯＭ１０１、ＲＡＭ１０２、ハードディスク装置１０３、リムーバブルディスク装置１０４等のいずれかの記憶装置に記憶されているものを読み出すことにより与えられるようになっていてもよいし、ＭＩＤＩインタフェース１１０を介して外部から与えられるようにしてもよい。特に詳しく説明しないが、電子楽器の分野では通常知られているように、入力操作装置１０６においては、各種音色や楽音効果、音量等、各種楽音要素の選択・設定等を行うためのスイッチや操作子類が適宜設けられている。また、これらの各種楽音要素の選択・設定は、上記と同様に自動演奏データの形態で与えるようになっていてもよい。
【００１６】
波形データを記憶する波形メモリＷＭの機能は、どのタイプのデータ記憶装置が受け持ってもよい。すなわち、ＲＯＭ１０１、ＲＡＭ１０２、ハードディスク装置１０３、リムーバブルディスク装置１０４のいずれを波形メモリＷＭとして機能させてもよい。一般的には、大容量の記憶装置であるハードディスク装置１０３における適宜の記憶領域あるいはリムーバブルディスク装置１０４に着脱可能なＣＤ−ＲＯＭやＭＯ等のリムーバブルな記録媒体を、波形データベースとしてつまり波形メモリＷＭとして、機能させればよい。あるいは、外部のホスト又はサーバコンピュータに具備されている波形データベースに対して、通信インタフェース１０９及び通信回線を介してアクセスし、必要な波形データをハードディスク装置１０３あるいはＲＡＭ１０２等にダウンロードするようにしてもよい。
ＣＰＵ１００の制御の下で、この発明に係る波形形成処理を実行するソフトウェアプログラムは、ＲＯＭ１０１又はＲＡＭ１０２あるいはハードディスク装置１０３のいずれに記憶しておくようにしてもよい。また、このプログラムは、リムーバブルディスク装置１０４に着脱可能なＣＤ−ＲＯＭやＭＯ等のリムーバブルな記録媒体に記録されていてもよく、また、外部のホスト又はサーバコンピュータから通信回線及び通信インタフェース１０９を介して該プログラムを受信し、ハードディスク装置１０３あるいはＲＡＭ１０２等にダウンロードするようにしてもよい。
【００１７】
波形メモリＷＭにおいては、多数の単位波形の波形データが記憶されている。単位波形とは、それを一つの単位として選択することが可能な波形の一単位を指す。単位波形には、複数のタイプがあり、そのタイプは、音楽的若しくは感性的な意味と、データ読み出しの仕方に基づく技術的意味の、両面から分類するようにしてよい。技術的意味に基づく分類は、その波形データを繰り返し読み出しするか否かによる分類であり、便宜上、波形データが繰り返し読み出しされるものを「ループ波形」といい、波形データが繰り返し読み出しされないものを「ノンループ波形」という。一方、音楽的若しくは感性的な意味に基づく分類は、その波形が、音のどのような部分若しくは区間で使用されるのに相応しいか、ということに基づく分類である。例えば、音の立ち上がり部分（アタック部）で使用されるのに相応しい単位波形を「アタック部波形」、音の立ち下げ部分（リリース部）で使用されるのに相応しい単位波形を「リリース部波形」、音の持続部分（サステイン部）で使用されるのに相応しい単位波形を「サステイン部波形」、スラー等の特定の奏法に従う音と音のつながり部分で使用されるのに相応しい単位波形を「つなぎ奏法波形」、あるいは、ビブラートやトレモロ等の特定の奏法に従って音の持続部で使用されるのに相応しい単位波形を「中間奏法波形」、等のように、適宜に分類し、適切に名付けることができる。
【００１８】
概して、微妙なアーティキュレーション（奏法）が要求される部分で使用されるのに相応しい単位波形としては、そのアーティキュレーション（奏法）の特徴を色濃く表現することができる「ノンループ波形」を含んで使用するのがよい。「ノンループ波形」は、通常、そのアーティキュレーション（奏法）の特徴を表現するのに必要十分な複数周期分の波形からなる。一方、比較的単調な音の部分では、「ループ波形」を使用するのが、波形データ記憶容量の節約の点で都合がよい。「ループ波形」は、通常、１周期または適当な複数周期分の波形からなる。「ループ波形」は、それ単独で、比較的単調な音部分の単位波形として、例えば「サステイン部波形」の単位波形として、使用することができる。その場合に、複数の「ループ波形」を適宜順次組み合わせることにより、つまり、複数の単位波形を順次組み合わせることにより、一連の音の持続部分の波形を形成するようにしてもよく、それは音の品質を上げることができる点で有利である。また、単位波形同士の接続をクロスフェード合成によって滑らかに行うために、その接続箇所部分で、「ループ波形」を使用するのも有利である。しかして、「ノンループ波形」を含む単位波形にあっても、他の単位波形との接続箇所となる始端又は終端において予め「ループ波形」を含むことが、好ましい一実施の形態として考えられる。一方、勿論、「ノンループ波形」のみで構成される単位波形があってもよく、その場合は、他の単位波形との接続は、接続点における適切な位相合わせ処理によって、滑らかに行うことができる。
【００１９】
図２は、波形メモリＷＭに記憶されるいくつかの単位波形の典型例を示す概略図である。図示の簡略化のために、実際の波形図形は一部のみ図示し、波形の所在の概要のみ四角枠で囲って図示している。なお、この図示例では、波形データの振幅ピークレベルを一定値に規格化して記憶しておき、読出・再生時に、所要の振幅エンベロープを付与するようにしている。勿論、これに限らず、記憶する波形データの振幅ピークレベルを規格化せずに、任意の振幅エンベロープが付与された状態のまま記憶しておくようにしてもよい。図で横軸はメモリのアドレスである。なお、波形メモリＷＭに記憶する各単位波形の波形データは、典型的には、ＰＣＭ化された波形サンプルデータであるものとする。しかし、波形データのコード化フォームは、ＰＣＭに限らず、ＤＰＣＭあるいはＡＤＰＣＭ等であってもよい。
【００２０】
図２（ａ）はアタック部波形の一例であり、このアタック部波形は先行するノンループ波形ＮＬＷと後続するループ波形ＬＷとからなっている。波形メモリＷＭにおけるこのアタック部波形の開始点は、特定のスタートアドレスＳＡによって特定される。また、ループ波形ＬＷの開始点は、特定のループスタートアドレスＬＳによって特定される。
図２（ｂ）はサステイン部波形のような中間波形に該当する単位波形の一例であり、この中間波形は、１つのループ波形ＬＷからなっている。この場合も、波形メモリＷＭにおけるこの中間波形の開始点、つまりループ波形ＬＷの開始点は、特定のループスタートアドレスＬＳによって特定される。なお、中間波形に該当する単位波形の形態は、これに限らず、ノンループ波形を含んでいてもよい。例えば、所定のノンループ波形の前後にループ波形をそれぞれ配置して１つの単位波形を構成してもよい。
図２（ｃ）はリリース部波形の一例であり、このリリース部波形は先行するループ波形ＬＷと後続するノンループ波形ＮＬＷとからなっている。波形メモリＷＭにおけるこのリリース部波形の開始点、つまりループ波形ＬＷの開始点は、特定のループスタートアドレスＬＳによって特定される。また、リリース部波形の終了点は、特定のエンドアドレスＥＡによって特定される。なお、前述のとおり、アタック部波形又はリリース部波形は、ループ波形ＬＷを含まずに、ノンループ波形ＮＬＷのみからなっていてもよい。
【００２１】
図２においては、個々のループ波形ＬＷを管理するための個別の各種管理情報ＬＳ，ＬＬ，ＷＮ，ＳＰについても示されている。ループスタートアドレスＬＳは前述の通りループ波形ＬＷの開始点のアドレスであり、繰り返し読み出しつまりループ読み出しの開始アドレスを示す。ループ長データＬＬは、該ループ波形ＬＷの長さをアドレス数によって示すデータであり、「ＬＳ＋ＬＬ」によってループエンドアドレス（ループ読み出しの終わりのアドレス）を特定することができる。よって、当該ループ波形ＬＷの繰り返し読み出しつまりループ読み出しは、ループスタートアドレスＬＳからループエンドアドレス「ＬＳ＋ＬＬ」までの波形データを繰り返し読み出すことにより行われる。
【００２２】
ループ波数データＷＮは、当該ループ波形ＬＷを構成している波形の波数つまり周期数を示すデータである。前述のとおり、ループ波形ＬＷは、１波つまり１周期に限らず、複数波つまり複数周期からなっていてもよい。この実施例においては、各ループ波形ＬＷの波数（ＷＮ）及びアドレス数（ＬＬ）は任意であってよいものとしているので、波数（ＷＮ）及びアドレス数（ＬＬ）が適宜に異なるループ波形同士をクロスフェード合成するときに、後述するように、これらのデータＷＮ，ＬＬを利用して各ループ波形の読み出しレートの調整を行い、各ループ再生波形のピッチを合わせるようにしている。このように、波数（ＷＮ）及びアドレス数（ＬＬ）が適宜に異なるループ波形同士をクロスフェード合成できるようにした構成は、ループ波形同士の自由な組合せを容易に可能にし促進するものであるので、波形形成処理の際の制御性と編集性を高めることができる。
【００２３】
初期位相情報ＳＰは、ループスタートアドレスＬＳに対応して記憶されている当該ループ波形ＬＷの先頭の波形サンプルデータの位相を絶対位相表現で示す情報である。すなわち、この実施例によれば、各ループ波形ＬＷの初期位相を予め位相合わせして波形データを記憶させておく必要がなく、その代わりに、当該ループ波形ＬＷの初期位相を示す初期位相情報ＳＰを、当該ループ波形ＬＷの波形データに対応づけて、波形メモリＷＭに記憶しておき、該初期位相情報ＳＰを利用して必要な位相調整等の管理を行うことにより、ループ波形同士の組み合わせ（接続若しくはクロスフェード合成）の際に、適切な位相合わせを行うことができるようにしている。これにより、各ループ波形ＬＷの初期位相を予め位相合わせしておかねばならないという面倒がなくなり、これに伴い、ループ波形ＬＷの汎用性、異なる波形データベース間での相互利用可能性を高めることができるので、極めて有利である。なお、初期位相情報ＳＰに限らず、その他の位相管理情報を、当該ループ波形ＬＷの波形データに対応づけて、波形メモリＷＭに記憶しておくようにしてもよい。例えば、ループ波形ＬＷの終了点（ループエンドアドレス「ＬＳ＋ＬＬ」に対応する波形サンプルデータ）の位相を示す情報（終端位相情報）を、位相管理情報として使用してもよい。また、初期位相情報ＳＰ又は終端位相情報等の位相管理情報は、絶対位相に限らず、相対位相で表現してもよい。例えば、任意の位相値を基準位相として、該基準位相に対する初期位相（若しくは終端位相）の位相差つまり相対位相で表すようにしてもよい。また、初期位相情報ＳＰ又は終端位相情報等の位相管理情報のデータ表現は、この実施例ではラジアン表現を用いるものとするが、それに限らず、角度表現あるいは、アドレス数による間接的位相表現等であってもよい。更に、位相管理情報は、ループ波形ＬＷの初期位相や終端位相を示すものに限らず、例えば、当該ループ波形ＬＷにおける所定の基準位相（例えば０位相）の波形サンプルデータが所在するアドレスを示す情報等であってもよい。
【００２４】
図３はいくつかのループ波形の具体例を拡大して示す図であり、（ａ）に示すループ波形例１は初期位相情報ＳＰが０である例、（ｂ）に示すループ波形例２は初期位相情報ＳＰがΔＰ１である例、（ｃ）に示すループ波形例３は初期位相情報ＳＰがΔＰ２である例、を示している。図で黒点で示した箇所が０位相（絶対位相の位相値０）に該当している。また、図の各例ではＷＮ＝１としている。この例では初期位相情報ＳＰを絶対位相で表しているため、（ａ）のように初期位相が０位相である場合はＳＰ＝０、（ｂ）のように初期位相がΔＰ１である場合はＳＰ＝ΔＰ１、（ｃ）のように初期位相がΔＰ２である場合はＳＰ＝ΔＰ２、と表現される。これに対して、例えば絶対位相の位相値ΔＰ１を基準とする相対位相で初期位相情報ＳＰを表現した場合は、（ａ）の例はＳＰ＝２π−ΔＰ１、（ｂ）の例はＳＰ＝０、（ｃ）の例はＳＰ＝ΔＰ２−ΔＰ１、と表現される。図において、ゼロ位相アドレスＺＰは、当該ループ波形における０位相（所定の基準位相）の波形サンプルデータが所在するアドレスを示す。図から明らかなように、このようなゼロ位相アドレスＺＰによってループ波形の初期位相を表現できる。このゼロ位相アドレスＺＰは、ループスタートアドレスＬＳに対する相対値で表されていてよい。位相管理情報は、その他適宜の表現が可能である。
【００２５】
図４（ａ）は、波形メモリＷＭにおける記憶フォーマットを略示する図であり、波形メモリＷＭは管理データ領域と波形データ領域とからなる。波形データ領域は、上述したような様々なタイプの多数の単位波形の波形データ（具体的な波形サンプルデータ）をそれぞれ個別に記憶する領域である。管理データ領域は、波形データ領域に記憶している個々の波形データについて必要な各種の管理情報を記憶している領域である。
【００２６】
図４（ｂ）〜（ｄ）は、管理データ領域に記憶される各波形データ毎の管理データの具体的な記憶フォーマットを、いくつかのタイプの単位波形について、例示するものである。（ｂ）はノンループ波形ＮＬＷとループ波形ＬＷからなるアタック部波形についての管理データの一例、（ｃ）はループ波形ＬＷのみからなる中間波形についての管理データの一例、（ｄ）はループ波形ＮＬとノンループ波形ＮＬＷからなるリリース部波形についての管理データの一例、を示す。図示の管理データフォーマットにおいて、タイプデータＴＹＰＥは、その単位波形がいかなるタイプのものであるかを示すデータである。例えば、（ｂ）の場合は「ノンループ波形ＮＬＷとループ波形ＬＷからなるアタック部波形」ということがタイプデータＴＹＰＥによって示され、（ｃ）の場合は「ループ波形ＬＷのみからなる中間波形」ということがタイプデータＴＹＰＥによって示され、（ｄ）の場合は「ループ波形ＮＬとノンループ波形ＮＬＷからなるリリース部波形」ということがタイプデータＴＹＰＥによって示される。その他、タイプデータＴＹＰＥは、上述した各種のタイプに応じて、当該タイプを示すことができるような情報からなる。識別データＩＤは、個々の波形データを識別するデータ（例えば個別波形データのファイル名）である。
【００２７】
また、管理データは、当該単位波形の波形データを波形データ領域から読み出すために必要なアドレスデータやその他のデータを含んでいる。（ｂ）の例では、スタートアドレスＳＡ、ループスタートアドレスＬＳ、ループ長さデータＬＬ、ループ波数データＷＮ、ループ波形の初期位相情報ＳＰなどである。（ｃ）の例では、ループスタートアドレスＬＳ、ループ長さデータＬＬ、ループ波数データＷＮ、ループ波形の初期位相情報ＳＰなどである。（ｃ）の例では、ループスタートアドレスＬＳ、ループ長さデータＬＬ、ループ波数データＷＮ、ループ波形の初期位相情報ＳＰ、エンドアドレスＥＡなどである。
【００２８】
ところで、ループ波形ＬＷにおいては、ループ長さデータＬＬとループ波数データＷＮとによって、１波つまり１周期波形当りのアドレス数（サンプル数）が判明する。この１波つまり１周期波形当りのアドレス数（サンプル数）を示すデータを波長データＷＬということにする。波長データＷＬは、下記の式（１）によって求まる。
ＷＬ＝ＬＬ／ＷＮ      …（１）
前述の通り、これらのデータ（つまり波長データＷＬ）を用いて読み出しレートを調整することによって、所望の楽音ピッチに従う読み出しが可能となる。これによって、記録時のサンプリング周波数の違いやオリジナル音のピッチの相違などを考慮に入れた波形データ読み出し制御が可能となるので、所望の再生ピッチを保ちながら、記録時のサンプリング周波数やオリジナル音のピッチが異なる単位波形同士を接続したり、クロスフェード合成したりすることが容易に行えるようになる。
【００２９】
同様の目的のために、ノンループ波形ＮＬＷにおいても、当該波形における１波つまり１周期波形当りのアドレス数（サンプル数）の代表値を示すデータ（波長データＷＬ）を、管理データの中に含んで記憶しておくものとする。その場合、代表的な波長データＷＬは、一般的に、「記録時のサンプリング周波数」÷「オリジナル音のピッチ周波数」の式から得ることができる。なお、この種の波長データＷＬは、ノンループ波形ＮＬＷのみからなる単位波形の管理データにおいて記憶しておくようにし、ノンループ波形ＮＬＷとループ波形ＬＷを含んでいる単位波形の管理データにおいては、ループ波形ＬＷについて上記式（１）から得られる波長データＷＬをノンループ波形ＮＬＷにも流用するようにしてよい。
【００３０】
次に、所望の楽音再生ピッチに従って波形メモリＷＭから波形データを読み出すための基本的な原理について説明する。
所望の楽音再生ピッチの周波数に比例する定数である「周波数ナンバ」（以下、Ｆナンバと略称する）を、所定の再生サンプリング周波数に対応する規則的時間間隔で繰り返し加算若しくは減算（つまり累算）し、その累算値の整数部をメモリ読出用アドレスとして、波形データの読み出しを行う波形読出原理は既に周知である。当実施例では、この波形読出原理に従うものとする。所望の楽音再生ピッチの周波数をｆｎとし、所定の再生サンプリング周波数をｆｓとすると、その標準的なＦナンバ（これを標準ＦナンバＦｓｔ（Ｎ）と表す）は、下記式（２）で求まる。
Ｆｓｔ（Ｎ）＝ｆｎ／ｆｓ    …（２）
標準ＦナンバＦｓｔ（Ｎ）は、小数値からなり、適宜のＦナンバテーブルに記憶されており、再生すべき楽音のピッチが、押鍵操作あるいはキーコード若しくはノートナンバ等の情報によって指定されたとき、該Ｆナンバテーブルから読み出される。
【００３１】
上記の標準ＦナンバＦｓｔ（Ｎ）は、所望の楽音再生ピッチの周波数ｆｎの１周期に対応するアドレス数を１としたときのＦナンバに相当する。つまり、Ｆｓｔ（Ｎ）を「ｆｓ／ｆｎ」回累算したときに、その累算結果が「１」になるような値である。しかし、実際のＦナンバは、該Ｆナンバを再生サンプリング周波数ｆｓに従う周期で「ｆｓ／ｆｎ」回累算したときに、その累算結果が波長データＷＬに相当するアドレス数（１周期分のアドレス数）になるような値であるべきなので、実際のＦナンバ（これをＦ（Ｎ）とする）は、上記標準ＦナンバＦｓｔ（Ｎ）と上記式（１）で求めた波長データＷＬを用いて下記式（３）に従って算出する。
Ｆ（Ｎ）＝Ｆｓｔ（Ｎ）×ＷＬ    …（３）
【００３２】
更に、後述するように、再生楽音のピッチを時間的に変動制御するピッチ制御関数ＰＶ（ｖｔ）（ピッチベクトル）を使用して、再生ピッチを時変動制御する場合は、実際のＦナンバＦ（Ｎ）は、下記式（４）に従って算出される。ただし、ピッチ変動なしのとき、ＰＶ（ｖｔ）＝１である。
Ｆ（Ｎ）＝Ｆｓｔ（Ｎ）×ＷＬ×ＰＶ（ｖｔ）  …（４）
上記式（４）で求まるＦナンバＦ（Ｎ）を、再生サンプリング周波数ｆｓに従う周期で規則的に累算し、その累算値の整数部を読出アドレス（スタートアドレスＳＡ又はＬＳに対する相対アドレス）として波形データを読み出すことにより、所望の楽音再生ピッチに対応する周波数ｆｎを持つ波形を、ピッチ制御関数ＰＶ（ｖｔ）に従うピッチ時変動制御を行いつつ、再生読み出しすることができる。この場合の読出アドレスをＡＤで示すと、ループ波形ＬＷの波形データを読み出す場合は、下記式（５）のように表せる。
ＡＤ＝ＬＳ ＋ MOD.LL｛ΣＦ（Ｎ）｝    …（５）
ここで、ΣＦ（Ｎ）は、ＦナンバＦ（Ｎ）を再生サンプリング周波数ｆｓに従う周期で規則的に累算した値を示し、MOD.LL｛ΣＦ（Ｎ）｝は、該累算値ΣＦ（Ｎ）を、当該ループ波形ＬＷのループ長さデータＬＬに対応する値をモジュロ数とする余り値、つまりΣＦ（Ｎ）をＬＬで割った商の余り値である。これにより、ループスタートアドレスＬＳから始まって、ループ長さデータＬＬの範囲のアドレス範囲で繰り返される（ループする）読出アドレスＡＤが生成され、この読出アドレスＡＤに従ってループ波形ＬＷの波形データを繰り返し読み出し（ループ読み出し）することができる。
【００３３】
なお、図２（ａ）のようなアタック部波形のノンループ波形ＮＬＷを読み出す場合は、読出アドレスＡＤを下記式（６）に従って生成すればよく、これに従って該ノンループ波形ＮＬＷを１回だけ読み出す。
ＡＤ＝ＳＡ ＋ ΣＦ（Ｎ）    …（６）
また、図２（ｃ）のようなリリース部波形のノンループ波形ＮＬＷを読み出す場合は、読出アドレスＡＤを下記式（７）に従って生成すればよく、これに従って該ノンループ波形ＮＬＷを１回だけ読み出す。
ＡＤ＝ＬＳ＋ＬＬ＋ ΣＦ（Ｎ）    …（７）
なお、「ＬＳ＋ＬＬ」はリリース部波形のノンループ波形ＮＬＷのスタートアドレスを示している。
【００３４】
なお、ＦナンバＦ（Ｎ）の累算値ΣＦ（Ｎ）の小数部の値を用いて、通常知られているように、波形データのサンプル値の補間演算を行い、記憶された波形データの分解能よりも精密な分解能で波形データを生成することができる。ところで、上記式（４）でＦナンバＦ（Ｎ）を算出する場合、あるいは累算値ΣＦ（Ｎ）の演算過程において、演算のビット数（桁数）に限界があるため、下位ビットの丸め込み処理が行われる。その結果、誤差が生じることになるが、適当な周期で所定の誤差補正演算を行うようにすればよい。特に、後述するように、２つのループ波形をクロスフェード合成する場合に、両波形の初期位相のずれに応じた位相差を保持して両ループ波形の読出アドレスＡＤの生成を行うことにより、結果的に両者のループ再生波形の位相合わせを行うようにしているので、上記の丸め誤差が両者の読出アドレスＡＤの位相差に誤差をもたらし、ループ再生波形の位相合わせに誤差をもたらすことになる。そのようなクロスフェード合成に際しての各読出アドレスＡＤの所定の位相差を狂わせる丸め誤差の影響を補正するために、両読出アドレスＡＤの差が所定の位相差を保つように、適当な周期で強制的に誤差補正演算を行えばよい。例えば、５１２サンプルの波形データを再生する毎に（再生サンプリング周波数ｆｓが４８ｋＨｚの場合は約１０ミリ秒毎）、あるいは４０９６サンプルの波形データを再生する毎に（約１００ミリ秒毎）、といういうように、所定の時間間隔で、両ループ波形の読出アドレスＡＤの差が、両者の初期位相ＳＰの差を保つように、累算値ΣＦ（Ｎ）を修正すればよい。
【００３５】
次に、ループ波形同士を接続する処理の基本例について説明する。
図５の（ａ）は、先行するループ波形Ａと後続するループ波形Ｂを単純接続する例を示す。この場合は、先行するループ波形Ａを所定回数だけループ読出した後、後続するループ波形Ｂのループ読出を行うように、切り換えることにより、接続を行う。その場合に、両者の初期位相情報ＳＰを考慮して、接続点における先行するループ波形Ａの終端と後続するループ波形Ｂの始まりの位相が合うように、後続するループ波形Ｂの読出開始アドレスを調整すればよい。例えば、図３（ｂ）のループ波形例２が先行するループ波形Ａであり、（ｃ）のループ波形例３が後続するループ波形Ｂであるとすると、先行するループ波形Ａのループ読出の最後においてその読出アドレスがゼロ位相アドレスＺＰまで到達したとき、後続するループ波形Ｂの読出に切換え、該ループ波形Ｂをそのゼロ位相アドレスＺＰから読出開始するようにすればよい。このように、単純接続する場合においても、両者の初期位相情報ＳＰを利用して滑らかに接続できるよう位相調整処理を行うことができる。この場合、各ループ再生波形の持続時間つまりループ区間は、それぞれ独自の時間制御情報によって可変制御するようにすることができる。
【００３６】
図５の（ｂ）は、先行するループ波形Ａと後続するループ波形Ｂをクロスフェード合成する例を示す。この場合は、クロスフェード区間１において、先行するループ波形Ａをループ読み出しすると同時に、後続するループ波形Ｂもループ読み出しし、先行するループ波形Ａのループ再生波形を図で点線で示すようなフェードアウト（立ち下がり）特性のエンベロープで振幅制御し、後続するループ波形Ｂのループ再生波形を図で点線で示すようなフェードイン（立ち上がり）特性のエンベロープで振幅制御し、両者を加算合成して、１つのループ再生波形を合成する。クロスフェード合成されたループ再生波形は、ループ波形Ａからループ波形Ｂへと滑らかに変化することになる。その次のクロスフェード区間２においては、ループ波形Ｂをループ読み出しすると同時に、後続するループ波形Ｃもループ読み出し、両者を上述と同様にクロスフェード合成する。この場合も、各クロスフェード区間におけるループ再生波形の持続時間は、それぞれ独自の時間制御情報によって可変制御するようにすることができる。例えば、時間制御情報に応じて当該クロスフェード区間のクロスフェードカーブの傾き（フェードアウト及びインのエンベロープの傾き）を変えることで、各クロスフェード区間の時間長をそれぞれ独立に可変制御することができる。以下、さらに詳細に説明する例においては、クロスフェード合成によってループ波形同士の接続処理を行うものとする。
【００３７】
２つのループ波形の読み出し出力をクロスフェード合成する場合、両者の位相が合っていないと、波形の打消が起こるので、好ましくない。そこで、クロスフェード合成する２つのループ波形の読み出し出力（つまりループ再生波形）の位相が合うように適切に位相調整してやる必要がある。そのために、各ループ波形の初期位相情報ＳＰを使用し、両者の読出アドレスＡＤを適切に位相調整することにより、両ループ再生波形の位相が合うように制御する。なお、「位相を合わせる」とは、必ずしも厳密に位相を合わせることのみを意味するのではなく、波形の打消が起こらない範囲で適切に位相調整を行なうことも含む。つまり「ゆるい位相合わせ」であってもよい。
【００３８】
そのための一例として、クロスフェード合成する２つのループ波形の読出アドレスＡＤｉ，ＡＤi-1 を下記式（８）及び（９）に従って算出すればよい。これらの式における各変数ＡＤ，ＬＳ，ＬＬ，ΣＦ（Ｎ）の意味は、上記式（５）と同じであり、各変数に付された添字i-1 は、先行するループ波形についての変数であることを示し、添字ｉは、後続するループ波形についての変数であることを示す。すなわち、ＡＤi-1 は先行するループ波形の読出アドレス、ＡＤｉは後続するループ波形の読出アドレスである。また、ＳＰi-1 は先行するループ波形の初期位相情報ＳＰ（ラジアン表現）、ＳＰｉは後続するループ波形の初期位相情報ＳＰ（ラジアン表現）である。この例の場合、式（８）は上記式（５）と同じであり、先行するループ波形の読出アドレスＡＤi-1 については、初期位相情報ＳＰに応じたアドレスオフセット処理を行なっていない。
0003726765.tif 000002
【００３９】
上記式（９）において、「−（ＳＰｉ−ＳＰi-1）×ＷＬｉ／２π」の項は、初期位相ＳＰｉとＳＰi-1とＳＰｉの位相差を、後続するループ波形の波長データＷＬｉを１周期（＝２π）とするアドレス数に換算したものである。これにより、一方の読出アドレスＡＤｉが、他方の読出アドレスＡＤi-1 に対して、両者の初期位相ＳＰの位相差「ＳＰｉ−ＳＰi-1」に対応するアドレス数分だけオフセットされ、両者の実際の波形データの読出位相が合うことになる。つまり、読出アドレスＡＤi-1 によりその初期位相ＳＰi-1 のアドレス０から波形データを読み出すとき、読出アドレスＡＤｉのアドレスはその初期位相ＳＰｉから「ＳＰｉ−ＳＰi-1」の位相差だけオフセットされたアドレス、つまり、ＳＰｉ−（ＳＰｉ−ＳＰi-1）＝ＳＰi-1 の位相に対応するアドレスから波形データを読み出すこととなり、両者の読出波形データの絶対位相が合うことになる。
【００４０】
図６は、上記２系列の読出アドレスＡＤi-1，ＡＤｉが、両者の初期位相ＳＰの位相差「ＳＰｉ−ＳＰi-1」に対応するアドレス数分だけオフセットした状態を保ちつつ、ループする状態を示したグラフである。縦軸がアドレス、横軸が時間である。それぞれのループ長さデータＬＬi-1，ＬＬｉに対応するアドレス範囲でループしている。この図から明らかなように、読出アドレス形成処理は、或る第１のループ波形の波形データを読み出すための第１のアドレス信号ＡＤｉと或る第２のループ波形の波形データを読み出すための第２のアドレス信号ＡＤi-1 とを、該第１及び第２のループ波形の初期位相の差「ＳＰｉ−ＳＰi-1 」に応じた異なる態様でループさせてなるものであり、これにより、該第１及び第２のアドレス信号ＡＤｉ，ＡＤi-1 に従って前記第１及び第２のループ波形の波形データをそれぞれ繰返し読み出しすることでそれぞれに対応して形成される第１及び第２のループ再生波形の位相調整つまり位相合わせが行なわれるようになっている。なお、図６の例では、２つのループ波形のループ波数が「１」で、それぞれのループ周期Ｔi-1，Ｔｉが再生ピッチの１周期Ｔに対応しているものとしている。そうすると、両アドレス信号ＡＤi-1，ＡＤｉのループタイミングの時間差ΔＴは、再生ピッチの１周期Ｔを２πとするラジアン表現に換算すると、
２π（ΔＴ／Ｔ）
と表すことができ、これが両ループ波形の初期位相ＳＰi-1，ＳＰｉの位相差ΔＳＰに対応している。つまり、
ΔＳＰ＝ＳＰｉ−ＳＰi-1 ＝２π（ΔＴ／Ｔ）
なる関係が成り立つ。図示のように、この初期位相差ΔＳＰに対応するアドレスのずれを保持しつつ、各アドレス信号ＡＤi-1，ＡＤｉがループする。
【００４１】
ところで、クロスフェード区間が切り替わるときは、それまでの後続ループ波形が先行ループ波形に切り換わり、その次のループ波形が後続ループ波形となる。後続ループ波形から先行ループ波形に切り替わった読出アドレスＡＤｉの進展を滑らかにするには、クロスフェード区間の最後で、後続ループ波形の読出アドレスＡＤｉがそのループ波形の終了点アドレス（つまりＬＳ＋ＬＬ）に達したときに波形を切り替えるようにするとよい。そうすれば、上記式（９）に従ってアドレスオフセットしつつループしていた後続ループ波形の読出アドレスＡＤｉが次にとるべきアドレスはループスタートアドレスＬＳであることになり、クロスフェード区間の切り替えによって、次のサンプリング周期において、これが先行ループ波形切り替わって、その読出アドレスＡＤi-1 が上記式（８）に従って算出されることとなったとしても、所定のループスタートアドレスＬＳを読出アドレスとして指定することとなり、問題のない制御が行なえる。
【００４２】
クロスフェード合成する２つの読出アドレスＡＤi-1，ＡＤｉの計算式は、上記式（８）、（９）に限らず、適宜変更可能である。例えば、下記式のように、夫々の初期位相ＳＰi-1，ＳＰｉに相当するアドレス数分だけオフセットするようにしてもよい。
0003726765.tif 000003
この場合も、両読出アドレスＡＤi-1，ＡＤｉのループタイミングの時間差は、両者の初期位相ＳＰの位相差「ＳＰｉ−ＳＰi-1」＝ΔＳＰに対応するものとなり、両者の実際の波形データの読出位相が合うことになる。
【００４３】
なお、上述したような、初期位相ＳＰの位相差「ＳＰｉ−ＳＰi-1」を考慮して各読出アドレスＡＤi-1，ＡＤｉのループタイミングに時間差を設定してそれぞれループ読出制御することにより、初期位相の異なる２つのループ波形の各ループ再生波形の絶対位相を実質的に合わせるようにした処理は、クロスフェード合成の場合に限らず、適宜のミキシング比で２系列またはそれ以上の系列のループ波形をミキシング合成（若しくは補間合成）するような場合にも適用することができる。また、必ずしも、初期位相情報ＳＰを管理データ領域に予め記憶させておかなくてもよい。すなわち、任意の初期位相からなる２つのループ波形を合成しようとする段階になってから、両ループ波形を分析して両者の初期位相の差を求め、この位相差に応じて両ループ波形の読出アドレスのループタイミングをずらすことで、初期位相の異なる２つのループ波形の各ループ再生波形の絶対位相を実質的に合わせるようにすることができる。位相差の分析は、例えば、２つのループ波形の相互相関関数が最も大きくなる位相差を求めることで可能である。
【００４４】
次に、一連の音の波形を形成する処理について説明する。
基本的には、一連の音の波形は、複数の単位波形を所望の順序で選択して、その波形データを波形メモリＷＭから読み出し、これらを相互に接続することにより、形成される。一例として、予め設定された波形シーケンスデータによって、単位波形の選択順序と読み出し手順等が指定される。図４（ｅ）は、そのような波形シーケンスデータの一例を示すものである。この波形シーケンスデータは、ＲＯＭ１０１，ＲＡＭ１０２，ハードディスク装置１０３，リムーバブルディスク装置１０４等の適宜のデータ記憶装置において予め記憶されているものであってよく、また、そのデータ内容の書き替え等の編集操作を適宜行なうことができるものである。
図４（ｅ）に示した波形シーケンスデータは、図７（ａ）に示すような態様で、複数の単位波形を組み合わせるようにした例に対応するものである。図４（ｅ）において、まず、時間データｔ０と共に特定の単位波形Ａｔｋ５を指定する波形選択データが記憶されている。時間データｔ０は、波形形成スタートタイミングを示すデータである。波形選択データによる指定値「Ａｔｋ５」をインデックスとして、波形メモリＷＭから「Ａｔｋ５」の識別データＩＤを持つ単位波形の管理データを読み出し、これに基づき該単位波形Ａｔｋ５の波形データを所定の手順で読み出す。例えば、この単位波形Ａｔｋ５のタイプは、図２（ａ）に示すようなノンループ波形ＮＬＷとループ波形ＬＷとからなるアタック部波形である。次のデータＸＦ５は、クロスフェード区間長データであり、特定のクロスフェード区間長（時間長）を指示している。クロスフェード区間長は、クロスフェードカーブの傾きに対応している。すなわち、クロスフェードカーブは、係数値０から１まで（または１から０まで）の範囲で直線的に変化する関数からなり、その傾きがそのまま０から１まで（または１から０まで）の変化に要する時間つまりクロスフェード区間長に対応している。次のデータＬｐ１０は、ループ波形のみからなる特定の単位波形Ｌｐ１０を指定する波形選択データである。よって、上記データＸＦ５は、単位波形Ａｔｋ５の終端部分にあるループ波形と次のループ波形Ｌｐ１０とをクロスフェード合成する際のクロスフェード区間長を指示している。
【００４５】
図７の例では、以後、ループ波形のみからなる単位波形Ｌｐ１２，Ｌｐ８，Ｌｐ７を順次接続し、それぞれのクロスフェード区間長をＸＦ１，ＸＦ１０，ＸＦ７，ＸＦ１６のように順次設定することが示されている。よって、図４（ｅ）のデータも、それに対応するシーケンスが得られるように、記憶されている。最後の単位波形Ｒｅｌ５は、図２（ｃ）に示すようなループ波形ＬＷとノンループ波形ＮＬＷとからなるリリース部波形である。データＸＦ１６によって区間長が指示されたクロスフェード区間ではループ波形Ｌｐ７とリリース部波形Ｒｅｌ５の始まり部分にあるループ波形との間でクロスフェード合成がなされる。
【００４６】
図７（ａ）において、時点ｔ１〜ｔ６は、それぞれ使用する単位波形を切り替える時点を示している。これらの切り替え時点は、ノンループ波形の固有のデータ長やデータＸＦによって指定される各クロスフェード区間長によってそれぞれ決まってくるが、後述する波形データの時間軸伸縮制御に伴って適宜可変制御される。なお、図７（ａ）に示された序数ｉは、波形シーケンスにおける単位波形の切り替えステップを示す序数であり、１，２，３，…と順に変化する。また、図７（ａ）に示されたステート情報ＳＴは、シーケンスの進展に伴って変化するシーケンス管理情報であり、例えば、０のとき発音停止ステートを示し、１のときアタックステートを示し、２のとき単位波形を切り替える準備を行なう過渡的ステートを示し、３のときループ波形のクロスフェード合成を行なうクロスフェードステートを示し、４のときリリースステートを示す。
【００４７】
上述したような波形シーケンスに従って、所定の単位波形が順次読み出され、その際、ループ波形にあっては適宜ループ読み出しされ、かつ、単位波形同士の接続はループ波形同士のクロスフェード合成によって滑らかに行なわれ、全体として、一連の音の波形が形成される。この一連の音とは、１つの音若しくは音符を構成するものに限らず、複数の音若しくは音符（つまりフレーズ）を構成するものであってもよい。なお、その際、ループ波形同士のクロスフェード合成に際しては、前述の通り、それぞれの初期位相情報ＳＰを使用して位相合わせを行ないつつ、ループ読み出しが行なわれる。なお、所望の一連の音の波形を形成するための波形シーケンスデータは、メモリに予め記憶されたものを使用する場合に限らず、演奏者のリアルタイムの選択・設定操作に応じてリアルタイムで作成したり、変更したりできるようにしてよい。
【００４８】
更に、この実施例においては、上記のような波形シーケンスに従って生成する波形の様々な楽音要素を、各種のパラメータによって可変制御するようにしている。制御対象となる楽音要素の代表例は、ピッチ、音色、振幅、時間等である。それぞれの楽音要素についての制御量は、時間的に可変のエンベロープデータの形で与えられる。図７（ｂ）〜（ｄ）は、いくつかの楽音要素制御データの一例を示したものであり、（ｂ）は時間要素を制御するデータ（時間制御情報）の一例、（ｃ）は振幅要素を制御するデータの一例、（ｄ）はピッチ要素を制御するデータの一例、である。このような各種の制御データの時間変化のパターンつまりエンベロープ形状は、テンプレートとして予め準備されていてよいし、または所望のテンプレートをユーザーが自由に作成できるようにしてもよい。なお、各テンプレートは、適宜のメモリ又はテーブル等に予め記憶しておくようにしてもよいし、また、必ずしもメモリ又はテーブル等に予め記憶しておくことなく、適宜演算等によって形成するようにしてもよい。
【００４９】
個々の波形シーケンスに対応して、これらの各種楽音要素制御データの所定のテンプレートを指定するデータを、ベクトルデータとして、用意しておく。図７（ｂ）のような時間要素制御データ（時間制御情報）を特定するベクトルデータを、タイムベクトルＴＶということにする。このタイムベクトルＴＶによって、所定のエンベロープ状の（つまり時間変化しうる）時間要素制御データ（時間制御情報）のテンプレートを特定し、発生することができる。図７（ｃ）のような振幅要素制御データを特定するベクトルデータを、振幅ベクトルＡＶということにする。この振幅ベクトルＡＶによって、所定の振幅エンベロープのテンプレートを特定し、該振幅エンベロープを発生することができる。図７（ｄ）のようなピッチ要素制御データを特定するベクトルデータを、ピッチベクトルＰＶということにする。このピッチベクトルＰＶによって、所定のピッチ変動エンベロープのテンプレートを特定し、該ピッチ変動エンベロープを発生することができる。ピッチベクトルＰＶに基づくピッチ変動エンベロープ値は、Ｆナンバに対する比率で表されており、ピッチ変化させない場合は「１」、ピッチをアップする場合は「１」以上の値、ピッチをダウンする場合は「１」未満の値、である。
【００５０】
タイムベクトルＴＶに基づき行なわれる時間要素の制御とは、波形データが時間軸で存在する長さ（つまり持続時間長）を伸張したり圧縮したりする制御（以下、これを時間軸伸縮制御、略してＴＳＣ制御、という）である。この種の時間軸伸縮制御すなわちＴＳＣ制御は、楽音再生ピッチとは独立に波形データの存在時間長を制御できるようにすることが望ましい。そのためのタイムベクトルＴＶに基づく時間軸伸縮制御情報は、時間軸伸縮比を示すデータ（これをＣＲａｔｅという）として表され、例えば、時間軸伸縮を行なわない場合「１」、時間軸伸張を行なう場合「１」未満の値、時間軸圧縮を行なう場合「１」以上の値、で表される。
【００５１】
更に時間軸伸縮制御すなわちＴＳＣ制御について説明する。ループ波形の場合は、基本的には、ループ回数を可変することによって、比較的簡単に、楽音再生ピッチとは独立に、ループ再生波形全体の時間長を可変制御することができる。つまり、クロスフェード区間長データＸＦによって特定のクロスフェードカーブが特定されると、それに伴ってクロスフェード区間長（時間長若しくはループ回数）が決まってくる。ここで、このクロスフェードカーブの傾きをタイムベクトルＴＶが示す時間軸伸縮比によって可変制御することにより、クロスフェードの速さが可変制御され、結局、クロスフェード区間の時間長が可変制御される。その間、楽音再生ピッチには影響を与えないので、結局、ループ回数が可変制御されることで当該クロスフェード区間の時間長が可変制御される。
【００５２】
一方、ノンループ波形の場合は、楽音再生ピッチとは独立に、時間軸上におけるその存在時間長を可変制御することはそれほど簡単ではない。しかし、本出願人が既に出願済みの新技術である「波形データの時間軸伸縮制御」技術を用いることで、ノンループ波形の時間軸伸縮制御も可能である。すなわち、簡単に要約すれば、一定の波形データ量からなるノンループ波形を、一定の再生サンプリング周波数と所定の再生ピッチを維持しつつ、その時間軸上の波形データ存在時間長を伸縮するために、圧縮する場合は、波形データの適宜の部分を飛び越して読み出しを行ない、伸張する場合は、波形データの適宜の部分を繰り返し読み出しするようにし、そして、飛び越し若しくは部分的繰り返し読み出しによる波形データの不連続性を除去するためにクロスフェード合成を行なうようにする。この手法を、本実施例におけるノンループ波形部分でのＴＳＣ制御においても適用することができるが、本明細書では詳しくは説明しない。なお、ノンループ波形部分での時間軸伸縮制御を行なわずに、ループ波形の部分でのみ時間軸伸縮制御を行なうようにしてもよい。
【００５３】
ところで、図７（ｂ）〜（ｄ）の横軸は時間軸であるが、この変数は実際の時間ではなく、図７（ｂ）に示すようなタイムベクトルＴＶに基づく時間軸伸縮比データＣＲａｔｅに応じて伸縮制御された時間軸（これをバーチャルタイムｖｔという）である。すなわち、図７（ａ）に示すような再生波形データは、その時間軸での存在時間が、図７（ｂ）に示すタイムベクトルＴＶに応じて伸縮制御されるので、この伸縮制御にあわせて、図７（ｂ）〜（ｄ）に示す各ベクトルに基づく制御データの時間軸も伸縮してやる必要がある、つまり、各楽音要素の制御データの時間軸上の存在時間も、再生波形データの時間軸伸縮に同期させて、伸縮してやる必要があるからである。この理由により、前記式（４）におけるピッチ制御関数ＰＶ（ｖｔ）の時間変数としてバーチャルタイムｖｔを用いている。また、振幅エンベロープ関数ＡＶ（ｖｔ）及びピッチ変動エンベロープ関数ＰＶ（ｖｔ）の時間変数としてもバーチャルタイムｖｔが用いられる。
【００５４】
次に、図４（ｅ）あるいは図７（ａ）に示したような波形シーケンスにしたがって、図１におけるコンピュータによって波形形成処理を行なう場合の処理プログラムの一例を図８〜図１０によって説明する。
図８は、波形再生のために波形シーケンスを進行する処理の概略を示す。まず、再生しようとする波形シーケンスデータを指定する（ステップＳ１）。次に、ステートＳＴを「０」にセットし、波形再生を開始する準備をする（ステップＳ２）。次のステップＳ３では、ストップイベントＳＴＯＰの有無をチェックする。ストップイベントＳＴＯＰが与えられていない場合は、時間データｔ０によって示された波形形成スタートタイミングが到来したかどうかをチェックする（ステップＳ４）。ＮＯであれば、ステップＳ３に戻り、ステップＳ３，Ｓ４を繰り返す。波形形成スタートタイミングが到来し、ステップＳ４でＹＥＳと判断されたら、ステートＳＴを「１」にセットすると共に序数ｉを「１」にセットし、最初の単位波形つまりアタック部波形を再生する準備をする（ステップＳ５）。すなわち、波形メモリＷＭの管理データ領域から該当するアタック部波形（例えば図４（ｅ）及び図７（ａ）のＡｔｋ５）の各管理データを読み出し、該アタック部波形Ａｔｋ５の波形データを波形メモリＷＭの波形データ領域から読み出すことを開始する準備をする。次に、ステートＳＴが「２」になったかどうかをチェックし（ステップＳ６）、ＮＯであれば、ステートＳＴが「２」になるまで待機する。
【００５５】
図９は、再生サンプリング周波数ｆｓの１周期毎に規則的に行なわれる割込み処理の一例を示す。１サンプル当たりの波形データの読み出し及び形成処理は、この１回の割込み処理において行なわれる。従って、図８の処理がステップＳ６で待機している間、図９の割込み処理が繰り返し実行されて、波形データの読み出し及び形成処理が行なわれる。この割込み処理では、まず、ステートＳＴが「０」かどうかをチェックし（ステップＳ２０）、「０」であれば割込みを直ちに終了する。「０」でなければ次のステップＳ２１に行き、バーチャルタイムｖｔを計算する。この計算は、タイムベクトルＴＶによって指定される時間伸縮制御データＣＲａｔｅの現在値を累算することによって行なう。次に、求めたバーチャルタイムｖｔに応じて、該タイムベクトルＴＶに対応するテンプレートに基づく時間伸縮制御データＴＶ（ｖｔ）（つまりＣＲａｔｅの新たな現在値に相当するものであり、以下、これを単に「タイムベクトル値ＴＶ（ｖｔ）」という）及びピッチベクトルに対応するテンプレートに基づくピッチ変動エンベロープ関数の現在値ＰＶ（ｖｔ）（以下、これを単に「ピッチベクトル値ＰＶ（ｖｔ）」という）を発生する（ステップＳ２２）。つまり、今回求めたバーチャルタイムｖｔの値を時間変数として、図７（ｂ），（ｄ）に示すような時間伸縮制御データＣＲａｔｅの瞬時値とピッチ変動エンベロープの瞬時値を読み出す（若しくは演算等によって生成する）。
【００５６】
次に、ステートＳＴが「３」になっているか否かをチェックする（ステップＳ２３）。ループ波形の読み出しステートでないならば、ＮＯであり、ステップＳ２４に行き、Ｆナンバ生成処理を行なう。このＦナンバ生成処理では、前記式（４）に従って、ノンループ波形を読み出すためのＦナンバＦ（Ｎ）を生成する。つまり、再生しようとする楽音のピッチに対応する標準ＦナンバＦｓｔ（Ｎ）と、波長データＷＬと、ピッチベクトル値ＰＶ（ｖｔ）とに基づき、波形読出アドレス演算に使用する、ピッチ制御済みのＦナンバＦ（Ｎ）を求める。
【００５７】
次に、ステップＳ２５では、ＦナンバＦ（Ｎ）をサンプリング周期毎に累算することにより、基本的には、前記式（６）又は式（７）に示すような、ノンループ波形を読み出すための読出アドレスＡＤｉを発生する。ただし、この読出アドレスＡＤｉの発生はステートＳＴを考慮して行なうものとし、ステートＳＴが「１」又は「４」のときはノンループ波形ＮＬＷ（アタック部又はリリース部波形のノンループ波形）を読み出すための読出アドレスＡＤｉを発生するが、ステートＳＴが「２」（波形切り替えの過渡的状態に対応している）のときはループ波形ＬＷ（アタック部又はリリース部波形におけるノンループ波形）を読み出すための読出アドレスＡＤｉを発生する。なお、ノンループ波形部分での時間軸伸縮制御を行なう場合は、このステップＳ２５において、タイムベクトル値ＴＶ（ｖｔ）つまり時間軸伸縮比ＣＲａｔｅに応じて、読出アドレスＡＤｉの発生を更に適宜制御する。
次に、ステップＳ２６では、読出アドレスＡＤｉに基づいて波形メモリＷＭの波形データ領域から波形データを読み出す。その際に、前述のように、ＦナンバＦ（Ｎ）の累算値の小数部（つまり読出アドレスＡＤｉの小数部）に応じて波形サンプル間の補間演算を行なうようにするとよい。
【００５８】
次のステップＳ２７では、ステートＳＴが「１」でかつアタック部波形のノンループ波形部分のエンドアドレスＡＮｅｎｄに達したかをチェックする。このアタック部波形のノンループ波形ＮＬＷの部分のエンドアドレスＡＮｅｎｄは、アタック部波形のループスタートアドレスＬＳ（図２（ａ）参照）の１つ前のアドレス「ＬＳ−１」であり、管理データにおけるループスタートアドレスＬＳに基づき取得できる。読出アドレスＡＤｉがアタック部波形のノンループ波形のエンドアドレスＡＮｅｎｄにまだ達していなければ（つまりノンループ波形の読み出し中）、ステップＳ２７はＮＯであり、ステップＳ２８に行く。
ステップＳ２８では、ステートＳＴが「４」でかつリリース部波形のエンドアドレスＥＡ（図２（ｃ）参照）に達したかをチェックする。読出アドレスＡＤｉがリリース部波形のエンドアドレスＥＡにまだ達していなければ、ステップＳ２８はＮＯであり、ステップＳ２９に行く。
【００５９】
ステップＳ２９では、バーチャルタイムｖｔに応じて振幅ベクトル値ＡＶ（ｖｔ）を発生する。つまり、今回求めたバーチャルタイムｖｔの値を時間変数として、図７（ｃ）に示すような振幅ベクトルＡＶに基づく振幅エンベロープの瞬時値を読み出す（若しくは演算等によって生成する）。そして、上記ステップＳ２６で生成された波形サンプルデータの振幅を該振幅ベクトル値ＡＶ（ｖｔ）によって制御し（ステップＳ３０）、振幅制御された波形サンプルデータを、バス１１１を介して波形インターフェース１０７のディジタル／アナログ変換器（ＤＡＣ）に対して出力する（ステップＳ３１）。なお、複数チャンネル分の波形データを同時並行的に形成する場合は、上述したステップＳ２０〜Ｓ３０の処理をそれぞれ各チャンネルに対応して複数回実行し、ステップＳ３０の次にチャンネル合成ステップを設け、各チャンネルの波形サンプルデータを合計してステップＳ３１で出力する。
【００６０】
このように、再生サンプリング周波数ｆｓの１周期毎に、図９の割込み処理が実行され、１サンプル分の波形データが生成される。これにより、最初の単位波形であるアタック部波形のノンループ波形ＮＬＷとそれに続くループ波形ＬＷが順次読み出される。ループ波形ＬＷの１回の読み出しが終了して、読出アドレスＡＤｉがアタック部波形のノンループ波形部分のエンドアドレスＡＮｅｎｄに到達すると、ステップＳ２７がＹＥＳとなり、ステップＳ３２に行き、ステートＳＴを「２」にセットする。その後、ステップＳ２９〜Ｓ３１に行く。
【００６１】
図８に戻ると、ステップＳ６でステートＳＴが「２」となったことを検出すると、ステップＳ７に行き、次の波形を読み出す準備をする。すなわち、波形シーケンスにおける次のステップの内容を読み出して（図４（ｅ））、次に読み出すべき波形データの情報を取得し、それに応じて必要な準備処理を行なう。図４（ｅ）の例の場合、Ａｔｋ５を読み出したシーケンスステップの次として、クロスフェード区間長データＸＦ５とそれに続くループ波形Ｌｐ１０を選択する波形選択データを、波形シーケンスデータメモリ部から読み出す。
次のステップＳ８では、次の単位波形のタイプが何であるかを判定する。ループ波形であれば、ステップＳ９に行き、ステートＳＴを「３」にセットすると共に、序数ｉを１増加する。そして、ステップＳ６に行き、ステートＳＴが「２」になるまで待機する。なお、ステップＳ８では、リリース部波形のように先頭にループ波形ＬＷを持つものについても、その先頭のループ波形ＬＷの読出がまだ行なわれていない場合は、ループ波形と判定して、ステップＳ９に行く。また、過渡的ステートであるステートＳＴ＝「２」をループ波形のループエンドまで続けてから、ステートＳＴを「３」に切り替えるために、ステップＳ９では、読出アドレスがループエンド（ＬＳ＋ＬＬ）に達したことを確認してから、ステートＳＴを「３」に切り替えると共に序数ｉを１増加するようにするとよい。
【００６２】
一方、図９では、ステートＳＴが「３」にセットされると、ステップＳ２３がＹＥＳに分岐し、ループ読出制御を行なうルーチンに行く。ステップＳ３３は前記ステップＳ２４と同様の「Ｆナンバ生成処理」であるが、クロスフェード合成のために、先行するループ波形のＦナンバＦi-1（Ｎ）と、後続するループ波形のＦナンバＦｉ（Ｎ）とを、前記式（４）に従って、それぞれ別々に生成する。各ループ波形の波長データＷＬ（１波当たりのアドレス数）は任意であるため、夫々の波長データＷＬi-1，ＷＬｉを用いて前記式（４）の演算を行ない、各ループ波形毎のＦナンバＦi-1（Ｎ），Ｆｉ（Ｎ）を求めてやる必要がある。なお、今の例の場合、先行するループ波形は、アタック部波形の終端に付加されたループ波形であり、後続するループ波形は、新たに選択された上記ループ波形Ｌｐ１０である。
次のステップＳ３４は、前記ステップＳ２５と同様に読出アドレスＡＤを生成する処理であるが、ループ読み出し及びクロスフェード合成のために、先行するループ波形の読出アドレスＡＤi-1 は前記式（８）に従って算出し、後続するループ波形の読出アドレスＡＤｉは前記式（９）に従って算出する。次のステップＳ３５では、各読出アドレスＡＤi-1，ＡＤｉに従って、対応する各ループ波形の波形データをそれぞれ読み出すと共にサンプル間補間演算をそれぞれ行なう。
【００６３】
次のステップＳ３６では、クロスフェード区間長データＸＦ５によって定まる傾き特性を持つクロスフェード関数ＸＦの時間変数として、現在のバーチャルタイムｖｔを適用し、クロスフェード係数の現在値ＸＦ（ｖｔ）を発生する。例えば、クロスフェード関数ＸＦが直線状の１次関数である場合は、バーチャルタイムｖｔの値にデータＸＦ５の値を掛けることで、クロスフェード係数の現在値ＸＦ（ｖｔ）を得ることができる。すなわち、時間伸縮比が１の場合は、バーチャルタイムｖｔは実時間に対応しており、１サンプリング周期毎に１増加する時間関数であるから、これに、データＸＦ５を掛けることにより、該データＸＦ５の値に応じた傾きを持つ１次関数を作成することができ、これをクロスフェード関数ＸＦ（ｖｔ）とすることができる。これを式で示すと、
ＸＦ（ｖｔ）＝ＸＦ５×ｖｔ＋Ｃ
と表せる。ただし、Ｃは任意の定数である。タイムベクトルＴＶの変化によってバーチャルタイムｖｔの増減率（つまり傾き）が変化すると、これにデータＸＦ５を掛けることにより得られるクロスフェード関数ＸＦ（ｖｔ）の傾きも変化する。このことは、逆に言えば、クロスフェード区間長データＸＦ５によって定まる傾き特性を持つクロスフェードカーブの傾きを、タイムベクトルＴＶの現在値に応じて可変制御していることと同じである。こうして、タイムベクトルＴＶに応じて時間軸伸縮制御がなされたクロスフェード関数ＸＦ（ｖｔ）を発生することができる。一般化して示すと、クロスフェード関数ＸＦが変数ｘについての算術関数ｆ（ｘ）若しくはテンプレートｔｂｌ（ｘ）で表されているとすると、変数ｘ＝ｖｔとして、ＦＸ＝ｆ（ｖｔ）又はｔｂｌ（ｖｔ）で表すことができる。なお、具体的には、クロスフェード関数ＸＦ（ｖｔ）が０から１まで変化する小数値からなるものであるとすると、フェードイン用のクロスフェード係数としてＸＦ（ｖｔ）を使用し、フェードアウト用のクロスフェード係数は「１−ＸＦ（ｖｔ）」を使用する。
【００６４】
次のステップＳ３７では、所定のクロスフェード終了点ＸＦｅｎｄに達したかをチェックする。クロスフェード終了点ＸＦｅｎｄとは、クロスフェード区間の終了時点を示すものである。すなわち、クロスフェード関数ＸＦ（ｖｔ）の値つまりフェードイン側（後続波形側）のクロスフェード係数値が最大値「１」に達したら、そのまま「１」を保持するようになっており、このクロスフェード係数値が最大値「１」になった後、フェードイン側（後続波形側）の読出アドレスＡＤｉが当該ループ波形の最終点のアドレス（つまりＬＳ＋ＬＬ）に達したときを、クロスフェード終了点ＸＦｅｎｄと判定する。クロスフェード終了点ＸＦｅｎｄにまだ達していなければ、ステップＳ３７はＮＯであり、ステップＳ３８に行き、クロスフェード関数ＸＦ（ｖｔ）の値に応じて各ループ波形の読出波形データ（ループ再生波形）をクロスフェード合成する。その後、ステップＳ２９〜Ｓ３１に行く。
【００６５】
再生サンプリング周波数ｆｓの１周期毎に、図９の割込み処理が実行され、ステップＳ３３〜Ｓ３８のルーチンが繰り返し実行され、各ループ波形の繰り返し読み出しと、その読出出力波形データ（ループ再生波形）のクロスフェード合成とが行なわれる。やがてクロスフェード終了点ＸＦｅｎｄに達すると、ステップＳ３７がＹＥＳとなり、ステップＳ３９に行き、ステートＳＴを「２」にセットする。こうして、１つのクロスフェード区間についてのクロスフェード合成処理が完了する。
【００６６】
図８に戻ると、ステップＳ６でステートＳＴが「２」となったことを検出すると、ステップＳ７に行き、次の波形を読み出す準備をする。図４（ｅ）の例の場合、Ｌｐ１０を読み出したシーケンスステップの次として、クロスフェード区間長データＸＦ１とそれに続くループ波形Ｌｐ１２を選択する波形選択データを、波形シーケンスデータメモリ部から読み出す。こうして、前述と同様の、ループ読み出し処理とクロスフェード合成処理とが、今度は異なるループ波形について行なわれることになる。すなわち、今回の例の場合、先行するループ波形は、前回後続ループ波形であったループ波形Ｌｐ１０であり、後続するループ波形は、新たに選択された上記ループ波形Ｌｐ１２である。
【００６７】
こうして、所定の波形シーケンスに従って、順次に、ループ波形を切り替えながら、ループ読み出し処理とクロスフェード合成処理とが行なわれ、音の部分的な区間を構成する波形が、滑らかなつながりをもって、次々に形成される。
やがて、図８のステップＳ７の処理により、最後のループ波形Ｌｐ７の次の波形シーケンスステップとして、クロスフェード区間長データＸＦ１６とリリース部波形Ｒｅｌを選択する波形選択データが読み出されると（図４（ｅ））、次に読み出すべき波形データの情報としてリリース部波形Ｒｅｌの始端にあるループ波形ＬＷのデータを取得し、それに応じて必要な準備処理を行なう。そして、その次のステップＳ８では、次の波形のタイプがループ波形であると判定して、ステップＳ９に行き、ステートＳＴを「３」にセットする。そして、ステップＳ６に行き、ステートＳＴが「２」になるまで待機する。こうして、図９の割込み処理によって、最後のループ波形Ｌｐ７とリリース部波形Ｒｅｌの始端にあるループ波形ＬＷとのループ読み出し処理とクロスフェード合成処理とが、データＸＦ１６に対応するクロスフェード区間長で、行なわれるようになる。この最後のクロスフェード区間が終了すると、図９のステップＳ３９でステートＳＴが「２」にセットされる。
【００６８】
それから、図８のステップＳ７では、次に読み出すべき波形データの情報としてリリース部波形Ｒｅｌのノンループ波形ＮＬＷのデータを取得し、それに応じて必要な準備処理を行なう。そして、その次のステップＳ８では、次の波形のタイプがリリース部波形Ｒｅｌのノンループ波形ＮＬＷであると判定して、ステップＳ１０に行き、ステートＳＴを「４」にセットする。次に、ステップＳ１１では、ステートＳＴが「０」になるまで待機する。一方、図９では、ステップＳ２３のＮＯから、ノンループ波形読出用のルーチンに分岐し、ステップＳ２５，Ｓ２６の処理によって、リリース部波形Ｒｅｌのノンループ波形ＮＬＷを読み出すためのアドレスＡＤｉを生成し、その波形データを順次読み出し、かつ、サンプル間補間等を行なう。やがて、読出アドレスＡＤｉが、リリース部波形ＲｅｌのエンドアドレスＥＡに達すると、ステップＳ２８がＹＥＳとなり、ステップＳ４０に行って、ステートＳＴを「０」にセットする。こうして、発音終了状態となる。図８のステップＳ１１では、ステートＳＴが「０」になったことを確認すると、ステップＳ３に戻り、ステップＳ３，Ｓ４のループを繰り返す。波形シーケンスにおける次の音を発生すべきタイミングが到来すると、前述のようにステップＳ４がＹＥＳとなり、前述と同様の処理が開始される。他方、ストップイベントＳＴＯＰが、シーケンスデータに基づき又は手動操作等に応じて、発生されると、図８の処理を終了する。すなわち、１つの波形シーケンスにおいて複数の音を断続的に発生するように、波形シーケンスを組むことができる。つまり、１つの波形シーケンスによって、１つの音符に対応する楽音波形を記述することができるのみならず、複数の音符（フレーズ）に対応する楽音波形を記述することができる。
【００６９】
なお、上記の例では、過渡的なステートＳＴ＝「２」をループ波形のループエンドまで続けてからステートＳＴ＝「３」に切り替えるように説明した。これによってクロスフェード区間の始まりが先行ループ波形のループスタートアドレスＬＳに一致するようになる。しかし、これに限らず、ステートＳＴ＝「２」をループ波形のループエンドまで続けずに、図８のステップ９において、即座にステートＳＴ＝「３」に切り替えるようにしてもよい。その場合は、クロスフェード区間が先行ループ波形の任意のアドレスから始まるが、そのクロスフェード開始アドレス分だけ後続ループ波形の読出アドレスＡＤｉの開始値をオフセットする（初期位相差に対応するオフセット分よりさらにオフセットする）ようにすればよい。
なお、複数の波形シーケンスを組み合わせることにより、楽曲の自動演奏を行なうことができる。そのために、楽譜の音符列に対応するノートシーケンスを用いるようにするとよい。ノートシーケンスは、ＭＩＤＩの自動演奏シーケンスデータと同様のものであってよく、例えば、イベントデータで、ノートつまり再生すべき楽音のピッチと発音タイミングを指定するとともに該ノートの発生のために使用すべき波形シーケンスや各ベクトルを指定すればよい。または、自動演奏シーケンスに応じて、ノートを指定するイベントデータ、波形シーケンスを指定するイベントデータ、各ベクトルを指定するイベントデータを、それぞれ別個に発生したり、あるいは、ノートを指定するイベントデータに応じて他のイベントデータを発生するようにしてもよい。
【００７０】
各波形シーケンスの内容や、各波形シーケンスに対応するベクトルデータＴＶ，ＡＶ，ＰＶの内容等は、ユーザーによって自由に編集することが可能である。図１０（ａ）はベクトルエディット処理のフローチャート例を示す。まず、ユーザーの操作によって、所望の波形シーケンスを選択して当該波形シーケンスに対応する各種楽音要素のどの楽音要素のベクトルを変更しようとするのかを指定する（ステップＳ４１）。次に、ユーザーの操作に応じて、指定した楽音要素のベクトルデータを変更することにより別のテンプレートに差し替えたり、該ベクトルデータの変更はせずに、それに対応するテンプレートの内容つまり当該ベクトルデータによって指定される具体的な時変動制御データの内容を適宜変更する、等の処理を行なう（ステップＳ４２）。
図１０（ｂ）は波形シーケンスエディット処理のフローチャート例を示す。まず、ユーザーの操作によって、所望の波形シーケンスを選択して当該波形シーケンスにおけるどの位置の単位波形を編集したいかを指定する（ステップＳ４３）。次に、ユーザーの操作に応じて、指定された位置に任意の単位波形を追加挿入したり、指定された位置にある単位波形を削除したり、指定された位置にある単位波形を別の単位波形に変更したり、指定された位置におけるクロスフェード区間長データＸＦの値を変更する、等の処理を行なう（ステップＳ４４）。
【００７１】
上記実施例では、図９に示す割込み処理によって波形サンプルデータを形成する処理が行なわれるようになっており、再生サンプリング周波数ｆｓの１周期毎の割込み処理として当該サンプリング周期における１サンプル分の波形サンプルデータが形成される。しかし、これに限らず、本出願人が既に提案済みのソフトウェア音源技術で知られているように、１フレーム区間に該当する多数のサンプル数分の波形サンプルデータを短時間で一括して形成し、これを出力バッファに蓄えておき、出力バッファからの波形サンプルデータの読み出しを再生サンプリング周波数ｆｓの１周期毎に行なうようにしてもよい。また、ソフトウェアプログラムに基づく波形形成処理に限らず、上記実施例と同様の波形形成処理用のマイクロプログラムで動作するように構成されたＤＳＰ装置によって本発明に従う波形形成処理を行なうようにしてもよいし、あるいは、ＬＳＩ回路やディスクリート回路によって上記実施例と同様の波形形成処理を行なうように専用ハードウェア回路を構成してもよい。
【００７２】
【発明の効果】
以上の通り、この発明によれば、楽音の時間軸を伸縮制御するための時間軸伸縮制御情報に基づき、実時間を伸縮制御した時間を示すバーチャル時間データを生成し、該生成したバーチャル時間データを引き数として、時間の関数である楽音特性制御情報を該バーチャル時間に従って発生させるようにしたので、所望の楽音特性制御情報を時間軸伸張又は圧縮制御することを容易に行うことができるようになる。
【図面の簡単な説明】
【図１】  この発明に係る波形形成装置の一実施例のハードウェア構成を略示するブロック図。
【図２】  波形メモリに記憶する単位波形のいくつかの例を概念的に示す図。
【図３】  任意の初期位相を持つループ波形のいくつかの具体例を示す波形図。
【図４】  波形メモリの記憶フォーマットの一例及び波形シーケンスデータの一例を示す概念図。
【図５】  ループ波形同士の接続例を単純接続とクロスフェード合成について示す概念図。
【図６】  クロスフェード合成する２つのループ波形をそれぞれ読み出すための読出アドレスを、両者の初期位相の差に応じてずらしてループ制御する例を示す図。
【図７】  波形シーケンスの一例とそれに対応する楽音要素制御用のベクトルデータ例とを示す概念図。
【図８】  波形シーケンス処理の一例を示すフローチャート。
【図９】  割込み処理として実行される波形サンプルデータ形成処理の一例を示すフローチャート。
【図１０】  （ａ）はベクトルエディット処理の一例を示し、（ｂ）は波形シーケンスエディット処理の一例を示すフローチャート。
【符号の説明】
１００  ＣＰＵ
１０１  ＲＯＭ
１０２  ＲＡＭ
１０３  ハードディスク装置
１０４  リムーバブルディスク装置
１０５  表示器
１０６  入力操作装置
１０７  波形インタフェース
１０８  タイマ
１０９  通信インタフェース
１１０  ＭＩＤＩインタフェース
１１１  バス
ＷＭ    波形メモリ
【図１】
0003726765.tif 000004
【図２】
0003726765.tif 000005
【図３】
0003726765.tif 000006
【図４】
0003726765.tif 000007
【図５】
0003726765.tif 000008
【図６】
0003726765.tif 000009
【図７】
0003726765.tif 000010
【図８】
0003726765.tif 000011
【図９】
0003726765.tif 000012
【図１０】
0003726765.tif 000013