特許第6361109号(P6361109)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ カシオ計算機株式会社の特許一覧

特許6361109電子弦楽器、楽音制御方法及びプログラム
<>
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000002
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000003
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000004
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000005
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000006
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000007
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000008
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000009
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000010
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000011
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000012
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000013
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000014
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000015
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000016
  • 特許6361109-電子弦楽器、楽音制御方法及びプログラム 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6361109
(24)【登録日】2018年7月6日
(45)【発行日】2018年7月25日
(54)【発明の名称】電子弦楽器、楽音制御方法及びプログラム
(51)【国際特許分類】
   G10H 1/00 20060101AFI20180712BHJP
   G10H 1/46 20060101ALI20180712BHJP
【FI】
   G10H1/00 A
   G10H1/46
【請求項の数】5
【全頁数】27
(21)【出願番号】特願2013-221467(P2013-221467)
(22)【出願日】2013年10月24日
(65)【公開番号】特開2015-82094(P2015-82094A)
(43)【公開日】2015年4月27日
【審査請求日】2016年10月20日
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】100106002
【弁理士】
【氏名又は名称】正林 真之
(74)【代理人】
【識別番号】100120891
【弁理士】
【氏名又は名称】林 一好
(74)【代理人】
【識別番号】100154748
【弁理士】
【氏名又は名称】菅沼 和弘
(72)【発明者】
【氏名】伊庭 章雄
【審査官】 菊池 智紀
(56)【参考文献】
【文献】 特開平1−250995(JP,A)
【文献】 特開平1−279297(JP,A)
【文献】 特開平1−198794(JP,A)
【文献】 特開昭63−217398(JP,A)
【文献】 特開2014−238552(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10H 1/00− 7/12
(57)【特許請求の範囲】
【請求項1】
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定手段と、
張設された弦の振動を検出する弦振動検出手段と、
前記弦の振動に応じた波形信号における或るゼロクロス点を示す第1ゼロクロス点から前記第1ゼロクロス点の次のゼロクロス点を示す第2ゼロクロス点までの第1の区間で、前記弦の振動のレベルが第1のしきい値を超えたか否か判別する第1の判別手段と、
前記第1のしきい値を超えたと判別された前記第1の区間における弦の振動のレベルと、前記第2ゼロクロス点から前記第2ゼロクロス点の次のゼロクロス点を示す第3ゼロクロス点までの第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行う制御手段と、
前記第3ゼロクロス点から前記第3ゼロクロス点の次のゼロクロス点を示す第4ゼロクロス点までの第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する補正手段と、
を有する電子弦楽器。
【請求項2】
前記制御手段は、前記第3の区間以降に前記検出された弦の振動のレベルに基づいて決定した音量が、前記第1の音量よりも、第2のしきい値以上小さい期間が所定期間継続した場合に、楽音の発生をミュートさせる請求項1に記載の電子弦楽器。
【請求項3】
前記制御手段は、前記楽音の発生をミュートさせた後、前記検出された弦の振動のレベルに基づいて決定した音量が、前記第1の音量よりも、第3のしきい値以上小さい状態でなくなった場合、ミュートを解除する請求項2に記載の電子弦楽器。
【請求項4】
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられる楽音制御方法であって、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、
前記弦の振動に応じた波形信号における或るゼロクロス点を示す第1ゼロクロス点から前記第1ゼロクロス点の次のゼロクロス点を示す第2ゼロクロス点までの第1の区間で、前記弦の振動のレベルが第1のしきい値を超えたか否か判別し、
前記第1のしきい値を超えたと判別された第1の区間における弦の振動のレベルと、前記第2ゼロクロス点から前記第2ゼロクロス点の次のゼロクロス点を示す第3ゼロクロス点までの第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行い、
前記第3ゼロクロス点から前記第3ゼロクロス点の次のゼロクロス点を示す第4ゼロクロス点までの第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する、楽音制御方法。
【請求項5】
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられるコンピュータに、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定ステップと、
前記弦の振動に応じた波形信号における或るゼロクロス点を示す第1ゼロクロス点から前記第1ゼロクロス点の次のゼロクロス点を示す第2ゼロクロス点までの第1の区間で、前記弦の振動のレベルが第1のしきい値を超えたか否か判別する第1の判別ステップと、
前記第1のしきい値を超えたと判別された第1の区間における弦の振動のレベルと、前記第2ゼロクロス点から前記第2ゼロクロス点の次のゼロクロス点を示す第3ゼロクロス点までの第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行う制御ステップと、
前記第3ゼロクロス点から前記第3ゼロクロス点の次のゼロクロス点を示す第4ゼロクロス点までの第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する補正ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子ギター等の電子弦楽器に係り、特にその入力波形信号からピッチ抽出を行って種々の音高の楽音を発生する電子弦楽器、楽音制御方法及びプログラムに関する。
【背景技術】
【0002】
従来より、自然楽器の演奏操作によって発生する波形信号からピッチ(基本周波数)を抽出し、電子回路で構成された音源装置を制御して、人工的に楽音等の音響を得るようにした楽音生成装置が開発されている。
このような楽音生成装置を備えた電子ギター等の電子弦楽器においては、弦を指で押さえるフレット操作と、弦を弾くピッキングとが演奏操作として行われ、これらの演奏操作に応じた楽音を発生させる。
ところが、ピッキングにより振動した弦のピッチを抽出する場合、ピッチの抽出に一定の時間を要することから、楽音の発生が遅れる場合がある。
これに対し、特許文献1に記載の電子弦楽器では、フレットに対する操作によって、操作された位置に対応する楽音を発生させている。このように楽音を発生させる場合、弦の振動からピッチを抽出するよりも以前に音高を決められることから、楽音の発生が遅れることを抑制できる。
このように、フレットに対する操作によって、ピッチを抽出するよりも以前に楽音を発生させる場合、音の強さ(ベロシティ)については、ピッキングによって発生した初期の弦の振動を検出し、その振幅に基づいて決定することで、固定的な音の強さとするよりも、実際の演奏を反映させることができる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2003−084776号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上述のように、ピッキングによって発生した初期の弦の振動を検出し、その振幅に基づいて音の強さを決定した場合、ピッキングによって発生した初期の弦の振動は不安定であることから、必ずしも演奏者が期待する音の強さとはならない場合がある。
このように、特許文献1に記載の技術を含め、従来の電子弦楽器においては、楽音の発生の遅れを抑制しつつ、発生される楽音の強さを適切なものとすることが困難であった。
【0005】
本発明は、このような状況に鑑みてなされたものであり、電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとすることを目的とする。
【課題を解決するための手段】
【0006】
上記目的を達成するため、本発明の一態様の電子弦楽器は、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定手段と、
張設された弦の振動を検出する弦振動検出手段と、
前記弦の振動に応じた波形信号における或るゼロクロス点を示す第1ゼロクロス点から前記第1ゼロクロス点の次のゼロクロス点を示す第2ゼロクロス点までの第1の区間で、前記弦の振動のレベルが第1のしきい値を超えたか否か判別する第1の判別手段と、
前記第1のしきい値を超えたと判別された前記第1の区間における弦の振動のレベルと、前記第2ゼロクロス点から前記第2ゼロクロス点の次のゼロクロス点を示す第3ゼロクロス点までの第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行う制御手段と、
前記第3ゼロクロス点から前記第3ゼロクロス点の次のゼロクロス点を示す第4ゼロクロス点までの第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する補正手段と、
を有する。
【発明の効果】
【0007】
本発明によれば、電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとすることができる。
【図面の簡単な説明】
【0008】
図1】本実施例に係る電子ギターの主要部の構成を示す模式図である。
図2】全体の回路を示すブロック図である。
図3】フレットの押弦状態を検出するためのフレット検出回路を示す図である。
図4】ピッチ抽出回路及びマイコンの具体的な機能構成を示すブロック図である。
図5】マイコンが楽音を発生する際の処理の概要を示す模式図である。
図6】マイコンが実行するフレット検出処理ルーチンを示すフローチャートである。
図7】マイコンへインタラプトがかけられたときの処理を示すインタラプトルーチンを示すフローチャートである。
図8】メインルーチンを示すフローチャートである。
図9図8のM5として示すステップ0(STEP0)のときのフローチャートである。
図10図8にM6として示すSTEP1のフローチャートの詳細である。
図11図10にS13として示すVEL1_ONのフローチャートの詳細である。
図12図11にS132として示すサブルーチンNOTE_ONのフローチャートの詳細である。
図13図8にM7として示すSTEP2のフローチャートの詳細である。
図14図8にM8として示すSTEP3のフローチャートである。
図15】S311のサブルーチンの詳細な内容を示す図である。
図16図8のM9として示すSTEP4のフローチャートである。
【発明を実施するための形態】
【0009】
以下、本発明の実施形態について、図面を用いて説明する。
【0010】
[実施例]
以下、この発明の実施例について図面を参照して説明するが、ここではこの発明を電子ギター(ギターシンセサイザ)に適用した場合を例に挙げて説明する。なお、これに限らず他のタイプの電子楽器であっても同様に適用できる。
【0011】
図1は、本実施例に係る電子ギター1の主要部の構成を示す模式図である。
図1に示すように、電子ギター1は、指板FB上に張設された6つの弦STG1〜STG6を備えており、各弦に対して、フレット及びピッキングを行うことにより、アコースティックギター等の自然楽器と同様の操作でユーザの演奏を可能とするものである。図1に示すように、電子ギター1は、指板FB上に張設された6つの弦STG1〜STG6にそれぞれ設けられ、各弦にスキャンパルスを入力するスキャンパルス発生器PGを備えている。そして、電子ギター1は、各弦に対するフレットあるいはピッキングが行われた場合に、フレットスキャン部FS及びピッチ抽出回路PCによって、各操作を検出する。
図2は、全体の回路を示すブロック図である。ピッチ抽出回路PCは、各弦の振動を電気信号に変換し、振動波形のゼロクロス点及び振幅の絶対値を取得して、マイコンMCPに出力する。
【0012】
マイコンMCPは、後述する音程データ変換テーブル(ピッチテーブル)を含むメモリ例えばROM及びRAMを有するとともに、タイマーTMRを有し、音源発生装置SOBに与える為の信号を制御するものである。音源発生装置SOBは音源SSとデジタル−アナログ変換回路D/Aと、増幅回路AMCと、スピーカ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】
各選択線KI0〜KI21は、所定時間(例えば1ms)毎に順次アクティブな状態にスイッチングされる。これら選択線KI0〜KI21は、ハイレベル(例えば5v)にプルアップされている。アクティブな状態とされた選択線KI0〜KI21に対し、押弦により指板FBに接触されている弦があると、その弦に対応する信号線KC0〜KC5からはハイレベルの信号が読み出される。
すなわち、フレット検出回路FDCは、所定時間毎に選択線KI0〜KI21を1つずつアクティブな状態に切り替え、信号線KC0〜KC5の状態(ハイレベルまたはローレベル)を読み出して、すべてのフレットについて、いずれの位置が押弦されているかを検出する。
【0015】
図4は、ピッチ抽出回路PC及びマイコンMCPの具体的な機能構成を示すブロック図である。ピッチ抽出は、主にピッチ抽出回路PC及びマイコンMCPの以下に説明する機能によって実行される。
図4に示すように、ピッチ抽出回路PCは、ローパスフィルタLPFと、増幅回路AMCと、ゼロクロス点取込回路ZCRと、絶対値取込回路ABSとを備えている。
ローパスフィルタLPFには、ピッキングが行われることにより各弦において発生する波形の信号がヘキサピックアップから入力され、ローパスフィルタLPFは、入力された信号の高周波成分をカットし、低周波成分のみを通過させる。
増幅回路AMCは、ローパスフィルタLPFの出力信号を設定されたゲインに応じて増幅し、ゼロクロス点取込回路ZCR及び絶対値取込回路ABSに出力する。
【0016】
ゼロクロス点取込回路ZCRは、入力された波形の信号のゼロクロス点を検出し、ゼロクロス点より正側の場合にハイレベル信号、負側の場合にローレベル信号を出力する。なお、ゼロクロス点取込回路ZCRの出力信号は、反転したもの(反転出力)と非反転のもの(非反転出力)との両方がマイコンMCPに入力される。
絶対値取込回路ABSは、入力された波形の信号の正負両側におけるピーク値をそれぞれ検出し、ピーク値の絶対値及び符号をマイコンMCPに入力する。
【0017】
マイコンMCPは、割込制御回路ICと、タイマーTMRと、アナログ−デジタル変換回路A/Dと、メモリMEMとを備えている。
割込制御回路ICは、ゼロクロス点取込回路ZCRの非反転出力及び反転出力が入力され、これらの立ち上がりエッジで割り込み信号を発生させる。すなわち、割込制御回路ICは、ピッキングによって各弦に発生した波形の信号がゼロクロスするタイミングで、割り込み信号を発生させる。割込制御回路ICは、発生した割り込み信号をタイマーTMRに出力する。
【0018】
タイマーTMRは、割込制御回路ICから割り込み信号が入力されると、入力された時間t(非反転出力による割り込み信号の場合)及び時間T(反転出力による割り込み信号の場合)をメモリMEMに出力する。
アナログ−デジタル変換回路A/Dは、絶対値取込回路ABSから入力されたピーク値の絶対値をデジタル信号に変換し、メモリMEMに出力する。なお、アナログ−デジタル変換回路A/Dは、ピーク値の絶対値とともに入力される符号をデジタル化されたピーク値と併せてメモリMEMに出力する。
【0019】
メモリMEMは、タイマーTMRから入力された時間t,Tと、ピーク値の絶対値(デジタル値)及び符号を記憶する。メモリMEMに記憶された時間t,Tは、マイコンMCPが前回記憶された時間t,Tと今回記憶された時間t,Tの差分を算出して周波数(発生させる楽音の音程であるピッチ)を求める際に用いられる。
また、メモリMEMは、各弦のフレットと周波数との関係を示すフレット−周波数データテーブル(不図示)を記憶している。
【0020】
フレット−周波数データテーブルでは、スケールA4を442Hzとし、各弦がいずれの周波数に対応するか、また、フレット位置による音程のコード(キーコード)が関連付けて記憶されている。
また、メモリMEMは、ピッチ抽出によって取得された周波数を音程データ(キーコード)に変換するための音程データ変換テーブル(不図示)を記憶している。
音程データ変換テーブルでは、ピッチ抽出によって得られた周波数が、cent比例した音程データ(キーコード)と対応付けて記憶されている。
【0021】
マイコンMCPは、メモリMEMに記憶されたこれらのデータを参照ながら、ピッキングが行われた場合に、フレットスキャンの結果及びピッチ抽出の結果に応じて、音程を決定し、楽音を発生する。
【0022】
次に、マイコンMCPが楽音を発生する際の処理の概要について説明する。
図5は、マイコンMCPが楽音を発生する際の処理の概要を示す模式図である。
図5において、ピッチ抽出回路PCに図5(c)に示す波形の信号が入力されたとすると、これに対するゼロクロス点取込回路ZCRの非反転出力は、図5(a)に示す波形となり、反転出力は、図5(b)に示す波形となる。
【0023】
マイコンMCPは、ピッチ抽出処理を実行する場合、設定された所定の波高値THLABより小さいものはノイズとみなして波形の信号を破棄する(STEP0〜2)。一方、マイコンMCPは、STEP0において、所定の波高値THLAB以上となった場合、STEP0の波高値VEL0がSTEP0における波高値のしきい値TH0以上となっている場合には、ピッチ抽出処理と並列的に実行しているフレットの押弦状態の検出処理で検出された各フレットの情報から音程(音程の初期値)を検出し、STEP0の波高値に基づいて、STEP1において発音を開始する。具体的には、マイコンMCPは、音量を定めるベロシティVELを(VEL0+VEL1)/2として、STEP1で発音を開始する。
【0024】
この後、マイコンMCPは、STEP0〜2において、所定の波高値THLAB以上となっている場合、その波が新たに入力された初めてのものであるときに、波形のピーク値及び符号をベロシティVEL(具体的には波高値VEL2)の値として取り込む(STEP3)。そして、マイコンMCPは、ピッチ抽出処理において検出したベロシティVELの値を基に、その音程の発音を行う(ノートオン)。発音が行われる場合、マイコンMCPは、音源SSに対して、音程及びベロシティVELの値を出力することにより、発音の指令を行う。また、STEP3において、マイコンMCPは、STEP2で取り込まれた波高値VEL2の値に対応して、ベロシティVELを補正するための情報をアフタータッチ情報として音源に送ることで、STEP1で発音した音量(音の強さ)を補正する。アフタータッチ情報は、一般に、ピッキングの後に弦に対して行われた操作を発音に反映させるための情報であり、本実施形態においては、STEP2以降で取り込まれた波高値に応じて音量を補正するために、アフタータッチ情報の形態で音源に指示を行っている。この後、VEL2≦(1/4)VEL(すなわち、今回の波高値がSTEP1の波高値の1/4以下)であれば、マイコンMCPは、ミュートを示すミュートフラグMfに1を設定する(Mf=1)。一方、VEL2>(1/4)VELであれば、ミュートフラグMfに0を設定する(Mf=0)。なお、ミュートであるか否かを判定するためにベロシティVELに乗ずる係数1/4は一例であり、任意の係数αを用いて1/α(αは正数)と表すことができる。
【0025】
この後、STEP4において、ピッチ抽出処理は継続され、マイコンMCPは、前回記憶された時間t,Tと今回記憶された時間t,Tの差分から周波数(ピッチ)を算出し(TP(b),TP(b’))、この周波数によって、すでに発音している音程に対する補正を行う。また、STEP4において、マイコンMCPは、STEP3で設定されたミュートフラグMfが1の場合、所定の時間(すなわち、ミュートの判断のために設定された時間)、c≦(1/4)VEL(ただし、cはSTEP4の波高値)の状態が継続したときには、ミュートであると判断して、ノートオフする。一方、STEP4において、STEP3で設定されたミュートフラグMfが1の場合であって、ミュートと判断される上記条件が充足されない場合、マイコンMCPは、ミュートフラグMfを0にリセットし、ミュート状態を解除する。
さらに、上述の一連の処理において、前回のピッキング時に対して、押弦されたフレット位置が変化している場合、マイコンMCPは、前回の音程の補正をリセット(すなわち、押弦されたフレット位置に対応する音程の初期値にセット)し、押弦されたフレット位置が変化していない場合(同一のフレット位置で続けてピッキングされた場合)、前回の音程の補正をリセットすることなく、今回の発音においても同一の補正を行って音程を決定する。
【0026】
以下、マイコンMCPの動作についてフローチャートや波形を示す図面を参照して説明する。
初めに、図面の符号について説明する。
AD・・・図2の瞬時値読込み信号RDA13〜18によりピッチ抽出回路PCの入力波形を直接読んだ入力波高値(瞬時値)
AMP(0,1)・・・正または負の前回(old)の波高値
AMRL1・・・振幅レジスタで記憶されているリラティブ(relative)オフ(off)のチェックのための前回の振幅値である。ここで、前記リラティブオフとは波高値が急激に減衰してきたことに基づき消音することで、フレット操作をやめて開放弦へ移ったときの消音処理に相当する。
AMRL2・・・振幅レジスタで記憶されている前記リラティブオフのための前々回の振幅値で、これにはAMRL1の値が入力される。
【0027】
CHTIM・・・最高音フレット(22フレット)に対応する周期
CHTIO・・・開放弦フレットに対応する周期
CHTRR・・・時定数変換レジスタで、上述の時定数変換制御回路TCC(図2)の内部に設けられている。
DUB・・・波形が続けて同一方向に来たことを示すフラグ
FOFR・・・リラティブオフカウンタ
HNC・・・波形ナンバーカウンタ
【0028】
K・・・半音以上と半音未満の音高コードからなる音高データ
MT・・・これからピッチ抽出を行う側のフラグ(正=1,負=0)
MF・・・ミュートフラグ
NCHLV・・・ノーチェンジレベル(定数)
NSC・・・新しいスケールコード
OSC・・・前回のスケールコード
OFTIM・・・オフタイム(例えば当該弦の開放弦周期に相当)
OFPT・・・通常オフチェック開始フラグ
ONF・・・ノートオフフラグ
RIV・・・後述のステップ(STEP)4での処理ルートの切替を行うためのフラグ
ROFCT・・・リラティブオフのチェック回数を定める定数
【0029】
STEP・・・マイコンMCPのフロー動作を指定するレジスタ(1〜5)
T・・・周期データ
TF・・・有効となった前回のゼロクロス時刻データ
TFN(0,1)・・・正または負のピーク値直後の前回のゼロクロス時刻データ
TFR・・・時刻記憶レジスタ
THLIM・・・周波数上限(定数)
TLLIM・・・周波数下限(定数)
【0030】
TP(0,1)・・・正または負の前回の周期データ
THLAB・・・STEP0,STEP1におけるノイズ除去用しきい値
TH0・・・STEP0における波高値判定用しきい値
TH1・・・STEP1における波高値判定用しきい値
TRLRL・・・リラティブオン(再発音開始)
TRLRS・・・共振除去しきい値
【0031】
TTLIM・・・トリガー時の周波数下限
TTP・・・前回抽出された周期データ
TTR・・・周期レジスタ
TTU・・・定数(17/32と今回の周期情報ttの積)
TTW・・・定数(31/16と今回の周期情報ttの積)
VEL・・・速度(ベロシティー)を定める情報で、発音開始時の波形の最大ピーク値(波高値)にて定まる。
VEL0・・・STEP0におけるノイズ除去後の波高値(=a0)
VEL1・・・STEP1におけるノイズ除去後の波高値(=b0)
VEL2・・・STEP2における波高値(=a1)
【0032】
X・・・異常または正常状態を示すフラグ
b・・・ワーキングレジスタBに記憶されている今回正負フラグ(正ピークの次のゼロ点のとき1、負ピークの次のゼロ点のとき0)
c・・・ワーキングレジスタCに記憶されている今回波高値(ピーク値)
e・・・ワーキングレジスタEに記憶されている前々回波高値(ピーク値)
h・・・ワーキングレジスタHに記憶されている前々回抽出された周期データ
t・・・ワーキングレジスタTrに記憶されている今回のゼロクロス時刻
tt・・・ワーキングレジスタTOTOに記憶されている今回の周期情報
α・・・ミュートの判断のために用いる係数
【0033】
図6は、マイコンMCPが実行するフレット検出処理ルーチンを示すフローチャートである。
F1において、マイコンMCPは、選択線KI0〜KI21のうち1つ(例えば選択線KI0)を選択し、アクティブな状態とする。
続くF2において、マイコンMCPは、信号線KC0〜KC5の信号レベルを読み出す。このとき、押弦されている弦に対応する信号線では、信号レベルがハイレベルとなり、押弦されていない弦に対応する信号線では、信号レベルがローレベルとなる。
【0034】
そして、F3において、マイコンMCPは、押弦されているか否かの判定を行う。マイコンMCPは、押弦されている場合すなわちイエス(以下、Yと称する)の場合、F4の処理に移行し、押弦されていない場合すなわちノー(以下、Nと称する)の場合、F1の処理に移行する。
F4において、マイコンMCPは、音程コードを算出する。このとき、マイコンMCPは、押弦位置の音程コードを算出する。
このような処理を繰り返し、マイコンMCPは、すべてのフレットについて、各弦の押弦状態を検出する。
【0035】
図7は、マイコンMCPへインタラプトがかけられたときの処理を示すインタラプトルーチンであり、I1において、マイコンMCPはアドレスデコーダDCDを介し、ゼロクロス時刻取込回路ZTSに対し、弦番号読み込み信号RDIを与えてインタラプトを与えた弦を指定する弦番号を読み込む。そして、その弦番号に対応する時刻情報つまりゼロクロス時刻情報をゼロクロス時刻取込回路ZTSへ時刻読込み信号RD1〜RD6のいずれかに対応するものを与えて読込む。これをtとする。しかる後、I2において、同様に波高値取込み回路PVSへピーク値読込み信号RDAI(I=1〜12のうちのいずれか)を与えて、ピーク値を読取る。これをcとする。
【0036】
続くI3において、当該ピーク値は正、負のいずれかのピークであるのかを示す情報bをゼロクロス時刻取込回路ZTSより得る。そして、I4にて、このようにして得たt,c,bの値をマイコンMCP内のバッファレジスタTr,C,Bにセットする。このバッファには、割込み処理がなされる都度、このような時刻情報、ピーク値情報、ピークの種類を示す情報がワンセットとして書込まれていき、メインルーチンで、各弦毎にかかる情報に対する処理がなされる。
【0037】
図8は、メインルーチンを示すフローチャートである。パワーオンすることによりM1において、各種レジスタやフラグがイニシャライズされ、レジスタSTEPが0とされる。M2で上述したバッファが空かどうかが判断され、Nの場合にはM3に進み、バッファよりレジスタB,C,Trの内容が読まれる。これにより、M4において、レジスタSTEPはいくつか判断され、M5ではSTEP0,M6ではSTEP1,M7ではSTEP2,M8ではSTEP3,M9ではSTEP4の処理が順次行われる。
【0038】
M2でバッファが空の場合すなわちYの場合、M10〜M16へと順次に進み、ここで通常のノートオフのアルゴリズムの処理が行われる。このノートオフのアルゴリズムは、オフ(OFF)レベル以下の状態が所定のオフタイム時間続いたら、ノートオフするアルゴリズムである。M10でSTEP=0かどうかが判断され、Nの場合には、M11に進む。M11では、その時点の入力波高値ADが直接読まれる。これは、波高値取込み回路PVSへピーク値取込み信号RDA13〜RDA18のいずれかを与えることで達成できる。そして、この値ADが、入力波高値AD≦オフレベルかどうかが判断され、Yの場合にはM12に進む。M12では前回の入力波高値AD≦オフレベルかどうかが判断され、Yの場合にはM13に進み、ここでタイマーTMRの値≧オフタイムOFTIM(例えば当該弦の開放弦周期の定数)かどうかが判断される。Yの場合には、M14に進み、レジスタSTEPに0が書きこまれ、M15ではノートオンかどうかが判断され、Yの場合には、M16でノートオフ処理され、M2の入側のMに戻る。M12でNの場合にはM17に進み、マイコンMCP内部タイマーTMRをスタートし、M2の入側Mに戻る。M10でYの場合、及びM11、M13、M15でNの場合には、いずれもM12の入側のMに戻る。
【0039】
このように、波形入力のレベルが減衰してきた場合、オフレベル以下の入力波高値ADがオフタイムOFFTIMに相当する時間続くと、ノートオフの指示を音源SSに対しマイコンMCPは送出する。なお、ステップM15において、通常の状態ではYの判断がなされるが、後述するような処理によって、楽音の発生を指示していない場合でもレジスタSTEPは0以外の値をとっていることがあり、(例えばノイズの入力による。)そのようなときは、M14,M15の処理後M2へ戻ることで、初期設定がなされることになる。
なお、図8では、1つの弦についての処理しか示していないが、この図に示した如き処理を弦の数に相当する6回分、多重化してマイコンMCPは実行することになる。勿論、プロセッサを複数個設けて、別個独立して同等の処理を実行してもよい。
【0040】
次に、M4にて分岐して対応する処理を行う各ルーチンの詳細について説明する。
図9は、図8のM5として示すステップ0(STEP0)のときのフローチャートであり、S01で絶対トリガーレベル(ノートオン、しきい値)TRLAB(b)<今回波高値cかどうかが判断され、Yの場合にはS02に進み共振除去がチェックされる。なお、このトリガーレベルは、正と負との極性のピークそれぞれについてのチェックを行うようになっている。これら正の場合のTRLAB(0)と負の場合のTRLAB(1)とは、実験等によって適切な値とすることになる。理想的なシステムではTRLAB(0)とTRLAB(1)とは同じでよい。S02では、共振除去しきい値TRLRS<[今回波高値c−前回波高値AMP(b)]かどうか、すなわち今回波高値と前回波高値の差が所定値以上か否かが判断される。
【0041】
1つの弦をピッキングすることによって他の弦が共振を起こす場合、当該他の弦については、振動のレベルが徐々に大きくなり、その結果前回と今回とのピーク値の変化は微小なものとなって、その差は共振除去しきい値TRLRSを超えることはない。ところが、通常のピッキングでは、波形が急激に立上る(あるいは立ち下がる)ことになり、前記ピークの差は共振除去しきい値TRLRSを超える。
【0042】
いま、このS02で、Yの場合つまり共振の場合でないとみなした場合には、S03において次の処理が行われる。すなわち、今回正負フラグbがフラグMTに書込まれ、レジスタSTEPに1が書込まれ、さらに今回のゼロクロス時刻tが前回のゼロクロス時刻データでTFN(b)として設定される。そして、S04では、その他フラグ類がイニシャライズされ、S05に進む。S05では、今回波高値cがSTEP0における波高値VEL0として設定されるとともに、今回波高値cが前回の波高値AMP(b)としてセットされ、しかる後図8のメインルーチンへリターンする。すなわち、ステップS05では、STEP0において得られた波高値がベロシティとしては使用されないように設定される。ただし、STEP0におけるゼロクロス点は、ピッチ抽出のために保持される。STEP0において取得される半波長の波は、一般に波高値が低く、ベロシティとして用いることが適当ではないことが実験により判明している。
【0043】
図9において、Aはリラティブオン(再発音開始)のエントリであり、後述するSTEP4のフローからこのS06へジャンプしてくる。そして、S06では今まで出力している楽音を一度消音し、再発音開始のためにS03へ進行する。この再発音開始のための処理は、通常の発音開始のときと同様であり、以下に詳述するとおりとなる。
【0044】
そして、またS01でNの場合と、S02でNの場合(今回波高値c−前回波高値AMP(b)が所定値以上ない場合)には、S05に進む。従って、発音開始のための処理は進まないことになる。
以上述べたSTEP0では、フラグMTにBレジスタの内容(b=1)が書込まれ、レジスタTrの内容(t)が前回ゼロクロス時刻データTFN(1)に書込まれ、レジスタCの波高値(c)が前回の波高値AMP(1)に書込まれる。
【0045】
図10図8にM6として示すSTEP1のフローチャートの詳細を示すものであり、S11では、レジスタBの内容(b)と、フラグMTが不一致かどうかが判断され、Yの場合にはS12に進む。S12では、絶対トリガーレベル(ノートオンしきい値)TRLAB(b)<今回波高値cかどうかが判断され、Yの場合にはS13に進む。S12でYの場合にはS13でサブルーチンVEL1_ONが実行される。サブルーチンVEL1_ONは、波高値がしきい値を超えることにより暫定発音を開始するための処理である。続いて、S14でレジスタSTEPに2がセットされ、S15でレジスタTrの内容(1)を前回のゼロクロス時刻データでTFN(b)としてセットし、さらにS16で今回波高値cを、前回の波高値AMP(b)へセットする。S11において、Nの場合すなわち入力波形信号が同一方向にきた場合S17に進み、今回波高値c>前回波高値AMP(b)かどうかが判断され、Yの場合すなわち今回の波高値cが前回の波高値AMP(b)より大の場合には、S15に進む。一方、S12においてNの場合には、S16に進み、これにより波高値のみが更新される。また、S17において、Nの場合及び、S16の処理の終了時にはメインルーチン(図8)ヘリターンする。
【0046】
以上述べたSTEP1では、今回正負フラグb(=0)とフラグMT=1が不一致ということで、今回のゼロクロス時刻tを前回のゼロクロス時刻データTFN(0)としてセットし、さらに今回波高値cを前回の波高値AMP(0)として書込む。
【0047】
図11は、図10にS13として示すVEL1_ONのフローチャートの詳細を示すもので、S131において、STEP1の波高値VEL1に今回波高値cをセットする。
S132でサブルーチンNOTE_ONが実行され、所定の音程及びベロシティで発音が開始される。
以上述べたVEL1_ONでは、STEP1からSTEP2またはSTEP3に移行する場合に、サブルーチンNOTE_ONが実行される。
【0048】
図12は、図11にS132として示すサブルーチンNOTE_ONのフローチャートの詳細を示すもので、S1001において、ベロシティVELにSTEP0の波高値とSTEP1の波高値の平均値(VEL0+VEL1)/2が設定される。
【0049】
ステップS1002において、振動が検出されている弦のフレット状態を検出し、ステップS1003において、フレット検出処理で検出された弦の押弦位置を基に、スケールコード(音程)を取得する。
ステップS1004において、取得されたスケールコード(音程)が新しいスケールコードを示すNSCに設定される。
S1005において、新しいスケールコードNSCが前回のスケールコードを示すOSCと一致しているかが判断され、Nの場合にはS1006に進み、音源SSに対して、音程を補正するための情報(ピッチベンド情報)として、押弦位置に応じて設定されているスケールコード(以下、適宜「中央位置情報」という。)が送られる。
【0050】
S1005でYの場合及びS1006の後、処理はS1007に進み、設定されているスケールコード(音程)及びベロシティVELによって発音(ノートオン)を開始する。
S1008において、前回のスケールコードOSCに新しいスケールコードNSCが設定される。すなわち、今回のスケールコードがOSCに保存される。
S1008の後、メインルーチン(図8)へリターンする。
【0051】
図13は、図8にM7として示すSTEP2のフローチャートの詳細を示すもので、S20において、今回正負フラグb=フラグMTかどうかすなわちSTEP0の方向と同一のゼロクロス点の到来かどうかを判断し、Yの場合にはS21に進む。S21では、レジスタCHTRRへ開放弦周期CHTIOをセットし、S22に進む。S22では、今回波高値c>(7/8)×前回の波高値AMP(b)かどうか、つまり波高値が前回と今回とで略同一かどうかをチェックし、Yの場合つまり美しい自然減衰の場合には、S23に進み、フラグDUBを0にセットし、S24に進む。S24では、周期計算を行い、今回のゼロクロス時刻t−前回のゼロクロス時刻データTFN(b)を前回周期データTP(b)に入力し、今回のゼロクロス時刻tを前回ゼロクロス時刻データTFN(b)として入力する。S24におけるTP(b)は、STEP3でノートオン(1.5波)の条件として使用される。また、S241では、STEP2の波高値VEL2に今回波高値cをセットする。さらに、S242では、図12のサブルーチンNOTE_ONが実行され、S243でレジスタSTEPが3とセットされる。さらに、また、S244では、今回波高値cを前回の波高値AMP(b)ヘ書込む。S244の後、メインルーチンへリターン(RET)する。
【0052】
S20でNの場合には、S25に進み、フラグDUBすなわち同一方向の入力波形がきたということを意味するフラグを1にし、S26に進む。S26では、今回波高値c>前回の波高値AMP(b)かどうかが判断され、Yの場合にはS29に進む。S29では今回波高値cに前回の波高値AMP(b)が書替えられ、レジスタTの内容tに前回のゼロクロス時刻データTFN(b)が書替えられる。また、S22において、Nの場合には、S27に進み、フラグDUB=1かどうか、つまり前回STEP2を実行したとき、ダブッたか否かのチェックを行い、Yの場合つまりダブッていればS28に進む。S28では、フラグDUBを0にする。この場合にはS29に進みメインルーチンにリターンする。またS26のNのときも、同様にメインルーチンヘリターン(RET)する。
【0053】
以上述べたSTEP2では、今回正負フラグbとしてフラグMT=1が書替えられ、レジスタCHTRRに0フレット周期すなわち開放弦周期CHTIOが書替えられ、またフラグDUBが0にセットされ、さらにt−TFN(1)→TP(1)なる周期計算が行われ、また今回ゼロクロス時刻tに前回のゼロクロス時刻データTFN(1)が書き替えられ、今回波高値cがSTEP2の波高値VEL2としてセットされ、図12のサブルーチンNOTE_ONが実行され、さらに今回波高値cとして前回波高値AMP(1)がセットされる。
【0054】
図14は、図8にM8として示すSTEP3のフローチャートであり、S30でフラグMT≠今回正負フラグbかどうかが判断され、正常の場合すなわちYのときは、S31に進む。S31では、(1/8)c<AMP(b)ならXが0、また逆の場合にはX=1にセットされ、S32に進む。S32では今回波高値cとして前回の波高値AMP(b)が書替えられる。
そしてS33において、STEP2で得られたVELより今回波高値cが大であれば、ベロシティVELは今回波高値cが入力される。もし逆ならば、このベロシティVELは変化しない。次に今回正負フラグbにフラグMTが移替えられ、これによりピッチ変更側が逆にされる。これは、後述するSTEP4からフラグMTの意味が変り、ピッチ変更側を意味している。そして、S34で[t−TFN(b)→TP(b)]なる周期計算が行われる。また、今回のゼロクロス時刻tとして前回のゼロクロス時刻データでTFN(b)が書替えられる。
【0055】
次に、S35において、X=0かどうかを判断し、Yの場合にはS36に進み、周波数上限THLIM<前回の周期データTP(b)かどうか、つまりピッチ抽出上限チェックを行い、その結果、最高音の周期より大きな周期をもてば、許容範囲にあるということでYとなり、S37に進む。S37では、トリガー時の周波数下限TTLIM>前回の周期データTP(b)かどうか、つまりピッチ抽出下限チェックを行い、最低音の周期より小の周期をもてば許容範囲にあり、Yの判断をしてS38に進む。S37のピッチ抽出下限は、後述するSTEP4のピッチ抽出下限とは定数が異なる。
具体的には、周波数上限THLIMは、最高音フレットの2〜3半音上の音高周期に相当し、トリガー時の周波数下限TTLIMは、開放弦の開放弦フレットの5半音下の音高周期に相当するものとする。
【0056】
S38では、前回の周期データTP(b)を前回抽出された周期データTTPとしてセットすなわち、ピッチ抽出側で抽出されたピッチをセーブ(これは後述するSTEP4で使用される)し、S39に進む。S39では、前回の周期データTP(b)≒TP(b’)かどうか、すなわち極性の違うゼロクロス点間の周期の略一致のチェックである1.5波ピッチ抽出チェックを行い、Yの場合にはS301で次のような処理が行われる。すなわち、前回のゼロクロス時刻データTFN(b’)として時刻記憶レジスタTFRが書替えられ、また今回のゼロクロス時刻tが前回のゼロクロス時刻データTFとしてセットされ、波形ナンバーカウンタHNCをクリアする。このカウンタHNCは後述するSTEP4にて使用される。レジスタSTEPは4にセットされ、ノートオンフラグONFは2(発音状態)にセットされ、定数TTUは0すなわち(MIN)にセットされ、定数TTWは最高MAXにセットされる。これらはいずれも後述するSTEP4にて使用するものである。また、リラティブオフの為の前回波高値レジスタAMRL1がクリアされる。
【0057】
次にS310で、いま求まったTP(b)の周期データを、Tレジスタへ入力し、S311で音高コードKを求めるサブルーチンPITCHCAL(図15)へジャンプする。
S312では、波高値VEL2に今回波高値cが設定され、S313では、VEL2の値を利用してベロシティVELを補正するためにアフタータッチ情報が音源に出力される。S314では、波高値VEL2がSTEP1の波高値の1/4以下であるかが判断され、Yの場合、すなわちVEL2≦(1/4)VELの場合、ミュートフラグMfに1が設定される。また、S314でNの場合、すなわちVEL2>(1/4)VELの場合、ミュートフラグMfに0が設定される。S314,S315の後、メインルーチンヘリターン(RET)する。
【0058】
図15は、前記S311のサブルーチンの詳細な内容を示している。
マイコンMCPは、まずオクターブ値OCTを0とし(S181)、抽出ピッチデータTがマイコンMCPの内に記憶している音程データ変換テーブル内の基準ピッチデータT0「4525」より小さいか否か判断する(S182)。いま抽出ピッチデータが例えば「9800」であったとすると、このデータT「9800」は基準ピッチデータT0「4525」より大きいので、S183に進み、抽出ピッチデータT「9800」を1/2にして「4900」とし、オクターブ値OCTを−1して「−1」とし(S184)、再びS182に戻って、1/2にした抽出ピッチデータで「4900」が基準ピッチデータT0「4525」より小さいか否か判断する。
【0059】
今度も基準ピッチデータT0より大きいので、再度S183,S184の処理を繰り返し、抽出ピッチデータTを1/2にして「2450」とし、オクターブ値を−1して「−2」とし、同じく抽出ピッチデータT「2450」が基準ピッチデータT0「4525」より小さいか否か判断する(S182)。
【0060】
今度は基準ピッチデータT0より小さくなるので、S185に進み、抽出ピッチデータT「2450」が1/2の基準ピッチデータT0「2262.5」より大きいか否か判断する。抽出ピッチデータT「2450」の方が大きいので、S188に進み、上記基準ピッチデータT0「4525」により抽出ピッチデータT「2450」を引いてオクターブ未満の端数データt「2075」を求め、順番データmを「0」とし(S189)、この「0」の順番データmに応じた差分ピッチデータdTm「129」より上記端数データt「2075」が小さいか否か判断する(S190)。
【0061】
差分ピッチデータdTmの方が小さいので、S191に進んで、端数データt「2075」より先頭の差分ピッチデータdTm「129」を引いて「1946」とし、順番データmを+1して「1」とする(S192)。そして、端数データtが差分ピッチデータdTmより小さくなるまで、ステップS191,S192の処理を繰り返して、端数データtより差分ピッチデータdTmを順番に引いていく。
そして、差分ピッチデータdTmが「73」まで差し引かれ、順番データmが「21」になると、端数データtが残り「17」となり、次の差分ピッチデータdTm(m=21)「70」より小さくなるので、S193に進み、K=K0+12×OCT+(m+t/dTm)/2=57.0+12×(−2)+(21+17/70)/2=43.62の演算を実行して、新たな音高コードKを求める。この音高はG1♯よりやや上の音高となる。なお、K0はスケールA3の音高コードである。
【0062】
こうして、音程データ変換テーブルに記憶されたA3〜A4の1オクターブ分のピッチの差分データdTmだけで、他のオクターブの音高データを求めることができる。
また、抽出したピッチデータTがl/2の基準ピッチデータT0/2「2262.5」より小さければ、S185〜S187で抽出ピッチデータTが「2262.5」より大きくなるまで2倍(n=1,2,3・・・・・・)していき、以後は上述したS188〜S193の処理を行って、音高データKを求める。
【0063】
以上要約すると、マイコンMCPは、S181〜S187で、抽出ピッチデータTを2倍(n=・・・・・・,−2,−1,0,1,2・・・・・・)して、音程データ変換テーブルに記憶されているピッチデータの範囲内にはいるようにすることにより、このnの値であるオクターブ値OCTを求め、S188〜S192で、上記抽出ピッチデータTのオクターブ未満の端数データと差分ピッチデータdTmの累算データとの対応から音名を求められることになる。
【0064】
また、上記実施例では、音高の表示を、シリアル番号とするようにしたが、オクターブ、音階名(コード)、半音以下のデータにて表現するようにしてもよく、その他どのような表現形態であってもよい。
さらに、上記実施例ではピッチデータを50セント単位(半音の半分)でもつようにしたが、100セント単位(半音毎)にもってもよく、あるいはさらに細分化してもつようにしてもよく、加えて、1オクターブを超えてそのようなデータをもつようにしてもよい。
このようにして、周期データから、対応する音高コードを求めることができ、図14のSTEP3の処理時には、音高コードは、半音以上のものとされ(S311)、発音時の音高はクロマチックに指定されることになる。
【0065】
さて、図14のS30において、Nの場合(同一方向のゼロクロス点検出の場合)は、S303に進み、前回の波高値AMP(b)<今回波高値cかどうかが判断され、Yの場合はS304に進む。S304では、今回波高値cが前回の波高値AMP(b)としてセットされ、ベロシティVELまたはレジスタCの値cの内のいずれか大きい値がべロシティVELにセットされる。S303,S35,S36,S37,S39のいずれの場合もNの場合には、メインルーチンヘリターン(RET)する。
【0066】
S31において、X=1すなわち異常となる場合、(1/8)b1<b0のときと、(1/8)a2<a1のときのジャッジではいずれもその条件を満足せず、X=1となる。
すなわち、波形入力初期等に入力される波形のピークは、ノイズによるもので、これらのノイズの周期を検出して発音開始を指示すると、全くおかしな音が発生してしまう。そこで、S31では、波高値が大きく変わったことを検知して、X=1とし、S35でNの判断をするようにする。そして、S31にて波形が正常な変化をすることが検知されてから、発音開始を指示するようにする。
【0067】
ここでは、TP(b)≒TP(b’)の検出がなされたときにノートオンとなる。
以上述べたSTEP3では、MT=1≠b、AMP(0)←c、max[VEL、c(のいずれか大きい方)]→VEL、MT←b=0、TP(0)←[t−TFN(0)]、TFN(0)←t、TTP←TP(0)、TFR←TFN(1)、TF←t、HNC←0、ONF←2、TTU←0(MIN)、TTW←MAX、AMRL1←0、ノートオン条件TP(0)≒TP(1)についての処理がなされる。そして、適切な波形入力に応答してこのSTEP3において、抽出されたピッチに従ったクロマチックな音高の楽音が発生開始されることになる。すなわち、周期検出を開始してから、l.5周期程度の時間経過で発音指示が音源SSに対しなされることになる。
【0068】
図16は、図8のM9として示すSTEP4のフローチャートであり、この場合ピッチ抽出のみを行うルート(1)、実際にピッチ変更を行うルート(2)がある。先ず、S40,S41,S42,S63〜S67に示すルート(1)について説明する。S40において、波形ナンバーカウンタHNC>3が判断され、Yの場合にはS41に進む。S41では、リラティブオンしきい値TRLRL<[今回波高値c−前回の波高値AMP(b)]かどうかの判断が行われ、Nの場合にはS42に進む。S42では今回正負フラグb=フラグMTつまりピッチ変更側かどうかが判断され、Yの場合にはS43に進む。
【0069】
ところで、初期状態では、前記波形ナンバーカウンタHNCは0である(図14のS301参照)ので、S40ではNの判断をしてS42へ進む。そして、例えば、理想的な波形入力の場合は、b=1でMT=0であるから、S42からS63へ進む。
【0070】
S63においては、同じ極性のピークが続けて入力されてきているか(ダブりであるか)、否かチェックするために、レジスタRIV=1かどうかが判断され、Yの場合にはS68に進み、また、Nの場合(ダブリでない場合)にはS64に進み、ここで以下の処理が行われる。すなわち、S64では今回波高値cが前回の波高値AMP(b)に入力され、リラティブオフ処理のために前回の振幅値AMRL1が前々回の振幅値AMRL2に入力される。なお、いまの場合はAMRL1の内容は0である(STEP3のS30参照)。さらにS64において、前回の波高値AMP(b’)と今回波高値cうちいずれか大きい方が前回振幅値AMRL1に入力される。つまり、周期の中で2つある正,負のピーク値について大きい値のピーク値が振幅値AMRL1にセットされる。そして、S65で波形ナンバーカウンタHNC>8かどうかが判断され、ここで波形ナンバーカウンタ(ピッチ変更側でないゼロクロスカウンタ)NHCが+1され、カウントアップされる。
【0071】
従って、波形ナンバーカウンタHNCは、上限が9となる。そして、S65もしくはS66の処理の後S67へ進行する。S67では、レジスタRIVを1とし、今回のゼロクロス時刻tから時刻記憶レジスタTFRの内容を引算して、周期レジスタTTRへ入力する。そして、今回のゼロクロス時刻tは、時刻記憶レジスタTFRへセーブされ、この後、メインルーチンにリターン(RET)する。
【0072】
S63でYの場合は、S68に進み今回波高値c>前回の波高値AMP(b)かどうかが判断され、Yの場合はS69に進む。S69では、今回波高値cに前回の波高値AMP(b)が書替えられ、S70に進む。S70では今回波高値c>前回の振幅値AMRL1かどうかが判断され、Yの場合にはS71に進み、ここで今回波高値cが前回の振幅値AMRL1に入力される。
もし、S68でNの判断がなされるとすぐにメインルーチンへリターンする。従って、新しい入力波形のピークが大である場合についてのみ、新しい波形の振幅値が登録される。(その場合は、倍音のピークをひろっていないと考えられるので。)
【0073】
また、S70でNのときと、S71の処理の終了のときには、同様にメインルーチンヘリターンする。
以上述べたようにルート(1)は、以下のような処理がなされる。MT=0≠b、RIV=0、AMP(1)←c、AMRL2←AMRL1←max[AMP(0),c(のいずれか大きい方)]、HNC←(HNC+1)=1、RIV←1、TTR←(t−TFR)、TFR←1が処理される。従って、周期レジスタTTRに前回の同極性のゼロクロス点(STEP2→3のところ)から今回のゼロクロス点までの時刻情報の差つまり、周期情報が求まったことになる。そして、メインルーチンヘ戻り、次のゼロクロスインターラプトを待つ。
【0074】
次に、S40〜S62に示すルート(2)へ進んだ場合の説明を行う。いま、波形ナンバーカウンタHNC=1なので(S66参照)、S40からS42へ進む。S42では、MT=0、b=0なのでYとなり、S43へ進む。S43では、レジスタRIV=1かどうかが判断される。既にルート(1)において、レジスタRIVは1とされている(S67参照)ので、S43の判断はいまの場合Yとなり、S44へ進む。
【0075】
S44では、レジスタSTEP=4かどうかが判断され、Yの場合にはS441に進む。S441では、ミュートフラグMfが1であるかが判断され、Yの場合にはS442に進み、Nの場合にはS45に進む。
S442では、今回波高値cがベロシティVELの1/4以下であるか(c≦(1/4)VEL)が判断され、Yの場合にはS74に進み、Nの場合にはS443に進む。S443では、ミュートフラグMfにゼロを設定し、S45へ進む。
S45では、今回波高値c<60H(Hは16進法表現を示す)かどうかが判断され、いま波高値は大なのでYとなり、S46に進む。S46では、前々回の振幅値AMRL2−前回の振幅値AMRL≦(1/32)×前々回の振幅値AMRL2かどうかが判断され、Yの場合にはS47に進み、リラティブオフカウンタFOFRが0にセットされる。このリラティブオフの処理については後述する。そして、S48では周期計算が行われる。具体的には(今回のゼロクロス時刻t−前回のゼロクロス時刻データTF)が今回の周期情報ttとしてレジスタTOTOにセットされる。そして、S49に進み、S49では、今回の周波数情報tt>周波数上限THLIM(発音開始後の上限)かどうかが判断され、Yの場合にはS50に進む。
【0076】
S49の周波数上限THLIMは、STEP3のS36で使用したトリガー時(発音開始時)周波数の許容範囲の上限(従って周期として最小で、最高音フレットの2〜3半音上の音高周期に相当する)と同一のものである。
次に、S50では次の処理が行われる。すなわち、レジスタRIVを0にし、今回のゼロクロス時刻tが前回のゼロクロス時刻データTFとして入力され、また前回の波高値AMP(b)が前々回波高値eに入力され、さらに今回波高値cが前回の波高値AMP(b)に入力される。
【0077】
そして、S50の処理の後S51に進み、S51では、周波数下限TLLIM>今回の周期情報ttかどうかが判断され、Yの場合すなわち今回の周期がノートオン中のピッチ抽出音域下限以下になった場合にはS52に進む。
この場合、周波数下限TLLIMは、例えば、開放弦音階の1オクターブ下にセットされる。つまり、STEP3の周波数下限TTLIM(S37参照)に比較して、許容範囲を広くしている。このようにすることで、トレモロアームの操作等による周波数変さらに対応し得るようになる。
従って、周波数の上限、下限について許容範囲に入る場合についてのみS52まで進み、そうでない場合はS49,S51よりメインルーチンへリターンする。
【0078】
次に、S52では周期データTTPが前々回抽出された周期データhに入力され、また、今回の周期情報ttが前回抽出された周期データTTPに入力される。そして、S53で今回波高値cがベロシティVELに書込まれ、S54に進む。S54では、ノーチェンジレベルNCHLV>(前々回波高値e−今回波高値c)かどうかの判断が行われ、Yの場合にはS55に進む。
すなわち、前回の同極性の波高値(e=AMP(b))と今回の波高値cとが大きく変化している場合は、その差がNCHLVを超えることになり、そのようなときに、抽出された周期情報に基づきピッチ変更を行うと、不自然な音高変化を呈することになる可能性が高い。そこで、S54でNの判断がなされると、S55以降の処理をすることなく、メインルーチンへリターンする。
【0079】
次に、S54でYの場合、S55では、リラティブオフカウンタFOFR=0か否かが判断される。後述するリラティブオフ処理を行っているときは、リラティブオフカウンタFOFRは0でなくなっており、そのような場合もピッチ変更(S602を参照)の処理を行うことなく、S55でNの判断をしてメインルーチンヘリターンする。そして、S55にて、Yの判断をしたときは、S56,S57へと順次進む。
ここで2波3値一致条件が判断される。S56では今回の周期情報tt×2−7>|今回の周期情報tt−前々回周期データh|が判断され、Yの場合にはS57に進み、またS57では今回の周期情報tt×2−7>|今回の周期情報tt−周期レジスタTTRの内容|が判断され、Yの場合にはS58に進む。
【0080】
すなわち、S56では、今回の周期情報tt(S43参照)が、前回の周期データh(=TTP)(S52参照)の値と略一致するか否かを判断し、S57では、今回の周期情報ttの値が、それに重なる周期でTTRとほぼ一致するか否かを判断する。なお、その限界範囲は、2−7×ttとして周期情報に依存してその値が変わるようになっている。勿論、これは固定の値としてもよいが、本実施形態採用技術の方が良好な結果を得ることができる。
【0081】
次のS58では、今回の周期情報tt>定数TTUかどうかが判断され、YならばS59に進み、ここで今回の周期情報tt<定数TTWかどうかが判断され、YならばS60へ進む。なお、S58,S59は急激なピッチ変更を認めないための判断である。
【0082】
つまり、S58の定数TTUは、STEP3のS301でいま0とされ、定数TTWは同様にMAXの値とされており、初めてこのフローを通るときは必ずS58,S59でYの判断がなされるが、その後は後述するS62において、定数TTUには、(17/32)tt(略1オクターブ高音の周期情報)がセットされ、定数TTWには同様にS62にて(31/16)tt(ほぼ1オクターブ低音の周期情報)がセットされる。従って、急激にオクターブアップする(これは、フレットを離してミュート操作したとき等に生ずる)ことやオクターブダウンすること(これは波形のピークをとり逃したとき等に起る)があったときは、ピッチ変更をすると、不自然となるので、ピッチ変更をしないようにブランチする。
【0083】
もし、S58,S59でYの判断がなされたときは、次にS60へ進む。S60では、レジスタSTEP=4にされたかどうかの判断が行われ、Yの場合には、S601へ進み、周期情報ttをレジスタTへセットし、S602にて音高コードを求める。このS602は、上述したS311と同様の音高コードを求めるサブルーチンPITCHCAL(図15)の実行を意味する。
【0084】
その結果、半音未満の音高コードを含む音高コードKが得られ、それをもって、音源SSに対しピッチ変更指示をする。
次にS62に進み、今回の周期情報ttに対応して時定数チェンジをし、また定数TTUが(17/32)×今回の周期情報ttに書替えられ、さらに定数TTTWが(31/16)×今回の周期情報ttに書替えられる。
【0085】
つまり、後述するように、リラティブオフの処理がなされたときに限り、STEP=5となるが、そのときは、ピッチ変更を行うことなく時定数チェンジを行う。この時定数チェンジの処理とは、レジスタに今回の周期情報ttの値に基づくデータをマイコンMCPがセットすることをいう。これは、既に説明したとおりである。
【0086】
そして、S62の処理の終了でメインルーチンヘリターンする。従って、以上述べたようにルート(2)は、次の処理がなされる。
すなわち、HNC=1、MT=0=b、RIV=1、FOFR←0、tt←(t−TF)、RIV←0、TF←t、e←AMP(0)、AMP(0)←c、h←TTP、TTP←tt、VEL←cであり、
【0087】
さらに、
(1)TTP≒TTR≒tt、
(2)TTU<tt<TTW、
(3)AMP(0)−c<NCHLV
の3条件の満足で、ttに従った半音未満(100セント未満)の音高変更も含むピッチ変更を行う。しかる後、TTU←(17/32)×tt、TTW←(31/16)×ttがなされる。
【0088】
従って、ルート(2)にて、実際の音源SSに対するピッチ変更が行われ、続くゼロクロスインタラプトでルート(1)の処理、同様に、続くゼロクロスインタラプトで、ルート(2)の処理が行われる。このようにして、ルート(1)では、単に周期を抽出(S67参照)し、ルート(2)では実際のピッチ変更(S602参照)し、時定数チェンジ処理(S62参照)が行われることになる。
【0089】
なお、STEP4におけるS40において、ルート(1)のS66で波形ナンバーカウンタHNCが3を超えるように、カウントアップされた後は、Yの判断がなされ、次にS41へ行き、リラティブオンの条件を検出する。これは、c−AMP(b)>TRLRLであり、前回の振幅値AMRL1に比べて今回の振幅値がしきい値TRLRLを超えて増大したとき、つまり、これは弦操作後に同じ弦を市政ピッキングしたとき(トレモロ奏法等による)にこのようなことがおき、この場合はS41でリラティブオンの処理をすべくS41からS78へ進み、時定数変換制御回路TTCの時定数チェンジレジスタCHTRRへ最高音フレット(例えば22フレット)の周期CHTIMをセットする。しかる後、図16のS60へ進み、当該発音中の楽音をノートオフした後、再発音開始する。
【0090】
通常の演奏操作によれば、S40,S41,S42へ進み、上述したルート(1)もしくはルート(2)へ進む。
次に、リラティブオフ処理を説明する。つまり、フレット操作している状態から、開放弦状態へ移行すると、波形の振幅レベルは急激に落ちてきて、前々回の波高値AMRL2と前回の波高値AMRL1との差が(1/32)AMRL2を超えるようになると、S46からS74へ進む。そして、リラティブオフカウンタFOFRが定数ROFCTを超えるまでカウントアップするようにS74からS75へ進む。このとき、S75からS48へ行きS49〜S55の処理を行うが、FOFR=0でないので、リラティブオフ処理に入る直前ではピッチ変更を行うことなくメインルーチンへ戻る。
【0091】
そして、S74でYと判断すると、FOFRの値が3となったとき(ROFCTは2である)、S74からS75へ行く。
ただし、S46のジャッジでYの判断が一度でもあると、S46からS47へ進み、FOFRをリセットするようになる。従って、ROFCTで指定される回数だけ続けてS46の条件を満足しなければ、リラティブオフの処理はなされない。なお、ROFCTの値は、音高が高い弦について大きな値としておけば、略一定の時間経過で、いずれの弦についてもリラティブオフ処理ができる。
【0092】
そして、S74からS76へ行くと、リラティブオフカウンタFOFRをリセットし、レジスタSTEPを5とし、S77へ進んで音源SSに対しノートオフを指示する。このSTEPが5の状態では、ピッチ抽出処理をSTEP4の時と同様に実行するが、S60からS601、S602を介することなくS62へ進むので、音源SSに対しては、ピッチ変更はされない。ただし、S62において抽出した周期に従って時定数チェンジ処理を行う。
【0093】
そして、STEPが5の状態では、リラティブオンの処理を受付けるが(S41,S78)、それ以外の場合では、図8のメインルーチンの中で、振動レベルが減少してきたことが検知されることによりM14でSTEPが0となり、初期状態に戻る。
なお、S46で使用するAMRL1、AMRL2はS64で作られており、1周期の中でレベルが大な方のピーク(最大ピークと最小ピークとの一方)が、この値とされ、最大ピークaが最小ピークb−1より必ず大である場合であって、an+1とan+2、an+2とan+3、an+3とan+4の差がいずれも所定値を超えるようになっている。
【0094】
また、このときルート(2)の処理においては、最小ピークbn+1、bn+2、bn+3が極端に減少してきているので、S54でNの判断が成されて、メインルーチンヘリターンし、ピッチ変更処理はなされない。
次に、ピッチ抽出しているなかで、オクターブ関係にある倍音、つまりオクターブ高い音やオクターブ低い音が続けて検出されたときの処理について説明する。
【0095】
既に説明したように、S58ではttがTTUを超えなかったとき、つまり、前回抽出した周期の17/32倍した値TTUより小になったとき、S76へ進む。つまり、オクターブ高い音が抽出されたときは、指定していたフレットから指を離してミュート操作をした場合とみなし、オクターブ高い音を出力することなく、S58からS76へ行き、リラティブオフ時同様S76,S77の処理によって当該音の発音を停止する。
また、S59では、ttがTTWを超えなかったとき、つまり前回抽出した周期の31/16倍した値TTWより大となったとき、S60へ進むことなく、メインルーチンへリターンする。
【0096】
通常ノートオフ近辺の非常に波形が小さい場合、他のピッキングによってヘキサピックアップのクロストオークやボディの共振によって波形が乗ってくる。すると、1オクターブ下の入力波形が続けて検出されてしまうことがある。
このような場合、何等処理を施さないと、急にオクターブ下の音を出力してしまい、極めて不自然となる。そのために、S57,S56でTan+2≒Tan+3≒Tbn+2が検出されても、Tan+3>Tan+1×(31/16)となるので、ピッチ変更することなく、S59からメインルーチンヘリターンする。
【0097】
次に、ダブリの波形が抽出される場合つまり、同じ極性のゼロクロス点が拭けて到来する場合について説明する。MT=1の場合の例を考えると、基本波周期と倍音成分の周期が非整数倍の関係にあるので、倍音の位相がずれて行き、同じ極性のゼロクロスを検出してしまうことになり、そのために誤ったピッチ変更をしないようにしないといけない。
そこで、図のダブリと書いてあるゼロクロス時のSTEP4の処理では、S42からS43へ行き、S43ではYの判断をしてS72へ行く。ここで、(an+3)と(an+2)の大きさが比較され、もし(an+3)が(an+2)より大であれば、S72でYの判断をし、AMP(1)に、(an+3)の値をセットし、もし逆の場合は何等変更処理をしない。
【0098】
ところで、このダブリの場合抽出している時刻データは何等使用しないので、周期情報Tan+3は何等変わらない。また、当然周期データに基づくピッチ変更は行わない。
同様に、波形のダブリの場合の例、すなわちMT=0の状態では、ダブリの状態が生じているときに、S42からS63へ行き、Yの判断をしてS68へ行く。S68では、いまの場合(an+2)と(an+3)との比較をして、(an+3)が(an+2)より大なときに限りS69へ行き、AMP(1)を書替える。この場合は、さらに前回の振幅値AMRL1と今回の振幅情報(波高値c)の比較をS70で行って、もしYならばS71へ進み、今回の振幅情報cを前回の振幅値AMRL1へセットする。
このようにして、倍音の影響で、波形がダブったときにも、S56,S57を満足しない限りピッチ変更処理はなされないことになる。
【0099】
以上述べたように、本実施形態に係る電子ギター1は、フレットスキャン部FSと、ピッチ抽出回路PCと、マイコンMCPとを備えている。フレットスキャン部FSは、指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、ピッチ抽出回路PCは、張設された弦の振動を検出する。また、マイコンMCPは、検出された弦の振動のレベルが第1のしきい値を超えたか否か判別する。そして、マイコンMCPは、第1のしきい値を超えたと判別された第1の区間における弦の振動のレベルと、当該第1の区間に続く第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、決定された音高の楽音を発生させる制御を行う。さらに、マイコンMCPは、第2の区間に続く第3の区間以降における弦の振動のレベルに基づいて、第1の音量を補正する。
【0100】
そのため、ピッキングが行われた直後の弦の振動のレベルに応じた音量で、早期に楽音を発生させることができるとともに、弦の振動が安定した区間における弦の振動のレベルに応じた音量に補正することができる。
従って、電子弦楽器による楽音の発生の遅れを抑制しつつ、発生される楽音の強さをより適切なものとすることができる。
【0101】
また、マイコンMCPは、第3の区間以降に前記検出された弦の振動が、第1の音量よりも、第2のしきい値以上小さい期間が所定期間継続した場合に、楽音の発生をミュートさせる。
そのため、弾弦された後に、弦を抑える等によってミュートが行われたことを検出することができるため、種々の奏法に対して、適切な音量の楽音を発生させることができる。
【0102】
また、マイコンMCPは、楽音の発生をミュートさせた後、検出された弦の振動が、第1の音量よりも、第3のしきい値以上小さい状態でなくなった場合、ミュートを解除する。
そのため、ミュートが終了したことを速やかに検出して、弦の振動に応じた音量で楽音の発生を行うことができるため、演奏において違和感が生じることを抑制できる。
【0103】
なお、前記実施例においては、最大ピーク点、最小ピーク点の次のゼロクロス点毎の間隔から周期抽出を行うようにしたが、その他の方式、例えは最大ピーク点間や最小ピーク点間の時間間隔から周期抽出を行ってもよい。また、それに合わせて回路構成は種々変更し得る。
また、前記実施例においては、この発明を電子ギター(ギターシンセサイザ)に適用したものであったが、それに限らない。ピッチ抽出を行って、オリジナルの信号とは別の音響信号を発生するタイプの楽器または装置であれば、種々適用可能である。
【0104】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
換言すると、図2及び図4等の構成は例示に過ぎず、特に限定されない。すなわち、上述した一連の処理を全体として実行できる機能が電子ギター1に備えられていれば足り、この機能を実現するためにどのような機能構成及び回路構成とするかは特に図2及び図4の例に限定されない。
また、1つの機能ブロックは、ハードウェア単体で構成してもよいし、ソフトウェア単体で構成してもよいし、それらの組み合わせで構成してもよい。
【0105】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、コンピュータ等にネットワークや記録媒体からインストールされる。
コンピュータは、専用のハードウェアに組み込まれているコンピュータであってもよい。また、コンピュータは、各種のプログラムをインストールすることで、各種の機能を実行することが可能なコンピュータ、例えば汎用のパーソナルコンピュータであってもよい。
【0106】
このようなプログラムを含む記録媒体は、ユーザにプログラムを提供するために装置本体とは別に配布されるリムーバブルメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される記録媒体等で構成される。リムーバブルメディアは、例えば、磁気ディスク(フロッピディスクを含む)、光ディスク、または光磁気ディスク等により構成される。光ディスクは、例えば、CD−ROM(Compact Disk−Read Only Memory),DVD(Digital Versatile Disk),Blu−ray Disc(ブルーレイディスク)(登録商標)等により構成される。光磁気ディスクは、MD(Mini−Disk)等により構成される。また、装置本体に予め組み込まれた状態でユーザに提供される記録媒体は、例えば、プログラムが記録されているROMやハードディスク等で構成される。
【0107】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【0108】
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【0109】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
[付記1]
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定手段と、
張設された弦の振動を検出する弦振動検出手段と、
前記検出された弦の振動のレベルが第1のしきい値を超えたか否か判別する第1の判別手段と、
前記第1のしきい値を超えたと判別された第1の区間における弦の振動のレベルと、当該第1の区間に続く第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行う制御手段と、
前記第2の区間に続く第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する補正手段と、
を有する電子弦楽器。
[付記2]
前記制御手段は、前記第3の区間以降に前記検出された弦の振動が、前記第1の音量よりも、第2のしきい値以上小さい期間が所定期間継続した場合に、楽音の発生をミュートさせる付記1に記載の電子弦楽器。
[付記3]
前記制御手段は、前記楽音の発生をミュートさせた後、前記検出された弦の振動が、前記第1の音量よりも、第3のしきい値以上小さい状態でなくなった場合、ミュートを解除する付記2に記載の電子弦楽器。
[付記4]
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられる楽音制御方法であって、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定し、
前記検出された弦の振動のレベルが第1のしきい値を超えたか否か判別し、
前記第1のしきい値を超えたと判別された第1の区間における弦の振動のレベルと、当該第1の区間に続く第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行い、
前記第2の区間に続く第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する、楽音制御方法。
[付記5]
張設された弦の振動を検出する弦振動検出手段を有する電子弦楽器に用いられるコンピュータに、
指板上における押弦操作に基づいて発生すべき楽音の音高を決定する音高決定ステップと、
前記検出された弦の振動のレベルが第1のしきい値を超えたか否か判別する第1の判別ステップと、
前記第1のしきい値を超えたと判別された第1の区間における弦の振動のレベルと、当該第1の区間に続く第2の区間における弦の振動のレベルとに基づいて決定した第1の音量で、前記決定された音高の楽音を発生させる制御を行う制御ステップと、
前記第2の区間に続く第3の区間以降における弦の振動のレベルに基づいて、前記第1の音量を補正する補正ステップと、
を実行させるプログラム。
【符号の説明】
【0110】
1・・・電子ギター、PG・・・スキャンパルス発生器、FS・・・フレットスキャン部、FDC・・・フレット検出回路、PC・・・ピッチ抽出回路、LPF・・・ローパスフィルタ、AMC・・・増幅回路、ZCR・・・ゼロクロス点取込回路、ABS・・・絶対値取込回路、FB・・・指板、MCP・・・マイコン、IC・・・割込制御回路、TMR・・・タイマー、A/D・・・アナログ−デジタル変換回路、MEM・・・メモリ、SOB・・・音源発生装置、SS・・・音源、D/A・・・デジタル−アナログ変換回路、AMC・・・増幅回路、DCD・・・アドレスデコーダ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16