(57)【特許請求の範囲】
【請求項１】
弦の振動信号を取り込む取り込み手段と、
この取り込み手段により取り込まれた振動信号のレベルの大きさに応じて当該振動信号が通常弦振動かピッキングノイズかを判定する判定手段と、
この判定手段にて通常弦信号であると判定された場合は、前記振動信号に基づいて楽音信号の生成を指示するとともに、前記判定手段にてピッキングノイズであると判定された場合は、当該ピッキングノイズと判定された振動信号に応じて予め用意された複数の波形からいずれかの波形を選択し、この選択された波形を前記楽音信号に付加する制御手段と、
を有することを特徴とする楽音信号生成指示装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、ピックが弦に接触している状態における弦振動であるピッキングノイズに基づいて楽音信号の生成を指示する楽音信号生成指示装置に関する。
【０００２】
【従来の技術】
従来、ギターシンセサイザのように、ギターの弦振動を解析して、合成音を出力する電子楽器が知られている。この電子楽器は、ピックより弾弦を行うと、ピックが弦から離れて振動を開始した時点からの弦振動を検出し、この弦振動に基づいて音色等を決定して、楽音信号を生成出力するものである。
【０００３】
【発明が解決しようとする課題】
ところで、ピックを用いてギター演奏を行う場合、ピックが弦に当たった瞬間の音、ピックとブリッジの間のわずかな距離の弦振動、ピックが弦を擦って弾くまでの摩擦音、等はピッキングの強さ、位置、ピックの角度等によって異なり、これらには演奏者のニュアンスが込められている。しかるに、従来のギターシンセサイザにあっては、ピックが弦から離れて弾弦された後からの振動のみに基づき楽音信号を生成する。したがって、演奏者がピッキングの強さ、位置、ピックの角度等を変化させつつ演奏を行った場合であっても、この演奏で表現しようとするニュアンスが無視されてしまい、微妙な演奏表現を発生楽音に反映させることができない。
【０００４】
本発明は、このような従来の課題に鑑みてなされたものであり、演奏者が表現しようとするニュアンスを楽音信号に反映させることのできる楽音信号生成指示装置を提供することを目的とするものである。
【０００５】
【課題を解決するための手段】
前記課題を解決するために本発明にあっては、弦の振動信号を取り込む取り込み手段と、この取り込み手段により取り込まれた振動信号のレベルの大きさに応じて当該振動信号が通常弦振動かピッキングノイズかを判定する判定手段と、この判定手段にて通常弦信号であると判定された場合は、前記振動信号に基づいて楽音信号の生成を指示するとともに、前記判定手段にてピッキングノイズであると判定された場合は、当該ピッキングノイズと判定された振動信号に応じて予め用意された複数の波形からいずれかの波形を選択し、この選択された波形を前記楽音信号に付加する制御手段とを有している。
【０００６】
【作用】
前記構成において、まず取り込み手段により取り込まれる振動信号のレベルの大きさに応じて当該振動信号が通常弦振動かピッキングノイズかを判定手段により判定する。ここで通常弦信号であると判定された場合は、前記振動信号に基づいて楽音信号の生成を指示する。一方、ピッキングノイズであると判定された場合は、当該ピッキングノイズと判定された振動信号に応じて予め用意された複数の波形からいずれかの波形を選択し、この選択された波形を前記楽音信号に付加する。したがって、ピッキングノイズに応じた異なる特性の楽音信号を発生させることができる。
【０００７】
【実施例】
以下、本発明の一実施例を図に従って説明する。すなわち、図１に示すように、本実施例にかかる楽音信号生成指示装置１は、６本の弦２を有するギター３に接続されて使用される構成であって、各種機能スイッチが配置されたコンソールスイッチ部４を有している。ギター３には、ピックアップ５が設けられており、このピックアップ５は、各弦２の振動を個別に検出して楽音信号生成指示装置１に送出する。
【０００８】
図２は、楽音信号生成指示装置１の構成を示すブロック図であり、Ｍａｉｎ  ＣＰＵ６には、コンソールスイッチ部４から各種スイッチの操作情報が入力される。Ｍａｉｎ  ＣＰＵ６は、この入力情報とＲＯＭ７内に記憶されているプログラムに従って動作し、ＲＡＭ８をワークエリアとして使用しつつ、ＤＳＰ９を制御する。ＤＳＰ９は、ＣＰＵ、プログラム等を格納してなるＲＯＭ及びワーキングＲＡＭを有してなる。
【０００９】
一方、６個の入力部１０−１〜６には、前記ピックアップ５から対応する各弦の弦振動信号が入力される。ＬＰＦ１１−１〜６は、対応する入力部１０−１〜６から入力される各弦振動信号に含まれている不要な高調波を除去し、Ａ／Ｄコンバータ１２−１〜６は、ＬＰＦ１１−１〜６を介して入力される各弦振動信号をデジタルデータに変換して、ＤＳＰ９に入力する。ＤＳＰ９は、内部のＲＯＭに格納されているプログラムに従って動作し、入力される弦振動の波形データを処理するとともに、各々６個の波形読み出し回路１３−１〜６、フィルタ１４−１〜６、エンベロープ発生器１５−１〜６を制御する。
【００１０】
すなわち、波形読み出し回路１３−１〜６は、ＤＳＰ９からの指示に従って、ＰＣＭ  ＲＯＭ１６に記憶されている楽音波形データを読み出し、この楽音波形データはＤＳＰ９からの指示に従って係数を変化させるフィルタ１４−１〜６を介して、エンベロープ発生器１５−１〜６に入力される。エンベロープ発生器１５−１〜６は、ＤＳＰ９からの指示に従ってエンベロープデータを発生し、このエンベロープデータと対応する波形データとは、Ｄ／Ａコンバータ１７−１〜６によりアナログ波形信号に変換される。この変換されたアナログ波形信号は、出力回路１８及び出力部１９を介して外部のサウンドシステム等に送出される。
【００１１】
図３は、ＰＣＭ  ＲＯＭ１６と波形読み出し回路１３の関係を詳細に示すものであり、ＰＣＭ  ＲＯＭ１６はＰＣＭ  ＲＯＭ  ＡとＰＣＭ  ＲＯＭ  Ｂとで構成され、両ＰＣＭ  ＲＯＭ  Ａ及びＢには各々楽音波形データが格納されている。一方、波形読み出し回路１３には、所定周波数のクロックを発生する発振器２０と、この発振器２０からのクロックに同期して、対応するＰＣＭ  ＲＯＭ  ＡとＰＣＭ  ＲＯＭ  Ｂの読み出しアドレスを歩進させるアドレスカウンタ２１Ａ、２１Ｂが設けられている。さらに波形読み出し回路１３には、係数ＬＡとＬＢとを各々発生する係数発生回路２２Ａ，２２Ｂ、一方の係数発生回路２２Ａからの係数ＬＡをＰＣＭ  ＲＯＭ  Ａからの読み出しデータに乗算する乗算回路２３Ａ、他方の係数発生回路２２Ｂからの係数ＬＢをＰＣＭ  ＲＯＭ  Ｂからの読み出しデータに乗算する乗算回路２３Ｂ、及び両乗算回路２３Ａ、２３Ｂからの出力を加算して、前記フィルタ１４−１〜６に送出する加算回路２４が設けられている。
【００１２】
また、前記ＤＳＰ９内のワーキングＲＡＭには、入力された各弦振動の波形データを記憶するリング状の入力波形記憶エリアが設けられている。このリング状の入力波形記憶エリアは、６本の弦に対応する各々６個の領域ＰＬ１〜ＰＬ６とＰＴ１〜ＰＴ６を有している。そして、ＰＬ１〜ＰＬ６には、過去２５６回分の波形のピークポイントのレベルが記憶され、ＰＴ１〜ＰＴ６には、ピークポイントの到達時刻が記憶される。
【００１３】
さらに、ＤＳＰ９内のＲＯＭには、図４に示すレベル値Ｌ０とＬ１とが記憶されている。このＬ０は、弦２が静止している無音状態と見做し得るレベル値である。また、レベル値Ｌ１は、弾弦時にピックが弦２に接触している状態で弦２が振動することによって発生するピッキングノイズと、弾弦後ピックが弦２から離れて、弦２が通常の振動状態となる通常弦振動との境界レベル値である。なお、ピッキングノイズの周波数は、通常弦振動の周波数よりも大きい。
【００１４】
次に、以上の構成にかかる本実施例の動作を図５以降に示すフローチャートに従って説明する。すなわち、ＤＳＰ９は、コンソールスイッチ部４に設けられている電源スイッチの投入に伴って、図５に示すフローに示すメインフローに従って動作を開始する。そして、先ず初期化処理（ＳＡ１）を実行し、後述するフローにおいて用いる各種レジスタをクリアし、あるいは所定の初期値をセットする。次に、Ｍａｉｎ  ＣＰＵ６との交信を行って（ＳＡ２）、該Ｍａｉｎ  ＣＰＵ６からパラメータ等を受け取る。引き続き、波形取り込み処理（ＳＡ３）、ピーク検出処理（ＳＡ４）、アタック解析処理（ＳＡ５）、ピッチ検出処理（ＳＡ６）、波形発生処理（ＳＡ７）、波形定常処理（ＳＡ８）を順次行い、アイドリング（ＳＡ９）によりループ１周時間を一定に調整しつつ、ＳＡ２〜ＳＡ９のループを繰り返す。
【００１５】
前記波形取り込み処理（ＳＡ３）は、図６に示すフローに従って行われ、先ずカウンタｎに“１”をセットする（ＳＢ１）。次に、このカウンタｎの値により指定されるレジスタＨＡｎに、Ａ／Ｄコンバータ１２−１〜６のうちのｎ番目からの入力を格納する（ＳＢ２）。次に、カウンタｎをインクリメントした後（ＳＢ３）、カウンタｎが“７”となったか否かを判別し（ＳＢ４）、ｎ＝７となるまでＳＢ２〜ＳＢ４のループを繰り返す。したがって、この図６に示すフローにより、ＨＡ１〜ＨＡ６には、対応するＡ／Ｄコンバータ１２−１〜６からの入力が格納される。
【００１６】
なお、図５のメインルーチンに対して、図７のタイマインタラプトが一定の時間間隔で割り込んで実行され、タイマＴをインクリメントする（ＳＣ１）。次に、タイマＴが所定の最大値ｍａｘとなったか否かを判別し（ＳＣ２）、Ｔ＝ｍａｘとなったならばタイマＴをリセットする（ＳＣ３）。したがって、タイマＴは、最大値ｍａｘまで一定の時間間隔で増加している。
【００１７】
他方、前記ピーク検出処理（ＳＡ４）は、図８に示すフローに従って行われ、先ずカウンタｎに“１”をセットする（ＳＤ１）。次に、このカウンタｎの値により指定されるレジスタＤｎに、同様にカウンタｎの値で指定されるＨＡｎ−ＦＨＡｎの値を格納する。ここで、ＨＡｎは、図６のＳＢ２で説明したように、現時点におけるＡ／Ｄコンバータ１２−ｎからの入力を格納しているレジスタであり、また、ＦＨＡｎはＳＤ８で後述するように、１回前のＡ／Ｄコンバータ１２−ｎからの入力を格納しているレジスタである。よって、ＨＡｎ−ＦＨＡｎにより、今回のＡ／Ｄ入力値と前回のＡ／Ｄ入力値との差を得ることができ、この差をレジスタＤｎに格納する。
【００１８】
次に、カウンタｎの値により指定されるレジスタＤｎに格納されている値の符号と、レジスタＦＤｎに格納されている値の符号とが等しくないか否かを判別する。このＦＤｎに格納されている値は、ＳＤ９で後述するように、１回前のＳＤ２の処理でＤｎに格納されていた値である。したがって、ＳＤ３の判別の結果、（Ｄｎの符号）＝（ＦＤｎの符号）であって、ＤｎとＦＤｎの符号が一致する場合には、弦振動の波形がピークポイントに到達する前の状態にある。よって、この時点では未だピークポイントを検出することはできないことから、ＳＤ３からＳＤ８に進み、ＨＡｎの値をＦＨＡｎに格納し、Ｄｎの値をＦＤｎに格納する（ＳＤ９）。さらに、カウンタｎをインクリメントした後（ＳＤ１０）、カウンタｎが“７”となったか否かを判別し（ＳＤ１１）、ｎ＝７となるまでＳＤ２〜ＳＤ１１のループを繰り返す。
【００１９】
しかし、ＳＤ３の判別の結果、（Ｄｎの符号）≠（ＦＤｎの符号）であって、ＤｎとＦＤｎの符号が不一致である場合には、弦振動の波形がピークポイントを折り返した直後の状態にあり、よって、前回のＡ／Ｄ入力値がピークポイントを示すレベル値である。また、この前回のＡ／Ｄ入力値は、前述のＳＤ８の処理により、ＦＨＡｎに格納されている。そこで、ＳＤ３に続くＳＤ４では、このＦＨＡｎの値を、対応するカウンタｎの値で指定されるＰＬｎにｍｎ［］番目のデータ［ｍｎ］としてストアするとともに、このときのタイマＴの値をＰＴｎ［］にｍｎ番目のデータ［ｍｎ］としてストアする（ＳＤ４）。
【００２０】
次に、フラグレジスタＡＦｎをセットするとともに、ｍｎをインクリメントし（ＳＤ５）、このインクリメントしたｍｎが“２５６”となったか否かを判別する（ＳＤ６）。この判別の結果、ｍｎ≠２５６であれば、前述したＳＤ８以降の処理を実行し、ｍｎ＝２５６となったならば、ｍｎをリセットした後（ＳＤ７）、ＳＤ８以降の処理を実行する。したがって、このピーク検出処理により、６本の弦に対応するＰＬ１〜ＰＬ６とＰＴ１〜ＰＴ６毎に、２５６個のピークポイントのピーク値とその到達時刻とを示すデータが記憶されることとなる。
【００２１】
また、前記アタック解析処理（ＳＡ５）は、図９に示すフローに従って行われる。なお、図９〜１４のフローにおいて、ＳＴＡＴ（Ｓｔａｔｕｓ）＝０〜４は下記の状態を示す。
ＳＴＡＴ＝０：無音状態
ＳＴＡＴ＝１：ＰＬ［０］がＬ０とＬ１（図４参照）の間にあるが、ピッキングノイズかどうかわからない。すなわち、ピッチ（今回のピークと次回のピークの間隔）検出待機状態。
ＳＴＡＴ＝２：ＰＬ［０］がＬ０とＬ１の間にあるが、通常弦振動の状態である。
ＳＴＡＴ＝３：ＰＬ［０］がＬ０とＬ１の間にあり、ピッキングノイズが発生している。
ＳＴＡＴ＝４：ＰＬ［０］がＬ１以上のレベルにあり、通常弦振動の状態である。
【００２２】
すなわち、図９のフローにおいては、先ずカウンタｎに“１”をセットする（ＳＥ１）。次に、このカウンタｎの値により指定されるフラグレジスＡＦｎがセットされているか否かを判別する（ＳＥ２）。この判別の結果、ＡＦｎ＝０であって、ピークポイントが検出されていない場合には、ＳＥ１７に進む。そして、このカウンタｎをインクリメントした後、カウンタｎ＝７となった否かを判別し、ｎ＝７となるまで、ＳＥ２からの処理を繰り返す。
【００２３】
また、ＳＥ２での判別の結果、ＡＦｎ＝１であってピークポイントが検出されている場合には、ＰＬｎ（ｍｎ−１）つまりこのピークポイントより１つ前のピークポイントのレベル値を、ＰＬ［０］に格納する（ＳＥ３）。引き続き、ＰＴｎ（ｍｎ−１）つまりこのピークポイントより１つ前のピークポイントの時刻を、ＰＴ［０］に格納する（ＳＥ４）。さらに、このピークポイントより２つ前のピークポイントのレベル値ＰＬｎ（ｍｎ−２）を、ＰＬ［−１］に格納するとともに（ＳＥ５）、このピークポイントより２つ前のピークポイントの時刻ＰＴｎ（ｍｎ−２）を、ＰＴ［−１］に格納する（ＳＥ６）。
【００２４】
次に、ＳＴＡＴｎが、“０”〜“４”のいずれであるかを順次判別する（ＳＥ７，ＳＥ９，ＳＥ１１，ＳＥ１３，ＳＥ１５）。そして、ＳＴＡＴｎ＝０であったならばＳＴＡＴ（０）処理を実行し（ＳＥ８）、ＳＴＡＴｎ＝１であったならばＳＴＡＴ（１）処理を実行し（ＳＥ１０）、ＳＴＡＴｎ＝２であったならばＳＴＡＴ（２）処理を実行する（ＳＥ１２）。また、ＳＴＡＴｎ＝３であったならばＳＴＡＴ（３）処理を実行し（ＳＥ１４）、ＳＴＡＴｎ＝４であったならばＳＴＡＴ（４）処理を実行した後（ＳＥ１６）、前述したＳＥ１７及びＳＥ１８の処理を実行する。
【００２５】
ＳＴＡＴ（０）処理（ＳＥ８）は、図１０に示すフローに従って行われ、ＰＬ［０］＜Ｌ０であるか否かを判別し（ＳＦ１）、ＰＬ［０］＜Ｌ０であればＥＮＤに進み、よって、引き続きＳＴＡＴ＝０の状態が継続することとなる。また、ＳＦ１での判別の結果、ＰＬ［０］≧Ｌ０である場合には、さらにＰＬ［０］＜Ｌ１であるか否かを判別する（ＳＦ２）。この判別がＹＥＳであれば、Ｌ０＜ＰＬ［０］＜Ｌ１の状態にあり、無音（ＳＴＡＴ＝０）から図４に示すように、ピッキングノイズが発生し始めたことを意味する。よって、この場合には、ＳＴＡＴ＝３とするとともに（ＳＦ３）、ピッキングノイズ発生指示フラグＰＮＦｎをセットする（ＳＦ３）。また、ＳＦ２の判別の結果、ＰＬ［０］≧Ｌ１の状態にあれば、既に通常弦振動の状態に移行している。よって、ＳＴＡＴ＝４とするとともに（ＳＦ５）、発音指示フラグＳＴＦｎをセットする（ＳＦ６）。
【００２６】
ＳＴＡＴ（１）処理（ＳＥ１０）は、図１１に示すフローに従って行われ、ＰＬ［０］＜Ｌ１であるか否かを判別し（ＳＧ１）、ＰＬ［０］＜Ｌ１であったならば、│ＮＰｎ−ＰＰｎ│＞αであるか否かを判別する（ＳＧ２）。ここで、ＮＰｎとは図１８のピッチ検出処理におけるＳＫ２で後述するように、ｎ番目の弦の現在のピッチ（振動周波数）である。また、ＰＰｎとは同図のピッチ抽出処理におけるＳＫ７で後述するように、当該弦の前回のピッチ（振動周波数）であり、αは所定値である。しかも、前述のように、ピッキングノイズの周波数は、通常弦振動の周波数よりも大きい。
【００２７】
よって、│ＮＰｎ−ＰＰｎ│＞αとなる場合とは、図１２に示すように、通常弦振動（ａ）が減衰する前に、弦にピックを接触させてこれによりピッキングノイズ（ｂ）が発生した場合を想定することができる。したがって、ピークポイントがＬ１未満であって、│ＮＰｎ−ＰＰｎ│＞αである場合には、ＳＴＡＴｎ＝３とするとともに（ＳＧ４）、ピッキングノイズ発生指示フラグＰＮＦｎをセットする（ＳＧ５）。しかし、ピークポイントがＬ１以下であっても│ＮＰｎ−ＰＰｎ│≦αである場合には、図１３に示すように、通常弦振動で減衰した結果ピークポイントがＬ１以下となった場合が想定され、この場合通常弦振動の状態が継続しており、よって、ＳＴＡＴｎ＝２とする（ＳＧ３）。また、ＳＧ１での判別の結果、ＰＬ［０］≧Ｌ１であれば、通常弦振動であることは明らかであることから、ＳＴＡＴｎ＝４とするとともに（ＳＧ６）、発音指示フラグＳＴＦｎをセットする（ＳＧ７）。
【００２８】
ＳＴＡＴ（２）処理（ＳＥ１２）は、図１４に示すフローに従って行われ、ＰＬ［０］＜Ｌ０であるか否かを判別する（ＳＨ１）。そして、ＳＴＡＴｎ＝２の状態で、ＰＬ［０］＜Ｌ０となったならば、通常弦振動の弦が自然減衰して無音状態となった場合であることから、ＳＴＡＴｎ＝０とするとともに（ＳＨ２）、リリース指示フラグＲＦｎをセットする（ＳＨ３）。また、ＳＨ１での判別の結果、ＰＬ［０］≧Ｌ０である場合には、さらにＰＬ［０］＜Ｌ１を判別する（ＳＨ４）。そして、ＳＨ１とＳＨ４での判別の結果、ＰＬ［０］≧Ｌ０且つＰＬ［０］＜Ｌ１であった場合には、通常弦振動で減衰中であるのか、ピッキングノイズであるのかを識別することができないことから、このフローを抜ける。しかし、ＳＨ１とＳＨ４での判別の結果、ＰＬ［０］≧Ｌ０且つＰＬ［０］≧Ｌ１であった場合には、通常弦振動であることは明らかであることから、ＳＴＡＴｎ＝４とするとともに（ＳＨ５）、発音指示フラグＳＴＦｎをセットし（ＳＨ６）、さらにピッキングノイズなしフラグＮＰＮＦｎをセットする（ＳＨ７）。
【００２９】
ＳＴＡＴ（３）処理（ＳＥ１４）は、図１５に示すフローに従って行われ、ＰＬ［０］＜Ｌ０であるか否かを判別する（ＳＩ１）。そして、ＳＴＡＴｎ＝３の状態で、ＰＬ［０］＜Ｌ０となったならば、ピックを弦に接触させてピッキングノイズを発生させた後、弾弦を行わずピックを弦から離して無音状態となった場合が想定される。よって、この場合にはＳＴＡＴｎ＝０とするとともに（ＳＩ２）、ピッキングノイズ自体の発生はあったことから、ピッキングノイズ発生指示フラグＰＮＦｎをセットする（ＳＩ３）。また、ＳＩ１での判別の結果、ＰＬ［０］≧Ｌ０である場合には、さらにＰＬ［０］＜Ｌ１を判別する（ＳＩ４）。そして、ＳＩ１とＳＩ４での判別の結果、ＰＬ［０］≧Ｌ０且つＰＬ［０］＜Ｌ１であった場合には、通常弦振動で減衰中であるのか、ピッキングノイズであるのかを識別することができないことから、このフローを抜ける。しかし、ＳＩ１とＳＩ４での判別の結果、ＰＬ［０］≧Ｌ０且つＰＬ［０］≧Ｌ１であった場合には、通常弦振動となったことから、ＳＴＡＴｎ＝４とするとともに（ＳＩ５）、発音指示フラグＳＴＦｎをセットし（ＳＩ６）、さらにピッキングノイズリリースフラグＰＮＬＦｎをセットする（ＳＩ７）。
【００３０】
ＳＴＡＴ（４）処理（ＳＥ１６）は、図１６に示すフローに従って行われ、ＰＬ［０］＜Ｌ０であるか否かを判別する（ＳＪ１）。そして、ＳＴＡＴｎ＝４の状態で、ＰＬ［０］＜Ｌ０となったならば、通常弦振動の弦が自然減衰して無音状態となった場合が想定されることから、ＳＴＡＴｎ＝０とするとともに（ＳＪ２）、リリース指示フラグＲＦｎをセットする（ＳＪ３）。また、ＳＪ１での判別の結果、ＰＬ［０］≧Ｌ０である場合には、さらにＰＬ［０］＜Ｌ１を判別する（ＳＪ４）。そして、ＳＪ１とＳＪ４での判別の結果、ＰＬ［０］≧Ｌ０且つＰＬ［０］≧Ｌ１であった場合には、通常弦振動の状態を継続中であることから、このフローを抜ける。
【００３１】
しかし、ＳＪ１とＳＪ４での判別の結果、ＰＬ［０］≧Ｌ０且つＰＬ［０］＜Ｌ１であった場合には、（ＰＬ［０］−ＰＬ［−１］）／（ＰＴ［０］−ＰＴ［−１］）＜Ｒ１か否かを判別する（ＳＪ５）。ここで、図９のＳＥ３〜ＳＥ６で前述したように、ＰＬ［０］は現在のピークポイントよりも１つ前のピークポイントのレベル値、ＰＬ［−１］は２つ前のピークポイントのレベル値、ＰＴ［０］は１つ前のピークポイントの時刻、ＰＴ［−１］は２つ前のピークポイントの時刻を各々格納しており、また、Ｒ１は所定値である。よって、このＳＪ５の判別がＹＥＳとなる場合とは、図１７に示すように、通常弦振動（ａ）の状態から次の通常弦振動（ｃ）を発生させるべく、前の通常弦振動（ａ）が減衰し終わらない状態で、弦にピックを接触させて、ピッキングノイズを発生させた場合である。よって、この場合には、ピッキングノイズが発生することからＳＴＡＴｎ＝３とするとともに（ＳＪ６）、ピッキングノイズ発生指示フラグＰＮＦｎをセットし（ＳＪ７）、さらにリリース指示フラグＲＦｎをセットする（ＳＪ３）。また、（ＰＬ［０］−ＰＬ［−１］）／（ＰＴ［０］−ＰＴ［−１］）がＲ１以上であれば、ピッキングノイズか否かは不明であることから、ＳＴＡＴｎ＝１とする（ＳＪ８）。
【００３２】
一方、前記ピッチ検出（ＳＡ６）は、図１８に示すフローに従って行われ、先ずカウンタｎに“１”をセットする（ＳＫ１）。次に、このカウンタｎの値により指定される２５６個からなるＰＬｎ［］，ＰＴｎ［］のデータ群よりピッチを検出し、ＰＴｎにストアする（ＳＫ２）。すなわち、ＰＬｎ［］には２５６個のピークポイントのレベル値が格納され、ＰＴｎ［］には２５６個のピークポイントの到達時刻が格納されている。よって、この２５６個のピークポイントの到達時刻からｎ番目の弦の振動周波数を得ることができ、この振動周波数であるピッチをＰＴｎにストアする。次に、ＡＦｎがセットされているか否かを判別し、セットされていない場合には、カウンタｎをインクリメントした後（ＳＫ８）、ｎ＝７となったか否かを判別し（ＳＫ９）、ｎ＝７となるまで、ＳＫ２からの処理を繰り返す。
【００３３】
また、前記図８におけるＳＤ５の処理が既に実行されて、ＡＦｎ＝１となっている場合には、ＳＫ３からＳＫ４に進みＳＴＡＴｎ＝４であるか否かを判別する。そして、ＳＴＡＴｎ＝４であった場合には、先程のＳＫ２でＰＴｎにストアしたピッチをＮＰｎに格納する（ＳＫ５）。また、ＳＴＡＴｎ≠４であった場合には、ＳＴＡＴｎ＝１であるか否かを判別し（ＳＫ６）、ＳＴＡＴｎ＝１であった場合には、先程のＳＫ２でＰＴｎにストアしたピッチをＰＰｎに格納する（ＳＫ５）。したがって、このピッチ検出処理が実行されることにより、ＳＴＡＴｎ＝４であって通常弦振動の状態である場合には、当該ｎ番目の弦のピッチデータがＮＰｎに格納され、ＳＴＡＴｎ＝１であってピッキングノイズかどうかわからない場合には、当該ｎ番目の弦のピッチデータがＰＰｎに格納されることとなる。
【００３４】
また、前記波形発生処理（ＳＡ７）は、図１９に示すフローに従って行われ、先ずカウンタｎに“１”をセットする（ＳＬ１）。次に、このカウンタｎの値により指定されるＳＴＡＴｎが“４”であるか否かを判別し（ＳＬ２）、ＳＴＡＴｎ≠４である場合には、カウンタｎをインクリメントした後（ＳＬ７）、ｎ＝７となったか否かを判別し（ＳＬ８）、ｎ＝７となるまで、ＳＬ２からの処理を繰り返す。また、ＳＴＡＴｎ＝４であった場合には、さらに発音指示フラグＳＴＦｎがセットされているか否かを判別し（ＳＬ３）、ＳＴＡＴｎ＝４且つＳＴＦｎ＝１であった場合には、後述するＬＡ，ＬＢの定義を行う（ＳＬ４）。次に、発音指示フラグＳＴＦｎをリセットした後、音源ｎに対して発音指示を行い（ＳＬ６）、引き続き前述のＳＬ７及びＳＬ８の処理を行う。したがって、この波形発生処理により、ＳＴＡＴｎ＝４であって通常弦振動の状態にあり、且つ発音指示フラグＳＴＦｎがセットされている場合、ＬＡ，ＬＢの定義と音源ｎに対する発音処理が実行される。
【００３５】
前記ＬＡ，ＬＢの定義（ＳＬ４）は、図２０〜２２に示すフローのいずれかに従って行われる。すなわち、図２０に示すＬＡ，ＬＢの定義（１）においては、ピッキングノイズ発音指示フラグＰＮＦｎがリセットされているか否かを判別し（ＳＭ１）、ＰＮＦｎ＝１であってピッキングノイズ発音指示フラグがセットされている場合には、ＰＬｎ［ｍｎ］のデータから最大値Ｐｍａｘを選択する（ＳＭ２）。次に、Ｐｍａｘ／Ｌ１（但し、Ｌ１は所定値）をＬＡにセットするとともに（ＳＭ３）、（１−ＬＡ）をＬＢにセットした後（ＳＭ４）、ＬＡ，ＬＢを音源に送出する（ＳＭ７）。また、ＳＭ１での判別の結果、ＰＮＦｎ＝０であった場合には、ＬＡに“０”をセットし（ＳＭ５）、ＬＢに“１”をセットした後（ＳＭ６）、ＬＡ，ＬＢを音源ｎに送出する（ＳＭ７）。
【００３６】
すなわち、このＬＡ，ＬＢの定義（１）においては、ピッキングノイズ発音指示フラグがセットされている場合には、ピッキングノイズのピークの最大値に応じて、ＬＡとＬＢの比率を変化させる。これにより、図３係数発生回路２２Ａ，２２Ｂの係数ＬＡ，ＬＢが変化し、ＰＣＭ  ＲＯＭ  Ａからの読み出し波形とＰＣＭ  ＲＯＭ  Ｂからの読み出し波形とがＬＡ，ＬＢに応じた比率で加算回路２４を介して出力されることとなる。なお、ピッキングノイズ発音指示フラグがリセットされた場合には、ＳＭ５及びＳＭ６の処理で、ＬＡ＝０、ＬＢ＝１となることから、ＰＣＭ  ＲＯＭ  Ｂからの読み出し波形のみが出力されることとなる。
【００３７】
また、図２１に示すＬＡ，ＬＢの定義（２）においては、ピッキングノイズ発音指示フラグＰＮＦｎがリセットされているか否かを判別する（ＳＮ１）。そして、ＰＮＦｎ＝１であってピッキングノイズ発音指示フラグがセットされている場合には、ＰＴｎ［ｍｎ］−ＰＴｎ［０］、つまりピッキングノイズの発生時間をｔに格納する（ＳＮ２）。次に、ｔ／ＳＴ（但し、ＳＴは所定値）をＬＡにセットするとともに（ＳＮ３）、１−ＬＡをＬＢにセットした後（ＳＮ４）、ＬＡ，ＬＢを音源に送出する（ＳＮ７）。また、ＳＮ１での判別の結果、ＰＮＦｎ＝０であった場合には、ＬＡに“０”をセットし（ＳＮ５）、ＬＢに“１”をセットした後（ＳＮ６）、ＬＡ，ＬＢを音源ｎに送出する（ＳＮ７）。
【００３８】
すなわち、このＬＡ，ＬＢの定義（２）においては、ピッキングノイズ発音指示フラグがセットされている場合には、ピッキングノイズの発生時間長に応じて、ＬＡとＬＢの比率を変化させる。これにより、図３係数発生回路２２Ａ，２２Ｂの係数ＬＡ，ＬＢが変化し、ＰＣＭ  ＲＯＭ  Ａからの読み出し波形とＰＣＭＲＯＭ  Ｂからの読み出し波形とがＬＡ，ＬＢに応じた比率で加算回路２４を介して出力されることとなる。
【００３９】
さらに、図２２に示すＬＡ，ＬＢの定義（３）においては、ピッキングノイズ発音指示フラグＰＮＦｎがリセットされているか否かを判別し（ＳＯ１）、ＰＮＦｎ＝１であってピッキングノイズ発音指示フラグがセットされている場合には、ＰＬｎ［ｍｎ］の総数、つまりピッキングノイズ区間におけるピークポイントの総数をＮＳとする（ＳＯ２）。次に、Ｎ／ＮＳ（但し、Ｎは所定値）をＬＡにセットするとともに（ＳＯ３）、（１−ＬＡ）をＬＢにセットした後（ＳＯ４）、ＬＡ，ＬＢを音源に送出する（ＳＯ７）。また、ＳＯ１での判別の結果、ＰＮＦｎ＝０であった場合には、ＬＡに“０”をセットし（ＳＯ５）、ＬＢに“１”をセットした後（ＳＯ６）、ＬＡ，ＬＢを音源ｎに送出する（ＳＯ７）。
【００４０】
すなわち、このＬＡ，ＬＢの定義（３）においては、ピッキングノイズ発音指示フラグがセットされている場合には、ピッキングノイズ区間のピークポイントの数に応じて、ＬＡとＬＢの比率を変化させる。これにより、図３の係数発生回路２２Ａ，２２Ｂの係数ＬＡ，ＬＢが変化し、ＰＣＭ  ＲＯＭ  Ａからの読み出し波形とＰＣＭ  ＲＯＭ  Ｂからの読み出し波形とがＬＡ，ＬＢに応じた比率で加算回路２４を介して出力されることとなる。
【００４１】
他方、波形定常処理（ＳＡ８）は、図２３に示すフローに従って行われ、先ずカウンタｎに“１”をセットする（ＳＰ１）。次に、このカウンタｎの値により指定されるＳＴＡＴｎが“４”または“２”であるか否かを判別する（ＳＰ２）。この判別の結果、ＳＴＡＴｎ＝４ｏｒ２であれば、ｎ番目の弦は通常弦振動の状態である。よって、エンベロープデータに対応して音源ｎを制御し（ＳＰ３）、このＳＰ３の処理により、図２に示したエンベロープ発生器１５−ｎが動作することになる。次に、カウンタｎをインクリメントした後（ＳＰ８）、ｎ＝７となったか否かを判別し（ＳＰ９）、ｎ＝７となるまで、ＳＰ２からの処理を繰り返す。
【００４２】
また、ＳＰ２での判別の結果、ＳＴＡＴｎ≠４ｏｒ２であった場合には、さらにＳＴＡＴｎ＝０であるか否かを判別し、ＳＴＡＴｎ≠０つまりＳＴＡＴｎ＝１であった場合には、前述のＳＰ８に進む。しかし、ＳＴＡＴｎ＝０であった場合には、さらにリリース指示フラグＲＦｎがセットされているか否かを判別する（ＳＰ５）。そして、ＳＴＡＴｎ＝０であって、ＲＦｎ＝１であった場合には、音源ｎに対して消音指示を行い（ＳＰ６）、このＳＰ６の処理によりｎ番目の弦の振動に対応して発生していた楽音信号が停止されることとなる。また、ＳＰ６により消音が指示されたことから、リリース指示フラグＲＦｎリセットした後（ＳＰ７）、ＳＰ８以降の処理を行い、ｎ＝７となった時点で、図５のメインルーチンに戻るのである。
【００４３】
図２４〜２６は、本発明の第２実施例を示すものである。この実施例においては、前記ＤＳＰ９のＲＯＭに、図２４に示すように各々異なる波形Ａ〜Ｄが記憶されている。そして、ＤＳＰ９は、前述の第１実施例と同様に、図５に示すメインフローに従って動作し、ＳＡ１〜ＳＡ９の処理を行うとともに、電源がオンである間ＳＡ２〜ＳＡ９のループを繰り返す。このＳＡ２〜ＳＡ９のループにおいて、波形発生処理（ＳＡ７）と波形定常処理（ＳＡ８）のみは、第１実施例とは異なり、図２５及び図２６のフローに従って行われる。
【００４４】
すなわち、図２５に示す波形発生処理（ＳＡ７）においては、先ずカウンタｎに“１”をセットし（ＳＱ１）、次に、このカウンタｎの値により指定されるピッキングノイズ発音指示フラグＰＮＦｎがリセットされているか否かを判別する（ＳＱ２）。この判別の結果、ＰＮＦｎ＝０であってピッキングノイズ発音指示フラグがリセットされている場合には、ＳＱ１４に進んで発音指示フラグＳＴＦｎがセットされているか否かを判別し、ＳＴＦｎ＝１であった場合には、対応音源ｎに対して発音指示を行う（ＳＱ１５）。次に、発音指示フラグＳＴＦｎをリセットした後（ＳＱ１６）、カウンタｎをインクリメントして（ＳＱ１７）、カウンタｎが“７”となったか否かを判別し（ＳＱ１８）、ｎ＝７となるまでＳＱ２からの処理を繰り返す。
【００４５】
また、ＳＱ２での判別の結果、ＰＮＦｎ＝０であってピッキングノイズ発音指示フラグがセットされている場合には、ＰＬｎ［０］／Ｌ１の値をＬ０ｎに格納する（ＳＱ３）。ここで、ＰＬ［０］は、図９のＳＥ３，ＳＥ５で前述したように、現在のピークポイントよりも１つ前のピークポイントのレベル値であり、よって、ＳＱ３ではこのピークポイントを所定値Ｌ１で除した値が格納されることとなる。引き続き、│ＰＴｎ［０］−ＰＴｎ［−１］│の値をＴＤｎに格納する（ＳＱ４）。ここで、図９のＳＥ４，ＳＥ６で前述したように、ＰＴｎ［０］は１つ前のピークポイントの時刻、ＰＴｎ［−１］は２つ前のピークポイントの時刻を各々格納している。したがって、│ＰＴｎ［０］−ＰＴｎ［−１］│はピッキングノイズの隣接するピークポイント間の時間を示し、ＳＱ４ではこの時間をＴＤｎに格納する。
【００４６】
次に、このＴＤｎの値が０＜ＴＤｎ＜Ｔｓ／３であるか（ＳＱ５）、Ｔｓ／３＜ＴＤｎ＜２Ｔｓ／３であるか（ＳＱ７）、２Ｔｓ／３＜ＴＤｎ＜Ｔｓであるか（ＳＱ９）、ＴＤｎ＞Ｔｓであるか（ＳＱ１１）を判別する（但し、Ｔｓは所定値）。そして、０＜ＴＤｎ＜Ｔｓ／３であるであった場合には（ＳＱ５がＹＥＳ）、前記波形Ａを選択し（ＳＱ６）、Ｔｓ／３＜ＴＤｎ＜２Ｔｓ／３であった場合には（ＳＱ７がＹＥＳ）、波形Ｂを選択し（ＳＱ８）、２Ｔｓ／３＜ＴＤｎ＜Ｔｓであった場合には（ＳＱ９がＹＥＳ）、波形Ｃを選択し（ＳＱ１０）、ＴＤｎ＞Ｔｓであった場合には（ＳＱ１１がＹＥＳ）、波形Ｄを選択する（ＳＱ１２）。しかる後に、エンドフラグＥＮＤＦｎ及びピッキングノイズ発音指示フラグＰＮＦｎとをリセットし（ＳＱ１３）、前述したＳＱ１４以降の処理を実行する。
【００４７】
また、図２６に示す波形定常処理（ＳＡ８）においては、先ずカウンタｎに“１”をセットする（ＳＲ１）。次に、このカウンタｎの値により指定されるＳＴＡＴｎが“４”または“２”であるか否かを判別する（ＳＲ２）。この判別の結果、ＳＴＡＴｎ≠４ｏｒ２であれば、さらにＳＴＡＴｎ＝３であるか否かを判別する（ＳＲ１０）。そして、ＳＴＡＴｎ＝３であって、ＰＬ［０］がＬ０とＬ１の間にあり、ピッキングノイズが発生している場合には、エンドフラグＥＮＤＦｎがセットされているか否かを判別する（ＳＲ１１）。
【００４８】
このＥＮＤＦｎは、前述のＳＱ１３でリセットされ、後述するＳＲ１５で波形データの読み出しを終了した時点でセットされるフラグであることから、この時点ではリセット状態にある。したがって、ＳＲ１１からＳＲ１２に進んで、予め設定されているピッチで選択された波形、つまり図２４に示した波形Ａ〜波形Ｄのいずれかを発生させる。次に、“Ｌ０ｎ×波形データ”を演算してその値を出力波形として送出する（ＳＲ１３）。ここで、Ｌ０ｎは図２５のＳＱ３で説明したように、ＰＬｎ［０］／Ｌ１の値を格納しており、波形データは前記ＳＲ１２で発生させた波形Ａ〜Ｄのいずれの波形データである。したがって、このＳＲ１３の処理により、予め選択された波形Ａ〜ＤのいずれかがＰＬｎ［０］／Ｌ１の値に応じたレベルで出力される。そして、この選択されたいずれかの波形Ａ〜Ｄの読み出しを終了したならば（ＳＲ１４がＹＥＳ）、その時点でエンドフラグＥＮＤＦｎをセットする（ＳＲ１５）。しかる後に、カウンタｎをインクリメントするとともに（ＳＲ２０）、このインクリメントしたカウンタｎの値が“７”となったか否かを判別し（ＳＲ２１）、ｎ＝７となるまで、ＳＲ２からの処理を繰り返す。
【００４９】
また、ＳＲ２での判別の結果、ＳＴＡＴｎ＝４ｏｒ２であれば、ｎ番目の弦は通常弦振動の状態となっている。よって、エンベロープデータに応答してパラメータを可変した後（ＳＲ３）、ピッキングノイズリリースフラグＰＮＬＦｎがセットされているか否かを判別する（ＳＲ４）。このピッキングノイズリリースフラグＰＮＬＦｎは、前述した図１５のＳＴＡＴ（３）処理におけるＳＩ７でセットされているフラグであり、通常弦振動に移行したことを示している。そして、ＰＮＬＦｎ＝１であって通常弦振動に移行しているならば、予め設定されているピッチで選択された波形、つまり図２４に示した波形Ａ〜波形Ｄのいずれかを発生させる。
【００５０】
次に、“Ｌ０ｎ×波形データ−ＲＬｎ”を演算してその値を出力波形として送出する（ＳＲ６）。ここで、Ｌ０ｎは図２５のＳＱ３で説明したように、ＰＬｎ［０］／Ｌ１の値を格納しており、波形データは前記ＳＲ５で発生させた波形Ａ〜Ｄのいずれの波形データ、ＲＬｎはリリースレートである。したがって、このＳＲ６が繰り返し実行されることにより、Ｌ０ｎ×波形データからなる出力波形が、ＲＬｎずつ減衰して行く。そして、このように出力波形がＲＬｎずつ減衰することにより、波形出力＜０になると（ＳＲ７がＹＥＳ）、ピッキングノイズリリースフラグＰＮＬＦｎをリセットするとともに（ＳＲ８）、エンドフラグＥＮＤＦｎをセットし（ＳＲ９）、前述したＳＲ２０及びＳＲ２１の処理を実行する。
【００５１】
また、ＳＴＡＴｎ＝０（無音状態）となった場合には、ＳＲ２→ＳＲ１０→ＳＲ１６→ＳＲ１７と進み、リリース指示フラグＲＦｎがセットされているか否かを判別する。このリリース指示フラグＲＦｎは、図１４のＳＨ３あるいは図１６のＳＩ３において、ＳＴＡＴｎ＝０の処理を実行した後セットされている。そして、リリース指示フラグＲＦｎ＝１の状態にあれば、対応音源に対し消音を指示し（ＳＲ１８）、このＳＲ１８の処理によりｎ番目の弦の振動に対応して発生していた楽音信号が停止されることとなる。また、次のＳＲ１９では、ＲＦｎがリセットされることから、以降はＳＲ１７の判別がＮＯとなり、ＳＡ１７からＳＲ２０に進むこととなる。
【００５２】
図２７は、本発明の第３実施例における波形発生処理（ＳＡ７）の内容を示すものである。このフローにおいて、ＳＳ１〜ＳＳ１４の処理は、図２５をもって説明した第２実施例のＳＱ１〜ＳＱ１３の処理と同一であり、ＳＳ１５〜ＳＳ２０の処理は、図１９をもって説明した第１実施例のＳＬ３〜ＳＬ８の処理と同一である。すなわち、この第３実施例では、ＴＤｎの値に応じて波形Ａ〜Ｄのいずれかを選択するのみならず、図２０〜２２に示したＬＡ，ＬＢの定義も行う構成である。よって、ピッキングノイズ基づき、選択された波形が付加されるのみならず、楽音信号の特性自体も制御されることとなる。
【００５３】
なお、実施例においてはピッキングノイズのレベルやピッチを波形選択やレベルに反映させるようにしたが、フィルタのカットオフや音量のエンベロープの立ち上がり速度などに変調をかけるようにしてもよい。また、６弦のギターに限らず、ベースシンセサイザ、ウインドシンセサイザなどに適用できることは勿論である。
【００５４】
以上説明したように本発明は、取り込まれた弦の振動信号がピッキングノイズか通常弦振動かを判定し、通常弦振動であると判定された場合は、当該弦振動に基づいて楽音信号の生成を指示するとともに、ピッキングノイズであると判定された場合は、このピッキングノイズと判定された弦振動信号に応じて予め用意された複数の波形からいずれかの波形を選択し、この選択した波形を楽音信号に付加することにより、簡単な構成でありながら、ピッキングノイズに応じた異なる特性の楽音信号を発生させることができる。
【図面の簡単な説明】
【図１】本発明の一実施例にかかる楽音信号生成指示装置をギターに接続した状態を示す図である。
【図２】同実施例のブロック構成図である。
【図３】ＰＣＭ  ＲＯＭと波形読み出し回路の接続状態の詳細を示す図である。
【図４】ピッキングノイズと通常弦振動とを示す波形図である。
【図５】同実施例のメインフローを示すフローチャートである。
【図６】波形取り込み処理の内容を示すフローチャートである。
【図７】タイマインタラプトを示すフローチャートである。
【図８】ピーク検出処理の内容を示すフローチャートである。
【図９】アタック部解析処理の内容を示すフローチャートである。
【図１０】ＳＴＡＴ（０）処理の内容を示すフローチャートである。
【図１１】ＳＴＡＴ（１）処理の内容を示すフローチャートである。
【図１２】通常弦振動からピッキングノイズへの移行を示す波形図である。
【図１３】通常弦振動が自然減衰した状態の波形図である。
【図１４】ＳＴＡＴ（２）処理の内容を示すフローチャートである。
【図１５】ＳＴＡＴ（３）処理の内容を示すフローチャートである。
【図１６】ＳＴＡＴ（４）処理の内容を示すフローチャートである。
【図１７】通常弦振動が減衰し終わる前にピッキングした場合の波形図である。
【図１８】ピッチ検出処理の内容を示すフローチャートである。
【図１９】波形発生処理の内容を示すフローチャートである。
【図２０】ＬＡ，ＬＢの定義（１）の処理内容を示すフローチャートである。
【図２１】ＬＡ，ＬＢの定義（２）の処理内容を示すフローチャートである。
【図２２】ＬＡ，ＬＢの定義（３）の処理内容を示すフローチャートである。
【図２３】波形定常処理の内容を示すフローチャートである。
【図２４】本発明の第２実施例において記憶されている波形Ａ〜Ｄを示す波形図である。
【図２５】同実施例における波形発生処理の内容を示すフローチャートである。
【図２６】同実施例における波形定常処理の内容を示すフローチャートである。
【図２７】本発明の第３実施例における波形発生処理の内容を示すフローチャートである。
【符号の説明】
１    楽音信号生成指示装置
２    弦
３    ギター
９    ＤＳＰ
１３    波形読み出し回路
１６    ＰＣＭ  ＲＯＭ
【図１】
0003622278.tif 000002
【図２】
0003622278.tif 000003
【図３】
0003622278.tif 000004
【図４】
0003622278.tif 000005
【図５】
0003622278.tif 000006
【図６】
0003622278.tif 000007
【図７】
0003622278.tif 000008
【図８】
0003622278.tif 000009
【図９】
0003622278.tif 000010
【図１０】
0003622278.tif 000011
【図１１】
0003622278.tif 000012
【図１２】
0003622278.tif 000013
【図１３】
0003622278.tif 000014
【図１４】
0003622278.tif 000015
【図１５】
0003622278.tif 000016
【図１６】
0003622278.tif 000017
【図１７】
0003622278.tif 000018
【図１８】
0003622278.tif 000019
【図１９】
0003622278.tif 000020
【図２０】
0003622278.tif 000021
【図２１】
0003622278.tif 000022
【図２２】
0003622278.tif 000023
【図２３】
0003622278.tif 000024
【図２４】
0003622278.tif 000025
【図２５】
0003622278.tif 000026
【図２６】
0003622278.tif 000027
【図２７】
0003622278.tif 000028