(57)【要約】【課題】  発音遅れを解消する入力制御装置を実現する。【解決手段】  ピッチ抽出部が最大ピーク検出後の波形ゼロクロスに同期した割込み信号ＩＮＴａおよび最小ピーク検出後の波形ゼロクロスに同期した割込み信号ＩＮＴｂを発生する。ＣＰＵ１００は割込み信号ＩＮＴａおよび割込み信号ＩＮＴｂに基づき、弾弦（ピッキング）以前に行われるフレット操作で発生するタッチ音の周期と、弾弦に応じて発生するピッキング音の周期とを計測し、両周期が略一致した時に、その周期に対応した音高の楽音を発音させる。したがって、従来のように、弾弦で生じるピッキング音のピッチ抽出よりも早期に発音ピッチを確定できる結果、発音遅れを解消できる。【選択図】  図１
2006350191.tif 000002
【特許請求の範囲】
【請求項１】
弾弦に先行して行われるフレット操作に応じて発生するタッチ音の周期を検出するタッチ周期検出手段と、
弾弦に応じて発生するピッキング音の周期を検出するピッキング周期検出手段と、
前記タッチ周期検出手段により検出された周期と前記ピッキング周期検出手段により検出された周期とが略一致した場合に、その略一致した周期に対応した音高の楽音の発音を指示する発音指示手段と
を具備することを特徴とする入力制御装置。
【請求項２】
弾弦に先行して行われるフレット操作に応じて発生するタッチ音の周期を検出するタッチ周期検出手段と、
弾弦に応じて発生するピッキング音の半周期を検出するピッキング周期検出手段と、
前記ピッキング周期検出手段により検出されたピッキング音の半周期を２倍した推定周期が、前記タッチ周期検出手段により検出されたタッチ音の周期に略一致した場合に、その推定周期に対応した音高の楽音の発音を指示する発音指示手段と
を具備することを特徴とする入力制御装置。
【請求項３】
前記タッチ周期検出手段は、振幅が所定レベル未満の入力波形を、弾弦に先行して行われるフレット操作に応じて発生するタッチ音として周期検出することを特徴とする請求項１又は２のいずれかに記載の入力制御装置。
【請求項４】
前記ピッキング周期検出手段は、振幅が所定レベル以上の入力波形を、弾弦に応じて発生するピッキング音として周期検出することを特徴とする請求項１又は２のいずれかに記載の入力制御装置。
【請求項５】
前記タッチ周期検出手段は、フレット操作を検出するフレット操作検出手段を備え、このフレット操作検出手段がフレット操作を検出した状態で入力される波形を、弾弦に先行して生じるタッチ音として周期検出することを特徴とする請求項１又は２のいずれかに記載の入力制御装置。
【請求項６】
弾弦に先行して行われるフレット操作に応じて発生するタッチ音の周期を検出するタッチ周期検出処理と、
弾弦に応じて発生するピッキング音の周期を検出するピッキング周期検出処理と、
前記タッチ周期検出処理にて検出された周期と前記ピッキング周期検出処理により検出された周期とが略一致した場合に、その略一致した周期に対応した音高の楽音の発音を指示する発音指示処理と
をコンピュータで実行させることを特徴とする入力制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子ギターに用いて好適な入力制御装置および入力制御プログラムに関する。
【背景技術】
【０００２】
入力される波形信号のピッチを抽出し、抽出したピッチに対応する楽音の発音を指示する入力制御装置が知られている。この種の装置として、例えば特許文献１には、入力波形信号の最大値検出直後の波形ゼロクロス周期と最小値検出直後の波形ゼロクロス周期とを検出し、両周期が略一致した場合にその検出した周期に対応するピッチの楽音の発音を指示したり、あるいは入力波形信号の最大値検出周期と最小値検出周期とを検出し、両周期が略一致した場合にその検出した周期に対応するピッチの楽音の発音を指示する技術が開示されている。
【０００３】
【特許文献１】特開昭６３−１３６０８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の入力制御装置を適用した電子ギターでは、各弦毎に配設されるピックアップコイルにより弾弦（ピッキング）後の弦振動を入力波形信号として検出する。ピッキング後の入力波形信号からピッチ抽出する為には、最低１．５波長分の時間が必要とされる。例えば５弦開放のギター演奏では、１１０Ｈｚのピッキング音となるが、このピッキング音のピッチ抽出に要する時間（１．５波長分）は１３．６３ｍｓｅｃとなり、これにノイズによるエラー訂正等の処理時間を加えると、都合２０ｍｓｅｃ程度のピッチ抽出遅延に成り得る。ピッチ抽出遅延は、発音遅れとして認識され、とりわけピッキング音が低音になるほど顕著になり、ギター演奏に不自然さや違和感を与えてしまうという問題がある。
【０００５】
そこで本発明は、このような事情に鑑みてなされたもので、発音遅れを解消することができる入力制御装置および入力制御プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、請求項１に記載の発明では、弾弦に先行して行われるフレット操作に応じて発生するタッチ音の周期を検出するタッチ周期検出手段と、弾弦に応じて発生するピッキング音の周期を検出するピッキング周期検出手段と、前記タッチ周期検出手段により検出された周期と前記ピッキング周期検出手段により検出された周期とが略一致した場合に、その略一致した周期に対応した音高の楽音の発音を指示する発音指示手段とを具備することを特徴とする。
【０００７】
請求項２に記載の発明では、弾弦に先行して行われるフレット操作に応じて発生するタッチ音の周期を検出するタッチ周期検出手段と、弾弦に応じて発生するピッキング音の半周期を検出するピッキング周期検出手段と、前記ピッキング周期検出手段により検出されたピッキング音の半周期を２倍した推定周期が、前記タッチ周期検出手段により検出されたタッチ音の周期に略一致した場合に、その推定周期に対応した音高の楽音の発音を指示する発音指示手段とを具備することを特徴とする。
【０００８】
上記請求項１又は２のいずれかに従属する請求項３に記載の発明では、前記タッチ周期検出手段は、振幅が所定レベル未満の入力波形を、弾弦に先行して行われるフレット操作に応じて発生するタッチ音として周期検出することを特徴とする。
【０００９】
上記請求項１又は２のいずれかに従属する請求項４に記載の発明では、前記ピッキング周期検出手段は、振幅が所定レベル以上の入力波形を、弾弦に応じて発生するピッキング音として周期検出することを特徴とする。
【００１０】
上記請求項１又は２のいずれかに従属する請求項５に記載の発明では、前記タッチ周期検出手段は、フレット操作を検出するフレット操作検出手段を備え、このフレット操作検出手段がフレット操作を検出した状態で入力される波形を、弾弦に先行して生じるタッチ音として周期検出することを特徴とする請求項１又は２のいずれかに記載の入力制御装置。
【００１１】
請求項６に記載の発明では、弾弦に先行して行われるフレット操作に応じて発生するタッチ音の周期を検出するタッチ周期検出処理と、弾弦に応じて発生するピッキング音の周期を検出するピッキング周期検出処理と、前記タッチ周期検出処理にて検出された周期と前記ピッキング周期検出処理により検出された周期とが略一致した場合に、その略一致した周期に対応した音高の楽音の発音を指示する発音指示処理とをコンピュータで実行させることを特徴とする。
【発明の効果】
【００１２】
請求項１、６に記載の発明によれば、弾弦に先行して行われるフレット操作に応じて発生するタッチ音から検出した周期と、弾弦に応じて発生するピッキング音から検出した周期とが略一致した場合に、その略一致した周期に対応した音高の楽音の発音を指示するので、従来のように、弾弦で生じるピッキング音からのピッチ抽出よりも早期に発音ピッチを確定でき、これにより発音遅れを解消することができる。
【００１３】
請求項２に記載の発明によれば、弾弦に先行して行われるフレット操作に応じて発生するタッチ音から検出した周期と、弾弦に応じて発生するピッキング音の半周期を検出して２倍した推定周期とが略一致した場合に、その推定周期に対応した音高の楽音の発音を指示するので、従来のように、弾弦で生じるピッキング音からのピッチ抽出よりも早期に発音ピッチを確定でき、これにより発音遅れを解消することができる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して本発明の実施の形態について説明する。
Ａ．第１実施形態
（１）構成
図１は本発明の第１実施形態による入力制御装置を備えた電子ギターの要部構成を示すブロック図である。この図において、ピッチ抽出部Ｐ１〜Ｐ６は、各弦に対応して設けられ、入力波形ＰＯの周期計測に必要な各種信号を発生してＣＰＵ１００に供給する。入力波形ＰＯとは、電子ギター本体（不図示）の各弦毎に配設されるピックアップコイルから出力される波形信号を指す。ピッチ抽出部Ｐ１〜Ｐ６は、それぞれ構成要素２〜１４から構成される。
【００１５】
ピッチ抽出部Ｐ１〜Ｐ６において、アンプ２は、ピックアップコイルから供給される入力波形ＰＯをレベル増幅して出力する。ローパスフィルタ（ＬＰＦ）３は、レベル増幅された入力波形ＰＯの高周波成分を除去する。最大ピーク検出回路（ＭＡＸ）４は、入力波形ＰＯの最大ピークを検出して最大ピーク検出信号を発生する。最小ピーク検出回路（ＭＩＮ）５は、入力波形ＰＯの最小ピークを検出して最小ピーク検出信号を発生する。ゼロクロス検出回路（Ｚｅｒｏ）６は、入力波形ＰＯのゼロクロスを検出してゼロクロス検出信号を発生する。
【００１６】
Ａ／Ｄ変換器７は、入力波形ＰＯをＡ／Ｄ変換して入力波形データを出力する。フリップフロップ（ＦＦ）８は、最大ピーク検出回路（ＭＡＸ）４から供給される最大ピーク検出信号の立ち下がりに同期してＨｉｇｈレベルの出力を発生し、ＣＰＵ１００から供給されるクリア信号ＣＬａに同期してその出力をＬｏｗレベルに設定する。フリップフロップ（ＦＦ）１０は、最小ピーク検出回路（ＭＩＮ）５から供給される最小ピーク検出信号の立ち下がりに同期してＨｉｇｈレベルの出力を発生し、ＣＰＵ１００から供給されるクリア信号ＣＬａに同期してその出力をＬｏｗレベルに設定する。
【００１７】
インバータ１０は、ゼロクロス検出回路（Ｚｅｒｏ）６から出力されるゼロクロス検出信号を反転出力する。アンドゲート１１は、フリップフロップ（ＦＦ）８の出力とインバータ１０の出力とのＡＮＤ出力を割込み信号ＩＮＴａとしてＣＰＵ１００に供給する。つまり、アンドゲート１１は、最大ピーク検出後の波形ゼロクロス時点に割込み信号ＩＮＴａをＣＰＵ１００に供給する。なお、ＣＰＵ１００は割込み信号ＩＮＴａの入力に応じて、クリア信号ＣＬａを発生してフリップフロップ（ＦＦ）８に供給する。
【００１８】
アンドゲート１２は、フリップフロップ（ＦＦ）９の出力とゼロクロス検出信号とのアンド出力を割込み信号ＩＮＴｂとしてＣＰＵ１００に供給する。つまり、アンドゲート１２は、最小ピーク検出後の波形ゼロクロス時点に割込み信号ＩＮＴｂをＣＰＵ１００に供給する。なお、ＣＰＵ１００は割込み信号ＩＮＴｂの入力に応じて、クリア信号ＣＬｂを発生してフリップフロップ（ＦＦ）９に供給する。オアゲート１３は、フリップフロップ（ＦＦ）８、９のＯＲ出力をラッチ信号Ｌとしてラッチ回路１４およびＣＰＵ１００に供給する。ラッチ回路１４は、ラッチ信号Ｌが供給される毎、すなわち最大ピーク検出時点もしくは最小ピーク検出時点の入力波形データをラッチしてＣＰＵ１００に供給する。
【００１９】
このように、ピッチ抽出部Ｐ１〜Ｐ６では、例えば図２（ａ）に図示する入力波形ＰＯが供給されると、同図（ｂ）〜（ｄ）に図示するタイミングで生成される最大ピーク検出信号、ゼロクロス検出信号およびフリップフロップ（ＦＦ）８の出力に基づき、同図（ｅ）に図示するように、最大ピーク検出後の波形ゼロクロスに同期した割込み信号ＩＮＴａをＣＰＵ１００に供給する。また、図示していないが、最小ピーク検出信号、ゼロクロス検出信号およびフリップフロップ（ＦＦ）９の出力に基づき、最小ピーク検出後の波形ゼロクロスに同期した割込み信号ＩＮＴｂをＣＰＵ１００に供給する。さらに、ラッチ回路１４が最大ピーク検出時点もしくは最小ピーク検出時点の入力波形データをＣＰＵ１００に供給するようになっている。
【００２０】
再び図１を参照して第１実施形態の構成を説明する。ＣＰＵ１００は、ピッチ抽出部Ｐ１〜Ｐ６からそれぞれ供給される各信号（割込み信号ＩＮＴａ、ＩＮＴｂおよび入力波形データＤＡＴＡ）に基づき各弦毎の発音又は消音を音源１０４に指示する。具体的には、入力波形データＤＡＴＡが所定レベルを超えた時に、割込み信号ＩＮＴａ、ＩＮＴｂの発生周期で定まる音高の楽音の発音を音源１０４に指示する一方、入力波形データＤＡＴＡが所定レベル以下になった時に、音源１０４に消音を指示する。
【００２１】
このようなＣＰＵ１００の処理において、本発明の特徴は、弾弦（ピッキング）以前に行われるフレット操作（弦を指で抑えて音高指定する操作）の時に、弦がフレットに接触して発生する所謂「タッチ音」の入力波形ＰＯをピッチ抽出に用いることにある。このようにすることによって、弾弦で生じるピッキング音からのピッチ抽出よりも早期に発音ピッチを確定できる結果、発音遅れを解消するようになっている。こうしたＣＰＵ１００の処理動作の詳細については追って述べる。
【００２２】
ＲＯＭ１０２は、ＣＰＵ１００が実行する各種制御プログラムの他、ピッチ変換テーブルを記憶する。ＲＯＭ１０２に記憶される各種制御プログラムとは、後述するメインルーチン、ｎ弦処理、ＩＮＴａ割込み処理およびＩＮＴｂ割込み処理を含む。また、ＲＯＭ１０２に記憶されるピッチ変換テーブルとは、割込み信号ＩＮＴａ、ＩＮＴｂの発生周期を読み出しアドレスとして、対応するピッチ（音高）を読み出すデータテーブルである。
【００２３】
ＲＡＭ１０３は、バッファエリアおよびワークエリアを備える。ＲＡＭ１０３のバッファエリアには、ピッチ抽出部Ｐ１〜Ｐ６から取り込む入力波形データＤＡＴＡが格納される。ＲＡＭ１０３のワークエリアには、割込み信号ＩＮＴａ、ＩＮＴｂの発生周期を計時するカウンタとして機能するタイマレジスタ等の各種レジスタやフラグが一時記憶される。音源１０４は周知の波形メモリ読み出し方式で構成され、ＣＰＵ１００から供給される演奏情報に応じた楽音データを発生する。サウンドシステム１０５は、音源７から出力される楽音データをアナログ変換した後、信号増幅したり、不要ノイズ等を除去するフィルタリングを施してスピーカから放音させる。
【００２４】
（２）動作
次に、図３〜図８を参照して第１実施形態の動作を説明する。以下では、最初にメインルーチンの動作について説明した後、ＩＮＴａ割込み処理、ＩＮＴｂ割込み処理およびｎ弦処理の各動作について説明する。
【００２５】
＜メインルーチンの動作＞
上記構成による電子ギターに電源が投入されると、ＣＰＵ１００は図３に図示するメインルーチンを実行してステップＳＡ１に処理を進め、ＲＡＭ１０３に設けられる各種レジスタ・フラグ類をゼロリセットしたり、あるいは初期値セットするイニシャライズを行った後、ステップＳＡ２に処理を進める。ステップＳＡ２では、処理対象となる弦を指定するポインタｎに「１」をセットする。次いで、ステップＳＡ３では、ポインタｎの値で指定される弦の状態に応じた演奏情報を発生して音源１０４に与えるｎ弦処理を実行する。ｎ弦処理の詳細については後述する。
【００２６】
そして、ｎ弦処理が完了すると、ステップＳＡ４に進み、ポインタｎをインクリメントして歩進させ、続くステップＳＡ５では、歩進されたポインタｎの値が「６」を超えたか、つまり、第１弦から第６弦までの全ての弦について処理し終えたか否かを判断する。全ての弦について処理し終えていなければ、判断結果が「ＮＯ」となり、ステップＳＡ３に処理を戻す。以後、全ての弦について処理し終えるまでステップＳＡ３〜ＳＡ５を繰り返す。そして、全ての弦について処理し終えると、上記ステップＳＡ５の判断結果が「ＹＥＳ」となり、上述のステップＳＡ２に処理を戻して再び第１弦からｎ弦処理を行う。以後、電源スイッチがオフ操作されるまで、第１弦〜第６弦について順次ｎ弦処理を繰り返す。
【００２７】
＜ＩＮＴａ割込み処理の動作＞
次に、図４を参照してＩＮＴａ割込み処理の動作を説明する。上述のメインルーチン実行中にピッチ抽出部側から割込み信号ＩＮＴａが供給されると、ＣＰＵ１００は図４に図示するＩＮＴａ割込み処理を実行してステップＳＢ１に処理を進める。ステップＳＢ１では、クリア信号ＣＬａを発生してピッチ抽出部のフリップフロップ（ＦＦ）８をリセットすると共に、割込み信号ＩＮＴａの発生タイミングを計時するカウンタの値を読み込む。
【００２８】
続いて、ステップＳＢ２では、カウンタ値読み込みが１回目でないか否かを判断する。カウンタ値の読み込みが初回であると、判断結果は「ＮＯ」になり、ステップＳＢ７に進み、フラグＦＦに「１」をセットする一方、カウンタをクリアして本処理を終える。これにより、初回の割込み信号ＩＮＴａが供給された場合、ＣＰＵ１００は、最大ピーク検出後の波形ゼロクロス時点のカウンタ値を保持する。なお、上記フラグＦＦは、「１」の場合にＩＮＴａ割込み処理完了を表し、「０」の場合に後述のＩＮＴｂ割込み処理完了を表す。
【００２９】
さて一方、カウンタ値の読み込みが初回以降であると、上記ステップＳＢ２の判断結果が「ＹＥＳ」となり、ステップＳＢ３に進む。ステップＳＢ３では、フラグＦＦが「０」であるか否かを判断する。フラグＦＦは、ＩＮＴａ割込み処理による周期計測が行われた時に「１」となり、ＩＮＴｂ割込み処理による周期計測が行われた時に「０」となるフラグである。また、図２（ｅ）に図示するように、周期ｔ１を計測するＩＮＴａ割込み処理と、周期ｔ２を計測するＩＮＴｂ割込み処理とは、理想的には交互に行われる。したがって、ＩＮＴａ割込み処理とＩＮＴｂ割込み処理とが順当に実行されると、フラグＦＦはその都度反転するが、例えば入力波形ＰＯにノイズが重畳する等して最大ピークあるいは最小ピークの検出が行えない状況であれば、ＩＮＴａ割込み処理とＩＮＴｂ割込み処理とが交互に実行されない事態も起こり得る。そこで、ステップＳＢ３では、フラグＦＦが「０」であるか否かで順当にＩＮＴｂ割込み処理が実行されたかどうかを判断している。
【００３０】
順当にＩＮＴｂ割込み処理が実行されていなければ、フラグＦＦは「１」のままだから、上記ステップＳＢ３の判断結果は「ＮＯ」になり、この場合、周期計測不可と見做して何も行わずに本処理を完了させる。これに対し、順当にＩＮＴｂ割込み処理が実行されていると、後述するように、フラグＦＦは「０」にセットされるので、上記ステップＳＢ３の判断結果が「ＹＥＳ」になり、ステップＳＢ４に進む。
【００３１】
ステップＳＢ４では、前回取り込んだカウンタ値と今回取り込んだカウンタ値とに応じて割込み信号ＩＮＴａの発生周期を算出し、続くステップＳＢ５では、算出した周期をレジスタＴＩＭＥ１にストアする。そして、ステップＳＢ６では、割込み信号ＩＮＴａの周期計測が適正に行われた旨を表す為にフラグＴＩＭＥ１Ｆに「１」をセットする。この後、ステップＳＢ７に進み、ＩＮＴａ割込み処理完了を表す為にフラグＦＦに「１」をセットすると共に、カウンタをクリアして本処理を終える。
【００３２】
＜ＩＮＴｂ割込み処理の動作＞
次に、図５〜図６を参照してＩＮＴｂ割込み処理の動作を説明する。前述のメインルーチン実行中にピッチ抽出部側から割込み信号ＩＮＴｂが供給されると、ＣＰＵ１００は図５に図示するＩＮＴａ割込み処理を実行してステップＳＣ１に処理を進める。ステップＳＣ１では、クリア信号ＣＬｂを発生してピッチ抽出部のフリップフロップ（ＦＦ）９をリセットすると共に、割込み信号ＩＮＴｂの発生タイミングを計時するカウンタの値を読み込む。続いて、ステップＳＣ２では、カウンタ値読み込みが１回目でないか否かを判断する。カウンタ値の読み込みが初回であると、その判断結果は「ＮＯ」になり、後述するステップＳＣ７に進む。
【００３３】
一方、カウンタ値の読み込みが初回以降であると、上記ステップＳＣ２の判断結果が「ＹＥＳ」となり、ステップＳＣ３に進む。ステップＳＣ３では、上述したＩＮＴａ割込み処理と同様、フラグＦＦが「１」であるか否かで順当にＩＮＴａ割込み処理が実行されたかどうかを判断する。順当にＩＮＴａ割込み処理が実行されていなければ、フラグＦＦは「０」のままだから、上記ステップＳＣ３の判断結果は「ＮＯ」になり、この場合、周期計測不可と見做して何も行わずに本処理を完了させる。
【００３４】
これに対し、順当にＩＮＴａ割込み処理が実行されていると、前述したステップＳＢ７（図４参照）によりフラグＦＦは「１」にセットされる為、上記ステップＳＣ３の判断結果が「ＹＥＳ」になり、ステップＳＣ４に進む。ステップＳＣ４では、前回取り込んだカウンタ値と今回取り込んだカウンタ値とに応じて割込み信号ＩＮＴｂの発生周期を算出し、続くステップＳＣ５では、算出した周期をレジスタＴＩＭＥ２にストアする。そして、ステップＳＣ６では、割込み信号ＩＮＴｂの周期計測が適正に行われた旨を表す為にフラグＴＩＭＥ２Ｆに「１」をセットする。この後、ステップＳＣ７に進み、ＩＮＴｂ割込み処理完了を表す為にフラグＦＦをゼロリセットすると共に、カウンタをクリアする。
【００３５】
次いで、図６に図示するステップＳＣ８に進み、フラグＤＡＮＧＥＮＦが「０」であるか否かを判断する。フラグＤＡＮＧＥＮＦとは、後述するように、入力波形データＤＡＴＡが所定レベルＶ１以上の場合に「１」となるフラグである。換言すれば、弾弦（ピッキング）操作によるピッキング音が生じた状態では「１」、弾弦に先行して行われるフレット操作で弦がフレットに接触してタッチ音が生じた状態では「０」になるフラグである。したがって、このステップＳＣ８では、ピッキング音が生じている状態あるいはタッチ音が生じている状態のいずれであるかを判断する。
【００３６】
そして、ピッキング音が生じている状態であれば、上記ステップＳＣ８の判断結果は「ＮＯ」になり、本処理を完了させる。これに対し、タッチ音が生じている状態であると、上記ステップＳＣ８の判断結果は「ＹＥＳ」になり、ステップＳＣ９に進む。ステップＳＣ９では、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆが共に「１」、つまり割込み信号ＩＮＴａ、ＩＮＴｂの各周期が計測済みであるか否かを判断する。両周期が計測済みでなければ、判断結果は「ＮＯ」になり、本処理を完了させるが、両周期が計測済みであると、判断結果が「ＹＥＳ」となり、ステップＳＣ１０に進む。ステップＳＣ１０では、レジスタＴＩＭＥ１に格納される割込み信号ＩＮＴａの周期と、レジスタＴＩＭＥ２に格納される割込み信号ＩＮＴｂの周期とが略一致するかどうかを判断する。
【００３７】
両周期が略一致しない場合には、判断結果が「ＮＯ」となり、後述のステップＳＣ１３に進む。これに対し、両周期が略一致した場合には、判断結果が「ＹＥＳ」になり、ステップＳＣ１１に進み、レジスタＴＩＭＥ１に格納される割込み信号ＩＮＴａの周期を、レジスタＴＩＭＥにストアする。次いで、ステップＳＣ１２では、フラグＴＯＵＣＨＦに「１」をセットする。これにより、弾弦に先行するフレット操作で生じたタッチ音に基づきピッチ抽出（周期計測）が完了した旨を表す。この後、ステップＳＣ１３，ＳＣ１４にてフラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして本処理を終える。
【００３８】
＜ｎ弦処理の動作＞
次に、図７〜図８を参照してｎ弦処理の動作を説明する。上述したメインルーチンのステップＳＡ３（図３参照）を介して本処理が実行されると、ＣＰＵ１００は図７に図示するステップＳＤ１に進み、ポインタｎの値に対応したピッチ抽出部Ｐｎ（ｎ＝１〜６）のラッチ回路１４から入力波形データＤＡＴＡを取り込み、ＲＡＭ１０３のバッファエリアに格納する。続いて、ステップＳＤ２では、フラグＤＡＮＧＥＮＦが「０」であるか否か、すなわち前述したように、ピッキング音が生じている状態（ＤＡＮＧＥＮＦ＝１）あるいはタッチ音が生じている状態（ＤＡＮＧＥＮＦ＝０）のいずれであるかを判断する。
【００３９】
タッチ音が生じている状態であると、判断結果は「ＹＥＳ」になり、ステップＳＤ３に進む。ステップＳＤ３では、入力波形データＤＡＴＡの波形レベルが所定値Ｖ１以上であるか否かを判断する。弾弦操作されず、入力波形データＤＡＴＡの波形レベルが所定値Ｖ１以上に達していなければ、ここでの判断結果は「ＮＯ」になり、一旦本処理を完了させる。
【００４０】
一方、タッチ音が生じている状態から弾弦操作によりピッキング音が生じる状態に変化し、これにより入力波形データＤＡＴＡの波形レベルが所定値Ｖ１以上に達した場合には、上記ステップＳＤ３の判断結果が「ＹＥＳ」になり、ステップＳＤ４に進み、フラグＤＡＮＧＥＮＦに「１」をセットする。そして、ステップＳＤ５では、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして本処理を一旦完了させる。
【００４１】
さて、こうして弾弦操作に応じて、フラグＤＡＮＧＥＮＦが「１」にセットされた状態で本処理が実行されると、上述したステップＳＤ２の判断結果が「ＮＯ」となり、ステップＳＤ６に処理を進める。ステップＳＤ６では、フラグＯＮＦが「１」、すなわち音源１０４が発音中であるかどうかを判断する。以下、音源１０４が発音中でない場合と、発音中の場合とに分けて動作を説明する。
【００４２】
ａ．音源１０４が発音中でない場合
この場合、ステップＳＤ６の判断結果が「ＮＯ」になり、図８に図示するステップＳＤ１１に進む。ステップＳＤ１１では、フラグＴＯＵＣＨＦが「１」であるか否か、すなわち弾弦（ピッキング）に先行したフレット操作で生じるタッチ音からピッチ抽出済みの場合（フラグＴＯＵＣＨＦ＝１）、あるいは弾弦で生じたピッキング音からピッチ抽出する場合（フラグＴＯＵＣＨＦ＝０）のいずれであるかを判断する。以下、タッチ音からピッチ抽出済みの場合と、弾弦で生じたピッキング音からピッチ抽出する場合とに分けて動作を説明する。
【００４３】
ａ−１．タッチ音からピッチ抽出済みの場合
タッチ音からピッチ抽出し終えていると、上記ステップＳＤ１１の判断結果が「ＹＥＳ」になり、ステップＳＤ１２に進む。ステップＳＤ１２では、フラグＴＩＭＥ１Ｆが「１」であるか否か、すなわち弾弦によりフラグＤＡＮＧＥＮＦが「１」となった状態下で、前述のＩＮＴａ割込み処理（図４参照）が適正に周期計測を行ったかどうかを判断する。ＩＮＴａ割込み処理が適正に周期計測できず、フラグＴＩＭＥ１Ｆが「０」であると、ここでの判断結果は「ＮＯ」になり、後述のステップＳＤ１７に処理を進める。
【００４４】
一方、ＩＮＴａ割込み処理（図４参照）が適正に周期計測を行っていれば、上記ステップＳＤ１２の判断結果は「ＹＥＳ」になり、ステップＳＤ１３に進む。ステップＳＤ１３では、タッチ音から抽出した周期（レジスタＴＩＭＥの値）と、ＩＮＴａ割込み処理が弾弦で生じたピッキング音から抽出した周期（レジスタＴＩＭＥ１の値）とが略一致するか否かを判断する。タッチ音から抽出した周期とピッキング音から抽出した周期とが略一致しなければ、判断結果は「ＮＯ」になり、後述のステップＳＤ１７に処理を進める。
【００４５】
これに対し、タッチ音から抽出した周期とピッキング音から抽出した周期とが略一致すると、上記ステップＳＤ１３の判断結果が「ＹＥＳ」になり、ステップＳＤ１４に進む。ステップＳＤ１４では、レジスタＴＩＭＥに格納される周期に対応した音高をＲＯＭ１０２に記憶されるピッチ変換テーブルから読み出し、読み出した音高の楽音の発音開始を音源１０４に指示する。これにより、音源１０４は、タッチ音から抽出した周期に対応するピッチの楽音を発音する。したがって、従来のように、弾弦で生じたピッキング音からのピッチ抽出よりも早期に発音ピッチを確定できる為、発音遅れを解消し得るようになる。
【００４６】
こうして、発音開始を指示し終えると、ＣＰＵ１００はステップＳＤ１５に進み、フラグＯＮＦに「１」をセットして発音中である旨を表す。そして、ステップＳＤ１６〜ＳＤ１７では、発音ピッチが確定したことを表す為、フラグＤＡＮＧＥＮＦ、フラグＴＯＵＣＨＦ、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして本処理を終える。
【００４７】
ａ−２．弾弦で生じたピッキング音からピッチ抽出する場合
弾弦で生じたピッキング音からピッチ抽出する場合には、上記ステップＳＤ１１の判断結果が「ＮＯ」になり、ステップＳＤ１８に進む。ステップＳＤ１８では、フラグＴＩＭＥ１Ｆが「１」であるか否か、すなわち弾弦によりフラグＤＡＮＧＥＮＦが「１」となった状態下で、前述のＩＮＴａ割込み処理（図４参照）が適正に周期計測を行ったかどうかを判断する。ＩＮＴａ割込み処理が適正に周期計測できず、フラグＴＩＭＥ１Ｆが「０」であると、判断結果は「ＮＯ」になり、前述のステップＳＤ１７を介して本処理を完了させる。
【００４８】
ＩＮＴａ割込み処理が適正に周期計測を行っていれば、上記ステップＳＤ１８の判断結果が「ＹＥＳ」になり、ステップＳＤ１９に進む。ステップＳＤ１９では、フラグＴＩＭＥ２Ｆが「１」であるか否か、すなわち弾弦によりフラグＤＡＮＧＥＮＦが「１」となった状態下で、前述のＩＮＴｂ割込み処理（図５〜図６参照）が適正に周期計測を行ったかどうかを判断する。ＩＮＴｂ割込み処理が適正に周期計測できず、フラグＴＩＭＥ２Ｆが「０」であると、判断結果は「ＮＯ」になり、前述のステップＳＤ１７を介して本処理を完了させる。
【００４９】
ＩＮＴｂ割込み処理が適正に周期計測を行っていれば、上記ステップＳＤ１９の判断結果は「ＹＥＳ」になり、ステップＳＤ２０に進む。ステップＳＤ２０では、ＩＮＴａ割込み処理にて計測された周期（レジスタＴＩＭＥ１の値）と、ＩＮＴｂ割込み処理にて計測された周期（レジスタＴＩＭＥ２の値）とが略一致するか否かを判断する。両周期が略一致しなければ、判断結果は「ＮＯ」になり、前述のステップＳＤ１７を介して本処理を完了させる。
【００５０】
一方、ＩＮＴａ割込み処理にて計測された周期とＩＮＴｂ割込み処理にて計測された周期とが略一致すると、上記ステップＳＤ２０の判断結果が「ＹＥＳ」になり、ステップＳＤ２１に進み、レジスタＴＩＭＥ１に格納される周期に対応した音高をＲＯＭ１０２に記憶されるピッチ変換テーブルから読み出し、読み出した音高の楽音の発音開始を音源１０４に指示する。これにより、音源１０４は、ピッキング音から抽出した周期に対応するピッチの楽音を発音する。この後、前述したステップＳＤ１５〜ＳＤ１７を実行し、フラグＯＮＦに「１」をセットして発音中である旨を表すと共に、フラグＤＡＮＧＥＮＦ、フラグＴＯＵＣＨＦ、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして発音ピッチの確定を表してから本処理を終える。
【００５１】
ｂ．音源１０４が発音中の場合
さて、以上のようにして音源１０４が発音を開始した後に本処理が実行されると、前述したステップＳＤ６（図７参照）の判断結果が「ＹＥＳ」になり、ステップＳＤ７に処理を進め、入力波形データＤＡＴＡの波形レベルが所定値Ｖ２以下であるか否かを判断する。入力波形データＤＡＴＡの波形レベルが所定値Ｖ２以下であると、判断結果は「ＹＥＳ」になり、ステップＳＤ８に進み、音源１０４に消音を指示する。そして、ステップＳＤ９では、消音に応じてフラグＯＮＦをゼロリセットして本処理を終える。これに対し、入力波形データＤＡＴＡの波形レベルが所定値Ｖ２を超えていると、上記ステップＳＤ７の判断結果は「ＮＯ」となり、ステップＳＤ１０に進み、波形読み出し周波数を一定にして持続音発音させる周波数制御を音源１０４に指示して本処理を完了させる。
【００５２】
このように、第１実施形態では、弾弦に先行して行われるフレット操作で発生するタッチ音から抽出した周期と、弾弦に応じて発生するピッキング音から抽出した周期とが略一致した時に、その周期に対応した音高の楽音を発音させるので、従来のように、弾弦で生じるピッキング音からのピッチ抽出よりも早期に発音ピッチを確定できる結果、発音遅れを解消することが可能になる。
【００５３】
Ｂ．第２実施形態
次に、図９〜図１３を参照して第２実施形態について説明する。第２実施形態の構成は、前述した第１実施形態の構成（図１参照）において、波形ゼロクロス毎に計時して入力波形ＰＯの半周期を計測するカウンタｃを新たに設けたものである。
【００５４】
上述した第１実施形態では、弾弦に先行して行われるフレット操作で発生するタッチ音から抽出した周期と、弾弦に応じて発生するピッキング音から抽出した周期とが略一致した時に、その周期に対応した音高の楽音を発音させる。これに対し、第２実施形態では、上記カウンタｃを用いてピッキング音の半周期を計測し、それを２倍して得るピッキング音の推定周期がタッチ音から抽出した周期に略一致した時に、推定周期に対応した音高の楽音を発音させる。
【００５５】
以下では、こうした動作を具現する第２実施形態によるＩＮＴａ割込み処理、ＩＮＴｂ割込み処理およびｎ弦処理について説明する。なお、第２実施形態のメインルーチンは、前述した第１実施形態と共通するので、その説明については省略する。
【００５６】
＜ＩＮＴａ割込み処理の動作＞
図９を参照して第２実施形態によるＩＮＴａ割込み処理の動作を説明する。前述した第１実施形態と同様、メインルーチン実行中にピッチ抽出部側から割込み信号ＩＮＴａが供給されると、ＣＰＵ１００は図９に図示するＩＮＴａ割込み処理を実行してステップＳＥ１に処理を進める。ステップＳＥ１では、クリア信号ＣＬａを発生してピッチ抽出部のフリップフロップ（ＦＦ）８をリセットすると共に、割込み信号ＩＮＴａの発生タイミングを計時するカウンタａの値を読み込む。続いて、ステップＳＥ２では、カウンタ値読み込みが１回目でないか否かを判断する。ここで、カウンタ値の読み込みが初回であると、判断結果は「ＮＯ」になり、後述するステップＳＥ７に進む。
【００５７】
一方、カウンタ値の読み込みが初回以降であると、上記ステップＳＥ２の判断結果が「ＹＥＳ」となり、ステップＳＥ３に進む。ステップＳＥ３では、フラグＦＦが「０」であるか否かを判断する。フラグＦＦは、ＩＮＴａ割込み処理による周期計測が行われた時に「１」となり、ＩＮＴｂ割込み処理による周期計測が行われた時に「０」となるフラグである。また、図２（ｅ）に図示するように、周期ｔ１を計測するＩＮＴａ割込み処理と、周期ｔ２を計測するＩＮＴｂ割込み処理とは、理想的には交互に行われる。したがって、ＩＮＴａ割込み処理とＩＮＴｂ割込み処理とが順当に実行されると、フラグＦＦはその都度反転するが、例えば入力波形ＰＯにノイズが重畳する等して最大ピークあるいは最小ピークの検出が行えない状況であれば、ＩＮＴａ割込み処理とＩＮＴｂ割込み処理とが交互に実行されない事態も起こり得る。そこで、ステップＳＥ３では、フラグＦＦが「０」であるか否かで順当にＩＮＴｂ割込み処理が実行されたかどうかを判断している。
【００５８】
順当にＩＮＴｂ割込み処理が実行されていなければ、フラグＦＦは「１」のままだから、上記ステップＳＢ３の判断結果は「ＮＯ」になり、この場合、周期計測不可と見做して何も行わずに本処理を完了させる。これに対し、順当にＩＮＴｂ割込み処理が実行されていると、後述するように、フラグＦＦは「０」にセットされるので、上記ステップＳＥ３の判断結果は「ＹＥＳ」になり、ステップＳＥ４に進む。
【００５９】
ステップＳＥ４では、前回取り込んだカウンタａの値と今回取り込んだカウンタａの値とに応じて割込み信号ＩＮＴａの発生周期を算出し、続くステップＳＥ５では、算出した周期をレジスタＴＩＭＥ１にストアする。そして、ステップＳＥ６では、割込み信号ＩＮＴａの周期計測が適正に行われた旨を表す為にフラグＴＩＭＥ１Ｆに「１」をセットする。次いで、ステップＳＦ７では、ＩＮＴａ割込み処理完了を表す為にフラグＦＦに「１」をセットすると共に、カウンタａをクリアする。
【００６０】
そして、ステップＳＥ８に進むと、フラグＤＡＮＧＥＮＦが「０」であるか否か、すなわちピッキング音が生じている状態あるいはタッチ音が生じている状態のいずれであるかを判断する。タッチ音が生じている状態（ＤＡＮＧＥＮＦ＝０）であると、判断結果は「ＮＯ」になり、本処理を終えるが、ピッキング音が生じている状態（ＤＡＮＧＥＮＦ＝１）であれば、上記ステップＳＥ８の判断結果は「ＹＥＳ」になり、ステップＳＥ９に進む。
【００６１】
ステップＳＥ９では、フラグＯＮＦが「０」、つまり発音中であるか否かを判断する。発音中であると、判断結果は「ＮＯ」になり、本処理を終える。一方、発音中でなければ、判断結果が「ＹＥＳ」になり、ステップＳＥ１０に進み、前回の波形ゼロクロス時点で計測したカウンタｃの値から今回の波形ゼロクロス時点で計測したカウンタｃの値を減算してピッキング音の半周期を算出する。そして、ステップＳＥ１１では、計測したピッキング音の半周期をレジスタＴＩＭＥにストアし、続くステップＳＥ１２では、カウンタｃをクリアして本処理を終える。
【００６２】
このように、ＩＮＴａ割込み処理は、最大ピーク検出後の波形ゼロクロス毎に発生する割込み信号ＩＮＴａの発生周期からタッチ音の周期ＴＩＭＥ１を検出すると共に、弾弦操作によるピッキング音が生じた状態下では、ピッキング音の波形ゼロクロス間隔を計時してピッキング音の半周期ＴＩＭＥを検出するようになっている。
【００６３】
＜ＩＮＴｂ割込み処理の動作＞
次に、図１０〜図１１を参照して第２実施形態によるＩＮＴｂ割込み処理の動作を説明する。第１実施形態と同様、メインルーチン実行中にピッチ抽出部側から割込み信号ＩＮＴｂが供給されると、ＣＰＵ１００は図１０に図示するＩＮＴｂ割込み処理を実行してステップＳＦ１に処理を進める。ステップＳＦ１では、クリア信号ＣＬｂを発生してピッチ抽出部のフリップフロップ（ＦＦ）９をリセットすると共に、割込み信号ＩＮＴｂの発生タイミングを計時するカウンタｂの値を読み込む。続いて、ステップＳＦ２では、カウンタ値読み込みが１回目でないか否かを判断する。カウンタ値の読み込みが初回であると、判断結果は「ＮＯ」になり、後述するステップＳＦ７に進む。
【００６４】
一方、カウンタ値の読み込みが初回以降であれば、上記ステップＳＦ２の判断結果は「ＹＥＳ」となり、ステップＳＦ３に進む。ステップＳＦ３では、上述したＩＮＴａ割込み処理と同様、フラグＦＦが「１」であるか否かで順当にＩＮＴｂ割込み処理が実行されたかどうかを判断する。順当にＩＮＴａ割込み処理が実行されていなければ、フラグＦＦは「０」のままだから、上記ステップＳＦ３の判断結果は「ＮＯ」になり、この場合、周期計測不可と見做して何も行わずに本処理を完了させる。
【００６５】
順当にＩＮＴａ割込み処理が実行された場合には、前述したステップＳＥ７（図９参照）によりフラグＦＦは「１」にセットされるので、上記ステップＳＦ３の判断結果は「ＹＥＳ」になり、ステップＳＦ４に進む。ステップＳＦ４では、前回取り込んだカウンタｂの値と今回取り込んだカウンタｂの値とに応じて割込み信号ＩＮＴｂの発生周期を算出し、続くステップＳＦ５では、算出した周期をレジスタＴＩＭＥ２にストアする。そして、ステップＳＦ６では、割込み信号ＩＮＴｂの周期計測が適正に行われた旨を表す為にフラグＴＩＭＥ２Ｆに「１」をセットする。次いで、ステップＳＦ７では、ＩＮＴｂ割込み処理完了を表す為にフラグＦＦをゼロリセットすると共に、カウンタｂをクリアする。
【００６６】
続いて、ステップＳＦ８では、フラグＤＡＮＧＥＮＦが「０」であるか否か、すなわちピッキング音が生じている状態あるいはタッチ音が生じている状態のいずれであるかを判断する。ピッキング音が生じている状態（ＤＡＮＧＥＮＦ＝１）であると、判断結果は「ＮＯ」になり、ステップＳＦ１０に進む。ステップＳＦ１０では、前回の波形ゼロクロス時点で計測したカウンタｃの値から今回の波形波形ゼロクロス時点で計測したカウンタｃの値を減算してピッキング音の半周期を算出する。そして、ステップＳＦ１１では、計測したピッキング音の半周期をレジスタＴＩＭＥにストアする。次いで、ステップＳＦ１２では、カウンタｃをクリアして本処理を終える。
【００６７】
これに対し、タッチ音が生じている状態（ＤＡＮＧＥＮＦ＝０）であれば、上記ステップＳＦ８の判断結果は「ＹＥＳ」になり、ステップＳＦ９に進む。ステップＳＦ９では、フラグＯＮＦが「０」、つまり発音中であるか否かを判断する。発音中であれば、判断結果が「ＮＯ」になり、本処理を終えるが、発音中でないと、判断結果は「ＹＥＳ」になり、図１１に図示するステップＳＦ１３に進む。ステップＳＦ１３では、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆが共に「１」、つまり割込み信号ＩＮＴａ、ＩＮＴｂの各周期が計測済みであるか否かを判断する。両周期が計測済みでなければ、判断結果は「ＮＯ」になり、本処理を完了させる。
【００６８】
一方、割込み信号ＩＮＴａ、ＩＮＴｂの各周期が計測済みであると、上記ステップＳＦ１３の判断結果が「ＹＥＳ」となり、ステップＳＦ１４に進む。ステップＳＦ１４では、レジスタＴＩＭＥ１に格納される割込み信号ＩＮＴａの周期と、レジスタＴＩＭＥ２に格納される割込み信号ＩＮＴｂの周期とが略一致するかどうかを判断する。両周期が略一致しない場合には、判断結果が「ＮＯ」となり、本処理を完了させる。
【００６９】
これに対し、両周期が略一致すると、上記ステップＳＦ１４の判断結果が「ＹＥＳ」になり、ステップＳＦ１５に進み、フラグＴＯＵＣＨＦに「１」をセットする。これにより、弾弦（ピッキング）に先行するフレット操作で生じたタッチ音に基づきピッチ抽出（周期計測）が完了した旨を表す。この後、ステップＳＦ１６，ＳＦ１７にてフラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして本処理を終える。
【００７０】
このように、ＩＮＴｂ割込み処理は、最小ピーク検出後の波形ゼロクロス毎に発生する割込み信号ＩＮＴｂの発生周期からタッチ音の周期ＴＩＭＥ２を検出し、この周期ＴＩＭＥ２がＩＮＴａ割込み処理にて検出されたタッチ音の周期ＴＩＭＥ１と略一致すると、フラグＴＯＵＣＨＦに「１」をセットしてタッチ音に基づきピッチ抽出完了を表す。また、弾弦操作によるピッキング音が生じた状態下では、ピッキング音の波形ゼロクロス間隔を計時してピッキング音の半周期ＴＩＭＥを検出するようになっている。
【００７１】
＜ｎ弦処理の動作＞
次に、図１２〜図１３を参照して第２実施形態によるｎ弦処理の動作を説明する。第１実施形態と同様、メインルーチンのステップＳＡ３（図３参照）を介して本処理が実行されると、ＣＰＵ１００は図１２に図示するステップＳＧ１に進み、ポインタｎの値に対応したピッチ抽出部Ｐｎ（ｎ＝１〜６）のラッチ回路１４から入力波形データＤＡＴＡを取り込み、ＲＡＭ１０３のバッファエリアに格納する。続いて、ステップＳＧ２では、フラグＤＡＮＧＥＮＦが「０」であるか否か、すなわちピッキング音が生じている状態（ＤＡＮＧＥＮＦ＝１）あるいはタッチ音が生じている状態（ＤＡＮＧＥＮＦ＝０）のいずれであるかを判断する。
【００７２】
タッチ音が生じている状態であると、判断結果は「ＹＥＳ」になり、ステップＳＧ３に進む。ステップＳＧ３では、入力波形データＤＡＴＡの波形レベルが所定値Ｖ１以上であるか否かを判断する。弾弦操作されず、入力波形データＤＡＴＡの波形レベルが所定値Ｖ１以上に達していない場合には、判断結果が「ＮＯ」になり、一旦本処理を完了させる。
【００７３】
一方、タッチ音が生じている状態から弾弦操作によりピッキング音が生じる状態に変化し、これにより入力波形データＤＡＴＡの波形レベルが所定値Ｖ１以上に達した場合には、上記ステップＳＧ３の判断結果が「ＹＥＳ」になり、ステップＳＧ４に進み、フラグＤＡＮＧＥＮＦに「１」をセットする。そして、ステップＳＧ５では、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして本処理を一旦完了させる。
【００７４】
さて、こうして弾弦操作に応じて、フラグＤＡＮＧＥＮＦが「１」にセットされた状態で本処理が実行されると、上述したステップＳＧ２の判断結果が「ＮＯ」となり、ステップＳＧ６に処理を進める。ステップＳＧ６では、フラグＯＮＦが「１」、すなわち音源１０４が発音中であるかどうかを判断する。以下、音源１０４が発音中でない場合と、発音中の場合とに分けて動作を説明する。
【００７５】
ａ．音源１０４が発音中でない場合
この場合、ステップＳＧ６の判断結果が「ＮＯ」になり、図１３に図示するステップＳＧ１１に進む。ステップＳＧ１１では、フラグＴＯＵＣＨＦが「１」であるか否か、すなわち弾弦操作に先行したフレット操作で生じるタッチ音からピッチ抽出済みの場合（フラグＴＯＵＣＨＦ＝１）、あるいは弾弦で生じたピッキング音からピッチ抽出する場合（フラグＴＯＵＣＨＦ＝０）のいずれであるかを判断する。以下、タッチ音からピッチ抽出済みの場合と、弾弦で生じたピッキング音からピッチ抽出する場合とに分けて動作を説明する。
【００７６】
ａ−１．タッチ音からピッチ抽出済みの場合
タッチ音からピッチ抽出し終えていると、上記ステップＳＧ１１の判断結果が「ＹＥＳ」になり、ステップＳＧ１２に進む。ステップＳＧ１２では、フラグＴＩＭＥ１Ｆが「１」、つまりＩＮＴａ割込み処理（図９参照）が適正に実行されたかどうかを判断する。ＩＮＴａ割込み処理が適正に実行されていると、判断結果は「ＹＥＳ」になり、ステップＳＧ１３に進むが、ＩＮＴａ割込み処理が適正に実行されていなければ、判断結果は「ＮＯ」になり、ステップＳＧ１４に進む。
【００７７】
ステップＳＧ１３では、ＩＮＴａ割込み処理にて検出されたピッキング音の半周期ＴＩＭＥを２倍した推定周期が、当該ＩＮＴａ割込み処理にて検出されたタッチ音の周期ＴＩＭＥ１に略一致するかどうかを判断する。略一致すれば、判断結果は「ＹＥＳ」となり、後述のステップＳＧ１６に進むが、略一致しなければ、判断結果は「ＮＯ」になり、後述のステップＳＧ１９に進む。
【００７８】
ステップＳＧ１４では、フラグＴＩＭＥ２Ｆが「１」、つまりＩＮＴｂ割込み処理（図１０〜図１１参照）が適正に実行されたかどうかを判断する。ＩＮＴｂ割込み処理が適正に実行されていると、判断結果は「ＹＥＳ」になり、ステップＳＧ１５に進むが、ＩＮＴｂ割込み処理が適正に実行されていなければ、判断結果は「ＮＯ」になり、ステップＳＧ１５に進む。
【００７９】
ステップＳＧ１５では、ＩＮＴｂ割込み処理にて検出されたピッキング音の半周期ＴＩＭＥを２倍した推定周期が、当該ＩＮＴｂ割込み処理にて検出されたタッチ音の周期ＴＩＭＥ２に略一致するかどうかを判断する。略一致すれば、判断結果は「ＹＥＳ」となり、後述のステップＳＧ１６に進むが、略一致しなければ、判断結果は「ＮＯ」になり、後述のステップＳＧ１９に進む。
【００８０】
ＩＮＴａ割込み処理の適正実行により検出されたピッキング音の半周期ＴＩＭＥを２倍した推定周期がタッチ音の周期ＴＩＭＥ１に略一致した場合、あるいはＩＮＴｂ割込み処理の適正実行により検出されたピッキング音の半周期ＴＩＭＥを２倍した推定周期がタッチ音の周期ＴＩＭＥ１に略一致した場合には、ステップＳＧ１６に進み、レジスタＴＩＭＥに格納されるピッキング音の半周期を２倍した推定周期に対応した音高の楽音の発音開始を音源１０４に指示する。
【００８１】
このように、タッチ音から抽出した周期が、ピッキング音の半周期から推定した推定周期に略一致する場合、ＣＰＵ１００は、ピッキング音の半周期を２倍した周期に対応するピッチの楽音を発音するよう音源１０４に指示する。したがって、従来のように、弾弦で生じるピッキング音からのピッチ抽出よりも早期に発音ピッチを確定できる為、発音遅れを解消し得るようになる。
【００８２】
さて、以上のようにして、発音開始を指示し終えると、ＣＰＵ１００はステップＳＧ１７〜ＳＧ１８を実行し、フラグＯＮＦに「１」をセットして発音中である旨を表すと共に、発音ピッチが確定に伴い、フラグＤＡＮＧＥＮＦおよびフラグＴＯＵＣＨＦをゼロリセットした後、ステップＳＧ１９に進み、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして本処理を完了させる。
【００８３】
ａ−２．弾弦で生じたピッキング音からピッチ抽出する場合
弾弦で生じたピッキング音からピッチ抽出する場合には、上記ステップＳＧ１１の判断結果が「ＮＯ」になり、ステップＳＧ２０に進む。ステップＳＧ２０では、フラグＴＩＭＥ１Ｆが「１」であるか否か、すなわち弾弦によりフラグＤＡＮＧＥＮＦが「１」となった状態下で、前述のＩＮＴａ割込み処理（図９参照）が適正に周期計測を行ったかどうかを判断する。ＩＮＴａ割込み処理が適正に周期計測できず、フラグＴＩＭＥ１Ｆが「０」であると、判断結果は「ＮＯ」になり、前述のステップＳＧ１９を介して本処理を完了させる。
【００８４】
ＩＮＴａ割込み処理が適正に周期計測を行っていれば、上記ステップＳＧ２０の判断結果が「ＹＥＳ」になり、ステップＳＧ２１に進む。ステップＳＧ２１では、フラグＴＩＭＥ２Ｆが「１」であるか否か、すなわち弾弦によりフラグＤＡＮＧＥＮＦが「１」となった状態下で、前述のＩＮＴｂ割込み処理（図１０〜図１１参照）が適正に周期計測を行ったかどうかを判断する。ＩＮＴｂ割込み処理が適正に周期計測できず、フラグＴＩＭＥ２Ｆが「０」であると、判断結果は「ＮＯ」になり、前述のステップＳＧ１９を介して本処理を完了させる。
【００８５】
ＩＮＴｂ割込み処理が適正に周期計測を行っていれば、上記ステップＳＧ２１の判断結果は「ＹＥＳ」になり、ステップＳＧ２２に進む。ステップＳＧ２２では、ＩＮＴａ割込み処理にて計測された周期ＴＩＭＥ１と、ＩＮＴｂ割込み処理にて計測された周期ＴＩＭＥ２とが略一致するか否かを判断する。両周期が略一致しなければ、判断結果は「ＮＯ」になり、前述のステップＳＧ１９を介して本処理を完了させる。
【００８６】
一方、ＩＮＴａ割込み処理にて計測された周期ＴＩＭＥ１とＩＮＴｂ割込み処理にて計測された周期ＴＩＭＥ２とが略一致すると、上記ステップＳＧ２２の判断結果が「ＹＥＳ」になり、ステップＳＧ２３に進み、レジスタＴＩＭＥ１に格納される周期に対応した音高の楽音の発音開始を音源１０４に指示する。これにより、音源１０４は、ピッキング音から抽出した周期に対応するピッチの楽音を発音する。この後、前述したステップＳＧ１７〜ＳＧ１９を実行し、フラグＯＮＦに「１」をセットして発音中である旨を表すと共に、フラグＤＡＮＧＥＮＦ、フラグＴＯＵＣＨＦ、フラグＴＩＭＥ１ＦおよびフラグＴＩＭＥ２Ｆをそれぞれゼロリセットして発音ピッチの確定を表してから本処理を終える。
【００８７】
ｂ．音源１０４が発音中の場合
音源１０４が発音を開始した後に本処理が実行されると、前述したステップＳＧ６（図１２参照）の判断結果が「ＹＥＳ」になり、ステップＳＧ７に処理を進め、入力波形データＤＡＴＡの波形レベルが所定値Ｖ２以下であるか否かを判断する。入力波形データＤＡＴＡの波形レベルが所定値Ｖ２以下であると、判断結果は「ＹＥＳ」になり、ステップＳＧ８に進み、音源１０４に消音を指示する。そして、ステップＳＧ９では、消音に応じてフラグＯＮＦをゼロリセットして本処理を終える。これに対し、入力波形データＤＡＴＡの波形レベルが所定値Ｖ２を超えていると、上記ステップＳＧ７の判断結果は「ＮＯ」となり、ステップＳＧ１０に進み、波形読み出し周波数を一定にして持続音発音させる周波数制御を音源１０４に指示して本処理を完了させる。
【００８８】
このように、第２実施形態では、弾弦に先行して行われるフレット操作で発生するタッチ音から抽出した周期と、弾弦に応じて発生するピッキング音から抽出した半周期を２倍して得た推定周期とが略一致した時に、その推定周期に対応した音高の楽音を発音させるので、従来のように、弾弦で生じるピッキング音からのピッチ抽出よりも早期に発音ピッチを確定できる結果、発音遅れを解消することができ、しかも上述の第１実施形態よりもピッキング音の半周期分早く発音ピッチ確定し得るようになる。
【００８９】
Ｃ．第３実施形態
次に、図１４〜図１５を参照して第３実施形態について説明する。第３実施形態の構成は、図１４に図示するように、前述した第１実施形態の構成（図１参照）にフレットスイッチ２００を追加したものである。フレットスイッチ２００は、各フレット位置に各弦毎に設けられるオンオフスイッチであり、フレット操作された場合にオン信号を発生してＣＰＵ１００に供給する。ＣＰＵ１００では、フレットスイッチ２００から供給されるオン信号に応じて、弦を指で抑えて音高指定するフレット操作を検出する。
【００９０】
こうした構成による第３実施形態の動作は、図１５に図示するように、ＩＮＴｂ割込み処理の一部だけが第１実施形態と相違する。すなわち、前述した第１実施形態によるＩＮＴｂ割込み処理（図６参照）のステップＳＣ８では、入力波形データＤＡＴＡが所定レベルＶ１以上の場合に「１」となるフラグＤＡＮＧＥＮＦに基づき、フレット操作によるタッチ音が生じている状態（ＤＡＮＧＥＮＦ＝０）であるか否かを判断している。
これに対し、第３実施形態によるＩＮＴｂ割込み処理では、第１実施形態のステップＳＣ８に替えて、図１５に図示するステップＳＣ１００を設け、上記フレットスイッチ２００がオン操作されたか否か、つまりフレット操作によるタッチ音が生じている状態であるかどうかを判断するようになっている。
【００９１】
したがって、第３実施形態では、前述の第１実施形態と同様、弾弦以前に行われるフレット操作で発生するタッチ音から抽出した周期と、弾弦に応じて発生するピッキング音から抽出した周期とが略一致した時に、その周期に対応した音高の楽音を発音させる為、早期に発音ピッチを確定して発音遅れを解消する。また、フレットスイッチ２００によりフレット操作を検出する為、誤動作することなく確実にタッチ音からピッチ抽出し得るようになる効果も得られる。
【図面の簡単な説明】
【００９２】
【図１】本発明の第１実施形態の構成を示すブロック図である。
【図２】ピッチ抽出部Ｐ１〜Ｐ６における入出力信号を説明する波形図である。
【図３】第１実施形態のメインルーチンの動作を示すフローチャートである。
【図４】第１実施形態のＩＮＴａ割込み処理の動作を示すフローチャートである。
【図５】第１実施形態のＩＮＴｂ割込み処理の動作を示すフローチャートである。
【図６】第１実施形態のＩＮＴｂ割込み処理の動作を示すフローチャートである。
【図７】第１実施形態のｎ弦処理の動作を示すフローチャートである。
【図８】第１実施形態のｎ弦処理の動作を示すフローチャートである。
【図９】第２実施形態のＩＮＴａ割込み処理の動作を示すフローチャートである。
【図１０】第２実施形態のＩＮＴｂ割込み処理の動作を示すフローチャートである。
【図１１】第２実施形態のＩＮＴｂ割込み処理の動作を示すフローチャートである。
【図１２】第２実施形態のｎ弦処理の動作を示すフローチャートである。
【図１３】第２実施形態のｎ弦処理の動作を示すフローチャートである。
【図１４】第３実施形態の構成を示すブロック図である。
【図１５】第３実施形態のＩＮＴｂ割込み処理の動作を示すフローチャートである。
【符号の説明】
【００９３】
Ｐ１〜Ｐ６  ピッチ抽出部
１００  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  音源
１０５  サウンドシステム
【図１】
2006350191.tif 000003
【図２】
2006350191.tif 000004
【図３】
2006350191.tif 000005
【図４】
2006350191.tif 000006
【図５】
2006350191.tif 000007
【図６】
2006350191.tif 000008
【図７】
2006350191.tif 000009
【図８】
2006350191.tif 000010
【図９】
2006350191.tif 000011
【図１０】
2006350191.tif 000012
【図１１】
2006350191.tif 000013
【図１２】
2006350191.tif 000014
【図１３】
2006350191.tif 000015
【図１４】
2006350191.tif 000016
【図１５】
2006350191.tif 000017