(57)【特許請求の範囲】
【請求項１】
原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段と、
入力された前記制御情報及び依存情報を記憶する記憶手段と、
前記依存情報及び前記原音のベロシティにより得られた収束レベルをもつフィードバック音の楽音データを、前記制御情報に応じて生成するフィードバック音生成手段と、
を備えたことを特徴とするフィードバック効果付加装置。
【請求項２】
原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段と、
入力された前記制御情報及び依存情報を記憶する記憶手段と、
前記依存情報及び前記原音の振幅のレベルに応じて立上り速度を変化させたフィードバック音の楽音データを、前記制御情報に応じて生成するフィードバック音生成手段と、
を備えたことを特徴とするフィードバック効果付加装置。
【請求項３】
原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段と、
入力された前記制御情報及び依存情報を記憶する記憶手段と、
前記制御情報により得られた、前記原音に対する周波数特性変換情報を用いて、フィードバック音の楽音データを、前記依存情報に応じて生成するフィードバック音生成手段と、
を備えたことを特徴とするフィードバック効果付加装置。
【請求項４】
原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段と、
入力された前記制御情報及び依存情報を記憶する記憶手段と、
前記依存情報に応じて、前記フィードバック音の倍音構成を変化させたフィードバック音の楽音データを、前記制御情報に応じて生成するフィードバック音生成手段と、
を備えたことを特徴とするフィードバック効果付加装置。
【請求項５】
原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段と、
入力された前記制御情報及び依存情報を記憶する記憶手段と、
前記原音が和音であるときは、前記制御情報に応じて、少なくとも１つの原音に対応するフィードバック音の楽音データを、前記依存情報に応じて生成するフィードバック音生成手段と、
を備えたことを特徴とするフィードバック効果付加装置。
【請求項６】
前記１つの原音は、前記和音を構成する原音のうち最もレベルの大きい音であることを特徴とする請求項５記載のフィードバック効果付加装置。
【請求項７】
前記１つの原音は、前記和音を構成する原音のうち最も音高の高い音であることを特徴とする請求項５記載のフィードバック効果付加装置。
【請求項８】
前記１つの原音は、前記和音を構成する原音のうち最も音高の低い音であることを特徴とする請求項５記載のフィードバック効果付加装置。
【請求項９】
前記１つの原音は、前記和音を構成する原音のうち最初に発生された音であることを特徴とする請求項５記載のフィードバック効果付加装置。
【請求項１０】
前記１つの原音は、前記和音を構成する原音のうち最後に発生された音であることを特徴とする請求項５記載のフィードバック効果付加装置。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
この発明は、原音にフィードバック音を付加するフィードバック効果付加装置に関する。
【０００２】
【従来の技術】
鍵盤やＭＩＤＩでコントロールする電子楽器の音源を使用して、鍵盤楽器とは異なる楽器の音色で楽音を発生させる技術は広く知られている。例えば、電子弦楽器の音色で楽音を発生させる場合には、ベンダーレバー、ベンダーホイール、リボンコントローラ等の操作子によってチョーキングという奏法を再現することができる。また、電子弦楽器に特有な奏法であるフィードバック奏法を再現する技術が知られている。フィードバック奏法とは、弾弦に応じた演奏音がアンプによって増幅され、その発音による空気中の振動が再び弦を振動させ、その弦振動によって発音を持続させる奏法である。フィードバック奏法においては、演奏音である原音のまま弦振動を続けることもあるし、倍音に移って弦振動を続けることもある。
【０００３】
フィードバック奏法を再現するために、従来のフィードバック効果付加装置においては、ある音色で原音を発音し続けると電子弦楽器がフィードバックした場合のように倍音が発生し、やがて原音が消えて倍音だけになる構成のものや、フィードバック状態に自動的に遷移する構成のものや、アフタータッチやホイールの操作によって原音状態とフィードバック状態との間の遷移を行う構成のものが知られている。
【０００４】
【発明が解決しようとする課題】
しかしながら従来のフィードバック効果付加装置においては、実際に電子弦楽器その他の電子楽器を演奏したときの特性を忠実に再現することができないという問題があった。具体的には、以下のような問題があった。
（１）フィードバック音の強弱が原音のベロシティに依存しているため、フィードバック音のレベルが変動して不安定な発音になってしまう。
（２）実際の電子弦楽器ではフィードバック音を発しないような原音のレベルでもフィードバック音が発せられてしまう。
（３）原音からフィードバック音への遷移時間が一定であるため、発生される楽音が画一的になり音楽性が乏しくなってしまう。
（４）原音の周波数帯域に関係なくフィードバック音を発生するので、自然な感じの楽音にならない。
（５）原音の音高とフィードバック音の音高とが予め決められた関係になっているため、発生される楽音の自由度が乏しくなってしまう。
（６）原音が和音であるときには全ての音についてフィードバック音が発生するため、実際のフィードバック音からかけ離れた楽音になってしまう。
この発明の課題は、実際に電子楽器を演奏したときの特性を忠実に再現するようにすることである。
【０００５】
【課題を解決するための手段】
この発明は、上記従来の問題を解決するために、原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段と、入力された制御情報及び依存情報を記憶する記憶手段と、制御情報及び依存情報に応じて前記フィードバック音の楽音データを生成するフィードバック音生成手段と、を備えた構成になっている。
したがってこの発明によれば、発生するフィードバック音をどれだけ原音に依存させるかを依存情報によって自在に設定することができるので、実際に電子楽器を演奏したときの特性を忠実に再現することができる。
【０００６】
【発明の実施の形態】
以下、図１〜図３０を参照してこの発明におけるフィードバック効果付加装置の実施形態をキーボード型シンセサイザーを例に採り説明する。
図１は、シンセサイザーの操作部を示す図である。操作部の上面には、音高や音の強さを入力する鍵盤１、微妙に音高をコントロールするベンダーホイール２、音量を調整するボリューム３、複数の各種スイッチ類４、動作状態等を表示するＬＣＤ５が設けられている。また、操作部の背面には、楽音信号を出力する出力端子６、ＭＩＤＩデータを入力するＭＩＤＩイン端子７、ＭＩＤＩデータを出力するＭＩＤＩアウト端子８、及び、弦楽器用のメッセージ情報を出力するＭＩＤＩ  ＳＴＲアウト端子９を備えている。
【０００７】
図２は、このシンセサイザーのシステム構成を示すブロック図である。
図２に示すように、このシステムは楽音を構成する音符の波形データを発生する音源部１０、ユーザから演奏指令を受けるユーザインタフェース／演奏部（以下、単に「演奏部」という）２０、このシンセサイザーを制御するとともに、キー番号を変換して音源部１０の各チャンネルに対して、発音指示あるいは消音指示その他の指示（これについては後述する）を伝達する機能をもつ制御部３０で構成されている。
【０００８】
音源部１０は、波形データを格納している波形メモリ１１、波形メモリ１１から波形データを読み出す読み出し部１２、読み出された波形データを加工するフィルタ部１３、波形データを増幅するアンプ部１４、ビブラートやトレモロ等の効果を付加するエフェクト部１５、ディジタル信号の波形データをアナログ楽音信号に変換するＤ／Ａコンバータ１６、アナログ楽音信号を増幅するアナログアンプ部１７を備えている。波形メモリ１１には、弦楽器の複数の弦の任意のフレット押下に対応する原音の波形データ、フィードバック音の波形データその他各種楽器の音色の波形データが記憶されている。
【０００９】
演奏部２０は、鍵盤１及び各種スイッチ類４の押下状態を検索するキースキャナ２１、ベンダホイール２のアナログ変位量をディジタルデータに変換するＡ／Ｄコンバータ２２の他、ＬＣＤ５を駆動するＬＣＤドライバ（図示せず）を備えている。鍵盤１及び各種スイッチ類４はフィードバック音の制御指令やパラメータ設定のデータ等のイベントデータを入力し、キースキャナ２１はその入力されたイベントデータを制御部３０内に取り込む。
【００１０】
制御部３０は、各部をバスで接続し、キースキャナ２１又はシリアルインタフェース３４が受信したイベントデータを処理するＣＰＵ３１、ＣＰＵ３１の動作プログラムを記憶するプログラムＲＯＭ３２、楽音を制御するためのパラメータその他ＣＰＵ３１が処理するデータを記憶するＲＡＭ３３、外部からのイベントデータであるＭＩＤＩデータを受信するシリアルインタフェース３４を備えている。
【００１１】
次に、音源部１０におけるフィードバック制御のパラメータについて図３を参照して説明する。
実際のフィードバック音は弦の振動であるから、弦の長さを整数等分した周波数成分を含むことになる。この実施形態では、弦の長さが１／２、１／３、１／４のとき、すなわち１オクターブ、１オクターブ上の５度、２オクターブの３種類の倍音のフィードバック音を発生する構成になっている。したがって、音源制御パラメータには、図３に示すように、各倍音に共通に設定する共通パラメータ群４１、各倍音ごとに設定する１／２パラメータ群４２、１／３パラメータ群４３、１／４パラメータ群４４とがある。
【００１２】
共通パラメータ群４１には、フィードバック周波数感度（Ｆｅｅｄｂａｃｋ  Ｆｒｅｑｕｅｎｃｙ  Ｓｅｎｓ；以下「ＦＦＳ」という）、フィードバック閾値（Ｆｅｅｄｂａｃｋ   Ｔｈｒｅｓｈｏｌｄ；以下「ＦＴ」という）、フィードバック立上り速度レベル感度（Ｆｅｅｄｂａｃｋ  Ｌｅｖｅｌ  Ｓｅｎｓ  ｏｆ  Ｆｅｅｄｂａｃｋ  Ｒｉｓｅ  Ｒａｔｅ；以下「ＦＬＳＦＲＲ」という）、フィードバックコードモード（Ｆｅｅｄｂａｃｋ  Ｃｈｏｒｄ  Ｍｏｄｅ；以下「ＦＣＭ」という）、原音リリース時間（Ｆｅｅｄｂａｃｋ  Ｎｏｒｍａｌ  Ｔｏｎｅ  Ｒｅｌｅａｓｅ  Ｔｉｍｅ；以下「ＦＮＴＲＴ」という）、フィードバック遷移時間（Ｆｅｅｄｂａｃｋ  Ｄｅｌａｙ  Ｔｉｍｅ；以下「ＦＤＴ」という）がある。
【００１３】
ＦＦＳは、周波数特性のパラメータによって設定されたカーブをどれだけ動作に反映させるかという感度（依存度）を表している。パラメータの値が０のときは全く影響されず、１００のときは最も影響を受ける。周波数特性はイコライザのようなパラメータによって決定される。周波数特性に関するパラメータには、図４（Ａ）に示すように、低域のレベルを設定するパラメータであるＬｏｗ−Ｌｅｖｅｌ（以下「ＬＬ」という）、高域のレベルを設定するパラメータであるＨｉｇｈ−Ｌｅｖｅｌ（以下「ＨＬ」という）、中域のピーク周波数を設定するパラメータであるＭｉｄ−Ｆｒｅｑｕｅｎｃｙ（以下「ＭＦ」という）、中域のレベルを設定するパラメータであるＭｉｄ−Ｌｅｖｅｌ（以下「ＭＬ」という）、中域の急峻さを設定するパラメータであるＭｉｄ−Ｑ（以下「ＭＱ」という）がある。
図４（Ｂ）に周波数特性のカーブとパラメータとの関係を示す。また、図４（Ｃ）にＱの値と周波数特性のカーブとの関係を示す。
【００１４】
ＦＴは、現在の振幅（エンベロープの値と周波数特性のレベルとＦＦＳとを乗じたもの）がどれだけあるとフィードバック状態に遷移できるかの最低値すなわち閾値を表すパラメータである。このパラメータは、すでにフィードバック状態に遷移したときは無効になる。ＦＬＳＦＲＲは、原音のレベルによってどれだけフィードバックの立上り速度が変化するかを設定するパラメータである。ＦＣＭは、原音が和音であるときに、どの音がフィードバックの原音になるかを決定するパラメータである。このパラメータが、Ｌｅｖｅｌのときはレベルが最も大きい音を選択し、Ｔｏｐのときは音高が最も高い音を選択し、Ｂｏｔｔｏｍのときは音高が最も低い音を選択し、Ｆｉｒｓｔのときは最初に発生された音を選択し、Ｌａｓｔのときは最後に発生された音を選択し、Ａｌｌのときは全ての音を選択し、Ｏｆｆのときはどの音も選択しない（フィードバック状態に遷移しない）。
ＦＮＴＲＴは、図５に示すように、フィードバック状態に遷移が開始したとき、原音が定常状態から減衰するまでの時間を設定するパラメータである。ＦＤＴは、図５に示すように、押鍵からフィードバック状態に遷移が開始するまでのフィードバック遷移時間を設定するパラメータである。
【００１５】
次に、各倍音ごとに設定するパラメータ群４２、４３、４４には、図３に示すように、フィードバックレベル（Ｆｅｅｄｂａｃｋ  Ｌｅｖｅｌ；以下「ＦＬ」という）、フィードバックレベル独立性（Ｆｅｅｄｂａｃｋ  Ｌｅｖｅｌ  Ｉｎｄｅｐｅｎｄｅｎｃｅ；以下「ＦＬＩ」という）、フィードバックフィルタ依存性（Ｆｅｅｄｂａｃｋ  Ｌｅｖｅｌ  Ｆｉｌｔｅｒ  Ｄｅｐｅｎｄｅｎｃｅ；以下「ＦＬＦＤ」という）、フィードバック立上り時間（Ｆｅｅｄｂａｃｋ  Ｒｉｓｅ  Ｔｉｍｅ；以下「ＦＲＴ」という）、フィードバック立上りカーブ（Ｆｅｅｄｂａｃｋ  Ｒｉｓｅ  Ｃｕｒｖｅ；以下「ＦＲＣ」という）がある。
【００１６】
ＦＬは、フィードバック音のレベルを設定するパラメータである。ＦＬＩは、フィードバック音のレベルの原音のレベルに対する独立性すなわち非依存性を設定するパラメータであり、この値が１００のときは原音のレベルに全く依存せず、この値が０のときは原音のレベルにすべて依存する。ＦＬＦＤは、フィードバック音のレベルの原音のフィルタカットオフ周波数に対する依存性を設定するパラメータであり、この値が０のときはカットオフ周波数に全く依存せず、この値が１００のときは最も依存する。このパラメータによって原音の音色変化に依存してフィードバックの倍音構成を変化させることができる。ＦＲＴは、フィードバック状態に遷移が開始してから定常のレベルに至るまでの時間を設定するパラメータである。ＦＲＣは、フィードバック状態に遷移が開始してから定常のレベルに至るまでのレベル変化の特性を設定するパラメータである。図６にそのレベル変化のカーブＡ、Ｂ、Ｃを示す。
【００１７】
次に、図２に示したシステムの動作について説明する。図７〜図２６はＣＰＵ３１の動作フローチャートであり、図２７は各パラメータを設定するＲＡＭ３３のパラメータ設定エリア、図２８は原音に関するＲＡＭ３３のデータエリア、図２９は各倍音のフィードバック音に関するＲＡＭ３３のデータエリア、図３０はＲＡＭ３３のポインタ及びレジスタのエリアである。
図７のメインルーチンにおいて、所定のイニシャライズ（ステップＳ１）の後、ステップＳ２〜ステップＳ７のループ処理を実行する。すなわち、スイッチ類４の状態を検索するスイッチ処理（ステップＳ２）、鍵盤１の状態を検索する鍵盤処理（ステップＳ３）、ベンダホイール２の状態を検索するベンダ処理（ステップＳ４）、フィードバック音を発生及び消滅させるフィードバック処理（ステップＳ５）、音源部１０に対して発音及び消音を指示する発音処理（ステップＳ６）、及びその他の処理（ステップＳ７）を繰り返し実行する。なお、ＭＩＤＩの場合には鍵盤処理の代わりにシリアルインタフェース３４を介して入力するＭＩＤＩの押鍵、離鍵等のイベントデータを処理する。
【００１８】
スイッチ処理は、図８に示すように、スイッチ類４がオンされたか否かを判別し（ステップＳ８）、オンされなければメインルーチンに戻るが、オンされた場合にはパラメータの入力であるか又はパラメータの指定であるかを判別する（ステップＳ９）。パラメータの入力の場合には、図９に示すように、ＲＡＭの設定エリアのｎ番目のエリアに入力されたパラメータのデータをストアする（ステップＳ１０）。次に、図２７に示すＲＡＭのイコライザエリアのｎ＝２２〜２６番目のデータに基づいて周波数変換テーブルｆ（ｘ）を作成して（ステップＳ１１）、メインルーチンに戻る。
【００１９】
図８のステップＳ９においてスイッチがパラメータの指定である場合には、その指定されたパラメータについて、図２７に示すＲＡＭの該当するエリアを検索する（ステップＳ１２）。そのエリアが共通エリアである場合には、指定されたパラメータに応じてポインタｎに１〜６の該当する番号をセットする。すなわち、ステップＳ１３で指定パラメータがＦＦＳと判別した場合にはｎに１をセットし（ステップＳ１４）、ステップＳ１５で指定パラメータがＦＴと判別した場合にはｎに２をセットし（ステップＳ１６）、ステップＳ１７で指定パラメータがＦＬＳＦＲＲと判別した場合にはｎに３をセットし（ステップＳ１８）、ステップＳ１９で指定パラメータがＦＣＭと判別した場合にはｎに４をセットし（ステップＳ２０）、ステップＳ２１で指定パラメータがＦＮＴＲＴと判別した場合にはｎに５をセットし（ステップＳ２２）、ステップＳ２３で指定パラメータがＦＤＴと判別した場合にはｎに６をセットする（ステップＳ２４）。指定パラメータをセットした後メインルーチンに戻る。
【００２０】
図８のステップＳ１２において、指定パラメータのエリアがイコライザエリアである場合には、ポインタｎに図２７のイコライザエリアにおいて指定パラメータに該当する番号２２〜２６をセットする。すなわち、図９に示すように、ステップＳ２５で指定パラメータがＬＬと判別した場合にはｎに２２をセットし（ステップＳ２６）、ステップＳ２７で指定パラメータがＨＬと判別した場合にはｎに２３をセットし（ステップＳ２８）、ステップＳ２９で指定パラメータがＭＦと判別した場合にはｎに２４をセットし（ステップＳ３０）、ステップＳ３１で指定パラメータがＭＬと判別した場合にはｎに２５をセットし（ステップＳ３２）、ステップＳ３３で指定パラメータがＭＱと判別した場合にはｎに２６をセットする（ステップＳ３４）。指定パラメータをセットした後メインルーチンに戻る。
【００２１】
図８のステップＳ１２において、指定パラメータのエリアがフィードバック１／２、１／３又は１／４の倍音エリアである場合には、ポインタｎに図２７の倍音エリアにおいて指定パラメータに該当する番号７〜２１をセットする。すなわち、図１０に示すように、まず、倍音のフィードバック音の種別を判別する（ステップＳ３５）。
１／２フィードバック音の場合には、ステップＳ３６で指定パラメータがＦＬであると判別した場合にはｎに７をセットし（ステップＳ３７）、ステップＳ３８で指定パラメータがＦＬＩであると判別した場合にはｎに８をセットし（ステップＳ３９）、ステップＳ４０で指定パラメータがＦＬＦＤであると判別した場合にはｎに９をセットし（ステップＳ４１）、ステップＳ４２で指定パラメータがＦＲＴであると判別した場合にはｎに１０をセットし（ステップＳ４３）、ステップＳ４４で指定パラメータがＦＲＣであると判別した場合にはｎに１１をセットする（ステップＳ４５）。
【００２２】
１／３フィードバック音の場合には、ステップＳ４６で指定パラメータがＦＬであると判別した場合にはｎに１２をセットし（ステップＳ４７）、ステップＳ４８で指定パラメータがＦＬＩであると判別した場合にはｎに１３をセットし（ステップＳ４９）、ステップＳ５０で指定パラメータがＦＬＦＤであると判別した場合にはｎに１４をセットし（ステップＳ５１）、ステップＳ５２で指定パラメータがＦＲＴであると判別した場合にはｎに１５をセットし（ステップＳ５３）、ステップＳ５４で指定パラメータがＦＲＣであると判別した場合にはｎに１６をセットする（ステップＳ５５）。
【００２３】
１／４フィードバック音の場合には、ステップＳ５６で指定パラメータがＦＬであると判別した場合にはｎに１７をセットし（ステップＳ５７）、ステップＳ５８で指定パラメータがＦＬＩであると判別した場合にはｎに１８をセットし（ステップＳ５９）、ステップＳ６０で指定パラメータがＦＬＦＤであると判別した場合にはｎに１９をセットし（ステップＳ６１）、ステップＳ６２で指定パラメータがＦＲＴであると判別した場合にはｎに２０をセットし（ステップＳ６３）、ステップＳ６４で指定パラメータがＦＲＣであると判別した場合にはｎに２１をセットする（ステップＳ６５）。指定パラメータをセットした後メインルーチンに戻る。
【００２４】
メインルーチンの鍵盤処理においては、図１１に示すように、鍵変化があったか否かを判別し（ステップＳ６６）、鍵変化がない場合にはメインルーチンに戻るが、鍵変化があった場合にはその変化がキーオフからキーオンへの変化であるか、又はキーオンからキーオフへの変化であるかを判別する（ステップＳ６７）。キーオンへの変化である場合には、レジスタＣＣにそのオンされた鍵のノートナンバをセットし（ステップＳ６８）、ポインタｎの値が６より大きいか否かを判別する（ステップＳ６９）。ｎの値は１〜６であるのでｎの値が６より大きい場合にはｎに１（初期値）をセットして（ステップＳ７０）、ステップＳ７１に移行する。ｎの値が１〜６である場合には、そのままステップＳ７１に移行する。
【００２５】
ステップＳ７１では、図２８に示すＲＡＭのノートナンバエリアのＮ（ｎ）の上位ビットが０であるか否かを判別する。上位ビットが０である場合にはまだ発音指示がなされていないので、発音指示をするためにＮ（ｎ）の上位ビットを１にセットする（ステップＳ７２）。さらに、Ｎ（ｎ）の下位ビット群にＣＣにセットしたノートナンバをセットし（ステップＳ７３）、図２８のベロシティエリアのＢ（ｎ）にベロシティデータをセットする（ステップＳ７４）。次に、アタック指示をするために、図２８のアタック指示フラグＴＦ（ｎ）に１をセットする（ステップＳ７５）。そして、ｎをインクリメントして（ステップＳ７６）、メインルーチンに戻る。
【００２６】
一方、ステップＳ７１において、Ｎ（ｎ）の上位ビットが０でなく１である場合には、ｎをインクリメントして（ステップＳ７７）、ｎの値が６より大きいか否かを判別する（ステップＳ７８）。ｎの値が６以下である場合には、ステップＳ７１に移行して上位ビットが０のＮ（ｎ）をＲＡＭのノートナンバエリアから検索する。そして、上位ビットが０のＮ（ｎ）が存在する場合にはステップＳ７２に移行する。ステップＳ７８において、ｎの値が６より大きい場合すなわちすべてのＮ（ｎ）の上位ビットが１である場合には、ｎに１をセットして（ステップＳ７９）、ステップＳ７３に移行してＮ（１）の下位ビット群にＣＣのノートナンバをセットする。
【００２７】
ステップＳ６７において、鍵変化がキーオンからキーオフに変化した場合には、図３０に示すレジスタＣＣにそのオフされた鍵のノートナンバをセットし（ステップＳ８０）、ポインタｎの値が６より大きいか否かを判別する（ステップＳ８１）。ｎの値は１〜６であるのでｎの値が６より大きい場合にはｎに１（初期値）をセットして（ステップＳ８２）、ステップＳ８３に移行する。ｎの値が１〜６である場合には、そのままステップＳ８３に移行する。
【００２９】
ステップＳ８３では、図２８に示すＲＡＭのノートナンバエリアのＮ（ｎ）の上位ビットが１であるか否かを判別する。上位ビットが１である場合には、すでに発音指示がなされているので、そのＮ（ｎ）の下位ビット群のノートナンバがＣＣのノートナンバと一致しているか否か、すなわちオフされたノートナンバであるか否かを判別する（ステップＳ８４）。ノートナンバが一致している場合には、消音のために、図２８のリリース指示フラグＲＦ（ｎ）に１をセットする（ステップＳ８５）。そして、ｎをインクリメントして（ステップＳ８６）、メインルーチンに戻る。
【００３０】
ステップＳ８３においてＮ（ｎ）の上位ビットが１でない場合、又はステップＳ８４においてＮ（ｎ）の下位ビット群のノートナンバがＣＣのノートナンバと一致しない場合には、ｎをインクリメントして（ステップＳ８７）、ｎの値が６より大きいか否かを判別する（ステップＳ８８）。ｎの値が６以下である場合には、ステップＳ８３に移行して上位ビットが１のＮ（ｎ）をＲＡＭのノートナンバエリアから検索する。そして、上位ビットが１のＮ（ｎ）が存在する場合には、ステップＳ８４に移行して下位ビット群をチェックする。ステップＳ８８において、ｎの値が６より大きい場合（この場合はエラーである）には、メインルーチンに戻ってエラー処理をすることになる。
【００３１】
次に、ベンダ処理について説明する。図１２において、ベンダＡＤ２２の出力に変化があったか否かを判別し（ステップＳ８９）、出力に変化がない場合にはメインルーチンに戻るが、出力に変化があった場合には、ベンダ出力値をレジスタＢＤにセットする（ステップＳ９０）。そして、ポインタｎの値が６より大きいか否かを判別する（ステップＳ９１）。ｎの値は１〜６であるのでｎの値が６より大きい場合にはｎに１（初期値）をセットして（ステップＳ９２）、ステップＳ９３に移行する。ｎの値が１〜６である場合には、そのままステップＳ９３に移行する。
【００３２】
ステップＳ９３では、図２８に示すＲＡＭのノートナンバエリアのＮ（ｎ）の上位ビットが１（発音指示）であるか否かを判別する。上位ビットが１である場合には、Ｎ（ｎ）のノートナンバを周波数データに変換し（ステップＳ９４）、その周波数データにＢＤの値を乗じて、乗算結果を図２８のＲＡＭの周波数エリアのＦ（ｎ）にセットする（ステップＳ９５）。さらに、イコライザエリアのデータに基づいて作成した周波数変換テーブルｆ（ｘ）において、ｘ＝Ｆ（ｎ）としてｆ｛Ｆ（ｎ）｝を求めてＢ（ｎ）を乗じて、乗算結果を図２８のＲＡＭのノートレベルエリアのＮＬ（ｎ）にセットする（ステップＳ９６）。そして、ｎをインクリメントして（ステップＳ９７）、メインルーチンに戻る。
【００３３】
一方、ステップＳ９３において、Ｎ（ｎ）の上位ビットが０である場合には、ｎをインクリメントして（ステップＳ９８）、ｎの値が６より大きいか否かを判別する（ステップＳ９９）。ｎの値が６以下である場合には、ステップＳ９３に移行して上位ビットが１のＮ（ｎ）をＲＡＭのノートナンバエリアから検索する。そして、上位ビットが１のＮ（ｎ）が存在する場合にはステップＳ９４に移行する。ステップＳ９９において、ｎの値が６より大きい場合すなわちすべてのＮ（ｎ）の上位ビットが０である場合には、ｎに１をセットして（ステップＳ１００）、ステップＳ９４に移行する。
【００３４】
次に、フィードバック処理について説明する。図１３において、ポインタｎに１をセットして（ステップＳ１０１）、レジスタＳＭを０にリセットし（ステップＳ１０２）、ｎをインクリメントしながら以下のループ処理を実行する。ステップＳ１０３において、アタック指示フラグＴＦ（ｎ）が１であるか否かを判別し、ＴＦ（ｎ）が１である場合には図１２のステップＳ９６で演算して求めたノートレベルＮＬ（ｎ）をレジスタＬにセットし（ステップＳ１０４）、周波数特性ｆ｛Ｆ（ｎ）｝をレジスタＦにセットする（ステップＳ１０５）。
【００３５】
次に、図２７の共通エリアからＦＦＳを読み込んで、下記の数１の演算式によりフィードバック音を発生するかどうかの判断に用いるチェックレベル（Ｆｅｅｄｂａｃｋ  Ｃｈｅｃｋ  Ｌｅｖｅｌ）を演算して、レジスタＦＣＬにセットする（ステップＳ１０６）。
【数１】
0003658631.tif 000002
そして、ＦＣＬが共通エリアの閾値であるＦＴより大きいか否かを判別する（ステップＳ１０７）。ＦＣＬがＦＴより大きい場合には、Ｎ（ｎ）の上位ビットが１であるか否かを判別し（ステップＳ１０８）、上位ビットが１である場合にはレジスタＭにｎをセットする（ステップＳ１０９）。次に、ＳＭをインクリメントし（ステップＳ１１０）、ｎをインクリメントする（ステップＳ１１１）。
【００３６】
ステップＳ１０３においてＴＦ（ｎ）が１でない場合、ステップＳ１０７においてＦＣＬがＦＴ以下である場合、ステップＳ１０８においてＮ（ｎ）の上位ビットが０である場合には、いずれもＳＭをインクリメントすることなくステップＳ１１１に移行してｎをインクリメントする。
そして、インクリメントしたｎが６より大きいか否かを判別し（ステップＳ１１２）、ｎが６以下である場合にはステップＳ１０３に移行して、上記のループ処理を実行する。ｎが６より大きくなった場合には、ＳＭが０であるか否かを判別する（ステップＳ１１３）。ＳＭが０である場合には、フィードバック状態に遷移する原音が１つもないことになるので、メインルーチンに戻る。
【００３７】
ＳＭが１つ以上である場合にはフィードバック状態に移行するが、原音が単音であるか和音であるかによって異なるフィードバック処理となる。すなわち、図１４のステップＳ１１４においてＳＭが１（単音）であるか又は１より大きい（和音）かを判別する。ＳＭが１である場合には、レジスタＫにレジスタＭのデータをセットする（ステップＳ１１５）。すなわち、フィードバック状態に遷移するための１つの原音のＮ（ｎ）のｎをＫにセットする。
【００３８】
一方、ステップＳ１１４においてＳＭが１より大きい場合には、フィードバックコードモードＦＣＭの内容に応じた処理を実行する。すなわち、ステップＳ１１６においてＦＣＭがＬｅｖｅｌ（レベルが最大の原音）と判別したときは、Ｌｅｖｅｌ処理を行う（ステップＳ１１７）。ステップＳ１１８においてＦＣＭがＴｏｐ（音高が最高の原音）と判別したときはＴｏｐ処理を行う（ステップＳ１１９）。ステップＳ１２０においてＦＣＭがＢｏｔｔｏｍ（音高が最低の原音）と判別したときはＢｏｔｔｏｍ処理を行う（ステップＳ１２１）。ステップＳ１２２においてＦＣＭがＦｉｒｓｔ（最初の原音）と判別したときはＦｉｒｓｔ処理を行う（ステップＳ１２３）。ステップＳ１２４においてＦＣＭがＬａｓｔ（最後の原音）と判別したときはＬａｓｔ処理を行う（ステップＳ１２５）。すなわち、ＦＣＭが上記いずれかのモードである場合には、フィードバック状態に遷移するための１つの原音が選択されることになる。
ＦＣＭが上記いずれのモードでもない場合には、ステップＳ１２６においてＦＣＭがＡｌｌ（和音を構成するすべての原音）であるか、又はＦＣＭがＯｆｆ（フィードバック状態に遷移しない）であるかを判別する。
【００３９】
Ｌｅｖｅｌ処理は、図１５に示すように、ポインタＮに１をセットし（ステップＳ１２７）、Ｎをインクリメントしながら以下のループ処理を実行する。ノートナンバエリアのＮ（Ｎ）の上位ビットが１（発音指示された原音）であるか否かを判別し（ステップＳ１２８）、上位ビットが１でない場合にはステップＳ１２９でＮをインクリメントしてステップＳ１２８に戻り、上位ビットが１である場合にはノートレベルエリアのＮＬ（Ｎ）をレジスタＬＡにセットする（ステップＳ１３０）。そして、Ｎに１を加算した値すなわち次のノートナンバをレジスタＭにセットして（ステップＳ１３１）、ＮＬ（Ｍ）をレジスタＬＢにセットする（ステップＳ１３２）。
【００４０】
次に、ＬＡとＬＢのレベルの大小を判別し（ステップＳ１３３）、ＬＡがＬＢ以上である場合にはＮをＫにセットし（ステップＳ１３４）、ＬＡがＬＢより小さい場合にはＭをＫにセットする（ステップＳ１３５）。そして、Ｍが６であるか否かを判別し（ステップＳ１３６）、Ｍが５以下である場合にはステップＳ１２９においてＮをインクリメントしてステップＳ１２８に移行してこのループ処理を行い、Ｍが６になった場合には図１４のフローに戻る。
【００４１】
Ｔｏｐ処理は、図１６に示すように、レジスタＮに１をセットし（ステップＳ１３７）、Ｎをインクリメントしながら以下のループ処理を実行する。ノートナンバエリアのＮ（Ｎ）の上位ビットが１（発音指示された原音）であるか否かを判別し（ステップＳ１３８）、上位ビットが１でない場合にはステップＳ１３９でＮをインクリメントしてステップＳ１３８に戻り、上位ビットが１である場合にはノートナンバエリアのＮ（Ｎ）をレジスタＮＡにセットする（ステップＳ１４０）。そして、Ｎに１を加算した値すなわち次のノートナンバをレジスタＭにセットして（ステップＳ１４１）、Ｎ（Ｍ）をレジスタＮＢにセットする（ステップＳ１４２）。
【００４２】
次に、ＮＡとＮＢの大小を判別し（ステップＳ１４３）、ＮＡがＮＢ以上である場合にはＮをＫにセットし（ステップＳ１４４）、ＮＡがＮＢより小さい場合にはＭをＫにセットする（ステップＳ１４５）。そして、Ｍが６であるか否かを判別し（ステップＳ１４６）、Ｍが５以下である場合にはステップＳ１３９においてＮをインクリメントしてステップＳ１３８に移行してこのループ処理を行い、Ｍが６になった場合には図１４のフローに戻る。
【００４３】
Ｂｏｔｔｏｍ処理は、図１７に示すように、レジスタＮに１をセットし（ステップＳ１４７）、Ｎをインクリメントしながら以下のループ処理を実行する。ノートナンバエリアのＮ（Ｎ）の上位ビットが１（発音指示された原音）であるか否かを判別し（ステップＳ１４８）、上位ビットが１でない場合にはステップＳ１４９でＮをインクリメントしてステップＳ１４８に戻り、上位ビットが１である場合にはノートレベルエリアのＮ（Ｎ）をレジスタＮＡにセットする（ステップＳ１５０）。そして、Ｎに１を加算した値すなわち次のノートナンバをレジスタＭにセットして（ステップＳ１５１）、Ｎ（Ｍ）をレジスタＮＢにセットする（ステップＳ１５２）。
【００４４】
次に、ＮＡとＮＢの大小を判別し（ステップＳ１５３）、ＮＡがＮＢ以上である場合にはＭをＫにセットし（ステップＳ１５４）、ＮＡがＮＢより小さい場合にはＮをＫにセットする（ステップＳ１５５）。そして、Ｍが６であるか否かを判別し（ステップＳ１５６）、Ｍが５以下である場合にはステップＳ１４９においてＮをインクリメントしてステップＳ１４８に移行してこのループ処理を行い、Ｍが６になった場合には図１４のフローに戻る。
【００４５】
Ｆｉｒｓｔ処理は、図１８に示すように、レジスタＮに１をセットし（ステップＳ１５７）、Ｎをインクリメントしながら以下のループ処理を実行する。ノートナンバエリアのＮ（Ｎ）の上位ビットが１（発音指示された原音）であるか否かを判別し（ステップＳ１５８）、上位ビットが１でない場合にはステップＳ１５９でＮをインクリメントしてステップＳ１５８に戻り、上位ビットが１である場合には図２８のアタックタイムエリアのＴＴ（Ｎ）をレジスタＴＡにセットする（ステップＳ１６０）。そして、Ｎに１を加算した値すなわち次のノートナンバをレジスタＭにセットして（ステップＳ１６１）、ＴＴ（Ｍ）をレジスタＴＢにセットする（ステップＳ１６２）。
【００４６】
次に、ＴＡとＴＢの大小を判別し（ステップＳ１６３）、ＴＡがＴＢ以上である場合にはＭをＫにセットし（ステップＳ１６４）、ＴＡがＴＢより小さい場合にはＮをＫにセットする（ステップＳ１６５）。そして、Ｍが６であるか否かを判別し（ステップＳ１６６）、Ｍが５以下である場合にはステップＳ１５９においてＮをインクリメントしてステップＳ１５８に移行してこのループ処理を行い、Ｍが６になった場合には図１４のフローに戻る。
【００４７】
Ｌａｓｔ処理は、図１９に示すように、レジスタＮに１をセットし（ステップＳ１６７）、Ｎをインクリメントしながら以下のループ処理を実行する。ノートナンバエリアのＮ（Ｎ）の上位ビットが１（発音指示された原音）であるか否かを判別し（ステップＳ１６８）、上位ビットが１でない場合にはステップＳ１６９でＮをインクリメントしてステップＳ１６８に戻り、上位ビットが１である場合にはアタックタイムエリアのＴＴ（Ｎ）をレジスタＴＡにセットする（ステップＳ１７０）。そして、Ｎに１を加算した値すなわち次のノートナンバをレジスタＭにセットして（ステップＳ１７１）、ＴＴ（Ｍ）をレジスタＴＢにセットする（ステップＳ１７２）。
【００４８】
次に、ＴＡとＴＢの大小を判別し（ステップＳ１７３）、ＴＡがＴＢ以上である場合にはＮをＫにセットし（ステップＳ１７４）、ＴＡがＴＢより小さい場合にはＭをＫにセットする（ステップＳ１７５）。そして、Ｍが６であるか否かを判別し（ステップＳ１７６）、Ｍが５以下である場合にはステップＳ１６９においてＮをインクリメントしてステップＳ１６８に移行してこのループ処理を行い、Ｍが６になった場合には図１４のフローに戻る。
【００４９】
原音が単音である場合のフィードバック処理、及び原音が和音である場合に１つの原音を選択した場合のフィードバック処理は、図２０のフローに移行して、ｎに１をセットした後（ステップＳ１７７）、ｎをインクリメントしながら以下のループ処理を実行する。ステップＳ１７８において、ｎ＝Ｋであるか否かを判別する。図１４〜図１９の処理において、フィードバック音に対応する１つの原音が指定され、そのノートナンバがレジスタＫにセットされているので、ｎで指定した原音がフィードバック音に対応する原音であるか否かを判別するのである。ｎ＝Ｋである場合すなわちフィードバック対象の原音である場合には、数２の演算式により各フィードバック音のアタックレートＦＡＲ１（ｎ）〜ＦＡＲ３（ｎ）の演算をして（ステップＳ１７９）、図２９の該当エリアにセットする。
【数２】
0003658631.tif 000003
【００５０】
さらに、数３の演算式により、各フィードバック音の収束レベルＦＳＬ１（ｎ）〜ＦＳＬ３（ｎ）の演算をして（ステップＳ１８０）、図２９の該当エリアにセットする。
【数３】
0003658631.tif 000004
そして、図２９の各フィードバック音のアタックフラグＦＡＦ１（ｎ）〜ＦＡＦ３（ｎ）を１（フィードバック音アタック指示）にセットする（ステップＳ１８１）。
【００５１】
次に、図２７のＦＮＴＲＴ（図５に示す原音のリリースタイム）と図２８のノートレベルＮＬ（ｎ）により原音のリリースレートＮＲＲ（ｎ）を算出して（ステップＳ１８２）、図２８の該当エリアにセットする。また、図２８のフィードバック用リリース指示フラグＮＲＦ（ｎ）に１（原音リリース指示）をセットする（ステップＳ１８３）。次に、レジスタＴに図２７のＦＤＴ（図５に示すフィードバック遷移時間）をセットする（ステップＳ１８４）。そして、ｎが６になったか否か、すなわちすべての倍音のフィードバック処理が終了したか否かを判別し（ステップＳ１８５）、ｎが５以下である場合にはｎをインクリメントして（ステップＳ１８６）、ステップＳ１７８に移行してこのループ処理を繰り返す。そして、ｎが６になった場合にはメインルーチンに戻る。
【００５２】
ステップＳ１７８において、ｎ＝Ｋでない場合すなわちＮ（ｎ）がフィードバック対象の原音でない場合には、Ｎ（ｎ）の上位ビットが１（原音が発音指示中）であるか否かを判別する（ステップＳ１８７）。上位ビットが１である場合には、ＮＲＦ（ｎ）が１（原音リリース指示）か否かを判別し（ステップＳ１８８）、ＮＲＦ（ｎ）が１である場合にはステップＳ１８５に移行し、ＮＲＦ（ｎ）が１でない場合には、その原音をリリースするためにステップＳ１８２に移行する。
【００５３】
ステップＳ１８７においてＮ（ｎ）の上位ビットが１でない場合には、その原音に対応する各フィードバック音のコンテニューフラグＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１（フィードバック音発音継続中）であるか否かを判別する（ステップＳ１８９）。ＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１である場合には、そのフィードバック音をリリースする必要がある。このため、原音のＦＮＴＲＴと各フィードバック音の収束レベルＦＳＬ１（ｎ）〜ＦＳＬ３（ｎ）により、各フィードバック音のリリースレートＦＲＲ１（ｎ）〜ＦＲＲ３（ｎ）を算出して（ステップＳ１９０）、図２９の該当エリアにセットする。そして、図２９の各フィードバック音のリリースフラグＦＲＦ１（ｎ）〜ＦＲＦ３（ｎ）に１をセットする（ステップＳ１９１）。なお、ステップＳ１８９において各フィードバック音のＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１でない場合には、ステップＳ１８５に移行する。
【００５４】
図１４のステップＳ１２６において、ＦＣＭがＡｌｌである場合には図２１に移行する。そして、ｎに１をセットした後（ステップＳ１９２）、ｎをインクリメントしながら以下のループ処理を実行する。Ｎ（ｎ）の上位ビットが１（原音が発音指示中）であるか否かを判別する（ステップＳ１９３）。上位ビットが１である場合には、フィードバック用リリース指示フラグＮＲＦ（ｎ）が１（原音リリース指示）か否かを判別し（ステップＳ１９４）、ＮＲＦ（ｎ）が１でない場合には、その原音をリリースするためにＮＲＦ（ｎ）に１をセットする（ステップＳ１９５）。
【００５５】
次に、上記した数２の演算式により、各フィードバック音のアタックレートＦＡＲ１（ｎ）〜ＦＡＲ３（ｎ）の演算をして（ステップＳ１９６）、図２９の該当エリアにセットする。さらに、上記した数３の演算式により、各フィードバック音の収束レベルＦＳＬ１（ｎ）〜ＦＳＬ３（ｎ）の演算をして（ステップＳ１９７）、図２９の該当エリアにセットする。そして、図２９の各フィードバック音のアタックフラグＦＡＦ１（ｎ）〜ＦＡＦ３（ｎ）を１（アタック指示）にセットする（ステップＳ１９８）。
【００５６】
次に、図２７のＦＮＴＲＴ（図５に示す原音のリリースタイム）と図２８のノートレベルＮＬ（ｎ）により原音のリリースレートＮＲＲ（ｎ）を算出して（ステップＳ１９９）、図２８の該当エリアにセットする。そして、ｎが６になったか否かを判別し（ステップＳ２００）、ｎが５以下である場合にはｎをインクリメントして（ステップＳ２０１）、ステップＳ１９３に移行してこのループ処理を実行する。
【００５７】
一方、ステップＳ１９３においてＮ（ｎ）の上位ビットが０（原音が消音指示）である場合には、その原音に対応する各フィードバック音のコンテニューフラグＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１（フィードバック音発音継続中）であるか否かを判別する（ステップＳ２０２）。ＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１である場合には、その消音指示された前の原音に対応する各フィードバック音をリリースする必要がある。このため、原音のＦＮＴＲＴと各フィードバック音の収束レベルＦＳＬ１（ｎ）〜ＦＳＬ３（ｎ）により、各フィードバック音のリリースレートＦＲＲ１（ｎ）〜ＦＲＲ３（ｎ）を算出して（ステップＳ２０３）、図２９の該当エリアにセットする。そして、図２９の各フィードバック音のリリースフラグＦＲＦ１（ｎ）〜ＦＲＦ３（ｎ）に１をセットする（ステップＳ２０４）。この後はステップＳ２００に移行してｎの値を判別する。なお、ステップＳ１９４においてＮＲＦ（ｎ）が１である場合、ステップＳ２０２において各フィードバック音のＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１でない場合には、ステップＳ２００に移行してｎの値を判別する。
【００５８】
図１４のステップＳ１２６において、ＦＣＭがＡｌｌでない場合すなわちＦＣＭがＯｆｆである場合には、図２２のフローに移行してｎに１をセットし（ステップＳ２０５）、ｎをインクリメントしながら以下のループ処理を実行する。前の原音に対する各フィードバック音のコンテニューフラグＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１（フィードバック音発継続音中）であるか否かを判別する（ステップＳ２０６）。ＦＣＦ１（ｎ）〜ＦＣＦ３（ｎ）が１である場合には、前の原音に対応する各フィードバック音をリリースする必要がある。このため、前の原音のＦＮＴＲＴと各フィードバック音の収束レベルＦＳＬ１（ｎ）〜ＦＳＬ３（ｎ）により、各フィードバック音のリリースレートＦＲＲ１（ｎ）〜ＦＲＲ３（ｎ）を算出して（ステップＳ２０７）、図２９の該当エリアにセットする。そして、図２９の各フィードバック音のリリースフラグＦＲＦ１（ｎ）〜ＦＲＦ３（ｎ）に１をセットする（ステップＳ２０８）。
この後、レジスタＴに図２７のＦＤＴをセットする（ステップＳ２０９）。そして、ｎが６になったか否かを判別し（ステップＳ２１０）、ｎが５以下である場合にはｎをインクリメントして（ステップＳ２１１）、ステップＳ２０６に移行してこのループ処理を実行する。
【００５９】
次に、発音処理について説明する。図２３において、ポインタｎに１をセットして（ステップＳ２１２）、ｎをインクリメントしながら以下のループ処理を実行する。Ｎ（ｎ）の上位ビットが１（原音が発音指示中）であるか否かを判別する（ステップＳ２１３）。上位ビットが１である場合には、図２８のノートレベルＮＬ（ｎ）及び周波数Ｆ（ｎ）を音源部１０に出力する（ステップＳ２１４）。そして、図２８のアタック指示フラグＴＦ（ｎ）が１（アタック指示）であるか否かを判別し（ステップＳ２１５）。ＴＦ（ｎ）が１である場合には、その原音についてのエンベロープアタック指示をして（ステップＳ２１６）、ＴＦ（ｎ）を０にリセットし（ステップＳ２１７）、発音開始指示をする（ステップＳ２１８）。この後は、ステップＳ２１９に移行して原音のレベル判別を行う。
【００６０】
ステップＳ２１５において、ＴＦ（ｎ）が０（アタック解除指示）である場合には、原音のリリース指示フラグＲＦ（ｎ）が１（リリース指示）であるか否かを判別する（ステップＳ２２０）。ＲＦ（ｎ）が１である場合には、エンベロープリリース指示をして（ステップＳ２２１）、ＲＦ（ｎ）を０にリセットする（ステップＳ２２２）。この後は、ステップＳ２１９に移行して原音のレベル判別を行う。ステップＳ２１９における原音のレベル判別では、ＮＬ（ｎ）が０になったか否かを判別し、ＮＬ（ｎ）が０になった場合にはＮ（ｎ）の上位ビットに０をセットして（ステップＳ２２３）、消音指示をする（ステップＳ２２４）。
【００６１】
この消音指示の後、あるいはステップＳ２１３においてＮ（ｎ）の上位ビットが０である（原音が発音指示中でない）場合、あるいはステップＳ２１９においてＮＬ（ｎ）が０でない場合には、いずれも図２４のステップＳ２２５に移行して、タイマレジスタＴが０であるか否かを判別する。Ｔはタイマインタラプトが入ると、初期値であるＦＤＴ（設定されているフィードバック遷移時間）がデクリメントされていく。Ｔが０でない場合にはｎをインクリメントして（ステップＳ２２６）、ｎが６より大きいか否かを判別する（ステップＳ２２７）。ｎが６より大きい場合には、フィードバック遷移時間に達していないのでメインルーチンに戻るが、ｎが６以下である場合には図２３ののステップＳ２１３に戻り、原音ごとのループ処理を繰り返す。
【００６２】
ステップＳ２２５においてＴが０になった場合には、ポインタｍを１にセットして（ステップＳ２２８）、ｍをインクリメントしながらステップＳ２２９〜ステップＳ２３７のループ処理を実行する。ステップＳ２２９において、ＦＡＦｍ（ｎ）、ＦＣＦｍ（ｎ）、ＦＲＦｍ（ｎ）のいずれかが１であるか否かを判別する。すなわち、ポインタｍで指定されるフィードバック音に対して発音指示がなされて、アタック指示、コンテニュー指示、リリース指示のいずれかの指示がなされているか否かを判別する。いずれかの指示がなされている場合には、ｍで指定されるフィードバック音の周波数ＦＦｍ（ｎ）を原音の周波数Ｆ（ｎ）に（ｍ＋１）を乗算した周波数とする（ステップＳ２３０）。そして、音源部１０に対してＦＦｍ（ｎ）及びフィードバック音の現在のレベルＦＧＬｍ（ｎ）を送付する（ステップＳ２３１）。
【００６３】
次に、フィードバック音が発音中であるか否かを判別し（ステップＳ２３２）、発音中でない場合には発音開始指示をして（ステップＳ２３３）、ステップＳ２３４に移行する。すでにフィードバック音が発音中である場合には、そのままステップＳ２３４に移行する。ステップＳ２３４においては、ＦＧＬｍ（ｎ）が０であるか否かすなわちフィードバック音が発音されているか否かを判別する。そして、ＦＧＬｍ（ｎ）が０である場合には消音指示をして（ステップＳ２３５）、ｍをインクリメントする（ステップＳ２３６）。ステップＳ２３４においてＦＧＬｍ（ｎ）が１である場合には、フィードバック音が発音中であるので消音指示をすることなく、ステップＳ２３６に移行してｍをインクリメントする。
【００６４】
そして、インクリメントしたｍが３より大きいか否かを判別し（ステップＳ２３７）、ｍが３以下の場合にはステップＳ２２９に移行してループ処理を繰り返す。したがって、ｍが１の場合には原音の周波数の２倍の周波数のフィードバック音で発音し、ｍが２の場合には原音の周波数の３倍の周波数のフィードバック音で発音し、ｍが３の場合には原音の周波数の４倍の周波数のフィードバック音で発音する。ｍが３より大きくなった場合には、ステップＳ２２６に移行してｎをインクリメントする。
【００６５】
タイマインタラプト処理は、図２５に示すように、タイマインタラプトが入るとＴが０か否かを判別し（ステップＳ２３８）、Ｔが０でない場合にはＴをデクリメントして（ステップＳ２３９）メインルーチンに戻る。Ｔが０になった場合にはｎを１にセットして（ステップＳ２４０）、ｎをインクリメントしながら各原音ごとにステップＳ２４１〜図２６のステップＳ２５９のループ処理を実行する。ＮＲＦ（ｎ）が１（原音のフィードバック用リリース指示）であるか否かを判別し（ステップＳ２４１）、ＮＲＦ（ｎ）が１である場合には、ＮＬ（ｎ）が０であるか否かすなわち原音のレベルが０であるか否かを判別する（ステップＳ２４２）。ＮＬ（ｎ）が０でない場合には、原音のレベルを下げるためにＮＬ（ｎ）からリリースレートＮＲＲ（ｎ）を減算する（ステップＳ２４３）。ＮＬ（ｎ）が０である場合には、原音のレベルが０になっているのでＮＲＦ（ｎ）を０にリセットする（ステップＳ２４４）。
【００６６】
次に、ポインタｍを１にセットして（ステップＳ２４５）、ｍをインクリメントしながら各フィードバック音ごとにステップＳ２４６〜図２６のステップＳ２５７のループ処理を実行する。ＦＡＦｍ（ｎ）が１（フィードバック音のアタック指示）であるか否かを判別し（ステップＳ２４６）、ＦＡＦｍ（ｎ）が１である場合には、ＦＧＬｍ（ｎ）とＦＳＬｍ（ｎ）とが一致しているか否か、すなわちフィードバック音の現在レベルが収束レベルに達しているか否かを判別する（ステップＳ２４７）。
【００６７】
ＦＧＬｍ（ｎ）とＦＳＬｍ（ｎ）とが一致していない場合、すなわちフィードバック音の現在レベルがまだ収束レベルに達していない場合には、現在のレベルＦＧＬｍ（ｎ）にアタックレートＦＡＲｍ（ｎ）を加算して（ステップＳ２４８）、図２６のフローに移行する。ステップＳ２４７においてＦＧＬｍ（ｎ）とＦＳＬｍ（ｎ）とが一致して収束レベルに達している場合には、ＦＡＦｍ（ｎ）を０にリセットしてアタック指示を解除し（ステップＳ２４９）、収束レベルを維持させるためにＦＣＦｍ（ｎ）を１にセットする（ステップＳ２５０）。この後、図２６に移行する。なお、ステップＳ２４６において、ＦＡＦｍ（ｎ）が０にリセットされてアタック指示が解除されている場合にも図２６に移行する。
【００６８】
図２６のステップＳ２５１においては、ＦＲＦｍ（ｎ）が１（フィードバック音のリリース指示）であるか否かを判別する。ＦＲＦｍ（ｎ）が１である場合には、ＦＣＦｍ（ｎ）を０にリセットして収束レベル維持を解除させる（ステップＳ２５２）。そして、フィードバック音の現在レベルＦＧＬｍ（ｎ）が０になって発音が終了しているか否かを判別する（ステップＳ２５３）。ＦＧＬｍ（ｎ）が０になっていない場合には、ＦＧＬｍ（ｎ）からリリースレートＦＲＲｍ（ｎ）を減算し（ステップＳ２５４）、ｍをインクリメントする（ステップＳ２５５）。一方、ＦＧＬｍ（ｎ）が０になっている場合には、ＦＲＦｍ（ｎ）を０にリセットして（ステップＳ２５６）、ステップＳ２５５に移行してｍをインクリメントする。なお、ステップＳ２５１においてＦＲＦｍ（ｎ）が０である場合にもステップＳ２５５に移行してｍをインクリメントする。
【００６９】
この後、ｍが３より大きくなったか否かを判別し（ステップＳ２５７）、ｍが３以下である場合には図２５のステップＳ２４６に移行して、次のフィードバック音についてのループ処理を繰り返す。ｍが３より大きくなった場合には、ｎをインクリメントし（ステップＳ２５８）、ｎが６より大きくなったか否かを判別する（ステップＳ２５９）。ｎが６以下である場合には、図２５のステップＳ２４１に移行して次の原音についてのループ処理を繰り返す。ステップＳ２５９においてｎが６より大きくなった場合には、メインルーチンに戻る。
【００７０】
上記実施形態においては、スイッチ類４は、原音に付加するフィードバック音の生成を制御するための制御情報、及びフィードバック音の原音に対する依存度を示す依存情報を入力する入力手段である。ＲＡＭ３３は、入力された制御情報及び依存情報を記憶する記憶手段である。また、ＣＰＵ３１は、制御情報及び依存情報に応じてフィードバック音の楽音データを生成するフィードバック音生成手段を構成する。
【００７１】
上記実施形態によれば、発生するフィードバック音をどれだけ原音に依存させるかを依存情報によって自在に設定することができる。具体的には、以下の作用及び効果が得られる。
（１）依存情報によってフィードバック音の強弱が原音のベロシティに依存しないように設定できる。したがって、フィードバック音のレベルが変動して不安定な発音にならない。
（２）依存情報によってフィードバック音を発する原音のレベルを設定できる。したがって、実際の電子弦楽器と同様に、原音のレベルが所定値を超えた場合にフィードバック音が発せられられる。
（３）依存情報によって原音からフィードバック音への遷移時間を変化できる。したがって、発生される楽音が画一的にならず音楽性が豊かになる。
（４）依存情報によって原音の周波数帯域に応じてくフィードバック音を発生できる。したがって、自然な楽音を発生させることができる。
（５）依存情報によって原音の音高とフィードバック音の音高との関係を変化できる。したがって、発生される楽音の自由度が大きくなる。
（６）依存情報によって原音が和音であるときに、フィードバック音が発生させる原音を選択できる。したがって、実際のフィードバック音と同じような楽音を発生することができる。
【００７２】
なお、上記実施形態では、フィードバック効果付加装置としてキーボード型シンセサイザーを例に採ったが、キーボードをもたない音源モジュールや音源ボード等の他の楽音装置にもこの発明を適用することができる。
【００７３】
【発明の効果】
この発明によれば、発生するフィードバック音をどれだけ原音に依存させるかを依存情報によって自在に設定することができるので、実際に電子楽器を演奏したときの特性を忠実に再現することができる。
【図面の簡単な説明】
【図１】この発明の実施形態のフィードバック効果付加装置の外観を示す平面図。
【図２】図１のフィードバック効果付加装置のシステム構成を示すブロック図。
【図３】実施形態における音源制御パラメータの説明図。
【図４】周波数特性のパラメータを示す図。
【図５】原音のリリースとフィードバック音のアタックの遷移を示す図。
【図６】フィードバック音の立上りの特性を示す図。
【図７】図２におけるＣＰＵの動作を示すメインルーチンのフローチャート。
【図８】図７のメインルーチンにおけるスイッチ処理のフローチャート。
【図９】図８に続くスイッチ処理のフローチャート。
【図１０】図８に続くスイッチ処理のフローチャート。
【図１１】図７のメインルーチンにおける鍵盤処理のフローチャート。
【図１２】図７のメインルーチンにおけるベンダ処理のフローチャート。
【図１３】図７のメインルーチンにおけるフィードバック処理のフローチャート。
【図１４】図１３に続くフィードバック処理のフローチャート。
【図１５】図１４におけるＬｅｖｅｌ処理のフローチャート。
【図１６】図１４におけるＴｏｐ処理のフローチャート。
【図１７】図１４におけるＢｏｔｔｏｍ処理のフローチャート。
【図１８】図１４におけるＦｉｒｓｔ処理のフローチャート。
【図１９】図１４におけるＬａｓｔ処理のフローチャート。
【図２０】図１４に続くフィードバック処理のフローチャート。
【図２１】図１４に続くフィードバック処理のフローチャート。
【図２２】図１４に続くフィードバック処理のフローチャート。
【図２３】図７のメインルーチンにおける発音処理のフローチャート。
【図２４】図２３に続く発音処理のフローチャート。
【図２５】タイマインタラプト処理のフローチャート。
【図２６】図２５に続くタイマインタラプト処理のフローチャート。
【図２７】図２のＲＡＭにおけるパラメータ設定エリアを示す図。
【図２８】図２のＲＡＭにおける原音のデータエリアを示す図。
【図２９】図２のＲＡＭにおけるフィードバック音のデータエリアを示す図。
【図３０】図２のＲＡＭにおけるポインタ及びレジスタを示す図。
【符号の説明】
１  鍵盤
２  ベンダホイール
４  スイッチ類
１０  音源部
２０  演奏部
３０  制御部
３１  ＣＰＵ
３３  ＲＡＭ
【図１】
0003658631.tif 000005
【図２】
0003658631.tif 000006
【図３】
0003658631.tif 000007
【図４】
0003658631.tif 000008
【図５】
0003658631.tif 000009
【図６】
0003658631.tif 000010
【図７】
0003658631.tif 000011
【図８】
0003658631.tif 000012
【図９】
0003658631.tif 000013
【図１０】
0003658631.tif 000014
【図１１】
0003658631.tif 000015
【図１２】
0003658631.tif 000016
【図１３】
0003658631.tif 000017
【図１４】
0003658631.tif 000018
【図１５】
0003658631.tif 000019
【図１６】
0003658631.tif 000020
【図１７】
0003658631.tif 000021
【図１８】
0003658631.tif 000022
【図１９】
0003658631.tif 000023
【図２０】
0003658631.tif 000024
【図２１】
0003658631.tif 000025
【図２２】
0003658631.tif 000026
【図２３】
0003658631.tif 000027
【図２４】
0003658631.tif 000028
【図２５】
0003658631.tif 000029
【図２６】
0003658631.tif 000030
【図２７】
0003658631.tif 000031
【図２８】
0003658631.tif 000032
【図２９】
0003658631.tif 000033
【図３０】
0003658631.tif 000034