(57)【要約】【課題】  演奏結果が正しいか又は誤っているかを判定できるだけでなく、演奏のタイミングずれ、および、演奏された指を検出する。【解決手段】  パソコン６は、演奏練習の曲データを電子楽器１に対して出力し、電子楽器１で演奏された演奏データを入力する。カメラ５は、電子楽器１の鍵盤２の画像および鍵盤２を演奏中の手の画像を撮像する。パソコン６は、入力された演奏データ並びにカメラ５によって撮像された鍵盤の画像および演奏中の手の画像に基づいて、演奏された鍵の指を検出して運指データを生成し、出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定する。【選択図】  図１
2006091631.tif 000002
【特許請求の範囲】
【請求項１】
演奏練習の曲データを鍵盤装置に対して出力するデータ出力手段と、
前記鍵盤装置で演奏された演奏データを入力するデータ入力手段と、
前記鍵盤装置の鍵盤の画像および当該鍵盤を演奏中の手の画像を撮像する撮像手段と、
前記データ入力手段によって入力された演奏データ並びに前記撮像手段によって撮像された鍵盤の画像および演奏中の手の画像に基づいて演奏された鍵の指を検出して運指データを生成する画像処理手段と、
前記データ出力手段によって出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定して正誤判定データを生成する演奏判定手段と、
入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとして所定の記憶手段に記憶する記憶制御手段と、
を備えた演奏練習管理システム。
【請求項２】
前記画像処理手段は、前記鍵盤の画像および手の画像に基づいて各鍵の位置および演奏中の各指の位置を検出することによって運指データを生成することを特徴とする請求項１に記載の演奏練習管理システム。
【請求項３】
前記画像処理手段は、各指先に施された色彩と指先以外の手の色彩および前記鍵盤の色彩とを識別することによって各指の位置を検出することを特徴とする請求項２に記載の演奏練習管理システム。
【請求項４】
前記画像処理手段は、各指の爪に施された異なる色彩を識別することによって各指の位置を検出することを特徴とする請求項３に記載の演奏練習管理システム。
【請求項５】
前記演奏判定手段は、出力された曲データにおける音高、発音タイミング、および消音タイミングと入力された演奏データにおける鍵番号および押鍵タイミングとを比較して正誤判定データを生成することを特徴とする請求項１に記載の演奏練習管理システム。
【請求項６】
演奏練習の曲データを鍵盤装置に対して出力する第１のステップと、
前記鍵盤装置で演奏された演奏データを入力する第２のステップと、
所定の撮像手段によって前記鍵盤装置の鍵盤の画像および当該鍵盤を演奏中の手の画像を取得する第３のステップと、
前記第２のステップによって入力された演奏データ並びに前記第３のステップによって取得された鍵盤の画像および演奏中の手の画像に基づいて演奏された鍵の指を検出して運指データを生成する第４のステップと、
前記第１のステップによって出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定して正誤判定データを生成する第５のステップと、
入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとして所定の記憶手段に記憶する第６のステップと、
を実行する演奏練習管理プログラム。
【請求項７】
前記第３のステップは、前記鍵盤の画像および手の画像に基づいて各鍵の位置および演奏中の各指の位置を検出することによって運指データを生成することを特徴とする請求項６に記載の演奏練習管理プログラム。
【請求項８】
前記第３のステップは、各指先に施された色彩と指先以外の手の色彩および前記鍵盤の色彩とを識別することによって各指の位置を検出することを特徴とする請求項７に記載の演奏練習管理プログラム。
【請求項９】
前記第３のステップは、各指の爪に施された異なる色彩を識別することによって各指の位置を検出することを特徴とする請求項８に記載の演奏練習管理プログラム。
【請求項１０】
前記第５のステップは、出力された曲データにおける音高、発音タイミング、および消音タイミングと入力された演奏データにおける鍵番号および押鍵タイミングとを比較して正誤判定データを生成することを特徴とする請求項６に記載の演奏練習管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演奏練習管理システムおよび演奏練習管理プログラムに関し、特に、鍵盤の演奏における演奏練習管理システムおよび演奏練習管理プログラムに関するものである。
【背景技術】
【０００２】
従来、電子鍵盤楽器や外部音源に接続して演奏するキーボード装置などの鍵盤装置によって演奏練習を行うもの、模範演奏に基づいて演奏を誘導するもの、ネットワークを介して先生が生徒に音楽教育を行うもの等々、演奏技術の向上を図るための多くの提案がなされている。
ある提案における演奏誘導装置の特許文献では、押鍵する鍵や指運びまで表示して、演奏イメージそっくりに演奏誘導する発明が記載されている。この提案によれば、その実施例における図１に示すように、テンポキー９ａ、９ｂ、ストップキー１０ｂ、プレイキー１０ｄ、カーソルキー１１、ポジションキー１２、ズームキー１３等を有する本体２、カメラ３、表示部４等を演奏誘導装置１に備えている。
カメラ３で実際の演奏時の鍵盤７と手を撮影して、表示部４に実映像として表示出力し、演奏曲に合わせて押鍵する鍵や手および指運びを示す演奏指示映像を実映像に重ね合わせて表示部４に表示出力して、演奏誘導する。このときポジションキー１２とズームキー１３でモード選択し、カーソルキー１１で演奏指示映像の位置および倍率を調整して実映像に一致させる。また、テンポキー９ａ、９ｂにより演奏指示映像の進行速度を調整し、ストップキー１０ｂやプレイキー１０ｄ等により演奏指示映像の停止や開始を行い、演奏指示映像と実映像を見ながら実際の演奏を行うことによって、演奏練習をするようになっている。（特許文献１参照）
【０００３】
また、別の提案における遠隔音楽教育システムの特許文献では、ネットワークを利用した遠隔教育において、遠隔地にいながらにして、各生徒の個性に合わせた適切な音楽教育を行う発明が記載されている。この提案によれば、その実施形態における図１および図２に示すように、教師１の使用する端末１０と、生徒の使用する端末２０とはネットワークを介して接続されており、それぞれ、マイク１３、２３、カメラ１２、２２を備えており、音声および画像の双方向通信が可能である。教師１と生徒２との間は、カメラ１２、２３で撮像されたお互いの姿、および、マイク１３、２３を介したお互いの音声によって、双方向通信によるコミュニケーションが可能であるとともに、教師１からは生徒２に楽譜データなどの教材データが送信され、情報の共有が可能であり、教師１、生徒２が演奏する楽器１５、２５の演奏音はＭＩＤＩデータとして交換可能である。（特許文献２参照）
【特許文献１】特開平７−３６４４６号公報
【特許文献２】特開２００２−３２３８４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１においては、実際の演奏時の鍵盤と手をカメラで撮影しているにもかかわらず、その撮像された画像からは、押鍵された鍵がどの指で演奏されたのかを検出することができない。また、特許文献２の提案においては、カメラで撮像されたお互いの姿を見ることはできるが、特許文献１の場合と同様に、撮像された画像からは、押鍵された鍵がどの指で演奏されたのかを検出することができないので、生徒が演奏した運指の状態を記録することができず、ネットワークを利用した遠隔教育が十分に生かされていない。
本発明は、このような従来の課題を解決するためのものであり、演奏練習の曲データに対する演奏結果が正しいか又は誤っているかを判定して正誤データを生成するとともに、演奏中の手の画像を撮像して演奏された指を検出して運指データを生成し、正誤データおよび運指データを含むデータを履歴データとして記録することを目的とする。
【課題を解決するための手段】
【０００５】
請求項１に記載の演奏練習管理システムは、演奏練習の曲データを鍵盤装置（実施形態においては、図１および図３の電子楽器１に相当する）に対して出力するデータ出力手段（実施形態においては、図３のＣＰＵ１１およびＭＩＤＩ・インターフェース１６に相当する）と、鍵盤装置で演奏された演奏データを入力するデータ入力手段（実施形態においては、図３のＣＰＵ１１およびＭＩＤＩ・インターフェース１６に相当する）と、鍵盤装置の鍵盤の画像および当該鍵盤を演奏中の手の画像を撮像する撮像手段（実施形態においては、図１および図３のカメラ５に相当する）と、データ入力手段によって入力された演奏データ並びに撮像手段によって撮像された鍵盤の画像および演奏中の手の画像に基づいて演奏された鍵の指を検出して運指データを生成する画像処理手段（実施形態においては、図３のＣＰＵ１１に相当する）と、データ出力手段によって出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定して正誤判定データを生成する演奏判定手段（実施形態においては、図３のＣＰＵ１１に相当する）と、入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとして所定の記憶手段（実施形態においては、図１のＲＡＭ１３および不揮発性メモリ１８に相当する）に記憶する記憶制御手段（実施形態においては、図３のＣＰＵ１１に相当する）と、を備えた構成になっている。
【０００６】
請求項１の演奏練習管理システムにおいて、請求項２に記載したように、画像処理手段は、鍵盤の画像および手の画像（実施形態においては、図２に示した画像２ｉおよび７ｉに相当する）に基づいて各鍵の位置および演奏中の各指の位置を検出することによって運指データを生成するような構成にしてもよい。
【０００７】
請求項２の演奏練習管理システムにおいて、請求項３に記載したように、画像処理手段は、各指先に施された色彩と指先以外の手の色彩および鍵盤の色彩とを識別することによって各指の位置を検出するような構成にしてもよい。
【０００８】
請求項３の演奏練習管理システムにおいて、請求項４に記載したように、画像処理手段は、各指の爪に施された異なる色彩（実施形態においては、図２に示した画像８ｉに相当する）を識別することによって各指の位置を検出するような構成にしてもよい。
【０００９】
請求項１の演奏練習管理システムにおいて、請求項５に記載したように、演奏判定手段は、出力された曲データにおける音高、発音タイミング、および消音タイミングと入力された演奏データにおける鍵番号および押鍵タイミングとを比較して正誤判定データを生成するような構成にしてもよい。
【００１０】
請求項６に記載の演奏練習管理プログラムは、演奏練習の曲データを鍵盤装置（実施形態においては、図１および図３の電子楽器１に相当する）に対して出力する第１のステップと、鍵盤装置で演奏された演奏データを入力する第２のステップと、所定の撮像手段（実施形態においては、図１および図３のカメラ５に相当する）によって鍵盤装置の鍵盤の画像および当該鍵盤を演奏中の手の画像を取得する第３のステップと、第２のステップによって入力された演奏データ並びに第３のステップによって取得された鍵盤の画像および演奏中の手の画像に基づいて演奏された鍵の指を検出して運指データを生成する第４のステップと、第１のステップによって出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定して正誤判定データを生成する第５のステップと、入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとして所定の記憶手段（実施形態においては、図３のＲＡＭ１３および不揮発性メモリ１８に相当する）に記憶する第６のステップと、を実行する。
なお、第１のステップないし第６のステップは、実施形態においては、図１のＣＰＵ１１によって実行される処理に相当する。
【００１１】
請求項６の演奏練習管理プログラムにおいて、請求項７に記載したように、第３のステップは、鍵盤の画像および手の画像（実施形態においては、図２に示した画像２ｉおよび７ｉに相当する）に基づいて各鍵の位置および演奏中の各指の位置を検出することによって運指データを生成するような構成にしてもよい。
【００１２】
請求項７の演奏練習管理プログラムにおいて、請求項８に記載したように、第３のステップは、各指先に施された色彩と指先以外の手の色彩および鍵盤の色彩とを識別することによって各指の位置を検出するような構成にしてもよい。
【００１３】
請求項８の演奏練習管理プログラムにおいて、請求項９に記載したように、第３のステップは、各指の爪に施された異なる色彩（実施形態においては、図２に示した画像８ｉに相当する）を識別することによって各指の位置を検出するような構成にしてもよい。
【００１４】
請求項６の演奏練習管理プログラムにおいて、請求項１０に記載したように、第５のステップは、出力された曲データにおける音高、発音タイミング、および消音タイミングと入力された演奏データにおける鍵番号および押鍵タイミングとを比較して正誤判定データを生成するような構成にしてもよい。
【発明の効果】
【００１５】
本発明の演奏練習管理システムおよび演奏練習管理プログラムによれば、演奏結果が正しいか又は誤っているかを判定できるだけでなく、演奏のタイミングずれ、および、演奏された指を検出できるという効果が得られる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明による演奏練習管理システムの実施形態について、鍵盤を備えた電子楽器、パソコン、およびカメラを組合わせた場合を例に採って説明する。
図１は、実施形態における演奏練習管理システムの外観図である。電子楽器１は、各鍵に設けられたＬＥＤなどの発光素子によって演奏をガイドする鍵盤２を備えているとともに、その背面側には、アングル３が取り付け部３ａによって固定されている。アングル３の最上部には、鍵盤２の中心部と対応する位置にカメラ取り付け部４が設けられ、ＣＣＤやＣＭＯＳなどの撮像素子を有するカメラ５が取り付けられている。なお、図には示していないが、カメラ取り付け部４には、カメラ５の水平位置（図の左右方向および奥行き方向の位置）を調節する機構が設けられている。
電子楽器１の上面にはパソコン６が置かれている。ただし、パソコン６は図に示した位置に限定されない。比較的奥行きのある電子楽器の場合や、平面型の表示部と本体とが別体のパソコンの場合には、演奏者の正面の位置、例えば、アングル３の取り付け部３ａの上に置くようにしてもよい。
【００１７】
図２は、カメラ５の撮像素子で撮像された画像を示す図である。撮像された画像は、撮像素子の各画素に対応するｘ座標およびｙ座標の位置が決定する。図２においては、左上の座標（０，０）、右上の座標（ＳＸ，０）、左下の座標（０，ＳＹ）、座標（ＳＸ，ＳＹ）によって指定される画角の中に、鍵盤の画像２ｉおよび手の画像７ｉが撮像できるように、カメラ５の水平位置が調節されている。演奏者の各指の爪には、異なる色のシールが貼付されており、図２に示すように、シールの画像８ｉが撮像されている。
【００１８】
図３は、電子楽器１、カメラ５、パソコン６の接続関係、および、パソコン６の内部構成を示すブロック図である。パソコン６のＣＰＵ１１は、システムバスを介して、ＲＯＭ１２、ＲＡＭ１３、スイッチ部１４、表示部１５、ＭＩＤＩ・Ｉ／Ｆ（インターフェース）１６、ビデオキャプチャ・Ｉ／Ｆ１７、不揮発性メモリ１８と接続され、各部との間でコマンドおよびデータの授受を行うことによって、このシステム全体を制御する。
【００１９】
ＲＯＭ１２は、ＣＰＵ１１によって実行される演奏練習管理プログラム、演奏練習の複数種類の曲データなどを記憶している。ＲＡＭ１３は、ＣＰＵ１１のワークエリアであり、ＣＰＵ１１によって処理されるデータを一時的に記憶する。スイッチ部１４は、キーボードおよびマウスなどのポインティングデバイスで構成され、ユーザの操作に応じて、曲選択指令、再生指令、再生停止指令などのコマンドをＣＰＵ１１に入力する。表示部１５は、液晶ディスプレイやプラズマディスプレイなどで構成され、演奏練習管理プログラムやその他のアプリケーションを起動させるメニュー画面、選択された曲データの楽譜、その他、演奏練習に必要なアイコンなどを表示する。ＭＩＤＩ・Ｉ／Ｆ１６は、演奏ガイドのためにＭＩＤＩ形式の曲データを電子楽器１に出力するとともに、電子楽器１からＭＩＤＩ形式の演奏データを入力する。
【００２０】
ビデオキャプチャ１７は、カメラ５に対してＣＰＵ１１の制御コマンドを出力してカメラ５を制御し、カメラ５で撮像された画像データをＣＰＵ１１に入力する。不揮発性メモリ１８は、ＵＳＢなどのコネクタを介して、着脱可能に装着された半導体メモリ、又はハードディスクなどで構成され、後述する演奏データの履歴を記録するメモリである。
なお、図には示していないが、インターネットなどのネットワークを介して、外部の他のパソコンやサーバとの間でデータの送受信やアプリケーションプログラムのダウンロードを行う通信手段を備えている。
【００２１】
次に、ＣＰＵ１１によって実行される演奏練習管理プログラムのフローチャート、ＲＯＭ１２に記憶されている曲データ、ＲＡＭ１３に記憶される演奏データなどに基づいて、図１に示した演奏練習管理システムの動作について説明する。
図４は、演奏練習管理プログラムにおけるメインルーチンのフローチャートである。種々の変数の初期化（ステップＳＡ１）の後、曲データの読込みを行い（ステップＳＡ２）、スイッチ部１４から再生指令が入力されたか否かを判別する（ステップＳＡ３）。再生指令が入力されたときは、曲データを電子楽器１に出力する再生処理を実行する（ステップＳＡ４）。
【００２２】
再生処理中において、スイッチ部１４から再生停止指令が入力されたか否かを判別する（ステップＳＡ５）。再生停止指令が入力されない場合には、曲が終了したか否かを判別し（ステップＳＡ６）、曲が終了していない場合には、ステップＳＡ４の再生処理を続行する。再生停止指令が入力されたとき、又は、曲が終了したときは、スイッチ部１４から曲選択指令が入力されたか否かを判別する（ステップＳＡ７）。曲選択指令が入力されたときは、ステップＳＡ２に移行して、新たに選択された曲データを読込み、ステップＳＡ３移行の処理を繰り返す。
【００２３】
ステップＳＡ７において曲選択指令が入力されない場合には、ステップＳＡ３に移行して、再生が終了した同じ曲データに対して再生指令が入力されたか否かを判別する。再生指令が入力されない場合には、この演奏練習管理のアプリケーションプログラムの終了指令が入力されたか否かを判別し（ステップＳＡ８）、終了指令が入力されない場合にはステップＳＡ３に移行して再生指令が入力されたか否かを判別する。終了指令が入力されたときは、演奏練習管理のアプリケーションプログラムを終了して、パソコンの初期メニューに戻る。
【００２４】
図５は、ＲＯＭ１２に記憶されている各曲データを示すフォーマットである。この図に示すように、曲データは、ＮＯＴＥ（０）、ＮＯＴＥ（１）、ＮＯＴＥ（３）…、および、曲の終了を示すＮＵＬＬからなる複数のイベントのシーケンスデータで構成されている。各イベントは、発音開始時間を示すＯＮＴＩＭＥ、発音継続時間（音長）を示すＧＡＴＥ、音高を示すＰＩＴＣＨ、指番号を示すＦＩＧＯ、正誤判定に用いるフラグを示すＭＫ、前回のイベントを示すポインタであるｐｒ、次のイベントを示すポインタであるｐｎで構成されている。ＦＩＧＯの番号は、右手の親指、人差し指、中指、薬指、小指がそれぞれ０，１，２，３，４で指定され、左手の親指、人差し指、中指、薬指、小指がそれぞれ５，６，７，８，９で指定される。
【００２５】
図６は、ＲＡＭ１３のバッファエリアＯＮＢＵＦ（０）、ＯＮＢＵＦ（１）、ＯＮＢＵＦ（３）…の構成を示し、各バッファエリアには、再生指令に応じてＲＯＭ１２から読込まれたイベントのＯＮＴＩＭＥ、ＰＩＴＣＨの値とともに、消音時間を示すＯＦＦＴＩＭＥおよび対応する図５のイベントＮＯＴＥを示すポインタであるｐｓがストアされる。このうち、ＯＮＴＩＭＥ、ＰＩＴＣＨの値がＭＩＤＩ・Ｉ／Ｆ１６を介して電子楽器１に出力され、ＰＩＴＣＨに対応する鍵の発光素子がＯＮＴＩＭＥの発音開始時間に発光して演奏ガイドが行われる。
【００２６】
図７は、電子楽器１から入力される演奏データをストアするＲＡＭ１３のエリアを示す図である。この図に示すように、ＰＬＡＹ（０）、ＰＬＡＹ（１）、ＰＬＡＹ（２）…からなる各演奏データは、押鍵開始時間を示すＯＮＴＩＭＥ、押鍵継続時間を示すＧＡＴＥ、押鍵の音高を示すＰＩＴＣＨ、その演奏データを示すポインタであるｐｐ、演奏した指番号を示すＦＩＧＰ、１つ前に演奏した指番号を示すＦＰＲＥＶ、押鍵および離鍵の演奏結果の判定を示すＯＮＪおよびＯＦＦＪ、１つ前の演奏データを示すポインタであるｐｒ、次の演奏データを示すポインタであるｐｎで構成されている。ＯＮＪおよびＯＦＦＪは、音高の不一致および許容範囲を超えるタイミングずれの場合は０、音高およびタイミングの一致の場合は１、演奏タイミングの早すぎは２、演奏タイミングの遅すぎは３で示される。なお、演奏終了後は、図７の演奏データは不揮発性メモリ１８に履歴データとして保存される。
【００２７】
図８は、電子楽器１から入力される演奏データを一時的にストアするＲＡＭ１３のエリアを示す図である。この図に示すように、ＰＬＢＵＦ（０）、ＰＬＢＵＦ（１）、ＰＬＢＵＦ（３）…の各エリアには、押鍵開始時間を示すＯＮＴＩＭＥ、図７のエリアを示すポインタであるｐｐ、図８の当該エリアを示すポインタであるｐｑ、押鍵および離鍵の演奏結果の判定を示すＯＮＪおよびＯＦＦＪのデータがストアされる。
【００２８】
図９は、カメラ５によって撮像された図２の画像の各画素における青、緑、赤の３原色の値であるＢＶＡＬＵＥ、ＧＶＡＬＵＥ、ＲＶＡＬＵＥを示す１画面分の画像データをストアするＲＡＭ１３のエリアを示す図である。この場合において、ＢＶＡＬＵＥ、ＧＶＡＬＵＥ、ＲＶＡＬＵＥは０から１までの値で表される。外光の分光特性や反射率などによって多少変化はするが、白鍵の領域における各画素のＢＶＡＬＵＥ、ＧＶＡＬＵＥ、ＲＶＡＬＵＥは、ほぼ（１，１，１）となり、黒鍵のＢＶＡＬＵＥ、ＧＶＡＬＵＥ、ＲＶＡＬＵＥは、ほぼ（０，０，０）となる。
【００２９】
図１０は、カメラ５によって撮像された鍵盤２の画像において、１２８個の各鍵で指が接触する領域ＡＲ（０）〜ＡＲ（１２７）の左下の座標（ｘ、ｙ）および鍵番号を示すＫＥＹを示す図である。ある鍵番号ＫＥＹの鍵が演奏されたときは、その領域ＡＲ（ＫＥＹ）の各画素のＢＶＡＬＵＥ、ＧＶＡＬＵＥ、ＲＶＡＬＵＥに基づいて、演奏中の指を検出する。これについては後述する。
【００３０】
図１１は、右手の親指、人差し指、中指、薬指、小指の各画像であるＦＩＧ（０）、ＦＩＧ（１）、ＦＩＧ（２）、ＦＩＧ（３）、ＦＩＧ（４）において、爪に貼付された各シールにおける青、緑、赤の３原色の値であるＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧの画像データをストアするＲＡＭ１３のエリアを示す図である。例えば、親指のシールが赤であるならば、ＦＩＧ（１）におけるＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧは、ほぼ（０，０，１）となる。人差し指のシールが青であるならば、ＦＩＧ（１）におけるＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧは、ほぼ（１，０，０）となる。中指のシールが緑であるならば、ＦＩＧ（１）におけるＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧは、ほぼ（０，１，０）となる。他の指のシールもその色に応じてＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧのデータが決定される。また、シール以外の爪や爪以外の手の部分のＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧは、演奏者の肌の色の分光特性に応じたデータとなる。
【００３１】
図１２は、図４におけるステップＳＡ４の再生処理のフローチャートである。まず、変数を初期化する（ステップＳＢ１）。次に、ＭＩＤＩ・Ｉ／Ｆ１６を介して電子楽器１に出力して演奏をガイドするために、図６のエリアにストアされているイベントのポインタｐｓを変数ｎにセットする（ステップＳＢ２）。そして、ステップＳＢ４からステップＳＢ１１までのループ処理を実行する。
すなわち、図５に示したＲＯＭ１２の曲データにおいて、ＮＯＴＥ（ｎ）がＮＵＬＬすなわち曲の終了であるか否かを判別し（ステップＳＢ４）、ＮＯＴＥ（ｎ）がＮＵＬＬでない場合には、ＮＯＷＴＩＭＥに経過時間を加算する（ステップＳＢ５）。すなわち、曲再生開始からの時刻であるリアルタイムでＮＯＷＴＩＭＥを更新する。実際には、曲再生開始からのクロック数によってリアルタイムを表わすが、説明を分かり易くするために時刻を用いることにする。この後、ノートオン処理（ステップＳＢ６）、ノートオフ処理（ステップＳＢ７）、表示処理（ステップＳＢ８）を行う。次に、ＮＯＷＴＩＭＥの時刻をＬＡＳＴＴＩＭＥにストアして（ステップＳＢ９）、ｎの値を次のイベントのポインタｐｎに変更する（ステップＳＢ１０）。そして、ステップＳＢ４に移行して上記ループ処理を繰り返す。
【００３２】
ステップＳＢ４においてＮＯＴＥ（ｎ）がＮＵＬＬである場合には、ＯＮＢＵＦ（０）がＮＵＬＬであるか否かを判別する（ステップＳＢ１１）。ＯＮＢＵＦ（０）がＮＵＬＬでない場合には、ステップＳＢ５においてＮＯＷＴＩＭＥに経過時間を加算する。一方、ＯＮＢＵＦ（０）がＮＵＬＬである場合には、電子楽器１に出力するイベントが残っていないので、メインルーチンに戻る。
【００３３】
図１３は、図１２におけるステップＳＢ６のノートオン処理のフローチャートである。この処理においては、ＲＯＭ１２の曲データをＲＡＭ１３のバッファエリアにストアする。まず、変数ｎのイベントＮＯＴＥ（ｎ）がＮＵＬＬであるか否かを判別し（ステップＳＣ１）、ＮＯＴＥ（ｎ）がＮＵＬＬである場合にはこのフローを終了するが、ＮＵＬＬでない場合には、ＮＯＷＴＩＭＥの時刻がＯＮＴＩＭＥの発音開始時間に達したか否かを判別する（ステップＳＣ２）。まだ発音開始時間に達していない場合はこのフローを終了するが、発音開始時間に達したときは、ＯＮＢＵＦの空きエリアを捜すために、エリアを指定する変数ｉを０にセットし（ステップＳＣ３）、ｉの値をインクリメントしながら以下のループ処理を実行する。
【００３４】
ＯＮＢＵＦ（ｉ）がＮＵＬＬであるか否かを判別し（ステップＳＣ４）、ＯＮＢＵＦ（ｉ）がＮＵＬＬでない場合には、ｉの値を１つインクリメントする（ステップＳＣ５）。このとき、ｉの値が最大値ｉＭＡＸを超えたか否かを判別し（ステップＳＣ６）、ｉの値が最大値以内である場合には、ステップＳＣ４においてＯＮＢＵＦ（ｉ）がＮＵＬＬであるか否かを判別する。ＯＮＢＵＦ（ｉ）がＮＵＬＬである場合には、ＮＯＴＥ（ｎ）の発音開始時間ＯＮＴＩＭＥ、音高ＰＩＴＣＨ、ポインタｐｓをＯＮＢＵＦ（ｉ）にストアする（ステップＳＣ７）。そして、ＯＮＢＵＦ（ｉ）のＯＮＴＩＭＥ、ＰＩＴＣＨを電子楽器１に出力し（ステップＳＣ８）、変数ｎに次のイベントを示すポインタｐｎをストアする（ステップＳＣ９）。そして、図１２のフローに戻り、ステップＳＢ７のノートオフ処理に移行する。
【００３５】
図１４は、ステップＳＢ７のノートオフ処理のフローチャートである。まず、ＲＡＭ１３のＯＮＢＵＦのエリアを指定する変数ｉを０にセットし（ステップＳＤ１）、ｉの値をインクリメントしながら以下のループ処理を実行する。ＯＮＢＵＦ（ｉ）がＮＵＬＬであるか否かを判別する（ステップＳＤ２）。ＯＮＢＵＦ（ｉ）がＮＵＬＬでない場合には、ＮＯＷＴＩＭＥの時刻がＯＦＦＴＩＭＥの消音時間に達したか否かを判別する（ステップＳＤ５）。ＯＮＢＵＦ（ｉ）がＮＵＬＬである場合、又は、ＮＯＷＴＩＭＥの時刻がＯＦＦＴＩＭＥの消音時間に達していない場合には、ｉの値を１つインクリメントする（ステップＳＤ４）。このとき、ｉの値が最大値ｉＭＡＸを超えたか否かを判別し（ステップＳＤ５）、ｉの値が最大値以内である場合には、ステップＳＤ２においてＯＮＢＵＦ（ｉ）がＮＵＬＬであるか否かを判別する。
【００３６】
ＮＯＷＴＩＭＥの時刻がＯＦＦＴＩＭＥの消音時間に達したときは、ＯＮＢＵＦ（ｉ）のＰＩＴＣＨおよび消音指令のＭＩＤＩデータを電子楽器１に出力する（ステップＳＤ６）。次に、ＯＮＢＵＦ（ｉ＋１）のデータをＯＮＢＵＦ（ｉ）のエリアに上書きして更新する（ステップＳＤ７）。そして、ｉの値をインクリメントして（ステップＳＤ８）、ＯＮＢＵＦ（ｉ＋１）がＮＵＬＬであるか否かを判別する（ステップＳＤ９）。ＯＮＢＵＦ（ｉ＋１）がＮＵＬＬでない場合には、ステップＳＤ７〜ステップＳＤ９のループ処理を繰り返し、ＯＮＢＵＦ（ｉ＋１）のデータを順次ＯＮＢＵＦ（ｉ）のエリアに上書きする。ステップＳＤ９において、ＯＮＢＵＦ（ｉ＋１）がＮＵＬＬである場合には、バッファのエリアの上書きがすべて終了したので、図１２のフローに戻り、ステップＳＢ８の表示処理に移行する。
【００３７】
図１５は、電子楽器１から演奏データが入力されたときの割り込み処理であるＭＩＤＩ・ＩＮ処理のフローチャートである。この割り込みがあると、入力された演奏データが押鍵であるか否かを判別し（ステップＳＥ１）、押鍵である場合には押鍵処理を行う（ステップＳＥ２）。演奏データが押鍵でない場合には、演奏データが離鍵であるか否かを判別し（ステップＳＥ３）、離鍵である場合には離鍵処理を行う（ステップＳＥ４）。演奏データが押鍵でも離鍵でもない場合、例えば、エフェクト操作などの場合には、その演奏データに対応する処理を行う（ステップＳＥ５）。演奏データに対応する処理の後はメインルーチンに戻る。
【００３８】
図１６および図１７は、図１５におけるステップＳＥ２の押鍵処理のフローチャートである。図１６のフローにおいて、まず、押鍵された鍵番号をＫＥＹにストアする（ステップＳＦ１）。次に、初期設定を行うために、フラグＰＬＡＹＦが０であるか否かを判別する（ステップＳＦ２）。ＰＬＡＹＦは図４におけるステップＳＡ１の変数の初期化で０にリセットされている。ＰＬＡＹＦが０である場合には、ＰＬＡＹＦを１にセットし（ステップＳＦ３）、図７において次の演奏データを示すポインタｐｎを０にセットし（ステップＳＦ４）、この押鍵処理で用いる変数ｍを−１にセットし（ステップＳＦ５）、図８のポインタｐｑを０にセットする（ステップＳＦ６）。
【００３９】
ステップＳＦ３ないしステップＳＦ６の初期設定の後、又は、ステップＳＦ２においてＰＬＡＹＦが１である場合には、ポインタｐｎによって図７のＰＬＡＹ（ｐｎ）を指定する（ステップＳＦ７）。したがって、初期設定した直後はＰＬＡＹ（０）を指定する。次に、押鍵開始時間であるＯＮＴＩＭＥにＮＯＷＴＩＭＥの現時刻をストアする（ステップＳＦ８）。また、押鍵された鍵番号であるＫＥＹのデータをＰＩＴＣＨにストアする（ステップＳＦ９）。この後、ｐｐにｐｎの値をセットし（ステップＳＦ１０）、ｐｒにｍの値をセットし（ステップＳＦ１１）、ｍにｐｐ＋１の値をセットする（ステップＳＦ１２）。したがって、初期設定した最初は、現在のＰＬＡＹ（ｐｐ）を示すポインタｐｐの値は０、変数ｍの値は１となる。
【００４０】
次に、図１７のフローに移行して、ＰＬＡＹ（ｍ）がＮＵＬＬであるか否かを判別する（ステップＳＦ１３）。したがって、最初は、ＰＬＡＹ（０）の次のエリアであるＰＬＡＹ（１）がＮＵＬＬであるか否かを判別する。ＰＬＡＹ（ｍ）がＮＵＬＬでない場合には、ｍの値を１つインクリメントする（ステップＳＦ１４）。このとき、ｍの値が最大値を超えたか否かを判別し（ステップＳＦ１５）、最大値以内である場合には、ステップＳＦ１３において再びＰＬＡＹ（ｍ）がＮＵＬＬであるか否かを判別する。すなわち、変数ｍの値をインクリメントしながら、次の演奏データをストアできる空きエリアを捜す。
【００４１】
ＰＬＡＹ（ｍ）がＮＵＬＬの空きエリアを見つけた場合には、次のエリアを示すポインタｐｎにｍの値をセットし（ステップＳＦ１６）、ｍに現在のエリアを示すポインタｐｐの値をセットする（ステップＳＦ１７）。すなわち、ｍの値をインクリメントしてＰＬＡＹ（ｍ）がＮＵＬＬの空きエリアを見つけたので、ｍの値を元の値に戻す。次に、図８に示したバッファにおいてＰＬＢＵＦ（ｐｑ）のエリアを指定する（ステップＳＦ１８）。したがって、最初はＰＬＢＵＦ（０）のエリアを指定する。次に、押鍵開始時間であるＯＮＴＩＭＥにＮＯＷＴＩＭＥの現時刻をストアする（ステップＳＦ１９）。次に、ＰＬＢＵＦ（ｐｑ）のエリアのポインタｐｐに、ＰＬＡＹ（ｐｐ）のエリアにおけるｐｐの値をセットする（ステップＳＦ２０）。すなわち、電子楽器１から入力された現在の演奏データをストアしたＰＬＡＹ（ｐｐ）のエリアとＰＬＢＵＦ（ｐｑ）のエリアとをポインタｐｐによって対応させる。そして、ｐｑの値を１つインクリメントして（ステップＳＦ２１）、次に演奏データをストアするためのＰＬＢＵＦ（ｐｑ）のエリアを示すポインタを変更する。
この後は、演奏中の指を検出するための画像処理（ステップＳＦ２２）、演奏された鍵の正誤および演奏タイミングの内容を判定する判定処理（ステップＳＦ２３）を行って、メインルーチンに戻る。
【００４２】
画像処理の説明に先立って、その画像処理の対象となる図１０に示した１２８個の各鍵で指が接触する領域ＡＲ（０）〜ＡＲ（１２７）について説明する。図１８は、図２に示した鍵盤の画像の一部であり、各白鍵および各黒鍵において押鍵する指が接触する範囲を二点鎖線の矩形の領域ＡＲ（０）、ＡＲ（１）、ＡＲ（２）、ＡＲ（３）…で示している。これらの領域は、撮像素子の画素によって位置の座標が確定されるので、各領域における１つの座標、例えば、左下の座標を基準にすると、すべての領域ＡＲ（０）〜ＡＲ（１２７）における画素の座標を確定することができる。
図１９は、変数ｊ，ｋで指定される画素（ｊ，ｋ）に基づく矩形の範囲を示す図である。この図に示すように、ｘ（水平）方向がαでｙ（垂直）方向がβの範囲が画像処理の対象となる領域であり、この領域の画素数は（α＋１）×（β＋１）である。
【００４３】
図２０ないし図２２は、画像処理のフローチャートである。図２０において、まず、押鍵された鍵番号であるＫＥＹの値に対応する領域の基準座標であるｘ（ＫＥＹ）をｊとし、ｙ（ＫＥＹ）をｋとする（ステップＳＧ１）。すなわち、ＡＲ（ＫＥＹ）の領域を特定する。次に、押鍵した指番号をストアするＦＩＧＰに−１をストアし、この画像処理によって各指に対応する画素をカウントするカウンタＣＮＴ（０）〜ＣＮＴ（４）を０にクリアする（ステップＳＧ２）。次に、変数ｊ，ｋで指定される画素（ｊ，ｋ）をＩＭＧにストアして（ステップＳＧ３）、ＩＭＧの青成分、緑成分、および赤成分と基準の青成分、緑成分、および赤成分とのそれぞれの差の絶対値を算出する。
【００４４】
すなわち、ＢＶＡＬＵＥとＢＲＥＦとの差の絶対値をＤＢにストアし（ステップＳＧ４）、ＧＶＡＬＵＥとＧＲＥＦとの差の絶対値をＤＧにストアし（ステップＳＧ５）、ＲＶＡＬＵＥとＲＲＥＦとの差の絶対値をＤＲにストアする（ステップＳＧ６）。次に、ＤＢ、ＤＧ、ＤＲの値のいずれかが所定値以下であるか否かを判別する（ステップＳＧ７）。ＩＭＧの青成分、緑成分、又は赤成分と、基準の青成分、緑成分、又は赤成分との差が所定値以下である場合には、ＩＭＧの画素は爪に貼付されたシールの画素の可能性がある。一方、ＤＢ、ＤＧ、ＤＲの値のすべてが所定値を超えている場合には、ＩＭＧの画素はシールの画素ではない。
【００４５】
ステップＳＧ７において、ＤＢ、ＤＧ、ＤＲの値のすべてが所定値を超えている場合には、ｊの値を１つインクリメントする（ステップＳＧ８）。このとき、ｊの値がαの値を超えているか否かを判別し（ステップＳＧ９）、αの値を超えているときは、ｊの値を０にセットして、ｋの値を１つインクリメントする（ステップＳＧ１０）。このとき、ｋの値がβの値を超えているか否かを判別する（ステップＳＧ１１）。ステップＳＧ９においてｊの値がαの値を超えていない場合、又は、ステップＳＧ１１においてｋの値がβの値を超えていない場合には、ＡＲ（ＫＥＹ）の領域において未処理の画素が残っているので、ステップＳＧ３に移行してｊ，ｋで指定される画素（ｊ，ｋ）をＩＭＧにストアして、上記のループ処理を繰り返し、その画素の色を判定する。
【００４６】
ステップＳＧ７において、ＤＢ、ＤＧ、ＤＲの値のいずれかが所定値以下である場合には、図２１のフローにおいて、変数ｉを０にセットして（ステップＳＧ１２）、あらかじめ登録されている各指に貼付されたシールの色データの中から、ｉで指定する指のシールの色データであるＦＩＧＣ（ｉ）の青成分ＢＦＩＧ、緑成分ＧＦＩＧ、赤成分ＲＦＩＧを読出し（ステップＳＧ１３）、ＩＭＧの画素（ｊ，ｋ）の青成分ＢＶＡＬＵＥ、緑成分ＧＶＡＬＵＥ、赤成分ＲＶＡＬＵＥとの差の絶対値を算出する。
すなわち、ＢＶＡＬＵＥとＢＦＩＧとの差の絶対値をＪＢにストアし（ステップＳＧ１４）、ＧＶＡＬＵＥとＧＦＩＧとの差の絶対値をＪＧにストアし（ステップＳＧ１５）、ＲＶＡＬＵＥとＲＦＩＧとの差の絶対値をＪＲにストアする（ステップＳＧ１６）。
【００４７】
そして、ＪＢ、ＪＧ、ＪＲのすべてが基準値であるか否かを判別する（ステップＳＧ１７）。ＪＢ、ＪＧ、ＪＲのすべてが基準値である場合には、画素（ｊ，ｋ）は指番号ｉの色データＦＩＧＣ（ｉ）と一致する。この場合には、ＣＮＴ（ｉ）の値を１つインクリメントする（ステップＳＧ１８）。この後、又は、ステップＳＧ１７においてＪＢ、ＪＧ、ＪＲのすべてが基準値でなく、画素（ｊ，ｋ）が指番号ｉの色データＦＩＧＣ（ｉ）と一致しない場合には、ｉの値を１つインクリメントする（ステップＳＧ１９）。このとき、ｉの値が４を超えたか否かを判別し（ステップＳＧ２０）、ｉの値が４以下である場合には、ステップＳＧ１３に移行して、次の指番号ｉで指定するＦＩＧＣ（ｉ）のＢＦＩＧ、ＧＦＩＧ、ＲＦＩＧを読出し、上記の色判別処理を繰り返す。そして、ステップＳＧ２０においてｉの値が４を超えたときは、図２０のフローのステップＳＧ８に移行して、次の画素を指定する。
【００４８】
図２０のステップＳＧ１１において、ｋの値がβの値を超えた場合、すなわち、押鍵された鍵番号の領域ＡＲ（ＫＥＹ）におけるすべての画素について色判別処理が終了したときは、図２２のフローにおいて、指番号を指定する２つの変数ｉ，ｄをともに０にセットし（ステップＳＧ２１）、押鍵の指を示すＦＩＧＰにｄの値をストアする（ステップＳＧ２２）。したがって、最初はＦＩＧＰの値は０であり、親指が押鍵の指として仮に設定される。次に、ｉの値を１つインクリメントし（ステップＳＧ２３）、ｉの値が４以下であるか否かを判別する（ステップＳＧ２４）。
【００４９】
ｉの値が４以下である場合には、ＣＮＴ（ｉ）の値がＣＮＴ（ｄ）の値よりも大きいか否かを判別する（ステップＳＧ２５）。すなわち、押鍵された鍵番号の領域ＡＲ（ＫＥＹ）において、ｉで指定する指のシールの画素数がｄで指定する指のシールの画素数よりも大きいか否かを判別する。ＣＮＴ（ｉ）の値がＣＮＴ（ｄ）の値よりも大きい場合には、押鍵した指の可能性は、ｄで指定した指よりもｉで指定した指の方が高い。この場合には、ｄにｉの値をセットして（ステップＳＧ２６）、ステップＳＧ２２に移行して、ＦＩＧＰにストアする指番号ｄの値を変更する。そして、ステップＳＧ２３に移行して、ｉの値を１つインクリメントする。一方、ステップＳＧ２５において、ＣＮＴ（ｉ）の値がＣＮＴ（ｄ）の値よりも小さい場合には、押鍵した指の可能性は、ｉで指定した指よりもｄで指定した指の方が高い。この場合には、ＦＩＧＰにストアする指番号を変更することなく、ステップＳＧ２３に移行して、ｉの値を１つインクリメントする。そして、ｉの値が４を超えるまでＣＮＴ（ｉ）の値とＣＮＴ（ｄ）の値とを比較しながら、押鍵した可能性がより高い指を捜す。
【００５０】
ｉの値が４を超えたときは、押鍵の指が暫定的に判定されるが、指くぐりや指越えによって親指がカメラ５から見えない場合もある。例えば、演奏練習前のウォーミングアップや初心者の基礎練習で音階を演奏する際には、低音から高音への１オクターブの演奏では「ドレミファソラシド」のファの鍵を指くぐりの親指で押鍵し、高音から低音への１オクターブの演奏では「ドシラソファミレド」のミの鍵を指越えの中指で押鍵する。このため、指くぐり又は指越えの演奏であるかを判定しなければ、押鍵の指を確定的に判定することができない。
【００５１】
したがって、ステップＳＧ２４においてｉの値が４を超えたときは、ＦＩＧＰの暫定的な指番号が０でないか否かを判別する（ステップＳＧ２７）。暫定的な指番号が０である場合には、カメラ５によって親指のシールが撮像されているので、指くぐりおよび指越えの演奏ではないので、暫定的に判定した親指は実際の押鍵の指として確定する。一方、ＦＩＧＰの暫定的な指番号が０でない場合には、押鍵された鍵番号を中心とする所定範囲、例えば、手の幅に相当する範囲に、親指が無いか否かを判別する（ステップＳＧ２８）。親指がある場合には、暫定的に判定した人差し指、中指、薬指、又は小指は実際の押鍵の指として確定する。
【００５２】
所定範囲に親指が無い場合には、親指くぐり又は親指越えの演奏の可能性があるので、前回の押鍵の指を示すＦＰＲＥＶの値が０でないか否かを判別する（ステップＳＧ２９）。親指で押鍵した後に親指くぐりので押鍵することはないので、ＦＰＲＥＶの値が０でない場合には、押鍵した指は親指であるので、ＦＩＧＰに０をストアする（ステップＳＧ３０）。ＦＰＲＥＶの値が０で前回の押鍵が親指である場合には、今回の押鍵は親指以外の他の指である。すなわち、暫定的な指番号が押鍵の指番号として確定される。指番号を確定した後は、その確定したＦＩＧＰの指番号をＦＰＲＥＶにストアして（ステップＳＧ３１）、このフローチャートを終了する。
【００５３】
図２３ないし図２５は、図１７のフローにおけるステップＳＦ２３の判定処理のフローチャートである。この判定処理においては、検索用の２つのポインタｐｂ、ｐｆを使用して、演奏データの正誤や演奏のタイミングずれを判定する。ｐｂは、すでに押鍵をガイドしたイベントを検索するポインタであり、ｐｆは、次に押鍵をガイドする予定のイベントを検索するポインタである。図２３において、まず、ｐｂに変数ｎの値をセットする（ステップＳＨ１）。変数ｎの値は、図１３のフローのステップＳＣ７およびステップＳＣ８に示したように、電子楽器１に出力してすでに押鍵をガイドした発音のイベントＮＯＴＥ（ｎ）を示すものである。次に、ｐｆにＮＯＴＥ（ｎ）のｐｎの値をセットする（ステップＳＨ２）。すなわち、次に押鍵をガイドする予定のイベントを示すポインタｐｎの値をｐｆにセットする。
【００５４】
次に、ＮＯＴＥ（ｐｂ）およびＮＯＴＥ（ｐｆ）がともにＮＵＬＬであるか否かを判別する（ステップＳＨ３）。これらがともにＮＵＬＬである場合には、すでに押鍵をガイドしたイベントに対する演奏データの判定が終了し、次にガイドするイベントの無い状態、すなわち、判定する対象がないのでメインルーチンに戻る。ＮＯＴＥ（ｐｂ）およびＮＯＴＥ（ｐｆ）のうち少なくとも一方がＮＵＬＬでない場合には、ＮＯＴＥ（ｐｂ）がＮＵＬＬであるか否かを判別する（ステップＳＨ４）。ＮＯＴＥ（ｐｂ）がＮＵＬＬでない場合には、このイベントを電子楽器１に出力して、電子楽器１から入力された演奏データがＲＡＭ１３のＰＬＢＵＦのエリアにストアされている場合である。
【００５５】
この場合には、イベントＮＯＴＥ（ｐｂ）の発音開始時間であるＯＮＴＩＭＥ（ｐｂ）をｔ１にストアし（ステップＳＨ５）、演奏データＰＬＢＵＦ（ｐｐ）の押鍵開始時間であるＯＮＴＩＭＥ（ｐｐ）をｔ２にストアする（ステップＳＨ６）。そして、ｔ１とｔ２の時間差の絶対値がタイミングずれの許容値ＬＡＧ以下であるか否かを判別する（ステップＳＨ７）。ｔ１とｔ２の時間差の絶対値がＬＡＧ以下である場合には、押鍵をガイドしたイベントの音高であるＰＩＴＣＨ（ｐｂ）の値が押鍵の鍵番号ＫＥＹの値と一致するか否かを判別する（ステップＳＨ８）。値が一致する場合には、イベントＮＯＴＥ（ｐｂ）に対する演奏データの判定を示すフラグＭＫ（ｐｂ）が０（未判定）であるか否かを判別し（ステップＳＨ９）、ＭＫ（ｐｂ）が０である場合には、ＭＫ（ｐｂ）を１（判定）にセットする（ステップＳＨ１０）。
【００５６】
次に、ｐｐにｐｂの値をセットする（ステップＳＨ１１）。すなわち、判定対象の演奏データＰＬＢＵＦ（ｐｐ）のポインタを押鍵ガイドのイベントＮＯＴＥ（ｐｂ）のポインタと一致させる。次に、ｔ１とｔ２の時間差の絶対値が良否の閾値ＯＫ以内であるか否かを判別する（ステップＳＨ１２）。ＯＫ以内である場合には、図８における演奏データＰＬＢＵＦ（ｐｐ）の評価エリアＯＮＪに１をストアする（ステップＳＨ１３）。すなわち、演奏のタイミングずれがない正確な演奏であると判定する。ステップＳＨ８においてＰＩＴＣＨ（ｐｂ）の値がＫＥＹの値と一致しない場合、又は、ステップＳＨ９においてＭＫ（ｐｂ）が１で、ＮＯＴＥ（ｐｂ）に対する判定が終っている場合には、演奏データがＮＯＴＥ（ｐｂ）よりさらに前のイベントに対するものであるか否かを検索するために、ｐｂにＮＯＴＥ（ｐｂ）において１つ前のイベントを指定するポインタｐｒをセットする（ステップＳＨ１４）。
【００５７】
ステップＳＨ１２において、ｔ１とｔ２の時間差の絶対値がＯＫから外れている場合には、図２４のフローにおいて、ｔ１の時間がｔ２の時間より大きいか否かを判別する（ステップＳＨ１５）。すなわち、演奏データＰＬＢＵＦ（ｐｐ）の押鍵開始時間がイベントＮＯＴＥ（ｐｂ）の発音開始時間より早いか否かを判別する（ステップＳＨ１５）。ｔ１の時間がｔ２の時間より大きい場合には、ＯＮＪに２をストアする（ステップＳＨ１６）。すなわち、押鍵ガイドの発音タイミングに対して演奏のタイミングが早すぎると判定する。これと反対に、ｔ１の時間がｔ２の時間より小さい場合には、ＯＮＪに３をストアする（ステップＳＨ１７）。すなわち、押鍵ガイドの発音タイミングに対して演奏のタイミングが遅すぎると判定する。
【００５８】
図２３のステップＳＨ１３においてＯＮＪに１をストアした後、又は、図２４のステップＳＨ１６においてＯＮＪに２をストアした後、又は、ステップＳＨ１７においてＯＮＪに３をストアした後は、次に押鍵をガイドする予定のイベントを検索する必要がないので、ｐｆにＮＵＬＬをストアする（ステップＳＨ１８）。さらに、すでに押鍵をガイドしたイベントも検索する必要がないので、ｐｂにＮＵＬＬをストアする（ステップＳＨ１９）。図２３のステップＳＨ７において、ｔ１とｔ２の時間差の絶対値が許容値ＬＡＧを超えている場合には、電子楽器１から入力された演奏データは、すでに押鍵をガイドしたＮＯＴＥ（ｐｂ）に対するものではないので、図２４のステップＳＨ１９においてｐｂにＮＵＬＬをストアする。
【００５９】
図２４のステップＳＨ１９の後、又は、図２３のステップＳＨ２３のステップＳＨ４において、ＮＯＴＥ（ｐｂ）がＮＵＬＬである場合、若しくは、ステップＳＨ１４において、ｐｂにＮＯＴＥ（ｐｂ）のｐｒをセットした後は、図２４のフローにおいて、ＮＯＴＥ（ｐｆ）がＮＵＬＬであるか否かを判別する（ステップＳＨ２０）。ＮＯＴＥ（ｐｆ）がＮＵＬＬでない場合には、イベントＮＯＴＥ（ｐｆ）の発音開始時間であるＯＮＴＩＭＥ（ｐｆ）をｔ１にストアし（ステップＳＨ２１）、演奏データＰＬＢＵＦ（ｐｐ）の押鍵開始時間であるＯＮＴＩＭＥ（ｐｐ）をｔ２にストアする（ステップＳＨ２２）。そして、ｔ１とｔ２の時間差の絶対値がタイミングずれの許容値ＬＡＧ以下であるか否かを判別する（ステップＳＨ２３）。ｔ１とｔ２の時間差の絶対値がＬＡＧ以下である場合には、押鍵をガイドしたイベントの音高であるＰＩＴＣＨ（ｐｆ）の値が押鍵の鍵番号ＫＥＹの値と一致するか否かを判別する（ステップＳＨ２４）。値が一致する場合には、イベントＮＯＴＥ（ｐｆ）に対する演奏データの判定を示すフラグＭＫ（ｐｆ）が０（未判定）であるか否かを判別し（ステップＳＨ２５）、ＭＫ（ｐｆ）が０である場合には、ＭＫ（ｐｆ）を１（判定）にセットする（ステップＳＨ２６）。
【００６０】
次に、ｐｐにｐｆの値をセットする（ステップＳＨ２７）。すなわち、判定対象の演奏データＰＬＢＵＦ（ｐｐ）のポインタを押鍵ガイドのイベントＮＯＴＥ（ｐｆ）のポインタと一致させる。ステップＳＨ２４においてＰＩＴＣＨ（ｐｆ）の値がＫＥＹの値と一致しない場合、又は、ステップＳＨ２５においてＭＫ（ｐｆ）が１で、ＮＯＴＥ（ｐｆ）に対する判定が終っている場合には、演奏データがＮＯＴＥ（ｐｆ）よりさらに後のイベントに対するものであるか否かを検索するために、ｐｆにＮＯＴＥ（ｐｆ）において１つ後のイベントを指定するポインタｐｎをセットする（ステップＳＨ２８）。次に、図２５のフローにおいて、ｔ１とｔ２の時間差の絶対値が良否の閾値ＯＫ以内であるか否かを判別する（ステップＳＨ２９）。ＯＫ以内である場合には、図８における演奏データＰＬＢＵＦ（ｐｐ）の評価エリアＯＮＪに１をストアする（ステップＳＨ３０）。すなわち、演奏のタイミングずれがない正確な演奏であると判定する。
【００６１】
ステップＳＨ２９において、ｔ１とｔ２の時間差の絶対値がＯＫから外れている場合には、ｔ１の時間がｔ２の時間より大きいか否かを判別する（ステップＳＨ３１）。すなわち、演奏データＰＬＢＵＦ（ｐｐ）の押鍵開始時間がイベントＮＯＴＥ（ｐｆ）の発音開始時間より早いか否かを判別する。ｔ１の時間がｔ２の時間より大きい場合には、ＯＮＪに２をストアする（ステップＳＨ３２）。すなわち、押鍵ガイドの発音タイミングに対して演奏のタイミングが早すぎると判定する。これと反対に、ｔ１の時間がｔ２の時間より小さい場合には、ＯＮＪに３をストアする（ステップＳＨ３３）。すなわち、押鍵ガイドの発音タイミングに対して演奏のタイミングが遅すぎると判定する。
【００６２】
図２５のステップＳＨ３０においてＯＮＪに１をストアした後、ステップＳＨ３２においてＯＮＪに２をストアした後、又は、ステップＳＨ３３においてＯＮＪに３をストアした後は、すでに押鍵をガイドしたイベントを検索する必要がないので、ｐｂにＮＵＬＬをストアする（ステップＳＨ３４）。さらに、次に押鍵をガイドする予定のイベントに対して演奏データが入力されて、その判定が終了しているので、そのイベントを検索する必要がない。したがって、ｐｆにＮＵＬＬをストアする（ステップＳＨ３５）。図２４のステップＳＨ２３において、ｔ１とｔ２の時間差の絶対値が許容値ＬＡＧを超えている場合には、電子楽器１から入力された演奏データは、次に押鍵をガイドする予定のＮＯＴＥ（ｐｆ）に対するものではないので、図２５のステップＳＨ３５においてｐｆにＮＵＬＬをストアする。
【００６３】
図２４のステップＳＨ２０においてｐｆがＮＵＬＬである場合、又は、ステップＳＨ２８において、ｐｆにＮＯＴＥ（ｐｆ）のｐｎをセットした後、又は、図２５のステップＳＨ３５においてｐｆにＮＵＬＬをストアした後は、図２３のステップＳＨ３に移行して、ＮＯＴＥ（ｐｂ）およびＮＯＴＥ（ｐｆ）がともにＮＵＬＬであるか否かを判別する。いずれか一方がＮＵＬＬでない場合には、ステップＳＨ５以降の処理を繰り返す。そして、押鍵をガイドしたすべてのイベントに対して、電子楽器１から入力された演奏データの判定がすべて終了したときは、ステップＳＨ３においてＮＯＴＥ（ｐｂ）およびＮＯＴＥ（ｐｆ）がともにＮＵＬＬとなるので、メインルーチンに戻る。
【００６４】
図２６は、図１５のＭＩＤＩ・ＩＮのフローにおけるステップＳＥ４の離鍵処理のフローチャートである。まず、押鍵の鍵番号をＫＥＹにストアし（ステップＳＪ１）、ＫＥＹで指定される演奏データの離鍵開始時間ＯＮＴＩＭＥ（ＫＥＹ）に現時刻をストアする（ステップＳＪ２）。次に、図８のＰＬＢＵＦのエリアを指定するポインタｐｑを０にセットして（ステップＳＪ３）、ｐｑの値をインクリメントしながら、離鍵された鍵番号に対応する押鍵の演奏データを捜す。ｐｑで指定するＰＬＢＵＦ（ｐｑ）がＮＵＬＬであるか否かを判別し（ステップＳＪ４）、ＰＬＢＵＦ（ｐｑ）がＮＵＬＬでない場合には、ＰＬＢＵＦ（ｐｑ）におけるｐｐによってＰＬＡＹ（ｐｐ）を指定する（ステップＳＪ５）。そして、ＰＬＡＹ（ｐｐ）の鍵番号とＫＥＹの鍵番号とが一致するか否かを判別する（ステップＳＪ６）。これらの鍵番号が一致しない場合には、ｐｑの値を１つインクリメントして（ステップＳＪ７）、ステップＳＪ４において、新たなｐｑで指定するＰＬＢＵＦ（ｐｑ）がＮＵＬＬであるか否かを判別する。
【００６５】
ステップＳＪ６においてＰＬＡＹ（ｐｐ）の鍵番号とＫＥＹの鍵番号とが一致した場合には、ＰＬＡＹ（ｐｐ）の押鍵開始時間ＯＮＴＩＭＥ（ｐｐ）に離鍵開始時間ＯＮＴＩＭＥ（ＫＥＹ）を加算した時間をＰＬＡＹ（ｐｐ）の発音継続時間（音長）としてストアする（ステップＳＪ８）。この後は、離鍵の演奏データに対する判定処理を行う（ステップＳＪ９）。なお、ステップＳＪ４において、ＰＬＢＵＦ（ｐｑ）がＮＵＬＬである場合には、離鍵された鍵番号に対応する押鍵の演奏データがＰＬＢＵＦのすべてのエリアに存在しない。この場合にも、ステップＳＪ９における判定処理を行う。判定処理の後はメインルーチンに戻る。
【００６６】
図２７は、図２６のフローにおけるステップＳＪ９の判定処理のフローチャートである。まず、ポインタｐｑで指定するＰＬＢＵＦ（ｐｑ）がＮＵＬＬであるか否かを判別し（ステップＳＫ１）、ＰＬＢＵＦ（ｐｑ）がＮＵＬＬでない場合には、変数ｍを０にセットして（ステップＳＫ２）、図７に示したＯＮＢＵＦのエリアにおけるノートオンのイベントの中から、ＯＮＢＵＦ（ｍ）を指定する（ステップＳＫ３）。そして、ＯＮＢＵＦ（ｍ）の音高ＰＩＴＣＨ（ｍ）とＫＥＹの鍵番号とが一致するか否かを判別する（ステップＳＫ４）。ＰＩＴＣＨ（ｍ）とＫＥＹとが一致しない場合には、ｍの値を１つインクリメントする（ステップＳＫ５）。このとき、ＯＮＢＵＦ（ｍ）がＮＵＬＬであるか否かを判別し（ステップＳＫ６）、ＯＮＢＵＦ（ｍ）がＮＵＬＬでない場合には、ステップＳＫ３に移行して、新たなｍに対するＯＮＢＵＦ（ｍ）を指定する。そして、ＰＩＴＣＨ（ｍ）とＫＥＹとが一致するか否かを判別する。
【００６７】
ＰＩＴＣＨ（ｍ）とＫＥＹとが一致した場合には、図６に示したＯＮＢＵＦのエリアにおいて、ＯＮＢＵＦ（ｍ）の発音終了時間ＯＦＦＴＩＭＥ（ｍ）の値をｔ１にストアし（ステップＳＫ７）、離鍵開始時間ＯＮＴＩＭＥ（ＫＥＹ）をｔ２にストアする（ステップＳＫ８）。そして、ｔ１とｔ２の時間差の絶対値がタイミングずれの許容値ＬＡＧ以下であるか否かを判別する（ステップＳＫ９）。ｔ１とｔ２の時間差の絶対値がＬＡＧ以下である場合には、ｔ１とｔ２の時間差の絶対値が良否の閾値ＯＫ以内であるか否かを判別する（ステップＳＫ１０）。ＯＫ以内である場合には、図７および図８の対応するエリアのＯＦＦＪに１をストアする（ステップＳＫ１１）。すなわち、演奏のタイミングずれがない正確な演奏であると判定する。
【００６８】
ステップＳＫ１０において、ｔ１とｔ２の時間差の絶対値がＯＫから外れている場合には、ｔ１の時間がｔ２の時間より大きいか否かを判別する（ステップＳＫ１２）。すなわち、演奏データの離鍵開始時間が離鍵ガイドのイベントの発音終了時間より早いか否かを判別する。ｔ１の時間がｔ２の時間より大きい場合には、ＯＦＦＪに２をストアする（ステップＳＫ１３）。すなわち、押鍵ガイドの消音タイミングに対して離鍵のタイミングが早すぎると判定する。これと反対に、ｔ１の時間がｔ２の時間より小さい場合には、ＯＦＦＪに３をストアする（ステップＳＫ１４）。すなわち、離鍵ガイドの消音タイミングに対して離鍵のタイミングが遅すぎると判定する。
【００６９】
ステップＳＫ１においてＰＬＢＵＦ（ｐｑ）がＮＵＬＬの場合、すなわち、離鍵した鍵番号に対応する演奏データがＰＬＢＵＦのエリアにない場合には、その離鍵した鍵の押鍵が押鍵ガイドのイベントの音高と異なっているので、押鍵が誤っていると判定する。この場合には、ＯＦＦＪに０をストアする（ステップＳＫ１５）。また、ステップＳＫ６においてＯＮＢＵＦ（ｍ）がＮＵＬＬの場合も同様に、離鍵した鍵番号に対応する演奏データがＯＮＢＵＦのエリアにないので、押鍵誤りと判定してＯＦＦＪに０をストアする（ステップＳＫ１５）。さらに、ステップＳＫ９においてｔ１とｔ２の時間差の絶対値がタイミングずれの許容値ＬＡＧを超えている場合も、押鍵誤りと判定してＯＦＦＪに０をストアする（ステップＳＫ１５）。すなわち、この実施形態においては、離鍵の後にその押鍵が誤っているか否かを判定している。
【００７０】
この判定結果は、履歴データとして不揮発性メモリ１８に保存されるとともに、パソコン６の表示部１５に表示された楽譜にもリアルタイムで表示される。例えば、ＯＮＪおよびＯＦＦＪの値に応じて、正確な演奏（ＯＮＪ＝ＯＦＦＪ＝１）の場合は「○」、誤った演奏（ＯＦＦＪ＝０）の場合は「×」、早すぎる演奏タイミング（ＯＮＪ＝ＯＦＦＪ＝２）の場合は「→」、遅すぎる演奏タイミング（ＯＮＪ＝ＯＦＦＪ＝３）の場合は「←」のマークが音符の画像に対応して表示される。
【００７１】
以上のように、上記実施形態によれば、パソコン６は、演奏練習の曲データを電子楽器１に対して出力し、電子楽器１で演奏された演奏データを入力する。カメラ５は、電子楽器１の鍵盤２の画像２ｉおよび鍵盤２を演奏中の手の画像７ｉを撮像する。そして、パソコン６のＣＰＵ１１は、入力された演奏データ並びにカメラ５によって撮像された鍵盤の画像２ｉおよび演奏中の手の画像７ｉに基づいて演奏された鍵の指を検出して運指データを生成し、出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定して正誤判定データを生成し、入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとしてＲＡＭ１３および不揮発性メモリ１８に記憶する。
この場合において、ＣＰＵ１１は、出力された曲データにおける音高および発音タイミングと入力された演奏データにおける鍵番号および押鍵タイミングとを比較して正誤判定データを生成する。
したがって、演奏結果が正しいか又は誤っているかを判定できるだけでなく、演奏のタイミングずれ、および、演奏された指を検出できる。さらに、入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとして不揮発性メモリ１８に保存することにより、例えば、インターネットなどのネットワークを介して、先生が生徒の鍵盤演奏を指導する遠隔音楽教育システムにおいて、生徒は、演奏した楽音データを送信するだけでなく、運指データを送信できるので、先生は、より一層きめの細かい指導を行うことが可能になる。
【００７２】
また、上記実施形態によれば、ＣＰＵ１１は、各指の爪に貼付されたシールの画像８ｉの色彩を鍵盤２の画像２ｉの色彩とを識別することによって各指の位置を検出する。この場合において、各指の爪に貼付されたシールの異なる色彩を識別する。
したがって、各指の位置を正確に検出することができる。
【００７３】
なお、上記実施形態においては、パソコン６と接続する鍵盤装置として、電子楽器１を例に採って本発明の演奏練習管理システムを説明したが、本発明の演奏練習管理システムに使用する鍵盤装置は電子楽器１に限定するものではない。例えば、外部音源と接続して楽音を発音するキーボード装置をパソコン６と接続することも可能である。
【００７４】
上記実施形態においては、手の爪に異なる色彩のシールを貼付することによって、シールの画像８ｉとそれ以外の画像とを識別して、演奏する指を判定する構成にしたが、実施形態の変形例として、手の爪にシールを貼付しない構成について説明する。
図２８は、カメラ５で撮像された右手の画像と、その画像に対して上下位置ｙを変えながら、ｘ方向にスキャンした信号を示す図である。なお、左手の画像は、右手の画像と対称になることと、指番号が異なるだけであるので、説明および図面は省略する。
【００７５】
図２８（Ａ）に示すように、親指くぐりや親指越えがない場合には、手が存在する部分を「１」存在しない部分を「０」に２値化した信号は、ｙ１の位置では指の画像がないＭＯＤＥ＝０のパターンになる。ｙ２の位置になると、親指（０）の画像のみが現れ、他の指の画像はまだ現れないＭＯＤＥ＝１のパターンになる。ｙ３の位置になると、親指の画像はなくなり、人差し指（１）、中指（２）、薬指（３）、小指（４）の画像が現れるＭＯＤＥ＝３のパターンになる。ここで、１又は０に２値化した信号における親指（０）、人差し指（１）、中指（２）、薬指（３）、小指（４）の画像信号を、ＦＩＧ（０）、ＦＩＧ（１）、ＦＩＧ（２）、ＦＩＧ（３）、ＦＩＧ（４）と定義する。
【００７６】
一方、図２８（Ｂ）に示すように、親指くぐりや親指越えがある場合には、ｙ１の位置では、図２８（Ａ）の場合と同じように、指の画像がないＭＯＤＥ＝０のパターンになるが、ｙ２の位置においては、図２８（Ａ）の場合と異なり、指の画像がないＭＯＤＥ＝０のパターンになる。そして、ｙ３の位置になると、再び図２８（Ａ）の場合と同じように、親指の画像はなくなり、人差し指（１）、中指（２）、薬指（３）、小指（４）の画像が現れるＭＯＤＥ＝３のパターンになる。
【００７７】
この変形例では、上記の実施形態における図１７の画像処理（ステップＳＦ２２）が異なり、他の処理については実施形態と同じである。図２９ないし図３１は、変形例における画像処理のフローチャートである。
図２９において、まず、押鍵された鍵の座標であるｘ（ＫＥＹ）を変数ｊにストアし、ｙ（ＫＥＹ）を変数ｋにストアする（ステップＳＬ１）。次に、鍵盤の画像を消去する（ステップＳＬ２）。実際には、ＲＡＭ１３に鍵盤の画像のエリア、手の画像のエリア、座標のエリアを設けて、図１８に示したように、各白鍵および各黒鍵において押鍵する指が接触する範囲の領域ＡＲ（０）、ＡＲ（１）、ＡＲ（２）、ＡＲ（３）…を確定した後は、鍵盤の画像のエリアを消去するか、又は画像処理の対象から外す。
【００７８】
次に、上下方向の位置であるｙの値をｙ１にセットして（ステップＳＬ３）、その位置でスキャンした信号のパターンがＭＯＤＥ＝０であるか否かを判別する（ステップＳＬ４）。信号のパターンがＭＯＤＥ＝０でない場合には、鍵盤上に手がない状態であるのでこのフローを終了するが、信号のパターンがＭＯＤＥ＝０の場合には、ｙの値を所定値であるΔだけインクリメントする（ステップＳＬ５）。Δの値は実像における数ミリ程度、例えば、５ミリとする。次に、その位置でスキャンした信号のパターンがＭＯＤＥ＝０からＭＯＤＥ＝１に変化したか否かを判別する（ステップＳＬ６）。
【００７９】
信号のパターンがＭＯＤＥ＝１に変化したときは、さらにｙの値をΔだけインクリメントする（ステップＳＬ７）。そして、その位置でスキャンした信号のパターンにおいて、ＦＩＧ（０）が１から０に変化したか否かを判別する（ステップＳＬ８）。すなわち、親指の画像が消えたか否かを判別する。ＦＩＧ（０）が０に変化したときは、ｙの値をΔだけデクリメントして（ステップＳＬ９）、親指の画像が存在する位置まで戻る。そして、ＦＩＧ（０）の位置を取得する（ステップＳＬ１０）。具体的には、図２８（Ｃ）に示すように、親指の画像の左端および右端のｘ座標であるｘ１およびｘ２を検出して、中点の座標ｘ＝（ｘ１＋ｘ２）／２の演算式で求めて、ＦＩＧ（０）の座標Ｐ０（ｘ、ｙ）を取得する。
【００８０】
次に、再びｙの値をΔだけインクリメントして（ステップＳＬ１１）、その位置でスキャンした信号のパターンがＭＯＤＥ＝３に変化したか否かを判別する（ステップＬ１２）。ＭＯＤＥ＝３に変化しない場合には、ステップＳＬ１１においてさらにｙの値をΔだけインクリメントする。すなわち、親指以外の４本の指の画像が現れる状態、すなわち、ＦＩＧ（１）＝ＦＩＧ（２）＝ＦＩＧ（３）＝ＦＩＧ（４）＝１の信号のパターンになるまでｙの値をインクリメントする。
【００８１】
ステップＳＬ５におけるｙの値のインクリメントによって、ステップＳＬ６でＭＯＤＥ＝１に変化しない場合には、ＭＯＤＥ＝２に変化したか否かを判別する（ステップＳＬ１３）。ＭＯＤＥ＝２に変化しない場合、すなわち、ＭＯＤＥ＝０の状態が続いている場合には、ステップＳＬ５におけるｙの値のインクリメントを繰り返す。ステップＳＬ１３においてＭＯＤＥ＝２に変化した場合、すなわち、ステップＳＬ５におけるｙの値のインクリメントによって、ＭＯＤＥ＝０からＭＯＤＥ＝１を経ることなくＭＯＤＥ＝２に変化した場合は、図２８（Ｂ）に示した親指くぐり又は親指越えの場合である。
【００８２】
この場合には、親指くぐりでの親指による押鍵であるか、又は親指越えでの中指による押鍵であるかを判別する必要がある。したがって、上記の実施形態の場合と同様に、前回の押鍵の指番号であるＦＰＲＥＶが０（親指）でないか否かを判別して（ステップＳＬ１４ａ）、ＦＰＲＥＶが０でない場合には、ＦＩＧＰに０をストアする（ステップＳＬ１４ｂ）。すなわち、前回の押鍵が親指でない場合には、図２８（Ｂ）に示した画像は親指くぐりであるので、今回の押鍵の指番号を０（親指）とする。ＦＩＧＰに０をストアした後は、このフローを終了して判定処理に移行する。
【００８３】
ステップＳＬ１２においてＭＯＤＥ＝２に変化した場合、又は、ステップＳＬ２４ａにおいてＦＰＲＥＶが０である場合には、図３０のフローにおいて、人差し指、中指、薬指、小指の信号ＦＩＧ（１）、ＦＩＧ（２）、ＦＩＧ（３）、ＦＩＧ（４）が１であるか０であるかを判別するフラグｆ（１）、ｆ（２）、ｆ（３）、ｆ（４）をすべて１にセットし、指の画像の数を示す変数Ｍを４にセットする（ステップＳＬ１５）。次に、指を指定する変数ｉを１にセットして（ステップＳＬ１６）、ｙの値をΔだけインクリメントする（ステップＳＬ１７）。次に、指（ｉ）に対応するｆ（ｉ）が１であるか否かを判別する（ステップＳＬ１８）。ｆ（ｉ）が１である場合には、信号ＦＩＧ（ｉ）＝０であるか否かを判別する（ステップＳＬ１９）。図２８（Ａ）、（Ｂ）に示すように、信号のパターンがＭＯＤＥ＝２になった最初は、人差し指、中指、薬指、小指のすべてについて、信号ＦＩＧ（ｉ）＝１である。したがって、ｉの値を１つインクリメントして（ステップＳＬ２０）、ｉの値が４を超えたか否かを判別する（ステップＳＬ２１）。ｉの値が４以下である場合には、ステップＳＬ１８においてｆ（ｉ）が０であるか否かを判別する。ｉの値が４を超えた場合には、ステップＳＬ１６に移行して再びｉを１に戻して、ステップＳＬ１７以下の処理を繰り返す。
【００８４】
ｙの値をΔ単位でインクリメントしていった結果、ある指（ｉ）の信号ＦＩＧ（ｉ）＝０になったときは、ｆ（ｉ）を０にリセットして（ステップＳＬ２２）、ｙの値をΔだけデクリメントして（ステップＳＬ２３）、ＦＩＧ（ｉ）＝１の位置に戻る。そして、図２８（Ｃ）に示すように、その指の位置である座標Ｐｉ（ｘ、ｙ）を取得する（ステップＳＬ２４ａ）。次に、ｙの値をΔだけインクリメントして元の位置に戻る（ステップＳＬ２４ｂ）。この後、Ｍの値を１つデクリメントする（ステップＳＬ２５）。このとき、Ｍの値が０になったか否かを判別し（ステップＳＬ２６）、Ｍの値が１以上である場合には、ステップＳＬ２０に移行してｉの値を１つインクリメントする。
【００８５】
このように、ｙの値をΔだけインクリメントしながら、任意の指のＦＩＧ（ｉ）が１から０に変化する位置、すなわち、その指の先端部を検出するたびに、その指の座標Ｐｉ（ｘ、ｙ）を取得する。そして、１つの指の座標Ｐｉ（ｘ、ｙ）を取得するごとにＭの値をデクリメントする。ステップＳＬ２６においてＭの値が０になった場合、すなわち、人差し指、中指、薬指、小指のすべてについて座標Ｐｉ（ｘ、ｙ）（ｉ＝１〜４）を取得したときは、図３１のフローにおいて、ｉを０にセットして（ステップＳＬ２７）、ｉの値を変化させながら押鍵した指を検出する処理を行う。
【００８６】
すなわち、Ｐｉ（ｘ、ｙ）がＡＲ（ＫＥＹ）の位置であるか否かを判別し（ステップＳＬ２８）、Ｐｉ（ｘ、ｙ）がＡＲ（ＫＥＹ）とは異なる位置である場合には、ｉの値をインクリメントする（ステップＳＬ２９）。このとき、ｉの値が４を超えたか否かを判別する（ステップＳＬ３０）。ｉの値が４以下である場合には、ステップＳＬ２８においてＰｉ（ｘ、ｙ）がＡＲ（ＫＥＹ）の位置であるか否かを判別する。Ｐｉ（ｘ、ｙ）がＡＲ（ＫＥＹ）の位置である場合には、ＦＩＧＰにｉの値をストアする（ステップＳＬ３１）。そして、ＰＰＲＥＶにＦＩＧＰの値をストアして（ステップＳＬ３２）、このフローを終了して判定処理に移行する。ステップＳＬ３０においてｉの値が４を超えたときは、正常な演奏ではないので、ＦＩＧＰにＮＵＬＬをストアして（ステップＳＬ３３）、このフローを終了して判定処理に移行する。
【００８７】
以上のように、この変形例においては、ＣＰＵ１１は、各指にシールが貼付されない場合でも、鍵盤の画像および手の画像に基づいて、図２９ないし図３１の画像処理を行って、各鍵の位置および演奏中の各指の位置を検出することによって、運指データを生成することができる。
【００８８】
上記実施形態においては、ＲＯＭ１２にあらかじめ記憶された演奏練習管理プログラムをＣＰＵ１１が実行する装置の発明について説明したが、フレキシブルディスク（ＦＤ）、ＣＤ、ＭＤなどの記憶媒体に記録されている演奏練習管理プログラムをパソコン６の不揮発性メモリ１８にインストールしたり、インターネットなどのネットワークからダウンロードした演奏練習管理プログラムを不揮発性メモリ１８にインストールして、そのプログラムをパソコン６のＣＰＵ１１が実行することも可能である。この場合には、プログラムの発明やそのプログラムを記録した記録媒体の発明を実現できる。
【００８９】
すなわち、本発明によるプログラムは、演奏練習の曲データを鍵盤装置に対して出力する第１のステップと、前記鍵盤装置で演奏された演奏データを入力する第２のステップと、所定の撮像手段によって前記鍵盤装置の鍵盤の画像および当該鍵盤を演奏中の手の画像を取得する第３のステップと、前記第２のステップによって入力された演奏データ並びに前記第３のステップによって取得された鍵盤の画像および演奏中の手の画像に基づいて演奏された鍵の指を検出して運指データを生成する第４のステップと、前記第１のステップによって出力された曲データに対応じて入力された演奏データが正しいか又は誤っているかを判定して正誤判定データを生成する第５のステップと、入力された演奏データ、生成された運指データ、および正誤判定データを含むデータを履歴データとして所定の記憶手段に記憶する第６のステップと、を実行する。
【００９０】
前記第３のステップは、前記鍵盤の画像および手の画像に基づいて各鍵の位置および演奏中の各指の位置を検出することによって運指データを生成する。この場合において、前記第３のステップは、各指先に施された色彩と指先以外の手の色彩および前記鍵盤の色彩とを識別することによって各指の位置を検出する。さらに、前記第３のステップは、各指の爪に施された異なる色彩を識別することによって各指の位置を検出する。
前記第５のステップは、出力された曲データにおける音高および発音タイミングと入力された演奏データにおける鍵番号および押鍵タイミングとを比較して正誤判定データを生成する。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施形態における演奏練習管理システムの外観図。
【図２】図１の演奏練習管理システムにおける電子楽器の鍵盤の画像を示す図。
【図３】図１の演奏練習管理システムにおける電子楽器、パソコン、カメラの接続関係およびパソコンの内部構成を示すブロック図。
【図４】実施形態のＣＰＵの演奏練習管理プログラムにおけるメインルーチンのフローチャート。
【図５】実施形態における曲データのフォーマットを示す図。
【図６】実施形態におけるＲＡＭにストアされた曲データのフォーマットを示す図。
【図７】実施形態において電子楽器から入力されてＲＡＭにストアされた演奏データのフォーマットを示す図。
【図８】実施形態において電子楽器から入力されてＲＡＭに一時的にストアされた演奏データのフォーマットを示す図。
【図９】実施形態において鍵盤の画像の各画素の構成を示す図。
【図１０】実施形態において鍵盤の各鍵に指が接触する領域を示す図。
【図１１】実施形態において各指のシールの三原色のデータをストアしたＲＡＭのエリアを示す図。
【図１２】図４におけるメインルーチンの再生処理のフローチャート。
【図１３】図１２の再生処理におけるノートオン処理のフローチャート。
【図１４】図１２の再生処理におけるノートオフ処理のフローチャート。
【図１５】図４のメインルーチンにおけるＭＩＤＩ・ＩＮ処理のフローチャート。
【図１６】図１５のＭＩＤＩ・ＩＮ処理における押鍵処理のフローチャート。
【図１７】図１６に続く押鍵処理のフローチャート。
【図１８】図２の鍵盤の画像において指が接触する領域を示す図。
【図１９】図１８における領域の１つの座標を示す図。
【図２０】図１７の押鍵処理における画像処理のフローチャート。
【図２１】図２０に続く画像処理のフローチャート。
【図２２】図２０に続く画像処理のフローチャート。
【図２３】図１７の押鍵処理における判定処理のフローチャート。
【図２４】図２３に続く判定処理のフローチャート。
【図２５】図２４に続く判定処理のフローチャート。
【図２６】図１５のＭＩＤＩ・ＩＮ処理における離鍵処理のフローチャート。
【図２７】図２６の離鍵処理における判定処理のフローチャート。
【図２８】実施形態の変形例においてカメラで撮像された右手の画像および画像のスキャン信号を示す図。
【図２９】変形例における画像処理のフローチャート。
【図３０】図２９に続く画像処理のフローチャート。
【図３１】図３０に続く画像処理のフローチャート。
【符号の説明】
【００９２】
１  電子楽器
２  鍵盤
３  アングル
４  カメラ取り付け部
５  カメラ
６  パソコン
２ｉ  鍵盤の画像
７ｉ  手の画像
８ｉ  シールの画像
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  スイッチ部
１５  表示部
１６  ＭＩＤＩ・インターフェース
１７  ビデオキャプチャ・インターフェース
１８  不揮発性メモリ
【図１】
2006091631.tif 000003
【図２】
2006091631.tif 000004
【図３】
2006091631.tif 000005
【図４】
2006091631.tif 000006
【図５】
2006091631.tif 000007
【図６】
2006091631.tif 000008
【図７】
2006091631.tif 000009
【図８】
2006091631.tif 000010
【図９】
2006091631.tif 000011
【図１０】
2006091631.tif 000012
【図１１】
2006091631.tif 000013
【図１２】
2006091631.tif 000014
【図１３】
2006091631.tif 000015
【図１４】
2006091631.tif 000016
【図１５】
2006091631.tif 000017
【図１６】
2006091631.tif 000018
【図１７】
2006091631.tif 000019
【図１８】
2006091631.tif 000020
【図１９】
2006091631.tif 000021
【図２０】
2006091631.tif 000022
【図２１】
2006091631.tif 000023
【図２２】
2006091631.tif 000024
【図２３】
2006091631.tif 000025
【図２４】
2006091631.tif 000026
【図２５】
2006091631.tif 000027
【図２６】
2006091631.tif 000028
【図２７】
2006091631.tif 000029
【図２８】
2006091631.tif 000030
【図２９】
2006091631.tif 000031
【図３０】
2006091631.tif 000032
【図３１】
2006091631.tif 000033