(57)【特許請求の範囲】
【請求項１】
楽器に設けられた演奏操作子群のなかで操作していくべき演奏操作子の操作に用いるべき指を示す指情報を表示させることにより、楽曲の演奏のための指の運びである運指を教示できる運指表示装置において、
前記楽曲の進行に応じて順次操作していくべき演奏操作子、及び該演奏操作子の操作に用いるべき指を示す運指データを取得するデータ取得手段と、
前記データ取得手段が取得した運指データの運指評価を行い難易度を算出する難易度算出手段と、
該難易度算出手段により算出された難易度が、ユーザが設定した所定内である運指データを抽出して該運指データによる指情報を表示させる表示制御手段と、
を具備することを特徴とする運指表示装置。
【請求項２】
前記表示制御手段は、前記運指データから前記演奏操作子への操作によって発音される楽音を示す音符を表示させ、前記指情報は、対応する音符の近傍に表示させる、ことを特徴とする請求項１記載の運指表示装置。
【請求項３】
楽器に設けられた演奏操作子群のなかで操作していくべき演奏操作子の操作に用いるべき指を示す指情報を表示させることにより、楽曲の演奏のための指の運びである運指を教示できる運指表示装置として用いられるコンピュータに、
前記楽曲の進行に応じて操作していくべき演奏操作子毎に、該演奏操作子、及び該演奏操作子の操作に用いるべき指を示す運指データを取得する機能と、
前記所得する機能により取得した運指データの運指評価を行い難易度を算出する機能と、
該難易度を算出する機能により算出された難易度が、ユーザが設定した所定内である運指データを抽出して該運指データによる指情報を表示装置に表示させる機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽器に設けられた演奏操作子群のなかで操作していくべき演奏操作子の操作に用いるべき指を示す指情報を表示させることにより、楽曲の演奏のための指の運びである運指を教示するための技術に関する。
【背景技術】
【０００２】
楽器による楽曲の演奏は、楽器に設けられた演奏操作子群、例えば鍵盤を操作していくことで行われる。しかし、演奏技術の未熟な演奏者（ユーザー）の多くは、演奏の進行に応じて操作（押鍵）していくべき鍵をどの指で操作すべきかが判らないのが実情である。このことから、鍵の押鍵に用いるべき指を示す指情報を表示できる運指表示装置が製品化されている。従来の運指表示装置としては、例えば特許文献１に記載されたものがある。
【０００３】
特許文献１に記載された運指表示装置を含め、従来の運指表示装置では、鍵（楽音）毎に指情報を表示して、その鍵の押鍵に用いるべき指をユーザーに通知するようになっていた。その指情報の表示は、例えば特許文献２に記載された技術を用いて行うこともできる。しかし、そのように鍵毎に指情報を表示する場合、ユーザーの演奏技術、或いは演奏する楽曲の内容などによっては、指情報の確認に要するユーザーの負担が大きくなりすぎると考えられる。その確認が負担なユーザーにとっては、指情報の確認のために、演奏への集中が阻害されるという面が無視できなくなると言える。このようなことから、ユーザーにとって重要性が高いと思われる指情報（運指データ）を選択的に表示させることも重要と考えられる。
【特許文献１】特開２００１−２８２０９４号公報
【特許文献２】特開２００２−３１８５７９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明の課題は、ユーザーにとって重要性が高い（有益）と思われる指情報（運指データ）を選択的に表示させるための技術を提供することにある。
【課題を解決するための手段】
【０００５】
本発明の運指表示装置は、楽器に設けられた演奏操作子群のなかで操作していくべき演奏操作子の操作に用いるべき指を示す指情報を表示させることにより、楽曲の演奏のための指の運びである運指を教示できる運指表示装置において、
前記楽曲の進行に応じて順次操作していくべき演奏操作子、及び該演奏操作子の操作に用いるべき指を示す運指データを取得するデータ取得手段と、
前記データ取得手段が取得した運指データの運指評価を行い難易度を算出する難易度算出手段と、
該難易度算出手段により算出された難易度が、ユーザが設定した所定内である運指データを抽出して該運指データによる指情報を表示させる表示制御手段と、
を具備することを特徴とする。
【０００７】
本発明のプログラムは、楽器に設けられた演奏操作子群のなかで操作していくべき演奏操作子の操作に用いるべき指を示す指情報を表示させることにより、楽曲の演奏のための指の運びである運指を教示できる運指表示装置を実現可能なデータ処理装置に実行させることを前提とし、上記運指表示装置が具備する手段を実現させるための機能を搭載している。
【発明の効果】
【０００８】
本発明は、楽曲の進行に応じて操作していくべき演奏操作子毎に、その演奏操作子、及びその演奏操作子の操作に用いるべき指を示す運指データを取得し、取得した運指データのなかから予め設定された条件を満たす運指データを抽出して、その運指データが操作に用いるべきとする指を示す指情報を選択的に表示させる。
【０００９】
上記条件によって運指データを選択・抽出することにより、ユーザーにとって、或いは演奏上、重要性の高い運指、困難と思われる運指をユーザーは確認できるようになる。指情報は選択的に表示されるために、その確認に要する負担は全ての指情報を表示させる場合と比較して軽減され、負担の軽減によって、表示された指情報に従った運指はより容易となる。指情報が表示されない演奏期間であっても、直前に表示された指情報によって適切な手指の状態から演奏を行えるために、適切な運指を行える可能性は高くなる。これらのことから、指情報を選択的に表示させたとしても、ユーザーは適切な運指による演奏を高い確率で行えることとなる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による運指表示装置の構成を説明する図である。
その運指表示装置１０は、図１に示すように、装置１０全体の制御を行うＣＰＵ１１と、そのＣＰＵ１１がワークに用いるＲＡＭ１２と、ＣＰＵ１１が実行するプログラムや各種制御用データ等を格納したＲＯＭ１０３と、例えばキーボードやポインティングデバイス（マウス等）等の入力装置用のインターフェース、ＣＤ−ＲＯＭやＤＶＤ等の記録媒体にアクセスする媒体駆動装置、及びそのインターフェース等からなる入力部１４と、及び表示装置に画像を表示させる表示部１５と、を備えた構成となっている。
【００１１】
その運指表示装置１０は、例えばパーソナルコンピューター（ＰＣ）に、運指表示装置１０として動作させるためのアプリケーション・プログラム（以下「運指表示アプリケーション」）を搭載させることにより実現させている。そのアプリケーションは、例えば入力部１４を構成する媒体駆動装置がアクセス可能な記録媒体に記録して提供されるものである。そのアプリケーションは、インターネット等のネットワークを介して配信するようにしても良い。アプリケーションを搭載（インストール）できるように、ＲＯＭ１３としては書き込み可能なメモリ（例えばフラッシュメモリ）が採用されている。運指表示装置１０を実現させるＰＣは、ＲＯＭ１３の他に、或いはその代わりにハードディスク装置等の補助記憶装置を搭載したものであっても良い。表示部１５が画像を表示させる表示装置は、外付けのもの、搭載されたものの何れであっても良い。ここでは便宜的に、表示装置は搭載されたもの、つまり表示部１５を構成しているものと想定する。
【００１２】
本実施の形態では、楽曲の演奏で発音させるべき楽音毎に、その楽音を発音させるべきタイミング、及びその楽音の音高を示す演奏データを取得し、その演奏データから楽譜（図１４〜図１７）を表示部１５に表示させるようにしている。その楽音を発音させるために用いるべき指を示す運指データは、必要に応じて演奏データから生成し、その演奏データに追加するようにしている。それにより、最終的に図２に示すような演奏データを取得して、運指データを表示可能とさせている。図１４〜図１７において、楽譜の近傍に表記した「１」〜「５」の数字は、運指データが示す指に割り当てた指番号（指情報）である。その指番号を対応する音符の近傍に配置して表示することにより、楽曲の進行により発音させるべき楽音と併せて運指をユーザーに教示するようにしている。図２に示す演奏データはＲＡＭ１２に書き込まれた場合のものであり、その格納場所は、［］で示す括弧内の数値（インデクス値）で指定される。
【００１３】
その演奏データは、図２に示すように、データｌＴｉｍｅ、ｌＧａｔｅ、ｌＴｍｓｅｃ、Ｐｉｔｃｈ、ｉＰｏｓＸ、ＤｒａｗＰｏｓ、ｃｆｉｇ、ｃＤｉｓｐ、ｉＨａｎｄ、ｉｃｏｓｔ、ｉｃｏｓｔＮ、ｃＩｓＨａｒｍ、ｉＡｒｐＳ、ｉＡｒｐＥ、ｐＨＴｏｐ、ｐＨＴａｉｌ、ｃＴｅｎｄｅｎｃｙ、ｃＴｅｎｄＳｔｅｐｓ、ｃＩｓＳＯ、ｐＰＦＴｏｐ、ｐＰＨＴａｉｌ、ｐＮＨＴｏｐ、ｐＮＨＴａｉｌ、ｉＮＰ、ｐｒｅｖ、及びｎｅｘｔを有している。各データは以下のようなものである。
【００１４】
データｌＴｉｍｅは、発音開始時刻を示すものである。その発音開始時刻は例えば演奏開始からのものをＭＩＤＩで扱う単位時間（ステップ）数で表されている。データｌＧａｔｅは発音時間を示すものである。データｌＴｍｓｅｃはデータｌＴｉｍｅが示す発音開始時刻を絶対時間（単位はｍｓｅｃ）で示すものである。データＰｉｔｃｈは楽音のピッチを示すもの（ピッチ番号、或いはノート番号と呼ぶ）である。データｉＰｏｓＸはそのピッチが割り当てられた鍵の鍵盤上の座標（Ｘ座標）を示すものである。データＤｒａｗＰｏｓは、その鍵の押鍵に用いるべき指の指番号を表示部１５に表示させる際の座標を示すデータである。データｃｆｉｇは、その鍵の押鍵に割り当てられた指を示す指番号である。値の０は親指を示し、同様にして、１は人差し指、２は中指、３は薬指、４は小指をそれぞれ示している。データｃＤｉｓｐは、指番号の表示・非表示を示すフラグである。値の０は非表示、１は表示を示している。データｉＨａｎｄは鍵を押鍵して発音される楽音が属するパートを示すものである。そのパートは押鍵に使う指がある手で区別されるものであり、その手が右手のパートでは１、左手では２がデータｉＨａｎｄとして格納される。データｉｃｏｓｔは、割り当てられた指で鍵を押鍵する難易度の評価値（難易度データ）である。データｉｃｏｓｔＮは、難易度を正規化した評価値である。データｃＩｓＨａｒｍは楽音が和音の構成音か否かを示すものである。その値は構成音でなければ０、構成音であれば−１となる。
【００１５】
データｉＡｒｐＳは、アルペジオを構成する先頭の楽音か否かを示す先頭フラグである。データｉＡｒｐＥは、その末端（最後）の楽音か否かを示す末端フラグである。それらの値は、該当するか否かによって、予め定めた２種類の値のうちの何れかとなる。データｐＨＴｏｐは、和音の先頭音（一番下の音（最低音））の演奏データの格納場所を示すポインタ（インデクス値）である。データｐＨＴａｉｌは、和音の終端音（一番上の音（最高音））の演奏データの格納場所を示すポインタ（インデクス値）である。それらのインデクス値は、楽音が和音の構成音であった場合に格納される。そうでなければ予め定めた固定値が格納される。
【００１６】
データｃＴｅｎｄｅｎｃｙは、楽音近傍の楽音の並び（音列）の高低傾向を示す値（０は極値、正の値は上昇傾向、負の値は下降傾向、１は変化しない踊り場、２はそれ以外（の変化あり））である。データｃＴｅｎｄＳｔｅｐｓは極値となるまでの段階数である。データｃＩｓＳＯは、ポリフォニーとなっているか否かを示すフラグである。その値の絶対値は音数を示している。正の値は前に同時発音中の楽音の存在を示し、負の値は後に同時発音中の楽音の存在を示している。データｐＰＨＴｏｐは前の音列を構成する和音の先頭音の演奏データのポインタである。データｐＰＨＴａｉｌはその和音の終端音の演奏データのポインタである。データｐＮＨＴｏｐ、ｐＮＨＴａｉｌはそれぞれ、次の音列を構成する和音の先頭音、終端音の演奏データのポインタである。データｉＮＰは割り当てた指を押鍵に使うべきでない禁止条件に該当するか否かを示す値である（０は該当しないことを示す）。データｐｒｅｖは前の演奏データのポインタである。データｎｅｘｔは次の演奏データのポインタである。
【００１７】
上記データｌＴｉｍｅ、ｌＧａｔｅ、ｌＴｍｓｅｃ、及びＰｉｔｃｈは発音させるべき楽音、及びそれを発音させるべき期間（タイミング）を示すデータであり、本来の演奏データ（以下、混乱を避けるために「実演奏データ」と呼ぶ）を構成する。それら、並びにデータｃｆｉｇ、及びｉＨａｎｄは運指データを構成するものである。それらのなかで、データｃｆｉｇ、及びｉＨａｎｄは最小限の運指データ（以下、混乱を避けるために「最小運指データ」と呼ぶ）を構成する。それら、並びにデータｐｒｅｖ、及びｎｅｘｔを除く他のデータは、その最小運指データ生成用のものである。
【００１８】
図２に示すような構成の演奏データ、実演奏データ、或いは運指データは例えば、入力部１４を構成する媒体駆動装置がアクセス可能な記録媒体により、或いは不図示の通信ネットワークを介して運指表示装置１０に入力される。ここでは記録媒体により入力されるものと想定する。
【００１９】
本実施の形態では、上記演奏データが実演奏データ分のみで構成されている場合に対応するために、運指データを生成する機能を搭載させている。それにより、実演奏データ分のみで構成されている演奏データを入力したとしても、演奏データ毎に運指データを生成してそれを表示できるようにしている。
【００２０】
図１４〜図１７に示す楽譜は、演奏（実演奏）データ毎に、それが表す音符の種類、それを配置すべき位置を決定し、五線譜上に配置して表示させるものである。音符の種類はデータｌＧａｔｅから特定でき、Ｙ座標はデータＰｉｔｃｈから特定でき、Ｘ座標はデータｌＴｉｍｅから特定できる。休符は、音符（楽音）の発音終了時刻（データｌＴｉｍｅ、ｌＧａｔｅによって示される）から次の音符の発音開始時刻（データｌＴｉｍｅ）の時間間隔（無音期間）の長さから特定することができる。
【００２１】
上述したように、図１４〜図１７に示す楽譜の近傍に表記した「１」〜「５」の数字は、運指データが示す指に割り当てた指番号（指情報）である。上記データｃＤｉｓｐは、その指番号を表示させるか否か管理するために用意したデータであり、その値として１が格納された演奏データのみを対象に、それを構成するデータｃｆｉｇを表示させるようにしている。図１４〜図１７にそれぞれ示した運指表示例は、楽譜上、休符の直後に位置する音符の発音に用いるべき指の指番号を表示させた場合、指越え・指くぐりなどの特殊な指使いをして音符を発音させるべき指の指番号を表示させた場合、音符を発音させる難易度によりその発音に用いるべき指の指番号を表示させた場合、及び正規化した難易度により音符の発音に用いるべき指の指番号を表示させた場合のものである。
【００２２】
このようにして本実施の形態では、休符の直後に位置する音符、特殊な指使いをして発音させるべき音符、或いは発音させる難易度が予め設定された範囲内の音符の少なくとも一方に相当する音符の発音に用いるべき指の指番号を選択的に表示させるようにしている。それにより、指番号の確認をより容易に行えるようにして、その確認のために要する負担を軽減させ、演奏により集中できるようにさせている。
【００２３】
表示させる指番号の選択に休符、特殊な指使い、及び難易度を考慮したのは以下の理由からである。
休符は、演奏操作の切れ目に相当する。その休符箇所では、手を移動させる、或いは各指を余裕のある状態に戻す、といった演奏を続けるうえで動作のポイントとなる場合が多い。休符の直後の押鍵に用いるべき指を知らせると、ユーザーはその指でその押鍵を行えるように手、或いは指を動かすようになる。そのような動作を行うことにより、手、或いは指は演奏を行ううえでより理想的な状態に近づく結果となる。このようなことから、休符後の押鍵に用いるべき指を教示することはユーザーにとって非常に有益と考えられる。このため、休符に着目している。
【００２４】
特殊な指使いは、難易度が高いだけでなく、それを行ううえでの制約もある。それにより、休符と同様に、演奏を続けるうえで動作のポイントとなる場合が多い。このことから、特殊な指使いによる押鍵に用いるべき指を教示することはユーザーにとって非常に有益と考えられる。このため、特殊な指使いに着目している。
【００２５】
一般的に、難易度（データｉｃｏｓｔ）が高い押鍵ほど、その押鍵を適切に行うのは困難となる。このことから、困難と思われる押鍵、及びその押鍵に用いるべき指といったものをユーザーが確認できるようにさせている。ユーザーによって困難、或いは押鍵に用いるべき指を確認したいと感じる難易度は異なることから、指番号を表示させる難易度の範囲はユーザーが任意に指定できるようにさせている（図１６）。
【００２６】
演奏する楽曲によって平均的な難易度が異なる。ユーザーにとって高いと思われる難易度であっても、楽曲全体では低いほうに位置していることもある。このことから本実施の形態では、正規化した難易度により指番号を表示できるようにしている。それにより、演奏する楽曲での相対的な評価による難易度（データｉｃｏｓｔＮ）で指番号を表示させることができるようにさせている。
【００２７】
上述したようにして選択・表示される指番号は、演奏を行ううえで非常に重要なポイントとなる押鍵、或いはユーザーにとって確認を望む押鍵を適切に行えるように支援する情報となる。このため、そのような指番号のみを選択して表示させたとしても、ユーザーは表示された指番号が示す指で押鍵すべき鍵を適切に押鍵することにより、楽曲全体の演奏も高い確率で適切な運指を行えるようになる。従って、表示させない指番号が存在することの影響は実質的にないか、或いは非常に小さくなる。
【００２８】
上記運指（最小運指）データは、運指がより容易となるように生成される。そのために、運指（押鍵すべき鍵の押鍵に使う指をその鍵に運ぶ動作）の難易度を計算している。本実施の形態では、そのこともあって、難易度を考慮した指番号の選択を可能とさせている。最終的に求められた難易度を示す値は上記データｉｃｏｓｔとして格納され、正規化された難易度を示す値は上記データｉｃｏｓｔＮとして格納される。それらの値は以降、コスト値とも呼ぶことにする。
【００２９】
以降は図３〜図１３に示す各種フローチャートを参照して、上述したように指番号を表示させる対象とする演奏データを選択して指番号を図１４〜図１７に示すように表示させる運指表示装置１０の動作について詳細に説明する。その動作は、ＣＰＵ１３が、上記運指表示アプリケーションをＲＯＭ１３からＲＡＭ１２に読み出して実行することで実現される。
【００３０】
図３は、全体処理のフローチャートである。これは、上記運指表示アプリケーションを起動させてから終了させるまでの間に実行される処理を抜粋してその流れを示したものである。始めに図３を参照して、その全体処理について詳細に説明する。
【００３１】
先ず、ステップ１０１では、各種変数に初期値を代入するといった初期化を行う。次のステップ１０２では、入力部１４を構成する媒体駆動装置に、それに装着された記録媒体にアクセスさせ、その記録媒体に格納された演奏データ（図２）の読み込みを行う。特には詳細な説明は省略するが、その読み込みは、入力部１４を構成する入力装置、或いはそれと接続された入力装置への操作によってユーザーが指定した演奏データを対象に行う。その読み込みによって演奏データをＲＡＭ１２に格納した後はステップ１０３に移行する。
【００３２】
ステップ１０３では、図６に示すコスト値算出用の運指コストテーブルをＲＡＭ１２に展開し、準備する。続くステップ１０４では、演奏データに格納された運指データを評価する運指評価処理を実行する。その評価処理の実行により、演奏データが実演奏データ分のみで構成されている場合には、運指データが生成される。それにより、実行後の演奏データは図２に示すような構成のものとなる。
【００３３】
ステップ１０４に続くステップ１０５では、演奏データを対象に、指番号の表示・非表示を設定する表示・非表示設定処理を実行する。次のステップ１０６では、その設定結果に従って、楽譜、及び指番号を表示させる描画処理を実行する。その描画処理の実行により、図１４〜図１７に示すように指番号を楽譜と共に表示部１５に表示させた後、一連の処理を終了する。
【００３４】
以降は、上記全体処理内で実行されるサブルーチン処理について詳細に説明する。
図４は、上記ステップ１０４として実行される運指評価処理のフローチャートである。次に図４を参照して、その評価処理について詳細に説明する。
【００３５】
先ず、ステップ２０１では、運指評価に用いる各種変数の初期化等を行う。続くステップ２０２では、運指データを演奏データ中に有する楽曲データを取得するためのデータ取得処理を実行する。入力部１４を介して入力した楽曲データを構成する演奏データに運指データが含まれていない場合、その運指データを演奏データ毎に生成する処理を行う。その生成は周知の技術を用いて行う。
【００３６】
ステップ２０２に続くステップ２０３では、変数ｍｅに、楽曲データ中で先頭に位置する演奏データを指定するインデクス値（ポインタ）を代入する。次のステップ２０４では、運指評価が終了したか否か判定する。その評価は、変数ｍｅの値で指定される演奏データを先頭のものから最後のものまで順次、変更しながら行われる。このため、変数ｍｅの値で指定される演奏データが存在しない場合、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなってステップ２０５に移行する。
【００３７】
ステップ２０５では、変数ｍｅの値で指定される演奏データが示す楽音（指定音）とその次に発音すべき楽音間のコストを算出する２音間コスト算出処理を実行する。次に移行するステップ２０６では、現在、注目している運指（指定音を発音させるための運指）が禁止条件とする事項の何れかに該当しているか否か確認するための禁止事項検索処理を実行する。その後はステップ２０７に移行する。
【００３８】
ステップ２０７では、変数ｍｅの値で指定される演奏データ中のデータｉＮＰ（図中「ｍｅ．ｉＮＰ」と表記。以降、他のデータも同様にこの表記法を用いる）の値が０でないか否か判定する。上記禁止事項検索処理では、該当する事項（禁止条件）に該当していることが判明した場合、その値として０以外の値を格納する。このことから、その場合、判定はＹＥＳとなり、ステップ２１２でｍｅ．ｉｃｏｓｔとして、想定範囲内におけるコストの最大値を格納した後、ステップ２０９に移行する。そうでない場合には、判定はＮＯとなってステップ２０８に移行し、運指に従って指定音を発音させるためのコストをより適切なものに更新するためのコスト補正処理を実行する。ステップ２０９にはその後に移行する。
【００３９】
ステップ２０９では、ｍｅ．ｉｃｏｓｔの値、つまり指定音のコストの値が、閾値として定めた定数ＴＨＲＣＯＳＴ（＜コストの最大値）より大きいか否か判定する。その値が定数ＴＨＲＣＯＳＴより大きい場合、判定はＹＥＳとなり、運指を修正するための運指修正処理を実行し（ステップ２１０）、その実行後に変数ｍｅにｍｅ．ｎｅｘｔの値（次の演奏データを指定するインデクス値）を代入してから（ステップ２１１）、上記ステップ２０４に戻る。一方、そうでない場合には、判定はＹＥＳとなり、次にそのステップ２１１に移行する。
【００４０】
上記運指修正処理での運指の修正は、特に詳細な説明は省略するが、例えば指定音の前後の部分を考慮して処理対象とする区間を決定し、決定した区間内の演奏を行ううえで可能性のある全ての運指の組み合わせのなかからコストが最小となる組み合わせを抽出することで行っている。それにより、指定音に対して最適な運指を修正時には確実に設定させている。この結果、評価に用いる運指データは全て、それが示す運指が可能、且つそのコストが異常に大きくないものとなる。
【００４１】
ここで、上記ステップ２０５、２０６、及び２０８で実行されるサブルーチン処理について、図５〜図８を参照して詳細に説明する。
図５は、上記ステップ２０５として実行される２音間コスト算出処理のフローチャートである。始めに図５を参照して、そのコスト算出処理について詳細に説明する。
【００４２】
このコスト算出処理では、連続する２音にのみ着目する形でその２音を発音させるための運指のコストを算出するようになっている。そのコストの算出は、図６に示す運指コストテーブルを参照し、対応する値を抽出することで行っている。コスト算出処理について説明する前に、そのコストテーブルについて具体的に説明する。
【００４３】
図６中、「ｂｗ」は鍵盤種類（０は白鍵、１は黒鍵）、「ｐｍ」はピッチ変化方向（０は増加方向、１は減少方向）、「ｆ１」は変数ｅｖ１の値で指定される音符の指番号（その値で指定される演奏データ中のデータｃｆｉｇの値）、「ｆ２」は変数ｅｖ２の値で指定される音符の指番号、「ｉｎｔｖ」はそれら２つの音符間のピッチ差、をそれぞれ表している。それにより、テーブルは、それらのデータの各値の組み合わせで示される状況別に、その状況下での運指のコスト（の値）を格納したものとなっている。このことから、２音間コスト算出処理では、それらのデータの各値を求め、各値の組み合わせで指定される欄に格納されたコスト（値）を抽出し、それを指定音の運指のコストとして更新するようになっている。運指コストテーブルは、５個の値によって示される状況別にコストの値を格納したものであることから、図５中では５次元の配列変数ＣＴとして「ＣＴ［ｂｗ］［ｐｍ］［ｆ１］［ｆ２］［ｉｎｔｖ］」と表記している。
【００４４】
先ず、ステップ３０１では、変数ｅｖ１、及びｅｖ２にそれぞれ、変数ｍｅの値、及びｍｅ．ｎｅｘｔの値を代入する。続くステップ３０２では、変数ｆ１にｅｖ１．ｃｆｉｇの値、変数ｐ１にｅｖ１．ｉＰｏｓＸの値、変数ｂｗに変数ｐ１の値を２で割った余り（図中「ｐ１％２」と表記）、変数ｆ２にｅｖ２．ｃｆｉｇの値、変数ｐ２にｅｖ２．ｉＰｏｓＸの値、をそれぞれ代入する。その代入後に移行するステップ３０３では、変数ｐ１の値が変数ｐ２の値以下か否か判定する。後者が前者より大きい場合、判定はＹＥＳとなり、ステップ３０４で０を変数ｐｍに、変数ｐ２の値から変数ｐ１の値を引いた値を変数ｉｎｔｖにそれぞれ代入してからステップ３０６に移行する。そうでない場合には、判定はＮＯとなり、ステップ３０５で１を変数ｐｍに、変数ｐ１の値から変数ｐ２の値を引いた値を変数ｉｎｔｖにそれぞれ代入してからステップ３０６に移行する。
【００４５】
ステップ３０６では、変数ｉｎｔｖの値が定数ＭＡＸＩＮＴＶ以下か否か判定する。その定数ＭＡＸＩＮＴＶは、運指により押鍵を行う難易度が極めて高いと考えられる鍵間（ピッチ差）を判定するために用意したものである。このことから、着目する２つの音符の間にそのようなピッチ差が存在していない場合、判定はＹＥＳとなり、ステップ３０７でｅｖ１．ｉｃｏｓｔとして、変数ｂｗ、ｐｍ、ｆ１、ｆ２、及びｉｎｔｖの各値によって運指コストテーブル（図６）から抽出される値（図中「ＣＴ［ｂｗ］［ｐｍ］［ｆ１］［ｆ２］［ｉｎｔｖ］」と表記）を代入した後、一連の処理を終了する。そうでない場合には、判定はＮＯとなり、ステップ３０８でｅｖ１．ｉｃｏｓｔとして定数ＭＡＸＣＯＳＴを代入した後、一連の処理を終了する。
【００４６】
上記定数ＭＡＸＣＯＳＴは、例えばコストとして想定する範囲内で最大値として定めたものである。図４中のステップ２１２では最大値としてこの定数ＭＡＸＣＯＳＴにｍｅ．ｉｃｏｓｔを更新するようになっている。
【００４７】
上述したような構成の運指コストテーブルでは、２音間の発音開始時刻の時間間隔が考慮されていない。その時間間隔が短くなるほど、運指は困難となるのが普通である。このことから、上記ステップ３０７では、特には図示していないが、ｅｖ１．ｉｃｏｓｔとして、変数ｂｗ、ｐｍ、ｆ１、ｆ２、及びｉｎｔｖの各値によって運指コストテーブルから値を抽出した後、抽出値に時間間隔に応じた係数を乗算し、その乗算結果をｅｖ１．ｉｃｏｓｔとして格納している。
【００４８】
図７は、図４に示す運指評価処理内でステップ２０６として実行される禁止事項検索処理のフローチャートである。次に図７を参照して、その検索処理について詳細に説明する。
【００４９】
例えば親指や小指はその長さ、手における位置などの理由により、鍵盤上の黒鍵の押鍵はそれ以外の指よりも困難である。同じ指を使った連続する押鍵は、離鍵から押鍵までの時間間隔、押鍵する鍵間の距離（音高（ピッチ）差）などに応じて難易度（コスト）が変化する。時間間隔が短く、且つ鍵間の距離が大きいような場合、その押鍵は不可能か、或いは極めて困難となる。他にも不可能、或いは極めて困難な運指は存在する。このようなことから、検索処理では、指定音に割り当てられた運指が不可能、或いは極めて困難と考えられる条件（禁止事項）毎に、それを満たしているか否か検索により確認するようになっている。
【００５０】
先ず、ステップ４０１では、親指や小指といった比較的に短い指で演奏者から見て離れた場所にある黒鍵を押鍵するような運指を禁止条件に該当しているとして検出するための黒鍵の指使い検出処理を実行する。次のステップ４０２では、和音を発音させる場合に、或る指で押鍵する鍵より高音の鍵をその指より低音側に位置する指で押鍵する、或いはその逆に押鍵するといったことを禁止事項として検出するための和音での指の逆転検出処理を実行する。その後はステップ４０３に移行する。
【００５１】
ステップ４０３では、複数の鍵を押鍵する状況下で、同時に押鍵していることが不可能と考えられる指の割り当てを禁止条件として検出するための指の開き幅の限界検出処理を実行する。続くステップ４０４では、同時に押鍵していることが不可能な数の押鍵を禁止条件として検出するための多声条件検出処理を実行する。その実行後、一連の処理を終了する。
【００５２】
上記ステップ４０１〜４の各検出処理では、禁止条件を満たしていることが確認された場合、ｍｅ．ｉＮＰとして０以外の値を格納（更新）する。それにより、図４に示す運指評価処理では、ステップ２０７の判定がＹＥＳとなって、その指定音のコストは最大値に更新されることとなる。
【００５３】
図８は、図４に示す運指評価処理内でステップ２０８として実行されるコスト補正処理のフローチャートである。その運指評価処理内で実行されるサブルーチン処理では、最後に図８を参照してその補正処理について詳細に説明する。
【００５４】
先ず、ステップ５０１では、運指に従って指定音を発音させる際の状況を示す各種値を対応する変数に代入するための処理を実行する。次のステップ５０２では、変数ｍｅの値で指定される演奏データが示す楽音（指定音）の発音開始時刻に発音中の他の楽音、或いはその発音終了時刻前に発音を開始する他の楽音に着目してコストを補正するための多声音の補正処理を実行する。続くステップ５０３では、指定音の押鍵に必要な、指越え、或いは指くぐりという比較的に高度な演奏方法に着目してコストを補正するための指越え／指くぐりでの補正処理を実行する。その次のステップ５０４では、分散和音とそれに続く分散和音間の相互関係に着目してコストを補正するための分散和音での補正処理を実行する。その後はステップ５０５に移行する。
【００５５】
ステップ５０５では、単音が続く音符群とそれに続く和音間の相互関係に着目してコストを補正するための短音→和音遷移での補正処理を実行する。続くステップ５０６では、和音とそれに続く単音の音符群間の相互関係に着目してコストを補正するための和音→短音遷移での補正処理を実行する。その次のステップ５０７では、和音とそれに続く和音間の相互関係に着目してコストを補正するための和音→和音遷移での補正処理を実行する。その次に移行するステップ５０８では、和音とその直前に位置する和音間の相互関係に着目してコストを補正するための前方和音補正処理を実行する。一連の処理はその後に終了する。
【００５６】
このようにして、コスト補正処理では、互いに異なる内容毎に、その内容に着目してコストを必要に応じて補正するための処理を実行するようになっている。それにより、コスト補正処理を実行する前の指定音のコスト（ｍｅ．ｉｃｏｓｔ）の値は、該当する内容の有無、その数に応じて補正される（以上のようなコストの算出についての参考技術文献としては、本出願人が出願した特願２００４−２６１０２０号が挙げられる）。
【００５７】
図４に示す全体処理内で実行されるサブルーチン処理の説明に戻る。
上述したように本実施の形態では、表示させる指番号の選択は、休符、特殊な指使い、及び難易度を条件にして行うようにしている。実際の選択に用いる条件の種類は、そのなかから一つをユーザーに指定させるようにしている。その指定は、図４に示す全体処理内でステップ１０５として表示・非表示設定処理の実行時に問い合わせ、ユーザーに行わせている。その指定結果により、設定処理では図９〜図１２に示す各サブルーチン処理の少なくとも一つが実行される。このことから、図９〜図１２を参照して、ユーザーが指定した条件の種類別に、設定処理内で実行されるサブルーチン処理について詳細に説明する。
【００５８】
図９は、休符箇所を考慮した表示・非表示設定処理のフローチャートである。その設定処理は、ユーザーが条件として休符を指定した場合に実行される。始めに図９を参照して、その設定処理について詳細に説明する。
【００５９】
先ず、ステップ６０１では、変数ｍｅに、先頭に位置する演奏データのインデクス値を代入する。その代入後に移行するステップ６０２では、変数ｍｅの値で指定される演奏データが最後に位置するものではないか否か判定する。その演奏データが最後に位置するものであった場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップ６０３に移行する。
【００６０】
ステップ６０３では、ｍｅ．ｃＤｉｓｐの値として１を格納して、表示設定を行う。次のステップ６０４では、変数ｍｅｐに、現在、対象としている演奏データの直前に位置する演奏データのインデクス値（ｍｅ．ｐｒｅｖ）を代入する。その後に移行するステップ６０５では、変数ｍｅｐの値で指定される演奏データが存在するか否か判定する。現在、対象としている演奏データが先頭に位置するものであった場合、その前の演奏データは存在しないことから、判定はＮＯとなってステップ６１１に移行する。そうでない場合には、判定はＹＥＳとなってステップ６０６に移行する。
【００６１】
ステップ６０６では、変数ｌＲｅｓｔＴに、ｍｅ．ｌＴｉｍｅの値からｍｅｐ．ｉＴｉｍｅの値を減算し、その減算結果にｍｅｐ．ｌＧａｔｅの値を加算して得られる値（＝ｍｅ．ｌＴｉｍｅ−ｍｅｐ．ｉＴｉｍｅ＋ｍｅｐ．ｌＧａｔｅ：直前の鍵を離鍵すべきタイミングとなってから次の鍵を押鍵すべきタイミングとなるまでの時間間隔を示す値）を代入する。また、変数ｌＳｔｅｐＴに、ｍｅ．ｌＴｉｍｅの値からｍｅｐ．ｉＴｉｍｅの値を減算した値（＝ｍｅ．ｌＴｉｍｅ−ｍｅｐ．ｉＴｉｍｅ：直前の鍵を押鍵すべきタイミングとなってから次の鍵を押鍵すべきタイミングとなるまでの時間間隔を示す値）を代入する。それらの代入を行った後はステップ６０７に移行して、変数ｌＲｅｓｔＴの値は定数ｉＲｅｓの値の２倍以上か否か判定する。定数ｉＲｅｓは、一定以上、無音期間が続く箇所を、指番号の表示の対象となる休符箇所として検出するために用意したものである。例えば４分音符相当の時間を示す値である。このことから、一定以上、無音期間が続く箇所であった場合、判定はＹＥＳとなってステップ６１１に移行する。そうでない場合には、判定はＮＯとなり、ステップ６０８でｍｅ．ｉＤｉｓｐとして０を格納し非表示設定を行う。その後はステップ６０９に移行する。
【００６２】
ステップ６０９では、変数ｌＳｔｅｐＴの値は定数ｉＲｅｓの値の２倍以上であり、且つ変数ｌＲｅｓｔＴの値は定数ｉＲｅｓの１／４以上か否か判定する。それら何れの大小関係が満たされている場合、判定はＹＥＳとなり、ステップ６１０でｍｅ．ｉＤｉｓｐに１を格納した後、ステップ６１１に移行する。そうでない場合には、つまりそれらの大小関係の少なくとも一つが満たされていない場合には、判定はＮＯとなってステップ６１１に移行する。
【００６３】
このようにして本実施の形態では、一定以上、長く押鍵すべき鍵は指番号を表示する対象としている。これは、そのような鍵を押鍵すべき指で押鍵することで、それ以降の演奏をより適切な運指で行えるようになるからである。つまりそのような鍵は、休符直後に押鍵すべき鍵と演奏上の性格に類似点が多いためである。
【００６４】
ステップ６１１では、変数ｍｅの値がｍｅ．ｐＨＴａｉｌと一致するか否か、つまり対象としている演奏データが和音の最も音高の高い構成音のものか否か判定する。その構成音のものであった場合、判定はＹＥＳとなってステップ６１２に移行する。そうでない場合には、判定はＮＯとなってステップ６１７に移行し、変数ｍｅにｍｅ．ｎｅｘｔの値を代入した後、上記ステップ６０２に戻る。
【００６５】
ステップ６１２では、変数ｍｅｈに、ｍｅ．ｐＨＴｏｐの値を代入する。続くステップ６１３では、変数ｍｅｈの値が変数ｍｅの値と一致しないか否か判定する。それらの値が一致する場合、判定はＮＯとなって上記ステップ６１７に移行する。そうでない場合には、判定はＹＥＳとなってステップ６１４に移行する。
【００６６】
ステップ６１４では、ｍｅｈ．ｃＤｉｓｐの値は１か否か判定する。その値が１であった場合、判定はＹＥＳとなり、ステップ６１６で和音の構成音の演奏データ全てデータｉＤｉｓｐの値を１にする。その後、ステップ６１７に移行する。そうでない場合には、判定はＮＯとなり、ステップ６１５で変数ｍｅｈにｍｅｈ．ｎｅｘｔの値を代入した後、上記ステップ６１３に戻る。
【００６７】
ｍｅ．ｐＨＴｏｐの値は和音の先頭に位置する構成音の演奏データのインデクス値であり、その演奏データが示す楽音の直前に条件を満たす休符箇所が存在していれば、そのデータｉＤｉｓｐとして１が格納されている。このことから、ステップ６１１〜６１６の処理により、条件を満たす休符箇所の直後に位置する和音の構成音の演奏データは全て表示設定されることになる。
【００６８】
図１０は、特殊な指使いを考慮した表示・非表示設定処理のフローチャートである。その設定処理は、ユーザーが条件として特殊な指使いを指定した場合に実行される。次に図１０を参照して、その設定処理について詳細に説明する。ここでは特殊な指使いとして、指越え、指くぐりのみを想定する。また、図９に示す休符箇所を考慮した表示・非表示設定処理と同じ、或いは基本的に同じ内容のステップの処理には同一の符号を付している。同一の符号を付したステップの処理の説明は省略する。
【００６９】
図１０に示す表示・非表示設定処理では、ステップ６０３の処理の実行後、ステップ７０１に移行して、変数ｍｅｎに、次の演奏データのインデクス値を代入する。その代入後に移行するステップ７０２では、変数ｍｅｎの値で指定される演奏データが存在するか否か判定する。その演奏データが存在する場合、判定はＹＥＳとなり、ステップ７０３で変数ｉＰａｓｓＦに０を代入した後、ステップ７０４に移行する。そうでない場合には、つまり対象とする演奏データが最後に位置するものであった場合には、判定はＮＯとなってステップ７１４に移行する。
【００７０】
ステップ７０４では、ｍｅ．ｉＨａｎｄの値が１であり、ｍｅ．ｃｆｉｇの値が０であり、ｍｅｎ．ｃｆｉｇの値が０より大きく、且つｍｅ．ｉＰｏｓＸの値がｍｅｎ．ｉＰｏｓＸの値より大きいか否か判定する。それらの関係は、右手の演奏において、親指で押鍵すべき鍵の次に、より音高の低い鍵を親指以外の指で押鍵すべき状況の場合に全て満足する。このことから、そのような状況であった場合、判定はＹＥＳとなってステップ７０５に移行し、指越えを行うべき状況であることを示す値の１を変数ｉＰａｓｓＦに代入した後、ステップ７０６に移行する。そうでない場合には、判定はＮＯとなって次にそのステップ７０６の処理を実行する。
【００７１】
ステップ７０６では、ｍｅ．ｉＨａｎｄの値が１であり、ｍｅ．ｃｆｉｇの値が０より大きく、ｍｅｎ．ｃｆｉｇの値が０であり、且つｍｅ．ｉＰｏｓＸの値がｍｅｎ．ｉＰｏｓＸの値より小さいか否か判定する。それらの関係は、右手の演奏において、親指以外の指で押鍵すべき鍵（指定音）の次に、より音高の高い鍵を親指で押鍵すべき状況の場合に全て満足する。このことから、そのような状況であった場合、判定はＹＥＳとなってステップ７０６に移行し、指くぐりを行うべき状況であることを示す値の２を変数ｉＰａｓｓＦに代入した後、ステップ７０８に移行する。そうでない場合には、判定はＮＯとなって次にそのステップ７０８の処理を実行する。
【００７２】
ステップ７０８〜７１１では、左手の演奏を対象に、指越え、指くぐりの何れかの指使いを行うべき状況か否かの判定を行い、その判定結果に応じた値を変数ｉＰａｓｓＦに代入するための処理が行われる。それにより、親指で押鍵すべき鍵の次に、より音高の高い鍵を親指以外の指で押鍵すべき状況、つまり指越えを行うべき状況であれば１、親指以外の指で押鍵すべき鍵の次に、より音高の低い鍵を親指で押鍵すべき状況、つまり指くぐりを行うべき状況であれば２、が変数ｉＰａｓｓＦに代入されることとなる。ステップ７１２には、ステップ７１０、或いは７１１の処理の実行後に移行する。
【００７３】
ステップ７１２では、変数ｉＰａｓｓＦの値が０でないか否か判定する。その値が０でない場合、判定はＹＥＳとなり、ステップ７１３で変数ｍｅにｍｅ．ｎｅｘｔの値を代入した後、上記ステップ６０２に戻る。そうでない場合には、判定はＮＯとなり、ステップ７１４でｍｅ．ｃＤｉｓｐの値を０に更新した後、そのステップ７１３に移行する。
【００７４】
図１１は、難易度を考慮した表示・非表示設定処理のフローチャートである。その設定処理は、ユーザーが条件として難易度を指定した場合に実行される。次に図１１を参照して、その設定処理について詳細に説明する。図９に示す休符箇所を考慮した表示・非表示設定処理と同じ、或いは基本的に同じ内容のステップの処理には同一の符号を付し、同一の符号を付したステップの処理の説明は省略する。
【００７５】
その難易度を示す値はデータｉｃｏｓｔとして演奏データに格納されている。対象となる難易度の範囲は、図１６に示すように、下限値、上限値によりユーザーに指定させるようにしている。ユーザーが指定した下限値、上限値に相当するコスト値（難易度）はそれぞれ変数ｍｉｎＣｏｓｔ、ｍａｘＣｏｓｔに代入される。
【００７６】
先ず、ステップ８０１では、変数ｍｅに、先頭に位置する演奏データのインデクス値を代入する。その代入後に移行するステップ８０２では、変数ｍｅの値が０（ＮＵＬＬ）でないか否か判定する。その演奏データが最後に位置するものであった場合、データｎｅｘｔの値として０（ＮＵＬＬ）が格納されている。このことから、その場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップ８０３に移行する。
【００７７】
ステップ８０３では、ｍｅ．ｃＤｉｓｐの値を０に更新する。続くステップ８０４では、ｍｅ．ｉｃｏｓｔの値が変数ｍｉｎＣｏｓｔの値以上、且つ変数ｍａｘＣｏｓｔの値以下か否か判定する。ｍｅ．ｉｃｏｓｔの値がユーザーの指定範囲内の難易度を示していた場合、判定はＹＥＳとなり、ステップ８０５でｍｅ．ｃＤｉｓｐの値を１に更新した後、ステップ６１１に移行する。そうでない場合には、判定はＮＯとなってそのステップ６１１に移行する。それにより、難易度がユーザーの指定範囲内の難易度となっている構成音を有する和音は、全ての構成音で指番号を表示させる。
【００７８】
図１２は、難易度の正規化処理のフローチャートである。その正規化処理は、ユーザーが条件として正規化した難易度を指定した場合に実行される。次に図１２を参照して、その正規化処理について詳細に説明する。
【００７９】
その難易度を示す値はデータｉｃｏｓｔＮとして演奏データに格納されている。正規化した難易度は０〜１００の数値で表すようにしている。対象となる難易度の範囲は、図１７に示すように、下限値、上限値を数値によりユーザーに指定させるようにしている。ユーザーが指定した下限値、上限値に相当するコスト値（難易度）はそれぞれ変数ｍｉｎＣｏｓｔ、ｍａｘＣｏｓｔに代入される。それにより、正規化した難易度を考慮した表示・非表示の設定を行うためのサブルーチン処理は、図１１に示す表示・非表示設定処理において、ステップ８０４のみが異なっている。つまりｍｅ．ｉｃｏｓｔの代わりにｍｅ．ｉｃｏｓｔＮを用いることのみが異なっている。このことから、正規化した難易度を考慮した表示・非表示の設定を行うためのサブルーチン処理についての詳細な説明は省略する。
【００８０】
先ず、ステップ９０１では、変数の初期化を行う。その初期化により、変数ＣｏｓｔＡｖｅ、Ｎｃｏｕｎｔ、及びｍａｘＣｏｓｔにはそれぞれ０を代入し、変数ｍｉｎＣｏｓｔには１００を代入する。続くステップ９０２では、変数ｍｅに、先頭に位置する演奏データのインデクス値を代入する。その代入後はステップ９０３に移行して、変数ｍｅの値で指定される演奏データが最後に位置するものではないか否か判定する。その演奏データが最後に位置するものであった場合、判定はＮＯとなってステップ９１０に移行する。そうでない場合には、判定はＹＥＳとなってステップ９０４に移行する。
【００８１】
ステップ９０４では、変数ＣｏｓｔＡｖｅに、それまでの値に変数ｍｅ．ｉｃｏｓｔの値を加算した結果を代入し、変数Ｎｃｏｕｎｔの値をインクリメントする。次のステップ９０５では、ｍｅ．ｉｃｏｓｔの値が変数ｍａｘＣｏｓｔの値より大きいか否か判定する。前者が後者より大きい場合、判定はＹＥＳとなり、ステップ７０６で変数ｍａｘＣｏｓｔにｍｅ．ｉｃｏｓｔの値を代入した後、ステップ９０７に移行する。そうでない場合には、判定はＮＯとなってそのステップ９０７に移行する。
【００８２】
ステップ９０７では、ｍｅ．ｉｃｏｓｔの値が変数ｍｉｎＣｏｓｔの値より小さいか否か判定する。前者が後者より小さい場合、判定はＹＥＳとなり、ステップ７０８で変数ｍｉｎＣｏｓｔにｍｅ．ｉｃｏｓｔの値を代入し、次のステップ９０９で変数ｍｅにｍｅ．ｎｅｘｔの値を代入した後、上記ステップ９０３に戻る。そうでない場合には、判定はＮＯとなってそのステップ９０９に移行する。
【００８３】
上記ステップ９０３〜９０９で形成される処理ループをステップ９０３の判定がＮＯとなるまで繰り返し実行することにより、コスト値（難易度）の累算値が変数ＣｏｓｔＡｖｅにストアされ、演奏データの総数が変数Ｎｃｏｕｎｔにストアされ、コスト値の最大値が変数ｍａｘＣｏｓｔにストアされ、コスト値の最小値が変数ｍｉｎＣｏｓｔにストアされる。ステップ９０３の判定がＮＯとなって移行するステップ９１０以降では、そのようにして取得されたデータを用いて難易度を正規化するための処理が行われる。
【００８４】
先ず、ステップ９１０では、変数ＣｏｓｔＡｖｅに、それまでの値を変数Ｎｃｏｕｎｔの値で割った減算結果、つまりコスト値の平均値を代入する。次のステップ９１１では、変数ｍｅに、先頭に位置する演奏データのインデクス値を代入する。その次に移行するステップ９１２では、変数ｍｅの値で指定される演奏データが最後に位置するものではないか否か判定する。その演奏データが最後に位置するものであった場合、判定はＮＯとなり、ここで一連の処理を終了する。そうでない場合には、判定はＹＥＳとなってステップ９１３に移行する。
【００８５】
ステップ９１３では、変数ｉＤｉｆに、ｍｅ．ｉｃｏｓｔの値から変数ＣｏｓｔＡｖｅの値を引いた減算結果を代入する。続くステップ９１４では、変数ｉＤｉｆの値が０以上か否か判定する。ｍｅ．ｉｃｏｓｔの値がコスト値の平均値未満であった場合、変数ｉＤｉｆの値は０未満となるから、判定はＮＯとなり、ステップ９１５で変数ｉＤｅｎに変数ＣｏｓｔＡｖｅの値から変数ｍｉｎＣｏｓｔの値を引いた減算結果を代入し、次のステップ９１６でｍｅ．ｉｃｏｓｔＮに、変数ｉＤｉｆの値を変数ｉＤｅｎの値で割った除算結果に５０を乗算し、その乗算結果に５０を加算して得られる値（＝５０＋ｉＤｉｆ／ｉＤｅｎ・５０）を代入し、その次のステップ９１７で変数ｍｅにｍｅ．ｎｅｘｔの値を代入した後、上記ステップ９１２に戻る。そうでない場合には、判定はＹＥＳとなり、ステップ９１８で変数ｉＤｅｎに変数ｍａｘＣｏｓｔの値から変数ＣｏｓｔＡｖｅの値を引いた減算結果を代入した後、上記ステップ９１６に移行する。
【００８６】
このようにして本実施の形態では、コスト値の最小値を０、その最大値を１００として、その間を等分に分ける形でコスト値を正規化している。正規化を行う方法は、そのようなものに限定されるわけではなく、様々な方法を採用しても良い。
【００８７】
図１３は、図３に示す全体処理内でステップ１０６として実行される描画処理のフローチャートである。次に図１３を参照して、その描画処理について詳細に説明する。
先ず、ステップ１００１では、変数ｍｅに、表示上、先頭となる演奏データのインデクス値（図中「ｍｅＤＳｔ」と表記）を代入する。続くステップ１００２では、変数ｍｅの値で指定される演奏データに相当する音符の画像データを生成して表示部１５に表示させる。上述したように、その音符の種類はデータｌＧａｔｅから特定し、表示位置は、データｌＴｉｍｅから特定する。
【００８８】
ステップ１００２に続くステップ１００３では、ｍｅ．ｉＤｉｓｐの値が１か否か判定する。その値が１であった場合、判定はＹＥＳとなり、ステップ１００４でｍｅ．ｃｆｉｇの値に１を加えた値を指番号としてｍｅ．ＤｒａｗＰｏｓが示す座標に表示させた後、ステップ１００５に移行する。そうでない場合には、判定はＮＯとなってそのステップ１００５に移行する。
【００８９】
ステップ１００５では、変数ｍｅの値が表示上の終端となる演奏データのインデクス値（図中「ｍｅＤＥｄ」と表記）と一致するか否か判定する。表示すべき音符を全て表示させた場合、それらの値が一致することから、判定はＹＥＳとなり、ここで一連の処理を終了する。そうでない場合には、判定はＮＯとなり、ステップ１００６で変数ｍｅにｍｅ．ｎｅｘｔの値を代入した後、上記ステップ１００２に戻る。
【００９０】
この描画処理を実行することにより、ユーザーが指定（選択）した条件の種類に応じて、図１４〜図１７に示すような楽譜の何れかが表示部１５に表示されることとなる。
なお、本実施の形態では、ユーザーが指定可能な条件は１種類のみとしているが、複種類の条件を一度に指定できるようにしても良い。また、運指を表す指番号は、楽譜と併せて予め表示させるようにしているが、その指番号が示す指で押鍵を行うべきタイミングとなった場合にのみ表示させるようにしても良い。その場合、指番号ではなく、押鍵すべき指を表す画像、別の文字情報、などによってユーザーに通知しても良い。
【図面の簡単な説明】
【００９１】
【図１】本実施の形態による運指表示装置の構成を説明する図である。
【図２】演奏データの構成を説明する図である。
【図３】全体処理のフローチャートである。
【図４】運指評価処理のフローチャートである。
【図５】２音間コスト算出処理のフローチャートである。
【図６】運指コストテーブルの構成を説明する図である。
【図７】禁止事項検索処理のフローチャートである。
【図８】コスト補正処理のフローチャートである。
【図９】休符箇所を考慮した表示・非表示処理のフローチャートである。
【図１０】特殊な指使いを考慮した表示・非表示処理のフローチャートである。
【図１１】難易度を考慮した表示・非表示処理のフローチャートである。
【図１２】難易度の正規化処理のフローチャートである。
【図１３】描画処理のフローチャートである。
【図１４】楽譜上、休符の直後に位置する音符の発音に用いるべき指の指番号を表示させた場合の運指表示例を説明する図である。
【図１５】指越え・指くぐりなどの特殊な指使いをして音符を発音させるべき指の指番号を表示させた場合の運指表示例を説明する図である。
【図１６】音符を発音させる難易度によりその発音に用いるべき指の指番号を表示させた場合の運指表示例を説明する図である。
【図１７】正規化した難易度により音符の発音に用いるべき指の指番号を表示させた場合の運指表示例を説明する図である。
【符号の説明】
【００９２】
１０    運指表示装置
１１    ＣＰＵ
１２    ＲＡＭ
１３    ＲＯＭ
１４    入力部
１５    表示部
【図１】
0004613817.tif 000002
【図２】
0004613817.tif 000003
【図３】
0004613817.tif 000004
【図４】
0004613817.tif 000005
【図５】
0004613817.tif 000006
【図６】
0004613817.tif 000007
【図７】
0004613817.tif 000008
【図８】
0004613817.tif 000009
【図９】
0004613817.tif 000010
【図１０】
0004613817.tif 000011
【図１１】
0004613817.tif 000012
【図１２】
0004613817.tif 000013
【図１３】
0004613817.tif 000014
【図１４】
0004613817.tif 000015
【図１５】
0004613817.tif 000016
【図１６】
0004613817.tif 000017
【図１７】
0004613817.tif 000018