(57)【特許請求の範囲】
【請求項１】
複数の振動体のそれぞれの振動信号を入力する入力手段と、
この入力手段から入力される各振動信号に対応する楽音信号の生成を指示する制御手段と、
全ての前記振動体について振動周波数を変化させるための１つの操作手段と、
を有する楽音信号生成指示装置において、
前記操作手段が操作された際に、前記入力手段から入力される複数の振動信号のうち、いずれか１つの振動信号のピッチ変化量を検出する検出手段を備え、
前記制御手段は、当該１つの振動信号以外の他の振動体の振動信号に対応する各楽音信号のピッチを、前記検出手段より検出されたピッチ変化量に従って補正するものであることを特徴とする楽音信号生成指示装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、入力される弦振動信号に基づき楽音信号を生成を指示する楽音信号生成指示装置に関する。
【０００２】
【従来の技術】
従来、入力される弦振動信号に基づき楽音信号の生成を指示する装置として、ギターシンセサイザが知られている。このギターシンセサイザは、入力される弦振動信号のピッチに応じた楽音信号を生成するとともに、弦振動信号のエンベロープに基づき楽音信号のエンベロープを制御して出力する。また、ギターには、トレモロアームが設けられており、このトレモロアームを操作すると、全弦のテンションが変化して弦振動のピッチが変化する。よって、この弦振動のピッチに応じて楽音信号のピッチも変化し、これにより音高が連続的に変化する楽音を発生させることができる。
【０００３】
【発明が解決しようとする課題】
しかしながら、トレモロアームを操作した場合、ギターに張設されている弦はその太さに応じてピッチの変化幅が異なり、太い弦ほどピッチの変化幅が大きい。したがって、和音演奏を行うべく６本の弦を同時にピッキングし、しかる後にトレモロアームを操作すると、各弦のピッチが異なる変化幅で変化することとなる。このため、各弦のピッチに従って楽音信号のピッチを制御すると、この楽音信号に基づいて発生する各楽音間の音高差がトレモロアームの操作に伴って変化し、和音状態が崩れてしまう。
【０００４】
本発明は、このような従来の課題に鑑みてなされたものであり、和音状態を崩すことなく、ピッチを変化させることのできる楽音信号生成指示装置を提供することを目的とするものである。
【０００５】
【課題を解決するための手段】
前記課題を解決するために本発明にあっては、複数の振動体のそれぞれの振動信号を入力する入力手段と、この入力手段から入力される各振動信号に対応する楽音信号の生成を指示する制御手段と、全ての前記振動体について振動周波数を変化させるための１つの操作手段と、を有する楽音信号生成指示装置において、前記操作手段が操作された際に、前記入力手段から入力される複数の振動信号のうち、いずれか１つの振動信号のピッチ変化量を検出する検出手段を備え、前記制御手段は、当該１つの振動信号以外の他の振動体の振動信号に対応する各楽音信号のピッチを、前記検出手段より検出されたピッチ変化量に従って補正するものであることを特徴とする。
【０００６】
【作用】
前記構成において、複数の振動体のそれぞれの振動信号を入力し、この振動信号に対応する楽音信号の生成を指示するとともに、全ての前記振動体について振動周波数を変化させるための１つの操作手段操作手段が操作された際に、複数の振動信号のうちいずれか１つの振動信号のピッチ変化量を検出し、この１つの振動信号以外の他の振動体の振動信号に対応する各楽音信号のピッチを、検出されたピッチ変化量に従って補正する。よって、各振動信号のピッチ変化量が異なる場合であっても、対応する楽音信号のピッチの変化量を同一にすることが可能となる。
【０００７】
【実施例】
以下、本発明の一実施例を図に従って説明する。すなわち、図１に示すように、本実施例にかかる楽音信号生成装置１は、第１弦から第６弦までの６本の弦２を有するギター３に接続されて使用される構成であって、各種機能スイッチが配置されたコンソールスイッチ部４を有しており、このコンソールスイッチ部４にはピッチホールドペダル（ＰＨＰ）２０が設けられている。ギター３には、トレモロアーム２１が設けられているとともに、ピックアップ５が設けられており、このピックアップ５は、各弦２の振動を個別に検出して楽音信号生成装置１に送出する。
【０００８】
図２は、楽音信号生成装置１の構成を示すブロック図であり、Ｍａｉｎ  ＣＰＵ６には、コンソールスイッチ部４から各種スイッチの操作情報が入力される。Ｍａｉｎ  ＣＰＵ６は、この入力情報とＲＯＭ７内に記憶されているプログラムに従って動作し、ＲＡＭ８をワークエリアとして使用しつつ、ＤＳＰ９を制御する。ＤＳＰ９は、ＣＰＵ、プログラム等を格納してなるＲＯＭ及びワーキングＲＡＭを有してなる。
【０００９】
一方、６個の入力部１０−１〜６には、前記ピックアップ５から対応する各弦の弦振動信号が入力される。ＬＰＦ１１−１〜６は、対応する入力部１０−１〜６から入力される各弦振動信号に含まれている不要な高調波を除去し、Ａ／Ｄコンバータ１２−１〜６は、ＬＰＦ１１−１〜６を介して入力される各弦振動信号をデジタルデータに変換して、ＤＳＰ９に入力する。ＤＳＰ９は、内部のＲＯＭに格納されているプログラムに従って動作し、入力される弦振動の波形データを処理するとともに、各々６個の波形読み出し回路１３−１〜６、フィルタ１４−１〜６、エンベロープ発生器１５−１〜６を制御する。
【００１０】
すなわち、波形読み出し回路１３−１〜６は、ＤＳＰ９からの指示に従って、ＰＣＭ  ＲＯＭ２２に記憶されている楽音波形データを読み出し、この楽音波形データはＤＳＰ９からの指示に従って係数を変化させるフィルタ１４−１〜６を介して、エンベロープ発生器１５−１〜６に入力される。エンベロープ発生器１５−１〜６は、ＤＳＰ９からの指示に従ってエンベロープデータを発生し、このエンベロープデータと対応する波形データとは、Ｄ／Ａコンバータ１７によりアナログ波形信号に変換さる。この変換されたアナログ波形信号は、出力回路１８及び出力部１９を介して外部のサウンドシステム等に送出される。
【００１１】
また、前記ＤＳＰ９内のワーキングＲＡＭには、入力された各弦振動の波形データを記憶するリング状の入力波形記憶エリアが設けられている。このリング状の入力波形記憶エリアは、６本の弦に対応する各々６個の領域ＰＬ１〜ＰＬ６とＰＴ１〜ＰＴ６を有している。そして、ＰＬ１〜ＰＬ６には、過去２５６回分の波形のピークポイントのレベルが記憶され、ＰＴ１〜ＰＴ６には、ピークポイントの到達時刻が記憶される。
【００１２】
次に、以上の構成にかかる本実施例の動作を図３以降に示すフローチャートに従って説明する。Ｍａｉｎ  ＣＰＵ６は、コンソールスイッチ部４に設けられている電源スイッチの投入に伴って、図３に示すフローに示すフローに従って動作を開始する。すなわち、イニシャライズ処理（ＳＡ１）を実行して、各種レジスタ等に所定の初期値をセットし、次に、ピッチホールドペダル（ＰＨＰ）２０の状態を識別する（ＳＡ２）。この識別の結果、ピッチホールドペダル（ＰＨＰ）２０がオフ状態を継続しているならばモードレジスタＭＯＤＥに“０”をセットし（ＳＡ３）、ピッチホールドペダル（ＰＨＰ）２０が操作されてオフからオンに変化したならばＭＯＤＥに“１”をセットする（ＳＡ４）。
【００１３】
また、ピッチホールドペダル（ＰＨＰ）２０が操作されている状態にありオン中であれば、ＭＯＤＥに“２”をセットする（ＳＡ５）。したがって、ＭＯＤＥは、“０”によりピッチホールドペダル（ＰＨＰ）２０が非操作状態であることを示し、“１”により操作されたことを示し、“２”により操作中であることを示す。そして、ＳＡ３〜ＳＡ５のいずれかに続くＳＡ６では、前記トレモロアーム２１の変位量を検出して、トレモロアームレジスタＴＲに格納し、引き続き、これらの処理以外のその他の処理を行って（ＳＡ７）、ＥＮＤに進む。
【００１４】
一方、ＤＳＰ９は、同様に電源スイッチの投入に伴って、図４に示すメインフローに従って動作を開始する。そして、先ず初期化処理（ＳＢ１）を実行し、後述するフローにおいて用いる各種レジスタをクリアし、あるいは所定の初期値をセットする。次に、Ｍａｉｎ  ＣＰＵ６との交信を行った後（ＳＢ２）、波形取り込み処理（レベル検出）（ＳＢ３）、ピッチ検出処理（ＳＢ４）、エンベロープレベル検出処理（ＳＢ５）、アタック検出／発音処理（ＳＢ６）、波形定常処理（ＳＢ７）を順次行い、アイドリング（ＳＢ８）によりループ１周時間を一定に調整しつつ、ＳＢ２〜ＳＢ８のループを繰り返す。
【００１５】
前記Ｍａｉｎ  ＣＰＵ６との交信（ＳＢ２）は、図５に示すフローに従って行われ、前述のＳＡ３〜ＳＡ５でセットしたＭＯＤＥと、ＳＡ６でＴＲに格納したトレモロアーム２１の変位量とを取り込む（ＳＣ１）。次に、Ｍａｉｎ  ＣＰＵ６からパラメータ等を受け取る等の、ＳＣ１で行った処理以外のその他の必要な処理を行った後（ＳＣ２）、前記メインフローにリターンする。
【００１６】
前記波形取り込み処理（レベル検出）（ＳＢ３）は、図６に示すフローに従って行われ、先ずポインタｎに“１”をセットする（ＳＤ１）。次に、このポインタｎの値により指定されるレジスタＨＡｎに、Ａ／Ｄコンバータ１２−１〜６のうちのｎ番目からの入力を格納する（ＳＤ２）。次に、ポインタｎをインクリメントした後（ＳＤ３）、ポインタｎが“７”となったか否かを判別し（ＳＤ４）、ｎ＝７となるまでＳＤ２〜ＳＤ４のループを繰り返す。したがって、この図６に示すフローにより、ＨＡ１〜ＨＡ６には、対応するＡ／Ｄコンバータ１２−１〜６からの入力が格納される。
【００１７】
なお、図４のメインルーチンに対して、図７のタイマインタラプトが一定の時間間隔で割り込んで実行され、タイマＴをインクリメントする（ＳＥ１）。次に、タイマＴが所定の最大値ｍａｘとなったか否かを判別し（ＳＥ２）、Ｔ＝ｍａｘとなったならばタイマＴをリセットする（ＳＥ３）。したがって、タイマＴは、最大値ｍａｘまで一定の時間間隔で増加している。
【００１８】
他方、前記ピッチ検出処理（ＳＢ４）では、図８に示すように、ピーク検出処理（ＳＦ１）とピッチ算出処理（ＳＦ２）、及びピッチホールド処理（ＳＦ３）を順次実行する。
【００１９】
ピーク検出処理（ＳＦ１）は、図９に示すフローに従って行われ、先ずポインタｎに“１”をセットする（ＳＧ１）。次に、このポインタｎの値により指定されるレジスタＤｎに、同様にポインタｎの値で指定されるＨＡｎ−ＦＨＡｎの値を格納する（ＳＧ２）。ここで、ＨＡｎは、図６のＳＤ２で説明したように、現時点におけるＡ／Ｄコンバータ１２−ｎからの入力を格納しているレジスタであり、また、ＦＨＡｎはＳＧ８で後述するように、１回前のＡ／Ｄコンバータ１２−ｎからの入力を格納している。よって、ＨＡｎ−ＦＨＡｎにより、今回のＡ／Ｄ入力値と前回のＡ／Ｄ入力値との差を得ることができ、この差をレジスタＤｎに格納する。
【００２０】
次に、ポインタｎの値により指定されるレジスタＤｎに格納されている値の符号と、レジスタＦＤｎに格納されている値の符号とが不一致であるか否かを判別する（ＳＧ３）。このＦＤｎに格納されている値は、ＳＧ９で後述するように、１回前のＳＧ２の処理でＤｎに格納されていた値である。したがって、ＳＧ３の判別の結果、（Ｄｎの符号）＝（ＦＤｎの符号）であって、ＤｎとＦＤｎの符号が一致する場合には、弦振動の波形がピークポイントに到達する前の状態にある。よって、この時点では未だピークポイントを検出することはできないことから、ＳＧ３からＳＧ８に進み、ＨＡｎの値をＦＨＡｎに格納し、Ｄｎの値をＦＤｎに格納する（ＳＧ９）。さらに、ポインタｎをインクリメントした後（ＳＧ１０）、ポインタｎが“７”となったか否かを判別し（ＳＧ１１）、ｎ＝７となるまでＳＧ２〜ＳＧ１１のループを繰り返す。
【００２１】
しかし、ＳＧ３の判別の結果、（Ｄｎの符号）≠（ＦＤｎの符号）であって、ＤｎとＦＤｎの符号が不一致である場合には、弦振動の波形がピークポイントを折り返した直後の状態にあり、よって、前回のＡ／Ｄ入力値がピークポイントを示すレベル値である。また、この前回のＡ／Ｄ入力値は、前述のＳＧ８の処理により、ＦＨＡｎに格納されている。そこで、ＳＧ３に続くＳＧ４では、このＦＨＡｎの値を、対応するポインタｎの値で指定されるＰＬｎ［］にｍｎ番目のデータ［ｍｎ］としてストアするとともに、このときのタイマＴの値をＰＴｎ［］にｍｎ番目のデータ［ｍｎ］としてストアする（ＳＧ４）。
【００２２】
次に、ポインタｍｎをインクリメントするとともに（ＳＧ５）、このインクリメントしたｍｎが“２５６”となったか否かを判別する（ＳＧ６）。この判別の結果、ｍｎ≠２５６であれば、前述したＳＧ８以降の処理を実行し、ｍｎ＝２５６となったならば、ｍｎをリセットした後（ＳＧ７）、ＳＧ８以降の処理を実行する。したがって、このピーク検出処理により、６本の弦に対応するＰＬ１〜ＰＬ６とＰＴ１〜ＰＴ６毎に、２５６個のピークポイントのピーク値とその到達時刻とを示すデータが記憶されることとなる。
【００２３】
前記ピッチ算出処理（ＳＦ２）は、図１０に示すフローに従って行われ、先ずポインタｎに“１”をセットする（ＳＨ１）。次に、このポインタｎの値により指定される２５６個からなるＰＬｎ［ｍｎ］のデータ群の中で最もレベルの大きいものをポインタ指定し、ＰＬｍａｘ，ＰＴｍａｘにストアする（ＳＨ２）。すなわち、ＰＬｎ［］には２５６個のピークポイントのレベル値が格納され、ＰＴｎ［］には２５６個のピークポイントの到達時刻が格納されている。よって、この２５６個のピークポイントの中で最も大きいレベル値をＰＬｍａｘに格納するとともに、対応する到達時刻をＰＴｍａｘに格納する。引き続き、ポインタを移動させて隣接するＰＴｎ［ｍｎ］，ＰＴｎ［ｍｎ］を指定する（ＳＨ３）。さらに、この指定した領域にデータが記憶さているか否かを判別し（ＳＨ４）、記憶されていない場合には、ポインタｎをインクリメントした後（ＳＨ８）、ｎ＝７となったか否かを判別し（ＳＨ９）、ｎ＝７となるまで、ＳＨ２からの処理を繰り返す。また  ＳＨ４での判別の結果、ＰＴｎ［ｍｎ］，ＰＴｎ［ｍｎ］にデータがあった場合には、前述のＳＨ２でＰＬｍａｘにストアしたレベルデータと、ＳＨ３で指定したＰＬｎ［ｍｎ］のデータの符号が同じであるか否かを判別する（ＳＨ５）。この判別の結果、符号が異なる場合にはＳＨ３からの処理を繰り返し、符号が同じである場合には、ＳＨ６に進む。すなわち、振動波形のピークポイントは正の値と負の値とが隣接して交互に生ずることから、ＳＨ２〜ＳＨ５の処理によりＰＬｍａｘに隣接する同じ符号のピークポイントを選び出す。
【００２４】
そして、ＰＬｍａｘと同じ符号のＰＬｎが選び出されたならば、０．５×ＰＬｍａｘ≦ＰＬｎ［ｍｎ］≦ＰＬｍａｘであるか否かを判別する（ＳＨ６）。すなわち、ＰＬｎ［ｍｎ］が、０．５×ＰＬｍａｘ（ＰＬｍａｘの５０％の値）とＰＬｍａｘとの間の値のように、ＰＬｍａｘに近い値であれば、ＰＬｎ［ｍｎ］は、間違いなくＰＬｍａｘに隣接する次の同符号のピークポイント、つまり１周期に対応するピークポイントであることが確認できる。
【００２５】
この確認ができたならば、｛ＰＴｎ［ｍｎ］−ＰＴｍａｘ｝に基づき、ピッチを算出しＣＰＩＴＣＨ［ｎ］にストアする（ＳＨ７）。すなわち、ＰＴｎ［ｍｎ］とＰＴｍａｘとは、ＰＬｎ［ｍｎ］とＰＬｍａｘに対応するピーク到達時刻を格納しており、また、ＰＬｎ［ｍｎ］とＰＬｍａｘは１周期のピークポイントを格納している。よって、ＰＴｎ［ｍｎ］−ＰＴｍａｘにより１周期の時間を検出することができ、この１周期の時間により弦振動のピッチ（振動周波数）を算出することができる。したがって、ＳＨ７では当該第ｎ弦の現時点のピッチを算出して、対応するレジスタＣＰＩＴＣＨ［ｎ］に格納する。
【００２６】
前記ピッチホールド処理（ＳＦ３）は、図１１に示すフローに従って行われ、先ずＭＯＤＥに“２”がセットされているか否かを判別し（ＳＩ１）、ＭＯＤＥ＝２である場合には基準弦検出処理を実行する（ＳＩ２）。この基準弦検出処理は、図１２に示すフローに従って行われ、先ずレジスタＮとポインタｎとに“１”をセットする（ＳＪ１）。次に、このポインタｎの値により指定されるＥｎの値、つまり第ｎ弦のエンベロープレベルが所定値α以上であるか否かを判別する（ＳＪ２）。このＳＪ２の判別により、６本の弦のうち現在振動中の弦を検出することができ、振動を停止している場合には、ポインタｎをインクリメントした後（ＳＪ５）、ポインタｎ＝７であるか否かを判別し、ｎ＝７となるまでＳＪ２からの処理を繰り返す。また、ＳＪ２での判別の結果、Ｅｎ＞αであって、第ｎ弦が振動中であれば、ポインタｎの値がレジスタＮの値よりも大きいか否かを判別し（ＳＪ３）、Ｎ＜ｎであれば、レジスタＮにポインタｎの値を格納して（ＳＪ４）、前述のＳＪ５以降の処理を実行する。したがって、この基準検出処理により、現在振動中であって最も弦番号の大きい弦、つまり振動中の最も太い弦が検出されて、該弦の弦番号がＮに格納されることとなる。
【００２７】
そして、前記図１１のＳＩ２に続くＳＩ３では、この基準弦検出処理でレジスタＮに格納された値により指定されるＣＰＴＩＣＨ［Ｎ］−ＨＰＩＴＣＨ［Ｎ］の値を、ＳＰＩＴＣＨに格納する（ＳＩ３）。ここで、ＣＰＴＩＣＨ［Ｎ］には、前述した図１０におけるＳＨ７の処理により、第Ｎ弦の現在のピッチが格納されており、また、ＨＰＩＴＣＨ［ｎ］には、このフローの後述するＳＩ７において、ピッチホールドペダル（ＰＨＰ）２０がオフからオンに変化した時点における、第Ｎ弦のピッチが格納されている。したがって、このＳＩ３におけるＣＰＴＩＣＨ［Ｎ］−ＨＰＩＴＣＨ［Ｎ］の処理により、基準弦となっている最も太い第Ｎ弦の、ピッチホールドペダル（ＰＨＰ）２０の操作時点と現時点とのピッチの差が算出され、この第Ｎ弦における、ピッチホールドペダル（ＰＨＰ）２０の操作時点と現時点とのピッチの差がＳＰＩＴＣＨに格納されることとなる。
【００２８】
また、ＳＩ１又はＳＩ３に続くＳＩ４では、ポインタｎに“１”をセットし、引き続きＭＯＤＥに“０”“１”“２”のいずれ値がセットされているかを識別する（ＳＩ５）。そして、ＭＯＤＥ＝０であってピッチホールドペダル（ＰＨＰ）２０がオフの状態にあれば、ｎの値により指定されるＣＰＴＩＣＨ［ｎ］の値をＲＰＩＴＣＨ［ｎ］に格納する（ＳＩ６）。このＳＩ６の処理により、第ｎ弦の現在のピッチがＲＰＩＴＣＨ［ｎ］に格納されることとなる。また、ＳＩ５での判別の結果、ＭＯＤＥ＝１であってピッチホールドペダル（ＰＨＰ）２０が操作されてオフからオンに変化した場合には、ＣＰＴＩＣＨ［ｎ］の値をＲＰＩＴＣＨ［ｎ］とＨＰＩＴＣＨ［ｎ］とに格納する（ＳＩ７）。つまり、ピッチホールドペダル（ＰＨＰ）２０が操作された場合には、その時点の第ｎ弦のピッチをＲＰＩＴＣＨ［ｎ］のみならずＨＰＩＴＣＨ［ｎ］にも格納する。
【００２９】
さらに、ＳＩ５での判別の結果、ＭＯＤＥ＝２であってピッチホールドペダル（ＰＨＰ）２０がオン状態を継続しているならば、前記ＳＩ３でＳＰＩＴＣＨに格納されているピッチを、前記ＳＩ７でピッチホールドペダル（ＰＨＰ）２０の操作時点のピッチを格納しているＨＰＩＴＣＨ［ｎ］の値に加算してＲＰＩＴＣＨ［ｎ］に格納する（ＳＩ８）。したがって、ピッチホールドペダル（ＰＨＰ）２０がオン状態を継続している場合には、このＳＩ８の処理により、ピッチホールドペダル（ＰＨＰ）２０がオンとなった時点のピッチに前記基準弦のピッチの変化量が加算されて、ＲＰＩＴＣＨ［ｎ］の値が更新されて行くこととなる。そして、ＳＩ６〜ＳＩ８のいずれかに続くＳＩ９では、ポインタｎをインクリメントした後、ポインタｎの値が“６”を超えたか否かを判別し（ＳＩ１０）、ｎ＞６となるまで、ＳＩ５からの処理を繰り返す。
【００３０】
一方、エンベロープレベル検出処理（ＳＢ５）は、図１３に示すフローに従って行われ、ポインタｎに“１”をセットする（ＳＫ１）。次に、このポインタｎの値により指定されるＨＡｎが負の値であるか否かを判別する（ＳＫ２）。このＨＡｎは、図６のＳＤ２で説明したように、現時点におけるＡ／Ｄコンバータ１２−ｎからの入力を格納しているレジスタであり、弦振動が開始されることにより振動方向に応じて正の値と負の値とを格納している。そこで、ＳＫ２では、このＨＡｎの値が負の値であるか否かを判別し、負の値である場合には符号を反転して（ＳＫ３）、正の値にする。次に、Ｅｎに“（１−α）×Ｅｎ＋α×ＨＡｎ”の演算結果を格納する（ＳＫ４）。このＳＫ４の処理により、今までのＥｎの値を係数（１−α）に応じて反映させ、且つ今回のＨＡｎを係数αをもって加味したエンベロープレベルがＥｎに格納される。引き続き、ポインタｎをインクリメントした後（ＳＫ５）、ポインタｎ＝７となったか否かを判別し（ＳＫ６）、ｎ＝７となるまで、ＳＫ２からの処理を繰り返す。
【００３１】
前記アタック検出／発音処理（ＳＢ６）は、図１４に示すフローに従って行われる。すなわち、先ずポインタｎとポインタｍに“１”をセットする（ＳＬ１）。次に、このポインタｎの値により指定されＳＴＡＴ［ｎ］に“０”がセットされているか否かを判別し（ＳＬ２）、ＳＴＡＴ［ｎ］＝０である場合には、図１３のＳＫ４で現在のエンベロープレベルを格納しているＥｎの値が、発音開始レベルである第１のスレショルドＴＨ１よりも大きいか否かを判別する（ＳＬ３）。この判別の結果、Ｅｎ≦ＴＨ１であって、エンベロープレベルが発音開始レベルに達していないならば、ＳＬ４〜ＳＬ６の処理を行うことなく、ＳＬ７に進む。
【００３２】
また、ＳＬ３での判別の結果、Ｅｎ＞ＴＨ１であって、エンベロープレベルが発音開始レベルに達しているならば、ＭＯＤＥ＝２か否か、つまりピッチホールドペダル（ＰＨＰ）２０がオン状態となっているか否かを判別する（ＳＬ４）。このＳＬ３とＳＬ４の判別の結果、Ｅｎ＞ＴＨ１であって且つＭＯＤＥ＝２である場合、つまり、エンベロープレベルが第１のスレショルドＴＨ１よりも大であり、かつ、既にピッチホールドペダル（ＰＨＰ）２０がオン状態である場合には、ＳＴＡＴ［ｎ］に“２”をセットする（ＳＬ５）。しかし、Ｅｎ＞ＴＨ１であって且つＭＯＤＥ≠２である場合には、ＳＴＡＴ［ｎ］に“１”をセットする（ＳＬ６）。
【００３３】
そして、ＳＬ３、ＳＬ５、ＳＬ６のいずれかに続くＳＬ７では、ＲＰＩＴＣＨ［ｎ］に格納されているピッチデータに基づき、音源ｎを発音指示する。このとき、ＳＴＡＴ［ｎ］＝２であってピッチホールドペダル（ＰＨＰ）２０がオン中である場合には、図１１のＳＩ７でＲＰＩＴＣＨ［ｎ］にセットしたＨＰＩＴＣＨ［ｎ］＋ＳＰＩＴＣＨ、つまりピッチホールドペダル（ＰＨＰ）２０がオン操作された時点のピッチに前記基準弦のピッチ変化量を加算したピッチに基づき、音源ｎを発音指示する。したがって、ピッチホールドペダル（ＰＨＰ）２０がオン中である場合には、基準弦のピッチと同一の変化量をもって変化するピッチに基づき、他の弦に対応する発音指示がなされることとなる。
【００３４】
一方、ＳＬ２での判別の結果、ＳＴＡＴ［ｎ］≠０の状態にある場合には、ＳＬ２からＳＬ８に進み、Ｅｎが消音開始レベルである第２のスレショルドＴＨ２（但し、ＴＨ２＜ＴＨ１）以下となったか否かを判別する。この判別の結果、未だＥｎ≧ＴＨ２の状態にあれば、ポインタｎをインクリメントした後（ＳＬ１１）、ｎ＝７となったか否かを判別し（ＳＬ１２）、ｎ＝７となるまでＳＬ２からの処理を繰り返す。また、ＳＬ８での判別の結果、Ｅｎ＜ＴＨ２となって、消音レベル以下になった場合には、ＳＴＡＴ［ｎ］に“０”をセットした後（ＳＬ９）、対応の音源ｎに対して消音指示を行い（ＳＬ１０）、このＳＬ１０の処理によりｎ番目の弦の振動に対応して発生していた楽音信号が停止されることとなる。
【００３５】
他方、波形定常処理（ＳＢ７）は、図１５に示すフローに従って行われ、先ずポインタｎに“１”をセットする。（ＳＭ１）。次に、このポインタｎの値により指定されるＳＴＡＴ［ｎ］に“０”がセットされているか否かを判別する（ＳＭ２）。この判別の結果、ＳＴＡＴ［ｎ］＝０であれば、ＳＭ３の処理を行うことなく、ポインタｎをインクリメントし（ＳＭ４）、ｎ＝７となったか否かを判別した後（ＳＭ５）、ｎ＝７となるまで、ＳＭ２からの処理を繰り返す。また、ＳＭ２での判別の結果、ＳＴＡＴ［ｎ］≠０であれば、Ｅｎ及びＲＰＩＴＣＨ［ｎ］に従って音源ｎを制御する（ＳＭ３）。
【００３６】
このとき、ＳＴＡＴ［ｎ］＝２の状態にあれば、ＲＰＩＴＣＨ［ｎ］には、前述した図１１のＳＩ８において、ピッチホールドペダル（ＰＨＰ）２０がオンとなった時点のピッチに基準弦のピッチの変化量が加算された値が格納されている。つまり、６本の弦を同時に弾弦し和音演奏を行ってトレモロアーム２１を操作した際に、ピッチホールドペダル（ＰＨＰ）２０をオン状態にすれば、第１弦から第５弦に対応するＲＰＩＴＣＨ［１］〜［５］のピッチは、第６弦のピッチ変化幅と同一の変化幅でピッチが変化する。よって、ＲＰＩＴＣＨ［１］〜［６］は全て同一の変化幅にてピッチが変化することから、このＲＰＩＴＣＨ［１］〜［６］に従って音源を制御することにより、和音状態を崩すことなく、トレモロアーム２１の操作に応じて和音構成音のピッチを変化させることが可能となる。図１６〜１８は、本発明の第２〜４実施例における基準弦検出処理（ＳＩ２）の内容を示すフローチャートである。すなわち、図１６に示す第２実施例においては、先ずレジスタＮとポインタｎとに“６”をセットする（ＳＮ１）。次に、このポインタｎの値により指定されるＥｎの値、つまり第ｎ弦のエンベロープレベルが所定値α以上であるか否かを判別する（ＳＮ２）。このＳＮ２の判別により、６本の弦のうち現在振動中の弦を検出することができ、振動を停止している場合には、ポインタｎをデクリメントした後（ＳＮ５）、ポインタｎ＝０であるか否かを判別し、ｎ＝０となるまでＳＮ２からの処理を繰り返す。また、ＳＮ２での判別の結果、Ｅｎ＞αであって、第ｎ弦が振動中であれば、ポインタｎの値がレジスタＮの値よりも小さいか否かを判別し（ＳＮ３）、Ｎ＞ｎであれば、レジスタＮにポインタｎの値を格納して（ＳＮ４）、前述のＳＮ５以降の処理を実行する。したがって、この基準検出処理により、現在振動中であって最も弦番号の小さい弦、つまり振動中の最も細い弦が検出されて、該弦の弦番号がＮに格納されることとなる。よって、この実施例においては、トレモロアーム２１とピッチホールドペダル（ＰＨＰ）２０とが操作された際には、振動中の最も細い弦にピッチ変化幅をもって他の弦のピッチが制御され、これにより、和音状態を崩すことなく、トレモロアーム２１の操作に応じて和音構成音のピッチが変化することになる。
【００３７】
また、図１７に示す第３実施例の基準弦検出処理（ＳＩ２）においては、先ずレジスタＮとポインタｎとに“１”をセットする（ＳＯ１）。次に、│ＨＰＩＴＣＨ［ｎ＋１］−ＣＰＩＴＣＨ［ｎ＋１］│＜│ＨＰＩＴＣＨ［Ｎ］−ＣＰＩＴＣＨ［Ｎ］│であるか否かを判別する（ＳＯ２）。ここで、このＳＯ２の処理が１回目であるとすると、Ｎ＝ｎ＝１であることから、│ＨＰＩＴＣＨ［２］−ＣＰＩＴＣＨ［２］│＜│ＨＰＩＴＣＨ［１］−ＣＰＩＴＣＨ［１］│が判別されることになる。また、ＨＰＩＴＣＨ［］には、図１１のＳＩ７でピッチホールドペダル（ＰＨＰ）２０を操作した時点のピッチが格納され、ＣＰＩＴＣＨ［］には現時点のピッチが格納されている。したがって、ＨＰＩＴＣＨ［］−ＣＰＩＴＣＨ［］により、トレモロアーム２１の操作に伴うピッチの変化量を算出することができ、ＳＯ２では第ｎ＋１弦と第Ｎ弦のピッチの変化量の絶対値を判別する。そして、このＳＯ２の判別がＹＥＳであって、第ｎ＋１弦のピッチ変化量が第Ｎ弦のピッチの変化量よりも小さい場合には、ｎ＋１をレジスタＮに格納する（ＳＯ３）。引き続き、ポインタｎをインクリメントした後（ＳＯ４）、ポインタｎ＝６となったか否かを判別し（ＳＯ５）、ｎ＝６となるまでＳＯ２からの処理を繰り返す。したがって、この図１７に示す基準弦検出処理では、トレモロアーム２１の操作に伴うピッチの変化幅が最も小さい弦が基準弦として選択されることとなり、この選択された基準弦のピッチ変化幅に基づき、他の弦に対応する楽音信号のピッチが制御される。
【００３８】
さらに、図１８に示す第４実施例の基準弦検出処理においては、ＳＰ２で前述のＳＯ２とは逆に、│ＨＰＩＴＣＨ［ｎ＋１］−ＣＰＩＴＣＨ［ｎ＋１］│＞│ＨＰＩＴＣＨ［Ｎ］−ＣＰＩＴＣＨ［Ｎ］│であるか否かを判別する。したがって、この図１８に示す基準弦検出処理では、トレモロアーム２１の操作に伴うピッチの変化幅が最も大きい弦が基準弦として選択されることとなり、この選択された基準弦のピッチ変化幅に基づき、他の弦に対応する楽音信号のピッチが制御されることとなる。
【００３９】
なお、実施例においては６弦のギターに使用される装置を示したが、６弦のギターに限らず、ベースシンセサイザ等の他の弦楽器に適用できることは勿論である。
【００４０】
【発明の効果】
以上説明したように本発明は、ピッチの変化を伴う複数の振動体の振動信号に対応する楽音信号のピッチを、いずれか１つの振動信号のピッチ変化量に従って制御するようにした。したがって、和音演奏を行うべく例えば複数の弦を同時にピッキングし、しかる後にトレモロアームを操作した場合であっても、各弦に対応する楽音のピッチを同一の変化量で推移させることができる。よって、この楽音信号に基づいて発生する各楽音間の音高差がトレモロアームの操作に伴って変化することもなく、和音状態を崩すことなく、ピッチ変化を伴う複数の楽音の発生の指示が可能となる。また、本発明は、複数の振動信号のうち、所定の条件を満たすいずれか１つの振動信号を選択し、この選択した振動信号のピッチの変化量に従って、他の振動信号に対応する楽音信号のピッチを制御するようにした。よって、例えば最も太い弦や最も細い弦等の、常に同一弦のピッチ変化量に複数の楽音信号のピッチを合わせることができ、これにより安定したピッチ制御が可能となる。
【図面の簡単な説明】
【図１】本発明の一実施例を適用した楽音信号生成装置をギターに接続した状態を示す図である。
【図２】同実施例のブロック構成図である。
【図３】Ｍａｉｎ  ＣＰＵの処理内容を示すフローチャートである。
【図４】ＤＳＰのメインフローを示すフローチャートである。
【図５】Ｍａｉｎ  ＣＰＵとの交信処理の内容を示すフローチャートである。
【図６】波形取り込み処理の内容を示すフローチャートである。
【図７】タイマインタラプトを示すフローチャートである。
【図８】ピッチ検出処理の内容を示すフローチャートである。
【図９】ピーク検出処理の内容を示すフローチャートである。
【図１０】ピッチ算出処理の内容を示すフローチャートである。
【図１１】ピッチホールド処理の内容を示すフローチャートである。
【図１２】基準弦検出処理の内容を示すフローチャートである。
【図１３】エンベロープレベル検出処理の内容を示すフローチャートである。
【図１４】アタック検出／発音処理の内容の一部を示すフローチャートである。
【図１５】波形定常処理の内容を示すフローチャートである。
【図１６】第２実施例の基準弦検出処理の内容を示すフローチャートである。
【図１７】第３実施例の基準弦検出処理の内容を示すフローチャートである。
【図１８】第４実施例の基準弦検出処理の内容を示すフローチャートである。
【符号の説明】
１    楽音信号生成装置
２    弦
３    ギター
９    ＤＳＰ
１３    波形読み出し回路
２２    ＰＣＭ  ＲＯＭ
【図１】
0003624472.tif 000002
【図２】
0003624472.tif 000003
【図３】
0003624472.tif 000004
【図４】
0003624472.tif 000005
【図５】
0003624472.tif 000006
【図６】
0003624472.tif 000007
【図７】
0003624472.tif 000008
【図８】
0003624472.tif 000009
【図９】
0003624472.tif 000010
【図１０】
0003624472.tif 000011
【図１１】
0003624472.tif 000012
【図１２】
0003624472.tif 000013
【図１３】
0003624472.tif 000014
【図１４】
0003624472.tif 000015
【図１５】
0003624472.tif 000016
【図１６】
0003624472.tif 000017
【図１７】
0003624472.tif 000018
【図１８】
0003624472.tif 000019