(57)【特許請求の範囲】
【請求項１】
複数の楽音波形を記憶する波形メモリと、
供給される読み出しアドレスに基づいてこの波形メモリから夫々波形データを読み出す複数の物理オシレータ手段と、
これら複数の物理オシレータ手段から読み出された波形データを累算して楽音波形として出力する累算手段と、
前記波形メモリから波形を読み出すための読み出しアドレス及び発生すべき楽音のピッチを記憶するマスタオシレータと、前記波形メモリから波形を読み出すための読み出しアドレス及び当該マスタオシレータに記憶された読み出しアドレスとのアドレス差分を示すオフセットアドレス値を記憶する少なくとも１つ以上のスレーブオシレータとから構成される論理オシレータ手段と、
前記論理オシレータ手段と前記物理オシレータ手段との対応関係を記憶する記憶手段と、
楽音波形を形成する過程に応じて、当該楽音波形を発生する発音チャンネルの論理オシレータ手段に割り当てる物理オシレータ手段を、前記記憶手段に記憶される対応関係を参照して動的に確保又は解放する動的割り当て手段と、
前記マスタオシレータに記憶された読み出しアドレスを前記記憶された楽音のピッチに基づいて更新して前記割り当てられた物理オシレータ手段に供給するとともに、前記スレーブオシレータに記憶された読み出しアドレスを当該マスタオシレータで更新された読み出しアドレスにオフセットアドレス値を加算したアドレスに更新して前記割り当てられた物理オシレータ手段に供給する動作を一定周期毎に実行するタイマ手段と、
を具備することを特徴とする波形発生装置。
【請求項２】
複数の楽音波形を記憶する波形メモリと、供給される読み出しアドレスに基づいてこの波形メモリから夫々波形データを読み出す複数の物理オシレータ手段と、
これら複数の物理オシレータ手段から読み出された波形データを累算して楽音波形として出力する累算手段と、
前記波形メモリから波形を読み出すための読み出しアドレス及び発生すべき楽音のピッチを記憶するマスタオシレータと、前記波形メモリから波形を読み出すための読み出しアドレス及び当該マスタオシレータに記憶された読み出しアドレスとのアドレス差分を示すオフセットアドレス値を記憶する少なくとも１つ以上のスレーブオシレータとから構成される論理オシレータ手段と、
前記論理オシレータ手段と前記物理オシレータ手段との対応関係を記憶する記憶手段と、を有する波形発生装置として用いられるコンピュータに、
楽音波形を形成する過程に応じて、当該楽音波形を発生する発音チャンネルの論理オシレータ手段に割り当てる物理オシレータ手段を、前記記憶手段に記憶される対応関係を参照して動的に確保又は解放する動的割り当てステップと、
前記マスタオシレータに記憶された読み出しアドレスを前記記憶された楽音のピッチに基づいて更新して前記割り当てられた物理オシレータ手段に供給するとともに、前記スレーブオシレータに記憶された読み出しアドレスを当該マスタオシレータで更新された読み出しアドレスにオフセットアドレス値を加算したアドレスに更新して前記割り当てられた物理オシレータ手段に供給する動作を一定周期毎に実行するタイマステップと、
を実行させる波形発生プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器に用いて好適な波形発生装置および波形発生プログラムに関する。
【背景技術】
【０００２】
従来より、基本波およびその高調波成分を重ね合わせて任意の倍音構造を持つ波形を合成する倍音合成方式や、様々な波形周期や波形形状からなる複数の要素波形を重ね合わせて所望の波形を合成する加算合成方法が知られている。後者の加算合成方法に基づき構成される波形発生装置の一態様として、例えば特許文献１には、様々な波形周期や波形形状からなる複数の要素波形を予めメモリに記憶しておき、所望の波形を合成するのに必要な要素波形をメモリから読み出し、読み出した各要素波形について、所定の重み付け乗算を行ってからそれらを加算して１つの波形を形成する装置が開示されている。
【０００３】
【特許文献１】特開２０００−１８１４５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、加算合成方法による波形発生には、次のような問題がある。例えばピッチ（音高）が同じで相関性のある２つの波形を重ね合わせると、それら波形間の位相差に応じて周波数成分の打消しが生じてコムフィルタを通したような音色になることが知られている。そうした音色変化を常に同じように引き起こすには、重ね合わせる波形同士の位相差を常に一定に保つことが要求される。重ね合わせる波形同士の位相差を常に一定に保つには、波形開始点を一致させるだけでなく、例えばＬＦＯやピッチベンド等によるピッチモジュレーションが、常に複数の発音チャンネルに対して同期し、かつ同じ変調幅を与え続けることも必要になる。
【０００５】
加えて、合成波形の種類によっては加算合成に用いる波形を合成波形全体の発音の途中から合成開始したり、合成波形全体の発音の途中で合成終了したりすることも起こり得るが、既に発音中の合成波形の位相に合せて新たな加算波形を同期させることは極めて困難である為、発音するかどうかに関わらず、加算合成に用いる可能性のある全ての波形を合成波形全体の発音の最初から最後まで同期再生しておく必要がある。この結果、発音チャンネル（オシレータ）が無駄に浪費されてしまう、という問題がある。
【０００６】
本発明は、このような事情に鑑みてなされたもので、発音チャンネルを無駄に浪費することなく波形発生することができる波形発生装置および波形発生プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、請求項１に記載の発明では、複数の楽音波形を記憶する波形メモリと、供給される読み出しアドレスに基づいてこの波形メモリから夫々波形データを読み出す複数の物理オシレータ手段と、これら複数の物理オシレータ手段から読み出された波形データを累算して楽音波形として出力する累算手段と、前記波形メモリから波形を読み出すための読み出しアドレス及び発生すべき楽音のピッチを記憶するマスタオシレータと、前記波形メモリから波形を読み出すための読み出しアドレス及び当該マスタオシレータに記憶された読み出しアドレスとのアドレス差分を示すオフセットアドレス値を記憶する少なくとも１つ以上のスレーブオシレータとから構成される論理オシレータ手段と、前記論理オシレータ手段と前記物理オシレータ手段との対応関係を記憶する記憶手段と、楽音波形を形成する過程に応じて、当該楽音波形を発生する発音チャンネルの論理オシレータ手段に割り当てる物理オシレータ手段を、前記記憶手段に記憶される対応関係を参照して動的に確保又は解放する動的割り当て手段と、前記マスタオシレータに記憶された読み出しアドレスを前記記憶された楽音のピッチに基づいて更新して前記割り当てられた物理オシレータ手段に供給するとともに、前記スレーブオシレータに記憶された読み出しアドレスを当該マスタオシレータで更新された読み出しアドレスにオフセットアドレス値を加算したアドレスに更新して前記割り当てられた物理オシレータ手段に供給する動作を一定周期毎に実行するタイマ手段とを具備することを特徴とする。
【００１５】
請求項２に記載の発明では、複数の楽音波形を記憶する波形メモリと、供給される読み出しアドレスに基づいてこの波形メモリから夫々波形データを読み出す複数の物理オシレータ手段と、これら複数の物理オシレータ手段から読み出された波形データを累算して楽音波形として出力する累算手段と、前記波形メモリから波形を読み出すための読み出しアドレス及び発生すべき楽音のピッチを記憶するマスタオシレータと、前記波形メモリから波形を読み出すための読み出しアドレス及び当該マスタオシレータに記憶された読み出しアドレスとのアドレス差分を示すオフセットアドレス値を記憶する少なくとも１つ以上のスレーブオシレータとから構成される論理オシレータ手段と、前記論理オシレータ手段と前記物理オシレータ手段との対応関係を記憶する記憶手段と、を有する波形発生装置として用いられるコンピュータに、楽音波形を形成する過程に応じて、当該楽音波形を発生する発音チャンネルの論理オシレータ手段に割り当てる物理オシレータ手段を、前記記憶手段に記憶される対応関係を参照して動的に確保又は解放する動的割り当てステップと、
前記マスタオシレータに記憶された読み出しアドレスを前記記憶された楽音のピッチに基づいて更新して前記割り当てられた物理オシレータ手段に供給するとともに、前記スレーブオシレータに記憶された読み出しアドレスを当該マスタオシレータで更新された読み出しアドレスにオフセットアドレス値を加算したアドレスに更新して前記割り当てられた物理オシレータ手段に供給する動作を一定周期毎に実行するタイマステップとを実行させることを特徴とする。
【発明の効果】
【００１６】
請求項１、２に記載の発明によれば、従来のように、発音するかどうかに関わらず、加算合成に用いる可能性のある全ての波形を同期再生しておく必要が無くなる結果、発音チャンネルを無駄に浪費することなく波形発生することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施の形態について説明する。
Ａ．構成
（１）全体構成
図１は、本発明の実施の一形態による波形発生装置を備えた電子楽器１００の構成を示すブロック図である。電子楽器１００は、鍵盤１、スイッチ部２、ホイール操作子３、ＣＰＵ４、表示部５、ＲＯＭ６、ＲＡＭ７、音源８、サウンドシステム９およびＭＩＤＩインタフェース１０を備える。
【００１８】
鍵盤１は、押離鍵操作（演奏操作）に応じたキーオン／キーオフ信号、鍵番号、ベロシティ等からなる演奏情報を発生する。スイッチ部２は、楽器パネルに配設される各種スイッチから構成され、操作されるスイッチ種に応じたスイッチイベントを発生する。スイッチ部２に配設される主要なスイッチとして、例えば音色選択スイッチ、ベンド幅設定スイッチ、ビブラート深さ設定スイッチおよびＬＦＯレート設定スイッチ等が有り、これらスイッチ操作に対応した処理動作については追って詳述する。
【００１９】
ホイール操作子３は、図示されていないベンダホイール３ａおよびモジュレーションホイール３ｂを備える。ベンダホイール３ａは、ユーザ操作に応じたベンダホイール変位値ＢＶを発生してＣＰＵ４に供給する。モジュレーションホイール３ｂは、ユーザ操作に応じたモジュレーションホイール変位値ＭＤを発生してＣＰＵ４に供給する。これら変位値ＢＶ，ＭＤは、後述するように、鍵盤１の押鍵に応じて発音されるピッチ（音高）を可変制御するために用いられる。
【００２０】
ＣＰＵ４は、スイッチ部２のスイッチ操作に応じて発生するスイッチイベントに基づき楽器各部の動作状態を設定したり、鍵盤１から供給される演奏情報に応じたノートオン・ノートオフ指示を発生し、これを後述するＲＡＭ７に記憶される各種パラメータと共に音源８に送出して楽音形成させる。また、ＣＰＵ４は上記ホイール操作子３から供給されるベンダ変位値ＢＶ，ＭＤに応じたピッチ制御（ピッチベンド、ビブラート）を音源８に指示する。本発明の要旨に係わるＣＰＵ４の処理動作については追って詳述する。
【００２１】
表示部５は、液晶表示パネルおよび駆動回路から構成され、ＣＰＵ４から供給される表示制御信号に応じて、例えばパラメータ設定状態や動作状態などを表示する。ＲＯＭ６は、プログラムエリアおよびデータエリアを備える。ＲＯＭ６のプログラムエリアには、上記ＣＰＵ４にロードされる各種制御プログラムが記憶される。
【００２２】
ここで言う各種制御プログラムとは、後述するメインルーチン、スイッチ・ホイール処理、鍵盤処理、ノートオン処理、ノートレジスタ解放処理、物理ＯＳＣ取得処理、ＯＳＣパラメータ設定処理、物理ＯＳＣ解放処理、ノートオフ処理、発音タイマ処理、オシレータ処理、エンベロープ処理、ピッチエンベロープ処理および累算処理を含む。これら各処理の動作については後述する。ＲＯＭ６のデータエリアには、音色パラメータや各種のアフタタッチテーブルＡＴＴＢＬが記憶される。ＲＯＭ６のデータエリアに記憶される音色パラメータの構成については後述する。
【００２３】
ＲＡＭ７は、ＣＰＵ４のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶する。ＲＡＭ７のワークエリアに格納される主要レジスタの構成については後述する。音源８は、ＣＰＵ４から供給されるコマンドおよびパラメータに応じた楽音波形を発生する。音源８の構成については追って詳述する。サウンドシステム９は、音源８から出力される楽音波形から不要ノイズを除去する等のフィルタリングを施した後、レベル増幅してスピーカから発音させる。ＭＩＤＩインタフェース１０は、ＣＰＵ４の制御の下で、外部のＭＩＤＩ楽器とＭＩＤＩデータを授受する。
【００２４】
（２）ＲＡＭ７の構成  
次に、図２〜図６を参照してＲＡＭ７に設けられる主要レジスタの構成を説明する。主要レジスタとは、オシレータパラメータレジスタ、スケジュールパラメータレジスタ、ノートパラメータレジスタ、物理・論理オシレータ対応パラメータレジスタおよび演奏パラメータレジスタからなる。
【００２５】
＜オシレータパラメータレジスタの構成＞  
図２（ａ）は、オシレータパラメータレジスタＰＲＯＳＣ［０］〜ＰＲＯＳＣ［６３］の構成を示す図である。オシレータパラメータレジスタＰＲＯＳＣ［０］〜ＰＲＯＳＣ［６３］は、それぞれ音源８が備える６４個の各オシレータ毎のパラメータを一時記憶する。オシレータパラメータは、フラグＲＵＮ、フラグＳｌａｖｅ、レジスタＬｎｋＯＳＣ、レジスタＡｄｒＯｆｓ、レジスタＣｕｒＡｄｒ、レジスタＥｎｄＡｄｒ、レジスタＬｏｏｐＡｄｒ、レジスタＰｉｔｃｈおよびレジスタＶａｌｕｅから構成される。
【００２６】
フラグＲＵＮは、オシレータを動作させる場合に「１」、非動作の場合に「０」となるフラグである。フラグＳｌａｖｅは、「１」の場合に別のオシレータのスレーブとして使用されることを表し、「０」の場合に不使用を表すフラグである。レジスタＬｎｋＯＳＣは、上記フラグＳｌａｖｅが「１」の場合、つまりスレーブとして動作する際に、マスタ側オシレータ番号を一時記憶する。レジスタＡｄｒＯｆｓには、スレーブとして動作する際の、マスタ側オシレータの波形読出しアドレスとの差分を表すオフセットアドレスが格納される。
【００２７】
レジスタＣｕｒＡｄｒには、現在の波形読出しアドレスが格納される。レジスタＥｎｄＡｄｒには、読出しエンドアドレスが格納される。レジスタＬｏｏｐＡｄｒには、波形をループ再生する際のスタートアドレスが格納される。レジスタＰｉｔｃｈには、オシレータをマスタとして動作させる場合に、１サンプリング周期毎にレジスタＣｕｒＡｄｒに加算する波形読出し位相（読出しピッチ）が格納される。レジスタＶａｌｕｅには、対応するオシレータの波形出力値が格納される。
【００２８】
＜スケジュールパラメータレジスタの構成＞  
図２（ｂ）は、スケジュールパラメータレジスタの構成を示す図である。スケジュールパラメータレジスタは、レジスタＳＳＡ［０］〜ＳＳＡ［６３］と、レジスタＳＳＢ［０］〜ＳＳＢ［６３］とに大別される。レジスタＳＳＢ［０］〜ＳＳＢ［６３］には、１サンプリング周期内に時分割に波形発生するオシレータの処理順序がＣＰＵ４により書き込まれる。
【００２９】
フラグＷＤＦは、ＣＰＵ４がレジスタＳＳＢ［０］〜ＳＳＢ［６３］にオシレータの処理順序を書き込み終えた時点で「１」にセットされる。フラグＷＤＦが「１」となった時点で、レジスタＳＳＢ［０］〜ＳＳＢ［６３］の内容がレジスタＳＳＡ［０］〜ＳＳＡ［６３］に転送される。後述する音源８は、このレジスタＳＳＡ［０］〜ＳＳＡ［６３］に転送される処理順序に従って１サンプリング周期内に各オシレータに対して時分割に波形発生させる。
【００３０】
＜ノートパラメータレジスタの構成＞  
図３は、ノートパラメータレジスタＮＲ［０］〜ＮＲ［６３］の構成を示す図である。ノートパラメータレジスタＮＲ［０］〜［６３］は、各発音チャンネル毎の楽音形成パラメータを一時記憶する。１つの発音チャンネルが備えるノートパラメータは、レジスタＬＯＳＣ［０］〜［７］、レジスタＯＫ、レジスタＦＴ、レジスタＰＫ、レジスタＰＰ、レジスタＰＩＬ、レジスタＰＡＲ、レジスタＰＡＬ、レジスタＰＤＲ、レジスタＰＳＬ、レジスタＰＲＲ、レジスタＰＲＬ、レジスタＰＥＳおよびレジスタＰＥＣＬから構成される。
【００３１】
１つの楽音を形成する発音チャンネルには、マスタオシレータと、これに従属する最大７つのスレーブオシレータとからなる都合８つの仮想的な論理オシレータがアサイン可能になっている。つまり、１つの発音チャンネルは、最大８つの論理オシレータを有する。レジスタＬＯＳＣ［０］〜［７］には、それぞれ論理オシレータパラメータが格納される。なお、論理オシレータの内、レジスタＬＯＳＣ［０］はマスタオシレータであり、レジスタＬＯＳＣ［１］〜［７］はスレーブオシレータである。論理オシレータパラメータは、フラグＵｓｅ、レジスタＡＯＮ、レジスタＴＣＬ、レジスタＡＩＬ、レジスタＡＡＲ、レジスタＡＡＬ、レジスタＡＤＲ、レジスタＡＳＬ、レジスタＡＲＲ、フラグＡＥＳ、レジスタＡＥＣＬおよびレジスタＡＴＴＮから構成される。
【００３２】
レジスタＬＯＳＣ［０］のマスタオシレータにおいて、フラグＵｓｅは「０」の場合に不使用を、「１」の場合に使用中を表す。一方、レジスタＬＯＳＣ［１］〜［７］のスレーブオシレータでは、フラグＵｓｅは「−１」、「０」、「１」、「２」の４つの状態のいずれかを取る。スレーブオシレータでは、フラグＵｓｅが「−１」の場合には、常に不使用状態であることを表す。フラグＵｓｅが「０」の場合には、物理オシレータとして割り当てられておらず発音処理に関与しないが、エンベロープ形成を進行させる状態を表す。なお、物理オシレータとは、音源８が備える６４個のオシレータの内から物理オシレータ番号で指定されるオシレータを指す。フラグＵｓｅが「１」の場合には、物理オシレータとして割り当てられて発音中にあり、エンベロープ形成する状態を表す。フラグＵｓｅが「２」の場合には、ノートオン直後の物理オシレータ割り当て待ち状態を表す。
【００３３】
レジスタＡＯＮには、割り当てられている物理オシレータの番号が格納される。なお、物理オシレータが割り当てられていない場合、レジスタＡＯＮには「−１」が格納される。レジスタＴＣＬには、音源８の増幅器８４（後述する）に供給する音量レベルが格納される。レジスタＡＩＬ〜レジスタＡＲＲには、図４に図示する周知のＡＤＳＬ型の音量制御用エンベロープ波形を発生させるエンベロープパラメータが格納される。
【００３４】
すなわち、図４に図示する通り、レジスタＡＩＬにはキーオン時点のイニシャルレベルＡＩＬが、レジスタＡＡＲにはアタックレートＡＡＲが、レジスタＡＡＬにはアタックレベルＡＡＬが、レジスタＡＤＲにはディケイレートＡＤＲが、レジスタＡＳＬにはサステインレベルＡＳＬが、レジスタＡＲＲにはキーオフ時点のリリースレートＡＲＲがそれぞれ格納される。
【００３５】
フラグＡＥＳは、音量制御用エンベロープ波形の進行に応じた状態変化を表すフラグであり、つまり停止状態では「０」、アタック領域では「１」、ディケイ領域では「２」、サステイン領域では「３」、リリース領域では「４」となる。レジスタＡＥＣＬには、上述したレジスタＡＩＬ〜レジスタＡＲＲに格納される各エンベロープパラメータに従って現在生成されている音量制御用エンベロープ波形の出力値が格納される。レジスタＡＴＴＮには、ＲＯＭ６に格納される各種のアフタタッチテーブルの内、参照するアフタタッチテーブルを指定するテーブル番号が格納される。
【００３６】
次に、レジスタＬＯＳＣ［０］〜［７］以降のノートパラメータについて説明する。レジスタＯＫには、音源８の波形メモリ８２から読み出す波形データの原ピッチを表すオリジナルキー（ノートナンバ）が格納される。レジスタＦＴには、発音ピッチを微調整する調整値が格納される。レジスタＰＫには、演奏キー（鍵盤１において押鍵された鍵の鍵番号）が格納される。レジスタＰＰには、発音時の読出し速度を表すピッチ変位が格納される。なお、レジスタＰＰに格納されるピッチ変位は、演奏キーＰＫ−オリジナルキーＯＫ＋調整値ＦＴ／１００の関係から算出され、その単位は「半音」である。
【００３７】
レジスタＰＩＬ〜レジスタＰＲＬには、図５に図示する形状のピッチ制御用エンベロープ波形を発生させるエンベロープパラメータが格納される。すなわち、図５に図示する通り、レジスタＰＩＬにはキーオン時点のイニシャルレベルＰＩＬが、レジスタＰＡＲにはアタックレートＰＡＲが、レジスタＰＡＬにはアタックレベルＰＡＬが、レジスタＰＤＲにはディケイレートＰＤＲが、レジスタＰＳＬにはサステインレベルＰＳＬが、レジスタＰＲＲにはキーオフ時点のリリースレートＰＲＲが、レジスタＰＲＬにはリリースレベルＰＲＬがそれぞれ格納される。フラグＰＥＳは、ピッチ制御用エンベロープ波形の進行に応じた状態変化を表すフラグであり、つまり停止状態では「０」、アタック領域では「１」、ディケイ領域では「２」、サステイン領域では「３」、リリース領域では「４」となる。レジスタＰＥＣＬには、上述したレジスタＰＩＬ〜レジスタＰＲＬに格納される各エンベロープパラメータに従って現在生成されているピッチ制御用エンベロープ波形の出力値が格納される。
【００３８】
＜物理・論理オシレータ対応パラメータレジスタの構成＞  
図６（ａ）は、物理・論理オシレータ対応パラメータレジスタの構成を示す図である。物理・論理オシレータ対応パラメータレジスタは、レジスタＰｈＯＳＣ［０］〜ＰｈＯＳＣ［６３］、レジスタＮＲＡＣおよびレジスタＯＡＣから構成される。レジスタＰｈＯＳＣ［０］〜ＰｈＯＳＣ［６３］には、物理オシレータ毎のアサイナパラメータが格納される。アサイナパラメータは、フラグＵｓｅ、レジスタＮＲＮおよびレジスタＬＯＮから構成される。
【００３９】
フラグＵｓｅは、物理オシレータが使用中であるか否かを表すフラグであり、「０」の場合に不使用を表し、「１」の場合に使用中を表す。レジスタＮＲＮには、物理オシレータを使用しているノートパラメータレジスタＮＲ［ｎ］の番号が格納される。レジスタＬＯＮには、論理オシレータ番号が格納される。論理オシレータ番号とは、上記ノートパラメータレジスタ番号ＮＲＮに対応するノートパラメータレジスタＮＲ［ＮＲＮ］（図３参照）にアサインされる論理オシレータ（ＬＯＳＣ［０］〜［７］）を指定する番号である。レジスタＮＲＡＣおよびレジスタＯＡＣはアサインカウンタであり、これが意図するところについては追って述べる。
【００４０】
＜演奏パラメータレジスタの構成＞  
図６（ｂ）は、演奏パラメータレジスタの構成を示す図である。演奏パラメータレジスタは、レジスタＢＶ、レジスタＢＲ、レジスタＬＰ、レジスタＭＤ、レジスタＶＤ、レジスタＬＲ、レジスタＣＡＴ［０］〜ＣＡＴ［１２７］およびレジスタＴＮから構成される。レジスタＢＶには、ベンダホイール３ａの操作に応じたベンダホイール変位量が格納される。レジスタＢＲには、スイッチ操作により設定されるベンドレンジ設定値が格納される。レジスタＬＰには、ＬＦＯの位相角が格納される。レジスタＭＤには、モジュレーションホイール３ｂの操作に応じたモジュレーションホイール変位量が格納される。レジスタＶＤには、スイッチ操作により設定されるビブラート深さ設定値が格納される。レジスタＬＲには、ＬＦＯレートが格納される。レジスタＣＡＴ［０］〜ＣＡＴ［１２７］には、鍵番号（あるいはノートナンバ）毎のアフタタッチレベルが格納される。レジスタＴＮには、音色選択スイッチの操作で選択される音色番号が格納される。
【００４１】
（３）音色パラメータの構成  
次に、図７を参照してＲＯＭ６のデータエリアに記憶される音色パラメータの構成を説明する。本実施形態では、ＲＯＭ６のデータエリアに１２８種の音色パラメータＴＰ［０］〜ＴＰ［１２７］を備える。１つの音色パラメータＴＰは、ＳｔａｒｔＡｄｒ、ＥｎｄＡｄｒ、ＬｏｏｐＡｄｒ、Ｐｉｔｃｈ、ＬＯＳＣ［０］〜［７］、ＯＫ、ＦＴ、ＰＩＬ、ＰＡＲ、ＰＡＬ、ＰＤＲ、ＰＳＬ、ＰＲＲおよびＰＲＬから構成される。
【００４２】
ＳｔａｒｔＡｄｒは、対応する音色の波形データのスタートアドレスである。ＥｎｄＡｄｒは、対応する音色の波形データのエンドアドレスである。ＬｏｏｐＡｄｒは、波形データをループ再生する際のスタートアドレスを表すループアドレスである。Ｐｉｔｃｈは、対応する音色の波形データのオリジナルピッチである。なお、対応する音色の波形データそのものは、音源８が備える波形メモリ８２（後述する）に記憶される。したがって、上記スタートアドレスＳｔａｒｔＡｄｒ、エンドアドレスＥｎｄＡｄｒおよびループアドレスＬｏｏｐＡｄｒは、波形メモリ８２のアドレス空間を指定する。
【００４３】
ＬＯＳＣ［０］〜［７］は、対応する音色に割り当てられた論理オシレータパラメータであり、ＬＯＳＣ［０］はマスタオシレータのパラメータ、ＬＯＳＣ［１］〜［７］はスレーブオシレータのパラメータを表す。論理オシレータパラメータは、Ｕｓｅ、ＡｄｒＯｆｓ、ＡＩＬ、ＡＡＲ、ＡＡＬ、ＡＤＲ、ＡＳＬ、ＡＲＲおよびＡＴＴＮから構成される。
【００４４】
Ｕｓｅは「−１」の場合に不使用を、「１」の場合に使用中を表す。ＡｄｒＯｆｓは、スレーブとして動作する際の、マスタ側オシレータの波形読出しアドレスとの差分を表すオフセットアドレスである。ＡＩＬ〜ＡＲＲは、図４に図示した音量制御用エンベロープ波形のエンベロープパラメータである。すなわち、図４に図示する通り、ＡＩＬはイニシャルレベル、ＡＡＲはアタックレート、ＡＡＬはアタックレベル、ＡＤＲはディケイレート、ＡＳＬはサステインレベル、ＡＲＲはリリースレートである。ＡＴＴＮは、ＲＯＭ６に格納される各種のアフタタッチテーブルの内、参照するアフタタッチテーブルを指定するテーブル番号である。
【００４５】
次に、論理オシレータパラメータＬＯＳＣ［０］〜［７］以降の音色パラメータについて説明する。ＯＫは、音源８の波形メモリ８２から読み出す波形データの原ピッチを表すオリジナルキー（ノートナンバ）である。ＦＴは、発音ピッチを微調整する調整値である。ＰＩＬ〜ＰＲＬは、図５に図示する形状のピッチ制御用エンベロープ波形のエンベロープパラメータである。すなわち、図５に図示する通り、ＰＩＬはイニシャルレベル、ＰＡＲはアタックレート、ＰＡＬはアタックレベル、ＰＤＲはディケイレート、ＰＳＬはサステインレベル、ＰＲＲはリリースレート、ＰＲＬはリリースレベルである。
【００４６】
（４）音源８の構成
次に、図８を参照して音源８の構成について説明する。音源８は周知のＤＳＰから構成される。したがって、図８はそのＤＳＰにおいて実行されるマイクロプログラムの各機能をハードウェアイメージとして捉らえた機能ブロックを図示している。音源８は、アドレス発生器８１、波形メモリ８２、補間器８３、増幅器８４、累算器８５およびＤ／Ａ変換器８６から構成される。
【００４７】
パラメータレジスタ８０は、ＣＰＵ４から供給される、６４個の各オシレータ毎のパラメータを一時記憶する。ここで言うパラメータとは、図２（ａ）に図示したオシレータパラメータレジスタＰＲＯＳＣ［０］〜ＰＲＯＳＣ［６３］、図２（ｂ）に図示したスケジュールパラメータレジスタおよび図７に図示した音色パラメータを含む。アドレス発生器８１は、パラメータレジスタ８０から読み出す各パラメータを参照して６４個の各オシレータ毎の波形読出しアドレスを発生する。波形メモリ８２は、各種音色の波形データを記憶しており、アドレス発生器８１から与えられる各オシレータ毎の波形読出しアドレスに応じて、各オシレータ毎の波形データを出力する。
【００４８】
補間器８３は、各オシレータ毎の波形データを補間出力する。補間出力とは、波形読出しアドレスの整数部に対応して読み出された波形データ（波形値）を、波形読出しアドレスの小数部で内挿補間する処理を指す。増幅器８４は、ＣＰＵ４から供給される音量制御用エンベロープ波形を、補間器８３から補間出力される各オシレータ毎の波形データに乗算してレベル制御する。累算器８５は、増幅器８４にてレベル制御された各オシレータ毎の波形データを加算合成して楽音波形データを形成する。Ｄ／Ａ変換器８６は、累算器８５から出力される楽音波形データを楽音波形信号にＤ／Ａ変換して出力する。
【００４９】
Ｂ．動作
次に、実施形態の動作を説明する。なお、上述した構成は、音源８がＣＰＵ４の指示に従って楽音形成するハードウェアイメージとして捉えたものであるが、実際には音源８のＤＳＰプログラム処理とＣＰＵ４のプログラム処理とが互いに連携して楽音形成する。その為、本動作説明では、説明の簡略化を図る観点からＣＰＵ４を動作主体とし、ＣＰＵ４が音源８のＤＳＰプログラム処理をも兼ねるものとして表現する。
【００５０】
以下では、図９〜図２６を参照してＣＰＵ４が実行するメインルーチン、スイッチ・ホイール処理、鍵盤処理、ノートオン処理、ノートレジスタ解放処理、物理ＯＳＣ取得処理、物理ＯＳＣ解放処理、ＯＳＣパラメータ設定処理、ノートオフ処理、発音タイマ処理、オシレータ処理、エンベロープ処理、ピッチエンベロープ処理および累算処理の各動作について述べる。
【００５１】
（１）メインルーチンの動作  
上記構成による電子楽器１００をパワーオンすると、ＣＰＵ４は図９に示すメインルーチンを実行してステップＳＡ１に処理を進め、ＲＡＭ７に格納される各種レジスタ／フラグ類をリセットしたり初期値セットする初期化を実行する。次いで、ステップＳＡ２では、スイッチ部２のスイッチ操作や、ホイール操作子３の操作に対応したスイッチ・ホイール処理を行う。
【００５２】
続いて、ステップＳＡ３では、鍵盤１の押離鍵操作に応じて音源８に発音／消音を指示する鍵盤処理を実行する。そして、ステップＳＡ４では、上記鍵盤処理と同様、ＭＩＤＩインタフェース１０を介して外部ＭＩＤＩ機器から入力されるノートオン・ノートオフイベントに応じて音源８に発音／消音を指示するＭＩＤＩ処理を実行する。次に、ステップＳＡ５では、例えばユーザ設定された動作状態を表示部５に表示する等の、その他の処理を実行した後、上記ステップＳＡ２に処理を戻す。以後、電子楽器１００がパワーオフされる迄、ステップＳＡ２〜ＳＡ５を繰り返す。
【００５３】
（２）スイッチ・ホイール処理の動作
図１０を参照してスイッチ・ホイール処理の動作について説明する。上述したメインルーチンのステップＳＡ２（図９参照）を介して本処理が実行されると、ＣＰＵ４はスイッチ部２やホイール操作子３の操作に応じたパラメータを設定する。すなわち、ステップＳＢ１では、スイッチ部２に配設される音色選択スイッチの操作により選択される音色番号をレジスタＴＮにストアする。レジスタＴＮは、前述した演奏パラメータレジスタ（図６（ｂ）参照）に設けられる。
【００５４】
次に、ステップＳＢ２では、ホイール操作子３のベンダホイール３ａから出力されるベンダホイール変位値をレジスタＢＶにストアする。レジスタＢＶは、前述した演奏パラメータレジスタ（図６（ｂ）参照）に設けられる。ステップＳＢ３では、スイッチ部２に配設されるベンド幅設定スイッチの操作により設定されるベンドレンジ設定値をレジスタＢＲにストアする。レジスタＢＲは、前述した演奏パラメータレジスタ（図６（ｂ）参照）に設けられる。続くステップＳＢ４では、ホイール操作子３のモジュレーションホイール３ｂから出力されるモジュレーションホイール設定値をレジスタＭＤにストアする。レジスタＭＤは、前述した演奏パラメータレジスタ（図６（ｂ）参照）に設けられる。
【００５５】
ステップＳＢ５では、スイッチ部２に配設されるビブラート深さ設定スイッチの操作により設定されるビブラート深さ設定値をレジスタＶＤにストアする。レジスタＶＤは、前述した演奏パラメータレジスタ（図６（ｂ）参照）に設けられる。次いで、ステップＳＢ６では、スイッチ部２に配設されるＬＦＯレート設定スイッチの操作により設定されるＬＦＯレート設定値をレジスタＬＲにストアする。レジスタＬＲは、前述した演奏パラメータレジスタ（図６（ｂ）参照）に設けられる。そして、ステップＳＢ７では、その他のスイッチ操作に対応した処理を実行して本処理を終える。
【００５６】
（３）鍵盤処理の動作
次に、図１１を参照して鍵盤処理の動作を説明する。上述したメインルーチンのステップＳＡ３（図９参照）を介して本処理が実行されると、ＣＰＵ４は図１１に図示するステップＳＣ１に進み、鍵盤１が発生する演奏情報に基づき、当該鍵盤１の押離鍵状態を判定する。押鍵された場合には、ステップＳＣ２に進み、押鍵された鍵の鍵番号をレジスタＫｅｙにストアしてから、ステップＳＣ３を介してノートオン処理（後述する）を実行した後、ステップＳＣ６に進む。離鍵された場合には、ステップＳＣ４に進み、離鍵された鍵の鍵番号をレジスタＫｅｙにストアしてから、ステップＳＣ５を介してノートオフ処理（後述する）を実行した後、ステップＳＣ６に進む。押離鍵操作が行われず、鍵変化が生じ無ければ、ステップＳＣ６に進む。
【００５７】
ステップＳＣ６では、一旦、レジスタＫｅｙをゼロリセットする。そして、ステップＳＣ７〜ＳＣ８では、フォーマット上許される鍵盤１の全鍵（１２８鍵）を走査するまでレジスタＫｅｙをインクリメントして歩進させながら、そのレジスタＫｅｙの値で指定される鍵番号のアフタタッチ値を、前述した演奏パラメータレジスタ（図６参照）中のレジスタＣＡＴ［Ｋｅｙ］にストアして本処理を完了させる。なお、鍵盤１において実際に対応する物理的な鍵が存在しない鍵番号Ｋｅｙについては、対応するレジスタＣＡＴ［Ｋｅｙ］に「０」をストアする。
【００５８】
（４）ノートオン処理の動作
次に、図１２〜図１３を参照してノートオン処理の動作について説明する。上述した鍵盤処理のステップＳＣ３（図１１参照）を介して本処理が実行されると、ＣＰＵ４はステップＳＤ１に進み、レジスタＮＲＡＣの値をレジスタＴｈｅＮＲにセットする。レジスタＮＲＡＣは、６４チャンネル分の発音チャンネルに発音割り当てを行う毎に、その次のチャンネル番号が設定されるカウンタであり、その値は「０」〜「６３」の範囲で巡回する。したがって、ステップＳＤ１では、次に発音割り当てを行う発音チャンネル（ノートパラメータレジスタＮＲに相当）の初期値として、レジスタＮＲＡＣの値がレジスタＴｈｅＮＲにセットされる。以後、レジスタＴｈｅＮＲに格納される値をノートパラメータレジスタ番号ＴｈｅＮＲと称す。
【００５９】
ステップＳＤ２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）が使用されていないかどうかを判断する。使用中（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ＝１）であると、判断結果が「ＮＯ」となり、ステップＳＤ３に進む。ステップＳＤ３では、ノートパラメータレジスタ番号ＴｈｅＮＲをインクリメントして歩進させる。なお、歩進されたノートパラメータレジスタ番号ＴｈｅＮＲが「６３」を超えたならば、ノートパラメータレジスタ番号ＴｈｅＮＲを「０」に戻す。次いで、ステップＳＤ４では、歩進されたノートパラメータレジスタ番号ＴｈｅＮＲがレジスタＮＲＡＣの値に一致するか否か、つまり一巡したかどうかを判断する。一巡していなければ、判断結果は「ＮＯ」になり、上記ステップＳＤ２に処理を戻す。
【００６０】
このように、ステップＳＤ２〜ＳＤ４では、一巡してレジスタＮＲＡＣの値に戻るまでノートパラメータレジスタ番号ＴｈｅＮＲを歩進させながら、ノートパラメータレジスタＮＲ［ＴｈｅＮＲ］から不使用のマスタオシレータ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ＝０）を探し出す。その過程で不使用のマスタオシレータが見つかると、上記ステップＳＤ２の判断結果が「ＹＥＳ」になり、後述のステップＳＤ６に進む。これに対し、不使用のマスタオシレータが見つからず、ノートパラメータレジスタ番号ＴｈｅＮＲが一巡してレジスタＮＲＡＣの値に戻ると、上記ステップＳＤ４の判断結果が「ＹＥＳ」になり、ステップＳＤ５に進む。
【００６１】
ステップＳＤ５では、後述するように、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられている論理オシレータ（マスタオシレータおよびスレーブオシレータ）に対応付けられた全ての物理オシレータの発音を停止させた後、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）を不使用にするノートレジスタ解放処理を実行する。次いで、ステップＳＤ６では、インクリメントして歩進させたノートパラメータレジスタ番号ＴｈｅＮＲをレジスタＮＲＡＣにストアする。但し、歩進させたノートパラメータレジスタ番号ＴｈｅＮＲが「６３」を超えた場合には、レジスタＮＲＡＣをゼロリセットする。
【００６２】
続いて、ステップＳＤ７では、音色選択スイッチ操作に応じてレジスタＴＮに格納された音色番号（以下、音色番号ＴＮと記す）により指定される音色パラメータＴＰ［ＴＮ］（図７参照）の内、音源８の波形メモリ８２から読み出す波形データの原ピッチを表すオリジナルキーＯＫ、発音ピッチを微調整する調整値ＦＴおよびピッチ制御用エンベロープ波形のエンベロープパラメータ（イニシャルレベルＰＩＬ、アタックレートＰＡＲ、アタックレベルＰＡＬ、ディケイレートＰＤＲ、サステインレベルＰＳＬ、リリースレートＰＲＲ、リリースレベルＰＲＬ）をＲＯＭ６のデータエリアから読み出し、これらをノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＯＫ、レジスタＦＴ、レジスタＰＩＬ、レジスタＰＡＲ、レジスタＰＡＬ、レジスタＰＤＲ、レジスタＰＳＬ、レジスタＰＲＲおよびレジスタＰＲＬにそれぞれストアする。
【００６３】
また、ステップＳＤ７では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、ピッチ制御用エンベロープ波形の進行に応じた状態変化を表すフラグＰＥＳに停止状態を表す値「０」をセットする。さらに、ステップＳＤ７では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、鍵盤１において押鍵された鍵の鍵番号Ｋｅｙを演奏キーとしてレジスタＰＫにストアする。
【００６４】
また、ステップＳＤ７では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、発音時の読出し速度を表すピッチ変位をレジスタＰＰにストアする。レジスタＰＰにストアされるピッチ変位は、（Ｋｅｙ−ＮＲ［ＴｈｅＮＲ］．ＯＫ）＋（ＮＲ［ＴｈｅＮＲ］．ＦＴ／１００）にて算出する。すなわち、押鍵された鍵の鍵番号Ｋｅｙから選択音色に対応してＲＯＭ６からコピーしたオリジナルキーＯＫを減算した値に、選択音色に対応してＲＯＭ６からコピーした調整値ＦＴ／１００を加算して半音単位で表されるピッチ変位ＰＰを算出する。次に、ステップＳＤ８では、論理オシレータを指定する論理オシレータ番号ＴｈｅＬＯＳＣに「０」をストアすると共に、物理オシレータ取得フラグＡｓｎＦｌｇに「０」をセットする。
【００６５】
続いて、図１３に図示するステップＳＤ９に進み、物理ＯＳＣ取得処理を実行する。後述するように、ノートオン処理下（物理オシレータ取得フラグＡｓｎＦｌｇが「０」）で実行される物理ＯＳＣ取得処理では、先ず不使用の物理オシレータがあれば、それを発音割り当て対象の物理オシレータとして取得する。一方、不使用の物理オシレータが無い場合には、使用中のスレーブオシレータを見つけて選択し、そのスレーブオシレータに対応付けられた物理オシレータの発音を停止させて一旦、不使用に設定した後、発音割り当て対象の物理オシレータとして取得する。さらに使用中のスレーブオシレータが存在しない場合には、使用中のマスタオシレータを選択し、そのマスタオシレータに対応付けられた物理オシレータの発音を停止させて一旦、不使用に設定した後、発音割り当て対象の物理オシレータとして取得する。つまり、マスタオシレータ（論理オシレータ番号ＴｈｅＬＯＳＣ＝０）の発音割り当ての対象となる物理オシレータが、必ず取得される。
【００６６】
次いで、ステップＳＤ１０では、上記ステップＳＤ９の発音割り当てによって物理オシレータと論理オシレータとの対応付けが変更されるのに伴い、１サンプリング周期内に時分割に波形発生するオシレータの処理順序を保持するレジスタＳＳＢ［０］〜ＳＳＢ［６３］（図２（ｂ）参照）の内容を更新すると共に、フラグＷＤＦに「１」をセットして更新終了を表す。なお、フラグＷＤＦが「１」となった時点で、レジスタＳＳＢ［０］〜ＳＳＢ［６３］の内容がＡバッファのレジスタＳＳＡ［０］〜ＳＳＡ［６３］に転送される。これにより、後述する発音タイマ処理（図２０参照）によって、レジスタＳＳＡ［０］〜ＳＳＡ［６３］にストアされる処理順序に従って１サンプリング周期内に各オシレータに対して時分割に波形発生させる。
【００６７】
次に、ステップＳＤ１１では、ＯＳＣパラメータ設定処理を実行する。ノートオン処理中に起動されるＯＳＣパラメータ設定処理では、後述するように、マスタオシレータとして動作する物理オシレータの波形発生態様を設定する。次いで、ステップＳＤ１２では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータパラメータＬＯＳＣ［ＴｈｅＬＯＳＣ］中のイニシャルレベルＡＩＬ、アタックレートＡＡＲ、アタックレベルＡＡＬ、ディケイレートＡＤＲ、サステインレベルＡＳＬおよびリリースレートＡＲＲをＲＯＭ６から読み出し、これら音量制御用エンベロープ波形（図４参照）のエンベロープパラメータを、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＩＬ〜レジスタＡＲＲにストアする。
【００６８】
また、ステップＳＤ１２では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータパラメータＬＯＳＣ［ＴｈｅＬＯＳＣ］中のアフタタッチテーブル番号ＡＴＴＮを、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＴＴＮにストアする。
【００６９】
さらに、ステップＳＤ１２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＡＥＳに「０」をセットし、音量制御用エンベロープ波形が停止状態であることを表す。
【００７０】
そして、ステップＳＤ１３では、論理オシレータ番号ＴｈｅＬＯＳＣをインクリメントして歩進させ、続くステップＳＤ１４では、歩進された論理オシレータ番号ＴｈｅＬＯＳＣが「７」を超えたか否か判断する。論理オシレータ番号ＴｈｅＬＯＳＣが「７」を超えていなければ、判断結果は「ＮＯ」になり、ステップＳＤ１５に進む。ステップＳＤ１５では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータパラメータＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＴＰ［ＴＮ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）が「−１」、つまり論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータが不使用であるかどうかを判断する。
【００７１】
論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータが不使用であれば、判断結果は「ＹＥＳ」になり、ステップＳＤ１６に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）に不使用を表す「−１」をセットする。この後、上述のステップＳＤ１３に処理を戻して論理オシレータ番号ＴｈｅＬＯＳＣを歩進させる。
【００７２】
一方、論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータが使用中であると、上記ステップＳＤ１５の判断結果は「ＮＯ」となり、ステップＳＤ１７に進む。ステップＳＤ１７では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）に「２」をセットしてノートオン直後の物理オシレータ割り当て待ち状態を表す。
【００７３】
この後、上述したステップＳＤ１２に処理を戻し、歩進された論理オシレータ番号ＴｈｅＬＯＳＣの論理オシレータに音量制御用エンベロープ波形（図４参照）のエンベロープパラメータを設定する。以後、論理オシレータ番号ＴｈｅＬＯＳＣが「７」を超えるまで、上述したステップＳＤ１２〜ＳＤ１７を繰り返す。そして、歩進された論理オシレータ番号ＴｈｅＬＯＳＣが「７」を超えると、ステップＳＤ１４の判断結果が「ＹＥＳ」になり、本処理を終える。
【００７４】
（５）ノートレジスタ解放処理の動作
次に、図１４を参照してノートレジスタ解放処理の動作を説明する。前述したノートオン処理のステップＳＤ５（図１２参照）、後述する物理ＯＳＣ取得処理のステップＳＦ９（図１６参照）あるいは後述するノートオフ処理のステップＳＪ５（図１９参照）を介して本処理が実行されると、ＣＰＵ４は図１４に図示するステップＳＥ１に進む。ステップＳＥ１では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）が使用されていないかどうかを判断する。不使用（フラグＵｓｅが「０」）であれば、判断結果は「ＹＥＳ」となり、この場合、ノートレジスタ解放の必要がない為、何も行わずに本処理を完了させる。
【００７５】
一方、使用中（フラグＵｓｅが「１」）の場合には、上記ステップＳＥ１の判断結果は「ＮＯ」になり、ステップＳＥ２に進み、ポインタｎをゼロリセットする。次いで、ステップＳＥ３では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているオシレータの内、ポインタｎで指定されるオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ｎ］．Ｕｓｅ）が使用されていないかどうかを判断する。
【００７６】
ここで、ポインタｎが「０」の場合、つまりポインタｎがマスタオシレータを指定する場合には、上記ステップＳＥ１においてマスタオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）は使用中（フラグＵｓｅが「１」）と判断されているので、このステップＳＥ３の判断結果は「ＹＥＳ」になり、ステップＳＥ４に進む。ステップＳＥ４では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているオシレータの内、ポインタｎで指定されるオシレータに対応付けられた物理オシレータ番号（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ｎ］．ＡＯＮ）をレジスタｋにストアする。以下、レジスタｋの値を物理オシレータ番号ｋと記す。
【００７７】
ステップＳＥ５では、物理オシレータ番号ｋ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ｎ］．ＡＯＮ）が「−１」、つまり物理オシレータが割り当てられていない状態であるかどうかを判断する。物理オシレータが割り当てられていない場合には、判断結果が「ＹＥＳ」になり、後述するステップＳＥ７に処理を進める。これに対し、物理オシレータが割り当てられていれば、上記ステップＳＥ５の判断結果は「ＮＯ」になり、ステップＳＥ６に進む。
【００７８】
ステップＳＥ６では、物理オシレータ番号ｋで指定される物理オシレータ（ｋ）の発音を停止させるとともに、図６（ａ）に図示する物理・論理オシレータ対応パラメータレジスタにおいて、物理オシレータ番号ｋで指定されるレジスタＰｈＯＳＣ［ｋ］中のフラグＵｓｅに「０」をセットして不使用状態に設定すると共に、図２（ａ）に図示するオシレータパラメータレジスタにおいて、物理オシレータ番号ｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のフラグＲＵＮに「０」をセットして非動作の状態に設定する。
【００７９】
次いで、ステップＳＥ７では、ポインタｎを歩進させ、続くステップＳＥ８では、歩進させたポインタｎが「７」を超えたかどうかを判断する。ポインタｎが「７」を超えていなければ、判断結果は「ＮＯ」になり、上述したステップＳＥ３に処理を戻す。以後、ポインタｎが「７」を超えるまで上記ステップＳＥ３〜ＳＥ８を繰り返すことによって、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられている使用中のマスタオシレータおよびスレーブオシレータに対応付けられた物理オシレータの発音を停止させる。
【００８０】
こうして、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられている論理オシレータ（マスタオシレータおよびスレーブオシレータ）に対応付けられた全ての物理オシレータの発音を停止させ終えると、上記ステップＳＥ８の判断結果が「ＹＥＳ」になり、ステップＳＥ９に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）を不使用に設定して本処理を終える。
【００８１】
（６）物理ＯＳＣ取得処理の動作
次に、図１５〜図１６を参照して物理ＯＳＣ取得処理の動作を説明する。前述したノートオン処理のステップＳＤ９（図１３参照）あるいは後述するエンベロープ処理のステップＳＭ１６（図２４参照）を介して本処理が実行されると、ＣＰＵ４は図１５に図示するステップＳＦ１に進む。ステップＳＦ１では、レジスタｓに初期値「−１」をストアすると共に、レジスタＯＡＣの値をレジスタＴｈｅＯＳＣにセットする。
【００８２】
レジスタＯＡＣは、６４チャンネル分の物理オシレータに発音割り当てを行う毎に、その次のチャンネル番号が設定されるカウンタであり、その値は「０」〜「６３」の範囲で巡回する。したがって、ステップＳＦ１では、発音割り当てを行う物理オシレータの初期値として、レジスタＯＡＣの値がレジスタＴｈｅＯＳＣにセットされる。以後、レジスタＴｈｅＯＳＣの内容を物理オシレータ番号ＴｈｅＯＳＣと称す。
【００８３】
次いで、ステップＳＦ２では、図６（ａ）に図示した物理・論理オシレータ対応パラメータレジスタにおいて、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のフラグＵｓｅ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）が「０」、つまり物理オシレータ番号ＴｈｅＯＳＣで指定される物理オシレータが不使用であるかどうかを判断する。使用中であると、判断結果は「ＮＯ」となり、ステップＳＦ３に進む。
【００８４】
ステップＳＦ３では、レジスタｓの値が初期値「−１」であって、しかも物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］中のレジスタＬＯＮの値が「０」でない場合、つまり物理オシレータ番号ＴｈｅＯＳＣで指定される物理オシレータに対応付けられた論理オシレータがスレーブオシレータであれば、レジスタｓに現在の物理オシレータ番号ＴｈｅＯＳＣをストアする。すなわち、スレーブオシレータとして使用されている物理オシレータが少なくとも１つ存在する場合には、その物理オシレータ番号がレジスタｓにストアされる。
【００８５】
続いて、ステップＳＦ４では、物理オシレータ番号ＴｈｅＯＳＣを歩進させる。なお、歩進させた物理オシレータ番号ＴｈｅＯＳＣが「６３」を超えた場合には、物理オシレータ番号ＴｈｅＯＳＣを「０」に戻す。そして、ステップＳＦ５では、歩進させた物理オシレータ番号ＴｈｅＯＳＣがレジスタＯＡＣの値に一致するか否か、つまり一巡したかどうかを判断する。一巡していなければ、判断結果は「ＮＯ」になり、上記ステップＳＦ２に処理を戻す。
【００８６】
このように、ステップＳＦ２〜ＳＦ５では、一巡してレジスタＯＡＣの値に戻るまで物理オシレータ番号ＴｈｅＯＳＣを歩進させながら、レジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］の内から不使用の物理オシレータ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ＝０）を探し出す。この過程で不使用の物理オシレータ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ＝０）が見つかると、上記ステップＳＦ２の判断結果が「ＹＥＳ」になり、図１６に図示するステップＳＦ１０に処理を進める。
【００８７】
ステップＳＦ１０では、インクリメントして歩進させた物理オシレータ番号ＴｈｅＯＳＣを、次回発音割り当て対象の物理オシレータ番号としてレジスタＯＡＣにストアして本処理を終える。すなわち、後述する物理オシレータ取得フラグＡｓｎＦｌｇの値にかかわらず、不使用の物理オシレータが見つかった場合は、その物理オシレータ番号がＴｈｅＯＳＣに設定された状態で本処理を終える。なお、歩進させた物理オシレータ番号ＴｈｅＯＳＣが「６３」を超えた場合には、レジスタＯＡＣを「０」に戻す。
【００８８】
一方、一巡してレジスタＯＡＣの値に戻るまで物理オシレータ番号ＴｈｅＯＳＣを歩進させても、不使用の物理オシレータ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ＝０）が見つからない場合、つまり全ての物理オシレータが使用中であると、上記ステップＳＦ５の判断結果が「ＹＥＳ」になり、図１６に図示するステップＳＦ６に進む。
【００８９】
ステップＳＦ６以降では、物理オシレータ取得フラグＡｓｎＦｌｇの値に応じて、発音割り当ての対象となる物理オシレータ番号を取得する。なお、物理オシレータ取得フラグＡｓｎＦｌｇは、前述したノートオン処理により「０」がセットされ、さらに後述のエンベロープ処理（図２４参照）において「１」又は「２」がセットされる。以下では、物理オシレータ取得フラグＡｓｎＦｌｇが「０」の場合、「１」の場合および「２」の場合に分けて動作を説明する。
【００９０】
＜物理オシレータ取得フラグＡｓｎＦｌｇが「０」の場合＞
物理オシレータ取得フラグＡｓｎＦｌｇが「０」であると、ステップＳＦ６からステップＳＦ７に進み、レジスタｓの値が初期値「−１」であるか否か、すなわち全ての物理オシレータがマスタオシレータとして使用されているかどうかを判断する。全ての物理オシレータがマスタオシレータとして使用されていると、判断結果は「ＹＥＳ」になり、ステップＳＦ８に進む。ステップＳＦ８では、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のノートパラメータレジスタ番号ＮＲＮ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．ＮＲＮ）を、ノートパラメータレジスタ番号ＴｈｅＮＲに設定する。
【００９１】
そして、ステップＳＦ９に進み、ノートレジスタ解放処理を実行する。前述したように、ノートレジスタ解放処理では、上記ステップＳＦ８にて設定されたノートパラメータレジスタ番号ＴｈｅＮＲにより指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられている論理オシレータ（マスタオシレータおよびスレーブオシレータ）に対応付けられた全ての物理オシレータの発音を停止させた後、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）を不使用にする。
【００９２】
ノートレジスタ解放処理が完了すると、ステップＳＦ１０に進み、インクリメントして歩進させた物理オシレータ番号ＴｈｅＯＳＣを、次回発音割り当て対象の物理オシレータ番号としてレジスタＯＡＣにストアして本処理を終える。なお、歩進させた物理オシレータ番号ＴｈｅＯＳＣが「６３」を超えた場合には、レジスタＯＡＣを「０」に戻す。
【００９３】
これに対し、少なくとも１つの物理オシレータがスレーブオシレータとして使用されていると、上述したステップＳＦ７の判断結果が「ＮＯ」になり、ステップＳＦ１２に進む。ステップＳＦ１２では、レジスタｓの物理オシレータ番号を、物理オシレータ番号ＴｈｅＯＳＣに設定する。
【００９４】
次いで、ステップＳＦ１３では、物理ＯＳＣ解放処理を実行する。後述するように、物理ＯＳＣ解放処理では、上記ステップＳＦ１２において設定された物理オシレータ番号ＴｈｅＯＳＣの物理オシレータの発音を停止させる一方、この発音停止に伴いノートパラメータレジスタＮＲの論理オシレータパラメータの内容（フラグＵｓｅおよびレジスタＡＯＮ）を更新し、この更新に対応して物理・論理オシレータ対応パラメータレジスタＰｈＯＳＣの内容（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）およびオシレータパラメータレジスタＰＲＯＳＣの内容（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＲＵＮ）を変更する。
【００９５】
そしてこの後、ステップＳＦ１０に進み、インクリメントして歩進させた物理オシレータ番号ＴｈｅＯＳＣを、次回発音割り当て対象の物理オシレータ番号としてレジスタＯＡＣにストアして本処理を終える。なお、歩進させた物理オシレータ番号ＴｈｅＯＳＣが「６３」を超えた場合には、レジスタＯＡＣを「０」に戻す。すなわち、物理オシレータ取得フラグＡｓｎＦｌｇが「０」の場合、スレーブオシレータとして使用されている物理オシレータが存在すれば、その物理オシレータ番号がＴｈｅＯＳＣに設定される一方、スレーブオシレータとして使用されている物理オシレータが存在しなければ、マスタオシレータとして使用されている物理オシレータの物理オシレータ番号がＴｈｅＯＳＣに設定される。つまり、発音割り当ての対象となる物理オシレータが必ず取得されることになる。
【００９６】
＜物理オシレータ取得フラグＡｓｎＦｌｇが「１」の場合＞
物理オシレータ取得フラグＡｓｎＦｌｇが「１」であると、ステップＳＦ６からステップＳＦ１１に進み、レジスタｓの値が初期値「−１」であるか否か、すなわち全ての物理オシレータがマスタオシレータとして使用されているかどうかを判断する。全ての物理オシレータがマスタオシレータとして使用されていると、判断結果は「ＹＥＳ」になり、ステップＳＦ１４に進み、物理オシレータ番号ＴｈｅＯＳＣを「−１」に設定して本処理を終える。すなわち、全ての物理オシレータがマスタオシレータとして使用されていれば、発音割り当ての対象となる物理オシレータ番号を取得せずに本処理を完了させる。
【００９７】
一方、上記ステップＳＦ１１の判断結果が「ＮＯ」の場合、すなわち少なくとも１つの物理オシレータがスレーブオシレータとして使用されていると、ステップＳＦ１２に進み、レジスタｓの物理オシレータ番号を、物理オシレータ番号ＴｈｅＯＳＣに設定する。次いで、ステップＳＦ１３では、上記ステップＳＦ１２において設定された物理オシレータ番号ＴｈｅＯＳＣの物理オシレータの発音停止を音源８に指示する一方、この発音停止に伴いノートパラメータレジスタＮＲの論理オシレータパラメータの内容（フラグＵｓｅおよびレジスタＡＯＮ）を更新し、この更新に対応して物理・論理オシレータ対応パラメータレジスタＰｈＯＳＣの内容（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）およびオシレータパラメータレジスタＰＲＯＳＣの内容（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＲＵＮ）を変更する物理ＯＳＣ解放処理を実行する。
【００９８】
そしてこの後、ステップＳＦ１０に進み、インクリメントして歩進させた物理オシレータ番号ＴｈｅＯＳＣを、次回発音割り当て対象の物理オシレータ番号としてレジスタＯＡＣにストアして本処理を終える。なお、歩進させた物理オシレータ番号ＴｈｅＯＳＣが「６３」を超えた場合には、レジスタＯＡＣを「０」に戻す。すなわち、物理オシレータ取得フラグＡｓｎＦｌｇが「１」の場合、スレーブオシレータとして使用されている物理オシレータが存在すれば、その物理オシレータ番号がＴｈｅＯＳＣに設定される一方、スレーブオシレータとして使用されている物理オシレータが存在しなければ、ＴｈｅＯＳＣには「−１」が設定される。つまり、スレーブオシレータとして使用されている物理オシレータが存在する場合にのみ、発音割り当ての対象となる物理オシレータが取得されることになる。
【００９９】
＜物理オシレータ取得フラグＡｓｎＦｌｇが「２」の場合＞
物理オシレータ取得フラグＡｓｎＦｌｇが「２」であると、ステップＳＦ６からステップＳＦ１４に進み、物理オシレータ番号ＴｈｅＯＳＣを「−１」に設定して本処理を終える。すなわち、全ての物理オシレータが使用されていると、発音割り当ての対象となる物理オシレータ番号を取得せずに本処理を完了させる。
【０１００】
（７）物理ＯＳＣ解放処理の動作
次に、図１７を参照して物理ＯＳＣ解放処理の動作を説明する。前述した物理ＯＳＣ取得処理のステップＳＦ１３（図１６参照）あるいは後述するエンベロープ処理のステップＳＭ１２（図２４参照）を介して本処理が実行されると、ＣＰＵ４は図１７に図示するステップＳＧ１に進む。ステップＳＧ１では、物理オシレータ番号ＴｈｅＯＳＣが「−１」、つまり前述した物理ＯＳＣ取得処理（図１５〜図１６参照）において物理オシレータ番号ＴｈｅＯＳＣを取得しない状態であるかどうかを判断する。物理オシレータ番号ＴｈｅＯＳＣを取得しない状態であると、判断結果は「ＹＥＳ」になり、何も行わずに本処理を終える。
【０１０１】
一方、物理オシレータ番号ＴｈｅＯＳＣが取得されていると、上記ステップＳＧ１の判断結果は「ＮＯ」になり、ステップＳＧ２に進む。ステップＳＧ２では、物理オシレータ番号ＴｈｅＯＳＣで指定される物理オシレータの発音を停止させる。また、ステップＳＧ２では、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のノートパラメータレジスタ番号ＮＲＮ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．ＮＲＮ）をレジスタｋ１にストアすると共に、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］の論理オシレータ番号ＬＯＮ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．ＬＯＮ）をレジスタｋ２にストアする。
【０１０２】
さらに、ステップＳＧ２では、レジスタｋ１のノートパラメータレジスタ番号ＮＲＮで指定されるノートパラメータレジスタＮＲ［ｋ１］において、レジスタｋ２の論理オシレータ番号ＬＯＮにて指定されるレジスタＬＯＳＣ［ｋ２］中のフラグＵｓｅ（ＮＲ［ｋ１］．ＬＯＳＣ［ｋ２］．Ｕｓｅ）に不使用を表す「０」をセットすると共に、レジスタＡＯＮ（ＮＲ［ｋ１］．ＬＯＳＣ［ｋ２］．ＡＯＮ）に「−１」をストアする。
【０１０３】
加えて、ステップＳＧ２では、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のフラグＵｓｅ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）に不使用を表す「０」をセットする一方、物理オシレータ番号ＴｈｅＯＳＣで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のフラグＲＵＮ（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＲＵＮ）に「０」をセットして物理オシレータ番号ＴｈｅＯＳＣの物理オシレータを非動作に設定する。
【０１０４】
このように、物理ＯＳＣ解放処理では、前述の物理ＯＳＣ取得処理により取得された物理オシレータ番号ＴｈｅＯＳＣの物理オシレータの発音を停止させると共に、この発音停止に応じてノートパラメータレジスタＮＲの論理オシレータパラメータの内容（フラグＵｓｅおよびレジスタＡＯＮ）を更新する一方、この更新に対応して物理・論理オシレータ対応パラメータレジスタＰｈＯＳＣの内容（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）およびオシレータパラメータレジスタＰＲＯＳＣの内容（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＲＵＮ）を変更する。
【０１０５】
（８）ＯＳＣパラメータ設定処理の動作  
次に、図１８を参照してＯＳＣパラメータ設定処理の動作を説明する。前述したノートオン処理のステップＳＤ１１（図１３参照）あるいは後述するエンベロープ処理のステップＳＭ１７（図２４参照）を介して本処理が実行されると、ＣＰＵ４は図１８に図示するステップＳＨ１に進む。ステップＳＨ１では、物理オシレータ番号ＴｈｅＯＳＣが「−１」、つまり前述した物理ＯＳＣ取得処理（図１５〜図１６参照）により物理オシレータ番号ＴｈｅＯＳＣを取得しない状態に設定されているかどうかを判断する。物理オシレータ番号ＴｈｅＯＳＣを取得しない状態に設定されていると、判断結果は「ＹＥＳ」になり、何も行わずに本処理を終える。
【０１０６】
一方、物理オシレータ番号ＴｈｅＯＳＣが取得されていると、上記ステップＳＨ１の判断結果は「ＮＯ」になり、ステップＳＨ２に進む。ステップＳＨ２では、図６（ａ）に図示した物理・論理オシレータ対応パラメータレジスタにおいて、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のフラグＵｓｅ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）に使用中を表す「１」をセットすると共に、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のレジスタＮＲＮ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．ＮＲＮ）にノートパラメータレジスタ番号ＴｈｅＮＲをストアする。
【０１０７】
また、ステップＳＨ２では、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰｈＯＳＣ［ＴｈｅＯＳＣ］のレジスタＬＯＮ（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．ＬＯＮ）に論理オシレータ番号ＴｈｅＬＯＳＣをストアする。さらに、ステップＳＨ２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）に使用中を表す「１」をセットする。
【０１０８】
加えて、ステップＳＨ２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＯＮ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＡＯＮ）に物理オシレータ番号ＴｈｅＯＳＣをストアする。
【０１０９】
こうして、物理ＯＳＣ取得処理にて取得された物理オシレータ番号ＴｈｅＯＳＣの物理オシレータを発音させるためのパラメータ設定が完了すると、ステップＳＨ３に進み、物理オシレータ番号ＴｈｅＯＳＣの物理オシレータに対応する論理オシレータ番号ＴｈｅＬＯＳＣが「０」、つまりマスタオシレータであるか否かを判断する。マスタオシレータである場合には、判断結果が「ＹＥＳ」になり、ステップＳＨ４に進む。
【０１１０】
ステップＳＨ４では、図２（ａ）に図示したオシレータパラメータレジスタＰＲＯＳＣにおいて、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のフラグＳｌａｖｅ（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．Ｓｌａｖｅ）に「０」をセットし、物理オシレータ番号ＴｈｅＯＳＣの物理オシレータがスレーブオシレータとして使われない旨を表す。
【０１１１】
また、ステップＳＨ４では、音色選択スイッチ操作に応じて選択された音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］中のスタートアドレスＳｔａｒｔＡｄｒを、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＣｕｒＡｄｒにストアする。
【０１１２】
さらに、ステップＳＨ４では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］中のエンドアドレスＥｎｄＡｄｒを、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＥｎｄＡｄｒにストアする。
【０１１３】
また、ステップＳＨ４では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］中のループアドレスＬｏｏｐＡｄｒを、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＬｏｏｐＡｄｒにストアする。
【０１１４】
加えて、ステップＳＨ４では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＰＰに格納されるピッチ変位（発音時の読出し速度）を、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＰｉｔｃｈにストアする。
【０１１５】
以上のようにして、マスタオシレータとして動作する物理オシレータの波形発生態様（選択された音色の波形データのスタートアドレスＳｔａｒｔＡｄｒ、エンドアドレスＥｎｄＡｄｒ、ループアドレスＬｏｏｐＡｄｒおよび読出し速度）が設定されると、ステップＳＨ６に進み、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のフラグＲＵＮに「１」をセットして本処理を終える。これにより、物理オシレータ番号ＴｈｅＯＳＣの物理オシレータがマスタオシレータとして、設定された波形発生態様に従って波形出力する。
【０１１６】
さて一方、物理オシレータ番号ＴｈｅＯＳＣの物理オシレータがスレーブオシレータとして動作する場合には、上記ステップＳＨ３の判断結果が「ＮＯ」になり、ステップＳＨ５に進む。ステップＳＨ５では、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のフラグＳｌａｖｅ（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．Ｓｌａｖｅ）に「１」をセットし、物理オシレータ番号ＴｈｅＯＳＣの物理オシレータがスレーブオシレータとして使用される旨を表す。
【０１１７】
また、ステップＳＨ５では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、マスタオシレータのレジスタＬＯＳＣ［０］中のレジスタＡＯＮ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．ＡＯＮ）に格納される物理オシレータ番号をマスタ側オシレータ番号として、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＬｎｋＯＳＣ（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＬｎｋＯＳＣ）にストアする。
【０１１８】
さらに、ステップＳＨ５では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定される論理オシレータパラメータＬＯＳＣ［ＴｈｅＬＯＳＣ］中のオフセットアドレスＡｄｒＯｆｓ（マスタ側オシレータの波形読出しアドレスとの差分）を、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＡｄｒＯｆｓにストアする。
【０１１９】
また、ステップＳＨ５では、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］中のエンドアドレスＥｎｄＡｄｒを、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＥｎｄＡｄｒにストアすると共に、音色番号ＴＮにて指定される音色パラメータＴＰ［ＴＮ］中のループアドレスＬｏｏｐＡｄｒを、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のレジスタＬｏｏｐＡｄｒにストアする。
【０１２０】
こうして、スレーブオシレータとして動作する物理オシレータの波形発生態様（マスタ側オシレータの波形読出しアドレスとの差分を表すオフセットアドレスＡｄｒＯｆｓ、エンドアドレスＥｎｄＡｄｒ、ループアドレスＬｏｏｐＡｄｒ）が設定されると、ステップＳＨ６に進み、物理オシレータ番号ＴｈｅＯＳＣで指定されるレジスタＰＲＯＳＣ［ＴｈｅＯＳＣ］のフラグＲＵＮに「１」をセットして本処理を終える。これにより、物理オシレータ番号ＴｈｅＯＳＣの物理オシレータがスレーブオシレータとして、設定された波形発生態様に従って波形出力する。
【０１２１】
（９）ノートオフ処理の動作
次に、図１９を参照してノートオフ処理の動作を説明する。前述した鍵盤処理のステップＳＣ５（図１１参照）を介して本処理が実行されると、ＣＰＵ４は図１９に図示するステップＳＪ１に進み、ノートパラメータレジスタ番号ＴｈｅＮＲをゼロリセットする。次いで、ステップＳＪ２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータが使用中（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ＝１）であって、しかもノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中の演奏キーＰＫが離鍵された鍵の鍵番号Ｋｅｙに一致するか否か、つまり消音すべき音であるかどうを判断する。
【０１２２】
消音すべき音でなければ、判断結果は「ＮＯ」になり、ステップＳＪ３に進み、ノートパラメータレジスタ番号ＴｈｅＮＲをインクリメントして歩進させる。そして、ステップＳＪ４では、歩進されたノートパラメータレジスタ番号ＴｈｅＮＲが「６３」を超えたか否か、すなわち検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「ＮＯ」になり、上記ステップＳＪ２に戻る。
【０１２３】
以後、消音すべき音を検索し終えるまでノートパラメータレジスタ番号ＴｈｅＮＲを歩進させながら、上記ステップＳＪ２〜ＳＪ４を繰り返す。そして、消音すべき音が見つからずに検索し終えると、上記ステップＳＪ４の判断結果が「ＹＥＳ」となり、本処理を終える。これに対し、消音すべき音が見つかると、上記ステップＳＪ２の判断結果が「ＹＥＳ」になり、ステップＳＪ５に進む。
【０１２４】
ステップＳＪ５では、前述したように、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられている論理オシレータ（マスタオシレータおよびスレーブオシレータ）に対応付けられた全ての物理オシレータの発音を停止させた後、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータのフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ）を不使用にするノートレジスタ解放処理（図１４参照）を実行して本処理を終える。
【０１２５】
（１０）発音タイマ処理の動作
発音タイマ処理（図２０参照）は、１サンプリング周期毎に割込み実行される処理であり、ステップＳＫ１のオシレータ処理、ステップＳＫ２のエンベロープ処理、ステップＳＫ３のピッチエンベロープ処理およびステップＳＫ４の累算処理から構成される。
【０１２６】
（１１）オシレータ処理の動作
次に、図２１〜図２２を参照してオシレータ処理の動作を説明する。上述した発音タイマ処理のステップＳＫ１（図２０参照）を介して本処理が実行されると、ＣＰＵ４は、図２１に図示するステップＳＬ１に進む。ステップＳＬ１では、図２（ｂ）に図示したスケジュールパラメータレジスタ中のフラグＷＤＦが「１」であるか否か、つまりレジスタＳＳＢ［０］〜ＳＳＢ［６３］に格納されるオシレータの処理順序が更新されたか否かを判断する。レジスタＳＳＢ［０］〜ＳＳＢ［６３］に格納されるオシレータの処理順序が更新されていなければ、判断結果は「ＮＯ」になり、後述するステップＳＬ３に進む。
【０１２７】
一方、レジスタＳＳＢ［０］〜ＳＳＢ［６３］に格納されるオシレータの処理順序が更新されていると、上記ステップＳＬ１の判断結果は「ＹＥＳ」になり、ステップＳＬ２に進む。ステップＳＬ２では、レジスタＳＳＢ［０］〜ＳＳＢ［６３］に格納される、１サンプリング周期内に時分割に波形発生するオシレータの処理順序を、レジスタＳＳＡ［０］〜ＳＳＡ［６３］にコピーすると共に、フラグＷＤＦをゼロリセットして次のステップＳＬ３に進む。
【０１２８】
ステップＳＬ３では、ポインタｎをゼロリセットする。次いで、ステップＳＬ４では、ポインタｎで指定されるレジスタＳＳＡ［ｎ］の値をレジスタｋにストアする。続いて、ステップＳＬ５では、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のフラグＲＵＮ（ＰＲＯＳＣ［ｋ］．ＲＵＮ）が「１」であるか否か、つまりレジスタＳＳＡ［ｎ］の値で指定される物理オシレータが動作中であるかどうかを判断する。動作中でなければ、判断結果は「ＮＯ」になり、図２２に図示するステップＳＬ１１に進み、ポインタｎをインクリメントして歩進させる。次いで、ステップＳＬ１２では、歩進されたポインタｎの値が「６３」を超えたかどうか、すなわち６４個の全てのオシレータについて波形生成し終えたかどうかを判断する。
【０１２９】
全てのオシレータについて波形生成し終えていないと、ここでの判断結果は「ＮＯ」になり、前述したステップＳＬ４に処理を戻し、歩進されたポインタｎで指定されるレジスタＳＳＡ［ｎ］の値をレジスタｋにストアする。そして、このレジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のフラグＲＵＮ（ＰＲＯＳＣ［ｋ］．ＲＵＮ）が「１」、つまりレジスタＳＳＡ［ｎ］の値で指定される物理オシレータが動作中であると、上記ステップＳＬ５の判断結果が「ＹＥＳ」になり、ステップＳＬ６に進む。
【０１３０】
ステップＳＬ６では、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のフラグＳｌａｖｅ（ＰＲＯＳＣ［ｋ］．Ｓｌａｖｅ）が「１」であるか否か、つまりレジスタＳＳＡ［ｎ］の値で指定される物理オシレータがスレーブオシレータとして使用されているかどうかを判断する。ＰＲＯＳＣ［ｋ］．Ｓｌａｖｅの値が「０」、つまりマスタオシレータとして使用されている場合には、ここでの判断結果は「ＮＯ」になり、図２２に図示するステップＳＬ７に進む。
【０１３１】
ステップＳＬ７では、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＣｕｒＡｄｒ（ＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒ）に格納される波形読出しアドレスに、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＰｉｔｃｈ（ＰＲＯＳＣ［ｋ］．Ｐｉｔｃｈ）に格納される波形読出し位相を加算してＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒの波形読出しアドレスを更新させた後、ステップＳＬ９に進む。
【０１３２】
一方、ＰＲＯＳＣ［ｋ］．Ｓｌａｖｅの値が「１」、つまりスレーブオシレータとして使用されている場合には、上記ステップＳＬ６の判断結果が「ＹＥＳ」になり、図２２に図示するステップＳＬ８に進む。ステップＳＬ８では、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のＬｎｋＯＳＣに格納されるマスタ側オシレータ番号をレジスタｒにストアする。
【０１３３】
また、ステップＳＬ８では、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＣｕｒＡｄｒ（ＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒ）に格納される波形読出しアドレスに、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＡｄｒＯｆｓ（ＰＲＯＳＣ［ｋ］．ＡｄｒＯｆｓ）に格納されるオフセットアドレス（マスタ側オシレータの波形読出しアドレスとの差分）を加算してＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒの波形読出しアドレスを更新させた後、ステップＳＬ９に進む。
【０１３４】
ステップＳＬ９では、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＣｕｒＡｄｒ（ＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒ）に格納される波形読出しアドレスが、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＥｎｄＡｄｒ（ＰＲＯＳＣ［ｋ］．ＥｎｄＡｄｒ）に格納されるエンドアドレスを超えた場合には、エンドアドレスを超えた分（ＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒ−ＰＲＯＳＣ［ｋ］．ＥｎｄＡｄｒ）を、ループアドレスＰＲＯＳＣ［ｋ］．ＬｏｏｐＡｄｒに加算し、それをＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒの波形読出しアドレスに設定する。
【０１３５】
次いで、ステップＳＬ１０では、波形読出しアドレスＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒのアドレス整数部をレジスタａ１に、そのアドレス整数部の次アドレスをレジスタａ２にそれぞれストアする。また、ステップＳＬ１０では、波形読出しアドレスＰＲＯＳＣ［ｋ］．ＣｕｒＡｄｒのアドレス小数部をレジスタｆにストアする。
【０１３６】
さらに、ステップＳＬ１０では、レジスタａ１のアドレスで読み出される波形値ＷａｖｅＤａｔａ［ａ１］と、レジスタａ２のアドレスで読み出される波形値ＷａｖｅＤａｔａ［ａ２］とをレジスタｆのアドレス小数部を用いて内挿補間（ＷａｖｅＤａｔａ［ａ１］×（１−ｆ）＋ＷａｖｅＤａｔａ［ａ２］×ｆ）を行い、これにて得られる波形値を、レジスタｋで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｋ］中のレジスタＶａｌｕｅにストアする。このようにして、全てのオシレータについて波形生成し終えると、上記ステップＳＬ１２の判断結果が「ＹＥＳ」になり、本処理を終える。
【０１３７】
（１２）エンベロープ処理の動作
次に、図２３〜図２４を参照してエンベロープ処理の動作を説明する。前述した発音タイマ処理のステップＳＫ２（図２０参照）を介して本処理が実行されると、ＣＰＵ４は、図２３に図示するステップＳＭ１に進み、ノートパラメータレジスタ番号ＴｈｅＮＲをゼロリセットする。次いで、ステップＳＭ２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータが使用中（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ＝１）であるか否かを判断する。
【０１３８】
ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータが不使用（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ＝０）であると、判断結果は「ＮＯ」になり、ステップＳＭ６に進み、ノートパラメータレジスタ番号ＴｈｅＮＲをインクリメントして歩進させる。そして、ステップＳＭ７では、歩進されたノートパラメータレジスタ番号ＴｈｅＮＲが「６３」を超えたか否か、つまりノートパラメータレジスタＮＲ［０］〜［６３］の内から使用中のマスタオシレータを検索し終えたかどうかを判断する。
【０１３９】
検索し終えていなければ、ステップＳＭ７の判断結果は「ＮＯ」になり、上述のステップＳＭ２に処理を戻して検索を継続する。そして、この検索により使用中のマスタオシレータが見つかると、上記ステップＳＭ２の判断結果が「ＹＥＳ」になり、ステップＳＭ３に進み、論理オシレータ番号ＴｈｅＬＯＳＣをゼロリセットする。
【０１４０】
次いで、ステップＳＭ４、ステップＳＭ８およびステップＳＭ９では、使用中のマスタオシレータが割り当てられたノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、常に不使用と設定されていないスレーブオシレータを探し出す。常に不使用と設定されていないスレーブオシレータでは、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）が「０」、「１」または「２」のいずれかに設定されるので、ステップＳＭ４の判断結果が「ＮＯ」になり、ステップＳＭ５に進む。
【０１４１】
ステップＳＭ５では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、常に不使用と設定されていないスレーブオシレータの論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＥＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＡＥＣＬ）に、現在生成されている音量制御用エンベロープ波形の出力値をストアする。
【０１４２】
また、ステップＳＭ５では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、常に不使用と設定されていないスレーブオシレータの論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＡＥＳ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＡＥＳ）に、現在生成されている音量制御用エンベロープ波形の進行状態を表す値（停止状態では「０」、アタック領域では「１」、ディケイ領域では「２」、サステイン領域では「３」、リリース領域では「４」）をセットする。
【０１４３】
さらに、ステップＳＭ５では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＰＫに格納される演奏キー（鍵操作された鍵の鍵番号）をレジスタｒ１にストアすると共に、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＴＴＮに格納されるアフタタッチテーブル番号をレジスタｒ２にストアする。
【０１４４】
また、ステップＳＭ５では、ＲＯＭ６のデータエリアに記憶されるアフタタッチテーブルＡＴＴＢＬの内、上記レジスタｒ２のアフタタッチテーブル番号で指定されるアフタタッチテーブルＡＴＴＢＬ［ｒ２］を参照してレジスタｒ１の演奏キーに対応したアフタタッチ値ＡＴＴＢＬ［ｒ２］［ｒ１］を発生する。
【０１４５】
加えて、ステップＳＭ５では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、常に不使用と設定されていないスレーブオシレータの論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＥＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＡＥＣＬ）に格納される、現在の音量制御用エンベロープ波形出力値にアフタタッチ値ＡＴＴＢＬ［ｒ２］［ｒ１］を加算してレジスタＬにストアする。なお、レジスタＬの値が「１２７」を超えた場合には最大値「１２７」に設定し、一方、レジスタＬの値が「０」より小さい場合には、最小値「０」に設定する。
【０１４６】
そしてこの後、図２４に図示するステップＳＭ１０に進み、レジスタＬの値が最小値「０」であるか否かを判断する。以下、レジスタＬの値が最小値「０」でない場合と、最小値「０」の場合とに分けて動作説明を進める。
【０１４７】
＜レジスタＬの値が最小値「０」でない場合＞
この場合、ステップＳＭ１０の判断結果は「ＮＯ」になり、ステップＳＭ１３に進む。ステップＳＭ１３では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）が「０」、「１」、「２」のいずれであるか判断する。以下、フラグＵｓｅが「０」、「１」、「２」の各場合に分けて動作を説明する。
【０１４８】
ａ．フラグＵｓｅが「０」の場合
フラグＵｓｅが「０」とは、論理オシレータ番号ＴｈｅＬＯＳＣのスレーブオシレータが、新たな発音により物理オシレータの地位を奪われ、物理オシレータとして割り当てられず発音処理に関与しない状態を表す。このような物理オシレータ再割り当て待ち状態の場合には、ステップＳＭ１４に進み、物理オシレータ取得フラグＡｓｎＦｌｇに「２」をセットした後、ステップＳＭ１６を介して前述した物理ＯＳＣ取得処理（図１５〜図１６参照）を実行する。物理ＯＳＣ取得処理では、前述したように、物理オシレータ取得フラグＡｓｎＦｌｇが「２」であると、不使用の物理オシレータが存在する場合はその物理オシレータ番号を、そうでない場合は「−１」を、ＴｈｅＯＳＣに設定する。
【０１４９】
この後、ステップＳＭ１７を介してＯＳＣパラメータ設定処理（図１８参照）を実行するが、前述したように、ＯＳＣパラメータ設定処理では、物理オシレータ番号ＴｈｅＯＳＣが「−１」、つまり物理オシレータ番号ＴｈｅＯＳＣを取得しない状態に設定されていると、何も行わずに処理を終える。すなわち、物理オシレータの再割り当ては行われない。
一方、物理オシレータ番号ＴｈｅＯＳＣが「−１」でない場合は、取得された物理オシレータ番号ＴｈｅＯＳＣの物理オシレータを発音させるためのパラメータ設定を行うと共に、スレーブオシレータとして動作する物理オシレータの波形発生態様（マスタ側オシレータの波形読み出しアドレスとの差分を表すオフセットアドレスＡｄｒＯｆｓ、エンドアドレスＥｎｄＡｄｒ、ループアドレスＬｏｏｐＡｄｒ）を設定する。これにより不使用の物理オシレータに対して再割り当てが行われ、発音が再開されることになる。そして、ステップＳＭ１８に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＴＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＴＣＬ）に、レジスタＬに格納される音量制御用エンベロープ波形出力値をストアした後、前述のステップＳＭ８（図２３参照）に処理を戻す。
【０１５０】
ｂ．フラグＵｓｅが「１」の場合
フラグＵｓｅが「１」とは、物理オシレータとして割り当てられて発音中にあり、エンベロープ形成する状態を表す。この場合には、ステップＳＭ１８に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＴＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＴＣＬ）に、レジスタＬに格納される音量制御用エンベロープ波形出力値をストアした後、前述のステップＳＭ８（図２３参照）に処理を戻す。
【０１５１】
ｃ．フラグＵｓｅが「２」の場合
フラグＵｓｅが「２」とは、ノートオン直後の物理オシレータ割り当て待ち状態を表す。この場合には、ステップＳＭ１５に進み、物理オシレータ取得フラグＡｓｎＦｌｇに「１」をセットした後、ステップＳＭ１６を介して前述した物理ＯＳＣ取得処理（図１５〜図１６参照）を実行する。
【０１５２】
物理ＯＳＣ取得処理では、前述したように、物理オシレータ取得フラグＡｓｎＦｌｇが「１」であると、不使用の物理オシレータが存在するならば、その物理オシレータ番号が優先的にＴｈｅＯＳＣに設定される。また、全ての物理オシレータがマスタオシレータとして使用されているならば、「−１」がＴｈｅＯＳＣに設定される。さらに、全ての物理オシレータが使用中であり、かつ、スレーブオシレータとして使用されている物理オシレータが存在するならば、そのスレーブオシレータの物理オシレータ番号がＴｈｅＯＳＣに設定される。その場合、物理ＯＳＣ解放処理（図１７参照）において、発音割り当て対象の物理オシレータ番号ＴｈｅＯＳＣにて指定される物理オシレータの発音を停止させ、この発音停止に伴いノートパラメータレジスタＮＲの論理オシレータパラメータの内容（フラグＵｓｅおよびレジスタＡＯＮ）を更新し、この更新に対応して物理・論理オシレータ対応パラメータレジスタＰｈＯＳＣの内容（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）およびオシレータパラメータレジスタＰＲＯＳＣの内容（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＲＵＮ）を変更する。
【０１５３】
そして、ステップＳＭ１７を介してＯＳＣパラメータ設定処理（図１８参照）を実行する。前述したように、ＯＳＣパラメータ設定処理では、上記ステップＳＭ１６の物理ＯＳＣ取得処理にて取得された物理オシレータ番号ＴｈｅＯＳＣが「−１」である場合には、物理オシレータの割り当てを行わない一方、ＴｈｅＯＳＣが「−１」でない場合には、物理オシレータを発音させるためのパラメータ設定を行うと共に、スレーブオシレータとして動作する物理オシレータの波形発生態様（マスタ側オシレータの波形読出しアドレスとの差分を表すオフセットアドレスＡｄｒＯｆｓ、エンドアドレスＥｎｄＡｄｒ、ループアドレスＬｏｏｐＡｄｒ）を設定する。
【０１５４】
この後、ステップＳＭ１８に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＴＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＴＣＬ）に、レジスタＬに格納される音量制御用エンベロープ波形出力値をストアした後、前述のステップＳＭ８（図２３参照）に処理を戻す。
【０１５５】
＜レジスタＬの値が最小値「０」の場合＞
レジスタＬの値が最小値「０」であると、上述したステップＳＭ１０の判断結果は「ＹＥＳ」になり、ステップＳＭ１１に進む。ステップＳＭ１１では、論理オシレータ番号ＴｈｅＬＯＳＣが「０」ではなく、かつノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のフラグＵｓｅ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．Ｕｓｅ）が「１」であるか否か、つまり物理オシレータが割り当てられている使用中のスレーブオシレータであるかどうかを判断する。
【０１５６】
マスタオシレータまたは物理オシレータが割り当てられていないスレーブオシレータであると、判断結果は「ＮＯ」になり、ステップＳＭ１８に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＴＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＴＣＬ）に、レジスタＬに格納される音量制御用エンベロープ波形出力値をストアした後、前述のステップＳＭ８（図２３参照）に処理を戻す。
【０１５７】
一方、物理オシレータが割り当てられている使用中のスレーブオシレータであれば、上記ステップＳＭ１１の判断結果が「ＹＥＳ」となり、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＡＯＮ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＡＯＮ）を物理オシレータ番号ＴｈｅＯＳＣに設定した後、ステップＳＭ１２を介して物理ＯＳＣ解放処理（図１７参照）を実行し、使用中のスレーブオシレータとなる物理オシレータ番号ＴｈｅＯＳＣの物理オシレータの発音を停止させると共に、この発音停止に応じてノートパラメータレジスタＮＲの論理オシレータパラメータの内容（フラグＵｓｅおよびレジスタＡＯＮ）を更新する一方、この更新に対応して物理・論理オシレータ対応パラメータレジスタＰｈＯＳＣの内容（ＰｈＯＳＣ［ＴｈｅＯＳＣ］．Ｕｓｅ）およびオシレータパラメータレジスタＰＲＯＳＣの内容（ＰＲＯＳＣ［ＴｈｅＯＳＣ］．ＲＵＮ）を変更する。
すなわち、音量制御用エンベロープ波形出力値Ｌが０に達したことによる発音停止に伴い、対応するスレーブオシレータのノートパラメータレジスタＮＲのフラグＵｓｅに０がセットされることにより、それまでスレーブオシレータに対応付けて割り当てられていた物理オシレータが解放され、再割り当て待ちの状態となる。
【０１５８】
そして、ステップＳＭ１８に進み、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、論理オシレータ番号ＴｈｅＬＯＳＣで指定されるレジスタＬＯＳＣ［ＴｈｅＬＯＳＣ］中のレジスタＴＣＬ（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［ＴｈｅＬＯＳＣ］．ＴＣＬ）に、レジスタＬに格納される音量制御用エンベロープ波形出力値をストアした後、前述のステップＳＭ８（図２３参照）に処理を戻す。
【０１５９】
（１３）ピッチエンベロープ処理の動作
次に、図２５を参照してピッチエンベロープ処理の動作を説明する。前述した発音タイマ処理のステップＳＫ３（図２０参照）を介して本処理が実行されると、ＣＰＵ４は、図２５に図示するステップＳＮ１に進む。ステップＳＮ１では、図６（ｂ）に図示した演奏パラメータレジスタ中のレジスタＬＰに格納されるＬＦＯ位相角と、レジスタＬＲに格納されるＬＦＯレートとに基づき、ＬＰ＋（ＬＲ／１２７）×２πの算出式にて現在のＬＦＯ位相角を算出してレジスタＬＰにストアする。
【０１６０】
また、ステップＳＮ１では、図６（ｂ）に図示した演奏パラメータレジスタ中のレジスタＢＶに格納されるベンダホイール変位量、レジスタＢＲに格納されるベンドレンジ設定値、レジスタＭＤに格納されるモジュレーションホイール変位量、レジスタＶＤに格納されるビブラート深さ設定値およびレジスタＬＰにストアした現在のＬＦＯ位相角に基づき、（（ＢＶ／１２７）×ＢＲ）＋（（ＭＤ／１２７）×ＶＤ×ｓｉｎ（ＬＰ））の算出式によってピッチ制御値ＰＣＶを算出し、ノートパラメータレジスタ番号ＴｈｅＮＲをゼロリセットする。
【０１６１】
次いで、ステップＳＮ２では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータが使用中（ＮＲ［ＴｈｅＮＲ］．ＬＯＳＣ［０］．Ｕｓｅ＝１）であるか否かを判断する。ここで、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］に割り当てられているマスタオシレータが使用中であると、判断結果が「ＹＥＳ」になり、ステップＳＮ３に進む。
【０１６２】
ステップＳＮ３では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＰＥＣＬ（ＮＲ［ＴｈｅＮＲ］．ＰＥＣＬ）に、現在生成されているピッチ制御用エンベロープ波形の出力値をストアすると共に、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のフラグＰＥＳ（ＮＲ［ＴｈｅＮＲ］．ＰＥＳ）に、現在生成されているピッチ制御用エンベロープ波形の進行状態を表す値（停止状態では「０」、アタック領域では「１」、ディケイ領域では「２」、サステイン領域では「３」、リリース領域では「４」）をセットする。
【０１６３】
また、ステップＳＮ３では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＰＫ（ＮＲ［ＴｈｅＮＲ］．ＰＫ）に格納される演奏キー（鍵操作された鍵の鍵番号）をレジスタｒ１にストアすると共に、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、レジスタＬＯＳＣ［０］中のレジスタＡＴＴＮに格納されるアフタタッチテーブル番号をレジスタｒ２にストアする。
【０１６４】
さらに、ステップＳＮ３では、ＲＯＭ６のデータエリアに記憶されるアフタタッチテーブルＡＴＴＢＬの内、上記レジスタｒ２のアフタタッチテーブル番号で指定されるアフタタッチテーブルＡＴＴＢＬ［ｒ２］を参照してレジスタｒ１の演奏キーに対応したアフタタッチ値ＡＴＴＢＬ［ｒ２］［ｒ１］を発生する。
【０１６５】
加えて、ステップＳＮ３では、上記ステップＳＮ１にて算出したピッチ制御値ＰＣＶと、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＰＰ（ＮＲ［ＴｈｅＮＲ］．ＰＰ）に格納されるピッチ変位（読み出し速度）と、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］中のレジスタＰＥＣＬ（ＮＲ［ＴｈｅＮＲ］．ＰＥＣＬ）に格納されるピッチ制御用エンベロープ波形出力値と、上記アフタタッチ値ＡＴＴＢＬ［ｒ２］［ｒ１］とを加算してレジスタＬにストアする。なお、レジスタＬの値が「１２７」を超えた場合には最大値「１２７」に設定し、一方、レジスタＬの値が「−１２８」より小さい場合には、最小値「−１２８」に設定する。
【０１６６】
また、ステップＳＮ３では、ノートパラメータレジスタ番号ＴｈｅＮＲで指定されるノートパラメータレジスタＮＲ［ＴｈｅＮＲ］において、レジスタＬＯＳＣ［０］中のレジスタＡＯＮに格納される物理オシレータ番号、つまりノートパラメータレジスタＮＲ［ＴｈｅＮＲ］のマスタオシレータとして使用される物理オシレータの番号をレジスタｒ１にストアする。
【０１６７】
さらに、ステップＳＮ３では、音色選択スイッチ操作に応じて選択された音色番号ＴＮで指定される音色パラメータＴＰ［ＴＮ］中のオリジナルピッチＰｉｔｃｈ（ＴＰ［ＴＮ］．Ｐｉｔｃｈ）に、「２」の（Ｌ／１２）乗値を乗算して波形読出し位相（読出しピッチ）を発生し、これをレジスタｒ１に格納される物理オシレータ番号で指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｒ１］のレジスタＰｉｔｃｈ（ＰＲＯＳＣ［ｒ１］．Ｐｉｔｃｈ）にストアする。
【０１６８】
この後、ステップＳＮ４に進み、ノートパラメータレジスタ番号ＴｈｅＮＲをインクリメントして歩進させる。そして、ステップＳＮ５では、歩進されたノートパラメータレジスタ番号ＴｈｅＮＲが「６３」を超えたか否か、すなわちノートパラメータレジスタＮＲ［０］〜［６３］の内から使用中のマスタオシレータを検索し終えたかどうかを判断する。検索の途中であると、判断結果は「ＮＯ」になり、上記ステップＳＮ２に処理を戻す。一方、ノートパラメータレジスタＮＲ［０］〜［６３］の内から使用中のマスタオシレータを検索し終えると、上記ステップＳＮ５の判断結果が「ＹＥＳ」となり、本処理を終える。
【０１６９】
（１４）累算処理の動作
次に、図２６を参照して累算処理の動作を説明する。前述した発音タイマ処理のステップＳＫ４（図２０参照）を介して本処理が実行されると、ＣＰＵ４は、図２６に図示するステップＳＯ１に進み、ポインタｎおよびレジスタＳＵＭをゼロリセットする。次いで、ステップＳＯ２では、図６（ａ）に図示した物理・論理オシレータ対応パラメータレジスタにおいて、ポインタｎで指定されるレジスタＰｈＯＳＣ［ｎ］中のフラグＵｓｅ（ＰｈＯＳＣ［ｎ］．Ｕｓｅ）が「１」、つまりポインタｎで指定される物理オシレータが使用中であるかどうかを判断する。不使用であると、判断結果は「ＮＯ」となり、後述のステップＳＯ４に進む。
【０１７０】
一方、ポインタｎで指定される物理オシレータが使用中であると、上記ステップＳＯ２の判断結果は「ＹＥＳ」になり、ステップＳＯ３に進む。ステップＳＯ３では、ポインタｎで指定されるレジスタＰｈＯＳＣ［ｎ］中のノートパラメータレジスタ番号ＮＲＮをレジスタｒ１に、ポインタｎで指定されるレジスタＰｈＯＳＣ［ｎ］中の論理オシレータ番号ＬＯＮをレジスタｒ２にそれぞれストアする。
【０１７１】
また、ステップＳＯ３では、レジスタｒ１のノートパラメータレジスタ番号ＮＲＮで指定されるノートパラメータレジスタＮＲ［ｒ１］において、レジスタｒ２の論理オシレータ番号ＬＯＮにて指定されるレジスタＬＯＳＣ［ｒ２］中のレジスタＴＣＬ（ＮＲ［ｒ１］．ＬＯＳＣ［ｒ２］．ＴＣＬ）に格納される音量レベルを、ポインタｎで指定されるオシレータパラメータレジスタＰＲＯＳＣ［ｎ］中のレジスタＶａｌｕｅに格納されるオシレータ波形出力値に乗算して得た出力波形値をレジスタＳｕｍに累算する。
【０１７２】
次いで、ステップＳＯ４では、ポインタｎをインクリメントして歩進させ、続くステップＳＯ５では、歩進されたポインタｎの値が「６３」を超えたか否かを判断する。ポインタｎの値が「６３」を超えていなければ、判断結果は「ＮＯ」となり、上記ステップＳＯ２に処理を戻す。以後、ポインタｎの値が「６３」を超えるまで上記ステップＳＯ２〜ＳＯ５を繰り返すことによって、全ての出力波形値の累算により楽音波形が形成される。そして、ポインタｎの値が「６３」を超えると、ステップＳＯ５の判断結果が「ＹＥＳ」になり、ステップＳＯ６においてレジスタＳｕｍの累算波形値の出力処理を行った後、本処理を終える。
【０１７３】
以上説明したように、本実施の形態では、楽音波形を発生する発音チャンネル毎に設けられ、マスタオシレータおよび少なくとも１つ以上のスレーブオシレータから構成される仮想的な論理オシレータと、これら論理オシレータに対応付けられ、実際に波形を発生する複数の物理オシレータとの対応関係を記憶しておく。そして、楽音波形を形成する過程に応じて、当該楽音波形を発生する発音チャンネルの論理オシレータに割り当てる物理オシレータを、記憶しておいた対応関係を参照して動的に確保又は解放する。
【０１７４】
論理オシレータに割り当てる物理オシレータを動的に確保又は解放するとは、具体的には次の通りである。
＜ノートオン時にマスタオシレータを割り当てる場合＞
「不使用の物理オシレータ」、「スレーブオシレータとして使用中の物理オシレータ」、「マスタオシレータで使用中の物理オシレータ」の優先順位でいずれかを選択する。「スレーブオシレータとして使用中の物理オシレータ」を選択した場合には、その選択した物理オシレータの発音を停止させて解放する。「マスタオシレータで使用中の物理オシレータ」を選択した場合には、その選択した物理オシレータを確保していた発音チャンネル全体の発音を停止させ、当該発音チャンネルの論理オシレータ（マスタオシレータおよびスレーブオシレータ）として対応付けられた全ての物理オシレータを解放する。
【０１７５】
＜ノートオン時にスレーブオシレータを割り当てる場合＞
「不使用の物理オシレータ」、「スレーブオシレータとして使用中の物理オシレータ」の優先順位で選択する。「スレーブオシレータとして使用中の物理オシレータ」を選択した場合には、その選択した物理オシレータの発音を停止させて解放する。全ての物理オシレータがマスタオシレータとして使用中の場合は、選択しない。
【０１７６】
＜発音中にスレーブオシレータを再割り当てする場合＞
「不使用の物理オシレータ」のみ選択する。全ての物理オシレータが論理オシレータとして使用されている場合は、選択しない。
【０１７７】
こうして、論理オシレータに割り当てる物理オシレータを動的に確保又は解放することにより、従来のように、発音するかどうかに関わらず、加算合成に用いる可能性のある全ての波形を同期再生しておく必要が無くなる結果、発音チャンネル（オシレータ）を無駄に浪費することなく波形発生することができるようになっている。
【０１７８】
また、本実施形態では、発生させる楽音の音色に応じて、マスタオシレータの波形読み出しアドレスと、スレーブオシレータの波形読み出しアドレスとを予めオフセットさせておく為、マスタオシレータが波形読み出しを行っている段階でスレーブオシレータを動作させても、マスタオシレータの波形読み出しアドレスに対し、オフセットに対応して修正された波形読み出しアドレスによりスレーブオシレータが波形再生するので、重ね合わせる波形同士の位相差を常に一定に保つことが出来、しかもＬＦＯやピッチベンド等によるピッチモジュレーションが常に同期し、かつ同じ変調幅を与え続けるができるようになっている。
【図面の簡単な説明】
【０１７９】
【図１】本発明による実施の一形態の構成を示すブロック図である。
【図２】オシレータパラメータレジスタＰＲＯＳＣ［０］〜ＰＲＯＳＣ［６３］およびスケジュールパラメータレジスタの構成を示す図である。
【図３】ノートパラメータレジスタＮＲ［０］〜ＮＲ［６３］の構成を示す図である。
【図４】音量制御用エンベロープ波形を説明するための波形図である。
【図５】ピッチ制御用エンベロープ波形を説明するための波形図である。
【図６】物理・論理オシレータ対応パラメータレジスタおよび演奏パラメータレジスタの構成を示す図である。
【図７】ＲＯＭ６に記憶される音色パラメータの構成を示す図である。
【図８】音源８の構成を示すブロック図である。
【図９】メインルーチンの動作を示すフローチャートである。
【図１０】スイッチ・ホイール処理の動作を示すフローチャートである。
【図１１】鍵盤処理の動作を示すフローチャートである。
【図１２】ノートオン処理の動作を示すフローチャートである。
【図１３】ノートオン処理の動作を示すフローチャートである。
【図１４】ノートレジスタ解放処理の動作を示すフローチャートである。
【図１５】物理ＯＳＣ取得処理の動作を示すフローチャートである。
【図１６】物理ＯＳＣ取得処理の動作を示すフローチャートである。
【図１７】物理ＯＳＣ解放処理の動作を示すフローチャートである。
【図１８】ＯＳＣパラメータ設定処理の動作を示すフローチャートである。
【図１９】ノートオフ処理の動作を示すフローチャートである。
【図２０】発音タイマ処理の動作を示すフローチャートである。
【図２１】オシレータ処理の動作を示すフローチャートである。
【図２２】オシレータ処理の動作を示すフローチャートである。
【図２３】エンベロープ処理の動作を示すフローチャートである。
【図２４】エンベロープ処理の動作を示すフローチャートである。
【図２５】ピッチエンベロープ処理の動作を示すフローチャートである。
【図２６】累算処理の動作を示すフローチャートである。
【符号の説明】
【０１８０】
１  鍵盤
２  スイッチ部
３  ホイール操作子
４  ＣＰＵ
５  表示部
６  ＲＯＭ
７  ＲＡＭ
８  音源
９  サウンドシステム
１０  ＭＩＤＩインタフェース
【図１】
0004614131.tif 000002
【図２】
0004614131.tif 000003
【図３】
0004614131.tif 000004
【図４】
0004614131.tif 000005
【図５】
0004614131.tif 000006
【図６】
0004614131.tif 000007
【図７】
0004614131.tif 000008
【図８】
0004614131.tif 000009
【図９】
0004614131.tif 000010
【図１０】
0004614131.tif 000011
【図１１】
0004614131.tif 000012
【図１２】
0004614131.tif 000013
【図１３】
0004614131.tif 000014
【図１４】
0004614131.tif 000015
【図１５】
0004614131.tif 000016
【図１６】
0004614131.tif 000017
【図１７】
0004614131.tif 000018
【図１８】
0004614131.tif 000019
【図１９】
0004614131.tif 000020
【図２０】
0004614131.tif 000021
【図２１】
0004614131.tif 000022
【図２２】
0004614131.tif 000023
【図２３】
0004614131.tif 000024
【図２４】
0004614131.tif 000025
【図２５】
0004614131.tif 000026
【図２６】
0004614131.tif 000027