(57)【要約】      （修正有）【課題】電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとする。【解決手段】電子ギター１は、フレットスキャン部ＦＳと、ピッチ抽出回路ＰＣと、マイコンとを備えている。フレットスキャン部ＦＳは、指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、ピッチ抽出回路ＰＣは、張設された弦の振動を検出する。また、マイコンは、検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する。そして、マイコンは、第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、決定された音高の楽音を発生させる制御を行う。さらに、マイコンは、第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、第１の音量を補正する。【選択図】図１
2015082094.tif 000002
【特許請求の範囲】
【請求項１】
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定手段と、
張設された弦の振動を検出する弦振動検出手段と、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する第１の判別手段と、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行う制御手段と、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する補正手段と、
を有する電子弦楽器。
【請求項２】
前記制御手段は、前記第３の区間以降に前記検出された弦の振動が、前記第１の音量よりも、第２のしきい値以上小さい期間が所定期間継続した場合に、楽音の発生をミュートさせる請求項１に記載の電子弦楽器。
【請求項３】
前記制御手段は、前記楽音の発生をミュートさせた後、前記検出された弦の振動が、前記第１の音量よりも、第３のしきい値以上小さい状態でなくなった場合、ミュートを解除する請求項２に記載の電子弦楽器。
【請求項４】
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられる楽音制御方法であって、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別し、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行い、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する、楽音制御方法。
【請求項５】
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられるコンピュータに、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定ステップと、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する第１の判別ステップと、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行う制御ステップと、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する補正ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子ギター等の電子弦楽器に係り、特にその入力波形信号からピッチ抽出を行って種々の音高の楽音を発生する電子弦楽器、楽音制御方法及びプログラムに関する。
【背景技術】
【０００２】
従来より、自然楽器の演奏操作によって発生する波形信号からピッチ（基本周波数）を抽出し、電子回路で構成された音源装置を制御して、人工的に楽音等の音響を得るようにした楽音生成装置が開発されている。
このような楽音生成装置を備えた電子ギター等の電子弦楽器においては、弦を指で押さえるフレット操作と、弦を弾くピッキングとが演奏操作として行われ、これらの演奏操作に応じた楽音を発生させる。
ところが、ピッキングにより振動した弦のピッチを抽出する場合、ピッチの抽出に一定の時間を要することから、楽音の発生が遅れる場合がある。
これに対し、特許文献１に記載の電子弦楽器では、フレットに対する操作によって、操作された位置に対応する楽音を発生させている。このように楽音を発生させる場合、弦の振動からピッチを抽出するよりも以前に音高を決められることから、楽音の発生が遅れることを抑制できる。
このように、フレットに対する操作によって、ピッチを抽出するよりも以前に楽音を発生させる場合、音の強さ（ベロシティ）については、ピッキングによって発生した初期の弦の振動を検出し、その振幅に基づいて決定することで、固定的な音の強さとするよりも、実際の演奏を反映させることができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−０８４７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述のように、ピッキングによって発生した初期の弦の振動を検出し、その振幅に基づいて音の強さを決定した場合、ピッキングによって発生した初期の弦の振動は不安定であることから、必ずしも演奏者が期待する音の強さとはならない場合がある。
このように、特許文献１に記載の技術を含め、従来の電子弦楽器においては、楽音の発生の遅れを抑制しつつ、発生される楽音の強さを適切なものとすることが困難であった。
【０００５】
本発明は、このような状況に鑑みてなされたものであり、電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとすることを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の一態様の電子弦楽器は、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定手段と、
張設された弦の振動を検出する弦振動検出手段と、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する第１の判別手段と、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行う制御手段と、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する補正手段と、
を有する。
【発明の効果】
【０００７】
本発明によれば、電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとすることができる。
【図面の簡単な説明】
【０００８】
【図１】本実施例に係る電子ギターの主要部の構成を示す模式図である。
【図２】全体の回路を示すブロック図である。
【図３】フレットの押弦状態を検出するためのフレット検出回路を示す図である。
【図４】ピッチ抽出回路及びマイコンの具体的な機能構成を示すブロック図である。
【図５】マイコンが楽音を発生する際の処理の概要を示す模式図である。
【図６】マイコンが実行するフレット検出処理ルーチンを示すフローチャートである。
【図７】マイコンへインタラプトがかけられたときの処理を示すインタラプトルーチンを示すフローチャートである。
【図８】メインルーチンを示すフローチャートである。
【図９】図８のＭ５として示すステップ０（ＳＴＥＰ０）のときのフローチャートである。
【図１０】図８にＭ６として示すＳＴＥＰ１のフローチャートの詳細である。
【図１１】図１０にＳ１３として示すＶＥＬ１＿ＯＮのフローチャートの詳細である。
【図１２】図１１にＳ１３２として示すサブルーチンＮＯＴＥ＿ＯＮのフローチャートの詳細である。
【図１３】図８にＭ７として示すＳＴＥＰ２のフローチャートの詳細である。
【図１４】図８にＭ８として示すＳＴＥＰ３のフローチャートである。
【図１５】Ｓ３１１のサブルーチンの詳細な内容を示す図である。
【図１６】図８のＭ９として示すＳＴＥＰ４のフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について、図面を用いて説明する。
【００１０】
［実施例］
以下、この発明の実施例について図面を参照して説明するが、ここではこの発明を電子ギター（ギターシンセサイザ）に適用した場合を例に挙げて説明する。なお、これに限らず他のタイプの電子楽器であっても同様に適用できる。
【００１１】
図１は、本実施例に係る電子ギター１の主要部の構成を示す模式図である。
図１に示すように、電子ギター１は、指板ＦＢ上に張設された６つの弦ＳＴＧ１〜ＳＴＧ６を備えており、各弦に対して、フレット及びピッキングを行うことにより、アコースティックギター等の自然楽器と同様の操作でユーザの演奏を可能とするものである。図１に示すように、電子ギター１は、指板ＦＢ上に張設された６つの弦ＳＴＧ１〜ＳＴＧ６にそれぞれ設けられ、各弦にスキャンパルスを入力するスキャンパルス発生器ＰＧを備えている。そして、電子ギター１は、各弦に対するフレットあるいはピッキングが行われた場合に、フレットスキャン部ＦＳ及びピッチ抽出回路ＰＣによって、各操作を検出する。
図２は、全体の回路を示すブロック図である。ピッチ抽出回路ＰＣは、各弦の振動を電気信号に変換し、振動波形のゼロクロス点及び振幅の絶対値を取得して、マイコンＭＣＰに出力する。
【００１２】
マイコンＭＣＰは、後述する音程データ変換テーブル（ピッチテーブル）を含むメモリ例えばＲＯＭ及びＲＡＭを有するとともに、タイマーＴＭＲを有し、音源発生装置ＳＯＢに与える為の信号を制御するものである。音源発生装置ＳＯＢは音源ＳＳとデジタル−アナログ変換回路Ｄ／Ａと、増幅回路ＡＭＣと、スピーカＳＰとからなり、マイコンＭＣＰからのノートオン（発音）、ノートオフ（消音）、周波数を変える音高指示信号に応じた音高の楽音を放音するものである。なお、音源ＳＳの入力側とマイコンＭＣＰのデータバスＢＵＳとの間に、ＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）形式のインターフェースが設けられている。勿論、ギター本体に音源ＳＳを設けるときは、別のインターフェースを介してもよい。アドレスデコーダＤＣＤは、マイコンＭＣＰからのアドレス読み出し信号ＡＲが入力されたとき、弦番号の読込み信号ＲＤＩ、時刻読込み信号ＲＤｊ（ｊ＝１〜６）とＭＡＸ，ＭＩＮのピーク値及びその時点その時点の瞬時値読込み信号ＲＤＡＩ（Ｉ＝１〜１８）をピッチ抽出回路ＰＣに出力する。
【００１３】
マイコンＭＣＰは、一定時間毎（例えば１ｍｓ毎）の割り込み処理として、各弦における各フレットの押弦状態を常に検出している。押弦状態の検出処理は、各弦のピッキングによるピッチ抽出とは別に並列処理として実行されている。
図３は、フレットの押弦状態を検出するためのフレット検出回路ＦＤＣを示す図である。フレット検出回路ＦＤＣは、フレットスキャン部ＦＳに備えられている。
図３に示すように、フレット検出回路ＦＤＣは、フレットの数に対応する２２の選択線ＫＩ０〜ＫＩ２１と、弦の数に対応する６の信号線ＫＣ０〜ＫＣ５とがマトリクス状に配列された構成を有している。
【００１４】
各選択線ＫＩ０〜ＫＩ２１は、所定時間（例えば１ｍｓ）毎に順次アクティブな状態にスイッチングされる。これら選択線ＫＩ０〜ＫＩ２１は、ハイレベル（例えば５ｖ）にプルアップされている。アクティブな状態とされた選択線ＫＩ０〜ＫＩ２１に対し、押弦により指板ＦＢに接触されている弦があると、その弦に対応する信号線ＫＣ０〜ＫＣ５からはハイレベルの信号が読み出される。
すなわち、フレット検出回路ＦＤＣは、所定時間毎に選択線ＫＩ０〜ＫＩ２１を１つずつアクティブな状態に切り替え、信号線ＫＣ０〜ＫＣ５の状態（ハイレベルまたはローレベル）を読み出して、すべてのフレットについて、いずれの位置が押弦されているかを検出する。
【００１５】
図４は、ピッチ抽出回路ＰＣ及びマイコンＭＣＰの具体的な機能構成を示すブロック図である。ピッチ抽出は、主にピッチ抽出回路ＰＣ及びマイコンＭＣＰの以下に説明する機能によって実行される。
図４に示すように、ピッチ抽出回路ＰＣは、ローパスフィルタＬＰＦと、増幅回路ＡＭＣと、ゼロクロス点取込回路ＺＣＲと、絶対値取込回路ＡＢＳとを備えている。
ローパスフィルタＬＰＦには、ピッキングが行われることにより各弦において発生する波形の信号がヘキサピックアップから入力され、ローパスフィルタＬＰＦは、入力された信号の高周波成分をカットし、低周波成分のみを通過させる。
増幅回路ＡＭＣは、ローパスフィルタＬＰＦの出力信号を設定されたゲインに応じて増幅し、ゼロクロス点取込回路ＺＣＲ及び絶対値取込回路ＡＢＳに出力する。
【００１６】
ゼロクロス点取込回路ＺＣＲは、入力された波形の信号のゼロクロス点を検出し、ゼロクロス点より正側の場合にハイレベル信号、負側の場合にローレベル信号を出力する。なお、ゼロクロス点取込回路ＺＣＲの出力信号は、反転したもの（反転出力）と非反転のもの（非反転出力）との両方がマイコンＭＣＰに入力される。
絶対値取込回路ＡＢＳは、入力された波形の信号の正負両側におけるピーク値をそれぞれ検出し、ピーク値の絶対値及び符号をマイコンＭＣＰに入力する。
【００１７】
マイコンＭＣＰは、割込制御回路ＩＣと、タイマーＴＭＲと、アナログ−デジタル変換回路Ａ／Ｄと、メモリＭＥＭとを備えている。
割込制御回路ＩＣは、ゼロクロス点取込回路ＺＣＲの非反転出力及び反転出力が入力され、これらの立ち上がりエッジで割り込み信号を発生させる。すなわち、割込制御回路ＩＣは、ピッキングによって各弦に発生した波形の信号がゼロクロスするタイミングで、割り込み信号を発生させる。割込制御回路ＩＣは、発生した割り込み信号をタイマーＴＭＲに出力する。
【００１８】
タイマーＴＭＲは、割込制御回路ＩＣから割り込み信号が入力されると、入力された時間ｔ（非反転出力による割り込み信号の場合）及び時間Ｔ（反転出力による割り込み信号の場合）をメモリＭＥＭに出力する。
アナログ−デジタル変換回路Ａ／Ｄは、絶対値取込回路ＡＢＳから入力されたピーク値の絶対値をデジタル信号に変換し、メモリＭＥＭに出力する。なお、アナログ−デジタル変換回路Ａ／Ｄは、ピーク値の絶対値とともに入力される符号をデジタル化されたピーク値と併せてメモリＭＥＭに出力する。
【００１９】
メモリＭＥＭは、タイマーＴＭＲから入力された時間ｔ，Ｔと、ピーク値の絶対値（デジタル値）及び符号を記憶する。メモリＭＥＭに記憶された時間ｔ，Ｔは、マイコンＭＣＰが前回記憶された時間ｔ，Ｔと今回記憶された時間ｔ，Ｔの差分を算出して周波数（発生させる楽音の音程であるピッチ）を求める際に用いられる。
また、メモリＭＥＭは、各弦のフレットと周波数との関係を示すフレット−周波数データテーブル（不図示）を記憶している。
【００２０】
フレット−周波数データテーブルでは、スケールＡ４を４４２Ｈｚとし、各弦がいずれの周波数に対応するか、また、フレット位置による音程のコード（キーコード）が関連付けて記憶されている。
また、メモリＭＥＭは、ピッチ抽出によって取得された周波数を音程データ（キーコード）に変換するための音程データ変換テーブル（不図示）を記憶している。
音程データ変換テーブルでは、ピッチ抽出によって得られた周波数が、ｃｅｎｔ比例した音程データ（キーコード）と対応付けて記憶されている。
【００２１】
マイコンＭＣＰは、メモリＭＥＭに記憶されたこれらのデータを参照ながら、ピッキングが行われた場合に、フレットスキャンの結果及びピッチ抽出の結果に応じて、音程を決定し、楽音を発生する。
【００２２】
次に、マイコンＭＣＰが楽音を発生する際の処理の概要について説明する。
図５は、マイコンＭＣＰが楽音を発生する際の処理の概要を示す模式図である。
図５において、ピッチ抽出回路ＰＣに図５（ｃ）に示す波形の信号が入力されたとすると、これに対するゼロクロス点取込回路ＺＣＲの非反転出力は、図５（ａ）に示す波形となり、反転出力は、図５（ｂ）に示す波形となる。
【００２３】
マイコンＭＣＰは、ピッチ抽出処理を実行する場合、設定された所定の波高値ＴＨＬＡＢより小さいものはノイズとみなして波形の信号を破棄する（ＳＴＥＰ０〜２）。一方、マイコンＭＣＰは、ＳＴＥＰ０において、所定の波高値ＴＨＬＡＢ以上となった場合、ＳＴＥＰ０の波高値ＶＥＬ０がＳＴＥＰ０における波高値のしきい値ＴＨ０以上となっている場合には、ピッチ抽出処理と並列的に実行しているフレットの押弦状態の検出処理で検出された各フレットの情報から音程（音程の初期値）を検出し、ＳＴＥＰ０の波高値に基づいて、ＳＴＥＰ１において発音を開始する。具体的には、マイコンＭＣＰは、音量を定めるベロシティＶＥＬを（ＶＥＬ０＋ＶＥＬ１）／２として、ＳＴＥＰ１で発音を開始する。
【００２４】
この後、マイコンＭＣＰは、ＳＴＥＰ０〜２において、所定の波高値ＴＨＬＡＢ以上となっている場合、その波が新たに入力された初めてのものであるときに、波形のピーク値及び符号をベロシティＶＥＬ（具体的には波高値ＶＥＬ２）の値として取り込む（ＳＴＥＰ３）。そして、マイコンＭＣＰは、ピッチ抽出処理において検出したベロシティＶＥＬの値を基に、その音程の発音を行う（ノートオン）。発音が行われる場合、マイコンＭＣＰは、音源ＳＳに対して、音程及びベロシティＶＥＬの値を出力することにより、発音の指令を行う。また、ＳＴＥＰ３において、マイコンＭＣＰは、ＳＴＥＰ２で取り込まれた波高値ＶＥＬ２の値に対応して、ベロシティＶＥＬを補正するための情報をアフタータッチ情報として音源に送ることで、ＳＴＥＰ１で発音した音量（音の強さ）を補正する。アフタータッチ情報は、一般に、ピッキングの後に弦に対して行われた操作を発音に反映させるための情報であり、本実施形態においては、ＳＴＥＰ２以降で取り込まれた波高値に応じて音量を補正するために、アフタータッチ情報の形態で音源に指示を行っている。この後、ＶＥＬ２≦（１／４）ＶＥＬ（すなわち、今回の波高値がＳＴＥＰ１の波高値の１／４以下）であれば、マイコンＭＣＰは、ミュートを示すミュートフラグＭｆに１を設定する（Ｍｆ＝１）。一方、ＶＥＬ２＞（１／４）ＶＥＬであれば、ミュートフラグＭｆに０を設定する（Ｍｆ＝０）。なお、ミュートであるか否かを判定するためにベロシティＶＥＬに乗ずる係数１／４は一例であり、任意の係数αを用いて１／α（αは正数）と表すことができる。
【００２５】
この後、ＳＴＥＰ４において、ピッチ抽出処理は継続され、マイコンＭＣＰは、前回記憶された時間ｔ，Ｔと今回記憶された時間ｔ，Ｔの差分から周波数（ピッチ）を算出し（ＴＰ（ｂ），ＴＰ（ｂ’））、この周波数によって、すでに発音している音程に対する補正を行う。また、ＳＴＥＰ４において、マイコンＭＣＰは、ＳＴＥＰ３で設定されたミュートフラグＭｆが１の場合、所定の時間（すなわち、ミュートの判断のために設定された時間）、ｃ≦（１／４）ＶＥＬ（ただし、ｃはＳＴＥＰ４の波高値）の状態が継続したときには、ミュートであると判断して、ノートオフする。一方、ＳＴＥＰ４において、ＳＴＥＰ３で設定されたミュートフラグＭｆが１の場合であって、ミュートと判断される上記条件が充足されない場合、マイコンＭＣＰは、ミュートフラグＭｆを０にリセットし、ミュート状態を解除する。
さらに、上述の一連の処理において、前回のピッキング時に対して、押弦されたフレット位置が変化している場合、マイコンＭＣＰは、前回の音程の補正をリセット（すなわち、押弦されたフレット位置に対応する音程の初期値にセット）し、押弦されたフレット位置が変化していない場合（同一のフレット位置で続けてピッキングされた場合）、前回の音程の補正をリセットすることなく、今回の発音においても同一の補正を行って音程を決定する。
【００２６】
以下、マイコンＭＣＰの動作についてフローチャートや波形を示す図面を参照して説明する。
初めに、図面の符号について説明する。
ＡＤ・・・図２の瞬時値読込み信号ＲＤＡ１３〜１８によりピッチ抽出回路ＰＣの入力波形を直接読んだ入力波高値（瞬時値）
ＡＭＰ（０，１）・・・正または負の前回（ｏｌｄ）の波高値
ＡＭＲＬ１・・・振幅レジスタで記憶されているリラティブ（ｒｅｌａｔｉｖｅ）オフ（ｏｆｆ）のチェックのための前回の振幅値である。ここで、前記リラティブオフとは波高値が急激に減衰してきたことに基づき消音することで、フレット操作をやめて開放弦へ移ったときの消音処理に相当する。
ＡＭＲＬ２・・・振幅レジスタで記憶されている前記リラティブオフのための前々回の振幅値で、これにはＡＭＲＬ１の値が入力される。
【００２７】
ＣＨＴＩＭ・・・最高音フレット（２２フレット）に対応する周期
ＣＨＴＩＯ・・・開放弦フレットに対応する周期
ＣＨＴＲＲ・・・時定数変換レジスタで、上述の時定数変換制御回路ＴＣＣ（図２）の内部に設けられている。
ＤＵＢ・・・波形が続けて同一方向に来たことを示すフラグ
ＦＯＦＲ・・・リラティブオフカウンタ
ＨＮＣ・・・波形ナンバーカウンタ
【００２８】
Ｋ・・・半音以上と半音未満の音高コードからなる音高データ
ＭＴ・・・これからピッチ抽出を行う側のフラグ（正＝１，負＝０）
ＭＦ・・・ミュートフラグ
ＮＣＨＬＶ・・・ノーチェンジレベル（定数）
ＮＳＣ・・・新しいスケールコード
ＯＳＣ・・・前回のスケールコード
ＯＦＴＩＭ・・・オフタイム（例えば当該弦の開放弦周期に相当）
ＯＦＰＴ・・・通常オフチェック開始フラグ
ＯＮＦ・・・ノートオフフラグ
ＲＩＶ・・・後述のステップ（ＳＴＥＰ）４での処理ルートの切替を行うためのフラグ
ＲＯＦＣＴ・・・リラティブオフのチェック回数を定める定数
【００２９】
ＳＴＥＰ・・・マイコンＭＣＰのフロー動作を指定するレジスタ（１〜５）
Ｔ・・・周期データ
ＴＦ・・・有効となった前回のゼロクロス時刻データ
ＴＦＮ（０，１）・・・正または負のピーク値直後の前回のゼロクロス時刻データ
ＴＦＲ・・・時刻記憶レジスタ
ＴＨＬＩＭ・・・周波数上限（定数）
ＴＬＬＩＭ・・・周波数下限（定数）
【００３０】
ＴＰ（０，１）・・・正または負の前回の周期データ
ＴＨＬＡＢ・・・ＳＴＥＰ０，ＳＴＥＰ１におけるノイズ除去用しきい値
ＴＨ０・・・ＳＴＥＰ０における波高値判定用しきい値
ＴＨ１・・・ＳＴＥＰ１における波高値判定用しきい値
ＴＲＬＲＬ・・・リラティブオン（再発音開始）
ＴＲＬＲＳ・・・共振除去しきい値
【００３１】
ＴＴＬＩＭ・・・トリガー時の周波数下限
ＴＴＰ・・・前回抽出された周期データ
ＴＴＲ・・・周期レジスタ
ＴＴＵ・・・定数（１７／３２と今回の周期情報ｔｔの積）
ＴＴＷ・・・定数（３１／１６と今回の周期情報ｔｔの積）
ＶＥＬ・・・速度（ベロシティー）を定める情報で、発音開始時の波形の最大ピーク値（波高値）にて定まる。
ＶＥＬ０・・・ＳＴＥＰ０におけるノイズ除去後の波高値（＝ａ０）
ＶＥＬ１・・・ＳＴＥＰ１におけるノイズ除去後の波高値（＝ｂ０）
ＶＥＬ２・・・ＳＴＥＰ２における波高値（＝ａ１）
【００３２】
Ｘ・・・異常または正常状態を示すフラグ
ｂ・・・ワーキングレジスタＢに記憶されている今回正負フラグ（正ピークの次のゼロ点のとき１、負ピークの次のゼロ点のとき０）
ｃ・・・ワーキングレジスタＣに記憶されている今回波高値（ピーク値）
ｅ・・・ワーキングレジスタＥに記憶されている前々回波高値（ピーク値）
ｈ・・・ワーキングレジスタＨに記憶されている前々回抽出された周期データ
ｔ・・・ワーキングレジスタＴｒに記憶されている今回のゼロクロス時刻
ｔｔ・・・ワーキングレジスタＴＯＴＯに記憶されている今回の周期情報
α・・・ミュートの判断のために用いる係数
【００３３】
図６は、マイコンＭＣＰが実行するフレット検出処理ルーチンを示すフローチャートである。
Ｆ１において、マイコンＭＣＰは、選択線ＫＩ０〜ＫＩ２１のうち１つ（例えば選択線ＫＩ０）を選択し、アクティブな状態とする。
続くＦ２において、マイコンＭＣＰは、信号線ＫＣ０〜ＫＣ５の信号レベルを読み出す。このとき、押弦されている弦に対応する信号線では、信号レベルがハイレベルとなり、押弦されていない弦に対応する信号線では、信号レベルがローレベルとなる。
【００３４】
そして、Ｆ３において、マイコンＭＣＰは、押弦されているか否かの判定を行う。マイコンＭＣＰは、押弦されている場合すなわちイエス（以下、Ｙと称する）の場合、Ｆ４の処理に移行し、押弦されていない場合すなわちノー（以下、Ｎと称する）の場合、Ｆ１の処理に移行する。
Ｆ４において、マイコンＭＣＰは、音程コードを算出する。このとき、マイコンＭＣＰは、押弦位置の音程コードを算出する。
このような処理を繰り返し、マイコンＭＣＰは、すべてのフレットについて、各弦の押弦状態を検出する。
【００３５】
図７は、マイコンＭＣＰへインタラプトがかけられたときの処理を示すインタラプトルーチンであり、Ｉ１において、マイコンＭＣＰはアドレスデコーダＤＣＤを介し、ゼロクロス時刻取込回路ＺＴＳに対し、弦番号読み込み信号ＲＤＩを与えてインタラプトを与えた弦を指定する弦番号を読み込む。そして、その弦番号に対応する時刻情報つまりゼロクロス時刻情報をゼロクロス時刻取込回路ＺＴＳへ時刻読込み信号ＲＤ１〜ＲＤ６のいずれかに対応するものを与えて読込む。これをｔとする。しかる後、Ｉ２において、同様に波高値取込み回路ＰＶＳへピーク値読込み信号ＲＤＡＩ（Ｉ＝１〜１２のうちのいずれか）を与えて、ピーク値を読取る。これをｃとする。
【００３６】
続くＩ３において、当該ピーク値は正、負のいずれかのピークであるのかを示す情報ｂをゼロクロス時刻取込回路ＺＴＳより得る。そして、Ｉ４にて、このようにして得たｔ，ｃ，ｂの値をマイコンＭＣＰ内のバッファレジスタＴｒ，Ｃ，Ｂにセットする。このバッファには、割込み処理がなされる都度、このような時刻情報、ピーク値情報、ピークの種類を示す情報がワンセットとして書込まれていき、メインルーチンで、各弦毎にかかる情報に対する処理がなされる。
【００３７】
図８は、メインルーチンを示すフローチャートである。パワーオンすることによりＭ１において、各種レジスタやフラグがイニシャライズされ、レジスタＳＴＥＰが０とされる。Ｍ２で上述したバッファが空かどうかが判断され、Ｎの場合にはＭ３に進み、バッファよりレジスタＢ，Ｃ，Ｔｒの内容が読まれる。これにより、Ｍ４において、レジスタＳＴＥＰはいくつか判断され、Ｍ５ではＳＴＥＰ０，Ｍ６ではＳＴＥＰ１，Ｍ７ではＳＴＥＰ２，Ｍ８ではＳＴＥＰ３，Ｍ９ではＳＴＥＰ４の処理が順次行われる。
【００３８】
Ｍ２でバッファが空の場合すなわちＹの場合、Ｍ１０〜Ｍ１６へと順次に進み、ここで通常のノートオフのアルゴリズムの処理が行われる。このノートオフのアルゴリズムは、オフ（ＯＦＦ）レベル以下の状態が所定のオフタイム時間続いたら、ノートオフするアルゴリズムである。Ｍ１０でＳＴＥＰ＝０かどうかが判断され、Ｎの場合には、Ｍ１１に進む。Ｍ１１では、その時点の入力波高値ＡＤが直接読まれる。これは、波高値取込み回路ＰＶＳへピーク値取込み信号ＲＤＡ１３〜ＲＤＡ１８のいずれかを与えることで達成できる。そして、この値ＡＤが、入力波高値ＡＤ≦オフレベルかどうかが判断され、Ｙの場合にはＭ１２に進む。Ｍ１２では前回の入力波高値ＡＤ≦オフレベルかどうかが判断され、Ｙの場合にはＭ１３に進み、ここでタイマーＴＭＲの値≧オフタイムＯＦＴＩＭ（例えば当該弦の開放弦周期の定数）かどうかが判断される。Ｙの場合には、Ｍ１４に進み、レジスタＳＴＥＰに０が書きこまれ、Ｍ１５ではノートオンかどうかが判断され、Ｙの場合には、Ｍ１６でノートオフ処理され、Ｍ２の入側のＭに戻る。Ｍ１２でＮの場合にはＭ１７に進み、マイコンＭＣＰ内部タイマーＴＭＲをスタートし、Ｍ２の入側Ｍに戻る。Ｍ１０でＹの場合、及びＭ１１、Ｍ１３、Ｍ１５でＮの場合には、いずれもＭ１２の入側のＭに戻る。
【００３９】
このように、波形入力のレベルが減衰してきた場合、オフレベル以下の入力波高値ＡＤがオフタイムＯＦＦＴＩＭに相当する時間続くと、ノートオフの指示を音源ＳＳに対しマイコンＭＣＰは送出する。なお、ステップＭ１５において、通常の状態ではＹの判断がなされるが、後述するような処理によって、楽音の発生を指示していない場合でもレジスタＳＴＥＰは０以外の値をとっていることがあり、（例えばノイズの入力による。）そのようなときは、Ｍ１４，Ｍ１５の処理後Ｍ２へ戻ることで、初期設定がなされることになる。
なお、図８では、１つの弦についての処理しか示していないが、この図に示した如き処理を弦の数に相当する６回分、多重化してマイコンＭＣＰは実行することになる。勿論、プロセッサを複数個設けて、別個独立して同等の処理を実行してもよい。
【００４０】
次に、Ｍ４にて分岐して対応する処理を行う各ルーチンの詳細について説明する。
図９は、図８のＭ５として示すステップ０（ＳＴＥＰ０）のときのフローチャートであり、Ｓ０１で絶対トリガーレベル（ノートオン、しきい値）ＴＲＬＡＢ（ｂ）＜今回波高値ｃかどうかが判断され、Ｙの場合にはＳ０２に進み共振除去がチェックされる。なお、このトリガーレベルは、正と負との極性のピークそれぞれについてのチェックを行うようになっている。これら正の場合のＴＲＬＡＢ（０）と負の場合のＴＲＬＡＢ（１）とは、実験等によって適切な値とすることになる。理想的なシステムではＴＲＬＡＢ（０）とＴＲＬＡＢ（１）とは同じでよい。Ｓ０２では、共振除去しきい値ＴＲＬＲＳ＜［今回波高値ｃ−前回波高値ＡＭＰ（ｂ）］かどうか、すなわち今回波高値と前回波高値の差が所定値以上か否かが判断される。
【００４１】
１つの弦をピッキングすることによって他の弦が共振を起こす場合、当該他の弦については、振動のレベルが徐々に大きくなり、その結果前回と今回とのピーク値の変化は微小なものとなって、その差は共振除去しきい値ＴＲＬＲＳを超えることはない。ところが、通常のピッキングでは、波形が急激に立上る（あるいは立ち下がる）ことになり、前記ピークの差は共振除去しきい値ＴＲＬＲＳを超える。
【００４２】
いま、このＳ０２で、Ｙの場合つまり共振の場合でないとみなした場合には、Ｓ０３において次の処理が行われる。すなわち、今回正負フラグｂがフラグＭＴに書込まれ、レジスタＳＴＥＰに１が書込まれ、さらに今回のゼロクロス時刻tが前回のゼロクロス時刻データでＴＦＮ（ｂ）として設定される。そして、Ｓ０４では、その他フラグ類がイニシャライズされ、Ｓ０５に進む。Ｓ０５では、今回波高値ｃがＳＴＥＰ０における波高値ＶＥＬ０として設定されるとともに、今回波高値ｃが前回の波高値ＡＭＰ（ｂ）としてセットされ、しかる後図８のメインルーチンへリターンする。すなわち、ステップＳ０５では、ＳＴＥＰ０において得られた波高値がベロシティとしては使用されないように設定される。ただし、ＳＴＥＰ０におけるゼロクロス点は、ピッチ抽出のために保持される。ＳＴＥＰ０において取得される半波長の波は、一般に波高値が低く、ベロシティとして用いることが適当ではないことが実験により判明している。
【００４３】
図９において、Ａはリラティブオン（再発音開始）のエントリであり、後述するＳＴＥＰ４のフローからこのＳ０６へジャンプしてくる。そして、Ｓ０６では今まで出力している楽音を一度消音し、再発音開始のためにＳ０３へ進行する。この再発音開始のための処理は、通常の発音開始のときと同様であり、以下に詳述するとおりとなる。
【００４４】
そして、またＳ０１でＮの場合と、Ｓ０２でＮの場合（今回波高値ｃ−前回波高値ＡＭＰ（ｂ）が所定値以上ない場合）には、Ｓ０５に進む。従って、発音開始のための処理は進まないことになる。
以上述べたＳＴＥＰ０では、フラグＭＴにＢレジスタの内容（ｂ＝１）が書込まれ、レジスタＴｒの内容（ｔ）が前回ゼロクロス時刻データＴＦＮ（１）に書込まれ、レジスタＣの波高値（ｃ）が前回の波高値ＡＭＰ（１）に書込まれる。
【００４５】
図１０は図８にＭ６として示すＳＴＥＰ１のフローチャートの詳細を示すものであり、Ｓ１１では、レジスタＢの内容（ｂ）と、フラグＭＴが不一致かどうかが判断され、Ｙの場合にはＳ１２に進む。Ｓ１２では、絶対トリガーレベル（ノートオンしきい値）ＴＲＬＡＢ（ｂ）＜今回波高値ｃかどうかが判断され、Ｙの場合にはＳ１３に進む。Ｓ１２でＹの場合にはＳ１３でサブルーチンＶＥＬ１＿ＯＮが実行される。サブルーチンＶＥＬ１＿ＯＮは、波高値がしきい値を超えることにより暫定発音を開始するための処理である。続いて、Ｓ１４でレジスタＳＴＥＰに２がセットされ、Ｓ１５でレジスタＴｒの内容（１）を前回のゼロクロス時刻データでＴＦＮ（ｂ）としてセットし、さらにＳ１６で今回波高値ｃを、前回の波高値ＡＭＰ（ｂ）へセットする。Ｓ１１において、Ｎの場合すなわち入力波形信号が同一方向にきた場合Ｓ１７に進み、今回波高値ｃ＞前回波高値ＡＭＰ（ｂ）かどうかが判断され、Ｙの場合すなわち今回の波高値ｃが前回の波高値ＡＭＰ（ｂ）より大の場合には、Ｓ１５に進む。一方、Ｓ１２においてＮの場合には、Ｓ１６に進み、これにより波高値のみが更新される。また、Ｓ１７において、Ｎの場合及び、Ｓ１６の処理の終了時にはメインルーチン（図８）ヘリターンする。
【００４６】
以上述べたＳＴＥＰ１では、今回正負フラグｂ（＝０）とフラグＭＴ＝１が不一致ということで、今回のゼロクロス時刻ｔを前回のゼロクロス時刻データＴＦＮ（０）としてセットし、さらに今回波高値ｃを前回の波高値ＡＭＰ（０）として書込む。
【００４７】
図１１は、図１０にＳ１３として示すＶＥＬ１＿ＯＮのフローチャートの詳細を示すもので、Ｓ１３１において、ＳＴＥＰ１の波高値ＶＥＬ１に今回波高値ｃをセットする。
Ｓ１３２でサブルーチンＮＯＴＥ＿ＯＮが実行され、所定の音程及びベロシティで発音が開始される。
以上述べたＶＥＬ１＿ＯＮでは、ＳＴＥＰ１からＳＴＥＰ２またはＳＴＥＰ３に移行する場合に、サブルーチンＮＯＴＥ＿ＯＮが実行される。
【００４８】
図１２は、図１１にＳ１３２として示すサブルーチンＮＯＴＥ＿ＯＮのフローチャートの詳細を示すもので、Ｓ１００１において、ベロシティＶＥＬにＳＴＥＰ０の波高値とＳＴＥＰ１の波高値の平均値（ＶＥＬ０＋ＶＥＬ１）／２が設定される。
【００４９】
ステップＳ１００２において、振動が検出されている弦のフレット状態を検出し、ステップＳ１００３において、フレット検出処理で検出された弦の押弦位置を基に、スケールコード（音程）を取得する。
ステップＳ１００４において、取得されたスケールコード（音程）が新しいスケールコードを示すＮＳＣに設定される。
Ｓ１００５において、新しいスケールコードＮＳＣが前回のスケールコードを示すＯＳＣと一致しているかが判断され、Ｎの場合にはＳ１００６に進み、音源ＳＳに対して、音程を補正するための情報（ピッチベンド情報）として、押弦位置に応じて設定されているスケールコード（以下、適宜「中央位置情報」という。）が送られる。
【００５０】
Ｓ１００５でＹの場合及びＳ１００６の後、処理はＳ１００７に進み、設定されているスケールコード（音程）及びベロシティＶＥＬによって発音（ノートオン）を開始する。
Ｓ１００８において、前回のスケールコードＯＳＣに新しいスケールコードＮＳＣが設定される。すなわち、今回のスケールコードがＯＳＣに保存される。
Ｓ１００８の後、メインルーチン（図８）へリターンする。
【００５１】
図１３は、図８にＭ７として示すＳＴＥＰ２のフローチャートの詳細を示すもので、Ｓ２０において、今回正負フラグｂ＝フラグＭＴかどうかすなわちＳＴＥＰ０の方向と同一のゼロクロス点の到来かどうかを判断し、Ｙの場合にはＳ２１に進む。Ｓ２１では、レジスタＣＨＴＲＲへ開放弦周期ＣＨＴＩＯをセットし、Ｓ２２に進む。Ｓ２２では、今回波高値ｃ＞（７／８）×前回の波高値ＡＭＰ（ｂ）かどうか、つまり波高値が前回と今回とで略同一かどうかをチェックし、Ｙの場合つまり美しい自然減衰の場合には、Ｓ２３に進み、フラグＤＵＢを０にセットし、Ｓ２４に進む。Ｓ２４では、周期計算を行い、今回のゼロクロス時刻ｔ−前回のゼロクロス時刻データＴＦＮ（ｂ）を前回周期データＴＰ（ｂ）に入力し、今回のゼロクロス時刻tを前回ゼロクロス時刻データＴＦＮ（ｂ）として入力する。Ｓ２４におけるＴＰ（ｂ）は、ＳＴＥＰ３でノートオン（１．５波）の条件として使用される。また、Ｓ２４１では、ＳＴＥＰ２の波高値ＶＥＬ２に今回波高値ｃをセットする。さらに、Ｓ２４２では、図１２のサブルーチンＮＯＴＥ＿ＯＮが実行され、Ｓ２４３でレジスタＳＴＥＰが３とセットされる。さらに、また、Ｓ２４４では、今回波高値ｃを前回の波高値ＡＭＰ（ｂ）ヘ書込む。Ｓ２４４の後、メインルーチンへリターン（ＲＥＴ）する。
【００５２】
Ｓ２０でＮの場合には、Ｓ２５に進み、フラグＤＵＢすなわち同一方向の入力波形がきたということを意味するフラグを１にし、Ｓ２６に進む。Ｓ２６では、今回波高値ｃ＞前回の波高値ＡＭＰ（ｂ）かどうかが判断され、Ｙの場合にはＳ２９に進む。Ｓ２９では今回波高値ｃに前回の波高値ＡＭＰ（ｂ）が書替えられ、レジスタＴの内容ｔに前回のゼロクロス時刻データＴＦＮ（ｂ）が書替えられる。また、Ｓ２２において、Ｎの場合には、Ｓ２７に進み、フラグＤＵＢ＝１かどうか、つまり前回ＳＴＥＰ２を実行したとき、ダブッたか否かのチェックを行い、Ｙの場合つまりダブッていればＳ２８に進む。Ｓ２８では、フラグＤＵＢを０にする。この場合にはＳ２９に進みメインルーチンにリターンする。またＳ２６のＮのときも、同様にメインルーチンヘリターン（ＲＥＴ）する。
【００５３】
以上述べたＳＴＥＰ２では、今回正負フラグｂとしてフラグＭＴ＝１が書替えられ、レジスタＣＨＴＲＲに０フレット周期すなわち開放弦周期ＣＨＴＩＯが書替えられ、またフラグＤＵＢが０にセットされ、さらにｔ−ＴＦＮ（１）→ＴＰ（１）なる周期計算が行われ、また今回ゼロクロス時刻ｔに前回のゼロクロス時刻データＴＦＮ（１）が書き替えられ、今回波高値ｃがＳＴＥＰ２の波高値ＶＥＬ２としてセットされ、図１２のサブルーチンＮＯＴＥ＿ＯＮが実行され、さらに今回波高値ｃとして前回波高値ＡＭＰ（１）がセットされる。
【００５４】
図１４は、図８にＭ８として示すＳＴＥＰ３のフローチャートであり、Ｓ３０でフラグＭＴ≠今回正負フラグｂかどうかが判断され、正常の場合すなわちＹのときは、Ｓ３１に進む。Ｓ３１では、（１／８）ｃ＜ＡＭＰ（ｂ）ならＸが０、また逆の場合にはＸ＝１にセットされ、Ｓ３２に進む。Ｓ３２では今回波高値ｃとして前回の波高値ＡＭＰ（ｂ）が書替えられる。
そしてＳ３３において、ＳＴＥＰ２で得られたＶＥＬより今回波高値ｃが大であれば、ベロシティＶＥＬは今回波高値ｃが入力される。もし逆ならば、このベロシティＶＥＬは変化しない。次に今回正負フラグｂにフラグＭＴが移替えられ、これによりピッチ変更側が逆にされる。これは、後述するＳＴＥＰ４からフラグＭＴの意味が変り、ピッチ変更側を意味している。そして、Ｓ３４で［ｔ−ＴＦＮ（ｂ）→ＴＰ（ｂ）］なる周期計算が行われる。また、今回のゼロクロス時刻ｔとして前回のゼロクロス時刻データでＴＦＮ（ｂ）が書替えられる。
【００５５】
次に、Ｓ３５において、Ｘ＝０かどうかを判断し、Ｙの場合にはＳ３６に進み、周波数上限ＴＨＬＩＭ＜前回の周期データＴＰ（ｂ）かどうか、つまりピッチ抽出上限チェックを行い、その結果、最高音の周期より大きな周期をもてば、許容範囲にあるということでＹとなり、Ｓ３７に進む。Ｓ３７では、トリガー時の周波数下限ＴＴＬＩＭ＞前回の周期データＴＰ（ｂ）かどうか、つまりピッチ抽出下限チェックを行い、最低音の周期より小の周期をもてば許容範囲にあり、Ｙの判断をしてＳ３８に進む。Ｓ３７のピッチ抽出下限は、後述するＳＴＥＰ４のピッチ抽出下限とは定数が異なる。
具体的には、周波数上限ＴＨＬＩＭは、最高音フレットの２〜３半音上の音高周期に相当し、トリガー時の周波数下限ＴＴＬＩＭは、開放弦の開放弦フレットの５半音下の音高周期に相当するものとする。
【００５６】
Ｓ３８では、前回の周期データＴＰ（ｂ）を前回抽出された周期データＴＴＰとしてセットすなわち、ピッチ抽出側で抽出されたピッチをセーブ（これは後述するＳＴＥＰ４で使用される）し、Ｓ３９に進む。Ｓ３９では、前回の周期データＴＰ（ｂ）≒ＴＰ（ｂ’）かどうか、すなわち極性の違うゼロクロス点間の周期の略一致のチェックである１．５波ピッチ抽出チェックを行い、Ｙの場合にはＳ３０１で次のような処理が行われる。すなわち、前回のゼロクロス時刻データＴＦＮ（ｂ’）として時刻記憶レジスタＴＦＲが書替えられ、また今回のゼロクロス時刻ｔが前回のゼロクロス時刻データＴＦとしてセットされ、波形ナンバーカウンタＨＮＣをクリアする。このカウンタＨＮＣは後述するＳＴＥＰ４にて使用される。レジスタＳＴＥＰは４にセットされ、ノートオンフラグＯＮＦは２（発音状態）にセットされ、定数ＴＴＵは０すなわち（ＭＩＮ）にセットされ、定数ＴＴＷは最高ＭＡＸにセットされる。これらはいずれも後述するＳＴＥＰ４にて使用するものである。また、リラティブオフの為の前回波高値レジスタＡＭＲＬ１がクリアされる。
【００５７】
次にＳ３１０で、いま求まったＴＰ（ｂ）の周期データを、Ｔレジスタへ入力し、Ｓ３１１で音高コードＫを求めるサブルーチンＰＩＴＣＨＣＡＬ（図１５）へジャンプする。
Ｓ３１２では、波高値ＶＥＬ２に今回波高値ｃが設定され、Ｓ３１３では、ＶＥＬ２の値を利用してベロシティＶＥＬを補正するためにアフタータッチ情報が音源に出力される。Ｓ３１４では、波高値ＶＥＬ２がＳＴＥＰ１の波高値の１／４以下であるかが判断され、Ｙの場合、すなわちＶＥＬ２≦（１／４）ＶＥＬの場合、ミュートフラグＭｆに１が設定される。また、Ｓ３１４でＮの場合、すなわちＶＥＬ２＞（１／４）ＶＥＬの場合、ミュートフラグＭｆに０が設定される。Ｓ３１４，Ｓ３１５の後、メインルーチンヘリターン（ＲＥＴ）する。
【００５８】
図１５は、前記Ｓ３１１のサブルーチンの詳細な内容を示している。
マイコンＭＣＰは、まずオクターブ値ＯＣＴを０とし（Ｓ１８１）、抽出ピッチデータＴがマイコンＭＣＰの内に記憶している音程データ変換テーブル内の基準ピッチデータＴ０「４５２５」より小さいか否か判断する（Ｓ１８２）。いま抽出ピッチデータが例えば「９８００」であったとすると、このデータＴ「９８００」は基準ピッチデータＴ０「４５２５」より大きいので、Ｓ１８３に進み、抽出ピッチデータＴ「９８００」を１／２にして「４９００」とし、オクターブ値ＯＣＴを−１して「−１」とし（Ｓ１８４）、再びＳ１８２に戻って、１／２にした抽出ピッチデータで「４９００」が基準ピッチデータＴ０「４５２５」より小さいか否か判断する。
【００５９】
今度も基準ピッチデータＴ０より大きいので、再度Ｓ１８３，Ｓ１８４の処理を繰り返し、抽出ピッチデータＴを１／２にして「２４５０」とし、オクターブ値を−１して「−２」とし、同じく抽出ピッチデータＴ「２４５０」が基準ピッチデータＴ０「４５２５」より小さいか否か判断する（Ｓ１８２）。
【００６０】
今度は基準ピッチデータＴ０より小さくなるので、Ｓ１８５に進み、抽出ピッチデータＴ「２４５０」が１／２の基準ピッチデータＴ０「２２６２．５」より大きいか否か判断する。抽出ピッチデータＴ「２４５０」の方が大きいので、Ｓ１８８に進み、上記基準ピッチデータＴ０「４５２５」により抽出ピッチデータＴ「２４５０」を引いてオクターブ未満の端数データｔ「２０７５」を求め、順番データｍを「０」とし（Ｓ１８９）、この「０」の順番データｍに応じた差分ピッチデータｄＴｍ「１２９」より上記端数データｔ「２０７５」が小さいか否か判断する（Ｓ１９０）。
【００６１】
差分ピッチデータｄＴｍの方が小さいので、Ｓ１９１に進んで、端数データｔ「２０７５」より先頭の差分ピッチデータｄＴｍ「１２９」を引いて「１９４６」とし、順番データｍを＋１して「１」とする（Ｓ１９２）。そして、端数データｔが差分ピッチデータｄＴｍより小さくなるまで、ステップＳ１９１，Ｓ１９２の処理を繰り返して、端数データｔより差分ピッチデータｄＴｍを順番に引いていく。
そして、差分ピッチデータｄＴｍが「７３」まで差し引かれ、順番データｍが「２１」になると、端数データｔが残り「１７」となり、次の差分ピッチデータｄＴｍ（ｍ＝２１）「７０」より小さくなるので、Ｓ１９３に進み、Ｋ＝Ｋ０＋１２×ＯＣＴ＋（ｍ＋ｔ／ｄＴｍ）／２＝５７．０＋１２×（−２）＋（２１＋１７／７０）／２＝４３．６２の演算を実行して、新たな音高コードＫを求める。この音高はＧ１♯よりやや上の音高となる。なお、Ｋ０はスケールＡ３の音高コードである。
【００６２】
こうして、音程データ変換テーブルに記憶されたＡ３〜Ａ４の１オクターブ分のピッチの差分データｄＴｍだけで、他のオクターブの音高データを求めることができる。
また、抽出したピッチデータＴがｌ／２の基準ピッチデータＴ０／２「２２６２．５」より小さければ、Ｓ１８５〜Ｓ１８７で抽出ピッチデータＴが「２２６２．５」より大きくなるまで２ｎ倍（ｎ＝１，２，３・・・・・・）していき、以後は上述したＳ１８８〜Ｓ１９３の処理を行って、音高データＫを求める。
【００６３】
以上要約すると、マイコンＭＣＰは、Ｓ１８１〜Ｓ１８７で、抽出ピッチデータＴを２ｎ倍（ｎ＝・・・・・・，−２，−１，０，１，２・・・・・・）して、音程データ変換テーブルに記憶されているピッチデータの範囲内にはいるようにすることにより、このｎの値であるオクターブ値ＯＣＴを求め、Ｓ１８８〜Ｓ１９２で、上記抽出ピッチデータＴのオクターブ未満の端数データと差分ピッチデータｄＴｍの累算データとの対応から音名を求められることになる。
【００６４】
また、上記実施例では、音高の表示を、シリアル番号とするようにしたが、オクターブ、音階名（コード）、半音以下のデータにて表現するようにしてもよく、その他どのような表現形態であってもよい。
さらに、上記実施例ではピッチデータを５０セント単位（半音の半分）でもつようにしたが、１００セント単位（半音毎）にもってもよく、あるいはさらに細分化してもつようにしてもよく、加えて、１オクターブを超えてそのようなデータをもつようにしてもよい。
このようにして、周期データから、対応する音高コードを求めることができ、図１４のＳＴＥＰ３の処理時には、音高コードは、半音以上のものとされ（Ｓ３１１）、発音時の音高はクロマチックに指定されることになる。
【００６５】
さて、図１４のＳ３０において、Ｎの場合（同一方向のゼロクロス点検出の場合）は、Ｓ３０３に進み、前回の波高値ＡＭＰ（ｂ）＜今回波高値ｃかどうかが判断され、Ｙの場合はＳ３０４に進む。Ｓ３０４では、今回波高値ｃが前回の波高値ＡＭＰ（ｂ）としてセットされ、ベロシティＶＥＬまたはレジスタＣの値ｃの内のいずれか大きい値がべロシティＶＥＬにセットされる。Ｓ３０３，Ｓ３５，Ｓ３６，Ｓ３７，Ｓ３９のいずれの場合もＮの場合には、メインルーチンヘリターン（ＲＥＴ）する。
【００６６】
Ｓ３１において、Ｘ＝１すなわち異常となる場合、（１／８）ｂ１＜ｂ０のときと、（１／８）ａ２＜ａ１のときのジャッジではいずれもその条件を満足せず、Ｘ＝１となる。
すなわち、波形入力初期等に入力される波形のピークは、ノイズによるもので、これらのノイズの周期を検出して発音開始を指示すると、全くおかしな音が発生してしまう。そこで、Ｓ３１では、波高値が大きく変わったことを検知して、Ｘ＝１とし、Ｓ３５でＮの判断をするようにする。そして、Ｓ３１にて波形が正常な変化をすることが検知されてから、発音開始を指示するようにする。
【００６７】
ここでは、ＴＰ（ｂ）≒ＴＰ（ｂ’）の検出がなされたときにノートオンとなる。
以上述べたＳＴＥＰ３では、ＭＴ＝１≠ｂ、ＡＭＰ（０）←ｃ、ｍａｘ［ＶＥＬ、ｃ（のいずれか大きい方）］→ＶＥＬ、ＭＴ←ｂ＝０、ＴＰ（０）←［ｔ−ＴＦＮ（０）］、ＴＦＮ（０）←ｔ、ＴＴＰ←ＴＰ（０）、ＴＦＲ←ＴＦＮ（１）、ＴＦ←ｔ、ＨＮＣ←０、ＯＮＦ←２、ＴＴＵ←０（ＭＩＮ）、ＴＴＷ←ＭＡＸ、ＡＭＲＬ１←０、ノートオン条件ＴＰ（０）≒ＴＰ（１）についての処理がなされる。そして、適切な波形入力に応答してこのＳＴＥＰ３において、抽出されたピッチに従ったクロマチックな音高の楽音が発生開始されることになる。すなわち、周期検出を開始してから、ｌ．５周期程度の時間経過で発音指示が音源ＳＳに対しなされることになる。
【００６８】
図１６は、図８のＭ９として示すＳＴＥＰ４のフローチャートであり、この場合ピッチ抽出のみを行うルート（１）、実際にピッチ変更を行うルート（２）がある。先ず、Ｓ４０，Ｓ４１，Ｓ４２，Ｓ６３〜Ｓ６７に示すルート（１）について説明する。Ｓ４０において、波形ナンバーカウンタＨＮＣ＞３が判断され、Ｙの場合にはＳ４１に進む。Ｓ４１では、リラティブオンしきい値ＴＲＬＲＬ＜［今回波高値ｃ−前回の波高値ＡＭＰ（ｂ）］かどうかの判断が行われ、Ｎの場合にはＳ４２に進む。Ｓ４２では今回正負フラグｂ＝フラグＭＴつまりピッチ変更側かどうかが判断され、Ｙの場合にはＳ４３に進む。
【００６９】
ところで、初期状態では、前記波形ナンバーカウンタＨＮＣは０である（図１４のＳ３０１参照）ので、Ｓ４０ではＮの判断をしてＳ４２へ進む。そして、例えば、理想的な波形入力の場合は、ｂ＝１でＭＴ＝０であるから、Ｓ４２からＳ６３へ進む。
【００７０】
Ｓ６３においては、同じ極性のピークが続けて入力されてきているか（ダブりであるか）、否かチェックするために、レジスタＲＩＶ＝１かどうかが判断され、Ｙの場合にはＳ６８に進み、また、Ｎの場合（ダブリでない場合）にはＳ６４に進み、ここで以下の処理が行われる。すなわち、Ｓ６４では今回波高値ｃが前回の波高値ＡＭＰ（ｂ）に入力され、リラティブオフ処理のために前回の振幅値ＡＭＲＬ１が前々回の振幅値ＡＭＲＬ２に入力される。なお、いまの場合はＡＭＲＬ１の内容は０である（ＳＴＥＰ３のＳ３０参照）。さらにＳ６４において、前回の波高値ＡＭＰ（ｂ’）と今回波高値ｃうちいずれか大きい方が前回振幅値ＡＭＲＬ１に入力される。つまり、周期の中で２つある正，負のピーク値について大きい値のピーク値が振幅値ＡＭＲＬ１にセットされる。そして、Ｓ６５で波形ナンバーカウンタＨＮＣ＞８かどうかが判断され、ここで波形ナンバーカウンタ（ピッチ変更側でないゼロクロスカウンタ）ＮＨＣが＋１され、カウントアップされる。
【００７１】
従って、波形ナンバーカウンタＨＮＣは、上限が９となる。そして、Ｓ６５もしくはＳ６６の処理の後Ｓ６７へ進行する。Ｓ６７では、レジスタＲＩＶを１とし、今回のゼロクロス時刻ｔから時刻記憶レジスタＴＦＲの内容を引算して、周期レジスタＴＴＲへ入力する。そして、今回のゼロクロス時刻ｔは、時刻記憶レジスタＴＦＲへセーブされ、この後、メインルーチンにリターン（ＲＥＴ）する。
【００７２】
Ｓ６３でＹの場合は、Ｓ６８に進み今回波高値ｃ＞前回の波高値ＡＭＰ（ｂ）かどうかが判断され、Ｙの場合はＳ６９に進む。Ｓ６９では、今回波高値ｃに前回の波高値ＡＭＰ（ｂ）が書替えられ、Ｓ７０に進む。Ｓ７０では今回波高値ｃ＞前回の振幅値ＡＭＲＬ１かどうかが判断され、Ｙの場合にはＳ７１に進み、ここで今回波高値ｃが前回の振幅値ＡＭＲＬ１に入力される。
もし、Ｓ６８でＮの判断がなされるとすぐにメインルーチンへリターンする。従って、新しい入力波形のピークが大である場合についてのみ、新しい波形の振幅値が登録される。（その場合は、倍音のピークをひろっていないと考えられるので。）
【００７３】
また、Ｓ７０でＮのときと、Ｓ７１の処理の終了のときには、同様にメインルーチンヘリターンする。
以上述べたようにルート（１）は、以下のような処理がなされる。ＭＴ＝０≠ｂ、ＲＩＶ＝０、ＡＭＰ（１）←ｃ、ＡＭＲＬ２←ＡＭＲＬ１←ｍａｘ［ＡＭＰ（０），ｃ（のいずれか大きい方）］、ＨＮＣ←（ＨＮＣ＋１）＝１、ＲＩＶ←１、ＴＴＲ←（ｔ−ＴＦＲ）、ＴＦＲ←１が処理される。従って、周期レジスタＴＴＲに前回の同極性のゼロクロス点（ＳＴＥＰ２→３のところ）から今回のゼロクロス点までの時刻情報の差つまり、周期情報が求まったことになる。そして、メインルーチンヘ戻り、次のゼロクロスインターラプトを待つ。
【００７４】
次に、Ｓ４０〜Ｓ６２に示すルート（２）へ進んだ場合の説明を行う。いま、波形ナンバーカウンタＨＮＣ＝１なので（Ｓ６６参照）、Ｓ４０からＳ４２へ進む。Ｓ４２では、ＭＴ＝０、ｂ＝０なのでＹとなり、Ｓ４３へ進む。Ｓ４３では、レジスタＲＩＶ＝１かどうかが判断される。既にルート（１）において、レジスタＲＩＶは１とされている（Ｓ６７参照）ので、Ｓ４３の判断はいまの場合Ｙとなり、Ｓ４４へ進む。
【００７５】
Ｓ４４では、レジスタＳＴＥＰ＝４かどうかが判断され、Ｙの場合にはＳ４４１に進む。Ｓ４４１では、ミュートフラグＭｆが１であるかが判断され、Ｙの場合にはＳ４４２に進み、Ｎの場合にはＳ４５に進む。
Ｓ４４２では、今回波高値ｃがベロシティＶＥＬの１／４以下であるか（ｃ≦（１／４）ＶＥＬ）が判断され、Ｙの場合にはＳ７４に進み、Ｎの場合にはＳ４４３に進む。Ｓ４４３では、ミュートフラグＭｆにゼロを設定し、Ｓ４５へ進む。
Ｓ４５では、今回波高値ｃ＜６０Ｈ（Ｈは１６進法表現を示す）かどうかが判断され、いま波高値は大なのでＹとなり、Ｓ４６に進む。Ｓ４６では、前々回の振幅値ＡＭＲＬ２−前回の振幅値ＡＭＲＬ≦（１／３２）×前々回の振幅値ＡＭＲＬ２かどうかが判断され、Ｙの場合にはＳ４７に進み、リラティブオフカウンタＦＯＦＲが０にセットされる。このリラティブオフの処理については後述する。そして、Ｓ４８では周期計算が行われる。具体的には（今回のゼロクロス時刻ｔ−前回のゼロクロス時刻データＴＦ）が今回の周期情報ｔｔとしてレジスタＴＯＴＯにセットされる。そして、Ｓ４９に進み、Ｓ４９では、今回の周波数情報ｔｔ＞周波数上限ＴＨＬＩＭ（発音開始後の上限）かどうかが判断され、Ｙの場合にはＳ５０に進む。
【００７６】
Ｓ４９の周波数上限ＴＨＬＩＭは、ＳＴＥＰ３のＳ３６で使用したトリガー時（発音開始時）周波数の許容範囲の上限（従って周期として最小で、最高音フレットの２〜３半音上の音高周期に相当する）と同一のものである。
次に、Ｓ５０では次の処理が行われる。すなわち、レジスタＲＩＶを０にし、今回のゼロクロス時刻ｔが前回のゼロクロス時刻データＴＦとして入力され、また前回の波高値ＡＭＰ（ｂ）が前々回波高値ｅに入力され、さらに今回波高値ｃが前回の波高値ＡＭＰ（ｂ）に入力される。
【００７７】
そして、Ｓ５０の処理の後Ｓ５１に進み、Ｓ５１では、周波数下限ＴＬＬＩＭ＞今回の周期情報ｔｔかどうかが判断され、Ｙの場合すなわち今回の周期がノートオン中のピッチ抽出音域下限以下になった場合にはＳ５２に進む。
この場合、周波数下限ＴＬＬＩＭは、例えば、開放弦音階の１オクターブ下にセットされる。つまり、ＳＴＥＰ３の周波数下限ＴＴＬＩＭ（Ｓ３７参照）に比較して、許容範囲を広くしている。このようにすることで、トレモロアームの操作等による周波数変さらに対応し得るようになる。
従って、周波数の上限、下限について許容範囲に入る場合についてのみＳ５２まで進み、そうでない場合はＳ４９，Ｓ５１よりメインルーチンへリターンする。
【００７８】
次に、Ｓ５２では周期データＴＴＰが前々回抽出された周期データｈに入力され、また、今回の周期情報ｔｔが前回抽出された周期データＴＴＰに入力される。そして、Ｓ５３で今回波高値ｃがベロシティＶＥＬに書込まれ、Ｓ５４に進む。Ｓ５４では、ノーチェンジレベルＮＣＨＬＶ＞（前々回波高値ｅ−今回波高値ｃ）かどうかの判断が行われ、Ｙの場合にはＳ５５に進む。
すなわち、前回の同極性の波高値（ｅ＝ＡＭＰ（ｂ））と今回の波高値ｃとが大きく変化している場合は、その差がＮＣＨＬＶを超えることになり、そのようなときに、抽出された周期情報に基づきピッチ変更を行うと、不自然な音高変化を呈することになる可能性が高い。そこで、Ｓ５４でＮの判断がなされると、Ｓ５５以降の処理をすることなく、メインルーチンへリターンする。
【００７９】
次に、Ｓ５４でＹの場合、Ｓ５５では、リラティブオフカウンタＦＯＦＲ＝０か否かが判断される。後述するリラティブオフ処理を行っているときは、リラティブオフカウンタＦＯＦＲは０でなくなっており、そのような場合もピッチ変更（Ｓ６０２を参照）の処理を行うことなく、Ｓ５５でＮの判断をしてメインルーチンヘリターンする。そして、Ｓ５５にて、Ｙの判断をしたときは、Ｓ５６，Ｓ５７へと順次進む。
ここで２波３値一致条件が判断される。Ｓ５６では今回の周期情報ｔｔ×２−７＞｜今回の周期情報ｔｔ−前々回周期データｈ｜が判断され、Ｙの場合にはＳ５７に進み、またＳ５７では今回の周期情報ｔｔ×２−７＞｜今回の周期情報ｔｔ−周期レジスタＴＴＲの内容｜が判断され、Ｙの場合にはＳ５８に進む。
【００８０】
すなわち、Ｓ５６では、今回の周期情報ｔｔ（Ｓ４３参照）が、前回の周期データｈ（＝ＴＴＰ）（Ｓ５２参照）の値と略一致するか否かを判断し、Ｓ５７では、今回の周期情報ｔｔの値が、それに重なる周期でＴＴＲとほぼ一致するか否かを判断する。なお、その限界範囲は、２−７×ｔｔとして周期情報に依存してその値が変わるようになっている。勿論、これは固定の値としてもよいが、本実施形態採用技術の方が良好な結果を得ることができる。
【００８１】
次のＳ５８では、今回の周期情報ｔｔ＞定数ＴＴＵかどうかが判断され、ＹならばＳ５９に進み、ここで今回の周期情報ｔｔ＜定数ＴＴＷかどうかが判断され、ＹならばＳ６０へ進む。なお、Ｓ５８，Ｓ５９は急激なピッチ変更を認めないための判断である。
【００８２】
つまり、Ｓ５８の定数ＴＴＵは、ＳＴＥＰ３のＳ３０１でいま０とされ、定数ＴＴＷは同様にＭＡＸの値とされており、初めてこのフローを通るときは必ずＳ５８，Ｓ５９でＹの判断がなされるが、その後は後述するＳ６２において、定数ＴＴＵには、（１７／３２）ｔｔ（略１オクターブ高音の周期情報）がセットされ、定数ＴＴＷには同様にＳ６２にて（３１／１６）ｔｔ（ほぼ１オクターブ低音の周期情報）がセットされる。従って、急激にオクターブアップする（これは、フレットを離してミュート操作したとき等に生ずる）ことやオクターブダウンすること（これは波形のピークをとり逃したとき等に起る）があったときは、ピッチ変更をすると、不自然となるので、ピッチ変更をしないようにブランチする。
【００８３】
もし、Ｓ５８，Ｓ５９でＹの判断がなされたときは、次にＳ６０へ進む。Ｓ６０では、レジスタＳＴＥＰ＝４にされたかどうかの判断が行われ、Ｙの場合には、Ｓ６０１へ進み、周期情報ｔｔをレジスタＴへセットし、Ｓ６０２にて音高コードを求める。このＳ６０２は、上述したＳ３１１と同様の音高コードを求めるサブルーチンＰＩＴＣＨＣＡＬ（図１５）の実行を意味する。
【００８４】
その結果、半音未満の音高コードを含む音高コードＫが得られ、それをもって、音源ＳＳに対しピッチ変更指示をする。
次にＳ６２に進み、今回の周期情報ｔｔに対応して時定数チェンジをし、また定数ＴＴＵが（１７／３２）×今回の周期情報ｔｔに書替えられ、さらに定数ＴＴＴＷが（３１／１６）×今回の周期情報ｔｔに書替えられる。
【００８５】
つまり、後述するように、リラティブオフの処理がなされたときに限り、ＳＴＥＰ＝５となるが、そのときは、ピッチ変更を行うことなく時定数チェンジを行う。この時定数チェンジの処理とは、レジスタに今回の周期情報ｔｔの値に基づくデータをマイコンＭＣＰがセットすることをいう。これは、既に説明したとおりである。
【００８６】
そして、Ｓ６２の処理の終了でメインルーチンヘリターンする。従って、以上述べたようにルート（２）は、次の処理がなされる。
すなわち、ＨＮＣ＝１、ＭＴ＝０＝ｂ、ＲＩＶ＝１、ＦＯＦＲ←０、ｔｔ←（ｔ−ＴＦ）、ＲＩＶ←０、ＴＦ←ｔ、ｅ←ＡＭＰ（０）、ＡＭＰ（０）←ｃ、ｈ←ＴＴＰ、ＴＴＰ←ｔｔ、ＶＥＬ←ｃであり、
【００８７】
さらに、
（１）ＴＴＰ≒ＴＴＲ≒ｔｔ、
（２）ＴＴＵ＜ｔｔ＜ＴＴＷ、
（３）ＡＭＰ（０）−ｃ＜ＮＣＨＬＶ
の３条件の満足で、ｔｔに従った半音未満（１００セント未満）の音高変更も含むピッチ変更を行う。しかる後、ＴＴＵ←（１７／３２）×ｔｔ、ＴＴＷ←（３１／１６）×ｔｔがなされる。
【００８８】
従って、ルート（２）にて、実際の音源ＳＳに対するピッチ変更が行われ、続くゼロクロスインタラプトでルート（１）の処理、同様に、続くゼロクロスインタラプトで、ルート（２）の処理が行われる。このようにして、ルート（１）では、単に周期を抽出（Ｓ６７参照）し、ルート（２）では実際のピッチ変更（Ｓ６０２参照）し、時定数チェンジ処理（Ｓ６２参照）が行われることになる。
【００８９】
なお、ＳＴＥＰ４におけるＳ４０において、ルート（１）のＳ６６で波形ナンバーカウンタＨＮＣが３を超えるように、カウントアップされた後は、Ｙの判断がなされ、次にＳ４１へ行き、リラティブオンの条件を検出する。これは、ｃ−ＡＭＰ（ｂ）＞ＴＲＬＲＬであり、前回の振幅値ＡＭＲＬ１に比べて今回の振幅値がしきい値ＴＲＬＲＬを超えて増大したとき、つまり、これは弦操作後に同じ弦を市政ピッキングしたとき（トレモロ奏法等による）にこのようなことがおき、この場合はＳ４１でリラティブオンの処理をすべくＳ４１からＳ７８へ進み、時定数変換制御回路ＴＴＣの時定数チェンジレジスタＣＨＴＲＲへ最高音フレット（例えば２２フレット）の周期ＣＨＴＩＭをセットする。しかる後、図１６のＳ６０へ進み、当該発音中の楽音をノートオフした後、再発音開始する。
【００９０】
通常の演奏操作によれば、Ｓ４０，Ｓ４１，Ｓ４２へ進み、上述したルート（１）もしくはルート（２）へ進む。
次に、リラティブオフ処理を説明する。つまり、フレット操作している状態から、開放弦状態へ移行すると、波形の振幅レベルは急激に落ちてきて、前々回の波高値ＡＭＲＬ２と前回の波高値ＡＭＲＬ１との差が（１／３２）ＡＭＲＬ２を超えるようになると、Ｓ４６からＳ７４へ進む。そして、リラティブオフカウンタＦＯＦＲが定数ＲＯＦＣＴを超えるまでカウントアップするようにＳ７４からＳ７５へ進む。このとき、Ｓ７５からＳ４８へ行きＳ４９〜Ｓ５５の処理を行うが、ＦＯＦＲ＝０でないので、リラティブオフ処理に入る直前ではピッチ変更を行うことなくメインルーチンへ戻る。
【００９１】
そして、Ｓ７４でＹと判断すると、ＦＯＦＲの値が３となったとき（ＲＯＦＣＴは２である）、Ｓ７４からＳ７５へ行く。
ただし、Ｓ４６のジャッジでＹの判断が一度でもあると、Ｓ４６からＳ４７へ進み、ＦＯＦＲをリセットするようになる。従って、ＲＯＦＣＴで指定される回数だけ続けてＳ４６の条件を満足しなければ、リラティブオフの処理はなされない。なお、ＲＯＦＣＴの値は、音高が高い弦について大きな値としておけば、略一定の時間経過で、いずれの弦についてもリラティブオフ処理ができる。
【００９２】
そして、Ｓ７４からＳ７６へ行くと、リラティブオフカウンタＦＯＦＲをリセットし、レジスタＳＴＥＰを５とし、Ｓ７７へ進んで音源ＳＳに対しノートオフを指示する。このＳＴＥＰが５の状態では、ピッチ抽出処理をＳＴＥＰ４の時と同様に実行するが、Ｓ６０からＳ６０１、Ｓ６０２を介することなくＳ６２へ進むので、音源ＳＳに対しては、ピッチ変更はされない。ただし、Ｓ６２において抽出した周期に従って時定数チェンジ処理を行う。
【００９３】
そして、ＳＴＥＰが５の状態では、リラティブオンの処理を受付けるが（Ｓ４１，Ｓ７８）、それ以外の場合では、図８のメインルーチンの中で、振動レベルが減少してきたことが検知されることによりＭ１４でＳＴＥＰが０となり、初期状態に戻る。
なお、Ｓ４６で使用するＡＭＲＬ１、ＡＭＲＬ２はＳ６４で作られており、１周期の中でレベルが大な方のピーク（最大ピークと最小ピークとの一方）が、この値とされ、最大ピークａｋが最小ピークｂＫ−１より必ず大である場合であって、ａｎ＋１とａｎ＋２、ａｎ＋２とａｎ＋３、ａｎ＋３とａｎ＋４の差がいずれも所定値を超えるようになっている。
【００９４】
また、このときルート（２）の処理においては、最小ピークｂｎ＋１、ｂｎ＋２、ｂｎ＋３が極端に減少してきているので、Ｓ５４でＮの判断が成されて、メインルーチンヘリターンし、ピッチ変更処理はなされない。
次に、ピッチ抽出しているなかで、オクターブ関係にある倍音、つまりオクターブ高い音やオクターブ低い音が続けて検出されたときの処理について説明する。
【００９５】
既に説明したように、Ｓ５８ではｔｔがＴＴＵを超えなかったとき、つまり、前回抽出した周期の１７／３２倍した値ＴＴＵより小になったとき、Ｓ７６へ進む。つまり、オクターブ高い音が抽出されたときは、指定していたフレットから指を離してミュート操作をした場合とみなし、オクターブ高い音を出力することなく、Ｓ５８からＳ７６へ行き、リラティブオフ時同様Ｓ７６，Ｓ７７の処理によって当該音の発音を停止する。
また、Ｓ５９では、ｔｔがＴＴＷを超えなかったとき、つまり前回抽出した周期の３１／１６倍した値ＴＴＷより大となったとき、Ｓ６０へ進むことなく、メインルーチンへリターンする。
【００９６】
通常ノートオフ近辺の非常に波形が小さい場合、他のピッキングによってヘキサピックアップのクロストオークやボディの共振によって波形が乗ってくる。すると、１オクターブ下の入力波形が続けて検出されてしまうことがある。
このような場合、何等処理を施さないと、急にオクターブ下の音を出力してしまい、極めて不自然となる。そのために、Ｓ５７，Ｓ５６でＴａｎ＋２≒Ｔａｎ＋３≒Ｔｂｎ＋２が検出されても、Ｔａｎ＋３＞Ｔａｎ＋１×（３１／１６）となるので、ピッチ変更することなく、Ｓ５９からメインルーチンヘリターンする。
【００９７】
次に、ダブリの波形が抽出される場合つまり、同じ極性のゼロクロス点が拭けて到来する場合について説明する。ＭＴ＝１の場合の例を考えると、基本波周期と倍音成分の周期が非整数倍の関係にあるので、倍音の位相がずれて行き、同じ極性のゼロクロスを検出してしまうことになり、そのために誤ったピッチ変更をしないようにしないといけない。
そこで、図のダブリと書いてあるゼロクロス時のＳＴＥＰ４の処理では、Ｓ４２からＳ４３へ行き、Ｓ４３ではＹの判断をしてＳ７２へ行く。ここで、（ａｎ＋３）と（ａｎ＋２）の大きさが比較され、もし（ａｎ＋３）が（ａｎ＋２）より大であれば、Ｓ７２でＹの判断をし、ＡＭＰ（１）に、（ａｎ＋３）の値をセットし、もし逆の場合は何等変更処理をしない。
【００９８】
ところで、このダブリの場合抽出している時刻データは何等使用しないので、周期情報Ｔａｎ＋３は何等変わらない。また、当然周期データに基づくピッチ変更は行わない。
同様に、波形のダブリの場合の例、すなわちＭＴ＝０の状態では、ダブリの状態が生じているときに、Ｓ４２からＳ６３へ行き、Ｙの判断をしてＳ６８へ行く。Ｓ６８では、いまの場合（ａｎ＋２）と（ａｎ＋３）との比較をして、（ａｎ＋３）が（ａｎ＋２）より大なときに限りＳ６９へ行き、ＡＭＰ（１）を書替える。この場合は、さらに前回の振幅値ＡＭＲＬ１と今回の振幅情報（波高値ｃ）の比較をＳ７０で行って、もしＹならばＳ７１へ進み、今回の振幅情報ｃを前回の振幅値ＡＭＲＬ１へセットする。
このようにして、倍音の影響で、波形がダブったときにも、Ｓ５６，Ｓ５７を満足しない限りピッチ変更処理はなされないことになる。
【００９９】
以上述べたように、本実施形態に係る電子ギター１は、フレットスキャン部ＦＳと、ピッチ抽出回路ＰＣと、マイコンＭＣＰとを備えている。フレットスキャン部ＦＳは、指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、ピッチ抽出回路ＰＣは、張設された弦の振動を検出する。また、マイコンＭＣＰは、検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する。そして、マイコンＭＣＰは、第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、決定された音高の楽音を発生させる制御を行う。さらに、マイコンＭＣＰは、第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、第１の音量を補正する。
【０１００】
そのため、ピッキングが行われた直後の弦の振動のレベルに応じた音量で、早期に楽音を発生させることができるとともに、弦の振動が安定した区間における弦の振動のレベルに応じた音量に補正することができる。
従って、電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとすることができる。
【０１０１】
また、マイコンＭＣＰは、第３の区間以降に前記検出された弦の振動が、第１の音量よりも、第２のしきい値以上小さい期間が所定期間継続した場合に、楽音の発生をミュートさせる。
そのため、弾弦された後に、弦を抑える等によってミュートが行われたことを検出することができるため、種々の奏法に対して、適切な音量の楽音を発生させることができる。
【０１０２】
また、マイコンＭＣＰは、楽音の発生をミュートさせた後、検出された弦の振動が、第１の音量よりも、第３のしきい値以上小さい状態でなくなった場合、ミュートを解除する。
そのため、ミュートが終了したことを速やかに検出して、弦の振動に応じた音量で楽音の発生を行うことができるため、演奏において違和感が生じることを抑制できる。
【０１０３】
なお、前記実施例においては、最大ピーク点、最小ピーク点の次のゼロクロス点毎の間隔から周期抽出を行うようにしたが、その他の方式、例えは最大ピーク点間や最小ピーク点間の時間間隔から周期抽出を行ってもよい。また、それに合わせて回路構成は種々変更し得る。
また、前記実施例においては、この発明を電子ギター（ギターシンセサイザ）に適用したものであったが、それに限らない。ピッチ抽出を行って、オリジナルの信号とは別の音響信号を発生するタイプの楽器または装置であれば、種々適用可能である。
【０１０４】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
換言すると、図２及び図４等の構成は例示に過ぎず、特に限定されない。すなわち、上述した一連の処理を全体として実行できる機能が電子ギター１に備えられていれば足り、この機能を実現するためにどのような機能構成及び回路構成とするかは特に図２及び図４の例に限定されない。
また、１つの機能ブロックは、ハードウェア単体で構成してもよいし、ソフトウェア単体で構成してもよいし、それらの組み合わせで構成してもよい。
【０１０５】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、コンピュータ等にネットワークや記録媒体からインストールされる。
コンピュータは、専用のハードウェアに組み込まれているコンピュータであってもよい。また、コンピュータは、各種のプログラムをインストールすることで、各種の機能を実行することが可能なコンピュータ、例えば汎用のパーソナルコンピュータであってもよい。
【０１０６】
このようなプログラムを含む記録媒体は、ユーザにプログラムを提供するために装置本体とは別に配布されるリムーバブルメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される記録媒体等で構成される。リムーバブルメディアは、例えば、磁気ディスク（フロッピディスクを含む）、光ディスク、または光磁気ディスク等により構成される。光ディスクは、例えば、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ），ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ），Ｂｌｕ−ｒａｙ  Ｄｉｓｃ（ブルーレイディスク）（登録商標）等により構成される。光磁気ディスクは、ＭＤ（Ｍｉｎｉ−Ｄｉｓｋ）等により構成される。また、装置本体に予め組み込まれた状態でユーザに提供される記録媒体は、例えば、プログラムが記録されているＲＯＭやハードディスク等で構成される。
【０１０７】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１０８】
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１０９】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［付記１］
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定手段と、
張設された弦の振動を検出する弦振動検出手段と、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する第１の判別手段と、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行う制御手段と、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する補正手段と、
を有する電子弦楽器。
［付記２］
前記制御手段は、前記第３の区間以降に前記検出された弦の振動が、前記第１の音量よりも、第２のしきい値以上小さい期間が所定期間継続した場合に、楽音の発生をミュートさせる付記１に記載の電子弦楽器。
［付記３］
前記制御手段は、前記楽音の発生をミュートさせた後、前記検出された弦の振動が、前記第１の音量よりも、第３のしきい値以上小さい状態でなくなった場合、ミュートを解除する付記２に記載の電子弦楽器。
［付記４］
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられる楽音制御方法であって、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別し、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行い、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する、楽音制御方法。
［付記５］
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられるコンピュータに、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定ステップと、
前記検出された弦の振動のレベルが第１のしきい値を超えたか否か判別する第１の判別ステップと、
前記第１のしきい値を超えたと判別された第１の区間における弦の振動のレベルと、当該第１の区間に続く第２の区間における弦の振動のレベルとに基づいて決定した第１の音量で、前記決定された音高の楽音を発生させる制御を行う制御ステップと、
前記第２の区間に続く第３の区間以降における弦の振動のレベルに基づいて、前記第１の音量を補正する補正ステップと、
を実行させるプログラム。
【符号の説明】
【０１１０】
１・・・電子ギター、ＰＧ・・・スキャンパルス発生器、ＦＳ・・・フレットスキャン部、ＦＤＣ・・・フレット検出回路、ＰＣ・・・ピッチ抽出回路、ＬＰＦ・・・ローパスフィルタ、ＡＭＣ・・・増幅回路、ＺＣＲ・・・ゼロクロス点取込回路、ＡＢＳ・・・絶対値取込回路、ＦＢ・・・指板、ＭＣＰ・・・マイコン、ＩＣ・・・割込制御回路、ＴＭＲ・・・タイマー、Ａ／Ｄ・・・アナログ−デジタル変換回路、ＭＥＭ・・・メモリ、ＳＯＢ・・・音源発生装置、ＳＳ・・・音源、Ｄ／Ａ・・・デジタル−アナログ変換回路、ＡＭＣ・・・増幅回路、ＤＣＤ・・・アドレスデコーダ
【図１】
2015082094.tif 000003
【図２】
2015082094.tif 000004
【図３】
2015082094.tif 000005
【図４】
2015082094.tif 000006
【図５】
2015082094.tif 000007
【図６】
2015082094.tif 000008
【図７】
2015082094.tif 000009
【図８】
2015082094.tif 000010
【図９】
2015082094.tif 000011
【図１０】
2015082094.tif 000012
【図１１】
2015082094.tif 000013
【図１２】
2015082094.tif 000014
【図１３】
2015082094.tif 000015
【図１４】
2015082094.tif 000016
【図１５】
2015082094.tif 000017
【図１６】
2015082094.tif 000018