(57)【特許請求の範囲】
【請求項１】
発音域を複数の音高域に分割し、分割された各音高域毎の波形データを記憶する波形記憶手段と、
第１の楽音の消音を指示した時に、発音指示中にある第２の楽音を検出する検出手段と、
前記検出手段により第２の楽音が検出された場合に、第１および第２の楽音の各音高が異なる音高域に含まれる場合には第１の再発音モードでの再発音を指示し、一方、同じ音高域に含まれる場合には第２の再発音モードでの再発音を指示する再発音指示手段と、
前記第１の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第１の読み出し開始アドレスと、前記第２の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第２の読み出し開始アドレスとを記憶するアドレス記憶手段と、
前記第１の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第１の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを通常エンベロープ波形よりも波形レベルの小さい第１のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第１のリトリガ発音手段と、
前記第２の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第２の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを前記通常エンベロープ波形よりも波形レベルの小さい第２のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第２のリトリガ発音手段と
を具備することを特徴とする楽音発生装置。
【請求項２】
前記検出手段は、第１の楽音の消音を指示した時に、発音指示中にある楽音が複数存在した場合、それらの中で最後に発音指示された楽音を第２の楽音として検出することを特徴とする請求項１記載の楽音発生装置。
【請求項３】
発音域を複数の音高域に分割し、分割された各音高域毎の波形データを記憶する波形記憶手段と、第１の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第１の読み出し開始アドレスと、第２の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第２の読み出し開始アドレスとを記憶するアドレス記憶手段と、を有するコンピュータに、
第１の楽音の消音を指示した時に、発音指示中にある第２の楽音を検出する検出処理と、
前記検出処理により第２の楽音が検出された場合に、第１および第２の楽音の各音高が異なる音高域に含まれる場合には前記第１の再発音モードでの再発音を指示し、一方、同じ音高域に含まれる場合には前記第２の再発音モードでの再発音を指示する再発音指示処理と、
前記第１の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第１の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを通常エンベロープ波形よりも波形レベルの小さい第１のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第１のリトリガ発音処理と、
前記第２の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第２の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを前記通常エンベロープ波形よりも波形レベルの小さい第２のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第２のリトリガ発音処理と
を実行させることを特徴とする楽音発生処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、管楽器や弦楽器を実際に演奏しているような不自然さの無いリトリガ奏法を実現する楽音発生装置および楽音発生処理プログラムに関する。
【背景技術】
【０００２】
従来より、単音のみしか発音しないようにするモノモード（ソロ機能）を備えた楽音発生装置が知られている。モノモードでは、複数の鍵が同時に押鍵された場合、それら押鍵の内から所定の優先順位に従って選択される１つの鍵に発音を割り当てる。このため、発音中に新たな押鍵があると、その発音中の音を消音させて新たな押鍵音を発生させるか、あるいは発音中の音を押鍵された鍵の音高に変更する、いわゆるレガート奏法となる。また、ある鍵を離鍵した時に、他に押鍵中の鍵が複数存在する場合には、押鍵されている複数の鍵の中から優先鍵（例えば押鍵されている鍵の内で最も音高の高い鍵）を選択し、選択した優先鍵の音を再発音する、いわゆるリトリガ発音となる。なお、モノモード（ソロ機能）においてレガート奏法やリトリガ発音を具現する楽音発生装置については、例えば特許文献１に開示されている。
【０００３】
【特許文献１】特開２００１−１２５５７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上述したリトリガ発音は、あるポジションの指を離した時に、残っている指の押さえ方で別の音程の音を発生する奏法、すなわち自然楽器における管楽器や弦楽器のリトリガ奏法をシミュレートするものと捉えることができる。実際、持続音を発音する管楽器では、比較的音量変化の無い滑らかな音程変化となり、一方、減衰音を発音する弦楽器であるギターの場合には、再発音の音量を大きくするために弦から指を離す時にプリングオフと呼ばれる奏法、つまり弦を弾きながら離す操作が多用される。プリングオフ奏法で再発音される音は、周知のピッキング音のようなノイズ成分を含まないものの、弦を引っ張ってからリリースすることから、ある程度のアタック感を備えた音となることが知られている。
【０００５】
さて一方、近年の楽音発生装置は波形メモリ読み出し方式で構成されることが多い。周知のように、波形メモリ読み出し方式では、発音域を幾つかの鍵域に分割し、分割した各鍵域毎のサンプル波形（原波形データ）を用意しておき、発音指示された鍵域のサンプル波形（原波形データ）を読み出して楽音形成する。したがって、上述したリトリガ発音時に、リトリガ発音される音とそれ以前に発音していた音とが同じ鍵域ならば、同じサンプル波形をそのまま使用できるが、リトリガ発音される音とそれ以前に発音していた音とが異なる鍵域であると、リトリガ発音される音を含む鍵域のサンプル波形を新たに読み出して楽音形成しなければならない。
【０００６】
つまり、波形メモリ読み出し方式の楽音発生装置でリトリガ発音動作を実現しようとすると、リトリガ発音の都度、音高、音色および音量を制御する各エンベロープジェネレータを再起動して楽音形成する必要が生じる。しかしながら、リトリガ発音の都度、エンベロープジェネレータを再起動して楽音形成する態様であると、上述したように、管楽器を演奏した時のような比較的音量変化の無い滑らかな音程変化や、ギターに代表される弦楽器を演奏した時の独特のアタック感を備えた音を得ることが出来ない。結局、以上の内容を換言すると、管楽器や弦楽器を実際に演奏しているような不自然さの無いリトリガ奏法を実現することが出来ないという問題がある。
【０００７】
本発明は、このような事情に鑑みてなされたもので、管楽器や弦楽器を実際に演奏しているような不自然さの無いリトリガ奏法を実現することができる楽音発生装置および楽音発生処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、請求項１に記載の発明では、発音域を複数の音高域に分割し、分割された各音高域毎の波形データを記憶する波形記憶手段と、第１の楽音の消音を指示した時に、発音指示中にある第２の楽音を検出する検出手段と、前記検出手段により第２の楽音が検出された場合に、第１および第２の楽音の各音高が異なる音高域に含まれる場合には第１の再発音モードでの再発音を指示し、一方、同じ音高域に含まれる場合には第２の再発音モードでの再発音を指示する再発音指示手段と、前記第１の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第１の読み出し開始アドレスと、前記第２の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第２の読み出し開始アドレスとを記憶するアドレス記憶手段と、前記第１の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第１の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを通常エンベロープ波形よりも波形レベルの小さい第１のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第１のリトリガ発音手段と、前記第２の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第２の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを前記通常エンベロープ波形よりも波形レベルの小さい第２のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第２のリトリガ発音手段とを具備することを特徴とする。
【０００９】
上記請求項１に従属する請求項２に記載の発明では、前記検出手段は、第１の楽音の消音を指示した時に、発音指示中にある楽音が複数存在した場合、それらの中で最後に発音指示された楽音を第２の楽音として検出することを特徴とする。
【００１１】
請求項３に記載の発明では、発音域を複数の音高域に分割し、分割された各音高域毎の波形データを記憶する波形記憶手段と、第１の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第１の読み出し開始アドレスと、第２の再発音モード下で前記波形記憶手段から第２の楽音を含む音高域の波形データを読み出すための第２の読み出し開始アドレスとを記憶するアドレス記憶手段と、を有するコンピュータに、第１の楽音の消音を指示した時に、発音指示中にある第２の楽音を検出する検出処理と、前記検出処理により第２の楽音が検出された場合に、第１および第２の楽音の各音高が異なる音高域に含まれる場合には前記第１の再発音モードでの再発音を指示し、一方、同じ音高域に含まれる場合には前記第２の再発音モードでの再発音を指示する再発音指示処理と、前記第１の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第１の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを通常エンベロープ波形よりも波形レベルの小さい第１のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第１のリトリガ発音処理と、前記第２の再発音モードでの再発音が指示された場合に、前記アドレス記憶手段に記憶される第２の読み出し開始アドレスに従って前記波形記憶手段から読み出される波形データを前記通常エンベロープ波形よりも波形レベルの小さい第２のエンベロープ波形で変調して形成した第２の楽音をリトリガ発音する第２のリトリガ発音処理とを実行させることを特徴とする。
【発明の効果】
【００１２】
本発明では、管楽器や弦楽器を実際に演奏しているような不自然さの無いリトリガ奏法を実現することができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．構成
（１）全体構成
図１は、本発明の実施の一形態である楽音発生装置１０の全体構成を示すブロック図である。楽音発生装置１０は、鍵盤１、ＭＩＤＩインタフェース２、スイッチ部３、ＣＰＵ４、ＲＯＭ５、ＲＡＭ６、音源７、Ｄ／Ａ変換器（ＤＡＣ）８およびサウンドシステム９を備える。鍵盤１は、押離鍵操作（演奏操作）に応じたキーオン／キーオフ信号、鍵番号およびベロシティ等からなる演奏情報を発生する。ＭＩＤＩインタフェース２は、ＣＰＵ４の制御の下に、例えばＭＩＤＩキーボードなどの外部ＭＩＤＩ装置とＭＩＤＩデータを授受する。
【００１４】
スイッチ部３は、装置電源をパワーオン／パワーオフする電源スイッチの他、例えば発生する楽音の音色を選択する音色選択スイッチなどの各種スイッチを備え、これらスイッチ操作に応じた種類のスイッチイベントを発生する。ＣＰＵ４は、スイッチ部３から供給される各種スイッチイベントに基づき装置各部の動作状態を設定する他、鍵盤１から供給される演奏情報（又はＭＩＤＩインタフェース２を介して外部ＭＩＤＩ装置から供給されるＭＩＤＩデータ）に基づき音源７に楽音発生を指示する。また、ＣＰＵ４では、管楽器や弦楽器を実際に演奏しているような不自然さの無いリトリガ奏法を実現するよう音源７を制御するようになっており、その詳細については追って述べる。
【００１５】
ＲＯＭ５は、上記ＣＰＵ４にロードされる各種制御プログラムや制御データ等を記憶する。ここで言う各種制御プログラムとは、後述するメインルーチン、エンベロープ処理、ノートオン処理およびノートオフ処理を含む。ＲＡＭ６は、ＣＰＵ４のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶する。ここで、図２を参照してＲＡＭ６に設けられる主要レジスタの構成を説明する。
【００１６】
図２において、レジスタｎｅｗ_ｋｅｙには、鍵盤１において新たに押鍵又は離鍵された鍵の鍵番号が一時記憶される。レジスタｃｕｒｒｅｎｔ_ｋｅｙには、現在発音中の鍵番号が一時記憶される。なお、無発音状態では、レジスタｃｕｒｒｅｎｔ_ｋｅｙには「−１」がストアされる。レジスタｋｅｙ_ｓｔａｔｕｓ[ｋｅｙ_ｎｕｍｂｅｒ]には、鍵番号ｋｅｙ_ｎｕｍｂｅｒの鍵のオンオフ状態を表す値（「１」の場合にオン、「０」の場合にオフ）が一時記憶される。
【００１７】
レジスタｃｕｒｒｅｎｔ_ｍｏｄｅには、現在発音中にある楽音の発音モードを表す値が一時記憶される。本実施形態では、「０」の場合に通常発音モード、「１」の場合に異スプリット・リトリガ発音モード、「２」の場合に同スプリット・リトリガ発音モードを表す。これら発音モードが意図するところについては追って述べる。レジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[ｃｕｒｒｅｎｔ_ｍｏｄｅ]には、現在の発音モードを表すレジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値で指定される波形読み出し開始アドレスが格納される。
【００１８】
すなわち、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「０」の通常発音モードであれば、レジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[０]に格納される通常読み出し開始アドレス（図７参照）が指定される。レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「１」の異スプリット・リトリガ発音モードであれば、レジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[１]に格納される異スプリット・リトリガ用読み出し開始アドレス（図７参照）が指定される。レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「２」の同スプリット・リトリガ発音モードであれば、レジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[２]に格納される同スプリット・リトリガ用読み出し開始アドレス（図７参照）が指定される。なお、図７に図示する各アドレスが意図するところについては追って述べる。
【００１９】
レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]には、後述する波形発生器７５に供給するエンベロープ波形のレベル値がストアされる。レベル値は、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値（現在の発音モード値）とブレークポイントｂｒｅａｋ_ｐｏｉｎｔとで定義される。
【００２０】
ブレークポイントｂｒｅａｋ_ｐｏｉｎｔは、ＡＤＳＲ型エンベロープにおける各波形ステップＬ０〜Ｌ５を表す値「０」〜「５」である。本実施形態におけるエンベロープ波形ステップは、例えば図６に図示するように定義される。すなわち、波形ステップＬ０は、初期ポイント（キーオン時点）のレベルを指す。波形ステップＬ１は、第１アタック・ブレーク・ポイントのレベルを指す。波形ステップＬ２は、第２アタック・ブレーク・ポイントのレベルを指す。波形ステップＬ３は、サステインレベルを指す。波形ステップＬ４は、第１リリース・ブレイク・ポイントのレベルを指す。波形ステップＬ５は、第２リリース・ブレイク・ポイントのレベルを指す。
【００２１】
レジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]には、後述する波形発生器７５に供給するエンベロープ波形のレート値がストアされる。レート値は、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値（現在の発音モード値）とブレークポイントｂｒｅａｋ_ｐｏｉｎｔとで定義される。
【００２２】
ブレークポイントｂｒｅａｋ_ｐｏｉｎｔは、ＡＤＳＲ型エンベロープにおける各波形ステップＲ１〜Ｒ５を表す値「１」〜「５」である。各波形ステップＲ１〜Ｒ５は、例えば図６に図示する通り、波形ステップＬ０から波形ステップＬ１までの区間が波形ステップＲ１、波形ステップＬ１から波形ステップＬ２までの区間が波形ステップＲ２、波形ステップＬ２から波形ステップＬ３までの区間が波形ステップＲ３、波形ステップＬ３から波形ステップＬ４までの区間が波形ステップＲ４、波形ステップＬ４から波形ステップＬ５までの区間が波形ステップＲ５となる。
【００２３】
レジスタｏｓｃ_ｅｎｖ_ｓｔｅｐには、後述する波形発生器７５に供給するエンベロープ波形のステップ状態を表す値、すなわち上述したブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される各波形ステップＬ０〜Ｌ５の値「０」〜「５」が一時記憶される。
【００２４】
レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]には、後述するフィルタ７７に供給するエンベロープ波形のレベル値がストアされる。レベル値は、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値（現在の発音モード値）とブレークポイントｂｒｅａｋ_ｐｏｉｎｔで定義される。ブレークポイントｂｒｅａｋ_ｐｏｉｎｔは、ＡＤＳＲ型エンベロープにおける各波形ステップＬ０〜Ｌ５を表す値「０」〜「５」である。
【００２５】
レジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]には、後述するフィルタ７７に供給するエンベロープ波形のレート値がストアされる。レート値は、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値（現在の発音モード値）とブレークポイントｂｒｅａｋ_ｐｏｉｎｔで定義される。ブレークポイントｂｒｅａｋ_ｐｏｉｎｔは、ＡＤＳＲ型エンベロープにおける各波形ステップＲ１〜Ｒ５を表す値「１」〜「５」である。
【００２６】
レジスタｆｉｌｔｅｒ_ｅｎｖ_ｓｔｅｐには、後述するフィルタ７７に供給するエンベロープ波形のステップ状態を表す値、すなわち上述したブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される各波形ステップＬ０〜Ｌ５の値「０」〜「５」が一時記憶される。
【００２７】
レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]には、後述する増幅器７９に供給するエンベロープ波形のレベル値がストアされる。レベル値は、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値（現在の発音モード値）とブレークポイントｂｒｅａｋ_ｐｏｉｎｔで定義される。ブレークポイントｂｒｅａｋ_ｐｏｉｎｔは、ＡＤＳＲ型エンベロープにおける各波形ステップＬ０〜Ｌ５を表す値「０」〜「５」である。
【００２８】
レジスタａｍｐ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]には、後述する増幅器７９に供給するエンベロープ波形のレート値がストアされる。レート値は、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値（現在の発音モード値）とブレークポイントｂｒｅａｋ_ｐｏｉｎｔで定義される。ブレークポイントｂｒｅａｋ_ｐｏｉｎｔは、ＡＤＳＲ型エンベロープにおける各波形ステップＲ１〜Ｒ５を表す値「１」〜「５」である。
【００２９】
レジスタａｍｐ_ｅｎｖ_ｓｔｅｐには、後述する増幅器７９に供給するエンベロープ波形のステップ状態を表す値、すなわち上述したブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される各波形ステップＬ０〜Ｌ５の値「０」〜「５」が一時記憶される。
【００３０】
次に、再び図１を参照して実施形態の構成について説明を進める。図１において、音源７は、周知の波形メモリ読み出し方式にて構成され、ＣＰＵ４から供給されるパラメータで指定される音色、音高および音量の楽音データＷを出力する。Ｄ／Ａ変換器８は、音源７から出力される楽音データＷをアナログ形式の楽音信号に変換して出力する。サウンドシステム９は、Ｄ／Ａ変換器８が出力する楽音信号から不要ノイズを除去する等のフィルタリングを施した後、これを増幅してスピーカから発音させる。
【００３１】
（２）音源７の構成
次に、図３を参照して音源７の構成について説明する。音源７は周知のＤＳＰから構成される。したがって、図３はそのＤＳＰにおいて実行されるマイクロプログラムの各機能をハードウェアイメージとして捉らえた機能ブロックを図示している。
【００３２】
図３において、ＥＧ７０は、ＣＰＵ４から与えられるパラメータ、すなわち上述したレジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]に格納されるレベル値と、レジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]に格納されるレート値とに応じて音高制御用のエンベロープ波形を発生する。
【００３３】
具体的には、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「０」の通常発音モードの場合には通常エンベロープ波形を、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「１」の異スプリット・リトリガ発音モードの場合には異スプリット・リトリガ・エンベロープ波形を、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「２」の同スプリット・リトリガ発音モードの場合には同スプリット・リトリガ・エンベロープ波形をそれぞれ発生する。
【００３４】
リトリガ発音とは、前述したように、ある鍵を離鍵した時に、他に押鍵中の鍵が存在する場合に押鍵されている鍵の中から優先鍵（例えば押鍵されている鍵の内で最も音高の高い鍵）を選択し、選択した優先鍵の音を再発音する動作を指すが、こうしたリトリガ発音の際に、リトリガ発音される音とそれ以前に発音していた音とが同じ鍵域ならば、同スプリット・リトリガ発音モードとなり、一方、リトリガ発音される音とそれ以前に発音していた音とが異なる鍵域であると、異スプリット・リトリガ発音モードとなる。
【００３５】
図４は、ＥＧ７０が発生する「通常エンベロープ波形」、「異スプリット・リトリガ・エンベロープ波形」および「同スプリット・リトリガ・エンベロープ波形」の一例を示す図である。この図に示す一例では、リトリガ発音時の音高変化を小さくするために通常エンベロープ波形よりも波形レベルを小さく設定している。また、同スプリット・リトリガ・エンベロープ波形では、同じ鍵域のサンプル波形（原波形データ）を使用する為、異なる鍵域のサンプル波形を使用する異スプリット・リトリガ・エンベロープ波形よりレベル変化を大きくしてある。
【００３６】
なお、図４において、Ｌ０〜Ｌ５は、前述したレジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]のブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される波形ステップを表す。また、Ｒ１〜Ｒ５は、前述したレジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]のブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される波形ステップを表す。
【００３７】
図３において、加算器７３はＣＰＵ４から供給される音高データに、ＥＧ７０から出力される音高制御用のエンベロープ波形を加算して波形発生器７５に供給する。波形メモリ７４は、各鍵域毎のサンプル波形（原波形データ）を記憶する。各鍵域毎のサンプル波形には、図７に図示するように、発音モード毎の読み出し開始アドレスが設けられる。
【００３８】
すなわち、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「０」の通常発音モードの場合には、通常読み出し開始アドレスからサンプル波形が読み出される。レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「１」の異スプリット・リトリガ発音モードの場合には、異スプリット・リトリガ用読み出し開始アドレスからサンプル波形が読み出される。レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「２」の同スプリット・リトリガ発音モードの場合には、同スプリット・リトリガ用読み出し開始アドレスからサンプル波形が読み出される。
【００３９】
発音モード毎の読み出し開始アドレスを設けた理由は次の通りである。リトリガ発音は、通常発音と比較してアタック音が小さい為、サンプル波形の立ち上がり部分であるアタック領域以降を読み出し開始アドレスに設定している。また、図７に図示する一例の場合、同スプリット・リトリガ発音では同じ鍵域のサンプル波形を使用する為、異なる鍵域のサンプル波形を使用する異スプリット・リトリガ発音よりもアタック部分を含む読み出し開始アドレスに設定している。
【００４０】
波形発生器７５は、ＣＰＵ４から供給されるパラメータ、すなわちレジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[ｃｕｒｒｅｎｔ_ｍｏｄｅ]で指定される読み出し開始アドレスに従って波形メモリ７４からサンプル波形（原波形データ）を、加算器７３の出力に応じた読み出し速度で読み出す。これにより指定音高の波形データが発生する。
【００４１】
ＥＧ７１は、ＣＰＵ４から与えられるパラメータ、すなわち上述したレジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]に格納されるレベル値と、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]に格納されるレート値とに応じて、音色制御用（カットオフ周波数制御用）のエンベロープ波形を発生する。
【００４２】
具体的には、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「０」の通常発音モードの場合には通常エンベロープ波形を、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「１」の異スプリット・リトリガ発音モードの場合には異スプリット・リトリガ・エンベロープ波形を、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「２」の同スプリット・リトリガ発音モードの場合には同スプリット・リトリガ・エンベロープ波形をそれぞれ発生する。
【００４３】
図５は、ＥＧ７１が発生する「通常エンベロープ波形」、「異スプリット・リトリガ・エンベロープ波形」および「同スプリット・リトリガ・エンベロープ波形」の一例を示す図である。この図に示す一例では、リトリガ発音時の音色変化を小さくするために通常エンベロープ波形よりも波形レベルを小さく設定している。また、同スプリット・リトリガ・エンベロープ波形では、同じ鍵域のサンプル波形（原波形データ）を使用する為、異なる鍵域のサンプル波形を使用する異スプリット・リトリガ・エンベロープ波形よりレベル変化を大きくしてある。
【００４４】
なお、図５において、Ｌ０〜Ｌ５は、前述したレジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]のブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される波形ステップを表す。また、Ｒ１〜Ｒ５は、前述したレジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]のブレークポイントｂｒｅａｋ_ｐｏｉｎｔで指定される波形ステップを表す。
【００４５】
図３において、加算器７６はＣＰＵ４から供給されるカットオフ周波数指定データに、ＥＧ７１から出力される音色制御用のエンベロープ波形を加算してフィルタ７７に供給する。フィルタ７７は、周知のＤＣＦ（デジタル制御フィルタ）から構成され、加算器７６の出力に応じて、ＤＣＦのカットオフ周波数を変調してローパス特性を変化させ、これにより前段の波形発生器７５から出力される波形データに音色変化を与える。
【００４６】
ＥＧ７２は、ＣＰＵ４から与えられるパラメータ、すなわち上述したレジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]に格納されるレベル値と、レジスタａｍｐ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ｂｒｅａｋ_ｐｏｉｎｔ]に格納されるレート値とに応じて、音量制御用のエンベロープ波形を発生する。
【００４７】
具体的には、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「０」の通常発音モードの場合には通常エンベロープ波形を、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「１」の異スプリット・リトリガ発音モードの場合には異スプリット・リトリガ・エンベロープ波形を、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「２」の同スプリット・リトリガ発音モードの場合には同スプリット・リトリガ・エンベロープ波形をそれぞれ発生する。
【００４８】
図６は、ＥＧ７２が発生する「通常エンベロープ波形」、「異スプリット・リトリガ・エンベロープ波形」および「同スプリット・リトリガ・エンベロープ波形」の一例を示す図である。この図に示す一例では、リトリガ発音時の音量変化を小さくするために通常エンベロープ波形よりも波形レベルを小さく設定している。また、同スプリット・リトリガ・エンベロープ波形では、同じ鍵域のサンプル波形（原波形データ）を使用する為、異なる鍵域のサンプル波形を使用する異スプリット・リトリガ・エンベロープ波形よりレベル変化を大きくしてある。
【００４９】
図３において、加算器７８はＣＰＵ４から供給される音量データに、ＥＧ７２から出力される音量制御用のエンベロープ波形を加算して増幅器７９に供給する。増幅器７９は、加算器７８の出力に応じて増幅率を可変制御して前段のフィルタ７７から供給される波形データに音量変化を与えて楽音データＷを発生する。
【００５０】
Ｂ．動作
次に、図８〜図１４を参照して実施形態の動作を説明する。以下では、全体動作としてＣＰＵ４が実行するメインルーチンの動作を説明した後、タイマ割り込みにより所定周期毎に実行されるエンベロープ処理、メインルーチンからコールされるノートオン処理およびノートオフ処理の各動作について述べる。
【００５１】
（１）メインルーチンの動作
図８は、ＣＰＵ４が実行するメインルーチンの動作を示すフローチャートである。上述した構成による楽音発生装置１０がパワーオンされると、ＣＰＵ４は図８に示すメインルーチンのステップＳＡ１に処理を進め、ＲＡＭ６に格納される各種レジスタ／フラグ類をリセットしたり、初期値セットする他、音源７に対して各種レジスタ・フラグを初期化するよう指示するイニシャライズを実行する。
【００５２】
そして、イニシャライズが完了すると、ステップＳＡ２に処理を進め、スイッチ部３のスイッチ操作に対応したスイッチ処理を行う。このスイッチ処理では、例えば音色選択スイッチの操作により選択される音色の楽音を発生させるパラメータ、例えば選択された音色のサンプル波形（原波形データ）を指定するデータや、フィルタ７７のカットオフ周波数を指定するデータ等を音源７にセットする。次いで、ステップＳＡ３では、鍵イベントの有無を判断する。鍵盤１で押離鍵操作が行われず、鍵イベントが発生しなければ、上述のステップＳＡ２に処理を戻す。
【００５３】
一方、鍵盤１の押鍵によりキーオンイベントが生じた場合には、ステップＳＡ４を介してノートオン処理（後述する）を実行した後、上記ステップＳＡ２に処理を戻す。鍵盤１の離鍵によりキーオフイベントが生じた場合には、ステップＳＡ５に進み、離鍵された鍵の音高で発音している楽音を消音したり、リトリガ発音を音源７に指示したりするノートオフ処理を実行した後、上記ステップＳＡ２に処理を戻す。以後、楽音発生装置１０がパワーオフされる迄、上述したステップＳＡ２〜ＳＡ５を繰り返す。
【００５４】
（２）エンベロープ処理の動作
図９〜図１０は、タイマ割り込みによってＣＰＵ４が所定周期毎に実行するエンベロープ処理の動作を示すフローチャートである。割り込みタイミングになると、ＣＰＵ４は先ず図９に図示するステップＳＢ１〜ＳＢ５においてＥＧ７０（図３参照）に目標レベル値と目標レート値をセットして音高制御用のエンベロープ波形の発生を指示する。
【００５５】
続いて、ステップＳＢ６〜ＳＢ１０では、ＥＧ７１に目標レベル値と目標レート値をセットして音色制御用（カットオフ周波数制御用）のエンベロープ波形の発生を指示する。そして、図１０に図示するステップＳＢ１１〜ＳＢ１５では、ＥＧ７２に目標レベル値と目標レート値とをセットして音量制御用のエンベロープ波形を発生する。以下、音高、音色および音量をそれぞれ制御するエンベロープ波形別の動作に分けて説明を進める。
【００５６】
＜音高制御用のエンベロープ波形の発生＞
ステップＳＢ１では、ＥＧ７０の目標レベル値が「０」であるか否かを判断する。目標レベル値が「０」ならば、判断結果は「ＹＥＳ」となり、後述のステップＳＢ６に進むが、目標レベル値が「０」でなければ、上記ステップＳＢ１の判断結果は「ＮＯ」となり、ステップＳＢ２に進む。ステップＳＢ２では、レジスタｏｓｃ_ｅｎｖ_ｓｔｅｐに格納されるステップ値が「３」、つまりサステイン状態でないかどうかを判断する。サステイン状態であると、判断結果は「ＮＯ」になり、後述のステップＳＢ６に進むが、サステイン状態以外ならば、判断結果は「ＹＥＳ」になり、次のステップＳＢ３に進む。
【００５７】
ステップＳＢ３では、レジスタｏｓｃ_ｅｎｖ_ｓｔｅｐに格納されるステップ値が「５」、つまり第２リリース・ブレーク・ポイント（最終状態）でないかどうかを判断する。最終状態であると、判断結果は「ＮＯ」になり、後述のステップＳＢ６に進むが、最終状態以外ならば、判断結果が「ＹＥＳ」になり、次のステップＳＢ４に進み、レジスタｏｓｃ_ｅｎｖ_ｓｔｅｐに格納されるステップ値をインクリメントして歩進させる。
【００５８】
次いで、ステップＳＢ５では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅに格納され、現在の発音モードを表す値と、上記ステップＳＢ４にて歩進されたレジスタｏｓｃ_ｅｎｖ_ｓｔｅｐのステップ値とで指定されるレベル値を、レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ ｏｓｃ_ｅｎｖ_ｓｔｅｐ]から読み出し、これをＥＧ７０の目標レベル値に設定する。
【００５９】
また、ステップＳＢ５では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値と、上記ステップＳＢ４にて歩進されたレジスタｏｓｃ_ｅｎｖ_ｓｔｅｐのステップ値とで指定されるレート値を、レジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ ｏｓｃ_ｅｎｖ_ｓｔｅｐ]から読み出し、これをＥＧ７０の目標レート値に設定する。これにより、ＥＧ７０は、現在のレベル値から目標レベル値に達するまで目標レート値に従って変化するエンベロープ波形を発生する。
【００６０】
＜音色制御用（カットオフ周波数制御用）のエンベロープ波形の発生＞
ステップＳＢ６では、ＥＧ７１の目標レベル値が「０」であるか否かを判断する。目標レベル値が「０」ならば、判断結果は「ＹＥＳ」となり、図１０に図示するステップＳＢ１１（後述する）に進むが、目標レベル値が「０」でなければ、上記ステップＳＢ６の判断結果は「ＮＯ」となり、ステップＳＢ７に進む。ステップＳＢ７では、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｓｔｅｐに格納されるステップ値が「３」、つまりサステイン状態でないかどうかを判断する。サステイン状態であると、判断結果は「ＮＯ」になり、後述のステップＳＢ１１に進むが、サステイン状態以外ならば、判断結果は「ＹＥＳ」になり、次のステップＳＢ８に進む。
【００６１】
ステップＳＢ８では、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｓｔｅｐに格納されるステップ値が「５」、つまり第２リリース・ブレーク・ポイント（最終状態）でないかどうかを判断する。最終状態であると、判断結果は「ＮＯ」になり、後述のステップＳＢ１１に進むが、最終状態以外ならば、判断結果が「ＹＥＳ」になり、次のステップＳＢ９に進み、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｓｔｅｐに格納されるステップ値をインクリメントして歩進させる。
【００６２】
次いで、ステップＳＢ１０では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値と、上記ステップＳＢ９にて歩進されたレジスタｆｉｌｔｅｒ_ｅｎｖ_ｓｔｅｐのステップ値とで指定されるレベル値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ ｏｓｃ_ｅｎｖ_ｓｔｅｐ]から読み出し、これをＥＧ７１の目標レベル値に設定する。
【００６３】
また、ステップＳＢ１０では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値と、上記ステップＳＢ９にて歩進されたレジスタｆｉｌｔｅｒ_ｅｎｖ_ｓｔｅｐのステップ値とで指定されるレート値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ ｏｓｃ_ｅｎｖ_ｓｔｅｐ]から読み出し、これをＥＧ７１の目標レート値に設定する。これにより、ＥＧ７１は、現在のレベル値から目標レベル値に達するまで目標レート値に従って変化するエンベロープ波形を発生する。
【００６４】
＜音量制御用のエンベロープ波形の発生動作＞
図１０に図示するステップＳＢ１１では、ＥＧ７２の目標レベル値が「０」であるか否かを判断する。目標レベル値が「０」ならば、判断結果は「ＹＥＳ」となり、本処理を終えるが、目標レベル値が「０」でなければ、上記ステップＳＢ１１の判断結果は「ＮＯ」となり、ステップＳＢ１２に進む。ステップＳＢ１２では、レジスタａｍｐ_ｅｎｖ_ｓｔｅｐに格納されるステップ値が「３」、つまりサステイン状態でないかどうかを判断する。サステイン状態であると、判断結果は「ＮＯ」になり、本処理を終えるが、サステイン状態以外ならば、判断結果は「ＹＥＳ」になり、次のステップＳＢ１３に進む。
【００６５】
ステップＳＢ１３では、レジスタａｍｐ_ｅｎｖ_ｓｔｅｐに格納されるステップ値が「５」、つまり第２リリース・ブレーク・ポイント（最終状態）でないかどうかを判断する。最終状態であると、判断結果は「ＮＯ」になり、本処理を終えるが、最終状態以外ならば、判断結果が「ＹＥＳ」になり、次のステップＳＢ１４に進み、レジスタａｍｐ_ｅｎｖ_ｓｔｅｐに格納されるステップ値をインクリメントして歩進させる。
【００６６】
次いで、ステップＳＢ１５では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値と、上記ステップＳＢ１４にて歩進されたレジスタａｍｐ_ｅｎｖ_ｓｔｅｐのステップ値とで指定されるレベル値を、レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ ｏｓｃ_ｅｎｖ_ｓｔｅｐ]から読み出し、これをＥＧ７２の目標レベル値に設定する。
【００６７】
また、ステップＳＢ１５では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値と、上記ステップＳＢ１４にて歩進されたレジスタａｍｐ_ｅｎｖ_ｓｔｅｐのステップ値とで指定されるレート値を、レジスタａｍｐ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][ ｏｓｃ_ｅｎｖ_ｓｔｅｐ]から読み出し、これをＥＧ７２の目標レート値に設定する。これにより、ＥＧ７２は、現在のレベル値から目標レベル値に達するまで目標レート値に従って変化するエンベロープ波形を発生する。
【００６８】
（３）ノートオン処理の動作
図１１は、ノートオン処理の動作を示すフローチャートである。前述したメインルーチンのステップＳＡ４（図８参照）を介して本処理が実行されると、ＣＰＵ４は図１１に図示するステップＳＣ１に進み、押鍵された鍵の鍵番号をレジスタｎｅｗ_ｋｅｙにストアする。なお、複数の鍵が同時に押鍵された場合には、後着優先にて発音割り当てを行い、発音割り当てされた鍵の鍵番号をレジスタｎｅｗ_ｋｅｙにストアする。続いて、ステップＳＣ２では、レジスタｎｅｗ_ｋｅｙにストアされた鍵番号で指定されるレジスタｋｅｙ_ｓｔａｔｕｓ[ｎｅｗ_ｋｅｙ]に「１」をストアする。これにより、新たに押鍵された鍵がオン状態に設定されたことを表す。
【００６９】
次いで、ステップＳＣ３では、レジスタｃｕｒｒｅｎｔ_ｋｅｙの値が「−１」、すなわち現在発音中の楽音が無い無発音状態であるか否かを判断する。無発音状態ならば、判断結果は「ＹＥＳ」となり、後述のステップＳＣ５に進む。一方、発音中の楽音があると、上記ステップＳＣ３の判断結果が「ＮＯ」になり、ステップＳＣ４に進み、発音中の楽音を停止するよう音源７に指示した後、ステップＳＣ５に進み、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅに「０」をストアして通常発音モードであることを表す。
【００７０】
そして、ステップＳＣ６では、レジスタｎｅｗ_ｋｅｙの内容、すなわち押鍵された鍵の鍵番号をレジスタｃｕｒｒｅｎｔ_ｋｅｙにストアする。続いて、ステップＳＣ７では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値で指定されるレジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[ｃｕｒｒｅｎｔ_ｍｏｄｅ]から通常読み出しアドレスを読み出して波形発生器７５にセットする。そして、ステップＳＣ８では、レジスタｃｕｒｒｅｎｔ_ｋｅｙの鍵番号に対応した音高データを波形発生器７５に設定する。
【００７１】
次いで、ステップＳＣ９では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「０」とで指定されるレベル値を、レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][０]から読み出してＥＧ７０の現在レベル値に設定する。そして、ステップＳＣ１０では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレベル値を、レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７０の目標レベル値に設定する。
【００７２】
ステップＳＣ１１では、発生楽音の音色に応じたフィルタ係数（カットオフ周波数指定データ）を初期値としてフィルタ７７に設定する。続いて、ステップＳＣ１２では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「０」とで指定されるレベル値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][０]から読み出してＥＧ７１の現在レベル値に設定する。そして、ステップＳＣ１３では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレベル値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７１の目標レベル値に設定する。
【００７３】
ステップＳＣ１４では、発生楽音の音色に応じた乗算係数（増幅率）を初期値として増幅器７９に設定する。続いて、ステップＳＣ１５では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「０」とで指定されるレベル値を、レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][０]から読み出してＥＧ７２の現在レベル値に設定する。そして、ステップＳＣ１６では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレベル値を、レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７２の目標レベル値に設定する。
【００７４】
こうして、ＥＧ７０〜７２の各々の現在レベル値および目標レベル値を設定し終えると、ステップＳＣ１７に進み、波形発生器７５に波形読み出し開始を指示する。これにより、波形発生器７５は、押鍵された鍵の音高に対応する読み出し速度に従って波形メモリ７４の通常読み出しアドレス（図７参照）からサンプル波形（原波形データ）を読み出す。
【００７５】
次いで、ステップＳＣ１８では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレート値を、レジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７０の目標レート値に設定する。この結果、ＥＧ７０は現在レベル値から目標レベル値に達するまで目標レート値に従って変化する音高制御用のエンベロープ波形を発生する。
【００７６】
続いて、ステップＳＣ１９では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレート値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７１の目標レート値に設定する。この結果、ＥＧ７１は現在レベル値から目標レベル値に達するまで目標レート値に従って変化する音色制御用のエンベロープ波形を発生する。
【００７７】
そして、ステップＳＣ２０では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレート値を、レジスタａｍｐ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７２の目標レート値に設定して本処理を終える。この結果、ＥＧ７２は現在レベル値から目標レベル値に達するまで目標レート値に従って変化する音量制御用のエンベロープ波形を発生する。
【００７８】
なお、以上のようにして、ＥＧ７０〜７２が音高、音色および音量を制御するエンベロープ波形を発生し始めた後は、前述したエンベロープ処理によって各エンベロープ波形の進行が制御される。
【００７９】
（４）ノートオフ処理の動作
図１２〜図１３は、ノートオフ処理の動作を示すフローチャートである。前述したメインルーチンのステップＳＡ５（図８参照）を介して本処理が実行されると、ＣＰＵ４は図１２に図示するステップＳＤ１に進み、離鍵された鍵の鍵番号をレジスタｎｅｗ_ｋｅｙにストアし、続くステップＳＤ２では、レジスタｎｅｗ_ｋｅｙにストアされた鍵番号で指定されるレジスタｋｅｙ_ｓｔａｔｕｓ[ｎｅｗ_ｋｅｙ]に「０」をストアする。これにより、新たに離鍵された鍵がオフ状態に設定されたことを表す。
【００８０】
次いで、ステップＳＤ３では、レジスタｃｕｒｒｅｎｔ_ｋｅｙの値が「−１」、すなわち現在発音中の楽音が無い無発音状態であるか否かを判断する。無発音状態ならば、判断結果は「ＹＥＳ」となり、本処理を終える。一方、発音中の楽音があると、上記ステップＳＤ３の判断結果が「ＮＯ」になり、ステップＳＤ４に進む。
【００８１】
ステップＳＤ４〜ＳＤ６では、ポインタｉを「０」〜「１２７」まで歩進させながら、レジスタｋｅｙ_ｓｔａｔｕｓ[ｉ]＝１の鍵番号、すなわち押鍵中の鍵番号ｉを検索する。押鍵中の鍵番号ｉが検索されると、ステップＳＤ５の判断結果が「ＹＥＳ」になり、ステップＳＤ７に進む。なお、押鍵中の鍵番号が複数検索された場合には、その中で最も音高が高い鍵番号を優先的に選択する。また、押鍵中の鍵番号が検索されず、ポインタｉを「１２７」まで歩進させた場合もステップＳＤ６（ループ終了端）を経てステップＳＤ７に進む。
【００８２】
そして、ステップＳＤ７では、ポインタｉが「１２８」であるか否か、すなわち押鍵中の鍵番号を検索することが出来なかったかどうかを判断する。押鍵中の鍵番号を検索できなかった場合には、判断結果が「ＹＥＳ」になり、ステップＳＤ８に進む。ステップＳＤ８では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「４」とで指定されるレベル値を、レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][４]から読み出してＥＧ７０の目標レベル値に、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][４]から読み出してＥＧ７１の目標レベル値に、レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][４]から読み出してＥＧ７２の目標レベル値にそれぞれ設定する。
【００８３】
次いで、ステップＳＤ９では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「４」とで指定されるレート値を、レジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][４]から読み出してＥＧ７０の目標レート値に、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][４]から読み出してＥＧ７１の目標レート値に、レジスタａｍｐ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][４]から読み出してＥＧ７２の目標レート値にそれぞれ設定して本処理を終える。
【００８４】
一方、上記ステップＳＤ７の判断結果が「ＮＯ」の場合、すなわち押鍵中の鍵番号ｉを検索し得た場合には、リトリガ発音させる為、図１３に図示するステップＳＤ１０に進む。ステップＳＤ１０では、レジスタｎｅｗ_ｋｅｙにストアされ、離鍵された鍵の鍵番号に対応した音高の楽音を消音するよう音源７に指示すると共に、上記ステップＳＤ４〜ＳＤ６にて検索された押鍵中の鍵番号ｉを、リトリガ発音する鍵番号としてレジスタｎｅｗ_ｋｅｙにストアする。
【００８５】
次いで、ステップＳＤ１１では、離鍵された鍵の鍵番号と、レジスタｎｅｗ_ｋｅｙにストアした鍵番号ｉとが同じ鍵域であるか否かを判断する。例えば図１４に図示するように１オクターブ毎に鍵域分割された鍵域２において「１」（Ｆ４音）、「２」（Ｂ４音）の順に押鍵し、「２」（Ｂ４音）を離鍵した場合には、同じ鍵域でのリトリガ発音となるので、上記ステップＳＤ１１の判断結果は「ＹＥＳ」になり、ステップＳＤ１２に進み、同スプリット・リトリガ発音モードを表す値「２」をレジスタｃｕｒｒｅｎｔ_ｍｏｄｅにストアする。
【００８６】
これに対し、例えば図１４に図示する鍵域２の「１」（Ｆ４音）、鍵域３の「３」（Ｅ３音）の順に押鍵し、鍵域３の「３」（Ｅ３音）を離鍵した場合には、異なる鍵域でのリトリガ発音となるので、上記ステップＳＤ１１の判断結果は「ＮＯ」になり、ステップＳＤ１３に進み、異スプリット・リトリガ発音モードを表す値「１」をレジスタｃｕｒｒｅｎｔ_ｍｏｄｅにストアする。
【００８７】
このようにして、同スプリット・リトリガ発音モード（又は異スプリット・リトリガ発音モード）が決定されると、ステップＳＤ１４に進み、レジスタｎｅｗ_ｋｅｙのリトリガ発音する鍵番号ｉを、レジスタｃｕｒｒｅｎｔ_ｋｅｙにストアする。そして、ステップＳＤ１５に進み、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「２」ならば、レジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[ｃｕｒｒｅｎｔ_ｍｏｄｅ]から同スプリット・リトリガ用読み出し開始アドレス（図７参照）を読み出して波形発生器７５にセットする。一方、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値が「１」ならば、レジスタｓｔａｒｔ_ａｄｄｒｅｓｓ[ｃｕｒｒｅｎｔ_ｍｏｄｅ]から異スプリット・リトリガ用読み出し開始アドレス（図７参照）を読み出して波形発生器７５にセットする。
【００８８】
また、ステップＳＤ１５では、レジスタｃｕｒｒｅｎｔ_ｋｅｙにストアされ、リトリガ発音する鍵番号に対応した音高データを波形発生器７５にセットする。さらに、ステップＳＤ１５では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値、つまり同スプリット・リトリガ発音モード（あるいは異スプリット・リトリガ発音モード）を表す値とステップ値「０」とで指定されるレベル値を、レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][０]から読み出してＥＧ７０の現在レベル値に設定すると共に、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレベル値を、レジスタｏｓｃ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７０の目標レベル値に設定する。
【００８９】
次に、ステップＳＤ１６では、発生楽音の音色に応じたフィルタ係数（カットオフ周波数指定データ）を初期値としてフィルタ７７に設定すると共に、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「０」とで指定されるレベル値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][０]から読み出してＥＧ７１の現在レベル値に設定する。また、ステップＳＤ１６では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレベル値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７１の目標レベル値に設定する。
【００９０】
次いで、ステップＳＤ１７では、発生楽音の音色に応じた乗算係数（増幅率）を初期値として増幅器７９に設定すると共に、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「０」とで指定されるレベル値を、レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][０]から読み出してＥＧ７２の現在レベル値に設定する。また、ステップＳＤ１７では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレベル値を、レジスタａｍｐ_ｅｎｖ_ｌｅｖｅｌ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７２の目標レベル値に設定する。
【００９１】
続いて、ステップＳＤ１８では、波形発生器７５に波形読み出し開始を指示すると共に、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレート値を、レジスタｏｓｃ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７０の目標レート値に設定する。また、ステップＳＤ１８では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレート値を、レジスタｆｉｌｔｅｒ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７１の目標レート値に設定する。さらに、ステップＳＤ１８では、レジスタｃｕｒｒｅｎｔ_ｍｏｄｅの値とステップ値「１」とで指定されるレート値を、レジスタａｍｐ_ｅｎｖ_ｒａｔｅ[ｃｕｒｒｅｎｔ_ｍｏｄｅ][１]から読み出してＥＧ７２の目標レート値に設定して本処理を終える。
【００９２】
以上説明したように、本実施形態では、離鍵時に押鍵中の鍵が存在すると、離鍵した鍵と押鍵中の鍵とが同じ鍵域もしくは異なる鍵域のいずれであるかを判断する。離鍵した鍵と押鍵中の鍵とが同じ鍵域であれば、同スプリット・リトリガ発音モードに設定し、一方、異なる鍵域ならば、異スプリット・リトリガ発音モードに設定する。
【００９３】
そして、同スプリット・リトリガ発音モードに設定された場合には、押鍵中の鍵の音高に対応した読み出し速度で波形メモリ７４の同スプリット・リトリガ用読み出し開始アドレスからサンプル波形（原波形データ）を読み出し、読み出したサンプル波形を同スプリット・リトリガ・エンベロープ波形で変調してなる楽音を形成してリトリガ発音させる。これに対し、異スプリット・リトリガ発音モードに設定された場合には、押鍵中の鍵の音高に対応した読み出し速度で波形メモリ７４の異スプリット・リトリガ用読み出し開始アドレスからサンプル波形（原波形データ）を読み出し、読み出したサンプル波形を異スプリット・リトリガ・エンベロープ波形で変調してなる楽音を形成して再発音する。
【００９４】
つまり、リトリガ発音する際に、離鍵した鍵と押鍵中の鍵とが同じ鍵域であるか否かに応じて楽音形成に用いるエンベロープ波形を異ならせたり、サンプル波形の読み出し開始位置を変化させる結果、管楽器を演奏した時のような比較的音量変化の無い滑らかな音程変化や、ギターに代表される弦楽器を演奏した時の独特のアタック感を備えた音を得られることから、管楽器や弦楽器を実際に演奏しているような不自然さの無いリトリガ奏法を実現することが可能になる。
【００９５】
なお、上述した実施形態では、離鍵時に押鍵中の鍵が複数検索された場合には、その中で最も音高が高い鍵をリトリガ発音する鍵に選択する態様としたが、これに限らず、押鍵されている鍵の中で最後に押鍵された鍵をリトリガ発音する鍵に選択する態様としても構わない。
【図面の簡単な説明】
【００９６】
【図１】本発明の一実施形態である楽音発生装置１０の全体構成を示すブロック図である。
【図２】ＲＡＭ６に設けられる主要レジスタの構成を示すメモリマップである。
【図３】音源７の構成を示すブロック図である。
【図４】ＥＧ７０から出力されるエンベロープ波形の一例を示す図である。
【図５】ＥＧ７１から出力されるエンベロープ波形の一例を示す図である。
【図６】ＥＧ７２から出力されるエンベロープ波形の一例を示す図である。
【図７】波形メモリ７４に記憶されるサンプル波形の通常読み出し開始アドレス、同スプリット・リトリガ用読み出し開始アドレスおよび異スプリット・リトリガ用読み出し開始アドレスを示す図である。
【図８】ＣＰＵ４が実行するメインルーチンの動作を示すフローチャートである。
【図９】ＣＰＵ４が実行するエンベロープ処理の動作を示すフローチャートである。
【図１０】ＣＰＵ４が実行するエンベロープ処理の動作を示すフローチャートである。
【図１１】ＣＰＵ４が実行するノートオン処理の動作を示すフローチャートである。
【図１２】ＣＰＵ４が実行するノートオフ処理の動作を示すフローチャートである。
【図１３】ＣＰＵ４が実行するノートオフ処理の動作を示すフローチャートである。
【図１４】ノートオフ処理の動作を説明するための図である。
【符号の説明】
【００９７】
１  鍵盤
２  ＭＩＤＩインタフェース
３  スイッチ部
４  ＣＰＵ
５  ＲＯＭ
６  ＲＡＭ
７  音源
８  Ｄ／Ａ変換器
９  サウンドシステム
【図１】
0005246473.tif 000002
【図２】
0005246473.tif 000003
【図３】
0005246473.tif 000004
【図４】
0005246473.tif 000005
【図５】
0005246473.tif 000006
【図６】
0005246473.tif 000007
【図７】
0005246473.tif 000008
【図８】
0005246473.tif 000009
【図９】
0005246473.tif 000010
【図１０】
0005246473.tif 000011
【図１１】
0005246473.tif 000012
【図１２】
0005246473.tif 000013
【図１３】
0005246473.tif 000014
【図１４】
0005246473.tif 000015