(57)【特許請求の範囲】
【請求項１】
演算処理装置が並列に実行している処理の一つである波形演算により楽音波形サンプルを生成し、その楽音波形サンプルに基づいて楽音を発生する楽音発生方法において、
音高を示す音高情報と、単位時間当たりに演算生成する波形サンプル数を示す演算サイクル情報とを受信し、前記演算サイクル情報に応じて前記単位時間当たりに演算生成する波形サンプル数が決定され、前記音高情報および前記演算サイクル情報に応じてＦナンバが決定されると共に、前記波形演算を前記演算サイクルに対応するサンプリング周期より長い所定の周期毎に起動し、起動された各波形演算において、前記決定されたＦナンバに基づき前記決定されたサンプル数の位相情報を発生し、該位相情報に応じて前記決定されたサンプル数の楽音波形サンプルを一括生成することを特徴とする楽音発生方法。
【請求項２】
演算処理装置が並列に実行している処理の一つであって、記憶手段に記憶された波形データに基づいて行う楽音生成演算により発音チャンネルの楽音を生成する以下の（１）ないし（５）のステップを含む楽音発生方法。
（１）前記発音チャンネルで生成される楽音の特性を指示する少なくとも楽音ピッチ情報を含む第１制御データを発生する楽音制御ステップ
（２）単位時間当たりに生成する楽音のサンプル数を指示する第２制御データを発生する演算制御ステップ
（３）前記第１制御データと、前記第２制御データとに応じて、楽音１サンプル毎の読出アドレスの進み量であるＦナンバを発生するＦナンバ発生ステップ
（４）所定の周期で起動され、前記Ｆナンバに基づいて発生された読出アドレスにより前記記憶手段より前記波形データを読み出し、読み出された前記波形データに基づいて前記第２制御データに応じたサンプル数の波形データを、それぞれ演算生成する楽音生成ステップ
（５）前記楽音生成ステップで生成された波形データに基づき前記楽音ピッチ情報が示すピッチの楽音を発生するステップ
【請求項３】
演算処理装置が並列に実行している処理の一つである楽音生成演算を行うことにより発音チャンネルの楽音を生成する以下の（１）ないし（４）のステップを含む楽音発生方法。
（１）少なくとも前記発音チャンネルで生成される楽音の音高特性を指示する第１制御データを発生する楽音制御ステップ
（２）単位時間当たりに生成する楽音のサンプル数を指示する第２制御データを発生する演算制御ステップ
（３）前記第２制御データの指示する単位時間当たりのサンプル数に対応したサンプリング周期より長い所定の周期で起動され、前記発音チャンネルについて、前記第１制御データと前記第２制御データに対応したＦナンバに基づき、前記第２制御データの指示するサンプル数の位相情報を発生し、該位相情報に基づいて、前記第１制御データの指示する楽音特性を有する波形データを、該起動の度に前記第２制御データの指示するサンプル数ずつ一括演算生成する楽音生成ステップ
（４）前記楽音生成ステップで生成された波形データに基づき楽音を発生するステップ
【請求項４】
前記楽音を発生するステップは、
前記第２制御データの示すサンプル数が所定サンプル数でない場合に、前記楽音生成ステップにより生成された前記第２制御データの示すサンプル数の波形データに対して補間処理を行うことにより、前記所定サンプル数の波形データを生成する補間ステップと、
前記単位時間と前記所定サンプル数とに対応した所定のサンプリング周期毎に、前記楽音生成ステップ、あるいは、前記補間ステップが生成した所定サンプル数の波形データを１サンプルずつ出力する出力ステップと、
を含むことを特徴とする請求項２あるいは３に記載の楽音発生方法。
【請求項５】
ＳＰを前記楽音ピッチ情報に対応するピッチ、ＯＰを読み出される前記波形データの元ピッチ、ＣＣを前記第１制御データの示すサンプル数に対応した演算サイクルとして、前記Ｆナンバが次式で算出されることを特徴とする請求項２記載の楽音生成方法。
Ｆナンバ＝２(SP-OP)/1200＊２CC
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、演算処理装置の波形演算により楽音波形サンプルを生成する楽音発生方法に関するものである。
【０００２】
【従来の技術】
従来の演算処理装置を用いて楽音波形サンプルを波形生成演算により生成するようにした複数チャンネル同時発音可能な音源においては、各楽音発生チャンネルにおける単位時間当たりに演算生成する波形サンプルの数（演算サイクルと呼ぶ）は各音源毎に一定とされている。
また、１発音中においても、楽音波形サンプルを演算する前記波形演算サイクルは固定とされており、１発音の途中で前記波形演算サイクルを変化させることは行なわれていない。
【０００３】
ここで、定義された「演算サイクル」は、本発明に特徴的な考え方の尺度である。演算サイクル、すなわち、単位時間当たりに演算生成されるサンプル数が異なれば、当然、生成された楽音が含有することのできる周波数帯域の上限周波数も異なってくる。
演算サイクルを、１秒間当たりに生成するサンプル数（等価サンプリング周波数）に換算すれば、サンプリングの定理により前記上限は、そのほぼ１／２の周波数となる。例えば、単位時間１／３７５秒毎に１２８サンプルの演算生成を行う場合、等価サンプリング周波数は１２８×３７５＝４８（ｋＨｚ）となり、生成する楽音は上限とされる約２４（ｋＨｚ）までの周波数成分を有することができる。
一般に、サンプリング周波数はディジタル楽音の品質を決める要素であるので、演算サイクルに応じて楽音のクォリティが左右される。
【０００４】
一方、この演算サイクルは楽音生成演算の単位時間当たりの演算量にもダイレクトに反映する。１サンプル分の楽音の生成で行われる演算はサンプル毎にそれほど変わらないので、単位時間に演算生成するサンプル数にほぼ比例して必要な演算量も増大する。つまり、前記楽音のクォリティを改善しようとして演算サイクルを高くすると、前記必要な演算量が増えてしまい回路規模が大きくなる。場合によっては演算不可能になってしまうという互いに相容れない関係にあり、如何にバランスを取るかが音源を設計する際のポイントになる。
【０００５】
【発明が解決しようとする課題】
しかしながら、楽音発生チャンネルにおいて生成される楽音波形の周波数帯域は各楽音の音色等に応じて一般に異なる場合が多く、前記した従来の音源のように楽音発生チャンネルにおける波形演算サイクルを一定とすると、広帯域が必要でない場合については、不要な周波数帯域までの無駄な演算を行なってしまうことになる。また、波形演算サイクルを広帯域が必要でない楽音波形に合わせて設定した場合には、広帯域の必要な楽音波形サンプルの生成ができないことになる。
【０００６】
さらに、減衰音系の１発音中の楽音波形は、そのアタック部においては高調波が多く含まれて広帯域とされるが、減衰の進んだ持続部においては高調波が少なく余り広帯域とされていない。この場合に、従来のように１発音中において楽音波形サンプルを演算する波形演算サイクルを固定とすると、１発音中の広帯域が必要でない部分においては不要な周波数帯域までの無駄な演算を行なってしまうことになる。また、波形演算サイクルを広帯域が必要でない部分に合わせて設定した場合には、広帯域の必要な部分の生成ができないことになる。
さらにまた、発音チャンネル数が多く設定されていたりして、演算量が大きすぎるようになると、再生されるタイミングまでに演算が終了せず再生波形データが途切れてしまうことになる。
【０００７】
そこで、本発明は、演算処理装置の演算により楽音を生成する楽音発生方法において、再生波形データが途切れることなく楽音を効率よく生成できるようにすることを目的としている。
【０００８】
【課題を解決するための手段】
前記目的を達成するために、本発明の楽音発生方法は、演算処理装置が並列に実行している処理の一つである波形演算により楽音波形サンプルを生成し、その楽音波形サンプルに基づいて楽音を発生する楽音発生方法において、音高を示す音高情報と、単位時間当たりに演算生成する波形サンプル数を示す演算サイクル情報とを受信し、前記演算サイクル情報に応じて前記単位時間当たりに演算生成する波形サンプル数が決定され、前記音高情報および前記演算サイクル情報に応じてＦナンバが決定されると共に、前記波形演算を前記演算サイクルに対応するサンプリング周期より長い所定の周期毎に起動し、起動された各波形演算において、前記決定されたＦナンバに基づき前記決定されたサンプル数の位相情報を発生し、該位相情報に応じて前記決定されたサンプル数の楽音波形サンプルを一括生成するようにしている。
【０００９】
また、前記目的の達成することのできる本発明の他の楽音発生方法は、演算処理装置が並列に実行している処理の一つであって、記憶手段に記憶された波形データに基づいて行う楽音生成演算により発音チャンネルの楽音を生成する以下の（１）ないし（５）のステップを含むようにしている。
（１）前記発音チャンネルで生成される楽音の特性を指示する少なくとも楽音ピッチ情報を含む第１制御データを発生する楽音制御ステップ
（２）単位時間当たりに生成する楽音のサンプル数を指示する第２制御データを発生する演算制御ステップ
（３）前記第１制御データと、前記第２制御データとに応じて、楽音１サンプル毎の読出アドレスの進み量であるＦナンバを発生するＦナンバ発生ステップ
（４）所定の周期で起動され、前記Ｆナンバに基づいて発生された読出アドレスにより前記記憶手段より前記波形データを読み出し、読み出された前記波形データに基づいて前記第２制御データに応じたサンプル数の波形データを、それぞれ演算生成する楽音生成ステップ
（５）前記楽音生成ステップで生成された波形データに基づき前記楽音ピッチ情報が示すピッチの楽音を発生するステップ
【００１０】
さらに、前記目的を達成することのできる本発明のさらに他の楽音発生方法は、演算処理装置が並列に実行している処理の一つである楽音生成演算を行うことにより発音チャンネルの楽音を生成する以下の（１）ないし（４）のステップを含むようにしている。
（１）少なくとも前記発音チャンネルで生成される楽音の音高特性を指示する第１制御データを発生する楽音制御ステップ
（２）単位時間当たりに生成する楽音のサンプル数を指示する第２制御データを発生する演算制御ステップ
（３）前記第２制御データの指示する単位時間当たりのサンプル数に対応したサンプリング周期より長い所定の周期で起動され、前記発音チャンネルについて、前記第１制御データと前記第２制御データに対応したＦナンバに基づき、前記第２制御データの指示するサンプル数の位相情報を発生し、該位相情報に基づいて、前記第１制御データの指示する楽音特性を有する波形データを、該起動の度に前記第２制御データの指示するサンプル数ずつ一括演算生成する楽音生成ステップ
（４）前記楽音生成ステップで生成された波形データに基づき楽音を発生するステップ
さらにまた、前記本発明の楽音発生方法において、前記楽音を発生するステップは、前記第２制御データの示すサンプル数が所定サンプル数でない場合に、前記楽音生成ステップにより生成された前記第２制御データの示すサンプル数の波形データに対して補間処理を行うことにより、前記所定サンプル数の波形データを生成する補間ステップと、前記単位時間と前記所定サンプル数とに対応した所定のサンプリング周期毎に、前記楽音生成ステップ、あるいは、前記補間ステップが生成した所定サンプル数の波形データを１サンプルずつ出力する出力ステップとを含むようにしてもよい。
さらにまた、前記本発明の楽音発生方法において、ＳＰを前記楽音ピッチ情報に対応するピッチ、ＯＰを読み出される前記波形データの元ピッチ、ＣＣを前記第１制御データの示すサンプル数に対応した演算サイクルとして、前記Ｆナンバが次式で算出されるようにしてもよい。
Ｆナンバ＝２(SP-OP)/1200＊２CC
【００１１】
このような本発明によれば、演算処理装置の波形演算により楽音を生成する際に、演算サイクル情報に応じて前記単位時間当たりに演算生成する波形サンプル数を決定するようにしたので、再生波形データが途切れることなく楽音を生成することができるようになる。
また、単位時間当たりに生成する楽音のサンプル数を指示するようにしたので、生成しようとする楽音波形に応じたサンプル数を生成することができ、無駄な波形演算を生じることがなくなる。すなわち、多くの発音チャンネルの楽音波形サンプルを生成する場合にも、波形演算が間に合わなくなって音切れが生じることを防止することができるようになる。さらに、減衰音系の場合に１発音中のアタック部では多くの波形サンプルを生成し、持続部においては波形サンプルを少なく生成することができるので、無駄な波形演算が生じないと共に、効率的に波形サンプルを生成することができるようになる。
【００１２】
【発明の実施の形態】
本発明の楽音発生方法を実行できる楽音生成装置の構成を示すブロック図を図１に示す。
この図において、１はアプリケーションプログラム等を実行して楽音波形サンプルの生成等の各種制御を行なう演算処理装置ユニット（ＣＰＵ）、２はＣＰＵの動作プログラムやプリセット音色データ等が記憶されているリード・オンリ・メモリ（ＲＯＭ）、３はＣＰＵ１のワークメモリエリアや音色データエリア等の記憶エリアを有するランダム・アクセス・メモリ（ＲＡＭ）、４は時刻を指示すると共に、タイマ割込処理のタイミングをＣＰＵ１に指示するタイマ、５はＭＩＤＩイベントが入力されると共に、生成されたＭＩＤＩイベントを出力するＭＩＤＩインタフェース、６は英字、かな、数字、記号などを備えるいわゆるパーソナル・コンピュータ用のキーボードである。
【００１３】
７はユーザが楽音生成装置と対話するためのディスプレイ（モニタ）、８は楽音を生成するプログラム等のアプリケーションプログラムが予めインストールされていると共に、楽音波形サンプルを生成するために使用する楽音波形データ等が記録されているハードディスク（ＨＤＤ）、９はＣＰＵ１により指定されたＲＡＭ３の一部のエリアに記憶されている楽音波形サンプルのデータをＣＰＵ１を介することなく直接に受渡を行ない、一定の再生周期（再生サンプリング周波数）ごとに１サンプルづつ読み出してディジタル・アナログ変換器（ＤＡＣ）に供給する再生部（ＤＭＡ：Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）、１０は楽音波形サンプルのデータを受け取りアナログ信号に変換するディジタル・アナログ変換器（ＤＡＣ）、１１はＤＡＣ１０から出力されたアナログ信号に変換された楽音信号を放音するサウンドシステムである。
【００１４】
次に、ＲＡＭ３に設定される各種レジスタのエリアの構成を図２ないし図５に示すが、図２に音色データおよび波形データが記憶されるエリアの構成を、図３にＭＩＤＩインターフェース５を介して入力されるＭＩＤＩメッセージが格納される入力バッファの構成を、図４に各発音チャンネルの楽音波形サンプルを生成するに必要な各種パラメータが記憶される音源レジスタの構成を示している。
図２に示すエリアには、ＰＤ１，ＰＤ２，・・・ＰＤ１６の１６種類分の音色データと、ＷＤ１，ＷＤ２，・・・ＷＤｎのｎ種類の波形データが記憶されている。なお、後述するＯＰＥＧ波形が波形データ毎に用意されて、波形データＷＤ１，ＷＤ２，・・・ＷＤｎと共に記憶されている。
【００１５】
なお、それぞれの音色データＰＤ１，ＰＤ２，・・・ＰＤ１６は、各音域の波形を指定するデータ（各音域波形指定）、ビブラート等の効果をかけるためのＬＦＯ（Ｌｏｗ  Ｆｒｅｑｕｅｎｃｙ  Ｏｓｃｉｌｌａｔｏｒ）  制御用のデータ（ＬＦＯ制御ＯＤ）、音色フィルタ特性を時間の経過と共に変化させるフィルタ・エンベロープの発生制御用のデータ（ＦＥＧ制御ＯＤ）、音量変化特性を制御する音量エンベロープの発生制御用のデータ（ＡＥＧ制御ＯＤ）、ベロシティにより楽音の立ち上がりの速さ等を変えるタッチ制御用のデータ（タッチ制御ＯＤ）、後述する演算サイクル制御データ等のその他のデータ（その他ＯＤ）からなっている。
【００１６】
また、図３に示す入力バッファのエリアには、ＭＩＤＩインターフェース５を介して入力されるノートオン、ノートオフや各種イベントデータＩＤ１，ＩＤ２，ＩＤ３・・・が順次書き込まれ、このＭＩＤＩイベントデータＩＤ１，ＩＤ２，ＩＤ３・・・が読み出されてそのイベント処理が楽音生成装置内において実行されることにより、イベントに応じた楽音波形サンプルが生成される。
なお、ＭＩＤＩイベントデータＩＤ１，ＩＤ２，ＩＤ３・・・は、ＭＩＤＩイベントのデータ内容（データ１等）と、そのイベントデータの発生時刻（データ１発生時刻等）とが１組として構成される。この発生時刻はタイマ４の現在時刻を取り込むことにより知ることができる。
【００１７】
次の図４に示すエリアは、それぞれの発音チャンネルで生成される楽音波形サンプルの制御を行なう各種楽音パラメータが記憶される各発音チャンネルごとに用意されたレジスタ（１ｃｈ，２ｃｈ，３ｃｈ，・・・３２ｃｈ）からなる音源レジスタとして使用される。なお、この例では発音チャンネルが３２チャンネルとされた場合の音源レジスタとされている。
【００１８】
各発音チャンネルのレジスタ（１ｃｈ，２ｃｈ，３ｃｈ，・・・３２ｃｈ）には、その発音チャンネルで発音される楽音のノート・ナンバ、ＲＡＭ３に記憶されている波形データのいずれかを指定する波形指定データ（波形指定Ｄ）、ＬＦＯ制御データ（ＬＦＯ制御Ｄ）、フィルタ・エンベロープ制御データ（ＦＥＧ制御Ｄ）、音量エンベロープ制御データ（ＡＥＧ制御Ｄ）、ノートオンデータ、その他のデータ（その他Ｄ）、および各発音チャンネルの楽音サンプルの生成時に使用されるワークエリアからなっている。
なお、各発音チャンネルの波形指定Ｄ、ＬＦＯ制御Ｄ、ＡＥＧ制御Ｄは、前記した音色データＰＤ１，ＰＤ２，ＰＤ３，・・・ＰＤ１６のいずれかをＭＩＤＩイベントの内容に応じて加工して作成されたデータとされる。
【００１９】
次の図５には出力バッファを示すが、本発明の楽音発生方法においては演算サイクルが異なると、演算時刻が到来した時に一括して演算生成される楽音波形サンプル数が異なるようになるため、演算サイクルＣＣごとに出力バッファが用意される。図示する場合は、演算サイクルが３種類とされた場合を示しており、同図（ａ）〜（ｃ）に示すように、基本演算サイクル（ＣＣ＝０：等価サンプリング周波数４８ｋＨｚ）用のバッファ０、基本演算サイクルの１／２の演算サイクル（ＣＣ＝１：等価サンプリング周波数２４ｋＨｚ）用のバッファ１、基本演算サイクルの１／４の演算サイクル（ＣＣ＝２：等価サンプリング周波数１２ｋＨｚ）用のバッファ２が用意されている。したがって、図示するようにバッファ１はバッファ０の１／２のサンプル数を記憶できる容量とされ、バッファ２はバッファ０の１／４のサンプル数を記憶できる容量とされる。
【００２０】
なお、演算サイクルＣＣは、各発音チャンネルごとおよび１発音中の楽音波形において指定され、演算時刻ごとに行なわれる１単位区間用の波形として、各発音チャンネルで演算生成される楽音波形サンプル数を指定するものであり、生成される楽音発音サンプル数に対応する等価サンプリング周波数で示すこともできる。
この演算サイクルＣＣの指定は、生成すべき楽音波形サンプルの周波数帯域に応じて決定される。
【００２１】
すなわち、図５（ａ）に示すバッファ０は楽音波形の周波数帯域が広帯域とされる場合のものであり、演算時刻が到来するごとに生成される１２８サンプル（ＳＤ１，ＳＤ２，ＳＤ３・・ＳＤ１２８）の楽音波形サンプルが記憶される出力バッファとされ、同図（ｂ）に示すバッファ１は楽音波形の周波数帯域が余り広くない場合のものであり、演算時刻が到来するごとに生成された６４サンプル（ＳＤ１，ＳＤ２，ＳＤ３・・ＳＤ６４）の楽音波形サンプルが記憶される出力バッファとされ、同図（ｃ）に示すバッファ２は楽音波形の周波数帯域が狭い場合のものであり、演算時刻が到来するごとに生成された３２サンプル（ＳＤ１，ＳＤ２，ＳＤ３・・ＳＤ３２）の楽音波形サンプルが記憶される出力バッファとされている。
【００２２】
これらのバッファ０ないしバッファ２の出力バッファには、発音チャンネルによらず、演算サイクルＣＣが同じにされた（周波数帯域が略同じにされた）楽音波形サンプルが全発音チャンネルにわたって足し込まれて格納されている。すなわち、新しく演算生成された楽音波形サンプルは、すでに記憶されている楽音波形サンプルに加算されて、同じ出力バッファの同じ位置に記憶される。
また、全発音チャンネルの楽音波形サンプルの生成が終了すると、すべての発音チャンネルの楽音波形サンプルが累算されて再生部９に渡されて発音されることになるが、楽音波形サンプル数がバッファ０とバッファ１とバッファ２とで異なるために単純に累算することはできない。
【００２３】
そこで、バッファ１の６４サンプルの楽音波形サンプルを補間することにより１２８サンプルの楽音波形サンプルを得るようにして図２（ｄ）に示すバッファ１’に記憶し、バッファ２の３２サンプルの楽音波形サンプルを補間することにより１２８サンプルの楽音波形サンプルを得るようにして図２（ｅ）に示すバッファ２’に記憶するようにする。
この場合、バッファ１’の楽音波形サンプルＳＤ１、ＳＤ２、ＳＤ３、・・ＳＤ１２８は１つおきにバッファ１の楽音波形サンプルＳＤ１、ＳＤ２、ＳＤ３、・・ＳＤ６４と同じになり、バッファ２’の楽音波形サンプルＳＤ１、ＳＤ２、ＳＤ３、・・ＳＤ１２８は３つおきにバッファ２の楽音波形サンプルＳＤ１、ＳＤ２、ＳＤ３、・・ＳＤ３２と同じになる。
【００２４】
このようにして、それぞれ１２８サンプルとされたバッファ０と、バッファ１’と、バッファ２’の同じ位置の楽音波形サンプルが累算されて、例えばバッファ０の同じ位置に記憶される。そして、バッファ０は再生予約されて再生部９から読み出されて発音されるようになる。
なお、全発音チャンネルの楽音波形サンプルをバッファ０に必ずしも記憶する必要はなく、１２８サンプルのエリアを有する出力バッファであればいずれでも良い。
【００２５】
次に、前記したように出力バッファを使用する図１に示す楽音生成装置において実行される楽音発生方法の概要を図６ないし図１１を参照して説明する。ここで、楽音生成装置は波形メモリ音源方式とされており、図６は１発音中の波形データの例を示しており、図７は図６に示す波形データの各時点での周波数スペクトルを示しており、図８は生成された楽音波形サンプルを定再生レートで再生した場合の１発音中の楽音波形の時刻に対するピッチ変化の例を示しており、図９は１発音中の楽音波形サンプルを演算生成する時刻に対する演算サイクルの変化の変化態様の例を示しており、図１０は１発音中の楽音波形サンプルを演算生成する時刻に対してＦナンバを変化させる変化態様の例を示しており、図１１は楽音波形生成を行なう音源処理におけるタイミング・チャートを示している。
【００２６】
本発明の楽音発生方法においては、図１１（ａ）に示すように、演算の時刻が到来するごとに、再生部９から読み出されるべき１単位区間用の楽音波形サンプルが演算生成される。この場合、演算時間と演算時間との間では同図（ｂ）に示すように新たなノートオン・イベントやノートオフ・イベントが受信され、これらのイベントに応じた複数の楽音波形サンプルが同図（ｃ）に示す時間で一括されて演算生成されるようになる。
そして、演算生成されて前記したように出力バッファ０に記憶されている全発音チャンネル分の楽音波形サンプルが、同図（ｄ）に示すように再生部９において１単位区間の楽音波形サンプルとして読み出され、定再生レート（一定の再生サンプリング周波数）で再生されて発音される。
【００２７】
本発明においては、出力バッファの説明において述べたように１単位区間用の複数の楽音波形サンプルが演算生成される時に、演算生成される楽音波形の周波数帯域に応じた演算サイクルＣＣに変更するようにしている。
そこで、演算サイクルＣＣを変更する態様について説明する。減衰音系の１発音中の波形データは例えば図６に示すように変化するが、その横軸は発音中の時刻を示しており、ａ，ｂ，ｃ，ｄの時点の波形データに含まれる基本波および高調波のスペクトル分布を図７に示す。時点ａで示す部分はアタック部であり、その楽音波形を例えばその上に示すが、図７（ａ）に示すように高調波のスペクトルが多く含まれた複雑な波形となっている。次に、時点ｂで示す部分は減衰が若干進んだ部分であり、図７（ｂ）に示すように周波数の高い高調波のスペクトルの減衰が速く進んでいる。
【００２８】
さらに、時点ｃで示す部分は減衰がさらに進んだ持続部（サスティン部）であり、その楽音波形を例えばその上に示すが、図７（ｃ）に示すように高調波のスペクトルが減衰して基本波に近い単純な波形となっている。次に、時点ｄで示す部分は減衰がかなり進んだ部分であり、図７（ｄ）に示すように周波数の高い高調波のスペクトルはほとんど減衰してほぼ基本波となっている。
このように１発音中の波形データは、その１発音中の時刻によって波形データの周波数帯域が異なるものとされ、その最も広い周波数帯域の波形データを演算生成できるような演算サイクルに固定しておくと、前述したように不要な周波数帯域までもの波形データを演算生成することになる。
【００２９】
そこで、本発明の楽音発生方法では、図９に示すように演算サイクルＣＣを１発音中の時刻の経過に応じて変更している。図示する場合は、時刻ｔ２までは演算サイクルＣＣが基本演算サイクルの周波数である４８ｋＨｚとされ、時刻ｔ２から時刻ｔ４までは今までの１／２の演算サイクルに相当する２４ｋＨｚとされ、時刻ｔ４以降はさらに１／２の演算サイクルに相当する１２ｋＨｚとされて演算サイクルＣＣが変更されている。
なお、この演算サイクルＣＣの変更は、前記図１１に示す１単位区間を最小単位として１単位区間内では変更しないようにする。
【００３０】
このように、周波数帯域に応じた演算サイクルＣＣとしたので、本発明は不要な周波数帯域までもの波形サンプルの演算生成を極力行うことがなく、無駄な演算を低減することができる。そして、低減した演算を他の発音チャンネルの演算に振り分けると、そのチャンネルの楽音のクォリティを向上することができ、また、低減した演算により発音チャンネル数を増加することもできる。
なお、各発音チャンネルの演算サイクルを１単位区間の途中で変更するように設計することもできる。その場合、変更される演算サイクルＣＣに応じて、各チャンネルの生成演算を変更すると共に、そのチャンネルの出力を足し込む出力バッファを、１単位区間の途中で変更する。
【００３１】
ところで、前記図２に示すＲＡＭ３に記憶されている波形データＷＤ１，ＷＤ２，・・ＷＤｎは、前記したように１発音中において記録に必要な周波数帯域が変化するため、この変化に応じて波形データをサンプリングして記憶させるサンプリング周波数を変化させるようにして、記憶される波形データ量を低減している。この場合、アタック部においてはサンプリング周波数が高くされ、波形データの減衰に伴いサンプリング周波数も次第に低くされるのが一般的である。
このように、１発音中でサンプリング周波数を変化させながら記憶した波形データを、定レートでＲＡＭ３から読み出した場合、波形データのピッチがそのサンプリング周波数に応じて変化するようになる。
【００３２】
なお、図６において時点ａと時点ｃのそれぞれ１周期分の波形形状が図示されているが、時点ｃの波形の横軸方向の幅が時点ａの波形の横軸方向の幅の約半分となっているのは、上記説明した１発音中でのサンプリング周波数の変化による。
すなわち、もともとの波形のピッチは時点ａと時点ｃでほぼ同じであったのであるが、波形を録音する際のサンプリング周波数が時点ｃでは時点ａの約半分の周波数であったため、波形メモリに記憶された波形の１周期分に相当するアドレスの長さが時点ｃでは時点ａの１周期分に相当するアドレスの長さの約半分になっている。
【００３３】
例えば、波形データを基本演算サイクル（図９に示す例では４８ｋＨｚ）ごとに１サンプルづつ読み出した場合のピッチである元ピッチＯＰの、１発音中でのピッチの変化の様子を示す波形（ＯＰＥＧ）の例は図８に示すようになる。この図においては、ノート・ナンバＣ２の元ピッチＯＰが、時刻ｔ１から時刻ｔ３にかけて１オクターブ上のノート・ナンバＣ３のピッチに直線的に変化している例が示されている。（ただし、縦軸はセントスケールとされている。）したがって、このような波形データを読み出して楽音サンプルを生成する場合には、１発音中においてピッチが変化しないように読み出し速度（＝Ｆナンバ＝生成する楽音１サンプル毎の波形メモリの読み出しアドレスの進み量）を制御する必要がある。
ここで、波形データをサンプリングして波形メモリへ取り込む時のサンプリング周波数は、上述したＯＰＥＧ波形と丁度反対の変化（セントスケール上）であり、録音時にサンプリング周波数の変化を制御したデータに基づいて、ＯＰＥＧ波形の形状を制御するＯＰＥＧ制御データが生成される。
【００３４】
指定されたピッチを有する楽音を発生するためには、該ピッチとＯＰＥＧ波形に基づいて、元ピッチ（ＯＰＥＧ波形の値で示される）を指定された該ピッチまでピッチシフトさせるためのピッチ変更量としてＦナンバを生成すればよい。具体的な手段としては、まず、セント単位上において、発音ピッチとして指定されたピッチと元ピッチの差を計算する。次に、得られた差を、セント単位からＨｚ単位に変換すると、Ｆナンバが得られる。この場合、指示される発音ピッチが変動しなくとも、ＯＰＥＧが時間変化すると、ＦナンバはＯＰＥＧの変化に応じて変化する。
【００３５】
また、演算時刻が到来するごとに１単位区間の波形サンプル数として演算サイクルＣＣで示される数の波形サンプルを演算生成しているのであるが、図９に示すように１発音の途中で演算サイクルＣＣを変化した場合には、その時点で１サンプル演算ごとに読み出す波形データの進み量（＝Ｆナンバ＝読み出し速度）を、演算サイクルＣＣに応じて変化させる必要がある。例えば、４８ｋＨｚ（ＣＣ＝０）の基本演算サイクルＣＣを２４ｋＨｚ（ＣＣ＝１）に半減した場合、１サンプル演算ごとの進み量を当初の２倍にし、さらに、１２ｋＨｚ（ＣＣ＝２）に低減された場合は、当初の４倍の進み量とする必要がある。
そこで、本発明では演算生成時に指定された波形データを読み出すアドレスカウンタの、楽音波形の１サンプル演算ごとの進み量であるＦナンバを、演算サイクルＣＣが変化するタイミングで一緒に変化させるようになっている。演算サイクルＣＣは、各発音チャンネルの無駄な波形演算量を節約するように、チャンネル毎に設定される。
【００３６】
本発明では、波形データのサンプリング周波数変化による波形圧縮（図８に示すＯＰＥＧ波形の変化）と、演算サイクルＣＣの変化による波形演算量の節約（図９に示すＣＣの変化）の両方が実現されており、結果として、Ｆナンバは１発音中で図１０のように変化する。
この図に示すように、当初ＦＮ０  であったＦナンバは、ＯＰＥＧ波形の変化に応じて、時刻ｔ１から時刻ｔ２にかけて曲線状に低下している。さらに時刻ｔ２において、演算サイクルＣＣが半分になったことに対応してＦナンバが２倍にされ、時刻ｔ２から時刻ｔ３にかけてＯＰＥＧ波形の変化に応じて、先程と同様、曲線状に低下している。
【００３７】
次いで、時刻ｔ３から時刻ｔ４までは一定値ＦＮ０  （２倍になったＯＰＥＧ波形と半分になった演算サイクルＣＣが互いに打ち消しあって、たまたま元のＦナンバに戻る。）とされ、時刻ｔ４で演算サイクルＣＣが当初の１／４倍とされたことに対応して、さらに２倍にされており、時刻ｔ４以降では一定値（２ＦＮ０  ）とされる。
【００３８】
このＦナンバを算出する式を次式に示す。
Ｆナンバ＝２（ＳＰ−ＯＰ）／１２００＊２ＣＣ
ただし、この式においてＳＰは発音すべきノート・ナンバのピッチであり、ＯＰは元ピッチ、ＣＣは基本演算サイクル（４８ｋＨｚ）に対する割合を示す値であり、演算サイクルが基本演算サイクルの時はＣＣ＝０、演算サイクルが１／２とされた時はＣＣ＝１、演算サイクルが１／４とされた時はＣＣ＝２である。
【００３９】
図１２は、ＣＰＵ１が実行する本発明の楽音発生方法を適用したソフトウェア音源のメインルーチンのフローチャートを示す図であり、メインルーチンがスタートされるとステップＳ１０にて初期設定が行われる。初期設定では全発音チャンネルのクリアや、音色データおよび波形データ等の準備が行われる。次いで、ステップＳ２０にて受信データがあるか否かが判定されるが、この判定は前記した図３に示す入力バッファにＭＩＤＩ受信データが記録されているか否かを判定することにより行なわれる。
そして、入力バッファにＭＩＤＩ受信データがない場合はそのままステップＳ４０に進むが、入力バッファに受信データがある場合には、ステップＳ３０にて受信されたＭＩＤＩイベントに応じた処理（ノートオン処理、ノートオフ処理等）やその他処理を行なう受信データ処理が行われる。
【００４０】
そして、ステップＳ４０にてスイッチ（ＳＷ）が操作されたか否かが判定され、スイッチが操作されていない場合にはそのままステップＳ６０に進むが、スイッチが操作された場合はＳＷイベントありと判定されて、操作されたパネルスイッチに応じて複数パートの各パートの音色を設定するための処理がステップＳ５０のパネルＳＷイベント処理において行なわれる。
続いて、ステップＳ６０にて演算時刻が到来するごとに楽音波形サンプルを一括して演算生成する音源処理が行われ、ステップＳ７０にてその他の処理が行われ、ステップＳ２０に戻り、ステップＳ２０ないしステップＳ７０の処理が循環して繰返し行われる（定常ループ）。なお、再生部９を、アルゴリズム選択可能専用音源、または、ＤＳＰ音源とした場合、ステップＳ６０の音源処理は不要になる。
【００４１】
次に、ＣＰＵ１の実行するＭＩＤＩ受信割込処理のフローチャートを図１３に示す。この処理は、ＭＩＤＩインタフェース５が外部より何らかのＭＩＤＩイベントを受信した際に割込により起動される。このＭＩＤＩ受信割込処理は、他の処理より優先して行われる処理である。このＭＩＤＩ受信割込処理が開始されると、ステップＳ８０にてＭＩＤＩインターフェース５により受信された受信データが取り込まれ、ステップＳ９０にてその受信データは受信された時点の時刻データと組にされて図３に示されるような形式で前述した入力バッファに書き込まれて、割込発生時の処理へリターンされる。これにより、受信したＭＩＤＩデータは、順次、受信時刻と共に入力バッファに書き込まれるようになる。
【００４２】
次に、メインルーチンのステップＳ５０にて行なわれるパネルスイッチイベント処理の例としてパート１の音色選択イベント処理のフローチャートを図１４に示す。パート１の音色選択イベント処理が開始されると、ステップＳ１００にてパネルスイッチで選択された音色番号がレジスタにｔ１として格納されて、この処理は終了する。これにより、パート１の音色が決定され、図示しないがすべてのパートの音色が選択される処理がメインルーチンのステップＳ５０にて行なわれる。
【００４３】
次に、メインルーチンの定常ループでステップＳ３０として実行される受信データ処理において行なわれるノートオン・イベント処理、およびノートオフ・イベント処理の詳細フローチャートを図１５（ａ）（ｂ）に示す。
受信データがノートオン・イベントの場合に図１５（ａ）に示すノートオン・イベント処理が開始され、ステップＳ１１０にて、入力バッファ中のそのノートオン・イベントのノートナンバがＮＮとして、ベロシティがＶＥＬとして、パート別音色がｔとしてそれぞれレジスタに取り込まれ、さらにそのノートオン・イベントの発生時刻がＴＭとしてレジスタに取り込まれる。次いで、ステップＳ１２０にてレジスタに取り込まれたノートナンバＮＮの発音割当処理が行われ、割り当てられたチャンネル（ｃｈ）の番号ｉがレジスタに取り込まれる。
【００４４】
さらに、ステップＳ１３０にて前記パート別に設定されている音色ｔの音色データＴＰ（ｔ）をノート・ナンバＮＮおよびベロシティＶＥＬに応じて加工する。この場合の音色データは図２に示す音色データＰＤ１ないしＰＤ１６のうちの選択されたいずれかの音色データである。そして、ステップＳ１４０にて図４に示す音源レジスタのうちレジスタに取り込まれたｃｈ番号ｉの音源レジスタに、発音すべきピッチＳＰを含む前記ステップの処理で加工された音色データを、前記ノートオン・イベントの発生時刻ＴＭと共に書き込む。
ここで、音源レジスタに書き込まれる波形指定データＤは、図２に示す音色データ中の音域波形指定データをノートナンバＮＮで参照することにより求められ、該ノートナンバＮＮに対応した楽音生成に用いるべき波形として、波形データＷＤ１から波形データＷＤｎのうちのいずれか１つが指定される。
【００４５】
次に、ステップＳ１５０にてレジスタに取り込まれたｉｃｈの演算サイクルを変更するタイミング、および変更する演算サイクル値を指定する演算サイクル制御データが音源レジスタのｉｃｈ領域に設定される。この演算サイクル制御データの設定は、ｉｃｈで選択された音色データ中に記憶された演算サイクル制御データに基づいて設定される。演算サイクルを変更するタイミングは前記した演算時刻ごとに演算を行なう１単位区間を最小単位として指定されるので、演算時刻に達する回数によりタイミングを検出し、変更を実行することができる。次いで、ステップＳ１６０にてレジスタに取り込まれたｉｃｈに波形データエリアから読み出されたＯＰＥＧ制御データが音源レジスタのｉｃｈ領域に設定される。このＯＰＥＧ制御データは、前記図８に示すような元ピッチの１発音中での変化の様子を示すＯＰＥＧ波形の形状を制御するデータである。
次いで、ステップＳ１７０にてレジスタに取り込まれたｉｃｈの音源レジスタにノートオンが書き込まれ、ノートオン・イベント処理は終了する。
【００４６】
図１５（ｂ）に示すフローチャートのノートオフ処理は、受信したデータがノートオフ・イベントの場合に開始され、ステップＳ１８０にて、入力バッファ中のそのノートオフ・イベントのノートナンバがＮＮとして、パート別音色がｔとしてそれぞれレジスタに取り込まれ、ノートオフ・イベントの発生時刻がＴＭとしてレジスタに取り込まれる。次いで、ステップＳ１９０にて音色ｔ，ノートナンバＮＮで発音されている発音チャンネル（ｃｈ）がサーチされ、見つかった発音ｃｈの番号ｉがレジスタに取り込まれる。
次に、ステップＳ２００にてこのｉｃｈの音源レジスタに前記レジスタに取り込まれた発生時刻ＴＭとノートオフが書き込まれてノートオフ処理は終了する。
【００４７】
次に、メインルーチンの定常ループでステップＳ６０として実行される音源処理の詳細フローチャートを図１６を参照しながら説明する。
音源処理が開始されると、ステップＳ２１０にて音源レジスタのチェックが行なわれ、新規な書き込みがない場合にはステップＳ２２０からそのままステップＳ２５０に進むが、ステップＳ２２０にて新規な書き込みがあったと判定された場合には、ステップＳ２３０にて書き込まれたデータを、波形演算を制御するための制御データに変換する。
次いで、ステップＳ２４０にて変換された制御データの準備が行なわれるが、ここでは変換後のデータに基づいて、ノートオン／オフ，ピッチ・ベンド，ＥＸＰ，パン等の変換後のデータに基づいた音源制御準備や、制御時刻／制御データ等のセットの作成が行なわれる。すなわち、ステップＳ２３０およびステップＳ２４０にて書き込みがあるごとに、あとに実行される楽音生成ステップＳ２７０〜ステップＳ２９０のための演算の準備が行なわれる。
【００４８】
続くステップＳ２５０では再生部９における再生波形データの読出しが途切れないように、再生中の波形データが終了する時刻より所定時間だけ早いタイミングを指定する演算時刻管理が行なわれる。すなわち、図１１に示すように、同図（ａ）に示す演算時刻とされた時に、同図（ｃ）に示すように１単位区間に相当する複数の楽音波形サンプルの演算生成が実行され、この演算生成された楽音波形サンプルが、同図（ｄ）に示すように１単位区間の楽音波形として再生部９により読み出されて再生されるが、再生部９の読み出す波形サンプルが途切れないよう図１１（ｃ）に示す演算生成に要する時間を考慮して、同図（ａ）に示す演算時刻を設定するように演算時刻管理が行なわれる。
【００４９】
次いで、ステップＳ２６０にて演算時刻管理が行なわれた演算時刻に達したか否かが判定されるが、演算時刻に達していない場合はそのまま音源処理は終了する。そして、音源レジスタに新規書き込みがなく、かつ、演算時刻に達していない場合は、音源処理は何も処理を行うことなく抜けてしまうが、定常ループが何回か循環すると演算時刻に達し、ステップＳ２７０以降において１単位区間に相当する楽音波形サンプルの演算生成処理が行なわれる。
すなわち、ステップＳ２７０にて各チャンネルの生成する楽音に応じて、ここで演算生成する楽音波形サンプル数を指定する演算サイクルＣＣの変更処理、および重要な楽音を発生しているチャンネル順に演算を行なうよう各チャンネルの演算順序を決定する演算順序決定処理、さらに演算サイクルＣＣを変更しても全発音チャンネルの楽音波形サンプルを生成できない場合に、演算順序の最後から消音するチャンネルを決定する消音ｃｈ処理が行なわれる。
【００５０】
次いで、前記ステップＳ２４０において音源制御準備されたデータを、時間軸上で展開して演算準備を行なう制御データ展開処理がステップＳ２８０にて実行され、さらに、ステップＳ２９０にて展開されたデータに基づいて１単位区間分の再生波形データ（楽音波形サンプル）を算出する波形演算が実行される。さらに、前記図５を用いて説明したように、演算サイクルの異なる再生波形データは基本演算サイクルで生成されるサンプル数と同じサンプル数となるよう補間されて、同じサンプル数とされて全発音チャンネルの再生波形データが累算され、例えばバッファ０に格納される処理が行なわれる。
そして、ステップＳ３００にて作成した再生波形データを、再生部９が読み出すように予約する再生予約処理が行なわれるが、ここでは、再生予約は全発音チャンネルの再生波形データが累算された再生波形データが格納されているバッファ０に対して行なわれる。
【００５１】
本発明は、発音チャンネルごとに演算サイクルを変更すること、および、各発音チャンネルの１発音の途中で演算サイクルを変更することができるが、各発音チャンネルの１発音の途中で演算サイクルを変更する処理等が行なわれる、前記した音源処理におけるステップＳ２７０にて実行されるチャンネル制御処理の詳細フローチャートを図１７に示す。
チャンネル制御処理が開始されると、ステップＳ３１０にて各チャンネルが有している演算サイクル制御データに基づく１発音の途中での演算サイクルを変更する制御処理が行なわれる。ここでは、時刻のカウントを行ない、演算サイクルを変更するタイミングを管理している。そして、管理の結果、現時点では演算サイクルを変更するチャンネルがない場合には、そのままステップＳ３４０に進むが、演算サイクルを変更するチャンネルがあった場合（そのチャンネルの演算サイクル制御データの指定する変更タイミングに達した場合）には、ステップＳ３２０にてありと判定されて、該チャンネルの演算サイクルＣＣがステップＳ３３０にて新値（同演算サイクル制御データの指定する同タイミングでの変更値）に変更される。
【００５２】
次いで、ステップＳ３４０にて発音チャンネルの演算順序の決定処理が行なわれるが、ここでは前記したように重要な音や消音しては困る音を発音しているチャンネルの演算が優先して演算が行なわれるようにチャンネルの演算順序が決定される。ここで、楽音を生成中でない発音チャンネルについては演算が行われないので演算順序に含めなくてもよい。そして、ステップＳ３５０にて各発音チャンネルの演算量を累算し、全演算量が算出される。この場合、各発音チャンネルの演算量は、各発音チャンネルの演算サイクルによって異なり、また、各チャンネルごとに発音方式が異なっていれば、それによっても異なるものとされる。次いで、ステップＳ３６０にて算出された全演算量が多過ぎるか否かが判定されるが、算出された全演算量が所定範囲内であった場合にはそのままチャンネル制御処理は終了し、波形演算処理が行なわれる。
【００５３】
また、ステップＳ３６０にて算出された全演算量が多過ぎてそのまま全演算を行うと、再生部９が読み出すタイミングまでに演算が終了せず再生波形データが途切れると判定された場合には、ステップＳ３７０にて所定順位の演算順序以降とされた発音チャンネルの演算サイクルＣＣを、必要数だけ「＋１」する。すなわち、演算サイクルＣＣを小さく（ＣＣ＝０のチャンネルはＣＣ＝１に、ＣＣ＝１のチャンネルはＣＣ＝２に）して生成されるサンプル数を減少させる。
この結果、全演算量が所定範囲内に納まったか否かがステップＳ３８０にて判定され、所定範囲内とされた場合にはチャンネル制御処理は終了するが、依然として所定範囲を超えていると判定された場合には、ステップＳ３９０にて演算順序の最後とされたチャンネルから順に消音チャンネルを決定し、消音処理が実行される。
【００５４】
従来の音源制御では、発音すべき楽音が多過ぎる場合、トランケート処理、つまり発音中の楽音のうちのいずれかを消音する処理が行われている。本実施例では、ステップＳ３６０で「ＹＥＳ」と判定された場合でも、ステップＳ３７０からステップＳ３９０の処理で、まず、演算サイクルを落とすことにより、従来行われていた楽音の消音を回避している。しかも、この場合に演算サイクルが落とされるのは、重要度の低い音であるので、音楽上の影響は少ない。また本実施例では、上記演算サイクルの低減だけで対処できない時には、従来と同様の消音処理が実行される。
これで、チャンネル制御処理が終了し、波形演算の処理が続いて行なわれるようになる。
【００５５】
次に波形演算処理の詳細なフローチャートを図１８に示し、その説明を行なう。波形演算処理が開始されると、ステップＳ４００にて演算順序１番の発音チャンネル準備が行なわれる。この場合、図５に示す各出力バッファは演算に先立ちすべてクリアされる。次いで、ステップＳ４１０にて発音するピッチＳＰ、演算サイクルＣＣおよび元ピッチＯＰに基づき、前記した式１によりＦナンバを発生する。このステップＳ４１０にて各チャンネルのＦナンバを毎回算出しているため、発音途中での演算サイクルＣＣや元ピッチＯＰの変化に応じ、Ｆナンバが直ちに変化する。さらに、ピッチベンドやビブラート等の効果による発音途中で発音ピッチＳＰの変化に応じて、Ｆナンバを変化させることもできる。
なお、演算時刻の発生する時間間隔は一般に数ミリ秒程度であるので、１単位区間分の楽音生成演算の途中でＦナンバを変化させる必要はない。
【００５６】
次いで、ステップＳ４２０にて読み出しアドレスを作成し、作成された読み出しアドレスの整数部に基づいて波形データを読み出すと共に、読み出しアドレスの小数部に基づいて連続する波形データ間の補間処理を行なう。ステップＳ４２０の処理では、補間サンプル毎の読み出しアドレス作成から補間処理を１単位として、この単位とされた処理を演算サイクルＣＣに応じた回数繰り返すようになっている。この結果、演算サイクルＣＣに応じた数の補間サンプルが生成される。なお、各補間サンプルの読み出しアドレスは、直前の補間サンプルの読み出しアドレスにＦナンバを加算することにより求められる。したがって、読み出しアドレスは、各補間サンプル毎にＦナンバに応じた速さで進行し、その進行速度に応じて読み出された波形のピッチが制御される。
【００５７】
さらに、ステップＳ４３０にて前ステップで生成された補間サンプルに音量ＥＧ波形による音量制御が施された後、演算サイクルＣＣに応じた出力バッファのバッファ０ないしバッファ２のいずれかに足し込まれる。この音量ＥＧ波形は、楽音の立ち上がりから減衰までの音量エンベロープの変化を制御する波形であり、各発音チャンネルのレジスタに設定されたＡＥＧ制御Ｄに基づいて、各補間サンプルに対応させて演算生成される。すでに説明したように、生成する補間サンプルの数と選択される出力バッファの記憶するサンプル数は、共に、各発音チャンネルの演算サイクルＣＣで制御されており、互いに同数である。そのため、ステップＳ４３０の処理も、先程のステップＳ４３０と同様に各サンプル単位である。つまり、生成された補間サンプルに対し、音量ＥＧ波形による音量制御、および演算サイクルＣＣに応じた出力バッファの対応する順番位置への足し込みが、サンプル単位で順次行われる。
以上のような手順で各処理を実行することにより、ＣＰＵ１の演算レジスタの書き込み／読み出しの回数を最小限に押さえ、全体としての処理速度を向上させている。
【００５８】
このようにして、図５に示すように、バッファ０には基本演算サイクルの発音チャンネルで演算された楽音サンプルが、バッファ１には基本演算サイクルの１／２の演算サイクルの発音チャンネルで演算された楽音サンプルが、バッファ２には基本演算サイクルの１／４の演算サイクルの発音チャンネルで演算された楽音サンプルが、それぞれそれまでに格納されていたデータ値に順次足し込まれてそれぞれ格納されるが、この場合は１番目に演算された補間サンプルであるので、そのチャンネルの演算サイクルＣＣに対応した出力バッファにそのまま格納される。
【００５９】
次に、ステップＳ４４０にて演算すべき全発音チャンネルの演算が終了したか否かが判定されるが、また、演算すべき（発音中の）発音チャンネルが残っている場合は、終了していないと判定されてステップＳ４８０に進み、２番目の順番の発音チャンネルの準備が行なわれてステップＳ４１０に戻る。そして、全発音チャンネルの演算が終了するまで、ステップＳ４１０ないしステップＳ４８０のループの処理が行なわれる。
なお、本発明のプログラム以外のアプリケーションソフトをＣＰＵ１が並列実行していると、そのアプリケーションソフトの処理に時間が取られて、本演算が遅れることがあるが、その場合、再生部９の再生が途切れないように、未だ演算されていないチャンネルがあっても、ステップＳ４４０にて終了したと判定することがある。
【００６０】
これにより、図５に示すバッファ０、バッファ１、およびバッファ２に演算サイクルＣＣに応じて格納された複数チャンネルの補間サンプルが累算されて格納されるようになる。
全発音チャンネルの演算が終了すると、ステップＳ４５０にてバッファ１に格納されている波形サンプルの補間処理（２倍オーバサンプリング）が行なわれて、基本演算サイクルで演算した場合のサンプル数（この場合、１２８サンプル）と同じサンプル数とされてバッファ０と同じ構成のバッファ１’に格納される。（図５（ｄ）参照）次いで、ステップＳ４６０にてバッファ２に格納されている波形サンプルの補間処理（４倍オーバサンプリング）が行なわれて、基本演算サイクルで演算した場合のサンプル数と同じサンプル数とされてバッファ０と同じ構成のバッファ２’に格納される（図５（ｅ）参照）。
【００６１】
続いて、ステップＳ４７０にてバッファ０に、バッファ１’、バッファ２’の波形サンプルを足し込むことにより、全発音チャンネルの波形サンプルを累算した波形サンプルをバッファ０上に実現する（図５（ｆ）参照）。これにより、波形演算処理は終了し、バッファ０上の波形サンプルは予約されて再生部９により読み出されて発音されるようになる。
【００６２】
以上においては、前記図１に示す楽音生成装置にて実行されるプログラムとして本発明の楽音発生方法の説明を行った。また、本発明の楽音発生方法を、Ｗｉｎｄｏｗｓ  （米マイクロソフト社のパソコン用ＯＳ）やその他のオペレーティング・システムの動作する汎用コンピュータ上で、１つのアプリケーションプログラムとして実行させてもよい。
【００６３】
なお、本発明に係る楽音生成方法は、各発音チャンネルごとに、発音される楽音波形が広帯域とされているか否か、あるいは重要度に応じて波形演算サイクルを決定することができ、楽音波形の広帯域あるいは狭帯域にかかわらず、無駄な波形演算を行なうことなく楽音波形サンプルを演算生成することができる。
また、減衰音系の場合１発音中のアタック部では波形演算サイクルを大きくして多くの波形サンプルを生成し、持続部においては波形演算サイクルを小さくして波形サンプルを生成しているので、無駄な波形演算が生じないと共に、効率的に１発音中の波形サンプルを生成することができる。
【００６４】
このように、特定の発音チャンネルにおける波形演算の節約をすることができるため、その他のチャンネルの楽音波形の波形演算量を増やすと、そのチャンネルの楽音クォリティを改善することができ、また節約された波形演算量により発音チャンネル数を増やすことができる。
さらに、各発音チャンネル毎に独立して、単位時間当たりの生成楽音サンプル数を制御することができるので、発音チャンネル間で生成楽音のクォリティ差をつけられるにようになった。また、クォリティが低くても影響の少ない発音チャンネルの演算量を削減できる。
【００６５】
【発明の効果】
本発明は以上説明したように構成されているので、演算処理装置の波形演算により楽音を生成する際に、演算サイクル情報に応じて前記単位時間当たりに演算生成する波形サンプル数を決定するようにしたので、再生波形データが途切れることなく楽音を生成することができるようになる。
また、単位時間当たりに生成する楽音のサンプル数を指示するようにしたので、生成しようとする楽音波形に応じたサンプル数を生成することができ、無駄な波形演算を生じることがなくなる。すなわち、多くの発音チャンネルの楽音波形サンプルを生成する場合にも、波形演算が間に合わなくなって音切れが生じることを防止することができるようになる。さらに、減衰音系の場合に１発音中のアタック部では多くの波形サンプルを生成し、持続部においては波形サンプルを少なく生成することができるので、無駄な波形演算が生じないと共に、効率的に波形サンプルを生成することができるようになる。
【図面の簡単な説明】
【図１】本発明の楽音発生方法を実行する楽音生成装置の構成を示すブロック図である。
【図２】本発明のＲＡＭ上の音色データおよび波形データエリアを示す図である。
【図３】本発明のＲＡＭ上の入力バッファエリアを示す図である。
【図４】本発明のＲＡＭ上の音源レジスタエリアを示す図である。
【図５】本発明のＲＡＭ上の出力バッファエリアおよびその動作説明するための図である。
【図６】１発音中の波形データの例を示す図である。
【図７】１発音中の波形データのスペクトル分布を示す図である。
【図８】１発音中のＯＰＥＧの波形の一例を示す図である。
【図９】本発明の楽音発生方法の１発音中の演算サイクルの変化の例を示す図である。
【図１０】本発明の楽音発生方法の１発音中のＦナンバの変化の例を示す図である。
【図１１】本発明の楽音発生方法の音源処理のタイミングチャートを示す図である。
【図１２】本発明の楽音発生方法のメインルーチンのフローチャートを示す図である。
【図１３】本発明の楽音発生方法のＭＩＤＩ受信割込処理のフローチャートを示す図である。
【図１４】本発明の楽音発生方法のパート１の音色選択イベント処理のフローチャートを示す図である。
【図１５】本発明の楽音発生方法の受信データ処理におけるノートオン・イベント処理およびノートオフ・イベント処理のフローチャートを示す図である。
【図１６】本発明の楽音発生方法のメインルーチンにおける音源処理のフローチャートを示す図である。
【図１７】本発明の楽音発生方法の音源処理におけるチャンネル制御処理のフローチャートを示す図である。
【図１８】本発明の楽音発生方法の音源処理における波形演算処理のフローチャートを示す図である。
【符号の説明】
１  ＣＰＵ、２  ＲＯＭ、３  ＲＡＭ、４  タイマ、５  ＭＩＤＩインターフェース、６  キーボード、７  ディスプレイ、８  ハードディスク、９  再生部、１０  ＤＡＣ、１１  サウンドシステム
【図１】
0003603849.tif 000002
【図２】
0003603849.tif 000003
【図３】
0003603849.tif 000004
【図４】
0003603849.tif 000005
【図５】
0003603849.tif 000006
【図６】
0003603849.tif 000007
【図７】
0003603849.tif 000008
【図８】
0003603849.tif 000009
【図９】
0003603849.tif 000010
【図１０】
0003603849.tif 000011
【図１１】
0003603849.tif 000012
【図１２】
0003603849.tif 000013
【図１３】
0003603849.tif 000014
【図１４】
0003603849.tif 000015
【図１５】
0003603849.tif 000016
【図１６】
0003603849.tif 000017
【図１７】
0003603849.tif 000018
【図１８】
0003603849.tif 000019