(58)【調査した分野】(Int.Cl.,DB名)
前記フレット位置検出手段は、前記グループにおけるフレット位置に加え、セーハが行われた場合に押弦操作を検出する範囲として設定されたフレット位置の範囲において、押弦操作されたフレット位置を検出する請求項1または2に記載の電子弦楽器の押弦位置検出装置。
前記フレット位置検出手段は、前記グループにおける高音側のフレットから順に、押弦操作されたフレット位置を検出する請求項1から3のいずれか1項に記載の電子弦楽器の押弦位置検出装置。
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高を設定する音高設定手段をさらに有する請求項1から4のいずれか1項に記載の電子弦楽器の押弦位置検出装置。
前記フレット位置検出手段は、押弦操作を検出した最も高音側のフレット位置から、低音側の予め設定された範囲のフレット位置までにおいて、押弦操作されたフレット位置を検出する請求項1から5のいずれか1項に記載の電子弦楽器の押弦位置検出装置。
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられる押弦位置検出方法であって、前記押弦位置検出装置は、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定し、
押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出し、
1つの弦について複数のフレット位置が検出された場合において、最も高音側のフレット位置に対応する音高と、最も低音側のフレット位置に対応する音高との中間の音高を設定する、押弦位置検出方法。
【発明を実施するための形態】
【0009】
以下、本発明の実施形態について、図面を用いて説明する。
【0010】
[第1実施形態]
以下、この発明の実施形態について図面を参照して説明するが、ここではこの発明を電子ギター(ギターシンセサイザ)に適用した場合を例に挙げて説明する。なお、これに限らず他のタイプの電子弦楽器であっても同様に適用できる。
【0011】
図1は、本実施例に係る電子ギター1の主要部の構成を示す模式図である。
本実施形態に係る電子ギター1では、22個のフレットが1つのグループ(フレット群)として取り扱われ、各弦について、グループを単位として押弦状態が検出される。
図1に示すように、電子ギター1は、指板FB上に張設された6つの弦STG1〜STG6を備えており、各弦に対して、フレット及びピッキングを行うことにより、アコースティックギター等の自然楽器と同様の操作でユーザの演奏を可能とするものである。
図1に示すように、電子ギター1は、指板FB上に張設された6つの弦STG1〜STG6にそれぞれ設けられ、各弦にスキャンパルスを入力するスキャンパルス発生器PGを備えている。そして、電子ギター1は、各弦に対するフレットあるいはピッキングが行われた場合に、フレットスキャン部FS及びピッチ抽出回路PCによって、各操作を検出する。なお、本実施形態において、フレット番号1のフレットが最もヘッド側のフレットであり、フレット番号22のフレットが最もブリッジ側のフレットである。
図2は、全体の回路を示すブロック図である。ピッチ抽出回路PCは、各弦の振動を電気信号に変換し、振動波形のゼロクロス点及び振幅の絶対値を取得して、マイコンMCPに出力する。
【0012】
マイコンMCPは、後述する音程データ変換テーブル(ピッチテーブル)を含むメモリ例えばROM及びRAMを有すると共に、タイマーTMRを有し、音源発生装置SOBに与える為の信号を制御するものである。音源発生装置SOBは音源SSとデジタル−アナログ変換回路D/Aと、増幅回路AMPと、スピーカSPとからなり、マイコンMCPからのノートオン(発音)、ノートオフ(消音)、周波数を変える音高指示信号に応じた音高の楽音を放音するものである。なお、音源SSの入力側とマイコンMCPのデータバスBUSとの間に、MIDI(Musical Instrument Digital Interface)形式のインターフェースが設けられている。勿論、ギター本体に音源SSを設けるときは、別のインターフェースを介してもよい。アドレスデコーダDCDは、マイコンMCPからのアドレス読み出し信号ARが入力されたとき、弦番号の読込み信号RDI、時刻読込み信号RDj(j=1〜6)とMAX,MINのピーク値及びその時点その時点の瞬時値読込み信号RDAI(I=1〜18)をピッチ抽出回路PCに出力する。
【0013】
マイコンMCPは、一定時間毎(例えば1ms毎)の割り込み処理として、各弦における各フレットの押弦状態を常に検出する押弦状態検出処理を実行している。押弦状態検出処理は、各弦のピッキングによるピッチ抽出とは別に並列処理として実行されている。
図3は、フレットの押弦状態を検出するためのフレット検出回路FDCを示す図である。フレット検出回路FDCは、フレットスキャン部FSに備えられている。
図3に示すように、フレット検出回路FDCは、フレットの数に対応する22の選択線KI0〜KI21と、弦の数に対応する6の信号線KC0〜KC5とがマトリクス状に配列された構成を有している。
【0014】
各信号線KC0〜KC5は、所定時間(例えば1ms)毎に順次アクティブな状態にスイッチングされる。選択線KI0〜KI21は、ハイレベル(例えば5v)にプルアップされている。アクティブな状態とされた信号線KC0〜KC5が、押弦によりフレット23に接触されていると、そのフレット23に対応する選択線KI0〜KI21からはアクティブな状態の信号が読み出される。
即ち、押弦センサ44は、所定時間毎に信号線KC0〜KC5を1つずつアクティブな状態に切り替え、選択線KI0〜KI21の状態(ハイレベルまたはローレベル)を読み出して、すべてのフレット23について、いずれの位置が押弦されているかを検出する。
【0015】
そして、各弦における各フレットの検出結果(各選択線KI0〜KI21においてローレベルを表す「1」またはハイレベルを表す「0」)は、各弦に対応する検出結果の格納用レジスタfret_in_new[gen](ただし、genは弦番号1〜6)に格納される。検出結果の格納用レジスタfret_in_new[gen]は、22ビットからなり、下位から上位のアドレスに、フレット番号の小さいフレットから順にフレットの検出結果が格納される。また、本実施形態においては、fret_in_new[gen]と同サイズで、前回の検出結果の格納用レジスタfret_in_old[gen]及び押弦状態検出処理のために一時的に用いられる一時格納用レジスタfret_in_tempが用意されている。
【0016】
これら検出結果の格納用レジスタFret_in_new[gen]、前回の検出結果の格納用レジスタfret_in_old[gen]、一時格納用レジスタfret_in_tempは、フレット検出回路FDCに備えることができる。ただし、メモリMEMの記憶領域をこれらのレジスタとしての領域に割り当てる等、他の記憶領域を用いることとしてもよい。
【0017】
図4は、ピッチ抽出回路PC及びマイコンMCPの具体的な機能構成を示すブロック図である。ピッチ抽出は、主にピッチ抽出回路PC及びマイコンMCPの以下に説明する機能によって実行される。
図4に示すように、ピッチ抽出回路PCは、ローパスフィルタLPFと、増幅回路AMCと、ゼロクロス点取込回路ZCRと、絶対値取込回路ABSとを備えている。
ローパスフィルタLPFには、ピッキングが行われることにより各弦において発生する波形の信号がヘキサピックアップから入力され、ローパスフィルタLPFは、入力された信号の高周波成分をカットし、低周波成分のみを通過させる。
増幅回路AMCは、ローパスフィルタLPFの出力信号を設定されたゲインに応じて増幅し、ゼロクロス点取込回路ZCR及び絶対値取込回路ABSに出力する。
【0018】
ゼロクロス点取込回路ZCRは、入力された波形の信号のゼロクロス点を検出し、ゼロクロス点より正側の場合にハイレベル信号、負側の場合にローレベル信号を出力する。なお、ゼロクロス点取込回路ZCRの出力信号は、反転したもの(反転出力)と非反転のもの(非反転出力)との両方がマイコンMCPに入力される。
絶対値取込回路ABSは、入力された波形の信号の正負両側におけるピーク値をそれぞれ検出し、ピーク値の絶対値及び符号をマイコンMCPに入力する。
【0019】
マイコンMCPは、割込制御回路ICと、タイマーTMRと、アナログ−デジタル変換回路A/Dと、メモリMEMとを備えている。
割込制御回路ICは、ゼロクロス点取込回路ZCRの非反転出力及び反転出力が入力され、これらの立ち上がりエッジで割り込み信号を発生させる。即ち、割込制御回路ICは、ピッキングによって各弦に発生した波形の信号がゼロクロスするタイミングで、割り込み信号を発生させる。割込制御回路ICは、発生した割り込み信号をタイマーTMRに出力する。
【0020】
タイマーTMRは、割込制御回路ICから割り込み信号が入力されると、入力された時間t(非反転出力による割り込み信号の場合)及び時間T(反転出力による割り込み信号の場合)をメモリMEMに出力する。
アナログ−デジタル変換回路A/Dは、絶対値取込回路ABSから入力されたピーク値の絶対値をデジタル信号に変換し、メモリMEMに出力する。なお、アナログ−デジタル変換回路A/Dは、ピーク値の絶対値と共に入力される符号をデジタル化されたピーク値と併せてメモリMEMに出力する。
【0021】
メモリMEMは、タイマーTMRから入力された時間t,Tと、ピーク値の絶対値(デジタル値)及び符号を記憶する。メモリMEMに記憶された時間t,Tは、マイコンMCPが前回記憶された時間t,Tと今回記憶された時間t,Tの差分を算出して周波数(発生させる楽音の音程であるピッチ)を求める際に用いられる。
また、メモリMEMは、各弦のフレットと周波数との関係を示すフレット−周波数データテーブル(不図示)を記憶している。
【0022】
フレット−周波数データテーブルでは、スケールA4を442Hzとし、各弦がいずれの周波数に対応するか、また、フレット位置による音程のコード(キーコード)が関連付けて記憶されている。
また、メモリMEMは、ピッチ抽出によって取得された周波数を音程データ(キーコード)に変換するための音程データ変換テーブル(不図示)を記憶している。
音程データ変換テーブルでは、ピッチ抽出によって得られた周波数が、cent比例した音程データ(キーコード)と対応付けて記憶されている。
【0023】
マイコンMCPは、メモリMEMに記憶されたこれらのデータを参照ながら、ピッキングが行われた場合に、フレットスキャンの結果及びピッチ抽出の結果に応じて、音程を決定し、楽音を発生する。
具体的には、マイコンMCPは、押弦状態検出処理を実行することにより、各弦について押弦状態の変化があるか否かを判定し、押弦状態の変化がある場合に、押弦されているフレットをブリッジ側から順に検出した上で、最初に検出されたフレットの位置に対応する音高で、弾弦された場合の暫定的な発音を行う。
【0024】
次に、マイコンMCPが楽音を発生する際の処理の概要について説明する。
図5は、マイコンMCPが楽音を発生する際の処理の概要を示す模式図である。
図5において、ピッチ抽出回路PCに
図5(c)に示す波形の信号が入力されたとすると、これに対するゼロクロス点取込回路ZCRの非反転出力は、
図5(a)に示す波形となり、反転出力は、
図5(b)に示す波形となる。
【0025】
マイコンMCPは、ピッチ抽出処理を実行する場合、設定された所定の波高値THLABより小さいものはノイズとみなして波形の信号を破棄する(STEP0〜2)。一方、マイコンMCPは、STEP0において、所定の波高値THLAB以上となった場合、STEP0の波高値VEL0がSTEP0における波高値のしきい値TH0以上となっている場合には、ピッチ抽出処理と並列的に実行しているフレットの押弦状態検出処理で検出された各フレットの情報から音程(音程の初期値)を検出し、STEP0の波高値に基づいて、STEP1において発音を開始する。具体的には、マイコンMCPは、音量を定めるベロシティVELを(VEL0+VEL1)/2として、STEP1で発音を開始する。
【0026】
この後、マイコンMCPは、STEP0〜2において、所定の波高値THLAB以上となっている場合、その波が新たに入力された初めてのものであるときに、波形のピーク値及び符号をベロシティVEL(具体的には波高値VEL2)の値として取り込む(STEP3)。そして、マイコンMCPは、ピッチ抽出処理において検出したベロシティVELの値を基に、その音程の発音を行う(ノートオン)。発音が行われる場合、マイコンMCPは、音源SSに対して、音程及びベロシティVELの値を出力することにより、発音の指令を行う。
【0027】
この後、STEP4において、ピッチ抽出処理は継続され、マイコンMCPは、前回記憶された時間t,Tと今回記憶された時間t,Tの差分から周波数(ピッチ)を算出し(TP(b),TP(b’))、この周波数によって、すでに発音している音程に対する補正を行う。
【0028】
以下、マイコンMCPの動作についてフローチャートや波形を示す図面を参照して説明する。
初めに、図面の符号について説明する。
AD・・・
図2の瞬時値読込み信号RDA13〜18によりピッチ抽出回路PCの入力波形を直接読んだ入力波高値(瞬時値)
T・・・周期データ
THLAB・・・STEP0,STEP1におけるノイズ除去用しきい値
TH0・・・STEP0における波高値判定用しきい値
TH1・・・STEP1における波高値判定用しきい値
VEL・・・速度(ベロシティー)を定める情報で、発音開始時の波形の最大ピーク値(波高値)にて定まる。
VEL0・・・STEP0におけるノイズ除去後の波高値(=a0)
VEL1・・・STEP1におけるノイズ除去後の波高値(=b0)
VEL2・・・STEP2における波高値(=a1)
【0029】
b・・・ワーキングレジスタBに記憶されている今回正負フラグ(正ピークの次のゼロ点のとき1、負ピークの次のゼロ点のとき0)
c・・・ワーキングレジスタCに記憶されている今回波高値(ピーク値)
e・・・ワーキングレジスタEに記憶されている前々回波高値(ピーク値)
h・・・ワーキングレジスタHに記憶されている前々回抽出された周期データ
t・・・ワーキングレジスタTrに記憶されている今回のゼロクロス時刻
【0030】
また、マイコンMCPの動作において、以下の各種レジスタが用いられる。
fret_in_new[gen]・・・各弦に対応する押弦状態の検出結果の格納用レジスタ
fret_in_old[gen]・・・前回の押弦状態の検出結果の格納用レジスタ
fret_in_temp・・・押弦状態検出処理のために一時的に用いられる一時格納用レジスタ
fret_sc_temp・・・現在の音程コードを一時的に格納するためのレジスタ
const_fret_sc_high[gen]・・・各弦の22フレット位置の音程コードを格納するためのレジスタ
fret_sc[gen]・・・各弦の暫定的な発音用の音程コードを格納するためのレジスタ
const_fret_kaiho[gen]・・・各弦の開放弦の場合の音程コードを格納するためのレジスタ
【0031】
図6は、マイコンMCPが実行する押弦状態検出処理の流れを示すフローチャートである。
本実施形態において、マイコンMCPは、各信号線KC0〜KC5の1つにアクティブな状態の信号(ここではローレベルの信号)を印加し、選択線KI0〜KI21それぞれの信号レベルを読み出すことができる。このとき、押弦されている弦に対応する信号線では、信号レベルがローレベルとなり、押弦されていない弦に対応する信号線では、信号レベルがハイレベルとなる。以下に説明する押弦状態検出処理においては、選択線KI0〜KI21に対応する検出結果の格納用レジスタfret_in_new[gen]に、信号線の信号レベルがローレベルの場合、「1」が格納され、信号線の信号レベルがハイレベルの場合、「0」が格納される。なお、以下に説明する押弦状態検出処理は、1つの弦についての処理を示しており、電子ギター1においては、以下のような処理が各弦について実行される。
【0032】
押弦状態検出処理は、電子ギター1の電源投入と共に開始され、繰り返し実行される。
ステップS1において、マイコンMCPは、一時格納用レジスタfret_in_tempに、レジスタfret_in_new[gen]に格納された今回の押弦状態の検出結果(即ち、選択線KI0〜KI21それぞれの最新の信号レベルを示すデータ)をセットする。
ステップS2において、マイコンMCPは、前回の押弦状態と今回の押弦状態とに変化があるか否か(fret_in_new[gen]≠fret_in_old[gen]であるか否か)の判定を行う。
【0033】
ステップS2において、前回の押弦状態と今回の押弦状態とに変化がある(YES)と判定した場合、マイコンMCPは、ステップS3の処理に移行する。
一方、ステップS2において、前回の押弦状態と今回の押弦状態とに変化がない(NO)と判定した場合、マイコンMCPは、押弦状態検出処理を終了する。
ステップS3において、マイコンMCPは、今回の押弦状態において、いずれかのフレットが押されているか否か(fret_in_new[gen]≠0であるか否か)の判定を行う。
【0034】
ステップS3において、今回の押弦状態でいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS4の処理に移行する。
一方、ステップS3において、今回の押弦状態でいずれのフレットも押されていない(NO)と判定された場合、マイコンMCPは、ステップS10の処理に移行する。
ステップS4において、マイコンMCPは、音程コードを22フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_high[gen])。
【0035】
ステップS5において、マイコンMCPは、fret_in_tempの最上位桁の数値がゼロでないか否か(fret_in_tempのMSB≠0であるか否か)の判定を行う。即ち、ステップS5では、ループが回る毎に、フレットにおける押弦の有無がブリッジ側から順に判定される。
ステップS5において、fret_in_tempの最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS8の処理に移行する。
一方、ステップS5において、fret_in_tempの最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS6の処理に移行する。
【0036】
ステップS6において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS7において、マイコンMCPは、現在の音程コードを一時的に格納するためのレジスタfret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS7の後、マイコンMCPは、ステップS5の処理に移行する。
【0037】
ステップS8において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]にレジスタfret_sc_tempに格納された音程コードをセットする(fret_sc[gen]=fret_sc_temp)。
ステップS9において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS9の後、マイコンMCPは、押弦状態検出処理を終了する。
【0038】
ステップS10において、マイコンMCPは、fret_sc[gen]に各弦の開放弦の場合の音程コードを格納するためのレジスタconst_fret_kaiho[gen]の値をセットする(fret_sc[gen]=const_fret_kaiho[gen])。
ステップS11において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS11の後、マイコンMCPは、押弦状態検出処理を終了する。
【0039】
以上のような処理により、本実施形態に係る電子ギター1では、各弦について、いずれかのフレットが押されているか否かが初めに判定され、いずれかのフレットが押されている場合に、ブリッジ側のフレットから順に、押弦状態の判定が行われる。そして、押弦されていることが最初に判定されたフレットの位置に対応する音高で、弾弦された場合の暫定的な音高が決定される。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【0040】
[第2実施形態]
次に、本発明の第2実施形態について説明する。
本実施形態に係る電子ギター1では、22個のフレットが複数のグループ(フレット群)に分けられており、各弦について、それぞれのグループ毎に押弦状態が検出される。
そのため、電子ギター1の構成は第1実施形態と同様であると共に、押弦状態検出処理の内容が第1実施形態の場合と異なっている。
したがって、以下、第1実施形態と異なる部分である押弦状態検出処理について主として説明する。
なお、以下の説明においては、22個のフレットが3つのグループに分けられている場合を例として説明する。ただし、グループの数は、3つ未満あるいは4つ以上とすることも可能である。
【0041】
図7〜9は、第2実施形態における押弦状態検出処理の流れを示すフローチャートである。
本実施形態における22個のフレットは、フレット番号16〜22のフレット群FGA、フレット番号9〜15のフレット群FGB、フレット番号1〜14のフレット群FGCに分割されている。なお、
図10は、フレット群FGA〜FGCと、セーハが行われた場合に押弦状態を検出するフレットの範囲との関係を示す模式図である。
ステップS101において、マイコンMCPは、一時格納用レジスタfret_in_tempに、レジスタfret_in_new[gen]に格納された今回の押弦状態の検出結果(即ち、選択線KI0〜KI21それぞれの最新の信号レベルを示すデータ)をセットする。
【0042】
ステップS102において、マイコンMCPは、前回の押弦状態と今回の押弦状態とに変化があるか否か(fret_in_new[gen]≠fret_in_old[gen]であるか否か)の判定を行う。
ステップS102において、前回の押弦状態と今回の押弦状態とに変化がある(YES)と判定した場合、マイコンMCPは、ステップS103の処理に移行する。
一方、ステップS102において、前回の押弦状態と今回の押弦状態とに変化がない(NO)と判定した場合、マイコンMCPは、押弦状態検出処理を終了する。
【0043】
ステップS103において、マイコンMCPは、今回の押弦状態でフレット群FGAのいずれかのフレットが押されているか否か(fret_in_new[gen]&(0X3F8000)≠0であるか否か)の判定を行う。なお、「0X3F8000」は、16進数の「3F8000」を意味しており、2進数の「1111111000000000000000」を意味している。ステップS103の処理では、fret_in_new[gen]に「0X3F8000」が乗算されることで、フレット群FGAのデータが抽出される。
【0044】
ステップS103において、今回の押弦状態でフレット群FGAのいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS104の処理に移行する。
一方、ステップS103において、今回の押弦状態でフレット群FGAのいずれのフレットも押されていない(NO)と判定した場合、マイコンMCPは、ステップS110の処理に移行する。
ステップS104において、マイコンMCPは、音程コードを22フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_high[gen])。
【0045】
ステップS105において、マイコンMCPは、fret_in_tempの最上位桁の数値がゼロでないか否か(fret_in_temp&0X200000≠0であるか否か)の判定を行う。なお、「0X200000」は、16進数の「200000」を意味しており、2進数の「1000000000000000000000」を意味している。ステップS105の処理では、fret_in_new[gen]に「0X200000」が乗算されることで、フレット群FGAに対応する桁のデータのうち、最上位のデータが抽出される。
ステップS105において、fret_in_tempの最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS108の処理に移行する。
一方、ステップS105において、fret_in_tempの最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS106の処理に移行する。
【0046】
ステップS106において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS107において、マイコンMCPは、現在の音程コードを一時的に格納するためのレジスタfret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS107の処理の後、マイコンMCPは、ステップS105の処理に移行する。
【0047】
ステップS108において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]にレジスタfret_sc_tempに格納された音程コードをセットする(fret_sc[gen]=fret_sc_temp)。
ステップS109において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS109の後、マイコンMCPは、押弦状態検出処理を終了する。
【0048】
ステップS110において、マイコンMCPは、今回の押弦状態でフレット群FGBのいずれかのフレットが押されているか否か(fret_in_new[gen]&(0X7F00)≠0であるか否か)の判定を行う。なお、「0X7F00」は、16進数の「7F00」を意味しており、2進数の「111111100000000」を意味している。ステップS110の処理では、fret_in_new[gen]に「0X7F00」が乗算されることで、フレット群FGBのデータが抽出される。
ステップS110において、今回の押弦状態でフレット群FGBのいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS111の処理に移行する。
一方、ステップS110において、今回の押弦状態でフレット群FGBのいずれのフレットも押されていない(NO)と判定した場合、マイコンMCPは、ステップS117の処理に移行する。
【0049】
ステップS111において、マイコンMCPは、音程コードを15フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_mid[gen])。なお、レジスタconst_fret_sc_mid[gen]は、各弦の15フレット位置の音程コードを格納するためのレジスタである。
ステップS112において、マイコンMCPは、fret_in_tempにおけるフレット群FGBに対応する桁の最上位桁の数値がゼロでないか否か(fret_in_temp&0X4000≠0であるか否か)の判定を行う。なお、「0X4000」は、16進数の「4000」を意味しており、2進数の「100000000000000」を意味している。ステップS112の処理では、fret_in_new[gen]に「0X4000」が乗算されることで、フレット群FGBに対応する桁のデータのうち、最上位のデータが抽出される。
【0050】
ステップS112において、fret_in_tempにおけるフレット群FGBに対応する桁の最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS115の処理に移行する。
一方、ステップS112において、fret_in_tempにおけるフレット群FGBに対応する桁の最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS113の処理に移行する。
【0051】
ステップS113において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS114において、マイコンMCPは、現在の音程コードを一時的に格納するためのレジスタfret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS114の処理の後、マイコンMCPは、ステップS112の処理に移行する。
【0052】
ステップS115において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]にレジスタfret_sc_tempに格納された音程コードをセットする(fret_sc[gen]=fret_sc_temp)。
ステップS116において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS116の後、マイコンMCPは、押弦状態検出処理を終了する。
【0053】
ステップS117において、マイコンMCPは、今回の押弦状態でフレット群FGCのいずれかのフレットが押されているか否か(fret_in_new[gen]&(0XFF)≠0であるか否か)の判定を行う。なお、「0XFF」は、16進数の「FF」を意味しており、2進数の「11111111」を意味している。ステップS117の処理では、fret_in_new[gen]に「0XFF」が乗算されることで、フレット群FGCのデータが抽出される。
【0054】
ステップS117において、今回の押弦状態でフレット群FGCのいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS118の処理に移行する。
一方、ステップS117において、今回の押弦状態でフレット群FGCのいずれのフレットも押されていない(NO)と判定した場合、マイコンMCPは、ステップS124の処理に移行する。
ステップS118において、マイコンMCPは、音程コードを8フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_low[gen])。なお、レジスタconst_fret_sc_low[gen]は、各弦の8フレット位置の音程コードを格納するためのレジスタである。
【0055】
ステップS119において、マイコンMCPは、fret_in_tempにおけるフレット群FGCに対応する桁の最上位桁の数値がゼロでないか否か(fret_in_temp&0X80≠0であるか否か)の判定を行う。なお、「0X80」は、16進数の「80」を意味しており、2進数の「10000000」を意味している。ステップS119の処理では、fret_in_new[gen]に「0X80」が乗算されることで、フレット群FGCに対応する桁のデータのうち、最上位のデータが抽出される。
【0056】
ステップS119において、fret_in_tempにおけるフレット群FGCに対応する桁の最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS122の処理に移行する。
一方、ステップS119において、fret_in_tempにおけるフレット群FGCに対応する桁の最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS120の処理に移行する。
【0057】
ステップS120において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS121において、マイコンMCPは、現在の音程コードを一時的に格納するためのレジスタfret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS121の処理の後、マイコンMCPは、ステップS119の処理に移行する。
【0058】
ステップS122において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]にレジスタfret_sc_tempに格納された音程コードをセットする(fret_sc[gen]=fret_sc_temp)。
ステップS123において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS123の後、マイコンMCPは、押弦状態検出処理を終了する。
【0059】
ステップS124において、マイコンMCPは、fret_sc[gen]に各弦の開放弦の場合の音程コードを格納するためのレジスタconst_fret_kaiho[gen]の値をセットする(fret_sc[gen]=const_fret_kaiho[gen])。
ステップS125において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS125の後、マイコンMCPは、押弦状態検出処理を終了する。
【0060】
以上のような処理により、本実施形態に係る電子ギター1では、各弦の各フレット群について、いずれかのフレットが押されているか否かが初めに判定され、いずれかのフレットが押されている場合に、ブリッジ側のフレット群から、さらに、ブリッジ側のフレットから順に、押弦状態の判定が行われる。そして、押弦されていることが最初に判定されたフレットの位置に対応する音高で、弾弦された場合の暫定的な音高が決定される。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【0061】
[第3実施形態]
次に、本発明の第3実施形態について説明する。
本実施形態に係る電子ギター1では、22個のフレットは1つのグループとして取り扱われ、各弦について、押弦状態が検出される。そして、所定のフレット数以内の範囲において、1つの弦について複数の位置で押弦されていることが検出された場合、最初に押弦が検出された弦の位置と最後に押弦が検出された弦の位置との中間位置に対応する音程コードが暫定的な音高とされる。
そのため、電子ギター1の構成は第1実施形態と同様であると共に、押弦状態検出処理の内容が第1実施形態の場合と異なっている。
したがって、以下、第1実施形態と異なる部分である押弦状態検出処理について主として説明する。
【0062】
図11は、第3実施形態における押弦状態検出処理の流れを示すフローチャートである。
ステップS201において、マイコンMCPは、レジスタfirst_found_scにゼロをセットし、レジスタnumber_of_check_fretにNをセットし、一時格納用レジスタfret_in_tempに、レジスタfret_in_new[gen]に格納された今回の押弦状態の検出結果(即ち、選択線KI0〜KI21それぞれの最新の信号レベルを示すデータ)をセットする。なお、Nはセーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数であり、例えば、演奏者の手の大きさを考慮して、5または6等を採用することができる。また、レジスタfirst_found_scは、最初に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタであり、レジスタnumber_of_check_fretは、セーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数を格納するためのレジスタである。
【0063】
ステップS202において、マイコンMCPは、前回の押弦状態と今回の押弦状態とに変化があるか否か(fret_in_new[gen]≠fret_in_old[gen]であるか否か)の判定を行う。
ステップS202において、前回の押弦状態と今回の押弦状態とに変化がある(YES)と判定した場合、マイコンMCPは、ステップS203の処理に移行する。
一方、前回の押弦状態と今回の押弦状態とに変化がない(NO)と判定した場合、マイコンMCPは、押弦状態検出処理を終了する。
【0064】
ステップS203において、マイコンMCPは、今回の押弦状態において、いずれかのフレットが押されているか否か(fret_in_new[gen]≠0であるか否か)の判定を行う。
ステップS203において、今回の押弦状態でいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS204の処理に移行する。
一方、ステップS203において、今回の押弦状態でいずれのフレットも押されていない(NO)と判定された場合、マイコンMCPは、ステップS221の処理に移行する。
【0065】
ステップS204において、マイコンMCPは、音程コードを22フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_high[gen])。
ステップS205において、マイコンMCPは、22フレット分のカウンタfret_iに22をセットする(fret_i=22)。
【0066】
ステップS206において、マイコンMCPは、カウンタfret_iがゼロでないか否か(fret_i≠0)の判定を行う。
ステップS206において、カウンタfret_iがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS207の処理に移行する。
一方、ステップS206において、カウンタfret_iがゼロである(NO)と判定した場合、22フレット全ての押弦状態を検出したものとして、マイコンMCPは、ステップS219の処理に移行する。
【0067】
ステップS207において、マイコンMCPは、fret_in_tempがゼロでないか否か(fret_in_temp≠0であるか否か)の判定を行う。
ステップS207において、fret_in_tempがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS208の処理に移行する。
一方、ステップS207において、fret_in_tempがゼロである(NO)と判定した場合、全ての押弦フレットを検出したものとして、マイコンMCPは、ステップS219の処理に移行する。
【0068】
ステップS208において、マイコンMCPは、number_of_check_fretがゼロでないか否か(number_of_check_fret≠0であるか否か)の判定を行う。
ステップS208において、number_of_check_fretがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS209の処理に移行する。
一方、ステップS208において、number_of_check_fretがゼロである(NO)と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Nを全て検出したものとして、マイコンMCPは、ステップS219の処理に移行する。
【0069】
ステップS209において、マイコンMCPは、fret_in_tempの最上位桁の数値がゼロでないか否か(fret_in_tempのMSB≠0であるか否か)の判定を行う。
ステップS209において、fret_in_tempの最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS210の処理に移行する。
一方、ステップS209において、fret_in_tempの最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS214の処理に移行する。
【0070】
ステップS210において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS210において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS211の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップS210において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS213の処理に移行する。
【0071】
ステップS211において、マイコンMCPは、first_found_scにfret_sc_tempの音高のデータをセットする。
ステップS212において、マイコンMCPは、レジスタlast_found_scにfirst_found_scの次のフレット位置(ヘッド側に隣接するフレット位置)の音高のデータをセットする。なお、last_found_scは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップS213において、マイコンMCPは、last_found_scにfret_sc_tempの音高のデータをセットする。
【0072】
ステップS214において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS214において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS215の処理に移行する。
一方、ステップS214において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS216の処理に移行する。
ステップS215において、マイコンMCPは、number_of_check_fretの値を「1」減算する。
【0073】
ステップS216において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS217において、マイコンMCPは、fret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS218において、マイコンMCPは、カウンタfret_iの値を「1」減算する。
ステップS218の後、マイコンMCPは、ステップS206の処理に移行する。
【0074】
ステップS219において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]に、first_found_scの音高とlast_found_scの音高との中間の値をセットする(fret_sc[gen]=(first_found_sc+last_found_sc)/2)。
ステップS220において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS220の後、マイコンMCPは、押弦状態検出処理を終了する。
【0075】
ステップS221において、マイコンMCPは、fret_sc[gen]に各弦の開放弦の場合の音程コードを格納するためのレジスタconst_fret_kaiho[gen]の値をセットする(fret_sc[gen]=const_fret_kaiho[gen])。
ステップS222において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS222の後、マイコンMCPは、押弦状態検出処理を終了する。
【0076】
以上のような処理により、本実施形態に係る電子ギター1では、各弦について、いずれかのフレットが押されているか否かが初めに判定される。そして、ブリッジ側のフレットから順に、押弦状態の判定が行われ、所定のフレット数以内の範囲において、1つの弦について複数の位置で押弦されていることが検出された場合、最初に押弦が検出された弦の位置と最後に押弦が検出された弦の位置との中間位置に対応する音程コードが暫定的な音高とされる。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【0077】
[第4実施形態]
次に、本発明の第4実施形態について説明する。
本実施形態に係る電子ギター1では、第2実施形態と同様に、22個のフレットが複数のグループ(フレット群)に分けられており、各弦について、それぞれのグループ毎に押弦状態が検出される。
そのため、電子ギター1の構成は第1実施形態と同様であると共に、押弦状態検出処理の内容が第1実施形態の場合と異なっている。
したがって、以下、第1実施形態と異なる部分である押弦状態検出処理について主として説明する。
なお、以下の説明においては、22個のフレットが3つのグループに分けられている場合を例として説明する。ただし、グループの数は、3つ未満あるいは4つ以上とすることも可能である。
【0078】
図12〜14は、第4実施形態における押弦状態検出処理の流れを示すフローチャートである。
本実施形態における22個のフレットは、フレット番号16〜22のフレット群FGA、フレット番号9〜15のフレット群FGB、フレット番号1〜14のフレット群FGCに分割されている。
【0079】
ステップS301において、マイコンMCPは、レジスタfirst_found_scにゼロをセットし、レジスタnumber_of_check_fretにNをセットし、一時格納用レジスタfret_in_tempに、レジスタfret_in_new[gen]に格納された今回の押弦状態の検出結果(即ち、選択線KI0〜KI21それぞれの最新の信号レベルを示すデータ)をセットする。なお、Nはセーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数であり、例えば、演奏者の手の大きさを考慮して、5または6等を採用することができる。また、レジスタfirst_found_scは、最初に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタであり、レジスタnumber_of_check_fretは、セーハが行われた場合に押弦状態を検出するフレットの範囲を示す自然数を格納するためのレジスタである。
ステップS302において、マイコンMCPは、前回の押弦状態と今回の押弦状態とに変化があるか否か(fret_in_new[gen]≠fret_in_old[gen]であるか否か)の判定を行う。
ステップS302において、前回の押弦状態と今回の押弦状態とに変化がある(YES)と判定した場合、マイコンMCPは、ステップS303の処理に移行する。
一方、ステップS302において、前回の押弦状態と今回の押弦状態とに変化がない(NO)と判定した場合、マイコンMCPは、押弦状態検出処理を終了する。
【0080】
ステップS303において、マイコンMCPは、今回の押弦状態でフレット群FGAのいずれかのフレットが押されているか否か(fret_in_new[gen]&(0X3F8000)≠0であるか否か)の判定を行う。なお、「0X3F8000」は、16進数の「3F8000」を意味しており、2進数の「1111111000000000000000」を意味している。ステップS303の処理では、fret_in_new[gen]に「0X3F8000」が乗算されることで、フレット群FGAのデータが抽出される。
ステップS303において、今回の押弦状態でフレット群FGAのいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS304の処理に移行する。
一方、ステップS303において、今回の押弦状態でフレット群FGAのいずれのフレットも押されていない(NO)と判定した場合、マイコンMCPは、ステップS321の処理に移行する。
【0081】
ステップS304において、マイコンMCPは、音程コードを22フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_high[gen])。
ステップS305において、マイコンMCPは、22フレット分のカウンタfret_iに「22」をセットする(fret_i=22)。
ステップS306において、マイコンMCPは、カウンタfret_iが「11」でないか否か(fret_i≠11)の判定を行う。
ステップS306において、カウンタfret_iが「11」でない(YES)と判定した場合、マイコンMCPは、ステップS307の処理に移行する。
一方、ステップS306において、カウンタfret_iが「11」である(NO)と判定した場合、22フレットから12フレットまでの押弦状態を検出したものとして、マイコンMCPは、ステップS319の処理に移行する。
【0082】
ステップS307において、マイコンMCPは、セーハが行われた場合に押弦状態を検出するフレットの範囲N(ここでは5フレットとする)を含め、フレット群FGAについて押弦フレットを全て検出したか否か(fret_in_new[gen]&(0X3FF800)≠0であるか否か)の判定を行う。なお、「0X3FF800」は、16進数の「3FF800」を意味しており、2進数の「1111111111100000000000」を意味している。ステップS307の処理では、fret_in_new[gen]に「0X3FF800」が乗算されることで、フレット群FGAに加え、セーハが行われた場合に押弦状態を検出するフレットの範囲を含むデータが抽出される。
【0083】
図15は、フレット群FGA〜FGCと、セーハが行われた場合に押弦状態を検出するフレットの範囲との関係を示す模式図である。
図15に示すように、フレット群FGA(22フレット〜16フレット)においてセーハが行われた場合、セーハが行われた場合に押弦状態を検出するフレットの範囲は、22フレット〜12フレットとなる。また、フレット群FGB(15フレット〜9フレット)においてセーハが行われた場合、セーハが行われた場合に押弦状態を検出するフレットの範囲は、15フレット〜5フレットとなる。なお、最もヘッド側のフレット群FGC(8フレット〜1フレット)においてセーハが行われた場合、セーハが行われた場合に押弦状態を検出するフレットの範囲も8フレット〜1フレットと変化しない。
【0084】
図11に戻り、ステップS307において、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群FGAについて押弦フレットを全て検出した(YES)と判定した場合、マイコンMCPは、ステップS308の処理に移行する。
一方、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群FGAについて押弦フレットを全て検出していない(NO)と判定した場合、マイコンMCPは、ステップS319の処理に移行する。
ステップS308において、マイコンMCPは、number_of_check_fretがゼロでないか否か(number_of_check_fret≠0であるか否か)の判定を行う。
ステップS308において、number_of_check_fretがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS309の処理に移行する。
一方、ステップS308において、number_of_check_fretがゼロである(NO)と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Nを全て検出したものとして、マイコンMCPは、ステップS319の処理に移行する。
【0085】
ステップS309において、マイコンMCPは、fret_in_tempの最上位桁の数値がゼロでないか否か(fret_in_temp&0X200000≠0であるか否か)の判定を行う。なお、「0X200000」は、16進数の「200000」を意味しており、2進数の「1000000000000000000000」を意味している。ステップS309の処理では、fret_in_new[gen]に「0X200000」が乗算されることで、フレット群FGAに対応する桁のデータのうち、最上位のデータが抽出される。
ステップS309において、fret_in_tempの最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS310の処理に移行する。
一方、ステップS309において、fret_in_tempの最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS314の処理に移行する。
【0086】
ステップS310において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS310において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS311の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップS310において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS313の処理に移行する。
【0087】
ステップS311において、マイコンMCPは、first_found_scにfret_sc_tempの音高のデータをセットする。
ステップS312において、マイコンMCPは、レジスタlast_found_scにfirst_found_scの次のフレット位置(ヘッド側に隣接するフレット位置)の音高のデータをセットする。なお、last_found_scは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップS313において、マイコンMCPは、last_found_scにfret_sc_tempの音高のデータをセットする。
【0088】
ステップS314において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS314において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS315の処理に移行する。
一方、ステップS314において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS316の処理に移行する。
ステップS315において、マイコンMCPは、number_of_check_fretの値を「1」減算する。
【0089】
ステップS316において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS317において、マイコンMCPは、fret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS318において、マイコンMCPは、カウンタfret_iの値を「1」減算する。
ステップS318の後、マイコンMCPは、ステップS306の処理に移行する。
【0090】
ステップS319において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]に、first_found_scの音高とlast_found_scの音高との中間の値をセットする(fret_sc[gen]=(first_found_sc+last_found_sc)/2)。
ステップS320において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS320の後、マイコンMCPは、押弦状態検出処理を終了する。
【0091】
ステップS321において、マイコンMCPは、今回の押弦状態でフレット群FGBのいずれかのフレットが押されているか否か(fret_in_new[gen]&(0X7F00)≠0であるか否か)の判定を行う。なお、「0X7F00」は、16進数の「7F00」を意味しており、2進数の「111111100000000」を意味している。ステップS321の処理では、fret_in_new[gen]に「0X7F00」が乗算されることで、フレット群FGBのデータが抽出される。
ステップS321において、今回の押弦状態でフレット群FGBのいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS322の処理に移行する。
一方、ステップS321において、今回の押弦状態でフレット群FGBのいずれのフレットも押されていない(NO)と判定した場合、マイコンMCPは、ステップS339の処理に移行する。
【0092】
ステップS322において、マイコンMCPは、音程コードを15フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_mid[gen])。なお、レジスタconst_fret_sc_mid[gen]は、各弦の15フレット位置の音程コードを格納するためのレジスタである。
【0093】
ステップS323において、マイコンMCPは、22フレット分のカウンタfret_iに「15」をセットする(fret_i=15)。
ステップS324において、マイコンMCPは、カウンタfret_iが「4」でないか否か(fret_i≠4)の判定を行う。
ステップS324において、カウンタfret_iが「4」でない(YES)と判定した場合、マイコンMCPは、ステップS325の処理に移行する。
一方、ステップS324において、カウンタfret_iが「4」である(NO)と判定した場合、15フレットから5フレットまでの押弦状態を検出したものとして、マイコンMCPは、ステップS337の処理に移行する。
【0094】
ステップS325において、マイコンMCPは、セーハが行われた場合に押弦状態を検出するフレットの範囲N(ここでは5フレットとする)を含め、フレット群FGBについて押弦フレットを全て検出したか否か(fret_in_new[gen]&(0X7FF0)≠0であるか否か)の判定を行う。なお、「0X7FF0」は、16進数の「7FF0」を意味しており、2進数の「111111110000」を意味している。ステップS325の処理では、fret_in_new[gen]に「0X7FF0」が乗算されることで、フレット群FGBに加え、セーハが行われた場合に押弦状態を検出するフレットの範囲を含むデータが抽出される(
図14参照)。
【0095】
ステップS325において、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群FGBについて押弦フレットを全て検出した(YES)と判定した場合、マイコンMCPは、ステップS326の処理に移行する。
一方、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群FGBについて押弦フレットを全て検出していない(NO)と判定した場合、マイコンMCPは、ステップS337の処理に移行する。
【0096】
ステップS326において、マイコンMCPは、number_of_check_fretがゼロでないか否か(number_of_check_fret≠0であるか否か)の判定を行う。
ステップS326において、number_of_check_fretがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS327の処理に移行する。
一方、ステップS326において、number_of_check_fretがゼロである(NO)と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Nを全て検出したものとして、マイコンMCPは、ステップS337の処理に移行する。
【0097】
ステップS327において、マイコンMCPは、fret_in_tempの最上位桁の数値がゼロでないか否か(fret_in_temp&0X4000≠0であるか否か)の判定を行う。なお、「0X4000」は、16進数の「4000」を意味しており、2進数の「100000000000000」を意味している。ステップS327の処理では、fret_in_new[gen]に「0X4000」が乗算されることで、フレット群FGBに対応する桁のデータのうち、最上位のデータが抽出される。
ステップS327において、fret_in_tempの最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS328の処理に移行する。
一方、ステップS327において、fret_in_tempの最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS332の処理に移行する。
【0098】
ステップS328において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS328において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS329の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップS328において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS331の処理に移行する。
【0099】
ステップS329において、マイコンMCPは、first_found_scにfret_sc_tempの音高のデータをセットする。
ステップS330において、マイコンMCPは、レジスタlast_found_scにfirst_found_scの次のフレット位置(ヘッド側に隣接するフレット位置)の音高のデータをセットする。なお、last_found_scは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップS331において、マイコンMCPは、last_found_scにfret_sc_tempの音高のデータをセットする。
【0100】
ステップS332において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS332において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS333の処理に移行する。
一方、ステップS332において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS334の処理に移行する。
ステップS333において、マイコンMCPは、number_of_check_fretの値を「1」減算する。
【0101】
ステップS334において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS335において、マイコンMCPは、fret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS336において、マイコンMCPは、カウンタfret_iの値を「1」減算する。
ステップS336の後、マイコンMCPは、ステップS324の処理に移行する。
【0102】
ステップS337において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]に、first_found_scの音高とlast_found_scの音高との中間の値をセットする(fret_sc[gen]=(first_found_sc+last_found_sc)/2)。
ステップS338において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS338の後、マイコンMCPは、押弦状態検出処理を終了する。
【0103】
ステップS339において、マイコンMCPは、今回の押弦状態でフレット群FGCのいずれかのフレットが押されているか否か(fret_in_new[gen]&(0XFF)≠0であるか否か)の判定を行う。なお、「0XFF」は、16進数の「FF」を意味しており、2進数の「11111111」を意味している。ステップS117の処理では、fret_in_new[gen]に「0XFF」が乗算されることで、フレット群FGCのデータが抽出される。
ステップS339において、今回の押弦状態でフレット群FGCのいずれかのフレットが押されている(YES)と判定した場合、マイコンMCPは、ステップS340の処理に移行する。
一方、ステップS339において、今回の押弦状態でフレット群FGCのいずれのフレットも押されていない(NO)と判定した場合、マイコンMCPは、ステップS357の処理に移行する。
【0104】
ステップS340において、マイコンMCPは、音程コードを8フレットの位置の音程コードにセットする(fret_sc_temp=const_fret_sc_low[gen])。なお、レジスタconst_fret_sc_low[gen]は、各弦の8フレット位置の音程コードを格納するためのレジスタである。
ステップS341において、マイコンMCPは、22フレット分のカウンタfret_iに「8」をセットする(fret_i=8)。
ステップS342において、マイコンMCPは、カウンタfret_iが「0」でないか否か(fret_i≠0)の判定を行う。
ステップS342において、カウンタfret_iが「0」でない(YES)と判定した場合、マイコンMCPは、ステップS343の処理に移行する。
一方、ステップS342において、カウンタfret_iが「0」である(NO)と判定した場合、8フレットから1フレットまでの押弦状態を検出したものとして、マイコンMCPは、ステップS355の処理に移行する。
【0105】
ステップS343において、マイコンMCPは、セーハが行われた場合に押弦状態を検出するフレットの範囲N(ここでは5フレットとする)を含め、フレット群FGCについて押弦フレットを全て検出したか否か(fret_in_new[gen]&(0XFF)≠0であるか否か)の判定を行う。なお、「0XFF」は、16進数の「FF」を意味しており、2進数の「11111111」を意味している。ステップS343の処理では、fret_in_new[gen]に「0XFF」が乗算されることで、フレット群FGCに加え、セーハが行われた場合に押弦状態を検出するフレットの範囲を含むデータが抽出される(
図14参照)。ただし、本実施形態では、フレット群FGCについては、セーハが行われた場合に押弦状態を検出するフレットの範囲は設定されていない。
ステップS343において、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群FGCについて押弦フレットを全て検出した(YES)と判定した場合、マイコンMCPは、ステップS344の処理に移行する。
一方、セーハが行われた場合に押弦状態を検出するフレットの範囲を含め、フレット群FGCについて押弦フレットを全て検出していない(NO)と判定した場合、マイコンMCPは、ステップS355の処理に移行する。
【0106】
ステップS344において、マイコンMCPは、number_of_check_fretがゼロでないか否か(number_of_check_fret≠0であるか否か)の判定を行う。
ステップS344において、number_of_check_fretがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS345の処理に移行する。
一方、ステップS344において、number_of_check_fretがゼロである(NO)と判定した場合、セーハが行われた場合に押弦状態を検出するフレットの範囲Nを全て検出したものとして、マイコンMCPは、ステップS355の処理に移行する。
【0107】
ステップS345において、マイコンMCPは、fret_in_tempの最上位桁の数値がゼロでないか否か(fret_in_temp&0X80≠0であるか否か)の判定を行う。なお、「0X80」は、16進数の「80」を意味しており、2進数の「10000000」を意味している。ステップS345の処理では、fret_in_new[gen]に「0X80」が乗算されることで、フレット群FGCに対応する桁のデータのうち、最上位のデータが抽出される。
ステップS345において、fret_in_tempの最上位桁の数値がゼロでない(YES)と判定した場合、マイコンMCPは、ステップS346の処理に移行する。
一方、ステップS345において、fret_in_tempの最上位桁の数値がゼロである(NO)と判定した場合、マイコンMCPは、ステップS350の処理に移行する。
【0108】
ステップS346において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS346において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS347の処理に移行する。この場合は、最初にフレットの押弦が検出された状態である。
一方、ステップS346において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS349の処理に移行する。
【0109】
ステップS347において、マイコンMCPは、first_found_scにfret_sc_tempの音高のデータをセットする。
ステップS348において、マイコンMCPは、レジスタlast_found_scにfirst_found_scの次のフレット位置(ヘッド側に隣接するフレット位置)の音高のデータをセットする。なお、last_found_scは、最後に押弦が検出されたフレット位置に対応する音程コードを格納するためのレジスタである。
ステップS349において、マイコンMCPは、last_found_scにfret_sc_tempの音高のデータをセットする。
【0110】
ステップS350において、マイコンMCPは、first_found_scがゼロでないか否か(first_found_sc≠0であるか否か)の判定を行う。
ステップS350において、first_found_scがゼロでない(YES)と判定した場合、マイコンMCPは、ステップS351の処理に移行する。
一方、ステップS350において、first_found_scがゼロである(NO)と判定した場合、マイコンMCPは、ステップS352の処理に移行する。
ステップS351において、マイコンMCPは、number_of_check_fretの値を「1」減算する。
【0111】
ステップS352において、マイコンMCPは、一時格納用レジスタfret_in_tempに格納されているデータを左に1ビットシフトする。即ち、一時格納用レジスタfret_in_tempのデータが、次のフレットを判定するために1ビットシフトされる。
ステップS353において、マイコンMCPは、fret_sc_tempのデータを1フレット分ヘッド側のフレットの音程コードに更新する。
ステップS354において、マイコンMCPは、カウンタfret_iの値を「1」減算する。
ステップS354の後、マイコンMCPは、ステップS342の処理に移行する。
【0112】
ステップS355において、マイコンMCPは、各弦の暫定的な発音用の音程コードを格納するためのレジスタfret_sc[gen]に、first_found_scの音高とlast_found_scの音高との中間の値をセットする(fret_sc[gen]=(first_found_sc+last_found_sc)/2)。
ステップS356において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS356の後、マイコンMCPは、押弦状態検出処理を終了する。
【0113】
ステップS357において、マイコンMCPは、fret_sc[gen]に各弦の開放弦の場合の音程コードを格納するためのレジスタconst_fret_kaiho[gen]の値をセットする(fret_sc[gen]=const_fret_kaiho[gen])。
ステップS358において、マイコンMCPは、前回の押弦状態の検出結果の格納用レジスタfret_in_old[gen]に各弦に対応する押弦状態の検出結果の格納用レジスタfret_in_new[gen]の値をセットする(fret_in_old[gen]=fret_in_new[gen])。
ステップS358の後、マイコンMCPは、押弦状態検出処理を終了する。
【0114】
以上のような処理により、本実施形態に係る電子ギター1では、各弦の各フレット群について、いずれかのフレットが押されているか否かが初めに判定される。そして、ブリッジ側のフレット群から、さらに、ブリッジ側のフレットから順に、押弦状態の判定が行われ、所定のフレット数以内の範囲において、1つの弦について複数の位置で押弦されていることが検出された場合、最初に押弦が検出された弦の位置と最後に押弦が検出された弦の位置との中間位置に対応する音程コードが暫定的な音高とされる。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【0115】
[応用例1]
上述の実施形態において、各弦にスキャンパルスを入力する場合に、スキャンパルスの入力周波数を可聴帯域外(例えば可聴帯域より高い30[KHz]程度)とすることができる。
スキャンパルスの入力周波数が可聴帯域内である場合、ピックアップによって検出される各弦の振動波形の信号に、スキャンパルスに起因するノイズが加わる可能性がある。
したがって、本応用例では、スキャンパルスの入力周波数を可聴帯域外の周波数とする。
ここで、スキャンパルスの入力周波数を30[KHz]とした場合、1つの弦におけるスキャンパルスの印加時間は、例えば5.55[μs]となる。
このように、スキャンパルスの入力周波数を30[KHz]程度とした場合であっても、押弦操作に対する応答性は演奏者にとって必要十分な速度を満たせば良いことから、押弦状態検出処理の実行周期は、スキャンパルスの入力周波数よりも低い周波数で足りる。
押弦状態検出処理の実行周期を、スキャンパルスの入力周波数よりも低い周波数とすることで、電子ギター1における処理負荷を低減することが可能となる。
【0116】
以上述べたように、本実施形態に係る電子ギター1は、フレットスキャン部FSと、マイコンMCPとを備えている。
フレットスキャン部FSは、複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する。
マイコンMCPは、複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、押弦センサの検出結果に基づいて、押弦操作の有無を判定する。
また、マイコンMCPは、押弦操作があると判定された場合に、押弦センサの検出結果に基づいて、グループにおいて押弦操作されたフレット位置を検出する。
これにより、フレットのグループ毎に、いずれかのフレットが押されているか否かが初めに判定され、いずれかのフレットが押されている場合に、グループにおける押弦位置の検出が行われる。
したがって、電子弦楽器における発音をより速やかに行うことが可能となる。
【0117】
マイコンMCPは、高音側のグループから順に、当該グループにおける押弦操作の有無を判定する。
これにより、音高を決定付ける押弦位置を優先して押弦操作の有無を判定できるため、より速やかに、かつ、より適確な音高を設定することができる。
【0118】
マイコンMCPは、グループにおけるフレット位置に加え、セーハが行われた場合に押弦操作を検出する範囲として設定されたフレット位置の範囲において、押弦操作されたフレット位置を検出する。
これにより、セーハが行われた場合であっても、効率的な処理によって、より適確な音高を決定することが可能となる。
【0119】
マイコンMCPは、グループにおける高音側のフレットから順に、押弦操作されたフレット位置を検出する。
これにより、フレットのグループ内において、音高を決定付ける押弦位置を優先して押弦の有無を判定できるため、より速やかに、かつ、より適確な音高を設定することができる。
【0120】
マイコンMCPは、検出されたフレット位置において、最も高音側のフレット位置に対応する音高を設定する。
これにより、高音側から押弦位置を検出して行き、最初に押弦が検出されたフレット位置の音高に設定することができる。そのため、特に、セーハを行わない演奏時における音高をより適確に設定することが可能となる。
【0121】
マイコンMCPは、検出されたフレット位置において、最も高音側のフレット位置に対応する音高と、最も低音側のフレット位置に対応する音高との中間の音高を設定する。
これにより、1つの弦について複数の押弦位置が検出された場合に、それら複数の押弦位置のそれぞれに近い音高に設定することができる。そのため、以後のピッチ抽出による音高の補正の際に、補正量を一定の範囲に抑制することができるため、特に、セーハを行う演奏時における音高をより適確に設定することが可能となる。
【0122】
マイコンMCPは、押弦操作を検出した最も高音側のフレット位置から、低音側の予め設定された範囲のフレット位置までにおいて、押弦操作されたフレット位置を検出する。
これにより、セーハが行われる場合に押弦される可能性のあるフレット位置の範囲に限定して、フレットの押弦位置を検出することができるため、より効率的に音高の設定を行うことが可能となる。
【0123】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の目的を達成できる範囲での変形、改良等は本発明に含まれるものである。
【0124】
上述の実施形態では、22個のフレットをフレット群FGA〜FGCの3つに分けるものとして説明したが、これに限られない。即ち、22個のフレットをより多くのフレット群に分けてもよい。
また、第3実施形態及び第4実施形態において、弾弦された場合の暫定的な音高を決定する際に、最初に押弦が検出されたフレット位置の音高と最後に押弦が検出されたフレット位置の音高との中間の値(fret_sc[gen]=(first_found_sc+last_found_sc)/2)に設定するものとして説明したが、これに限られない。即ち、弾弦された場合の暫定的な音高を決定する場合、最初に押弦が検出されたフレット位置の音高と最後に押弦が検出されたフレット位置の音高との間の値であれば、上述のように算出された中間の値から一定の範囲内の値とすることができる。
【0125】
なお、前記実施例においては、最大ピーク点、最小ピーク点の次のゼロクロス点毎の間隔から周期抽出を行うようにしたが、その他の方式、例えは最大ピーク点間や最小ピーク点間の時間間隔から周期抽出を行ってもよい。また、それに合わせて回路構成は種々変更し得る。
また、前記実施例においては、この発明を電子ギター(ギターシンセサイザ)に適用したものであったが、それに限らない。押弦位置を検出して、押弦位置に応じた音高の楽音を発生するタイプの楽器または装置であれば、種々適用可能である。
【0126】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
換言すると、
図2及び
図4等の構成は例示に過ぎず、特に限定されない。即ち、上述した一連の処理を全体として実行できる機能が電子ギター1に備えられていれば足り、この機能を実現するためにどのような機能構成及び回路構成とするかは特に
図2及び
図4の例に限定されない。
また、1つの機能ブロックは、ハードウェア単体で構成してもよいし、ソフトウェア単体で構成してもよいし、それらの組み合わせで構成してもよい。
【0127】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、コンピュータ等にネットワークや記録媒体からインストールされる。
コンピュータは、専用のハードウェアに組み込まれているコンピュータであってもよい。また、コンピュータは、各種のプログラムをインストールすることで、各種の機能を実行することが可能なコンピュータ、例えば汎用のパーソナルコンピュータであってもよい。
【0128】
このようなプログラムを含む記録媒体は、ユーザにプログラムを提供するために装置本体とは別に配布されるリムーバブルメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される記録媒体等で構成される。リムーバブルメディアは、例えば、磁気ディスク(フロッピディスクを含む)、光ディスク、または光磁気ディスク等により構成される。光ディスクは、例えば、CD−ROM(Compact Disk−Read Only Memory),DVD(Digital Versatile Disk),Blu−ray Disc(ブルーレイディスク)(登録商標)等により構成される。光磁気ディスクは、MD(Mini−Disk)等により構成される。また、装置本体に予め組み込まれた状態でユーザに提供される記録媒体は、例えば、プログラムが記録されているROMやハードディスク等で構成される。
【0129】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【0130】
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【0131】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
[付記1]
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサと、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定手段と、
前記押弦判定手段によって押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出手段と、
を有する電子弦楽器の押弦位置検出装置。
[付記2]
前記押弦判定手段は、高音側の前記グループから順に、当該グループにおける押弦操作の有無を判定する付記1に記載の電子弦楽器の押弦位置検出装置。
[付記3]
前記フレット位置検出手段は、前記グループにおけるフレット位置に加え、セーハが行われた場合に押弦操作を検出する範囲として設定されたフレット位置の範囲において、押弦操作されたフレット位置を検出する付記1または2に記載の電子弦楽器の押弦位置検出装置。
[付記4]
前記フレット位置検出手段は、前記グループにおける高音側のフレットから順に、押弦操作されたフレット位置を検出する付記1から3のいずれか1つに記載の電子弦楽器の押弦位置検出装置。
[付記5]
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高を設定する音高設定手段をさらに有する付記1から4のいずれか1つに記載の電子弦楽器の押弦位置検出装置。
[付記6]
前記フレット位置検出手段によって検出されたフレット位置において、最も高音側のフレット位置に対応する音高と、最も低音側のフレット位置に対応する音高との中間の音高を設定する音高設定手段をさらに有する付記1から4のいずれか1つに記載の電子弦楽器の押弦位置検出装置。
[付記7]
前記フレット位置検出手段は、押弦操作を検出した最も高音側のフレット位置から、低音側の予め設定された範囲のフレット位置までにおいて、押弦操作されたフレット位置を検出する付記6に記載の電子弦楽器の押弦位置検出装置。
[付記8]
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられる押弦位置検出方法であって、前記押弦位置検出装置は、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定し、
押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出する、押弦位置検出方法。
[付記9]
複数の弦が張設された指板部上の複数のフレットにおける押弦操作を検出する押弦センサを有する電子弦楽器の押弦位置検出装置に用いられるコンピュータに、
前記複数のフレットを複数のグループに分類し、当該分類されたグループ毎に、前記押弦センサの検出結果に基づいて、押弦操作の有無を判定する押弦判定ステップと、
前記押弦判定ステップにおいて押弦操作があると判定された場合に、前記押弦センサの検出結果に基づいて、前記グループにおいて押弦操作されたフレット位置を検出するフレット位置検出ステップと、
を実行させるプログラム。