(57)【要約】      （修正有）【課題】電子弦楽器における発音をより速やかに行う。【解決手段】電子ギターは、フレットスキャン部と、マイコンとを備えている。フレットスキャン部は、複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する。マイコンは、複数のフレットを複数のグループに分類し、分類されたグループ毎に、押弦センサの検出結果に基づいて、押弦操作の有無を判定する。また、マイコンは、押弦操作があると判定された場合に、押弦センサの検出結果に基づいて、グループにおいて押弦操作されたフレット位置を検出する。【選択図】図６
2015152777.tif 000002
【特許請求の範囲】
【請求項１】
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサと、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定手段と、
前記押弦判定手段によって押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出手段と、
を有する電子弦楽器の押弦位置検出装置。
【請求項２】
前記押弦判定手段は、高音側の前記グループから順に、当該グループにおける押弦操作の有無を判定する請求項１に記載の電子弦楽器の押弦位置検出装置。
【請求項３】
前記フレット位置検出手段は、前記グループにおけるフレット位置に加え、セーハが行われた場合に押弦操作を検出する範囲として設定されたフレット位置の範囲において、押弦操作されたフレット位置を検出する請求項１または２に記載の電子弦楽器の押弦位置検出装置。
【請求項４】
前記フレット位置検出手段は、前記グループにおける高音側のフレットから順に、押弦操作されたフレット位置を検出する請求項１から３のいずれか１項に記載の電子弦楽器の押弦位置検出装置。
【請求項５】
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高を設定する音高設定手段をさらに有する請求項１から４のいずれか１項に記載の電子弦楽器の押弦位置検出装置。
【請求項６】
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高と、最も低音側のフレット位置に対応する音高との中間の音高を設定する音高設定手段をさらに有する請求項１から４のいずれか１項に記載の電子弦楽器の押弦位置検出装置。
【請求項７】
前記フレット位置検出手段は、押弦操作を検出した最も高音側のフレット位置から、低音側の予め設定された範囲のフレット位置までにおいて、押弦操作されたフレット位置を検出する請求項６に記載の電子弦楽器の押弦位置検出装置。
【請求項８】
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられる押弦位置検出方法であって、前記押弦位置検出装置は、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定し、
押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出する、押弦位置検出方法。
【請求項９】
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられるコンピュータに、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定ステップと、
前記押弦判定ステップにおいて押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子ギター等の電子弦楽器に係り、特にその入力波形信号からピッチ抽出を行って種々の音高の楽音を発生する電子弦楽器の押弦位置検出装置、押弦位置検出方法及びプログラムに関する。
【背景技術】
【０００２】
従来より、自然楽器の演奏操作によって発生する波形信号からピッチ（基本周波数）を抽出し、電子回路で構成された音源装置を制御して、人工的に楽音等の音響を得るようにした楽音生成装置が開発されている。
このような楽音生成装置を備えた電子ギター等の電子弦楽器においては、弦を指で押さえるフレット操作と、弦を弾くピッキングとが演奏操作として行われ、これらの演奏操作に応じた楽音を発生させる。
例えば、フレット操作が行われた押弦位置が検出され、この押弦位置に対応した音高が決定される。また、ピッキングによって弦に発生した振動波形の周波数が検出され、この周波数に応じた音高に逐次補正が行われる。
なお、フレット操作及びピッキングを検出して楽音を発生させる電子弦楽器は、例えば、特許文献１に記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−０８４７６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、フレット操作が行われた押弦位置を検出する場合、各弦（例えば１〜６弦）について、各フレット（例えば１〜２２フレット）の位置で弦とフレットとが接触しているか否かを確認するため、押弦位置の検出に一定の時間を要していた。
この場合、押弦位置に対応した音高の決定が遅れることにより、発音の遅れが生じる可能性がある。
【０００５】
本発明は、このような状況に鑑みてなされたものであり、電子弦楽器における発音をより速やかに行うことを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の一態様の電子弦楽器の押弦位置検出装置は、
複数の弦が張設された指板部の複数のフレットにおける押弦操作を検出する押弦センサと、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定手段と、
前記押弦判定手段によって押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出手段と、
を有する。
【発明の効果】
【０００７】
本発明によれば、電子弦楽器における発音をより速やかに行うことができる。
【図面の簡単な説明】
【０００８】
【図１】本実施例に係る電子ギターの主要部の構成を示す模式図である。
【図２】全体の回路を示すブロック図である。
【図３】フレットの押弦状態を検出するためのフレット検出回路を示す図である。
【図４】ピッチ抽出回路及びマイコンの具体的な機能構成を示すブロック図である。
【図５】マイコンが楽音を発生する際の処理の概要を示す模式図である。
【図６】マイコンＭＣＰが実行する押弦状態検出処理の流れを示すフローチャートである。
【図７】第２実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図８】第２実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図９】第２実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図１０】フレット群ＦＧＡ〜ＦＧＣと、セーハが行われた場合に押弦状態を検出するフレットの範囲との関係を示す模式図である。
【図１１】第３実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図１２】第４実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図１３】第４実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図１４】第４実施形態における押弦状態検出処理の流れを示すフローチャートである。
【図１５】フレット群ＦＧＡ〜ＦＧＣと、セーハが行われた場合に押弦状態を検出するフレットの範囲との関係を示す模式図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について、図面を用いて説明する。
【００１０】
［第１実施形態］
以下、この発明の実施形態について図面を参照して説明するが、ここではこの発明を電子ギター（ギターシンセサイザ）に適用した場合を例に挙げて説明する。なお、これに限らず他のタイプの電子弦楽器であっても同様に適用できる。
【００１１】
図１は、本実施例に係る電子ギター１の主要部の構成を示す模式図である。
本実施形態に係る電子ギター１では、２２個のフレットが１つのグループ（フレット群）として取り扱われ、各弦について、グループを単位として押弦状態が検出される。
図１に示すように、電子ギター１は、指板ＦＢ上に張設された６つの弦ＳＴＧ１〜ＳＴＧ６を備えており、各弦に対して、フレット及びピッキングを行うことにより、アコースティックギター等の自然楽器と同様の操作でユーザの演奏を可能とするものである。図１に示すように、電子ギター１は、指板ＦＢ上に張設された６つの弦ＳＴＧ１〜ＳＴＧ６にそれぞれ設けられ、各弦にスキャンパルスを入力するスキャンパルス発生器ＰＧを備えている。そして、電子ギター１は、各弦に対するフレットあるいはピッキングが行われた場合に、フレットスキャン部ＦＳ及びピッチ抽出回路ＰＣによって、各操作を検出する。なお、本実施形態において、フレット番号１のフレットが最もヘッド側のフレットであり、フレット番号２２のフレットが最もブリッジ側のフレットである。
図２は、全体の回路を示すブロック図である。ピッチ抽出回路ＰＣは、各弦の振動を電気信号に変換し、振動波形のゼロクロス点及び振幅の絶対値を取得して、マイコンＭＣＰに出力する。
【００１２】
マイコンＭＣＰは、後述する音程データ変換テーブル（ピッチテーブル）を含むメモリ例えばＲＯＭ及びＲＡＭを有すると共に、タイマーＴＭＲを有し、音源発生装置ＳＯＢに与える為の信号を制御するものである。音源発生装置ＳＯＢは音源ＳＳとデジタル−アナログ変換回路Ｄ／Ａと、増幅回路ＡＭＰと、スピーカＳＰとからなり、マイコンＭＣＰからのノートオン（発音）、ノートオフ（消音）、周波数を変える音高指示信号に応じた音高の楽音を放音するものである。なお、音源ＳＳの入力側とマイコンＭＣＰのデータバスＢＵＳとの間に、ＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）形式のインターフェースが設けられている。勿論、ギター本体に音源ＳＳを設けるときは、別のインターフェースを介してもよい。アドレスデコーダＤＣＤは、マイコンＭＣＰからのアドレス読み出し信号ＡＲが入力されたとき、弦番号の読込み信号ＲＤＩ、時刻読込み信号ＲＤｊ（ｊ＝１〜６）とＭＡＸ，ＭＩＮのピーク値及びその時点その時点の瞬時値読込み信号ＲＤＡＩ（Ｉ＝１〜１８）をピッチ抽出回路ＰＣに出力する。
【００１３】
マイコンＭＣＰは、一定時間毎（例えば１ｍｓ毎）の割り込み処理として、各弦における各フレットの押弦状態を常に検出する押弦状態検出処理を実行している。押弦状態検出処理は、各弦のピッキングによるピッチ抽出とは別に並列処理として実行されている。
図３は、フレットの押弦状態を検出するためのフレット検出回路ＦＤＣを示す図である。フレット検出回路ＦＤＣは、フレットスキャン部ＦＳに備えられている。
図３に示すように、フレット検出回路ＦＤＣは、フレットの数に対応する２２の選択線ＫＩ０〜ＫＩ２１と、弦の数に対応する６の信号線ＫＣ０〜ＫＣ５とがマトリクス状に配列された構成を有している。
【００１４】
各信号線ＫＣ０〜ＫＣ５は、所定時間（例えば１ｍｓ）毎に順次アクティブな状態にスイッチングされる。選択線ＫＩ０〜ＫＩ２１は、ハイレベル（例えば５ｖ）にプルアップされている。アクティブな状態とされた信号線ＫＣ０〜ＫＣ５が、押弦によりフレット２３に接触されていると、そのフレット２３に対応する選択線ＫＩ０〜ＫＩ２１からはアクティブな状態の信号が読み出される。
即ち、押弦センサ４４は、所定時間毎に信号線ＫＣ０〜ＫＣ５を１つずつアクティブな状態に切り替え、選択線ＫＩ０〜ＫＩ２１の状態（ハイレベルまたはローレベル）を読み出して、すべてのフレット２３について、いずれの位置が押弦されているかを検出する。
【００１５】
そして、各弦における各フレットの検出結果（各選択線ＫＩ０〜ＫＩ２１においてローレベルを表す「１」またはハイレベルを表す「０」）は、各弦に対応する検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］（ただし、ｇｅｎは弦番号１〜６）に格納される。検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］は、２２ビットからなり、下位から上位のアドレスに、フレット番号の小さいフレットから順にフレットの検出結果が格納される。また、本実施形態においては、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］と同サイズで、前回の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］及び押弦状態検出処理のために一時的に用いられる一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐが用意されている。
【００１６】
これら検出結果の格納用レジスタＦｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］、前回の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐは、フレット検出回路ＦＤＣに備えることができる。ただし、メモリＭＥＭの記憶領域をこれらのレジスタとしての領域に割り当てる等、他の記憶領域を用いることとしてもよい。
【００１７】
図４は、ピッチ抽出回路ＰＣ及びマイコンＭＣＰの具体的な機能構成を示すブロック図である。ピッチ抽出は、主にピッチ抽出回路ＰＣ及びマイコンＭＣＰの以下に説明する機能によって実行される。
図４に示すように、ピッチ抽出回路ＰＣは、ローパスフィルタＬＰＦと、増幅回路ＡＭＣと、ゼロクロス点取込回路ＺＣＲと、絶対値取込回路ＡＢＳとを備えている。
ローパスフィルタＬＰＦには、ピッキングが行われることにより各弦において発生する波形の信号がヘキサピックアップから入力され、ローパスフィルタＬＰＦは、入力された信号の高周波成分をカットし、低周波成分のみを通過させる。
増幅回路ＡＭＣは、ローパスフィルタＬＰＦの出力信号を設定されたゲインに応じて増幅し、ゼロクロス点取込回路ＺＣＲ及び絶対値取込回路ＡＢＳに出力する。
【００１８】
ゼロクロス点取込回路ＺＣＲは、入力された波形の信号のゼロクロス点を検出し、ゼロクロス点より正側の場合にハイレベル信号、負側の場合にローレベル信号を出力する。なお、ゼロクロス点取込回路ＺＣＲの出力信号は、反転したもの（反転出力）と非反転のもの（非反転出力）との両方がマイコンＭＣＰに入力される。
絶対値取込回路ＡＢＳは、入力された波形の信号の正負両側におけるピーク値をそれぞれ検出し、ピーク値の絶対値及び符号をマイコンＭＣＰに入力する。
【００１９】
マイコンＭＣＰは、割込制御回路ＩＣと、タイマーＴＭＲと、アナログ−デジタル変換回路Ａ／Ｄと、メモリＭＥＭとを備えている。
割込制御回路ＩＣは、ゼロクロス点取込回路ＺＣＲの非反転出力及び反転出力が入力され、これらの立ち上がりエッジで割り込み信号を発生させる。即ち、割込制御回路ＩＣは、ピッキングによって各弦に発生した波形の信号がゼロクロスするタイミングで、割り込み信号を発生させる。割込制御回路ＩＣは、発生した割り込み信号をタイマーＴＭＲに出力する。
【００２０】
タイマーＴＭＲは、割込制御回路ＩＣから割り込み信号が入力されると、入力された時間ｔ（非反転出力による割り込み信号の場合）及び時間Ｔ（反転出力による割り込み信号の場合）をメモリＭＥＭに出力する。
アナログ−デジタル変換回路Ａ／Ｄは、絶対値取込回路ＡＢＳから入力されたピーク値の絶対値をデジタル信号に変換し、メモリＭＥＭに出力する。なお、アナログ−デジタル変換回路Ａ／Ｄは、ピーク値の絶対値と共に入力される符号をデジタル化されたピーク値と併せてメモリＭＥＭに出力する。
【００２１】
メモリＭＥＭは、タイマーＴＭＲから入力された時間ｔ，Ｔと、ピーク値の絶対値（デジタル値）及び符号を記憶する。メモリＭＥＭに記憶された時間ｔ，Ｔは、マイコンＭＣＰが前回記憶された時間ｔ，Ｔと今回記憶された時間ｔ，Ｔの差分を算出して周波数（発生させる楽音の音程であるピッチ）を求める際に用いられる。
また、メモリＭＥＭは、各弦のフレットと周波数との関係を示すフレット−周波数データテーブル（不図示）を記憶している。
【００２２】
フレット−周波数データテーブルでは、スケールＡ４を４４２Ｈｚとし、各弦がいずれの周波数に対応するか、また、フレット位置による音程のコード（キーコード）が関連付けて記憶されている。
また、メモリＭＥＭは、ピッチ抽出によって取得された周波数を音程データ（キーコード）に変換するための音程データ変換テーブル（不図示）を記憶している。
音程データ変換テーブルでは、ピッチ抽出によって得られた周波数が、ｃｅｎｔ比例した音程データ（キーコード）と対応付けて記憶されている。
【００２３】
マイコンＭＣＰは、メモリＭＥＭに記憶されたこれらのデータを参照ながら、ピッキングが行われた場合に、フレットスキャンの結果及びピッチ抽出の結果に応じて、音程を決定し、楽音を発生する。
具体的には、マイコンＭＣＰは、押弦状態検出処理を実行することにより、各弦について押弦状態の変化があるか否かを判定し、押弦状態の変化がある場合に、押弦されているフレットをブリッジ側から順に検出した上で、最初に検出されたフレットの位置に対応する音高で、弾弦された場合の暫定的な発音を行う。
【００２４】
次に、マイコンＭＣＰが楽音を発生する際の処理の概要について説明する。
図５は、マイコンＭＣＰが楽音を発生する際の処理の概要を示す模式図である。
図５において、ピッチ抽出回路ＰＣに図５（ｃ）に示す波形の信号が入力されたとすると、これに対するゼロクロス点取込回路ＺＣＲの非反転出力は、図５（ａ）に示す波形となり、反転出力は、図５（ｂ）に示す波形となる。
【００２５】
マイコンＭＣＰは、ピッチ抽出処理を実行する場合、設定された所定の波高値ＴＨＬＡＢより小さいものはノイズとみなして波形の信号を破棄する（ＳＴＥＰ０〜２）。一方、マイコンＭＣＰは、ＳＴＥＰ０において、所定の波高値ＴＨＬＡＢ以上となった場合、ＳＴＥＰ０の波高値ＶＥＬ０がＳＴＥＰ０における波高値のしきい値ＴＨ０以上となっている場合には、ピッチ抽出処理と並列的に実行しているフレットの押弦状態検出処理で検出された各フレットの情報から音程（音程の初期値）を検出し、ＳＴＥＰ０の波高値に基づいて、ＳＴＥＰ１において発音を開始する。具体的には、マイコンＭＣＰは、音量を定めるベロシティＶＥＬを（ＶＥＬ０＋ＶＥＬ１）／２として、ＳＴＥＰ１で発音を開始する。
【００２６】
この後、マイコンＭＣＰは、ＳＴＥＰ０〜２において、所定の波高値ＴＨＬＡＢ以上となっている場合、その波が新たに入力された初めてのものであるときに、波形のピーク値及び符号をベロシティＶＥＬ（具体的には波高値ＶＥＬ２）の値として取り込む（ＳＴＥＰ３）。そして、マイコンＭＣＰは、ピッチ抽出処理において検出したベロシティＶＥＬの値を基に、その音程の発音を行う（ノートオン）。発音が行われる場合、マイコンＭＣＰは、音源ＳＳに対して、音程及びベロシティＶＥＬの値を出力することにより、発音の指令を行う。
【００２７】
この後、ＳＴＥＰ４において、ピッチ抽出処理は継続され、マイコンＭＣＰは、前回記憶された時間ｔ，Ｔと今回記憶された時間ｔ，Ｔの差分から周波数（ピッチ）を算出し（ＴＰ（ｂ），ＴＰ（ｂ’））、この周波数によって、すでに発音している音程に対する補正を行う。
【００２８】
以下、マイコンＭＣＰの動作についてフローチャートや波形を示す図面を参照して説明する。
初めに、図面の符号について説明する。
ＡＤ・・・図２の瞬時値読込み信号ＲＤＡ１３〜１８によりピッチ抽出回路ＰＣの入力波形を直接読んだ入力波高値（瞬時値）
Ｔ・・・周期データ
ＴＨＬＡＢ・・・ＳＴＥＰ０，ＳＴＥＰ１におけるノイズ除去用しきい値
ＴＨ０・・・ＳＴＥＰ０における波高値判定用しきい値
ＴＨ１・・・ＳＴＥＰ１における波高値判定用しきい値
ＶＥＬ・・・速度（ベロシティー）を定める情報で、発音開始時の波形の最大ピーク値（波高値）にて定まる。
ＶＥＬ０・・・ＳＴＥＰ０におけるノイズ除去後の波高値（＝ａ０）
ＶＥＬ１・・・ＳＴＥＰ１におけるノイズ除去後の波高値（＝ｂ０）
ＶＥＬ２・・・ＳＴＥＰ２における波高値（＝ａ１）
【００２９】
ｂ・・・ワーキングレジスタＢに記憶されている今回正負フラグ（正ピークの次のゼロ点のとき１、負ピークの次のゼロ点のとき０）
ｃ・・・ワーキングレジスタＣに記憶されている今回波高値（ピーク値）
ｅ・・・ワーキングレジスタＥに記憶されている前々回波高値（ピーク値）
ｈ・・・ワーキングレジスタＨに記憶されている前々回抽出された周期データ
ｔ・・・ワーキングレジスタＴｒに記憶されている今回のゼロクロス時刻
【００３０】
また、マイコンＭＣＰの動作において、以下の各種レジスタが用いられる。
ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］・・・各弦に対応する押弦状態の検出結果の格納用レジスタ
ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］・・・前回の押弦状態の検出結果の格納用レジスタ
ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ・・・押弦状態検出処理のために一時的に用いられる一時格納用レジスタ
ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ・・・現在の音程コードを一時的に格納するためのレジスタ
ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｈｉｇｈ［ｇｅｎ］・・・各弦の２２フレット位置の音程コードを格納するためのレジスタ
ｆｒｅｔ＿ｓｃ［ｇｅｎ］・・・各弦の暫定的な発音用の音程コードを格納するためのレジスタ
ｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］・・・各弦の開放弦の場合の音程コードを格納するためのレジスタ
【００３１】
図６は、マイコンＭＣＰが実行する押弦状態検出処理の流れを示すフローチャートである。
本実施形態において、マイコンＭＣＰは、各信号線ＫＣ０〜ＫＣ５の１つにアクティブな状態の信号（ここではローレベルの信号）を印加し、選択線ＫＩ０〜ＫＩ２１それぞれの信号レベルを読み出すことができる。このとき、押弦されている弦に対応する信号線では、信号レベルがローレベルとなり、押弦されていない弦に対応する信号線では、信号レベルがハイレベルとなる。以下に説明する押弦状態検出処理においては、選択線ＫＩ０〜ＫＩ２１に対応する検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に、信号線の信号レベルがローレベルの場合、「１」が格納され、信号線の信号レベルがハイレベルの場合、「０」が格納される。なお、以下に説明する押弦状態検出処理は、１つの弦についての処理を示しており、電子ギター１においては、以下のような処理が各弦について実行される。
【００３２】
押弦状態検出処理は、電子ギター１の電源投入と共に開始され、繰り返し実行される。
ステップＳ１において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに、レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に格納された今回の押弦状態の検出結果（即ち、選択線ＫＩ０〜ＫＩ２１それぞれの最新の信号レベルを示すデータ）をセットする。
ステップＳ２において、マイコンＭＣＰは、前回の押弦状態と今回の押弦状態とに変化があるか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］≠ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］であるか否か）の判定を行う。
【００３３】
ステップＳ２において、前回の押弦状態と今回の押弦状態とに変化がある（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３の処理に移行する。
一方、ステップＳ２において、前回の押弦状態と今回の押弦状態とに変化がない（ＮＯ）と判定した場合、マイコンＭＣＰは、押弦状態検出処理を終了する。
ステップＳ３において、マイコンＭＣＰは、今回の押弦状態において、いずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］≠０であるか否か）の判定を行う。
【００３４】
ステップＳ３において、今回の押弦状態でいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ４の処理に移行する。
一方、ステップＳ３において、今回の押弦状態でいずれのフレットも押されていない（ＮＯ）と判定された場合、マイコンＭＣＰは、ステップＳ１０の処理に移行する。
ステップＳ４において、マイコンＭＣＰは、音程コードを２２フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｈｉｇｈ［ｇｅｎ］）。
【００３５】
ステップＳ５において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐのＭＳＢ≠０であるか否か）の判定を行う。即ち、ステップＳ５では、ループが回る毎に、フレットにおける押弦の有無がブリッジ側から順に判定される。
ステップＳ５において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ８の処理に移行する。
一方、ステップＳ５において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ６の処理に移行する。
【００３６】
ステップＳ６において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ７において、マイコンＭＣＰは、現在の音程コードを一時的に格納するためのレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ７の後、マイコンＭＣＰは、ステップＳ５の処理に移行する。
【００３７】
ステップＳ８において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］にレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐに格納された音程コードをセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ）。
ステップＳ９において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ９の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００３８】
ステップＳ１０において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ［ｇｅｎ］に各弦の開放弦の場合の音程コードを格納するためのレジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］）。
ステップＳ１１において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ１１の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００３９】
以上のような処理により、本実施形態に係る電子ギター１では、各弦について、いずれかのフレットが押されているか否かが初めに判定され、いずれかのフレットが押されている場合に、ブリッジ側のフレットから順に、押弦状態の判定が行われる。そして、押弦されていることが最初に判定されたフレットの位置に対応する音高で、弾弦された場合の暫定的な音高が決定される。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【００４０】
［第２実施形態］
次に、本発明の第２実施形態について説明する。
本実施形態に係る電子ギター１では、２２個のフレットが複数のグループ（フレット群）に分けられており、各弦について、それぞれのグループ毎に押弦状態が検出される。
そのため、電子ギター１の構成は第１実施形態と同様であると共に、押弦状態検出処理の内容が第１実施形態の場合と異なっている。
したがって、以下、第１実施形態と異なる部分である押弦状態検出処理について主として説明する。
なお、以下の説明においては、２２個のフレットが３つのグループに分けられている場合を例として説明する。ただし、グループの数は、３つ未満あるいは４つ以上とすることも可能である。
【００４１】
図７〜９は、第２実施形態における押弦状態検出処理の流れを示すフローチャートである。
本実施形態における２２個のフレットは、フレット番号１６〜２２のフレット群ＦＧＡ、フレット番号９〜１５のフレット群ＦＧＢ、フレット番号１〜１４のフレット群ＦＧＣに分割されている。なお、図１０は、フレット群ＦＧＡ〜ＦＧＣと、セーハが行われた場合に押弦状態を検出するフレットの範囲との関係を示す模式図である。
ステップＳ１０１において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに、レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に格納された今回の押弦状態の検出結果（即ち、選択線ＫＩ０〜ＫＩ２１それぞれの最新の信号レベルを示すデータ）をセットする。
【００４２】
ステップＳ１０２において、マイコンＭＣＰは、前回の押弦状態と今回の押弦状態とに変化があるか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］≠ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］であるか否か）の判定を行う。
ステップＳ１０２において、前回の押弦状態と今回の押弦状態とに変化がある（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１０３の処理に移行する。
一方、ステップＳ１０２において、前回の押弦状態と今回の押弦状態とに変化がない（ＮＯ）と判定した場合、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００４３】
ステップＳ１０３において、マイコンＭＣＰは、今回の押弦状態でフレット群ＦＧＡのいずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０Ｘ３Ｆ８０００）≠０であるか否か）の判定を行う。なお、「０Ｘ３Ｆ８０００」は、１６進数の「３Ｆ８０００」を意味しており、２進数の「１１１１１１１０００００００００００００００」を意味している。ステップＳ１０３の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ３Ｆ８０００」が乗算されることで、フレット群ＦＧＡのデータが抽出される。
【００４４】
ステップＳ１０３において、今回の押弦状態でフレット群ＦＧＡのいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１０４の処理に移行する。
一方、ステップＳ１０３において、今回の押弦状態でフレット群ＦＧＡのいずれのフレットも押されていない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ１１０の処理に移行する。
ステップＳ１０４において、マイコンＭＣＰは、音程コードを２２フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｈｉｇｈ［ｇｅｎ］）。
【００４５】
ステップＳ１０５において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ＆０Ｘ２０００００≠０であるか否か）の判定を行う。なお、「０Ｘ２０００００」は、１６進数の「２０００００」を意味しており、２進数の「１０００００００００００００００００００００」を意味している。ステップＳ１０５の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ２０００００」が乗算されることで、フレット群ＦＧＡに対応する桁のデータのうち、最上位のデータが抽出される。
ステップＳ１０５において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１０８の処理に移行する。
一方、ステップＳ１０５において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ１０６の処理に移行する。
【００４６】
ステップＳ１０６において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ１０７において、マイコンＭＣＰは、現在の音程コードを一時的に格納するためのレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ１０７の処理の後、マイコンＭＣＰは、ステップＳ１０５の処理に移行する。
【００４７】
ステップＳ１０８において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］にレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐに格納された音程コードをセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ）。
ステップＳ１０９において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ１０９の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００４８】
ステップＳ１１０において、マイコンＭＣＰは、今回の押弦状態でフレット群ＦＧＢのいずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０Ｘ７Ｆ００）≠０であるか否か）の判定を行う。なお、「０Ｘ７Ｆ００」は、１６進数の「７Ｆ００」を意味しており、２進数の「１１１１１１１００００００００」を意味している。ステップＳ１１０の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ７Ｆ００」が乗算されることで、フレット群ＦＧＢのデータが抽出される。
ステップＳ１１０において、今回の押弦状態でフレット群ＦＧＢのいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１１１の処理に移行する。
一方、ステップＳ１１０において、今回の押弦状態でフレット群ＦＧＢのいずれのフレットも押されていない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ１１７の処理に移行する。
【００４９】
ステップＳ１１１において、マイコンＭＣＰは、音程コードを１５フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｍｉｄ［ｇｅｎ］）。なお、レジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｍｉｄ［ｇｅｎ］は、各弦の１５フレット位置の音程コードを格納するためのレジスタである。
ステップＳ１１２において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐにおけるフレット群ＦＧＢに対応する桁の最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ＆０Ｘ４０００≠０であるか否か）の判定を行う。なお、「０Ｘ４０００」は、１６進数の「４０００」を意味しており、２進数の「１００００００００００００００」を意味している。ステップＳ１１２の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ４０００」が乗算されることで、フレット群ＦＧＢに対応する桁のデータのうち、最上位のデータが抽出される。
【００５０】
ステップＳ１１２において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐにおけるフレット群ＦＧＢに対応する桁の最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１１５の処理に移行する。
一方、ステップＳ１１２において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐにおけるフレット群ＦＧＢに対応する桁の最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ１１３の処理に移行する。
【００５１】
ステップＳ１１３において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ１１４において、マイコンＭＣＰは、現在の音程コードを一時的に格納するためのレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ１１４の処理の後、マイコンＭＣＰは、ステップＳ１１２の処理に移行する。
【００５２】
ステップＳ１１５において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］にレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐに格納された音程コードをセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ）。
ステップＳ１１６において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ１１６の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００５３】
ステップＳ１１７において、マイコンＭＣＰは、今回の押弦状態でフレット群ＦＧＣのいずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０ＸＦＦ）≠０であるか否か）の判定を行う。なお、「０ＸＦＦ」は、１６進数の「ＦＦ」を意味しており、２進数の「１１１１１１１１」を意味している。ステップＳ１１７の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０ＸＦＦ」が乗算されることで、フレット群ＦＧＣのデータが抽出される。
【００５４】
ステップＳ１１７において、今回の押弦状態でフレット群ＦＧＣのいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１１８の処理に移行する。
一方、ステップＳ１１７において、今回の押弦状態でフレット群ＦＧＣのいずれのフレットも押されていない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ１２４の処理に移行する。
ステップＳ１１８において、マイコンＭＣＰは、音程コードを８フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｌｏｗ［ｇｅｎ］）。なお、レジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｌｏｗ［ｇｅｎ］は、各弦の８フレット位置の音程コードを格納するためのレジスタである。
【００５５】
ステップＳ１１９において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐにおけるフレット群ＦＧＣに対応する桁の最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ＆０Ｘ８０≠０であるか否か）の判定を行う。なお、「０Ｘ８０」は、１６進数の「８０」を意味しており、２進数の「１０００００００」を意味している。ステップＳ１１９の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ８０」が乗算されることで、フレット群ＦＧＣに対応する桁のデータのうち、最上位のデータが抽出される。
【００５６】
ステップＳ１１９において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐにおけるフレット群ＦＧＣに対応する桁の最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ１２２の処理に移行する。
一方、ステップＳ１１９において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐにおけるフレット群ＦＧＣに対応する桁の最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ１２０の処理に移行する。
【００５７】
ステップＳ１２０において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ１２１において、マイコンＭＣＰは、現在の音程コードを一時的に格納するためのレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ１２１の処理の後、マイコンＭＣＰは、ステップＳ１１９の処理に移行する。
【００５８】
ステップＳ１２２において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］にレジスタｆｒｅｔ＿ｓｃ＿ｔｅｍｐに格納された音程コードをセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ）。
ステップＳ１２３において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ１２３の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００５９】
ステップＳ１２４において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ［ｇｅｎ］に各弦の開放弦の場合の音程コードを格納するためのレジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］）。
ステップＳ１２５において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ１２５の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００６０】
以上のような処理により、本実施形態に係る電子ギター１では、各弦の各フレット群について、いずれかのフレットが押されているか否かが初めに判定され、いずれかのフレットが押されている場合に、ブリッジ側のフレット群から、さらに、ブリッジ側のフレットから順に、押弦状態の判定が行われる。そして、押弦されていることが最初に判定されたフレットの位置に対応する音高で、弾弦された場合の暫定的な音高が決定される。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【００６１】
［第３実施形態］
次に、本発明の第３実施形態について説明する。
本実施形態に係る電子ギター１では、２２個のフレットは１つのグループとして取り扱われ、各弦について、押弦状態が検出される。そして、所定のフレット数以内の範囲において、１つの弦について複数の位置で押弦されていることが検出された場合、最初に押弦が検出された弦の位置と最後に押弦が検出された弦の位置との中間位置に対応する音程コードが暫定的な音高とされる。
そのため、電子ギター１の構成は第１実施形態と同様であると共に、押弦状態検出処理の内容が第１実施形態の場合と異なっている。
したがって、以下、第１実施形態と異なる部分である押弦状態検出処理について主として説明する。
【００６２】
図１１は、第３実施形態における押弦状態検出処理の流れを示すフローチャートである。
ステップＳ２０１において、マイコンＭＣＰは、レジスタｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃにゼロをセットし、レジスタｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔにＮをセットし、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに、レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に格納された今回の押弦状態の検出結果（即ち、選択線ＫＩ０〜ＫＩ２１それぞれの最新の信号レベルを示すデータ）をセットする。なお、Ｎはセーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数であり、例えば、演奏者の手の大きさを考慮して、５または６等を採用することができる。また、レジスタｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃは、最初に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタであり、レジスタｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔは、セーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数を格納するためのレジスタである。
【００６３】
ステップＳ２０２において、マイコンＭＣＰは、前回の押弦状態と今回の押弦状態とに変化があるか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］≠ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］であるか否か）の判定を行う。
ステップＳ２０２において、前回の押弦状態と今回の押弦状態とに変化がある（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２０３の処理に移行する。
一方、前回の押弦状態と今回の押弦状態とに変化がない（ＮＯ）と判定した場合、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００６４】
ステップＳ２０３において、マイコンＭＣＰは、今回の押弦状態において、いずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］≠０であるか否か）の判定を行う。
ステップＳ２０３において、今回の押弦状態でいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２０４の処理に移行する。
一方、ステップＳ２０３において、今回の押弦状態でいずれのフレットも押されていない（ＮＯ）と判定された場合、マイコンＭＣＰは、ステップＳ２２１の処理に移行する。
【００６５】
ステップＳ２０４において、マイコンＭＣＰは、音程コードを２２フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｈｉｇｈ［ｇｅｎ］）。
ステップＳ２０５において、マイコンＭＣＰは、２２フレット分のカウンタｆｒｅｔ＿ｉに２２をセットする（ｆｒｅｔ＿ｉ＝２２）。
【００６６】
ステップＳ２０６において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉがゼロでないか否か（ｆｒｅｔ＿ｉ≠０）の判定を行う。
ステップＳ２０６において、カウンタｆｒｅｔ＿ｉがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２０７の処理に移行する。
一方、ステップＳ２０６において、カウンタｆｒｅｔ＿ｉがゼロである（ＮＯ）と判定した場合、２２フレット全ての押弦状態を検出したものとして、マイコンＭＣＰは、ステップＳ２１９の処理に移行する。
【００６７】
ステップＳ２０７において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐがゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ≠０であるか否か）の判定を行う。
ステップＳ２０７において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２０８の処理に移行する。
一方、ステップＳ２０７において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐがゼロである（ＮＯ）と判定した場合、全ての押弦フレットを検出したものとして、マイコンＭＣＰは、ステップＳ２１９の処理に移行する。
【００６８】
ステップＳ２０８において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでないか否か（ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔ≠０であるか否か）の判定を行う。
ステップＳ２０８において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２０９の処理に移行する。
一方、ステップＳ２０８において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロである（ＮＯ）と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎを全て検出したものとして、マイコンＭＣＰは、ステップＳ２１９の処理に移行する。
【００６９】
ステップＳ２０９において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐのＭＳＢ≠０であるか否か）の判定を行う。
ステップＳ２０９において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２１０の処理に移行する。
一方、ステップＳ２０９において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ２１４の処理に移行する。
【００７０】
ステップＳ２１０において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ２１０において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２１１の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップＳ２１０において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ２１３の処理に移行する。
【００７１】
ステップＳ２１１において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
ステップＳ２１２において、マイコンＭＣＰは、レジスタｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの次のフレット位置（ヘッド側に隣接するフレット位置）の音高のデータをセットする。なお、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップＳ２１３において、マイコンＭＣＰは、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
【００７２】
ステップＳ２１４において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ２１４において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ２１５の処理に移行する。
一方、ステップＳ２１４において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ２１６の処理に移行する。
ステップＳ２１５において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔの値を「１」減算する。
【００７３】
ステップＳ２１６において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ２１７において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ２１８において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉの値を「１」減算する。
ステップＳ２１８の後、マイコンＭＣＰは、ステップＳ２０６の処理に移行する。
【００７４】
ステップＳ２１９において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］に、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの音高とｌａｓｔ＿ｆｏｕｎｄ＿ｓｃの音高との中間の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ＋ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃ）／２）。
ステップＳ２２０において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ２２０の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００７５】
ステップＳ２２１において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ［ｇｅｎ］に各弦の開放弦の場合の音程コードを格納するためのレジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］）。
ステップＳ２２２において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ２２２の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００７６】
以上のような処理により、本実施形態に係る電子ギター１では、各弦について、いずれかのフレットが押されているか否かが初めに判定される。そして、ブリッジ側のフレットから順に、押弦状態の判定が行われ、所定のフレット数以内の範囲において、１つの弦について複数の位置で押弦されていることが検出された場合、最初に押弦が検出された弦の位置と最後に押弦が検出された弦の位置との中間位置に対応する音程コードが暫定的な音高とされる。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【００７７】
［第４実施形態］
次に、本発明の第４実施形態について説明する。
本実施形態に係る電子ギター１では、第２実施形態と同様に、２２個のフレットが複数のグループ（フレット群）に分けられており、各弦について、それぞれのグループ毎に押弦状態が検出される。
そのため、電子ギター１の構成は第１実施形態と同様であると共に、押弦状態検出処理の内容が第１実施形態の場合と異なっている。
したがって、以下、第１実施形態と異なる部分である押弦状態検出処理について主として説明する。
なお、以下の説明においては、２２個のフレットが３つのグループに分けられている場合を例として説明する。ただし、グループの数は、３つ未満あるいは４つ以上とすることも可能である。
【００７８】
図１２〜１４は、第４実施形態における押弦状態検出処理の流れを示すフローチャートである。
本実施形態における２２個のフレットは、フレット番号１６〜２２のフレット群ＦＧＡ、フレット番号９〜１５のフレット群ＦＧＢ、フレット番号１〜１４のフレット群ＦＧＣに分割されている。
【００７９】
ステップＳ３０１において、マイコンＭＣＰは、レジスタｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃにゼロをセットし、レジスタｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔにＮをセットし、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに、レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に格納された今回の押弦状態の検出結果（即ち、選択線ＫＩ０〜ＫＩ２１それぞれの最新の信号レベルを示すデータ）をセットする。なお、Ｎはセーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数であり、例えば、演奏者の手の大きさを考慮して、５または６等を採用することができる。また、レジスタｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃは、最初に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタであり、レジスタｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔは、セーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数を格納するためのレジスタである。
ステップＳ３０２において、マイコンＭＣＰは、前回の押弦状態と今回の押弦状態とに変化があるか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］≠ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］であるか否か）の判定を行う。
ステップＳ３０２において、前回の押弦状態と今回の押弦状態とに変化がある（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３０３の処理に移行する。
一方、ステップＳ３０２において、前回の押弦状態と今回の押弦状態とに変化がない（ＮＯ）と判定した場合、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００８０】
ステップＳ３０３において、マイコンＭＣＰは、今回の押弦状態でフレット群ＦＧＡのいずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０Ｘ３Ｆ８０００）≠０であるか否か）の判定を行う。なお、「０Ｘ３Ｆ８０００」は、１６進数の「３Ｆ８０００」を意味しており、２進数の「１１１１１１１０００００００００００００００」を意味している。ステップＳ３０３の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ３Ｆ８０００」が乗算されることで、フレット群ＦＧＡのデータが抽出される。
ステップＳ３０３において、今回の押弦状態でフレット群ＦＧＡのいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３０４の処理に移行する。
一方、ステップＳ３０３において、今回の押弦状態でフレット群ＦＧＡのいずれのフレットも押されていない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３２１の処理に移行する。
【００８１】
ステップＳ３０４において、マイコンＭＣＰは、音程コードを２２フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｈｉｇｈ［ｇｅｎ］）。
ステップＳ３０５において、マイコンＭＣＰは、２２フレット分のカウンタｆｒｅｔ＿ｉに「２２」をセットする（ｆｒｅｔ＿ｉ＝２２）。
ステップＳ３０６において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉが「１１」でないか否か（ｆｒｅｔ＿ｉ≠１１）の判定を行う。
ステップＳ３０６において、カウンタｆｒｅｔ＿ｉが「１１」でない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３０７の処理に移行する。
一方、ステップＳ３０６において、カウンタｆｒｅｔ＿ｉが「１１」である（ＮＯ）と判定した場合、２２フレットから１２フレットまでの押弦状態を検出したものとして、マイコンＭＣＰは、ステップＳ３１９の処理に移行する。
【００８２】
ステップＳ３０７において、マイコンＭＣＰは、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎ（ここでは５フレットとする）を含め、フレット群ＦＧＡについて押弦フレットを全て検出したか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０Ｘ３ＦＦ８００）≠０であるか否か）の判定を行う。なお、「０Ｘ３ＦＦ８００」は、１６進数の「３ＦＦ８００」を意味しており、２進数の「１１１１１１１１１１１０００００００００００」を意味している。ステップＳ３０７の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ３ＦＦ８００」が乗算されることで、フレット群ＦＧＡに加え、セーハが行われた場合に押弦状態を検出するフレットの範囲を含むデータが抽出される。
【００８３】
図１５は、フレット群ＦＧＡ〜ＦＧＣと、セーハが行われた場合に押弦状態を検出するフレットの範囲との関係を示す模式図である。
図１５に示すように、フレット群ＦＧＡ（２２フレット〜１６フレット）においてセーハが行われた場合、セーハが行われた場合に押弦状態を検出するフレットの範囲は、２２フレット〜１２フレットとなる。また、フレット群ＦＧＢ（１５フレット〜９フレット）においてセーハが行われた場合、セーハが行われた場合に押弦状態を検出するフレットの範囲は、１５フレット〜５フレットとなる。なお、最もヘッド側のフレット群ＦＧＣ（８フレット〜１フレット）においてセーハが行われた場合、セーハが行われた場合に押弦状態を検出するフレットの範囲も８フレット〜１フレットと変化しない。
【００８４】
図１１に戻り、ステップＳ３０７において、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群ＦＧＡについて押弦フレットを全て検出した（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３０８の処理に移行する。
一方、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群ＦＧＡについて押弦フレットを全て検出していない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３１９の処理に移行する。
ステップＳ３０８において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでないか否か（ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔ≠０であるか否か）の判定を行う。
ステップＳ３０８において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３０９の処理に移行する。
一方、ステップＳ３０８において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロである（ＮＯ）と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎを全て検出したものとして、マイコンＭＣＰは、ステップＳ３１９の処理に移行する。
【００８５】
ステップＳ３０９において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ＆０Ｘ２０００００≠０であるか否か）の判定を行う。なお、「０Ｘ２０００００」は、１６進数の「２０００００」を意味しており、２進数の「１０００００００００００００００００００００」を意味している。ステップＳ３０９の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ２０００００」が乗算されることで、フレット群ＦＧＡに対応する桁のデータのうち、最上位のデータが抽出される。
ステップＳ３０９において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３１０の処理に移行する。
一方、ステップＳ３０９において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３１４の処理に移行する。
【００８６】
ステップＳ３１０において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ３１０において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３１１の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップＳ３１０において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３１３の処理に移行する。
【００８７】
ステップＳ３１１において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
ステップＳ３１２において、マイコンＭＣＰは、レジスタｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの次のフレット位置（ヘッド側に隣接するフレット位置）の音高のデータをセットする。なお、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップＳ３１３において、マイコンＭＣＰは、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
【００８８】
ステップＳ３１４において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ３１４において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３１５の処理に移行する。
一方、ステップＳ３１４において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３１６の処理に移行する。
ステップＳ３１５において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔの値を「１」減算する。
【００８９】
ステップＳ３１６において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ３１７において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ３１８において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉの値を「１」減算する。
ステップＳ３１８の後、マイコンＭＣＰは、ステップＳ３０６の処理に移行する。
【００９０】
ステップＳ３１９において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］に、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの音高とｌａｓｔ＿ｆｏｕｎｄ＿ｓｃの音高との中間の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ＋ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃ）／２）。
ステップＳ３２０において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ３２０の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【００９１】
ステップＳ３２１において、マイコンＭＣＰは、今回の押弦状態でフレット群ＦＧＢのいずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０Ｘ７Ｆ００）≠０であるか否か）の判定を行う。なお、「０Ｘ７Ｆ００」は、１６進数の「７Ｆ００」を意味しており、２進数の「１１１１１１１００００００００」を意味している。ステップＳ３２１の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ７Ｆ００」が乗算されることで、フレット群ＦＧＢのデータが抽出される。
ステップＳ３２１において、今回の押弦状態でフレット群ＦＧＢのいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３２２の処理に移行する。
一方、ステップＳ３２１において、今回の押弦状態でフレット群ＦＧＢのいずれのフレットも押されていない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３３９の処理に移行する。
【００９２】
ステップＳ３２２において、マイコンＭＣＰは、音程コードを１５フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｍｉｄ［ｇｅｎ］）。なお、レジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｍｉｄ［ｇｅｎ］は、各弦の１５フレット位置の音程コードを格納するためのレジスタである。
【００９３】
ステップＳ３２３において、マイコンＭＣＰは、２２フレット分のカウンタｆｒｅｔ＿ｉに「１５」をセットする（ｆｒｅｔ＿ｉ＝１５）。
ステップＳ３２４において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉが「４」でないか否か（ｆｒｅｔ＿ｉ≠４）の判定を行う。
ステップＳ３２４において、カウンタｆｒｅｔ＿ｉが「４」でない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３２５の処理に移行する。
一方、ステップＳ３２４において、カウンタｆｒｅｔ＿ｉが「４」である（ＮＯ）と判定した場合、１５フレットから５フレットまでの押弦状態を検出したものとして、マイコンＭＣＰは、ステップＳ３３７の処理に移行する。
【００９４】
ステップＳ３２５において、マイコンＭＣＰは、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎ（ここでは５フレットとする）を含め、フレット群ＦＧＢについて押弦フレットを全て検出したか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０Ｘ７ＦＦ０）≠０であるか否か）の判定を行う。なお、「０Ｘ７ＦＦ０」は、１６進数の「７ＦＦ０」を意味しており、２進数の「１１１１１１１１００００」を意味している。ステップＳ３２５の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ７ＦＦ０」が乗算されることで、フレット群ＦＧＢに加え、セーハが行われた場合に押弦状態を検出するフレットの範囲を含むデータが抽出される（図１４参照）。
【００９５】
ステップＳ３２５において、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群ＦＧＢについて押弦フレットを全て検出した（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３２６の処理に移行する。
一方、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群ＦＧＢについて押弦フレットを全て検出していない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３３７の処理に移行する。
【００９６】
ステップＳ３２６において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでないか否か（ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔ≠０であるか否か）の判定を行う。
ステップＳ３２６において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３２７の処理に移行する。
一方、ステップＳ３２６において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロである（ＮＯ）と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎを全て検出したものとして、マイコンＭＣＰは、ステップＳ３３７の処理に移行する。
【００９７】
ステップＳ３２７において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ＆０Ｘ４０００≠０であるか否か）の判定を行う。なお、「０Ｘ４０００」は、１６進数の「４０００」を意味しており、２進数の「１００００００００００００００」を意味している。ステップＳ３２７の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ４０００」が乗算されることで、フレット群ＦＧＢに対応する桁のデータのうち、最上位のデータが抽出される。
ステップＳ３２７において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３２８の処理に移行する。
一方、ステップＳ３２７において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３３２の処理に移行する。
【００９８】
ステップＳ３２８において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ３２８において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３２９の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップＳ３２８において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３３１の処理に移行する。
【００９９】
ステップＳ３２９において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
ステップＳ３３０において、マイコンＭＣＰは、レジスタｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの次のフレット位置（ヘッド側に隣接するフレット位置）の音高のデータをセットする。なお、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップＳ３３１において、マイコンＭＣＰは、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
【０１００】
ステップＳ３３２において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ３３２において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３３３の処理に移行する。
一方、ステップＳ３３２において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３３４の処理に移行する。
ステップＳ３３３において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔの値を「１」減算する。
【０１０１】
ステップＳ３３４において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ３３５において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ３３６において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉの値を「１」減算する。
ステップＳ３３６の後、マイコンＭＣＰは、ステップＳ３２４の処理に移行する。
【０１０２】
ステップＳ３３７において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］に、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの音高とｌａｓｔ＿ｆｏｕｎｄ＿ｓｃの音高との中間の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ＋ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃ）／２）。
ステップＳ３３８において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ３３８の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【０１０３】
ステップＳ３３９において、マイコンＭＣＰは、今回の押弦状態でフレット群ＦＧＣのいずれかのフレットが押されているか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０ＸＦＦ）≠０であるか否か）の判定を行う。なお、「０ＸＦＦ」は、１６進数の「ＦＦ」を意味しており、２進数の「１１１１１１１１」を意味している。ステップＳ１１７の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０ＸＦＦ」が乗算されることで、フレット群ＦＧＣのデータが抽出される。
ステップＳ３３９において、今回の押弦状態でフレット群ＦＧＣのいずれかのフレットが押されている（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３４０の処理に移行する。
一方、ステップＳ３３９において、今回の押弦状態でフレット群ＦＧＣのいずれのフレットも押されていない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３５７の処理に移行する。
【０１０４】
ステップＳ３４０において、マイコンＭＣＰは、音程コードを８フレットの位置の音程コードにセットする（ｆｒｅｔ＿ｓｃ＿ｔｅｍｐ＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｌｏｗ［ｇｅｎ］）。なお、レジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｓｃ＿ｌｏｗ［ｇｅｎ］は、各弦の８フレット位置の音程コードを格納するためのレジスタである。
ステップＳ３４１において、マイコンＭＣＰは、２２フレット分のカウンタｆｒｅｔ＿ｉに「８」をセットする（ｆｒｅｔ＿ｉ＝８）。
ステップＳ３４２において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉが「０」でないか否か（ｆｒｅｔ＿ｉ≠０）の判定を行う。
ステップＳ３４２において、カウンタｆｒｅｔ＿ｉが「０」でない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３４３の処理に移行する。
一方、ステップＳ３４２において、カウンタｆｒｅｔ＿ｉが「０」である（ＮＯ）と判定した場合、８フレットから１フレットまでの押弦状態を検出したものとして、マイコンＭＣＰは、ステップＳ３５５の処理に移行する。
【０１０５】
ステップＳ３４３において、マイコンＭＣＰは、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎ（ここでは５フレットとする）を含め、フレット群ＦＧＣについて押弦フレットを全て検出したか否か（ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］＆（０ＸＦＦ）≠０であるか否か）の判定を行う。なお、「０ＸＦＦ」は、１６進数の「ＦＦ」を意味しており、２進数の「１１１１１１１１」を意味している。ステップＳ３４３の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０ＸＦＦ」が乗算されることで、フレット群ＦＧＣに加え、セーハが行われた場合に押弦状態を検出するフレットの範囲を含むデータが抽出される（図１４参照）。ただし、本実施形態では、フレット群ＦＧＣについては、セーハが行われた場合に押弦状態を検出するフレットの範囲は設定されていない。
ステップＳ３４３において、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群ＦＧＣについて押弦フレットを全て検出した（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３４４の処理に移行する。
一方、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群ＦＧＣについて押弦フレットを全て検出していない（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３５５の処理に移行する。
【０１０６】
ステップＳ３４４において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでないか否か（ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔ≠０であるか否か）の判定を行う。
ステップＳ３４４において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３４５の処理に移行する。
一方、ステップＳ３４４において、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔがゼロである（ＮＯ）と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Ｎを全て検出したものとして、マイコンＭＣＰは、ステップＳ３５５の処理に移行する。
【０１０７】
ステップＳ３４５において、マイコンＭＣＰは、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでないか否か（ｆｒｅｔ＿ｉｎ＿ｔｅｍｐ＆０Ｘ８０≠０であるか否か）の判定を行う。なお、「０Ｘ８０」は、１６進数の「８０」を意味しており、２進数の「１０００００００」を意味している。ステップＳ３４５の処理では、ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］に「０Ｘ８０」が乗算されることで、フレット群ＦＧＣに対応する桁のデータのうち、最上位のデータが抽出される。
ステップＳ３４５において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３４６の処理に移行する。
一方、ステップＳ３４５において、ｆｒｅｔ＿ｉｎ＿ｔｅｍｐの最上位桁の数値がゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３５０の処理に移行する。
【０１０８】
ステップＳ３４６において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ３４６において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３４７の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップＳ３４６において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３４９の処理に移行する。
【０１０９】
ステップＳ３４７において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
ステップＳ３４８において、マイコンＭＣＰは、レジスタｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの次のフレット位置（ヘッド側に隣接するフレット位置）の音高のデータをセットする。なお、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップＳ３４９において、マイコンＭＣＰは、ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃにｆｒｅｔ＿ｓｃ＿ｔｅｍｐの音高のデータをセットする。
【０１１０】
ステップＳ３５０において、マイコンＭＣＰは、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでないか否か（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ≠０であるか否か）の判定を行う。
ステップＳ３５０において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロでない（ＹＥＳ）と判定した場合、マイコンＭＣＰは、ステップＳ３５１の処理に移行する。
一方、ステップＳ３５０において、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃがゼロである（ＮＯ）と判定した場合、マイコンＭＣＰは、ステップＳ３５２の処理に移行する。
ステップＳ３５１において、マイコンＭＣＰは、ｎｕｍｂｅｒ＿ｏｆ＿ｃｈｅｃｋ＿ｆｒｅｔの値を「１」減算する。
【０１１１】
ステップＳ３５２において、マイコンＭＣＰは、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐに格納されているデータを左に１ビットシフトする。即ち、一時格納用レジスタｆｒｅｔ＿ｉｎ＿ｔｅｍｐのデータが、次のフレットを判定するために１ビットシフトされる。
ステップＳ３５３において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ＿ｔｅｍｐのデータを１フレット分ヘッド側のフレットの音程コードに更新する。
ステップＳ３５４において、マイコンＭＣＰは、カウンタｆｒｅｔ＿ｉの値を「１」減算する。
ステップＳ３５４の後、マイコンＭＣＰは、ステップＳ３４２の処理に移行する。
【０１１２】
ステップＳ３５５において、マイコンＭＣＰは、各弦の暫定的な発音用の音程コードを格納するためのレジスタｆｒｅｔ＿ｓｃ［ｇｅｎ］に、ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃの音高とｌａｓｔ＿ｆｏｕｎｄ＿ｓｃの音高との中間の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ＋ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃ）／２）。
ステップＳ３５６において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ３５６の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【０１１３】
ステップＳ３５７において、マイコンＭＣＰは、ｆｒｅｔ＿ｓｃ［ｇｅｎ］に各弦の開放弦の場合の音程コードを格納するためのレジスタｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝ｃｏｎｓｔ＿ｆｒｅｔ＿ｋａｉｈｏ［ｇｅｎ］）。
ステップＳ３５８において、マイコンＭＣＰは、前回の押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］に各弦に対応する押弦状態の検出結果の格納用レジスタｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］の値をセットする（ｆｒｅｔ＿ｉｎ＿ｏｌｄ［ｇｅｎ］＝ｆｒｅｔ＿ｉｎ＿ｎｅｗ［ｇｅｎ］）。
ステップＳ３５８の後、マイコンＭＣＰは、押弦状態検出処理を終了する。
【０１１４】
以上のような処理により、本実施形態に係る電子ギター１では、各弦の各フレット群について、いずれかのフレットが押されているか否かが初めに判定される。そして、ブリッジ側のフレット群から、さらに、ブリッジ側のフレットから順に、押弦状態の判定が行われ、所定のフレット数以内の範囲において、１つの弦について複数の位置で押弦されていることが検出された場合、最初に押弦が検出された弦の位置と最後に押弦が検出された弦の位置との中間位置に対応する音程コードが暫定的な音高とされる。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【０１１５】
［応用例１］
上述の実施形態において、各弦にスキャンパルスを入力する場合に、スキャンパルスの入力周波数を可聴帯域外（例えば可聴帯域より高い３０［ＫＨｚ］程度）とすることができる。
スキャンパルスの入力周波数が可聴帯域内である場合、ピックアップによって検出される各弦の振動波形の信号に、スキャンパルスに起因するノイズが加わる可能性がある。
したがって、本応用例では、スキャンパルスの入力周波数を可聴帯域外の周波数とする。
ここで、スキャンパルスの入力周波数を３０［ＫＨｚ］とした場合、１つの弦におけるスキャンパルスの印加時間は、例えば５．５５［μｓ］となる。
このように、スキャンパルスの入力周波数を３０［ＫＨｚ］程度とした場合であっても、押弦操作に対する応答性は演奏者にとって必要十分な速度を満たせば良いことから、押弦状態検出処理の実行周期は、スキャンパルスの入力周波数よりも低い周波数で足りる。
押弦状態検出処理の実行周期を、スキャンパルスの入力周波数よりも低い周波数とすることで、電子ギター１における処理負荷を低減することが可能となる。
【０１１６】
以上述べたように、本実施形態に係る電子ギター１は、フレットスキャン部ＦＳと、マイコンＭＣＰとを備えている。
フレットスキャン部ＦＳは、複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する。
マイコンＭＣＰは、複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、押弦センサの検出結果に基づいて、押弦操作の有無を判定する。
また、マイコンＭＣＰは、押弦操作があると判定された場合に、押弦センサの検出結果に基づいて、グループにおいて押弦操作されたフレット位置を検出する。
これにより、フレットのグループ毎に、いずれかのフレットが押されているか否かが初めに判定され、いずれかのフレットが押されている場合に、グループにおける押弦位置の検出が行われる。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【０１１７】
マイコンＭＣＰは、高音側のグループから順に、当該グループにおける押弦操作の有無を判定する。
これにより、音高を決定付ける押弦位置を優先して押弦操作の有無を判定できるため、より速やかに、かつ、より適確な音高を設定することができる。
【０１１８】
マイコンＭＣＰは、グループにおけるフレット位置に加え、セーハが行われた場合に押弦操作を検出する範囲として設定されたフレット位置の範囲において、押弦操作されたフレット位置を検出する。
これにより、セーハが行われた場合であっても、効率的な処理によって、より適確な音高を決定することが可能となる。
【０１１９】
マイコンＭＣＰは、グループにおける高音側のフレットから順に、押弦操作されたフレット位置を検出する。
これにより、フレットのグループ内において、音高を決定付ける押弦位置を優先して押弦の有無を判定できるため、より速やかに、かつ、より適確な音高を設定することができる。
【０１２０】
マイコンＭＣＰは、検出されたフレット位置において、最も高音側のフレット位置に対応する音高を設定する。
これにより、高音側から押弦位置を検出して行き、最初に押弦が検出されたフレット位置の音高に設定することができる。そのため、特に、セーハを行わない演奏時における音高をより適確に設定することが可能となる。
【０１２１】
マイコンＭＣＰは、検出されたフレット位置において、最も高音側のフレット位置に対応する音高と、最も低音側のフレット位置に対応する音高との中間の音高を設定する。
これにより、１つの弦について複数の押弦位置が検出された場合に、それら複数の押弦位置のそれぞれに近い音高に設定することができる。そのため、以後のピッチ抽出による音高の補正の際に、補正量を一定の範囲に抑制することができるため、特に、セーハを行う演奏時における音高をより適確に設定することが可能となる。
【０１２２】
マイコンＭＣＰは、押弦操作を検出した最も高音側のフレット位置から、低音側の予め設定された範囲のフレット位置までにおいて、押弦操作されたフレット位置を検出する。
これにより、セーハが行われる場合に押弦される可能性のあるフレット位置の範囲に限定して、フレットの押弦位置を検出することができるため、より効率的に音高の設定を行うことが可能となる。
【０１２３】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の目的を達成できる範囲での変形、改良等は本発明に含まれるものである。
【０１２４】
上述の実施形態では、２２個のフレットをフレット群ＦＧＡ〜ＦＧＣの３つに分けるものとして説明したが、これに限られない。即ち、２２個のフレットをより多くのフレット群に分けてもよい。
また、第３実施形態及び第４実施形態において、弾弦された場合の暫定的な音高を決定する際に、最初に押弦が検出されたフレット位置の音高と最後に押弦が検出されたフレット位置の音高との中間の値（ｆｒｅｔ＿ｓｃ［ｇｅｎ］＝（ｆｉｒｓｔ＿ｆｏｕｎｄ＿ｓｃ＋ｌａｓｔ＿ｆｏｕｎｄ＿ｓｃ）／２）に設定するものとして説明したが、これに限られない。即ち、弾弦された場合の暫定的な音高を決定する場合、最初に押弦が検出されたフレット位置の音高と最後に押弦が検出されたフレット位置の音高との間の値であれば、上述のように算出された中間の値から一定の範囲内の値とすることができる。
【０１２５】
なお、前記実施例においては、最大ピーク点、最小ピーク点の次のゼロクロス点毎の間隔から周期抽出を行うようにしたが、その他の方式、例えは最大ピーク点間や最小ピーク点間の時間間隔から周期抽出を行ってもよい。また、それに合わせて回路構成は種々変更し得る。
また、前記実施例においては、この発明を電子ギター（ギターシンセサイザ）に適用したものであったが、それに限らない。押弦位置を検出して、押弦位置に応じた音高の楽音を発生するタイプの楽器または装置であれば、種々適用可能である。
【０１２６】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
換言すると、図２及び図４等の構成は例示に過ぎず、特に限定されない。即ち、上述した一連の処理を全体として実行できる機能が電子ギター１に備えられていれば足り、この機能を実現するためにどのような機能構成及び回路構成とするかは特に図２及び図４の例に限定されない。
また、１つの機能ブロックは、ハードウェア単体で構成してもよいし、ソフトウェア単体で構成してもよいし、それらの組み合わせで構成してもよい。
【０１２７】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、コンピュータ等にネットワークや記録媒体からインストールされる。
コンピュータは、専用のハードウェアに組み込まれているコンピュータであってもよい。また、コンピュータは、各種のプログラムをインストールすることで、各種の機能を実行することが可能なコンピュータ、例えば汎用のパーソナルコンピュータであってもよい。
【０１２８】
このようなプログラムを含む記録媒体は、ユーザにプログラムを提供するために装置本体とは別に配布されるリムーバブルメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される記録媒体等で構成される。リムーバブルメディアは、例えば、磁気ディスク（フロッピディスクを含む）、光ディスク、または光磁気ディスク等により構成される。光ディスクは、例えば、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ），ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ），Ｂｌｕ−ｒａｙ  Ｄｉｓｃ（ブルーレイディスク）（登録商標）等により構成される。光磁気ディスクは、ＭＤ（Ｍｉｎｉ−Ｄｉｓｋ）等により構成される。また、装置本体に予め組み込まれた状態でユーザに提供される記録媒体は、例えば、プログラムが記録されているＲＯＭやハードディスク等で構成される。
【０１２９】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１３０】
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１３１】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［付記１］
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサと、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定手段と、
前記押弦判定手段によって押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出手段と、
を有する電子弦楽器の押弦位置検出装置。
［付記２］
前記押弦判定手段は、高音側の前記グループから順に、当該グループにおける押弦操作の有無を判定する付記１に記載の電子弦楽器の押弦位置検出装置。
［付記３］
前記フレット位置検出手段は、前記グループにおけるフレット位置に加え、セーハが行われた場合に押弦操作を検出する範囲として設定されたフレット位置の範囲において、押弦操作されたフレット位置を検出する付記１または２に記載の電子弦楽器の押弦位置検出装置。
［付記４］
前記フレット位置検出手段は、前記グループにおける高音側のフレットから順に、押弦操作されたフレット位置を検出する付記１から３のいずれか１つに記載の電子弦楽器の押弦位置検出装置。
［付記５］
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高を設定する音高設定手段をさらに有する付記１から４のいずれか１つに記載の電子弦楽器の押弦位置検出装置。
［付記６］
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高と、最も低音側のフレット位置に対応する音高との中間の音高を設定する音高設定手段をさらに有する付記１から４のいずれか１つに記載の電子弦楽器の押弦位置検出装置。
［付記７］
前記フレット位置検出手段は、押弦操作を検出した最も高音側のフレット位置から、低音側の予め設定された範囲のフレット位置までにおいて、押弦操作されたフレット位置を検出する付記６に記載の電子弦楽器の押弦位置検出装置。
［付記８］
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられる押弦位置検出方法であって、前記押弦位置検出装置は、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定し、
押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出する、押弦位置検出方法。
［付記９］
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられるコンピュータに、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定ステップと、
前記押弦判定ステップにおいて押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出ステップと、
を実行させるプログラム。
【符号の説明】
【０１３２】
１・・・電子ギター、ＰＧ・・・スキャンパルス発生器、ＦＳ・・・フレットスキャン部、ＦＤＣ・・・フレット検出回路、ＰＣ・・・ピッチ抽出回路、ＬＰＦ・・・ローパスフィルタ、ＡＭＣ，ＡＭＰ・・・増幅回路、ＺＣＲ・・・ゼロクロス点取込回路、ＡＢＳ・・・絶対値取込回路、ＳＥＬ・・・セレクタ、ＦＢ・・・指板、ＭＣＰ・・・マイコン、ＩＣ・・・割込制御回路、ＴＭＲ・・・タイマー、Ａ／Ｄ・・・アナログ−デジタル変換回路、ＭＥＭ・・・メモリ、ＳＯＢ・・・音源発生装置、ＳＳ・・・音源、Ｄ／Ａ・・・デジタル−アナログ変換回路、ＤＣＤ・・・アドレスデコーダ
【図１】
2015152777.tif 000003
【図２】
2015152777.tif 000004
【図３】
2015152777.tif 000005
【図４】
2015152777.tif 000006
【図５】
2015152777.tif 000007
【図６】
2015152777.tif 000008
【図７】
2015152777.tif 000009
【図８】
2015152777.tif 000010
【図９】
2015152777.tif 000011
【図１０】
2015152777.tif 000012
【図１１】
2015152777.tif 000013
【図１２】
2015152777.tif 000014
【図１３】
2015152777.tif 000015
【図１４】
2015152777.tif 000016
【図１５】
2015152777.tif 000017