(57)【特許請求の範囲】
【請求項１】
楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する運指情報生成装置であって、
前記演奏に関する情報である演奏情報を取得する演奏情報取得手段と、
前記演奏情報で示されている前記演奏の指示のうち、該指示に応じた運指が可能であるか否かの判定を行なう運指可能性判定手段と、
前記判定の結果に基づいて前記演奏情報の修正を行なう演奏情報修正手段と、
前記運指を、前記修正がなされた演奏情報に応じて生成する運指情報生成手段と、
を有することを特徴とする運指情報生成装置。
【請求項２】
前記運指可能性判定手段は、前記演奏の指示のうち、前記楽器を操作する指の本数を超える数の異なる音高の楽音が同時に発音中となる状態を生じさせた指示に応じた運指を不可能であると判定することを特徴とする請求項１に記載の運指情報生成装置。
【請求項３】
前記演奏情報修正手段は、前記同時発音中となる楽音のうち、最も早くに消音させる指示が前記演奏情報に示されているものについて、前記同時発音中となる楽音のうちで最も遅くに発音開始される楽音の発音開始時刻よりも早くにその楽音を消音させる指示となるように該演奏情報の修正を行なうことを特徴とする請求項２に記載の運指情報生成装置。
【請求項４】
前記運指可能性判定手段は、前記演奏の指示のうち、異なる音高の複数の楽音が同時に発音中となるときの前記楽器への複数の操作が所定距離よりも離れた位置での操作となる指示に応じた運指を不可能であると判定することを特徴とする請求項１に記載の運指情報生成装置。
【請求項５】
前記演奏情報修正手段は、前記同時発音中となる楽音であって、該楽音を発音させるための前記楽器への操作の位置が最も離れている２つの楽音のうち、先に消音させる指示が前記演奏情報に示されているものについて、後に発音開始される楽音の発音開始時刻よりも早くにその楽音を消音させる指示となるように該演奏情報の修正を行なうことを特徴とする請求項４に記載の運指情報生成装置。
【請求項６】
前記運指可能性判定手段は、前記演奏の指示のうち、該指示が楽音の発音開始の指示であって、該指示に従って発音を開始するときに該楽音を消音させるための操作の途中の状態であるときには、該指示に応じた運指を不可能であると判定することを特徴とする請求項１に記載の運指情報生成装置。
【請求項７】
前記演奏情報修正手段は、前記楽音の発音の開始の指示における発音開始の時刻よりも所定時間以上早くに、前記消音操作を完了させる指示となるように前記演奏情報の修正を行なうことを特徴とする請求項６に記載の運指情報生成装置。
【請求項８】
楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する運指情報生成装置であって、
前記演奏に関する情報である演奏情報を取得する演奏情報取得手段と、
各指について、前記演奏情報で示されている楽音の発音指示に応じた前記楽器の操作を該指で行なうことが可能であり、該操作に該指を割り当てることができるか否かの判断を行なう指割当判断手段と、
前記操作に割り当てることができると判断された指の中から該操作に割り当てる１つの指を選択するときの優先度を、各指に対して与える優先値付与手段と、
前記判断の結果及び前記優先度に基づいて、前記操作に割り当てる１つの指を、楽曲の先頭から順次１楽音ごとに確定していく指割当確定手段と、
を有することを特徴とする運指情報生成装置。
【請求項９】
前記指割当判断手段は、前記演奏情報で示されている楽音の発音指示に応じた操作のための指の割り当てが、該発音の開始のときに既に前記楽器の操作を行なっている指の位置関係に基づいて行なえるか否かの判定の結果に従って、前記判断を行なうことを特徴とする請求項８に記載の運指情報生成装置。
【請求項１０】
前記指割当判断手段は、前記各指の中から前記演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合に、該楽音の発音の継続が指示されている期間内における別の楽音の発音の指示に応じた操作のための指の割り当てが、該別の楽音の発音のときに既に前記楽器の操作を行なっている指の位置関係に基づいて行なえるか否かの判定の結果に従って、前記判断を行なうことを特徴とする請求項８に記載の運指情報生成装置。
【請求項１１】
前記指割当判断手段は、前記各指の中から前記演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合に、該楽音の発音の継続が指示されている期間内における別の楽音の発音指示に応じた操作のために割り当てを要する指の割当必要本数であって、該仮に割り当てた指の左側若しくは右側の各々の指についての該割当必要本数が、該仮に割り当てた指の左側若しくは右側の各々の指の本数に基づいて足りるか否かを判定した判定結果に従って、前記判断を行なうことを特徴とする請求項８に記載の運指情報生成装置。
【請求項１２】
前記指割当判断手段は、前記各指の中から前記演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合であって、該楽音の発音の開始が指示されているときには既に別の楽音の発音指示に応じた操作に他の指が割り当てられている場合に、これら両者の楽音を同時発音させる指示がなされている期間内における更なる別の楽音の発音指示に応じた操作のために割り当てを要する指の割当必要本数であって、前記両者の楽音の発音指示に応じた操作に割り当てられている２本の指の間の指についての該割当必要本数が、該２本の指の間の指の本数に基づいて足りるか否かを判定した判定結果に従って、前記判断を行なうことを特徴とする請求項８に記載の運指情報生成装置。
【請求項１３】
前記指割当判断手段は、前記各指の中から前記演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合に、該演奏情報で示されている該楽音の発音指示に続く次の楽音の発音指示に対応する操作に割り当てることのできる指が存在するか否かの判定の結果に従って、前記判断を行なうことを特徴とする請求項８に記載の運指情報生成装置。
【請求項１４】
前記優先値付与手段は、前記操作を行なうために要する指の移動の距離が長い指ほど低い優先度を与えることを特徴とする請求項８に記載の運指情報生成装置。
【請求項１５】
前記優先値付与手段は、前記操作を行なうために要する手の移動の距離が短い指ほど高い優先度を与えることを特徴とする請求項８に記載の運指情報生成装置。
【請求項１６】
前記優先値付与手段は、前記演奏情報で示されている楽音の発音指示に対応する操作を行なう指が、該楽音の直前の楽音の発音指示に対応する操作に割り当てられており、且つ、この両者の楽音の音高が異なる場合には、該指の優先度を低下させることを特徴とする請求項８に記載の運指情報生成装置。
【請求項１７】
所定の音高差を有する楽音列からなるフレーズを示すフレーズデータと、該フレーズの演奏を前記楽器で行なうときの運指を示す情報であるフレーズ運指情報とが対応付けられて格納されているフレーズデータ格納手段を更に有し、
前記優先値付与手段は、前記フレーズデータで示されているフレーズが前記楽曲を構成する楽音列に含まれているときには、該フレーズデータに対応付けられて前記フレーズデータ格納手段に格納されているフレーズ運指情報に示されている指が前記操作に割り当てる指として選択され易くなるように前記優先度を与える、
ことを特徴とする請求項８に記載の運指情報生成装置。
【請求項１８】
前記優先値付与手段は、前記優先度を与える対象の指を前記操作に割り当てると該操作のために指を開く動作が発生するときには、該動作における指の開きの大きさに基づいて優先度を与えることを特徴とする請求項８に記載の運指情報生成装置。
【請求項１９】
前記楽器は、鍵盤楽器であり、
前記優先値付与手段は、前記鍵盤楽器の黒鍵の操作の割り当ての選択において親指及び小指に対して与える前記優先度を低くする、
ことを特徴とする請求項８に記載の運指情報生成装置。
【請求項２０】
前記優先値付与手段は、前記優先度を与える対象の指を割り当てた前記楽器の直前の操作を終えてから所定時間が経過していない場合には優先度を低くすることを特徴とする請求項８に記載の運指情報生成装置。
【請求項２１】
前記優先値付与手段は、前記優先度を与える対象の指を前記操作に割り当てると該操作のために指潜り若しくは指跨ぎの運指が発生するときには優先度を低くすることを特徴とする請求項８に記載の運指情報生成装置。
【請求項２２】
前記操作に割り当て可能な指がないときに、前記演奏情報の修正を行なう演奏情報修正手段を更に有し、
前記指割当確定手段は、前記演奏情報修正手段により修正された演奏情報について前記指割当判断手段によって行なわれる前記判断の結果、及び該判断の結果に応じて前記優先値付与手段が与える前記優先度に基づいて、前記操作に割り当てる指を確定する、
ことを特徴とする請求項８に記載の運指情報生成装置。
【請求項２３】
楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する運指情報生成方法であって、
前記演奏に関する情報である演奏情報を取得し、
前記演奏情報で示されている前記演奏の指示のうち、該指示に応じた運指が可能であるか否かの判定を行ない、
前記判定の結果に基づいて前記演奏情報の修正を行ない、
前記運指を、前記修正がなされた演奏情報に応じて生成する、
ことを特徴とする運指情報生成方法。
【請求項２４】
楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する運指情報生成方法であって、
前記演奏に関する情報である演奏情報を取得し、
各指について、前記演奏情報で示されている楽音の発音指示に応じた前記楽器の操作を該指で行なうことが可能であり、該操作に該指を割り当てることができるか否かの判断を行ない、
前記操作に割り当てることができると判断された指の中から該操作に割り当てる１つの指を選択するときの該選択の優先度を、各指に対して与え、
前記判断の結果及び前記優先度に基づいて、前記操作に割り当てる１つの指を、楽曲の先頭から順次１楽音ごとに確定していく、
ことを特徴とする運指情報生成方法。
【請求項２５】
楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する制御をコンピュータに行なわせる運指情報生成プログラムを記憶した該コンピュータが読み取り可能な記憶媒体であって、
前記演奏に関する情報である演奏情報を取得する制御と、
前記演奏情報で示されている前記演奏の指示のうち、該指示に応じた運指が可能であるか否かの判定を行なう制御と、
前記判定の結果に基づいて前記演奏情報の修正を行なう制御と、
前記運指を、前記修正がなされた演奏情報に応じて生成する制御と、
をコンピュータに行なわせる運指情報生成プログラムを記憶した記憶媒体。
【請求項２６】
楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する制御をコンピュータに行なわせる運指情報生成プログラムを記憶した該コンピュータが読み取り可能な記憶媒体であって、
前記演奏に関する情報である演奏情報を取得する制御と、
各指について、前記演奏情報で示されている楽音の発音指示に応じた前記楽器の操作を該指で行なうことが可能であり、該操作に該指を割り当てることができるか否かの判断を行なう制御と、
前記操作に割り当てることができると判断された指の中から該操作に割り当てる１つの指を選択するときの該選択の優先度を、各指に対して与える制御と、
前記判断の結果及び前記優先度に基づいて、前記操作に割り当てる１つの指を、楽曲の先頭から順次１楽音ごとに確定していく制御と、
をコンピュータに行なわせる運指情報生成プログラムを記憶した記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、音楽の教習において用いられる技術に関し、特に、楽器で楽曲を演奏するための運指を該楽曲の演奏情報から生成する技術に関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
ピアノなどの楽器の演奏操作においては、発音のために操作される同一の操作子が常に同一の指により操作されるとは限らない。楽器を用いての演奏が行なわれるとき、その運指（演奏を行なうときの楽器を操作する指の動き）は演奏者によって案出される。
【０００３】
演奏者は、楽譜などの楽曲の演奏情報に基づいて、演奏する楽器の特性、手の大きさや指の開きの程度などといった自分の身体の特性、自己の演奏の技量、手癖などを考慮して適切な運指を案出する。一般的には、なるべく指の移動に無理がないような運指が選択されるが、演奏者の有する演奏技量を視覚的に誇示するために、指の運びの難しい運指を敢えて採用することもある。
【０００４】
いずれにしても、楽曲の演奏情報からその運指を案出するには演奏楽器及び演奏技法についてのある程度の知識と技量とが必要であり、運指の案出は初心者である演奏者にとっては極めて困難な作業である。
以上の問題を鑑み、楽曲の演奏情報から楽器で該楽曲を演奏するための運指を演奏者に代わって生成することが本発明が解決しようとする課題である。
【０００５】
【課題を解決するための手段】
本発明は、楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成する装置または方法を前提とする。
図１は、本発明の第一の態様の原理構成を示す図である。
【０００６】
演奏情報取得手段１は、演奏に関する情報である演奏情報を取得する。
運指可能性判定手段２は、演奏情報で示されている演奏の指示のうち、該指示に応じた運指が可能であるか否かの判定を行なう。
演奏情報修正手段３は、運指可能性判定手段２による判定の結果に基づいて演奏情報の修正を行なう。
【０００７】
運指情報生成手段４は、演奏情報修正手段３により修正がなされた演奏情報に応じて運指を生成する。
ここで、運指可能性判定手段２は、演奏の指示のうち、楽器を操作する指の本数を超える数の異なる音高の楽音が同時に発音中となる状態を生じさせた指示に応じた運指を不可能であると判定するようにしてもよい。そして、この場合に、演奏情報修正手段３が、同時発音中となる楽音のうち、最も早くに消音させる指示が演奏情報に示されているものについて、その同時発音中となる楽音のうちで最も遅くに発音開始される楽音の発音開始時刻よりも早くにその楽音を消音させる指示となるように演奏情報の修正を行なうようにしてもよい。
【０００８】
あるいは、運指可能性判定手段２は、演奏の指示のうち、異なる音高の複数の楽音が同時に発音中となるときの楽器への複数の操作が所定距離よりも離れた位置での操作となる指示に応じた運指を不可能であると判定するようにしてもよい。そして、この場合に、演奏情報修正手段３が、同時発音中となる楽音であって、その楽音を発音させるための楽器への操作の位置が最も離れている２つの楽音のうち、先に消音させる指示がその演奏情報に示されているものについて、後に発音開始される楽音の発音開始時刻よりも早くにその楽音を消音させる指示となるように演奏情報の修正を行なうようにしてもよい。
【００１０】
あるいは、運指可能性判定手段２は、演奏の指示のうち、その指示が楽音の発音開始の指示であって、その指示に従って発音を開始するときにその楽音を消音させるための操作の途中の状態であるときには、その指示に応じた運指を不可能であると判定するようにしてもよい。そして、この場合に、演奏情報修正手段３が、楽音の発音の開始の指示における発音開始の時刻よりも所定時間以上早くに、消音操作を完了させる指示となるように演奏情報の修正を行なうようにしてもよい。
【００１１】
この図１に示した本発明の第一の態様の構成によれば、運指可能性判定手段２によって演奏情報で示されている演奏の指示のうち、該指示に応じた運指が不可能であるものが抽出され、演奏情報修正手段３によって演奏情報におけるその抽出された指示が示されている箇所が修正される。従って、指による演奏操作をそのまま忠実に行なうことが不可能な演奏情報でも、運指情報生成手段４で運指を生成することができる。
【００１２】
図２は、本発明の第二の態様の原理構成を示す図である。
演奏情報取得手段１は、前述した本発明の第一の態様におけるものと同様に、演奏に関する情報である演奏情報を取得する。
指割当判断手段５は、各指について、演奏情報で示されている楽音の発音指示に応じた楽器の操作を指で行なうことが可能であり、その操作にその指を割り当てることができるか否かの判断を行なう。
【００１３】
優先値付与手段６は、操作に割り当てることができると判断された指の中からその操作に割り当てる１つの指を選択するときの優先度を、各指に対して与える。
指割当確定手段７は、指割当判断手段５による判断の結果及び優先値付与手段６より各指に与えられた優先度に基づいて、操作に割り当てる１つの指を、楽曲の先頭から順次１楽音ごとに確定していく。
【００１４】
ここで、指割当判断手段５は、演奏情報で示されている楽音の発音指示に応じた操作のための指の割り当てが、その発音の開始のときに既に楽器の操作を行なっている指の位置関係に基づいて行なえるか否かの判定の結果に従って、その判断を行なうようにしてもよい。
【００１５】
あるいは、指割当判断手段５は、各指から演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合に、その楽音の発音の継続が指示されている期間内における別の楽音の発音の指示に応じた操作のための指の割り当てが、その別の楽音の発音のときに既に楽器の操作を行なっている指の位置関係に基づいて行なえるか否かの判定の結果に従って、その判断を行なうようにしてもよい。
【００１６】
また、指割当判断手段５は、各指から演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合に、その楽音の発音の継続が指示されている期間内における別の楽音の発音指示に応じた操作のために割り当てを要する指の割当必要本数であって、その仮に割り当てた指の左側若しくは右側の各々の指についてのその割当必要本数が、その仮に割り当てた指の左側若しくは右側の各々の指の本数に基づいて足りるか否かを判定した判定結果に従って、前記判断を行なうようにしてもよい。
【００１７】
あるいは、指割当判断手段５は、各指から演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合であって、その楽音の発音の開始が指示されているときには既に別の楽音の発音指示に応じた操作に他の指が割り当てられている場合に、これら両者の楽音を同時発音させる指示がなされている期間内における更なる別の楽音の発音指示に応じた操作のために割り当てを要する指の割当必要本数であって、その両者の楽音の発音指示に応じた操作に割り当てられている２本の指の間の指についてのその割当必要本数が、その２本の指の間の指の本数に基づいて足りるか否かを判定した判定結果に従って、前記判断を行なうようにしてもよい。
【００１８】
また、指割当判断手段５は、各指から演奏情報で示されている楽音の発音指示に対応する操作を行なう指を仮に割り当てた場合に、演奏情報で示されているその楽音の発音指示に続く次の楽音の発音指示に対応する操作に割り当てることのできる指が存在するか否かの判定の結果に従って、前記判断を行なうようにしてもよい。
【００１９】
また、優先値付与手段６は、その操作を行なうために要する指の移動の距離が長い指ほど低い優先度を与えるようにしてもよい。
【００２０】
また、前記優先値付与手段６は、その操作を行なうために要する手の移動の距離が短い指ほど高い優先度を与えるようにしてもよい。
あるいは、前記優先値付与手段６は、演奏情報で示されている楽音の発音指示に対応する操作を行なう指が、その楽音の直前の楽音の発音指示に対応する操作に割り当てられており、且つ、この両者の楽音の音高が異なる場合には、その指の優先度を低下させるようにしてもよい。
【００２１】
この図２に示した本発明の第二の態様の構成によれば、指割当判断手段５により判断される、演奏情報で示されている楽音の発音指示に応じた楽器の操作に割り当てることができる指の中から、その操作に割り当てる１つの指の選択を、優先値付与手段６により与えられる優先度に基づいて楽曲の先頭から順次１楽音ごとに行なうことができるので、より適切な運指を生成することができる。
【００２２】
また、図２に示す本発明の第二の態様の原理構成において、所定の音高差を有する楽音列からなるフレーズを示すフレーズデータと、そのフレーズの演奏を楽器で行なうときの運指を示す情報であるフレーズ運指情報とが対応付けられて格納されているフレーズデータ格納手段を更に有し、優先値付与手段６が、フレーズデータで示されているフレーズが楽曲を構成する楽音列に含まれているときには、そのフレーズデータに対応付けられてフレーズデータ格納手段に格納されているフレーズ運指情報に示されている指が操作に割り当てる指として選択され易くなるように優先度を与えるように構成してもよい。
【００２５】
これらの構成によれば、標準的な運指が広く知られている所定の音高差の楽音列（フレーズ）について、出力結果である運指情報にその標準的な運指が含まれ易くすることができるようになる。
【００２７】
また、図２に示す本発明の第二の態様の原理構成において、優先値付与手段６が、優先度を与える対象の指を操作に割り当てるとその操作のために指を開く動作が発生するときには、その動作における指の開きの大きさに基づいて優先度を与えるように構成してもよい。
【００２８】
一般的に、運指の難度は手の指の開きの大きさが大きくなるほど高くなるので、この構成によれば、難度の低い運指である、手の指の開きの小さい運指を示す情報が生成され易くなる。
また、図２に示す本発明の第二の態様の原理構成において、前記楽器は、鍵盤楽器であり、前記優先値付与手段６は、前記鍵盤楽器の黒鍵の操作の割り当ての選択において親指及び小指に対して与える前記優先度を低くするように構成してもよい。
【００２９】
この構成によれば、親指及び小指では操作し難い黒鍵については、なるべく親指及び小指で操作しないような運指情報を生成できるようになる。
また、図２に示す本発明の第二の態様の原理構成において、優先値付与手段６が、優先度を与える対象の指を割り当てた楽器の直前の操作を終えてから所定時間が経過していない場合には優先度を低くするように構成してもよい。
【００３１】
この構成によれば、運指の難度が上昇してしまう、同一の指による短時間の時間間隔で連続する演奏操作が運指情報として生成され難くなる。
また、図２に示す本発明の第二の態様の原理構成において、優先値付与手段６が、優先度を与える対象の指を操作に割り当てるとその操作のために指潜り若しくは指跨ぎの運指が発生するときには優先度を低くするように構成してもよい。
【００３６】
この構成によれば、運指の難度の高い、指潜り若しくは指跨ぎの運指を伴う演奏操作が運指情報として生成され難くなる。
また、図２に示す本発明の第二の態様の原理構成において、操作に割り当て可能な指がないときに、演奏情報の修正を行なう演奏情報修正手段を更に有し、指割当確定手段７は、演奏情報修正手段により修正された演奏情報について指割当判断手段５によって行なわれる判断の結果、及びその判断の結果に応じて優先値付与手段６が与える優先度に基づいて、操作に割り当てる指を確定するように構成してもよい。
【００３７】
この構成によれば、どの指も割り当てできないときには演奏情報が修正され、その修正された演奏情報に基づいて改めて運指情報の生成が行なわれるので、運指情報が生成不能となることを防止することができるようになる。
【００３８】
このように、本発明のいずれの態様によっても、楽曲の演奏情報から楽器で該楽曲を演奏するための運指を生成することができる。
なお、上述した本発明のそれぞれの態様における各構成要素によって行なわれる一連の処理を行なう方法によっても前述した課題を解決することができる。
【００３９】
また、上述した本発明の各構成により行なわれる機能と同様の制御をコンピュータに行なわせる運指情報生成プログラムを記憶したコンピュータ読み取り可能な記憶媒体から、そのプログラムをコンピュータに読み出させて実行させることによっても、前述した課題を解決することができる。
【００４０】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。
図３は、本発明を実施する運指情報生成装置の全体構成を示す図である。同図に示す運指情報生成装置  （以下、「本装置」という）は、ＭＩＤＩ（Musical Instrument Digital Interface）規格に準拠した楽曲の演奏情報（ＭＩＤＩデータ）を分析し、鍵盤楽器で左手若しくは右手の片手のみによってその楽曲を演奏するための運指を示す情報（運指データ）をその分析結果から生成し、その運指データに応じた運指を視覚的に表示させるものである。
【００４１】
本装置は、表示部１１、操作部１２、音源１３、サウンドシステム１４、ＣＰＵ１５、ＲＯＭ１６、ＲＡＭ１７、データ入力部１８によって構成されており、サウンドシステム１４を除く各構成要素はバス１９を介して相互に接続されている。
【００４２】
表示部１１は、ＣＲＴディスプレイや液晶ディスプレイを備えて構成され、ＣＰＵ１５の指示に応じた画像を表示する。
操作部１２は、スイッチを備えて構成され、本装置の使用者に操作されることによって使用者からの指示を取得する。
【００４３】
音源１３はＣＰＵ１５から渡される楽音情報に応じた音色・音高・音量の楽音信号を発生させてサウンドシステム１４に渡す。
サウンドシステム１４は音源１３から渡された楽音信号に応じた楽音を放音する。
【００４４】
ＣＰＵ１５は中央演算装置であり、ＲＯＭ１６に格納されている制御プログラムを読み出して実行することによって本装置全体の動作を制御する。
ＲＯＭ１６はリード・オンリ・メモリであり、ＣＰＵ１５によって実行される制御プログラムや各種のデータが予め格納されている。
【００４５】
ＲＡＭ１７はランダム・アクセス・メモリであり、ＣＰＵが制御プログラムを実行する際にワークエリアとして使用したり、本装置への入出力情報である楽曲の演奏情報や運指情報を示すデータを一時的に蓄積するためにも用いられる。
データ入力部１８は、フロッピーディスクドライブ装置や、本装置をネットワークに接続するためのインタフェース装置などを備えて構成され、本装置で運指の生成を行なう対象であるＭＩＤＩデータのファイルを、フロッピーディスクあるいはネットワークなどから読み込んで取得する。
【００４６】
次に、ＣＰＵ１５が行なう制御について説明する。図４は、本装置に電源を投入した直後よりＲＯＭ１６に記憶されている制御プログラムを読み出して実行することによりＣＰＵ１５が行なう本装置全体の制御処理の処理内容を示すフローチャートである。ＣＰＵ１５による制御動作を同図に従って説明する。
【００４７】
まず、Ｓ１０１において、ＣＰＵ１５は本装置へ電源が投入された直後に初期化処理を実行し、ＣＰＵ１５の有する内部レジスタやＲＡＭ１７のイニシャライズ、後述する各種処理において用いられる各種の変数への初期値の代入、などといった処理が行なわれる。
【００４８】
続いて、Ｓ１０２において、ＣＰＵ１５は、操作部１２に設けられている各種スイッチに対しての本装置の使用者による操作状況の取り込み処理を行ない、使用者からの本装置への指示を取得する。
Ｓ１０３では、ＣＰＵ１５は他の処理により生成されたデータに応じた表示を表示部１１に行なわせる。表示させるデータの内容は、本装置における各種の設定内容や、演奏情報及び運指情報を有する後述の曲データの内容などである。また、この曲データの内容の表示に同期させて、音源１３で曲データに応じた楽音信号を発生させ、サウンドシステム１４により放音させる。
【００４９】
Ｓ１０４では、Ｓ１０２において取得した使用者からの本装置への指示が、本装置に対する動作モードや定数の設定要求であるか否かが判定され、判定結果がＹｅｓならばＳ１０５に進んでその指示内容に応じた設定処理が実行され、その後はＳ１０２へ戻って上述した処理が繰り返される。一方、Ｓ１０４の判定結果がＮｏならばＳ１０６に進む。
【００５０】
Ｓ１０６では、Ｓ１０２において取得した使用者からの本装置への指示が、ＭＩＤＩデータファイルの読み込みの要求であるか否かが判定され、判定結果がＹｅｓならばＳ１０７に進み、ＮｏならばＳ１０２へ戻って上述した処理が繰り返される。
【００５１】
Ｓ１０７ではＭＩＤＩファイル読込処理が実行される。この処理は、１曲分のＭＩＤＩデータの集まりであるＭＩＤＩファイルをデータ入力部１８に読み込ませて取得し、取得したＭＩＤＩデータを本装置の内部処理に便利なデータ形式に変換し（以下、この変換された形式のデータを「曲データ」と呼ぶこととする）、得られた曲データをＲＡＭ１７に格納させる処理である。
【００５２】
曲データのデータ構造を図５に示す。曲データは複数のトラックデータにより構成されており、各トラックデータは複数のイベントデータがそのイベントの発生順に並べられて構成されている。本装置においては運指情報の生成はトラックデータごとに行なわれる。運指情報を生成するトラックデータは本装置の使用者が操作部１２に設けられている各種スイッチを操作することによって選択される。
【００５３】
イベントデータは、ＭＩＤＩイベント、デルタタイム、指番号の３種類のデータによって構成されている。
ＭＩＤＩイベントは、鍵盤の押鍵（ノートオン）・離鍵（ノートオフ）のイベント、そのイベントを行なわせる鍵の鍵盤番号、押鍵イベントにおける音量などを示すデータで構成される。
【００５４】
デルタタイムは、直前のＭＩＤＩイベントの発生時からこのイベントデータのＭＩＤＩイベントを発生させるまでの時間間隔を示すデータである。このデルタタイムは、後述する説明においては、このデルタタイムの値が変数（pe->tktime）に代入される。
【００５５】
指番号は、このイベントデータのＭＩＤＩイベントにおいて押鍵が示されている場合に、押鍵すべき鍵をどの指を用いて押鍵するかを示す運指データが示される。
この指番号は、各指について、
０：親指    １：示指（人差し指）    ２：中指    ３：薬指    ４：小指
の番号が割り当てられている。
【００５６】
なお、図４のＳ１０７の処理においては、曲データにおける指番号は何も設定されず、空値（ヌル）とされる。
図４の説明に戻る。Ｓ１０８では曲データ修正処理が実行される。曲データ修正処理は、前ステップでの処理により取得した曲データを分析し、例えば、同時に複数の発音が指示されている箇所などといった、そのデータに従った演奏操作を行なうことが明らかに不可能な部分となる部分の曲データを修正する処理である。この曲データ修正処理の詳細は次に説明する。
【００５７】
Ｓ１０９では運指情報生成処理が実行される。運指情報生成処理は、曲データを分析して適切な運指を生成し、生成された運指を前述した指番号で曲データの各イベントデータに設定する処理である。運指情報生成処理の詳細は後述する。
このＳ１０９の処理を終えた後にはＳ１０２へ戻って上述した処理を繰り返す。
【００５８】
ＣＰＵ１５が上述した処理を実行することによって、本装置で運指情報が生成される。
次に、図４のＳ１０８において実行される曲データ修正処理について説明する。図６は曲データ修正処理の処理内容を示すフローチャートである。
【００５９】
まず、Ｓ２０１では、この曲データ修正処理において使用される各種のパラメータにその初期値を代入する処理が実行される。具体的には、まず、運指生成の対象として選択されているトラックデータの有するイベントデータに設定されているデルタタイムを累積加算して、演奏開始後の経過時間を算出するために用いられる変数である変数tktimeには「０」が代入される。また、peにはＲＡＭ１７に格納されている曲データであって、使用者によりその曲データから選択されたトラックデータの先頭のイベントデータが格納されているＲＡＭ１７における格納位置を指すポインタが代入される。更に、変数fnote[0]〜fnote[4]の５つの変数には「ＮＯＤＡＴＡ」なる値が代入される。ここで、変数fnote[i]（ｉ＝０，１，２，３，４）は、指番号ｉの指によって押鍵中である鍵の鍵盤番号が設定される変数であり、「ＮＯＤＡＴＡ」が設定されているときには、その指は鍵を押鍵していない状態にあることを示している。なお、鍵盤番号は、鍵盤における鍵の音高の低いものから順に付すものとする。
【００６０】
Ｓ２０２では、変数ｐｅの指すイベントデータが、データの終了を示すものであるか否かが判定され、判定結果がＹｅｓならばＳ２０９に、ＮｏならばＳ２０３に、それぞれ進む。
Ｓ２０３では、変数tktimeの値に、ポインタpeの指すイベントデータに設定されているデルタタイムの値（pe->tktime）を加算し、その加算結果が改めて変数tktimeに代入される。
【００６１】
Ｓ２０４ではポインタpeの指すイベントデータに設定されているＭＩＤＩイベントが「ノートオン」であるか否かが判定され、判定結果がＹｅｓならばＳ２０５に進んで第一ノートオン処理が実行され、その後はＳ２０８に進む。一方、Ｓ２０４の判定結果がＮｏならばＳ２０６に進む。第一ノートオン処理は、変数fnote[i]に押鍵する鍵を仮に割り当てると共に、片手の５本の指の現在の押鍵の状態を考慮して新たにノートオンが指示された鍵を押鍵することが可能であるか否かを判断し、押鍵が不能であると判断した場合には既に押鍵中であるいずれかの鍵の離鍵のタイミングを早めるように曲データの修正を行なう処理であり、その詳細は後述する。
【００６２】
Ｓ２０６ではポインタpeの指すイベントデータに設定されているＭＩＤＩイベントが「ノートオフ」であるか否かが判定され、判定結果がＹｅｓならばＳ２０７に進んで第一ノートオフ処理が実行され、その後はＳ２０８に進む。一方、Ｓ２０６の判定結果がＮｏならばそのままＳ２０８に進む。第一ノートオフ処理は、前述した第一ノートオン処理において仮に割り当てられている変数fnote[i]の押鍵の状態を離鍵の状態に変化させる処理であり、その詳細は後述する。
【００６３】
Ｓ２０８では、選択されているトラックデータにおける次のイベントデータが格納されているＲＡＭ１７上の格納位置を指すようにポインタpeの値が進められ、その後はＳ２０２へ戻って上述した処理が繰り返される。
以降のＳ２０９からＳ２１６の処理は、Ｓ２０９において、変数tkofftime[]の全てに「ＮＯＤＡＴＡ」が代入されること、及び、Ｓ２１３において第二ノートオン処理が実行され、Ｓ２１５において第二ノートオフ処理が実行されることを除けば、上述したＳ２０１からＳ２０８にかけての処理と同様である。そして、Ｓ２１０の判定処理の結果がＹｅｓである場合には、今回の曲データ修正処理が終了し、図４の処理へ戻る。
【００６４】
ここで、第二ノートオン処理は、新たにノートオンが指示された鍵が離鍵操作の途中の状態にあり、ノートオンの指示のタイミングでの押鍵が間に合わない場合に、その鍵の直前の離鍵操作のタイミングを早めて、指示通りのタイミングでの押鍵が行なえるように曲データの修正を行なう処理である。また、第二ノートオフ処理は、押鍵中の鍵が離鍵される時間を取得する処理である。これらの両処理の詳細は後述する。また、変数tkofftime[] についても後述する。
【００６５】
以上までの処理が曲データ修正処理であり、この処理がＣＰＵ１５で実行されることによって、取得された曲データの修正が行なわれる。
次に、図６のＳ２０５において実行される第一ノートオン処理について、その処理内容をフローチャートで示す図７に沿って説明する。
【００６６】
まず、Ｓ３０１において、図６のＳ２０４で「ノートオン」が設定されていると判定されたＭＩＤＩイベントに更に設定されている、押鍵する鍵の鍵盤番号が変数ｋに代入され、更に変数ｉに「０」が代入される。変数ｉは指番号を示す変数である。
【００６７】
Ｓ３０２では、変数ｉの値が「５」よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３０３に進み、ＮｏならばＳ３０５に進む。
Ｓ３０３では変数fnote[i]の値が「ＮＯＤＡＴＡ」であるか否か、すなわち、指番号ｉの指が押鍵の状態にはなく、今回のノートオン指示に対応する押鍵を行なえる状態にあるか否かが判定され、判定結果がＹｅｓならばＳ３０６に進み、ＮｏならばＳ３０４に進む。
【００６８】
Ｓ３０４では変数ｉの値を１だけ増加させ、その後はＳ３０２へ戻って上述した処理を繰り返す。
以上のＳ３０２からＳ３０４にかけての処理の作用により、Ｓ３０２の判定結果がＮｏとなるのは、片手の５本の指の現在の状態が全ていずれかの鍵を押鍵中の状態であるときに新たに六番目のノートオンが指示されたため、片手による押鍵が不能であると判定された場合となる。
【００６９】
この場合に実行されるＳ３０５では、変数fnote[0]からfnote[4]までの５つの変数に各々設定されている鍵盤番号で示される押鍵中の５つの鍵について、対応するノートオフのイベントが示されているイベントデータが曲データからそれぞれ探し出される。そして、このノートオフのイベントデータが最も早く出現するものが選択され、選択されたイベントデータに対応する鍵を押鍵中である指の指番号が変数ｉに代入される。更に、幾つかのイベントデータに設定されているデルタタイムの値が変更され、選択されたノートオフのイベントデータを、現在の位置から（tktime−tkoncosttime）の時間の位置に移動させるようにする。
【００７０】
ここで、定数tkoncosttimeとは、鍵を押鍵中の状態にある指が離鍵時の定常状態へと遷移するまでに要する時間を示している。つまり、Ｓ３０５において行なわれるノートオフのイベントデータの移動は、元のＭＩＤＩデータに従えば最も早くに離鍵されることとなる鍵の離鍵開始のタイミングを更に早めるように曲データを修正し、六番目のノートオンに対応する押鍵操作のタイミングの正確さを優先させるようにするものであり、特に、鍵の離鍵開始のタイミングを、指による押鍵・離鍵操作に要する時間まで考慮した時間まで早めるように修正するものである。
【００７１】
定数tkoncosttimeは、５本の指について計測されるこの時間のうち、例えば、最も長いものが設定されている。本実施の形態においてはこの定数はＲＯＭ１６に予め設定されているが、使用者によりその設定が行なえるようにすることも可能である。
【００７２】
Ｓ３０６では、変数ｋの値が変数fnote[i]に代入され、鍵盤番号ｋの押鍵を行なう指が仮に割り当てられる。
Ｓ３０７では、変数fnote[0]からfnote[4]までの５つの変数に各々設定されている鍵盤番号のうち、最も番号の小さいものが変数minkeyに代入され、最も番号の大きいものが変数maxkeyに代入される。
【００７３】
Ｓ３０８では、（keypos[maxkey]−keypos[minkey]）なる計算が実行される。そして、この計算結果が定数fullrange よりも大きいか否かが判定され、この判定結果がＹｅｓならばＳ３０９に進み、Ｎｏならば今回の第一ノートオン処理が終了し、図６の処理へ戻る。ここで、定数keypos[]は、鍵盤の横方向（鍵が並べられている方向）における各鍵の位置の相対距離を示す値が格納されているテーブルである。また、定数fullrange は、手の親指と小指とを広げたときに同時に鍵を押鍵することの可能な両指間の最大の距離を示す値が設定されている。つまり、このＳ３０８の判定処理は、変数fnote[0]からfnote[4]に割り当てられている同時に押鍵すべき鍵の位置が、片手で同時に押鍵することができないほど遠く離れてしまっているか否かを判定するものである。
【００７４】
なお、本実施の形態においては定数keypos[]及び定数fullrange の値はＲＯＭ１６に予め設定されているが、使用者によりその設定が行なえるようにすることも可能である。
Ｓ３０９では、変数minkey及び変数maxkeyに各々設定されている鍵盤番号で示される押鍵中の鍵について、対応するノートオフのイベントが示されているイベントデータが曲データからそれぞれ探し出される。そして、このノートオフのイベントデータが先に出現する方が選択される。そして、幾つかのイベントデータに設定されているデルタタイムの値が変更され、選択されたノートオフのイベントデータを、現在の位置から（tktime−tkoncosttime）の時間の位置に移動させる。更に、選択されたイベントデータに対応する鍵を押鍵中である指の指番号が変数ｉに代入され、そして、変数fnote[i]に「ＮＯＤＡＴＡ」が代入される。この処理の後には今回の第一ノートオン処理が終了し、図６の処理へ戻る。
【００７５】
このＳ３０９において行なわれるノートオフのイベントデータの移動は、鍵の配置が離れすぎているために片手では同時に押鍵することができない２つの鍵のうち、元のＭＩＤＩデータに従えば先に離鍵されることとなる鍵の離鍵のタイミングを更に早めるように曲データを修正し、新たなノートオンイベントに対応する押鍵操作のタイミングの正確さを優先させるようにするものであり、特に、鍵の離鍵開始のタイミングを、指による押鍵・離鍵操作に要する時間まで考慮した時間まで早めるように修正するものである。
【００７６】
以上までの処理が第一ノートオン処理である。
次に、図６のＳ２０７において実行される第一ノートオフ処理について、その処理内容をフローチャートで示す図８に沿って説明する。
まず、Ｓ３２１において、図６のＳ２０６で「ノートオフ」が設定されていると判定されたＭＩＤＩイベントに更に設定されている、押鍵する鍵の鍵盤番号が変数ｋに代入され、更に変数ｉに「０」が代入される。
【００７７】
Ｓ３２２では、変数ｉの値が「５」よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３２３に進み、ＮｏならばＳ３２６に進む。
Ｓ３２３では変数fnote[i]の値が変数ｋであるか否か、すなわち、検出されたノートオフのイベントデータは、指番号ｉの指が押鍵している鍵についての離鍵指示であるか否かが判定され、判定結果がＹｅｓならばＳ３２４に進み、変数fnote[i]に「ＮＯＤＡＴＡ」が代入されて指番号ｉの指が押鍵している鍵の離鍵が示される。Ｓ３２４の処理の後には今回の第一ノートオフ処理が終了し、図６の処理へ戻る。
【００７８】
一方、Ｓ３２３の判定処理の結果がＮｏならばＳ３２５に進み、変数ｉの値を１だけ増加させ、その後はＳ３２２へ戻って上述した処理を繰り返す。
これらのＳ３２２、Ｓ３２３、Ｓ３２５の処理の作用により、Ｓ３２２の判定結果がＮｏとなるのは、鍵盤番号がｋである鍵について、押鍵中の状態とされていないのにもかかわらずこの鍵を離鍵する指示を受けた場合であり、何らかの原因により曲データのノートオンとノートオフとの対応関係に誤りがある場合である。そこで、Ｓ３２６ではエラー処理を実行し、このノートオフのイベントデータを曲データから削除する。この処理の後には今回の第一ノートオフ処理が終了し、図６の処理へ戻る。
【００７９】
以上までの処理が第一ノートオフ処理である。
次に、図６のＳ２１３において実行される第二ノートオン処理について、その処理内容をフローチャートで示す図９に沿って説明する。
まず、Ｓ３５１において、図６のＳ２１２で「ノートオン」が設定されていると判定されたＭＩＤＩイベントに更に設定されている、押鍵する鍵の鍵盤番号が変数ｋに代入される。
【００８０】
Ｓ３５２では、変数tkofftime[k]に「ＮＯＤＡＴＡ」が設定されているか否かが判定され、判定結果がＹｅｓならば何もせずにこのまま今回の第二ノートオン処理が終了し、図６の処理へ戻る。一方、この判定結果がＮｏならばＳ３５３に進む。ここで、変数tkofftime[k]は、鍵盤番号ｋの鍵が直前にノートオフされたときの時間tktimeの値が、後述する第二ノートオフ処理で設定される。
【００８１】
Ｓ３５３では、（tktime−tkofftime[k]）なる計算が実行される。そして、この計算結果が前述した定数tkoncosttimeよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３５４に進み、Ｎｏならばこのまま今回の第二ノートオン処理が終了し、図６の処理へ戻る。
【００８２】
Ｓ３５４では、鍵盤番号ｋの鍵についての直前のノートオフのイベントデータを、現在の格納位置から （tktime−tkoncosttime）の時間の位置に移動させる。その後は今回の第二ノートオン処理が終了し、図６の処理へ戻る。
以上までの処理が第二ノートオン処理であり、この処理におけるＳ３５３及びＳ３５４の処理の作用により、ノートオンが指示された鍵ｋが離鍵操作の途中の状態にあってその指示に対応した押鍵操作が間に合わない場合に、鍵ｋについての直前のノートオフのタイミングを早めるような曲データの修正が施され、ノートオンの指示通りのタイミングでの押鍵が行なえるようになる。
【００８３】
次に、図６のＳ２１５において実行される第二ノートオフ処理について、その処理内容をフローチャートで示す図１０に沿って説明する。
まず、Ｓ３７１において、図６のＳ２１４で「ノートオフ」が設定されていると判定されたＭＩＤＩイベントに更に設定されている、押鍵する鍵の鍵盤番号が変数ｋに代入される。
【００８４】
続いてＳ３７２において、前述した変数tkofftime[k]に変数tktimeの現在の値が代入され、その後は今回の第二ノートオフ処理が終了し、図６の処理へ戻る。
次に、図４のＳ１０９において実行される運指情報生成処理について説明する。図１１は運指情報生成処理の処理内容を示すフローチャートである。
【００８５】
まず、Ｓ４０１では、この運指情報生成処理において使用される各種の変数の初期値を代入する処理が実行される。
具体的には、前述したものと同様の用途である変数tktimeには、「０」が代入される。また、ポインタpeも前述したものと同様の用途であり、ＲＡＭ１７に格納されている曲データであって、使用者によりその曲データから選択されたトラックデータの先頭のイベントデータが格納されているＲＡＭ１７における格納位置を指すポインタが代入される。また、変数fnote[0]〜fnote[4]の５つの変数の用途も前述したものと同様であり、「ＮＯＤＡＴＡ」が代入される。
【００８６】
変数fofftime[0] 〜fofftime[4] には「ＮＯＤＡＴＡ」が代入される。変数fofftime[ifig] （ｉｆｉｇ＝０，１，２，３，４）には、指番号ｉｆｉｇの指によって押鍵中である鍵を離鍵する時間が設定される。
変数fofftimeold[0]〜fofftimeold[4]には「ＮＯＤＡＴＡ」が代入される。変数fofftimeold[ifig]（ｉｆｉｇ＝０，１，２，３，４）には、指番号ｉｆｉｇの指が直前に離鍵操作を行なった時間が設定される。
【００８７】
変数fnoteold[0] 〜fnoteold[4] には「ＮＯＤＡＴＡ」が代入される。変数fnoteold[ifig] （ｉｆｉｇ＝０，１，２，３，４）には、指番号ｉｆｉｇの指が直前に押鍵していた鍵の鍵盤番号が設定される。
変数fpos[ifig] （ｉｆｉｇ＝０，１，２，３，４）は、指番号ｉｆｉｇの指の位置を、その指を有する手の位置を基準としたときの相対位置として示す値が代入される変数であり、ここでは、離鍵の状態において定常的な各指の位置を示す値が初期値として変数fpos[0] 〜fpos[4] に代入される。
【００８８】
Ｓ４０２では、変数ｐｅの指すイベントデータが、データの終了を示すものであるか否かが判定され、判定結果がＹｅｓならば今回の運指情報生成処理を終了する。一方、判定結果がＮｏならばＳ４０３に進む。
Ｓ４０３では、変数tktimeの値に、ポインタpeの指すイベントデータに設定されているデルタタイムの値（pe->tktime）を加算した結果が改めて変数tktimeに代入される。
【００８９】
Ｓ４０４ではポインタpeの指すイベントデータに設定されているＭＩＤＩイベントが「ノートオン」であるか否かが判定され、判定結果がＹｅｓならばＳ４０５に進み、ＮｏならばＳ４１９に進む。
Ｓ４０５では変数benable[0]〜benable[4]に値「ＦＡＬＳＥ」が代入され、更にＳ４０４で「ノートオン」が設定されていると判定されたＭＩＤＩイベントに更に設定されている、押鍵する鍵の鍵盤番号が変数ｋに代入される。
【００９０】
ここで、変数benable[ifig]（ｉｆｉｇ＝０，１，２，３，４）は、指番号ｉｆｉｇの指を押鍵すべき鍵の押鍵操作に割り当てることが可能であるか否かを示すフラグであり、可能である場合には値「ＴＲＵＥ」が設定され、不可能である場合には値「ＦＡＬＳＥ」が設定される。
【００９１】
Ｓ４０６からＳ４１０にかけては指割当判断処理が実行される。ここでは第一から第五までの５種類の異なる指割当判断処理が実行される。これらの処理は、いすれも、各指について、イベントデータによってノートオンの指示がされている鍵の押鍵操作が行なうことが可能であり、その押鍵操作にその指を割り当てることができるか否かを判断する処理である。各々の指割当判断処理の詳細は後述する。
【００９２】
Ｓ４１１からＳ４１４にかけては優先値付加処理が実行される。この処理は第一から第四までの４種類の優先値付加処理が実行される。これらの処理は、いずれも、イベントデータによってノートオンの指示がされている鍵を押鍵する指を割り当てる場合において、その割り当てる指を選択するための優先度を各指に与えることによってより適切な運指の選択を行なえるようにするものである。この処理によって、指番号ｉｆｉｇの指の割り当て優先度が変数priority[ifig] （ｉｆｉｇ＝０，１，２，３，４）に数値として与えられ、この値が大きいほど割り当て優先度が高いことを意味する。各々の優先値付加処理の詳細は後述する。
【００９３】
Ｓ４１５では、優先値付加処理の結果、変数priority[ifig] （ｉｆｉｇ＝０，１，２，３，４）に設定されている割り当て優先度を示す数値が一致してしまった場合に、どの指の割り当てを優先させるかを調整する。ここでは、割り当て優先度が一致している指のうち、鍵盤楽器の演奏操作において使用される頻度の高さに応じ、示指＞中指＞薬指＞親指＞小指の順に押鍵する指の割り当てを優先させるように変数priority[ifig] の値を増加させる。
【００９４】
Ｓ４１６では、変数priority[ifig] （ｉｆｉｇ＝０，１，２，３，４）のうち、最も数値の大きいものの指番号を変数ifigに代入する。
Ｓ４１７では、ポインタpeの指すＲＡＭ１７上のイベントデータにおける指番号の格納領域（pe->ifig）に、変数ifigの値が格納され、変数fnote[ifig] には変数ｋの値が代入され、今回のノートオンのイベントデータに対応する押鍵操作のための指の割り当てを確定させる。更に、ここで曲データの先読みが行なわれ、鍵盤番号ｋの鍵についての今回の押鍵操作に対応する離鍵操作が示されているノートオフのイベントデータをＲＡＭ１７から探し出し、この鍵に対する離鍵操作の時間がデルタタイムの累積加算より算出されて変数fofftime[ifig]に代入される。更に、変数hposL 及びhposR の設定が行なわれる。変数hposL 及びhposRは鍵盤の横方向（鍵が並べられている方向）における手の存在可能な位置の範囲を示すものであり、各指が現在押鍵を行なっている鍵の位置に基づき、手における各指の配置位置の違い、各指の長さ、各指の関節の可動角度が考慮されて設定される。変数hposL には存在可能な最も左の位置が、変数hposR には存在可能な最も右の位置がそれぞれ設定される。なお、本実施の形態においては、手は鍵盤の横方向に平行移動するものとしている。
【００９５】
Ｓ４１８では、選択されているトラックデータにおける次のイベントデータが格納されているＲＡＭ１７上の格納位置を指すようにポインタpeの値が進められ、その後はＳ４０２へ戻って上述した処理が繰り返される。
Ｓ４１９ではポインタpeの指すイベントデータに設定されているＭＩＤＩイベントが「ノートオフ」であるか否かが判定され、判定結果がＹｅｓならばＳ４２０に進み、ＮｏならばＳ４１８へ戻って上述した処理が行なわれる。
【００９６】
Ｓ４２０では、このイベントデータで離鍵が示されている鍵を押鍵中である指の指番号が変数ifigに代入される。
Ｓ４２１では、変数tktimeの現在の値が変数fofftimeold[ifig] に代入され、変数fnote[ifig] の現在の値が変数fnoteold[ifig]に代入される。
【００９７】
Ｓ４２２では、変数fnote[ifig] 及び変数fofftime[ifig]に値「ＮＯＤＡＴＡ」がそれぞれ代入される。
Ｓ４２３では、変数fpos[ifig]について、その値を初期値へ戻す設定が行なわれ、その後はＳ４１８へ戻って上述した処理が行なわれる。
【００９８】
以上までの処理が運指情報生成処理であり、この処理をＣＰＵ１５が実行することによって、曲データから運指情報が生成される。
次に、図１１のＳ４０６において実行される第一指割当判断処理について説明する。第一指割当判断処理では、押鍵操作を行なっていない各指について、ノートオンが指示された鍵の押鍵のために割り当てることができるか否かの判定を、押鍵中である他の指の鍵盤上の位置との関係を考慮して行なう処理である。
【００９９】
図１２は第一指割当判断処理の処理内容を示すフローチャートである。
Ｓ５０１では変数ｆに０が代入される。変数ｆは指番号を示している。
Ｓ５０２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５０３に進み、ＮｏならばＳ５０５に進む。
【０１００】
Ｓ５０３では変数fnote[f]に「ＮＯＤＡＴＡ」が設定されているか否かが判定され、判定結果がＹｅｓならばＳ５０４に進み、ＮｏならばＳ５０６に進む。
Ｓ５０４では変数ｆの値を１だけ増加させ、その後はＳ５０２へ戻って上述した処理を繰り返す。
【０１０１】
以上のＳ５０２からＳ５０４にかけての処理の作用により、Ｓ５０２の判定結果がＮｏとなるのは、片手の５本の指の現在の状態が全て押鍵操作を行なっていない場合となる。この場合は、今回のノートオンのための鍵盤操作をどの指も行なうことが可能であるので、Ｓ５０５において変数benable[0]〜benable[4]の各々に値「ＴＲＵＥ」が設定される。この処理の後には今回の第一指割当処理が終了し、図１１に示す処理へ戻る。
【０１０２】
Ｓ５０６では、まず、現在押鍵中である全ての指を求め、これらの押鍵中の指の鍵盤上の位置と各指の関節の可動範囲とを考慮したときの、配置可能な手の位置の範囲（鍵盤の横方向についての位置の範囲）が算出される。そして、配置可能な最も左寄りの手の位置を示す値（最小位置）が変数hleft に代入され、配置可能な最も右寄りの手の位置を示す値（最大位置）が変数hrightに代入される。なお、これらの位置を算出する代わりに、これらの押鍵中の指及びその指が押鍵している鍵とこれらの位置との関係を示すテーブルをＲＯＭ１６に予め用意しておき、このテーブルを参照することによってこれらの数値が得られるようにしてもよい。
【０１０３】
Ｓ５０７では変数ｆに改めて「０」が代入される。
Ｓ５０８では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５０９に進み、Ｎｏならばこのまま今回の第一指割当処理が終了し、図１１に示す処理へ戻る。
【０１０４】
Ｓ５０９では変数fnote[f]に「ＮＯＤＡＴＡ」が設定されているか否かが判定され、判定結果がＹｅｓならばＳ５１０に進み、ＮｏならばＳ５１３に進む。
Ｓ５１０では、定数frangeL[f]の値と変数hleft の値とが加算される。そして、その加算結果が前述した定数keypos[k] の値よりも小さいか否かが判定され、この判定結果がＹｅｓならばＳ５１１に、ＮｏならばＳ５１３に、それぞれ進む。ここで、定数frangeL[f]は、指番号ｆの指について、その指の配置、長さ、及び関節の可動作用によって押鍵することの可能な最も左側の位置（鍵盤の横方向についての位置）と、手の位置を特定している特定点との間の鍵盤の横方向の距離を示す値である。
【０１０５】
Ｓ５１１では、定数frangeR[f]の値と変数hrightの値とが加算される。そして、その加算結果が前述した定数keypos[k] の値よりも大きいか否かが判定され、この判定結果がＹｅｓならばＳ５１２に、ＮｏならばＳ５１３に、それぞれ進む。ここで、定数frangeR[f]は、指番号ｆの指について、その指の配置、長さ、及び関節の可動作用によって押鍵することの可能な最も右の位置（鍵盤の横方向についての位置）と、手の位置を特定している特定点との間の鍵盤の横方向の距離を示す値である。
【０１０６】
以上のＳ５１０及びＳ５１１の処理の作用により、指番号ｆの指を、ノートオンが指示された鍵盤番号ｋの押鍵のために割り当てることができるか否かが判定される。
Ｓ５１２では変数benable[f]に値「ＴＲＵＥ」が設定され、指番号ｆの指に対する押鍵操作の割り当てが可能であることが示される。
【０１０７】
Ｓ５１３では変数ｆの値を１だけ増加させ、その後はＳ５０８へ戻って上述した処理を繰り返す。
以上までの処理が第一指割当判断処理である。
次に、図１１のＳ４０７において実行される第二指割当判断処理について説明する。第二指割当判断処理では、まず、今回のノートオンのイベントデータに対応する押鍵操作を、押鍵可能であるいずれかの指に割り当てた場合を想定する。そして、その押鍵操作の継続中に更なる押鍵操作が必要となる他の鍵についてのノートオンのイベントデータを曲データから探索し、既に割り当てた指による押鍵操作を維持したままで、他の指によってそのイベントデータに対応した押鍵操作が可能であるか否かの判定を行なう。
【０１０８】
図１３は第二指割当判断処理の処理内容を示すフローチャートである。
Ｓ５２１では、図１１のＳ４０４においてノートオンの指示を検出したイベントデータによって押鍵操作が指示されている鍵盤番号ｋの鍵について、その離鍵操作が指示されているノートオフのイベントデータが曲データから探索され、この鍵ｋについてのノートオンとノートオフとのイベントデータの間に存在するノートオンのイベントデータが抽出される。そして、抽出されたイベントデータにおいて、鍵ｋよりも大きい（高音側の）鍵のうち、鍵盤番号が最大である（最も音高の高い）鍵の鍵盤番号が変数maxnote に代入され、鍵ｋよりも小さい（低音側の）鍵のうち、鍵盤番号が最小である（最も音高の低い）鍵の鍵盤番号が変数minnote に代入される。なお、前述した区間内にノートオンのイベントデータが存在しなかった場合にはこれらの変数にはいずれも「ＮＯＤＡＴＡ」が代入される。
【０１０９】
更に、変数maxnote 及び変数minnote で示される各々の鍵の押鍵開始時間がデルタタイムの累積加算により算出され、得られた値がそれぞれ変数tkmax 、tkmin に代入される。
Ｓ５２２では、変数maxnote 及び変数minnote に共に「ＮＯＤＡＴＡ」が設定されているか否かが判定され、判定結果がＹｅｓならばこのまま今回の第二指割当判断処理を終了して図１１の処理へ戻る。一方、判定結果がＮｏならばＳ５２３に進む。
【０１１０】
Ｓ５２３では変数ｆに０が代入される。
Ｓ５２４では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５２５に進み、Ｎｏならばこのまま今回の第二指割当判断処理を終了して図１１の処理へ戻る。
【０１１１】
Ｓ５２５では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した第一指割当判断処理において指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ５２６に進み、Ｎｏならば指番号ｆの指についてのＳ５２６からＳ５３７の処理による指割当判断を省略してＳ５３８に進む。
【０１１２】
以降のＳ５２６からＳ５３５にかけての処理は、図１１のＳ４０４においてノートオンの指示を検出したイベントデータによって押鍵操作が指示されている鍵盤番号ｋの鍵の押鍵操作を指番号ｆの指に仮に割り当てた場合に、他の指で変数maxnote 及び変数minnote の鍵の押鍵が可能であるか否かを判定するものである。
【０１１３】
Ｓ５２６では変数ｆ０に０が初期値として代入され、変数bmax及びbminには値「ＦＡＬＳＥ」が初期値として代入される。ここで、変数ｆ０は指番号が示され、変数bmax及びbminは、変数maxnote 及び変数minnote の鍵盤番号で示される鍵についての所定の押鍵操作のための指の割り当てが可能であるか否かが示される。
【０１１４】
Ｓ５２７では変数ｆ０の値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５２８に進み、Ｎｏならば片手の５本の指の全てについてＳ５２８からＳ５３４についての処理による判定が終了したものとみなし、Ｓ５３６に進む。
【０１１５】
Ｓ５２８では、変数ｆと変数ｆ０との値が一致しているか否かが判定され、判定結果がＹｅｓならばＳ５３５に進み、ＮｏならばＳ５２９に進む。
Ｓ５２９では、前述した変数fofftime[f0]に「ＮＯＤＡＴＡ」が設定されているか否か、すなわち、指番号ｆ０の指が現在離鍵状態にあるか否かが判定され、判定結果がＹｅｓならばＳ５３１に進み、ＮｏならばＳ５３０に進む。
【０１１６】
Ｓ５３０では、前述した変数fofftime[f0]の値が変数tkmax の値よりも小さいか否か、すなわち、押鍵中である指番号ｆ０の指の押鍵終了時間が、変数maxnote で示される鍵の押鍵開始時間よりも前であるか否かが判定され、判定結果がＹｅｓならばＳ５３１に進み、判定結果がＮｏならばＳ５３２に進む。ここで、この判定結果がＮｏとなることにより、変数maxnote で示される鍵の押鍵操作には指番号ｆ０の指を割り当てることが不可能であると判定されたこととなる。
【０１１７】
Ｓ５３１では、指ｆ０が、指ｆで鍵ｋを押鍵しながら鍵maxnote を押鍵可能な位置にあるか否かを判定する処理が実行される。この処理の詳細は後述する。
Ｓ５３２では、前述した変数fofftime[f0]に「ＮＯＤＡＴＡ」が設定されているか否か、すなわち、指番号ｆ０の指が現在離鍵状態にあるか否かが判定され、判定結果がＹｅｓならばＳ５３４に進み、ＮｏならばＳ５３３に進む。
【０１１８】
Ｓ５３３では、前述した変数fofftime[f0]の値が変数tkmin の値よりも小さいか否か、すなわち、押鍵中である指番号ｆ０の指の押鍵終了時間が、変数minnote で示される鍵の押鍵開始時間よりも前であるか否かが判定され、判定結果がＹｅｓならばＳ５３４に進み、判定結果がＮｏならばＳ５３５に進む。ここで、この判定結果がＮｏとなることにより、変数minnote で示される鍵の押鍵操作に指番号ｆ０の指を割り当てることが不可能であると判定されたこととなる。
【０１１９】
Ｓ５３４では、指ｆ０が、指ｆで鍵ｋを押鍵しながら鍵minnote を押鍵可能な位置にあるか否かを判定する処理が実行される。この処理の詳細も後述する。
Ｓ５３５では、変数ｆ０の値を１だけ増加させ、その後はＳ５２７へ戻って上述した処理を繰り返す。
【０１２０】
Ｓ５３６では、変数bmax及びbminのいずれかが「ＦＡＬＳＥ」に設定されているか否かが判定され、判定結果がＹｅｓならばＳ５３７に進み、ＮｏならばＳ５３８に進む。
Ｓ５３７では、変数benable[f]に「ＦＡＬＳＥ」を設定し、今回のノートイベントに対応する押鍵操作の指番号ｆへの割り当てが不可能であることを示す。
【０１２１】
Ｓ５３８では、変数ｆの値を１だけ増加させ、その後はＳ５２４へ戻って上述した処理を繰り返す。
以上までの処理が第二指割当判断処理である。
次に、図１３に示す、上述した第二指割当判断処理のフローチャートにおけるＳ５３１の処理ステップで実行される、指ｆで鍵ｋを押鍵しながら鍵maxnote を押鍵可能な位置にあるか否かを判定する処理について、その処理内容を示す図１４を参照しながら説明する。
【０１２２】
Ｓ６０１では、まず、指ｆで鍵ｋを押鍵し、且つ、他の指のうち、変数tkmax でも押鍵中である指によるその押鍵操作を維持した状態で、これらの押鍵中の指の鍵盤上の位置と各指の関節の可動範囲とを考慮したときの、配置可能な手の位置の範囲（鍵盤の横方向についての位置の範囲）が算出される。そして、配置可能な最も左寄りの手の位置を示す値（最小位置）が変数hleft に代入され、配置可能な最も右寄りの手の位置を示す値（最大位置）が変数hrightに代入される。なお、これらの位置を算出する代わりに、これらの押鍵中の指及びその指が押鍵している鍵とこれらの位置との関係を示すテーブルをＲＯＭ１６に予め用意しておき、このテーブルを参照することによってこれらの数値が得られるようにしてもよい。
【０１２３】
Ｓ６０２では、本装置の使用者から操作部１２を介して指示される運指データの生成指示が右手についてのものか、左手についてのものかが判定され、判定結果がＹｅｓ（右手の運指データの生成指示）であればＳ６０３に進み、Ｎｏ（左手の運指データの生成指示）であればＳ６０５に進む。
【０１２４】
Ｓ６０３では、変数ｆ０の値が変数ｆの値よりも大きいか否か、すなわち、手の甲から見て指ｆ０が指ｆよりも右の指であるか否かが判され、判定結果がＹｅｓならばＳ６０７に進み、ＮｏならばＳ６０４に進む。
Ｓ６０４では、変数ｆ０に０が設定されており、且つ、変数ｆに１、２、３のいずれかが設定されているか否かが判定され、判定結果がＹｅｓならばＳ６０７に進み、Ｎｏならば今回の図１４に示されている処理を終了して図１３に示す処理へ戻る。ここで、この判定処理の結果がＹｅｓとなるのは、指ｆ０が親指を示し、且つ、指ｆが示指、中指、薬指のいずれかを示す場合である。これは、右手の親指については、押鍵中の指ｆを潜る（これを、「指潜り」と呼んでいる）ことによって手の甲から見て指ｆの右側の位置の鍵を押鍵することが可能であることを考慮したものである。
【０１２５】
Ｓ６０５では、変数ｆ０の値が変数ｆの値よりも大きいか否か、すなわち、手の甲から見て指ｆ０が指ｆよりも左の指であるか否かが判され、判定結果がＹｅｓならばＳ６０６に進み、ＮｏならばＳ６０７に進む。
Ｓ６０６では、変数ｆ０に１、２、３のいずれかが設定されており、且つ、変数ｆに０が設定されているか否かが判定され、判定結果がＹｅｓならばＳ６０７に進み、Ｎｏならば今回の図１４に示されている処理を終了して図１３に示す処理へ戻る。ここで、この判定処理の結果がＹｅｓとなるのは、指ｆ０が示指、中指、薬指のいずれかを示し、且つ、指ｆが親指を示す場合である。これは、左手の指ｆ０は、押鍵中の親指を跨ぐ（親指の上を越すこと、これを「指跨ぎ」と呼んでいる）ことによって手の甲から見て親指の右側の位置の鍵を押鍵することが可能であることを考慮したものである。
【０１２６】
Ｓ６０７では、変数hrightの値と前述した定数frangeR[f0] の値とが加算される。そして、前述した定数keypos[maxnote] の値がその加算結果よりも小さいか否か、すなわち、鍵maxnote に指ｆ０が届くか否かが判定され、この判定結果がＹｅｓの場合にのみ、Ｓ６０８において変数bmaxに「ＴＲＵＥ」が設定され、鍵maxnote の押鍵が可能であることが示される。
【０１２７】
この処理の後には今回の図１４に示されている処理を終了して図１３に示す処理へ戻る。
次に、図１３に示す第二指割当判断処理のフローチャートにおけるＳ５３４の処理ステップで実行される、指ｆで鍵ｋを押鍵しながら鍵minnote を押鍵可能な位置にあるか否かを判定する処理について、その処理内容を示す図１５を参照しながら説明する。
【０１２８】
Ｓ６５１では、まず、指ｆで鍵ｋを押鍵し、且つ、他の指のうち、変数tkmin でも押鍵中である指によるその押鍵操作を維持した状態で、これらの押鍵中の指の鍵盤上の位置と各指の関節の可動範囲とを考慮したときの、配置可能な手の位置の範囲（鍵盤の横方向についての位置の範囲）が算出される。そして、配置可能な最も左寄りの手の位置を示す値（最小位置）が変数hleft に代入され、配置可能な最も右寄りの手の位置を示す値（最大位置）が変数hrightに代入される。なお、これらの位置を算出する代わりに、これらの押鍵中の指及びその指が押鍵している鍵とこれらの位置との関係を示すテーブルをＲＯＭ１６に予め用意しておき、このテーブルを参照することによってこれらの数値が得られるようにしてもよい。
【０１２９】
Ｓ６５２では、本装置の使用者から操作部１２を介して指示される運指データの生成指示が右手についてのものか、左手についてのものかが判定され、判定結果がＹｅｓ（右手の運指データの生成指示）であればＳ６５３に進み、Ｎｏ（左手の運指データの生成指示）であればＳ６５５に進む。
【０１３０】
Ｓ６５３では、変数ｆ０の値が変数ｆの値よりも大きいか否か、すなわち、手の甲から見て指ｆ０が指ｆよりも右の指であるか否かが判され、判定結果がＹｅｓならばＳ６５４に進み、ＮｏならばＳ６５７に進む。
Ｓ６５４では、変数ｆに０が設定されており、且つ、変数ｆ０に１、２、３のいずれかが設定されているか否かが判定され、判定結果がＹｅｓならばＳ６５７に進み、Ｎｏならば今回の図１５に示されている処理を終了して図１３に示す処理へ戻る。ここで、この判定処理の結果がＹｅｓとなるのは、指ｆが親指を示し、且つ、指ｆ０が示指、中指、薬指のいずれかを示す場合である。これは、右手の指ｆ０は、押鍵中の親指を跨ぐことによって手の甲から見て親指の左側の位置の鍵を押鍵することが可能であることを考慮したものである。
【０１３１】
Ｓ６５５では、変数ｆ０の値が変数ｆの値よりも大きいか否か、すなわち、手の甲から見て指ｆ０が指ｆよりも左の指であるか否かが判され、判定結果がＹｅｓならばＳ６５７に進み、ＮｏならばＳ６５６に進む。
Ｓ６５６では、変数ｆに１、２、３のいずれかが設定されており、且つ、変数ｆ０に０が設定されているか否かが判定され、判定結果がＹｅｓならばＳ６５７に進み、Ｎｏならば今回の図１５に示されている処理を終了して図１３に示す処理へ戻る。ここで、この判定処理の結果がＹｅｓとなるのは、指ｆが示指、中指、薬指のいずれかを示し、且つ、指ｆ０が親指を示す場合である。これは、左手の親指については、押鍵中の指ｆを潜ることによって手の甲から見て指ｆの左側の位置の鍵を押鍵することが可能であることを考慮したものである。
【０１３２】
Ｓ６５７では、変数hleft の値と前述した定数frangeL[f0] の値とが加算される。そして、前述した定数keypos[minnote] の値がその加算結果よりも大きいか否か、すなわち、鍵minnote に指ｆ０が届くか否かが判定され、この判定結果がＹｅｓの場合にのみ、Ｓ６５８において変数bminに「ＴＲＵＥ」が設定され、鍵minnote の押鍵が可能であることが示される。
【０１３３】
この処理の後には今回の図１５に示されている処理を終了して図１３に示す処理へ戻る。
次に、図１１のＳ４０８において実行される第三指割当判断処理について説明する。第三指割当判断処理では、まず、今回のノートオンのイベントデータに対応する押鍵操作を、押鍵可能であるいずれかの指に割り当てた場合を想定する。そして、その押鍵操作の継続中における他の鍵の押鍵操作のためには、割り当てた指の左右に何本の指が必要であるかを調べ、この必要となる指の本数（割当必要本数）に応じて押鍵操作が可能であるか否かの判定を行なう。
【０１３４】
図１６は第三指割当判断処理の処理内容を示すフローチャートである。
まず、Ｓ５４１では、変数ｆに「０」を代入する。更に、図１１のＳ４０４においてノートオンの指示を検出したイベントデータによって押鍵操作が指示されている鍵盤番号ｋの鍵について、その離鍵操作が指示されているノートオフのイベントデータが曲データから探索され、この鍵ｋについての押鍵開始から押鍵終了（離鍵）までの期間（発音期間）における他の鍵の押鍵の状況が調査される。そして、鍵ｋを軸として鍵盤を左右に分割して考えたとき、右側の鍵盤においてこの発音期間内の同一時刻で同時に押鍵状態となる鍵の個数の最大値が変数rightuseに代入され、左側の鍵盤においてこの発音期間内の同一時刻で同時に押鍵状態となる鍵の個数の最大値が変数leftuse に代入される。これらの個数が上述した割当必要本数である。
【０１３５】
Ｓ５４２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５４３に進み、Ｎｏならばこのまま今回の第三指割当判断処理を終了して図１１の処理へ戻る。
Ｓ５４３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した第一及び第二の指割当判断処理の両者において指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ５４４に進み、Ｎｏならば指番号ｆの指についてのＳ５４４からＳ５４９の処理による指割当判断を省略してＳ５５０に進む。
【０１３６】
Ｓ５４４では、本装置の使用者から操作部１２を介して指示される運指データの生成指示が右手についてのものか、左手についてのものかが判定され、判定結果がＹｅｓ（右手の運指データの生成指示）であればＳ５４５に進み、Ｎｏ（左手の運指データの生成指示）であればＳ５４７に進む。
【０１３７】
Ｓ５４５では、変数ｆの値が変数leftuse よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ５４９に進み、ＮｏならばＳ５４６に進む。ここで、変数ｆは指番号を示すものであるが、右手については、変数ｆの値は、右手の甲の側から見たときの指番号ｆの指の左側に有する指の本数を示していると見ることもできる。従って、このＳ５４５の判断処理は、右手の甲の側から見たときの指ｆの左側に有する指の本数ｆが変数leftuse の値に足りず、上述した同時の押鍵状態を得ることが不可能であるか否かを判定しているのである。
【０１３８】
Ｓ５４６では、４から変数ｆの値を減じた減算結果が変数rightuseよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ５４９に進み、ＮｏならばＳ５５０に進む。この処理は、右手の甲の側から見たときの指ｆの右側に有する指の本数（４−ｆ）が変数rightuseの値に足りず、上述した同時の押鍵状態を得ることが不可能であるか否かを判定している。
【０１３９】
Ｓ５４７では、４から変数ｆの値を減じた減算結果が変数leftuse よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ５４９に進み、ＮｏならばＳ５４８に進む。この処理は、左手の甲の側から見たときの指ｆの左側に有する指の本数（４−ｆ）が変数leftuse の値に足りず、上述した同時の押鍵状態を得ることが不可能であるか否かを判定している。
【０１４０】
Ｓ５４８では、変数ｆの値が変数rightuseよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ５４９に進み、ＮｏならばＳ５５０に進む。この処理は、左手の甲の側から見たときの指ｆの右側に有する指の本数ｆが変数rightuseの値に足りず、上述した同時の押鍵状態を得ることが不可能であるか否かを判定している。
【０１４１】
Ｓ５４９では、変数benable[f]に「ＦＡＬＳＥ」を設定し、今回のノートイベントに対応する押鍵操作の指番号ｆへの割り当てが不可能であることを示す。
Ｓ５５０では、変数ｆの値を１だけ増加させ、その後はＳ５４２へ戻って上述した処理を繰り返す。
【０１４２】
以上までの処理が第三指割当判断処理である。
次に、図１１のＳ４０９において実行される第四指割当判断処理について説明する。第四指割当判断処理では、まず、今回のノートオンのイベントデータに対応する押鍵操作を押鍵可能ないずれかの指に割り当てた場合を想定する。そして、その押鍵操作の際に既に押鍵操作状態にある他の指を探索する。ここで、これらの両指が共に押鍵操作状態にある期間内において、鍵盤上でこれらの両指が押鍵している両鍵の間に位置する鍵を押鍵操作するには両指間に何本の指が必要であるかを調べ、この必要となる指の本数（割当必要本数）に応じて押鍵操作が可能であるか否かの判定を行なう。
【０１４３】
図１７は第四指割当判断処理の処理内容を示すフローチャートである。
まず、Ｓ５６１では、変数ｆに「０」が代入される。
Ｓ５６２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５６３に進み、Ｎｏならばこのまま今回の第四指割当判断処理を終了して図１１の処理へ戻る。
【０１４４】
Ｓ５６３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した第一、第二、第三の指割当判断処理の全てにおいて指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ５６４に進み、Ｎｏならば指番号ｆの指についてのＳ５６４からＳ５７１の処理による指割当判断を省略してＳ５７２に進む。
【０１４５】
Ｓ５６４では、変数ｆ０に「０」を代入する。
Ｓ５６５では変数ｆ０の値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５６６に進み、Ｎｏならば片手の５本の指の全てについてＳ５６６からＳ５７０についての処理による判定が終了したものとみなし、Ｓ５７２に進む。
【０１４６】
Ｓ５６６では、変数ｆと変数ｆ０との値が一致しているか否かが判定され、判定結果がＹｅｓならばＳ５７１に進み、ＮｏならばＳ５６７に進む。
Ｓ５６７では変数fnote[f0] に「ＮＯＤＡＴＡ」が設定されているか否かが判定され、判定結果がＹｅｓならばＳ５７１に進み、ＮｏならばＳ５６８に進む。
【０１４７】
Ｓ５６８では、今回のノートオンのイベントデータに応じて指ｆで鍵ｋを押鍵し、且つ、指ｆ０で既に鍵fnote[f0] を押鍵している場合を想定する。ここで、曲データが調べられ、鍵盤上で鍵ｋと鍵fnote[f0] との間に位置する鍵であって、指ｆ及び指ｆ０が共に押鍵操作状態にある期間内の同一時刻で同時に押鍵状態となる鍵の個数の最大値が変数use に代入される。この個数が上述した割当必要本数である。
【０１４８】
Ｓ５６９では、変数ｆと変数ｆ０との値の差の絶対値が計算される。この計算結果は指ｆと指ｆ０との間に有する指の本数＋１を示している。そして、この指の本数＋１が変数use の値以下か否かが判定され、この判定結果がＹｅｓの場合にのみ、Ｓ５７０において変数benable[f]に「ＦＡＬＳＥ」を設定し、今回のノートイベントに対応する押鍵操作の指番号ｆへの割り当てが不可能であることを示す。
【０１４９】
Ｓ５７１では、変数ｆの値を１だけ増加させ、その後はＳ５６５へ戻って上述した処理を繰り返す。
以上までの処理が第四指割当判断処理である。
次に、図１１のＳ４１０において実行される第五指割当判断処理について説明する。図１８は第五指割当判断処理の処理内容を示すフローチャートである。
【０１５０】
第五指割当判断処理では、まず、今回のノートオンのイベントデータに対応する押鍵操作を押鍵可能ないずれかの指に割り当てた場合を想定し、この場合に、今回のノートオンのイベントデータの後に続く後のノートオンのイベントデータに対応する押鍵操作のためにいずれかの指を割り当てることができるか否かを、前述した第一から第四までの各割当判断処理を適用して判断する。そして、この判断結果に応じて今回の想定の妥当性を判断するというものである。ここで、この想定の妥当性の判断を、今回のノートオンのイベントデータからいくつ先のノートオンのイベントデータまでを対象にして行なうものとするかは任意であり、本装置の処理速度に対する要請などに応じて設定する。なお、図１８に示す本実施の形態においては、今回のノートオンのイベントデータから３つ先のノートオンのイベントデータまでを判断の対象としている。
【０１５１】
まず、図１８のＳ５８１において、変数ｆに「０」が代入される。
Ｓ５８２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ５８３に進み、Ｎｏならばこのまま今回の第五指割当判断処理を終了して図１１の処理へ戻る。
【０１５２】
Ｓ５８３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した第一、第二、第三、第四の指割当判断処理の全てにおいて指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ５８４に進み、Ｎｏならば指番号ｆの指についてのＳ５８４からＳ５８８の処理による指割当判断を省略してＳ５８９に進む。
【０１５３】
Ｓ５８４では、図１１のＳ４０４においてノートオンの指示を検出したイベントデータに続く直後のノートオンのイベントデータが格納されているＲＡＭ１７における格納位置を指すポインタが変数pe0 に代入され、更に、それ以降に続くノートオンのイベントデータの格納位置を指すポインタが、順に変数pe1 、pe2 にそれぞれ代入される。
【０１５４】
Ｓ５８５では、ポインタpe0 の指すノートオンのイベントデータに対し、図１２から図１７にかけて示した第一、第二、第三、第四の各指割当判断処理を実行し、その実行結果として、ポインタpe0 の指すノートオンのイベントデータに対応する押鍵操作のために割り当てることのできる指が存在するか否か（４種類の指割当判断処理を全て実行したときに、変数benable[f]が「ＴＲＵＥ」に設定されている指ｆが存在するか否か）が判定され、判定結果がＹｅｓならばＳ５８６に進み、ＮｏならばＳ５８８に進む。
【０１５５】
Ｓ５８６では、ポインタpe0 の指すノートオンのイベントデータに対応する押鍵操作をＳ５８５の判定処理によって仮に割り当てた場合において、ポインタpe1 の指すノートオンのイベントデータに対してＳ５８５と同様の判定処理が実行され、判定結果がＹｅｓならばＳ５８７に進み、ＮｏならばＳ５８８に進む。
【０１５６】
Ｓ５８７では、ポインタpe0 及びpe1 の指すノートオンのイベントデータに対応する押鍵操作をＳ５８５及びＳ５８６の判定処理によって仮に割り当てた場合において、ポインタpe2 の指すノートオンのイベントデータに対してＳ５８５と同様の判定処理が実行され、判定結果がＹｅｓならばＳ５８９に進み、ＮｏならばＳ５８８に進む。
【０１５７】
Ｓ５８８では、変数benable[f]に「ＦＡＬＳＥ」を設定し、今回のノートイベントに対応する押鍵操作の指番号ｆへの割り当てが不可能であることを示す。
Ｓ５８９では、変数ｆの値を１だけ増加させ、その後はＳ５８２へ戻って上述した処理を繰り返す。
【０１５８】
以上までの処理が第五指割当判断処理である。
以上までに説明した第一から第五までの指割当判断処理が全て実行された後において変数benable[f]が  「ＴＲＵＥ」に設定されている指ｆが、図１１のＳ４０４においてノートオンの指示を検出したイベントデータに対応する押鍵操作のために割当可能な指であると判断される。
【０１５９】
次に、図１１のＳ４１１において実行される第一優先値割当処理について説明する。第一優先値付加処理は、図１１のＳ４０４においてノートオンの指示を検出したイベントデータに対応する押鍵操作のために割当可能な指について、その指の現在の存在範囲がそのイベントデータで指示されている押鍵すべき鍵の位置に近い順に高い優先度が与えられるようにする、言い換えれば、その指の現在の存在範囲からそのイベントデータで指示されている押鍵すべき鍵の位置までの距離が長く、押鍵操作のための指の移動距離の長い順に低い優先度が与えられるようにする処理である。
【０１６０】
図１９は第一優先値付加処理の処理内容を示すフローチャートである。
まず、Ｓ７０１において、変数ｆに「０」が代入される。
Ｓ７０２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ７０３に進み、Ｎｏならばこのまま今回の第一優先値付加処理を終了して図１１の処理へ戻る。
【０１６１】
Ｓ７０３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した各指割当判断処理の全てを実行した結果、指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ７０４に進み、Ｎｏならば指番号ｆの指についてのＳ７０４及びＳ７０５の処理による優先値付加は不要であるので、このままＳ７０６に進む。
【０１６２】
Ｓ７０４では、変数benable[] に「ＴＲＵＥ」が設定されている指について、現在のその指の存在範囲  （hposR ＋fpos[]の加算結果の値とhposL ＋fpos[]の加算結果の値との間の範囲）と前述した鍵ｋの位置  （定数keypos[k] の値）との間の距離の近い順の順番を求め、指ｆについてのその順番を変数posorderに代入する。ここで、鍵ｋの位置が指ｆの存在範囲内にある場合には、変数posorderに「１」を代入する。
【０１６３】
Ｓ７０５では、４から変数posorderを減じた値に定数weight[1] の値を乗じた乗算結果を変数priority[f] に代入する。ここで、定数weight[1] は、本実施例において行なわれる第一から第四までの４種類の優先値付加処理における、この第一優先値付加処理の重要性に応じて予め設定される重み付けの値である。
【０１６４】
Ｓ７０６では、変数ｆの値を１だけ増加させ、その後はＳ７０２へ戻って上述した処理が繰り返される。
以上までの処理が第一優先値付加処理である。
次に、図１１のＳ４１２において実行される第二優先値割当処理について説明する。第二優先値付加処理は、図１１のＳ４０４においてノートオンの指示を検出したイベントデータに対応する押鍵操作のために割当可能な指について、本装置の使用者の嗜好などにより、各指の使用優先度が使用者によって設定されている場合の処理である。
【０１６５】
図２０は第二優先値付加処理の処理内容を示すフローチャートである。
まず、Ｓ７２１において、変数ｆに「０」が代入される。
Ｓ７２２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ７２３に進み、Ｎｏならばこのまま今回の第二優先値付加処理を終了して図１１の処理へ戻る。
【０１６６】
Ｓ７２３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した各指割当判断処理の全てを実行した結果、指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ７２４に進み、Ｎｏならば指番号ｆの指についてのＳ７２４の処理による優先値付加は不要であるので、このままＳ７２５に進む。
【０１６７】
Ｓ７２４では、変数priority[f] の値に、定数userpri[f]と定数weight[２] との乗算結果を加算し、この加算結果を改めて変数priority[f] に代入する。ここで、定数userpri[f]は、本装置の使用者の嗜好による指ｆの使用優先度が予め設定されている。ここで、本装置の使用者による定数userpri[f]への設定が行なわれない場合には、初期値として、例えば鍵盤楽器の演奏操作において使用される頻度の高さに応じ、示指＞中指＞薬指＞親指＞小指の順に押鍵する指の割り当てを優先させるように変数userpri[] の値が予め設定されるようにしてもよい。また、定数weight[2] は、本実施例において行なわれる第一から第四までの４種類の優先値付加処理における、この第二優先値付加処理の重要性に応じて予め設定される重み付けの値である。
【０１６８】
Ｓ７２５では、変数ｆの値を１だけ増加させ、その後はＳ７２２へ戻って上述した処理が繰り返される。
以上までの処理が第二優先値付加処理である。
次に、図１１のＳ４１３において実行される第三優先値割当処理について説明する。第三優先値付加処理は、図１１のＳ４０４においてノートオンの指示を検出したイベントデータに対応する押鍵操作のために割当可能な指について、その指が押鍵操作を行なったときに必要となる手の移動距離の短い順に、高い優先度を与えるようにする処理である。
【０１６９】
図２１は第三優先値付加処理の処理内容を示すフローチャートである。
まず、Ｓ７４１において、変数ｆに「０」が代入される。
Ｓ７４２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ７４３に進み、Ｎｏならばこのまま今回の第三優先値付加処理を終了して図１１の処理へ戻る。
【０１７０】
Ｓ７４３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した各指割当判断処理の全てを実行した結果、指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ７４４に進み、Ｎｏならば指番号ｆの指についてのＳ７４４からＳ７４６にかけての処理による優先値付加は不要であるので、このままＳ７４７に進む。
【０１７１】
Ｓ７４４では、指ｆが鍵ｋを押鍵操作するために必要最小限の手の移動距離を算出する。この値は、前述した変数hposL 及びhposR の値、指ｆ以外の各指が現在押鍵を行なっている鍵の位置、手における各指の配置位置の違い、各指の長さ、各指の関節の可動角度により算出される。
【０１７２】
Ｓ７４５では、変数benable[] に「ＴＲＵＥ」が設定されている指について、それらの指が鍵ｋを押鍵操作するために必要最小限の手の移動距離の短い順の順番を求め、指ｆについてのその順番を変数order に代入する。
Ｓ７４６では、４から変数order を減じた値に定数weight[3] の値を乗じた値と、変数priority[f] の値との加算結果を改めて変数priority[f] に代入する。ここで、定数weight[3] は、本実施例において行なわれる第一から第四までの４種類の優先値付加処理における、この第三優先値付加処理の重要性に応じて予め設定される重み付けの値である。
【０１７３】
Ｓ７４７では、変数ｆの値を１だけ増加させ、その後はＳ７４２へ戻って上述した処理が繰り返される。
以上までの処理が第三優先値付加処理である。
次に、図１１のＳ４１４において実行される第四優先値割当処理について説明する。第四優先値付加処理は、図１１のＳ４０４においてノートオンの指示を検出したイベントデータに対応する押鍵操作のために割当可能な指が、そのイベントデータの直前のノートオンのイベンドデータに対応する押鍵操作のために他の鍵を押鍵しており、異なる鍵を連続して押鍵することとなる場合には、その指についての割当優先度を低下させる処理である。
【０１７４】
図２２は第四優先値付加処理の処理内容を示すフローチャートである。
まず、Ｓ７６１において、変数ｆに「０」が代入される。
Ｓ７６２では変数ｆの値が５よりも小さいか否かが判別され、判定結果がＹｅｓならばＳ７６３に進み、Ｎｏならばこのまま今回の第四優先値付加処理を終了して図１１の処理へ戻る。
【０１７５】
Ｓ７６３では変数benable[f]に「ＴＲＵＥ」が設定されているか否か、すなわち、前述した各指割当判断処理の全てを実行した結果、指番号ｆの指を押鍵操作に割り当てることが可能であると判定されているか否かが判定され、判定結果がＹｅｓならばＳ７６４に進み、Ｎｏならば指番号ｆの指についてのＳ７６４及びＳ７６５の処理による優先値付加は不要であるので、このままＳ７６６に進む。
【０１７６】
Ｓ７６４では、図１１のＳ４０４においてノートオンの指示を検出したイベントデータの直前のノートオンのイベントデータに対応する押鍵操作が割り当てられたのはどの指であるかを調べ、その押鍵操作に割り当てられた指が指ｆであり、且つ、この押鍵操作の対象が鍵ｋとは異なる鍵であるか否かを判定し、判定結果がＹｅｓならばＳ７６５に進み、ＮｏならばＳ７６６に進む。
【０１７７】
Ｓ７６５では、変数priority[f] の値から定数weight[4] の値を減じた減算結果を改めて変数priority[f] に代入する。ここで、定数weight[4] は、本実施例において行なわれる第一から第四までの４種類の優先値付加処理における、この第四優先値付加処理の重要性に応じて予め設定される重み付けの値であり、このステップの処理では、指ｆについての割当優先度を低下させる処理が実行される。
【０１７８】
Ｓ７６６では、変数ｆの値を１だけ増加させ、その後はＳ７６２へ戻って上述した処理が繰り返される。
以上までの処理が第四優先値付加処理である。
以上までに説明した第一から第四までの優先値付加処理が実行されることによって、押鍵操作に割当可能な指のうち、より適切な指が選択されて割り当てられるようになる。
【０１７９】
次に、運指情報生成処理の別の実施例について説明する。なお、これより説明する実施例を「第二実施例」と称し、今までに説明した実施例を「第一実施例」と称することとする。
第一実施例は、先行する複数の音符について全ての指使いのパターンの評価結果に基づいて運指を生成するため、ＣＰＵ１５の処理負担が大きい。これに対して第二実施例はＣＰＵ１５の処理負担の軽減を目指すものである。
【０１８０】
第二実施例で行なわれる運指情報生成の概要を図２３に示す。
図２３について説明すると、ＳＭＦ（スタンダードＭＩＤＩファイル）５１で提供される曲データに対し前述した第一実施例と同様の曲データ修正処理５２を施した後、その曲データで示される音の発音に使用可能な指の導出処理５３が行なわれ、更に、これらの指でその音を発音させるために要する手や指の移動量を、演奏者の手のサイズのデータ及び鍵盤のサイズのデータ５４に基づいて各指ごとに導き出し、その各指の移動量の大小を動作負担の大きさを示す値である動作コスト５５として算定し、この動作コスト５５に基づいてコストの算出処理５６が行なわれる。この結果、動作コストの合計が最小となる指をその音の発音を行なわせる指として割り当てるようにする。但し、このとき、曲データで示される発音する音の列が、フレーズデータベース５７に蓄積されている、標準的な（言わば定石の）運指が広く知られている所定の音高差の楽音列（フレーズ）に合致する場合には、出力結果にその標準的な運指が含まれる可能性を高くするために、その標準的な運指については各指の動作コストを低下させるようにする。第二実施例ではこのようにして運指情報の生成を行なう。
【０１８１】
第二実施例を行なわせる運指情報生成装置の構成は図３に示した本装置の構成と同様のものでよい。また、第二実施例において本装置の内部処理で用いられる曲データのデータ構造も図５に示したものと同様のものを用いることとする。
図２４は、第二実施例において、本装置に電源を投入した直後よりＲＯＭ１６に記憶されている制御プログラムを読み出して実行することによりＣＰＵ１５が行なう本装置全体の制御処理の処理内容を示すフローチャートである。なお、第二実施例では、右手若しくは左手の片手による運指の生成を行なうものとする。
【０１８２】
図２４を図４と比較すると分かるように、図２４におけるＳ１００１からＳ１００８にかけて行なわれる各処理は、図４に示したＳ１０１からＳ１０８にかけて行なわれる各処理と同様のものであり、図２４のＳ１００８に続く、Ｓ１００９のフレーズチェック処理及びＳ１０１０の第二運指情報生成処理が図４に示されているものと異なる処理である。
【０１８３】
Ｓ１００９のフレーズチェック処理の詳細を図２５に示す。この処理は、図２４のＳ１００８の曲データ修正処理によって修正された曲データで示される楽曲中のスケールが、フレーズデータベースに定義されているいずれかのフレーズに合致するか否かを判定し、合致するときには予め設定されているそのフレーズについての標準的な運指を提供する処理であり、後述する割当指評価処理においてこの標準的な運指である指の評価を高めることで、割り当ての可能性を高める処理が実行される。
【０１８４】
フレーズデータベースに蓄積されているデータの例を図２６及び図２７に示す。フレーズデータベースを構成するこれらのデータは図３のＲＯＭ１６に予め格納されている。
図２６（ａ）には、標準運指データが示されている。このデータは、各コードスケールの演奏のために標準的に用いられる運指データが示されている。同図についてその一部を具体的に説明すると、例えばスケール名が『Ｃｍａｊ』でそのスケール内の７つのノートの音階が階段状に上昇（『ＵＰ』）していくときの運指は、同図には『０、３、２、１、０、２、１』と示されており、左手で『０（親指）、３（薬指）、２  （中指）、１（示指）、０（親指）、２（中指）、１（示指）』という順序の運指とすることが示されている。
【０１８５】
図２７（ａ）には、黒鍵・白鍵データが示されている。このデータは、フレーズチェックの対象とする連続した第０音から第６音までの７つのノート中における黒鍵指示のノートの位置を示すものであり、フレーズのコード判定のために用いられる。同図によれば、例えば、フレーズ中に黒鍵指示のノートが存在しなければ（すなわち全て白鍵の指示であるならば）そのフレーズは『Ｃｍａｊ』であるとされ、また、第３音のみに黒鍵指示のノートが存在していればそのフレーズは『Ｆｍａｊ』であるとされる。
【０１８６】
なお、図２７（ａ）に示す表は、フレーズ内のノートが上昇（『ＵＰ』）のときの順序で示されており、フレーズ内のノートが下降（『ＤＯＷＮ』）のときの順序は、各スケール毎に、同図に示されているものとちょうど逆の順序となる。例えば、同図に示されている『Ｂｂｍａｊ』には、『１，０，０，１，０，０，０』と示されているので、上昇のフレーズのときは第０音と第３音のみが黒鍵であることがフレーズの判定条件となり、下降のフレーズのときは第３音と第６音のみが黒鍵であることがフレーズの判定条件となる。
【０１８７】
図２７（ｂ）は音階差（半音単位の音高差）データが示されている。このデータは、フレーズチェックの対象とする連続した第０音から第６音までの７つのノートのうちの隣接したノート間の音階差を、半音を基準（１）として示したものであり、同図によれば、スケール（長音階）内の７つのノートの音階が階段状に上昇（『ＵＰ』）していくときには、各ノート間の音階差が『２（全音）、２（全音）、１（半音）、２（全音）、２（全音）、２（全音）』になることが示されている。
【０１８８】
以下、図２５に示すフローチャートを説明する。
まず、Ｓ１１０１では、このフレーズチェック処理において使用される各種の変数の初期値を代入する処理が実行される。
具体的に説明すると、前述したものと同様の用途であるポインタpeには、ＲＡＭ１７に格納されている曲データであって、使用者によりその曲データから選択されたトラックデータの先頭のイベントデータが格納されているＲＡＭ１７における格納位置を指すポインタが代入される。
【０１８９】
変数noteold には「ＮＯＤＡＴＡ」が代入される。変数noteold には、今回のイベントデータの直前でノートオンが指示されていたイベントのデータにおいて押鍵の指示がなされていた鍵の鍵盤番号（ノート番号）が代入される。
変数prevpe[0] 〜prevpe[6] にも「ＮＯＤＡＴＡ」が代入される。変数prevpe[m] （ｍ＝０，１，２，３，４，５，６）には、ノートオンであったイベントデータの格納場所を示すポインタpeの値の過去７つ分の履歴が順々に格納される。
【０１９０】
変数wbにも「ＮＯＤＡＴＡ」、すなわち「０００００００」が代入される。変数wbは７ビットのデータであり、今回のノートオンのイベントデータ及び過去６つ分のノートオンであったイベントデータにおいて各ノートオンが鍵盤の黒鍵・白鍵のいずれであったかが各ビットのオンオフ（１、０）で示される。
【０１９１】
変数diff[0] 〜diff[5] にも「ＮＯＤＡＴＡ」が代入される。変数diff[m] （ｍ＝０，１，２，３，４，５）には、今回のノートオンのイベント及びその前にノートオンであった各イベントにおける隣接したイベント間の音階差が順々に格納される。
【０１９２】
Ｓ１１０２では、ポインタpeの指すイベントデータが、データの終了を示すものであるか否かが判定され、判定結果がＹｅｓならば今回のフレーズチェック処理を終了し、図２４の処理へ戻る。一方、判定結果がＮｏならばＳ１１０３に進む。
【０１９３】
Ｓ１１０３ではポインタpeの指すイベントデータに設定されているイベントが「ノートオン」であるか否かが判定され、判定結果がＹｅｓならばＳ１１０４に進み、ＮｏならばＳ１１１８に進む。
Ｓ１１０４では、ポインタpeの指すイベントデータに設定されているノートオンイベントの対象である鍵の鍵盤番号（ノート番号）が変数noteに代入される。
【０１９４】
Ｓ１１０５では、ポインタpeの値がprevpe[6] に代入されるとともに、変数noteの値から変数noteold の値を減じる計算が行なわれ、その計算結果が変数diff[5] に代入される。この計算により、今回のノートオンのイベントとその直前のノートオンイベントとにおけるノート番号の差、すなわち隣接したノートオンイベント間における音階差を示す値が得られる。
【０１９５】
Ｓ１１０６では、変数noteの値で示される今回のノートオンイベントにおけるノート番号が鍵盤の黒鍵を示しているか否かが判定され、判定結果がＹｅｓの場合にのみ、Ｓ１１０７において、変数wbの第７ビット（第１ビットから第７ビットまでの計７ビットのデータのうちの左端のビット）に「１」がセットされる。
【０１９６】
Ｓ１１０８では、変数diff[0] 〜diff[5] のそれぞれが、定数scale ＿spandown[0] 〜Scale ＿spandown[5]、すなわち、図２７（ｂ）の音階差データのうち、「ＤＯＷＮ」の行に示されている各値と全て一致するか否かが判定される。この判定結果がＹｅｓならば、このフレーズは「下降」のフレーズと判定され、Ｓ１１０９でフラグdowmに「１」がセットされ、その後はＳ１１１２に進む。一方、Ｓ１１０８の判定結果がＮｏならばＳ１１１０に進む。
【０１９７】
Ｓ１１１０では、変数diff[0] 〜diff[5] のそれぞれが、定数scale ＿spanup[0] 〜Scale ＿spanup[5]、すなわち、図２７（ｂ）の音階差データのうち、「ＵＰ」の行に示されている各値と全て一致するか否かが判定される。この判定結果がＹｅｓならば、このフレーズは「上昇」のフレーズと判定され、Ｓ１１１１でフラグdowmに「０」がセットされ、その後はＳ１１１２に進む。一方、Ｓ１１１０の判定結果がＮｏならば、このフレーズは「上昇」、「下降」いずれのフレーズでもないと判定され、Ｓ１１１７に進む。
【０１９８】
Ｓ１１１２では、変数scaleID に「０」が代入される。変数scaleID は、図２７（ａ）の「スケール」の欄に示した１２種のスケールの各々を示すためのものであり、例えば、同図の上から順にscaleID ＝０ならＣｍａｊを、scaleID ＝１ならＦｍａｊを、各々示す。
【０１９９】
Ｓ１１１３では変数scaleID が定数MAX ＿SCALEID よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ１１１４に進み、ＮｏならばＳ１１１７に進む。定数MAX ＿SCALEID は、図２７（ａ）の「スケール」の欄に示したスケールの種類の数であり、ここでは「１２」が設定されている。
【０２００】
Ｓ１１１４では、定数scale ＿wb[scaleID][dowm] の値、すなわち、図２７（ａ）の黒鍵・白鍵データによって示される、変数scaleID で示されるスケールであって且つフラグdownで示されるフレーズ内のノート変化（上昇・下降）であるときの黒鍵・白鍵のノートオン指示の並びと、変数wbで示される、今回のノートオン及び過去６つ分のノートオンのイベントデータにおける黒鍵・白鍵のノートオン指示の並びとが一致するか否かが判定され、判定結果がＹｅｓならばＳ１１１６に進み、ＮｏならばＳ１１１５に進む。
【０２０１】
Ｓ１１１５では変数scaleID の値が１だけ進められ（増やされ）、その後はＳ１１１３へ戻って上述した処理が繰り返される。
Ｓ１１１６では、７個の変数prevpe[0]->fig〜prevpe[6]->figのそれぞれに、定数scale ＿fig[scaleID][down][0] 〜scale ＿fig[scaleID][down][6] の各値、すなわち、図２６（ａ）の標準運指データに示されている、変数scaleID で示されるスケールであって且つフラグdownで示されるフレーズ内のノート変化であるときの音符番号０から６の各ノートについてノートオン指示されている鍵を押鍵する指を示す番号が代入される。この処理により、ポインタpeの指すイベントデータに設定されているノートオンイベントの対象である鍵を押鍵する指を含む７音分の運指割り当てが行なわれる。この指の割り当ての情報は、後述するフレーズデータ比較評価処理（図４９）では変数fig[pe] で参照できるものとする。
【０２０２】
Ｓ１１１７では、変数diff[m] の値が変数diff[m-1] に代入されてノートオンのイベント間の音階差を示すデータの履歴が残され、続いて変数wbの値を右が１ビットシフトされた後にビットマスクされて７ビットのデータとされ、更に変数noteの値が変数noteold に代入され、そして、変数prev[m] の値が変数prev[m-1] に代入されてポインタpeの値の過去の履歴が残される。
【０２０３】
Ｓ１１１８では、選択されているトラックデータにおける次のイベントデータが格納されているＲＡＭ１７上の格納位置を指すようにポインタpeの値が進められ、その後はＳ１１０２へ戻って上述した処理が繰り返される。
以上までの処理がフレーズチェック処理である。
【０２０４】
次に、図２４のＳ１０１０に示されている第二運指情報生成処理について説明する。この処理は、曲データで示される音の発音に使用可能な指を求め、これらの指でその音を発音させるために要する手や指の移動量を、演奏者の手のサイズのデータ及び鍵盤のサイズのデータに基づいて各指ごとに導き出し、その各指の移動量の大小を動作の負担（動作コスト）として算出し、この結果から、動作コストが最小となる指をその音の発音を行なわせる指として割り当てる処理である。
【０２０５】
第二運指情報生成処理の処理内容を示すフローチャートを図２８に示す。
まず、Ｓ２００１ではこの第二運指情報生成処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、例えば、演奏開始後の経過時間を算出するために用いられる変数tktimeには、「０」が代入される。また、ポインタpeには、ＲＡＭ１７に格納されている曲データであって、使用者によりその曲データから選択されたトラックデータの先頭のイベントデータが格納されているＲＡＭ１７における格納位置を指すポインタが代入される。
【０２０６】
Ｓ２００２では、ポインタpeの指すイベントデータがデータの終了を示すものであるか否かが判定され、判定結果がＹｅｓならば今回の第二運指情報生成処理を終了して図２４の処理へ戻る。一方、判定結果がＮｏならばＳ２００３に進む。
【０２０７】
Ｓ２００３では、変数tktimeの値に、ポインタpeの指すイベントデータに設定されているデルタタイムの値（pe->tktime）を加算した結果が改めて変数tktimeに代入される。
Ｓ２００４ではポインタpeの指すイベントデータに設定されているイベントが「ノートオン」であるか否かが判定され、判定結果がＹｅｓならばＳ２００７に進み、ＮｏならばＳ２００５に進む。
【０２０８】
Ｓ２００５ではポインタpeの指すイベントデータに設定されているイベントが「ノートオフ」であるか否かが判定され、判定結果がＹｅｓならばＳ２００６に進み、ＮｏならばＳ２０１６に進む。
Ｓ２００６では、指オフ処理が実行され、対応する鍵についての押鍵状態から離鍵状態への状態設定の変更、及び、全ての鍵が離鍵となったのであれば、変数tktimeのそのときの値が変数tkalloffに代入され、無発音の状態の開始時刻が保持される。この指オフ処理を終えた後にはＳ２０１６に進む。
【０２０９】
Ｓ２００７では、変数tkalloffに「ＮＯＤＡＴＡ」が設定され、更に変数pass＿count の値が１だけ進められる。変数pass＿count については後述する。
Ｓ２００８では音符情報取得処理が実行される。この処理の処理内容を図２９を用いて説明する。
【０２１０】
音符情報取得処理は、評価対象となる音符と、その音符の前後に発音される音符との発音の重なりの状態を示す音符情報を取得する処理である。
図２９は、各音符の発音の継続状態を音高−時間軸上に示したものであり、いわゆるピアノロールの形式で各音符を示したものである。同図に示すように、音符情報NoteTypeは０〜３の４種類が定義されている。
【０２１１】
図２９において、（１）、（２）はNoteType＝０の場合を示しており、評価対象の音符とその前後の音符との発音の重なりが全く存在しない場合（１）、あるいはその重なりが所定の時間以内である場合（２）、をそれぞれ示している。また、（３）はNoteType＝１の場合、すなわち評価対象の音符とその直前の音符との発音の重なりのみが所定時間以上である場合を、（４）はNoteType＝２の場合、すなわち評価対象の音符とその直後の音符との発音の重なりのみが所定時間以上である場合を、（５）はNoteType＝３の場合、すなわち評価対象の音符とその直前及び直後の両方の音符との発音の重なりが所定時間以上である場合を、それぞれ示している。
【０２１２】
Ｓ２００８の音符情報取得処理では、ポインタpeの指すイベントデータに示されているノートと、その前後でノートオンされるノートとによる発音の重なりの状態を調べ、この状態が図２９に示した４種類のNoteTypeのいずれに該当するかを判定する。
【０２１３】
Ｓ２００９ではフレーズ判定処理が実行される。フレーズ判定処理は、音符列からなるフレーズを曲データから抽出し、そのフレーズが和音フレーズ若しくは指潜りフレーズに該当するか否かを判定する処理である。フレーズ判定処理、和音フレーズ、指潜りフレーズの詳細については後述する。
【０２１４】
Ｓ２０１０では評価イベント数設定処理が実行される。この処理は、次に実行される割当指評価処理において、評価の対象とするイベントの数を設定する処理であり、例えば、ポインタpeの指すイベントデータに続く６つ先のイベントデータまでを評価の対象とするのであれば、変数sakiyomiに値「６」が代入される。
【０２１５】
Ｓ２０１１では指割当判断処理が実行される。指割当判断処理は、前述した第一実施例と同様の、第一から第五までの指割当判断処理（図１２〜図１８）が実行され、各指について、イベントデータによってノートオンの指示がされている鍵の押鍵操作を行なうことが可能であり、その押鍵操作にその指を割り当てることができるか否かが判定される。更に、ここでは、前述したフレーズ判定処理によって指潜りフレーズであると判定されたフレーズを演奏するために割り当てることのできる指の候補が存在するか否かを判定する処理も実行される。この処理の詳細については後述する。
【０２１６】
指割当判断処理の判定結果は変数enable[0] 〜enable[4] に示され、割り当て可能な指に対応するものには「ＴＲＵＥ」が、割り当て不能の指に対応するものには「ＦＡＬＳＥ」が、それぞれ設定される。
Ｓ２０１２では割当指評価処理が実行される。割当指評価処理は、指割当判断処理によって割当可能と判定された各指について、実際にこれらの指でその音を発音させるために要する手や指の移動量を、演奏者の手のサイズのデータ及び鍵盤のサイズのデータに基づいて各指ごとに導き出し、その各指の移動量の大小を動作の負担（動作コスト）として算出する処理である。割当指評価処理の詳細も後述する。
【０２１７】
Ｓ２０１３では、割当指評価処理の結果、所定値以下の動作コストである指、すなわち運指の割当の可能な指が有るか否かが判定され、判定結果がＹｅｓならばＳ２０１５に進み、ＮｏならばＳ２０１４に進む。
Ｓ２０１４では条件変更処理が実行される。条件変更処理は、例えば、割当指評価処理で用いられている評価点の変更や、指の可動範囲の変更、評価イベント数設定処理において設定された変数sakiyomi の値の変更、あるいは、後述する曲データのクオンタイズなどを行なって、Ｓ２０１３の判定処理の結果がＹｅｓとなるように各種条件の微調整を行なう処理である。この処理を終えた後にはＳ２００８へ戻って上述した処理が繰り返される。
【０２１８】
Ｓ２０１５では指割当処理が行なわれ、割当指評価処理の結果、動作コストが最小であった指が、ポインタpeの指すノートオンイベントに対応する押鍵操作を行なう指に割り当てられる。
Ｓ２０１６ではフレーズ終端判定処理が実行され、ポインタpeの指すイベントが、フレーズ判定処理によって和音フレーズ若しくは指潜りフレーズに該当すると判定されたフレーズの終端であるか否かが判定され、フレーズの終端であった場合にフレーズ判定処理によって設定されたフラグをクリアさせる処理が行なわれる。
【０２１９】
Ｓ２０１７では、選択されているトラックデータにおける次のイベントデータが格納されているＲＡＭ１７上の格納位置を指すようにポインタpeの値が進められ、その後はＳ２００２へ戻って上述した処理が繰り返される。
以上までの処理が第二運指情報生成処理である。
【０２２０】
次に、図２８のＳ２００９において実行されるフレーズ判定処理について説明する。フレーズ判定処理の処理内容を図３０にフローチャートで示す。
まず、Ｓ２１０１において、前述した第二運指情報生成処理のＳ２００６（図２８）の説明で触れた変数tkalloffの値が「ＮＯＤＡＴＡ」であるか否か、すなわちいずれかの鍵が押鍵の状態にあるか否かが判定され、この判定結果がＹｅｓならばＳ２１０４に、ＮｏならばＳ２１０２に、それぞれ進む。
【０２２１】
Ｓ２１０２では、変数tktimeの値から変数tkalloffの値を減じた結果の値が定数PhraseTimeの値よりも大きいか否かが判定され、この判定結果がＹｅｓの場合にのみ、Ｓ２１０３において、変数phrase＿onに「ＴＲＵＥ」が設定される。
以上のＳ２１０１からＳ２１０３までの処理はフレーズの区切りを検出する処理であり、全ての鍵の離鍵状態が定数PhraseTimeの値で示される時間よりも長く継続しているときには、曲データにおけるポインタpeの現在の値に対応する部分をひとつのフレーズの区切れ部分とみなし、フレーズの区切りが検出されたことを変数phrase＿onに示す処理である。なお、これらの処理によって検出されるフレーズは、後述する和音フレーズや指潜りフレーズを包含する、それらよりも大きな概念の音符列である。
【０２２２】
Ｓ２１０４では、変数chord ＿onに「ＴＲＵＥ」が設定されているか否かが判定され、この判定結果がＹｅｓならば今回のフレーズ判定処理を終了して図２８の処理へ戻る。一方、この判定処理の結果がＮｏならばＳ２１０５に進む。変数chord ＿onは現在検出されているフレーズが和音フレーズであるか否かを示すフラグである。
【０２２３】
Ｓ２１０５では和音フレーズ判定処理が実行される。この処理は、ポインタpeの現在の値で示されるＲＡＭ１７上のイベントデータに続く次以降のイベントデータを調べ、現在の時刻から定数TkChord で示される時間以内に「ノートオン」のイベントが３個以上含まれているときには、このフレーズを「和音フレーズ」とみなす処理である。そして、この和音フレーズが検出されたときには、前述した変数chord ＿onに「ＴＲＵＥ」を設定する。
【０２２４】
Ｓ２１０６では、変数chord ＿onに「ＴＲＵＥ」が設定されているか否かが再度判定され、この判定結果がＹｅｓならばＳ２１０７に進み、ＮｏならばＳ２１０８に進む。
Ｓ２１０７では、この和音フレーズを構成する最後の「ノートオン」のイベントデータが格納されているＲＡＭ１７のアドレスが変数chord ＿end に代入され、更に、変数pass＿onに「ＦＡＬＳＥ」が設定される。ここで、変数pass＿onは、後述する指潜りフレーズ判定処理において指潜りフレーズが検出されたことを示すフラグであるが、ここでは、和音フレーズは指潜りフレーズに優先し、和音フレーズであるとみなされたフレーズは指潜りフレーズとはみなされないようにしている。
【０２２５】
このＳ２１０７の処理を終えた後には今回のフレーズ判定処理を終了して図２８の処理へ戻る。
Ｓ２１０８では指潜りフレーズ判定処理が実行される。指潜りフレーズ判定処理は、ポインタpeの現在の値で示されるＲＡＭ１７上のイベントデータに続く次以降のイベントデータを調べ、これらがポインタpeの現在の値で示されるイベントデータに続いて連続して発音されることが示されている（すなわち、所定時間以上の無発音の時間を含まない）「ノートオン」のイベントを示しているときには、これらのイベントデータの音高の変化の単調性及びその変化の大きさ、更に手・指の現在の押鍵状態に基づいて、これらのイベントデータの演奏で指潜りが発生するか否かを判定する処理である。なお、第二実施例においては、指潜りと指跨ぎとは区別せず、どちらも「指潜り」と称することとする。
【０２２６】
この指潜りフレーズ判定の原理を図３１を用いて説明する。
指潜りフレーズの判定においては、判定対象のフレーズが次の３つの点について調べられる。
（１）  運指が確定している直前のノートオンイベントで示されている音高とポインタpeの現在の値で示されるイベントデータに示されている音高との関係は上昇であるか下降であるか。
（２）  ポインタpeの現在の値に続く連続発音であるノートオンイベントのうち、上記（１）に継続して単調に上昇若しくは下降しているイベントが存在するか。
（３）  運指が確定している直前のノートオンイベントについての手・指の押鍵状態を考慮すると、指潜りを行なわずに（２）のイベントを押鍵することが可能であるか。
【０２２７】
ピアノロールの形式で各音符を示した図３１の具体例で、以上の点の検討を行なってみる。なお、説明を簡単にするために、同図の具体例に運指を施す指は右手の指のみに限定する。図３１において、音符Ａは既に運指が決定されているものとし、ポインタpeの現在の値は音符［１］を指しているものとする。また、音符Ａ及び音符［１］〜［５］は全て連続発音であると判定されているものとする。
【０２２８】
図３１（ａ）において音符Ａから音符［１］にかけては音高が上昇している（（１）の判定結果）。従って、指潜りフレーズの判定候補は音高が単調に上昇している音符［３］までの音符列である（（２）の判定結果）。ここで、音符Ａの運指として親指若しくは示指が割り当てられていれば、右手にはその割り当てられた指の右側に３つ以上の指があるので、音符［３］［４］［５］は指潜りを行なわずに押鍵することが可能である（（３）の判定結果）。よって、図３１（ａ）の音符Ａ及び音符［１］［２］［３］は、親指若しくは示指が音符Ａの運指に割り当てられていれば指潜りフレーズではないと判定され、そうでない場合には指潜りフレーズであると判定される。
【０２２９】
図３１（ｂ）では音符Ａから音符［１］にかけては音高が上昇している（（１）の判定結果）。従って、指潜りフレーズの判定候補は音高が単調に上昇している音符［５］までの音符列である（（２）の判定結果）。この場合には音符Ａの運指としてどの指が割り当てられていようとも、指潜りを行なわずに音符［１］〜［５］の全てを右手で押鍵することは不可能である（（３）の判定結果）。よって、図３１（ｂ）の音符列は指潜りフレーズであると判定される。
【０２３０】
図３１（ｃ）では音符Ａから音符［１］にかけては音高が下降している（（１）の判定結果）。従って、指潜りフレーズの判定候補は、音高が単調に下降している音符［２］までの音符列である（（２）の判定結果）。ここで、音符Ａの運指として親指若しくは示指が割り当てられていると、右手にはその割り当てられた指の左側には１つ以下しか指がないので、音符［１］［２］は指潜りを行なわずに押鍵することができない（（３）の判定結果）。よって、図３１（ｃ）の音符Ａ及び音符［１］［２］は、親指若しくは示指が音符Ａの運指に割り当てられていれば指潜りフレーズであると判定され、そうでない場合には指潜りフレーズでないと判定される。
【０２３１】
指潜りフレーズの判定は以上のようにして行なわれる。
図３０の説明に戻る。Ｓ２１０８の指潜りフレーズ判定処理によって指潜りフレーズであると判定されたときには、変数pass＿onに「ＴＲＵＥ」が設定され、判定対象のフレーズが指潜りフレーズであったことが示される。
【０２３２】
Ｓ２１０９では、直前の指潜りフレーズ判定処理によって変数pass＿onに「ＴＲＵＥ」が設定されたか否かが判定され、判定結果がＹｅｓの場合にのみ、Ｓ２１１０において変数pass＿count に「０」が代入され、変数pass＿timeに変数tktimeの現在の値、すなわち今回の指潜りフレーズの開始時刻が代入され、変数pass＿end にこの指潜りフレーズを構成する最後の「ノートオン」のイベントデータが格納されているＲＡＭ１７のアドレスが代入される。なお、変数pass＿count は、ある指潜りフレーズにおいて後述する処理が施されたノートオンイベントの個数を数えるものであり、前述した第二運指情報生成処理のＳ２００７（図２８）において、その値を更新させる処理が行なわれる。
【０２３３】
Ｓ２１１０の処理を終えた後、あるいはＳ２１０９の判定処理の結果がＮｏであったときには、今回のフレーズ判定処理を終了して図２８の処理へ戻る。
以上までの処理がフレーズ判定処理である。
次に、図２８のＳ２０１１の指割当判定処理の一部として行なわれる、指潜りフレーズであると判定されたフレーズ中の楽音について実際に押鍵可能である指の候補を見つけ出す処理について説明する。
【０２３４】
この処理は、図３２に示す使用可能指の検索テーブルを参照し、既に運指が決定されている楽音に続く楽音についての押鍵の可能な指をこのテーブルから割り出す処理である。例えば、単調に上昇するフレーズを右手で押鍵する場合、先行する楽音の押鍵に２（中指）が既に割り当てられているときには、後に続く楽音についての押鍵の可能な指は０（指潜りによる親指）、３（薬指）、４（小指）のいずれかであることが図３２の検索テーブルの※印を付した行より直ちに判明する。従って、これらの指のうち、他の鍵の押鍵のために現在使用中でないものを割り当て可能な指とする。
【０２３５】
次に、図２８のＳ２０１２の割当指評価処理について説明する。割当指評価処理の処理内容を図３３にフローチャートで示す。
まず、Ｓ３００１において、この割当指評価処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、例えば、各指についての動作コストの算出結果のうちの最良である動作コストの値が最終的に設定される変数bestscにはここでは「ＮＯＤＡＴＡ」が代入され、また、各指の動作コストの計算結果が設定される変数sc[0] 〜sc[4] にはここでは「０」が代入される。
【０２３６】
Ｓ３００２では、前述した変数phrase＿onに「ＴＲＵＥ」が設定されているか否か、すなわち現在の割当評価の対象となる楽音が、フレーズ判定処理のＳ２１０１からＳ２１０３までの処理で検出されたフレーズの先頭とみなされているかが判定され、この判定結果がＹｅｓのときにのみＳ３００３においてフレーズ先頭評価処理が実行される。
【０２３７】
このフレーズ先頭評価処理について、図３４を参照しながら説明する。
フレーズ先頭評価処理は、フレーズ内の各楽音の音高の変化の傾向を把握し、その傾向に基づいて、このフレーズの先頭の楽音についての押鍵に割り当てる指を決定するための動作コストに重み付けを行なう処理である。
【０２３８】
説明を簡単にするために右手のみに注目して説明すると、例えば、このフレーズに属する各楽音の音高の変化がフレーズの先頭の楽音の音高から上昇していく傾向にあるのならば、フレーズの先頭の楽音のための押鍵には、親指寄りの指を割り当てる方がその後のそのフレーズについての運指が容易になることが期待できる。また、逆に、フレーズの音高が下降傾向であるならば、フレーズの先頭の楽音のための押鍵は小指寄りの指を割り当てる方が有利であると考えられる。フレーズ先頭評価処理は、この考えに基づいて各指の動作コストに対して重み付けを行なう処理である。
【０２３９】
図３４（ａ）は、フレーズ内の音符列を示したものである。同図において、音符（Ａ）がフレーズ内の先頭の音符（すなわち、現在の指評価の対象となっている音符）であり、同図の縦軸で音符（Ｂ）〜（Ｋ）と音符（Ａ）との音高差を示している。
【０２４０】
フレーズ先頭評価処理は、本実施の形態では原則として６音先までの音符を評価の対象とし、そこまでの音符と先頭との音符との音階差に大きな差がないときには、フレーズの音高の傾向が十分に把握できないとみなし、更に４音先までの音符を評価の対象とするものとする。
【０２４１】
図３４（ａ）の例では、原則としては音符（Ｇ）までが評価の対象であるが、そこまでの音符（Ｂ）〜  （Ｇ）と先頭との音符（Ａ）との音階差に大きな差（例えば同図における音高差が３以上）がないので、更に音符（Ｈ）〜（Ｋ）までが評価の対象に加えられる。
【０２４２】
フレーズの音高の傾向に基づく動作コストの算出は図３４（ｂ）に示すような評価テーブルを参照して行なわれる。なお、図３４（ｂ）の評価テーブルは右手用のものである。図３４（ａ）の例で説明すると、例えば音符（Ｂ）は音符（Ａ）と１の音階差があり、この音階差は、図３４（ｂ）の評価テーブルの列［１］を参照すると、小指のみが動作コストが１であり、他の指については動作コストが０である。これらの動作コストは、音符（Ｄ）及び（Ｆ）についても同様である。
【０２４３】
音符（Ｃ）、（Ｅ）、及び（Ｇ）については、いずれも音符（Ａ）との音階差は０であるから、これらの音符についての各指の動作コストはいずれも０であることが評価テーブルの列［２］から判明する。以下同様に、音符（Ｈ）については、評価テーブルの列［３］より、親指、示指、及び中指が動作コスト０で薬指及び小指が動作コスト１と判明し、音符（Ｉ）については、評価テーブルの列［４］より、親指が動作コスト１で他の指が動作コスト０と、音符（Ｊ）については、評価テーブルの列［５］より、親指及び示指が動作コスト０で中指、薬指、及び小指が動作コスト１と、音符（Ｋ）については、評価テーブルの列［６］より、小指が動作コスト１で他の指が動作コスト０と、それぞれ判明する。
【０２４４】
これらの判明した動作コスト全てを各指毎に合計すると、
親指：１  示指：０  中指：１  薬指：２  小指：６
となり、図３３のＳ３００３の処理においてはこれらの値が変数sc[0] 〜sc[4] の各々にまず代入される。このようにして各指に与えられた動作コストのみを比較すれば、このフレーズの先頭の音符に対応する押鍵を行なうのは示指が最適であることが判明する。
【０２４５】
図３３の説明に戻る。Ｓ３００４では変数fig に０がまず代入される。変数fig は処理の対象とする指を特定するためのものである。
Ｓ３００５では、変数fig の値が、手の指の本数（すなわち５）を示す定数MAX ＿FINGERよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３００６に進み、ＮｏならばＳ３０１１に進む。
【０２４６】
Ｓ３００６では変数enable[fig] が「ＴＲＵＥ」に設定されているか否かが判定され、判定結果がＹｅｓならばＳ３００７に進み、ＮｏならばＳ３０１０に進む。前述した指割当判断処理（図２８のＳ２０１１）で説明したように、変数enable[fig] は、変数fig に対応する指が割り当て可能であるか否かが示されるフラグである。
【０２４７】
Ｓ３００７ではコスト取得処理が実行され、その実行結果として得られる指fig についての動作コストと変数sc[fig] の現在の値との加算結果が改めて変数sc[fig] に代入される。動作コスト取得処理の詳細は後述する。
Ｓ３００８では、変数sc[fig] の現在の値が、押鍵のための指として割り当て可能な動作コストの上限が示されている定数cutsc よりも大きいか否かが判定され、判定結果がＹｅｓの場合にのみ、Ｓ３００９において変数enable[fig] に「ＦＡＬＳＥ」が設定されて変数fig に対応する指は押鍵のための指としての割り当てに供することができないことが示される。
【０２４８】
Ｓ３０１０では、変数fig の値を１だけ増加させ、その後はＳ３００５へ戻って上述した処理が繰り返される。
Ｓ３０１１では、変数fig に改めて０が代入される。
Ｓ３０１２では、変数fig の値が、手の指の本数（すなわち５）を示す前述しいた定数MAX ＿FINGERよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３０１３に進み、Ｎｏならば今回の割当指評価処理を終了して図２８の処理へ戻る。
【０２４９】
Ｓ３０１３では変数enable[fig] が「ＴＲＵＥ」に設定されているか否かが判定され、判定結果がＹｅｓならばＳ３０１４に進み、ＮｏならばＳ３０１９に進む。
Ｓ３０１４では、変数sc[fig] の現在の値が変数bestscの現在の値よりも大きいか否かが判定され、判定結果がＹｅｓならばＳ３０１５に進んで変数enable[fig] に「ＦＡＬＳＥ」が設定されて変数fig に対応する指は押鍵のための指としての割り当てに供することができないことが示され、その後はＳ３０１９に進む。一方、Ｓ３０１４の判定結果がＮｏならばＳ３０１６に進む。
【０２５０】
Ｓ３０１６では先行音符評価処理が実行され、その実行結果として得られる変数fig に対応する指についての動作コストと変数sc[fig] の現在の値との加算結果が改めて変数sc[fig] に代入される。先行音符評価処理は、現在の評価対象となっているイベントデータよりも後のイベントデータの内容に基づいて変数fig に対応する指の動作コストを算出する処理であり、その詳細は後述する。
【０２５１】
Ｓ３０１７では、変数sc[fig] の現在の値が変数bestscの現在の値よりも小さいか否かが判定され、判定結果がＹｅｓの場合にのみ、すなわち、先行音評価処理に基づく動作コストを見込んでも変数sc[fig] の現在の値が変数bestscの現在の値よりも小さい場合にのみ、Ｓ３０１８で変数sc[fig] の現在の値が変数bestscに代入される。
【０２５２】
Ｓ３０１９では、変数fig の値を１だけ増加させ、その後はＳ３０１２へ戻って上述した処理が繰り返される。
以上までの処理が割当指評価処理である。
次に、図３３のＳ３００７において実行されるコスト取得処理について説明する。コスト取得処理の処理内容を図３５にフローチャートで示す。
【０２５３】
まず、Ｓ３１０１において、このコスト取得処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、例えば、動作コストの算出結果の総計が最終的に設定される変数sc（前述した変数sc[fig] とは別のものである）には初期値０が代入され、現在の評価対象の指を特定するために用いられる変数fig には、割当指評価処理でこのコスト取得処理の実行が呼び出されたときの変数fig の値が渡されて代入される。
【０２５４】
続くＳ３１０２からＳ３１０８にかけての処理は、変数fig で示される指について、指の開き評価処理  （Ｓ３１０２）、黒鍵評価処理（Ｓ３１０３）、手の移動評価処理（Ｓ３１０４）、押鍵時間評価処理（Ｓ３１０５）、連続打鍵評価処理（Ｓ３１０６）、指潜り評価処理（Ｓ３１０７）、及びフレーズデータ比較評価処理（Ｓ３１０８）がそれぞれ実行され、これらの各処理の実行結果として得られる、変数fig で示される指についての動作コストが変数scを用いて順次加算される。その結果として変数scに格納されている動作コストの合計値が割当指評価処理に返される。
【０２５５】
以上までの処理がコスト取得処理である。
以下、コスト取得処理のＳ３１０２からＳ３１０８にかけて実行される各種処理の詳細を説明する。
図３６は、図３５のＳ３１０２において実行される指の開き評価処理の処理内容を示すフローチャートである。この処理は、他の指による押鍵が継続している状態において変数newfigで示される評価対象の指での押鍵を割り当てた場合に、その割当に基づく押鍵のために要する指の開きの大きさを動作コストとして算出する処理である。
【０２５６】
まず、Ｓ３２０１において、この指の開き取得処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、例えば、上述した変数newfigには、割当指評価処理でこのコスト取得処理の実行が呼び出されたときの変数fig の値が渡されて代入され、指の開きの評価の対象となるもう一方の指を示す変数fig には０が代入され、動作コストの累計のために用いられる変数score には０が代入される。また、今回の指割り当ての対象となっているノートオンイベントのノート番号（押鍵指示されている鍵の番号）が変数noteに代入される。更に、各指の現在の押鍵・離鍵の状態が変数fnote[0]〜fnote[4]に代入される。この変数には、押鍵状態を示すときにはその押鍵されている鍵の番号が代入され、離鍵状態を示すときには「ＮＯＤＡＴＡ」が代入される。
【０２５７】
Ｓ３２０２では、変数fig の値が、手の指の本数を示す前述した定数MAX ＿FINGERよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３２０３に進み、Ｎｏならば今回の指の開き評価処理を終了して変数score の値を図３５の処理へ返す。
【０２５８】
Ｓ３２０３では、変数fig の値と変数newfigの値とが一致するか否かが判定され、判定結果がＹｅｓならばＳ３２１７に進み、ＮｏならばＳ３２０４に進む。Ｓ３２０４では、変数fnote[fig]の値が「ＮＯＤＡＴＡ」であるか否か、すなわち変数fig で示される指が離鍵状態にあるか否かが判定され、判定結果がＹｅｓならばＳ３２１７に進み、ＮｏならばＳ３２０５に進む。
【０２５９】
Ｓ３２０５では、変数fig の値が変数newfigの値よりも大きいか否かが判定される。そして、この判定結果がＹｅｓならばＳ３２０６で変数bfに変数fig の値が代入され、更に、変数sfに変数newfigの値が代入された後にＳ３２０８に進む。一方、Ｓ３２０５の判定結果がＮｏならばＳ３２０７で変数bfに変数newfigの値が代入され、更に、変数sfに変数fig の値が代入される。
【０２６０】
Ｓ３２０８では、定数HandTypeに「ＲＩＧＨＴＨＡＮＤ」が設定されているか否かが判定される。そして、この判定結果がＹｅｓならばＳ３２０９でkpos[fnote[sf]] の値から定数kpos[fnote[bf]] の値を減じた結果の値が変数spanに代入され、その後はＳ３２１１に進む。一方、この判定結果がＮｏならばＳ３２１０でkpos[fnote[bf]] の値から定数kpos[fnote[sf]] の値を減じた結果の値が変数spanに代入される。ここで、定数HandTypeには、第二実施例において運指生成を行なわせる手が右手（ＲＩＧＨＴＨＡＮＤ）であるか左手（ＬＥＦＴＨＡＮＤ）であるかが示されている。また、定数kpos[]は、鍵盤の横方向（鍵が並べられている方向）における各鍵の位置の距離を示す値が格納されているテーブルであり、第一実施例におけるkeypos[]と同様のものである。
【０２６１】
以上のＳ３２０５からＳ３２１０にかけての処理によって、評価対象の２つの指の開きの距離が変数spanに与えられる。なお、変数spanの値が負となる場合は、二つの指の押鍵のための割り当ての配置がその手におけるこれらの指の配置と逆になってしまっていることを示している。
【０２６２】
Ｓ３２１１では、spantableno[sf][bf] の値が変数table に代入される。定数spantableno[][] は、評価対象である指の組み合わせを特定の数字に対応させるテーブルである。
spantableno[][] のテーブルの例を図３７（ａ）に示す。同図のテーブルより、評価対象である指の組み合わせが例えば示指（指番号１）と中指（指番号２）とであるならば、このテーブルから得られる数字は４であり、この数が変数table に代入される。
【０２６３】
Ｓ３２１２では、変数spanの値が定数STBL＿MINSPAN の値よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３２１６に進み、ＮｏならばＳ３２１３に進む。定数STBL＿MINSPAN については後述する。
Ｓ３２１３では、変数spanの値が定数STBL＿MAXSPAN の値よりも大きいか否かが判定され、判定結果がＹｅｓならばＳ３２１５に進み、ＮｏならばＳ３２１４に進む。定数STBL＿MAXSPAN については後述する。
【０２６４】
Ｓ３２１４では、変数score の現在の値にspantable[table][span]の値を加算した結果が改めて変数score に代入され、その後はＳ３２１７に進む。定数spantable[][] は、評価対象である指の組み合わせ（前述した変数table の値）及びこれらの指で所定の押鍵が行なわれるときの指の開き（前述した変数spanの値）と、このときの動作コストとを対応付けているテーブルである。
【０２６５】
spantable[][] のテーブルの例を図３７（ｂ）に示す。同図のテーブルより、例えば評価対象である指の組み合わせを示す変数table の値が４（すなわち、指の組み合わせが例えば示指（指番号１）と中指（指番号２））であって、これらの指で所定の押鍵が行なわれるときの指の開きを示す変数spanの値が半鍵盤単位（隣接する白鍵−黒鍵の間隔の距離を基準とした単位）で＋３であったときには、このテーブルから得られる動作コストが３であり、この値が変数score で累計される。
【０２６６】
なお、これ以降の説明において、本実施例における鍵盤上の位置や２点間の距離を示す各種の数値の単位は、いずれも上述した半鍵盤単位を１としたものを使用する。
なお、前述した定数STBL＿MINSPAN 及びSTBL＿MAXSPAN は、spantable[][] のテーブルでカバーされている指の開きの下限及び上限の値が設定されており、図３７（ｂ）の例では、定数STBL＿MINSPAN には−５が、定数STBL＿MAXSPAN には＋１５がそれぞれ設定されていることになる。つまり、Ｓ３２１２及びＳ３２１３の判定処理によって、変数spanの値がspantable[][] のテーブルのカバーしている範囲に含まれているか否かの判定が行なわれているのである。
【０２６７】
Ｓ３２１５は、変数spanの値がspantable[][] のテーブルのカバーしている上限を超えてしまっていた場合に行なわれる処理であり、
spantable[table][ STBL＿MAXSPAN]+ (span - STBL＿MAXSPAN)×STBL＿OVERSCORE
なる計算の計算結果と変数score の値との加算結果が改めて変数score に代入され、その後はＳ３２１７に進む。上述した計算式は、テーブルの範囲外の動作コストは単純に直線的に増加するとみなすものであり、定数STBL＿OVERSCORE はそのときの傾きである。
【０２６８】
Ｓ３２１６は、変数spanの値がspantable[][] のテーブルのカバーしている下限を下回ってしまっていた場合に行なわれる処理であり、
spantable[table][ STBL＿MINSPAN] + abs(span - STBL＿MINSPAN)×STBL＿OVERSCORE
なる計算の計算結果と変数score の値との加算結果が改めて変数score に代入される。上述した計算式は、Ｓ３２１５と同様の考え方によるものである。
【０２６９】
Ｓ３２１７では、変数fig の値を１だけ増加させ、その後はＳ３２０２へ戻って上述した処理が繰り返される。
以上までの処理が指の開き評価処理である。
次に、図３５のＳ３１０３において実行される黒鍵評価処理について説明する。黒鍵評価処理は、割り当ての対象であるノートオンイベントが黒鍵の押鍵指示であるときに、黒鍵の押鍵のためには多大な移動が必要となる親指及び小指に対して動作コストを課す処理である。
【０２７０】
黒鍵評価処理の処理内容を図３８にフローチャートで示す。
まず、Ｓ３３０１において、動作コストの累計のために用いられる変数score には０が代入され、更に、変数newfigに、割当指評価処理でこの黒鍵評価処理の実行が呼び出されたときの変数fig の値が渡されて代入される。
【０２７１】
Ｓ３３０２では、変数newfigの値が０若しくは４であるか否か、すなわち、評価対象である指が親指若しくは小指であるか否かが判定され、判定結果がＹｅｓならばＳ３３０３に進み、Ｎｏならば今回の黒鍵評価処理を終了して変数score の現在の値を図３５の処理へ返す。
【０２７２】
Ｓ３３０３では、現在の指割り当ての対象であるノートオンイベントが黒鍵の押鍵指示であるか否かが判定され、判定結果がＹｅｓならばＳ３３０４に進み、Ｎｏならば今回の黒鍵評価処理を終了して変数score の現在の値を図３５の処理へ返す。
【０２７３】
Ｓ３３０４では、変数score の現在の値に定数sc＿blk の値が加算された結果の値が変数score に改めて代入される。この定数sc＿blk の値は、親指若しくは小指による黒鍵の押鍵について設定されている動作コストである。
Ｓ３３０５では、割り当ての対象であるノートオンイベントが属しているブロックが、和音であり、且つそのブロックを構成する楽音の音高差が所定の音高差よりも大きいか否かが判定され、判定結果がＮｏの場合にのみ、Ｓ３３０６において変数score の現在の値に定数sc＿blk2の値が加算された結果の値が変数score に改めて代入される。
【０２７４】
ここで、ブロックの概念について説明する。以降の説明において、ブロックとは音符列に存在する単音若しくは複数の音からなる塊を示すものとする。ここで、ブロックの区切り（連続する２つのブロックの境）は、前述した第二運指情報生成処理において行なわれる音符情報取得処理（図２８のＳ２００８）の結果として取得される音符情報NoteTypeによって特定され、その値が０又は１である音符がひとつのブロックに属する音符のうちの最後の音符となる。なお、音符情報Notetypeが０である音符は単音のブロックを構成する。
【０２７５】
ブロックについて、図３９の例で更に説明する。
図３９において、単音である音符１でブロックａが構成され、和音である音符２、３、及び４でブロックｂが構成される。以下同様に、音符５でブロックｃが、音符６でブロックｄが、音符７、８、及び９でブロックｅが、音符１０、１１、及び１２でブロックｆが、それぞれ構成される。
【０２７６】
Ｓ３３０５の判定処理は、音高差の大きい和音ならば、例え割り当ての対象である鍵が黒鍵であっても親指若しくは小指を用いて押鍵を行なうほうが運指が容易であることを考慮し、それ以外の場合にＳ３３０６の処理で動作コストを加算させるようにしたものである。なお、この定数sc＿blk2の値は、この場合について設定されている動作コストである。
【０２７７】
Ｓ３３０５の判定結果がＹｅｓのとき、若しくはＳ３３０６の処理を終えた後には今回の黒鍵評価処理を終了して変数score の現在の値を図３５の処理へ返す。
以上までの処理が黒鍵評価処理である。
【０２７８】
次に、図３５のＳ３１０４において実行される手の移動評価処理について説明する。手の移動評価処理は、まず、割り当ての対象であるノートオンイベントが属しているものの直前のブロックについて割り当てた運指における手の位置を基準とし、割り当ての対象であるノートオンイベントに対応する鍵を評価対象である指によって押鍵するときに発生する手の移動距離の長短に基づいて動作コストを課す処理である。
【０２７９】
手の移動評価処理の処理内容を図４０にフローチャートで示す。
なお、これ以降の説明及び図面では、変数scと変数score とが混在しているが、すべてを変数score と読み替えるものとする。
まず、Ｓ３４０１において、この手の移動評価処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、前述した音符情報取得処理の結果として得られている、今回の割り当ての対象であるノートオンイベントの音符情報が変数notetypeに代入され、割り当ての対象であるノートオンイベントが属しているものの直前のブロックについて割り当てられた運指における手の位置を示す値が変数posoldに代入され、動作コストの累計のために用いられる変数scには０が代入される。
【０２８０】
Ｓ３４０２では、変数notetypeの値が、単音符若しくはその割り当ての対象であるノートオンイベントが属しているブロックの最後の音符であることを示しているか否か、すなわち、０若しくは１であるか否かが判定され、判定結果がＹｅｓならばＳ３４０３に進み、Ｎｏならば今回の手の移動評価処理を終了して変数scの値を図３５の処理へ返す。
【０２８１】
Ｓ３４０３では、手の位置の取得処理が実行され、その実行結果として得られる手の位置を示す値が変数pos に代入される。手の位置の取得処理は、評価対象の指で押鍵を行なうためには最適である手の位置を推定する処理であり、その処理の詳細は後述する。
【０２８２】
Ｓ３４０４では、変数pos の値と変数posoldの値とが一致するか否か、すなわち、手の移動が発生しないか否かが判定され、判定結果がＹｅｓならば今回の手の移動評価処理を終了して変数scの値を図３５の処理へ返す。一方、この判定結果がＮｏならばＳ３４０５に進む。
【０２８３】
Ｓ３４０５では、変数pos の値と変数posoldの値との差の絶対値が計算され、その計算結果が３よりも小さいか否かが判定される。そして、この判定結果がＹｅｓならば、Ｓ３４０６において、変数scの値に定数sc＿move0 の値が加算された結果の値が改めて変数scに代入され、その後、処理がＳ３４０８へと進む。一方、Ｓ３４０５の判定処理の結果がＮｏならば、Ｓ３４０７において、変数scの値に定数sc＿move1 の値が加算された結果の値が改めて変数scに代入される。ここで、定数sc＿move0 及びsc＿move1 はいずれも動作コストであり、sc＿move1 にはsc＿move0 よりも大きな動作コストが設定される。
【０２８４】
Ｓ３４０８では、変数pos の値と変数posoldの値との差の絶対値に定数sc＿dis を乗じた値が変数scの値に加算され、その結果の値が改めて変数scに代入される。この処理は手の移動距離に比例する動作コストを更に課す処理であり、定数sc＿dis はこのときの比例定数である。
【０２８５】
Ｓ３４０８の処理を終えた後には今回の手の移動評価処理が終了し、変数scの値を図３５の処理へ返す。
以上までの処理が手の移動評価処理である。
次に、上述した手の移動評価処理のＳ３４０３において実行される、手の位置の取得処理について説明する。手の位置の取得処理の処理内容を図４１にフローチャートで示す。
【０２８６】
まず、Ｓ３４３１において、手の範囲取得処理が実行され、その実行結果として得られる、各指による現在の押鍵状態に基づく手の存在し得る範囲について、その左端の位置を示す値が変数leftlimlt に代入され、その右端の位置を示す値が変数rightlimitに代入される。この範囲取得処理の詳細は後述する。なお、本実施の形態において、鍵盤上における手の位置とは、その手の中指の位置で代表するものとする。
【０２８７】
続いてＳ３４３２では、この手の位置の取得処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、上述した変数leftlimit の値が変数pos に代入され、定数MAX ＿SCORE の値が変数min に代入され、変数bestpos 及びbestpos2には「ＮＯＤＡＴＡ」が代入される。ここで、定数MAX ＿SCORE には、後述する手位置評価点算出処理の実行結果として得られる評価点の最大値よりも大きな値を予め設定しておく。更に、変数fignote[0]〜fignote[4]には各指の現在の押鍵・離鍵の状態が代入される。なお、この変数には、押鍵状態を示すときにはその押鍵されている鍵の番号が代入され、離鍵状態を示すときには「ＮＯＤＡＴＡ」が代入される。
【０２８８】
Ｓ３４３３では、変数pos の値が変数rightlimitの値以下であるか否かが判定され、判定結果がＹｅｓならばＳ３４３５に進み、ＮｏならばＳ３４３４に進む。この変数pos は手の位置を示すものであり、後述するＳ３４４１の処理によって１ずつ増加することによってleftlimit からrightlimitまで変化する。以下の処理では、この変数pos の値で示される位置における手の位置の適切さの評価が後述する処理によってなされる。
【０２８９】
Ｓ３４３４では、変数bestpos の値と変数bestpos2の値との加算平均が計算され、この計算結果が改めて変数bestpos に代入される。この処理を終えた後には今回の手の位置の取得処理が終了し、変数bestpos の値を図４０の処理へ返す。
Ｓ３４３５では、変数fig に０が代入される。
【０２９０】
Ｓ３４３６では、変数fig の値が手の指の本数（すなわち５）を示す前述した定数MAX ＿FINGERよりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３４４２に、ＮｏならばＳ３４３７に、それぞれ進む。
Ｓ３４３７では、変数min の値が変数score の値よりも大きいか否かが判定される。この判定結果がＹｅｓならばＳ３４３８に進み、変数score の値が変数min に代入されると共に、変数pos の値が変数bestpos 及びbestpos2の両者に代入され、その後は処理がＳ３４４０に進む。一方、Ｓ３４３７の判定結果がＮｏならばＳ３４３９に進む。
【０２９１】
Ｓ３４３９では、変数min の値と変数score の値とが一致するか否かが判定され、判定結果がＹｅｓのときにのみ、Ｓ３４４０において変数pos の値が変数bestpos2のみに代入される。
以上のＳ３４３４、及びＳ３４３７からＳ３４４０にかけての処理は、手の位置の適切さの評価点が最も良好であった位置が複数存在した場合に、それらの中間の位置を最も適切な位置として得られるようにすりためのものである。
【０２９２】
Ｓ３４４１では、変数pos の値に１を加算した結果の値が改めて変数pos に代入され、その後はＳ３４３３へ処理が戻り、上述した処理が繰り返される。
Ｓ３４４２では、変数fignote[fig]の値が「ＮＯＤＡＴＡ」であるか否かが判定され、判定結果がＹｅｓならばＳ３４４９に、ＮｏならばＳ３４４３に、それぞれ進む。
【０２９３】
Ｓ３４４３では、変数fig の値が２よりも小さいか否か、すなわち、評価対象の指が親指若しくは示指であるか否かが判定され、判定結果がＹｅｓならば、Ｓ３４４４において変数pos の値から前述した定数kpos[fignote[fig]]の値を減じた結果の値が変数spanに代入された後にＳ３４４６へと処理を進め、判定結果がＮｏならば、Ｓ３４４５において定数kpos[fignote[fig]]の値から変数pos の値を減じた結果の値が変数spanに代入される。この変数spanの値は、押鍵している指と手の位置との間の距離を示している。
【０２９４】
Ｓ３４４６では、前述した変数HandTypeが「ＬＥＦＴＨＡＮＤ」であるか否か、すなわち運指の生成を行なう手が左手であるか否かが判定され、この判定結果がＹｅｓのときにのみ、Ｓ３４４７において、変数spanの値の符号が反転（−１が乗算）され、得られた値が改めて変数spanに代入される。この処理によって、左手についての運指の生成であっても変数spanの値が負でなくなる。
【０２９５】
Ｓ３４４８では、手位置評価点算出処理が実行され、その実行結果として得られる値が変数score に代入される。手位置評価点算出処理は、現在の手の位置を固定したときに、割り当てられた指による押鍵の難度を評価する処理であり、その処理の詳細は後述する。
【０２９６】
Ｓ３４４９では、変数fig の値を１だけ増加させ、その後はＳ３４３６へ戻って上述した処理が繰り返される。
以上までの処理が手の位置の取得処理である。
次に、上述した手の位置の取得処理のＳ３４３１において実行される、手の範囲取得処理について説明する。手の範囲取得処理の処理内容を図４２にフローチャートで示す。
【０２９７】
まず、Ｓ３４６１において、この手の位置の取得処理において使用される各種の変数の初期値を代入する処理が実行される。具体的には、前述した変数leftlimit には、鍵盤の左端の位置を示す数値０が代入され、変数rightlimitには、鍵盤の右端の位置を示す定数MAX ＿RANGE の値が代入される。また、変数fig には０が代入され、変数fignote[0]〜fignote[4]には各指の現在の押鍵・離鍵の状態が前述した他の処理におけるものと同様に代入される。
【０２９８】
Ｓ３４６２では、変数fig の値が手の指の本数を示す前述した定数MAX ＿FINGERの値（５）よりも小さいか否かが判定され、判定結果がＹｅｓならばＳ３４６３に進み、Ｎｏならば今回の手の範囲の取得処理が終了し、変数leftlimit 及びrifhtlimitの値を図４１の処理へ返す。
【０２９９】
Ｓ３４６３では、変数fignote[fig]の値が「ＮＯＤＡＴＡ」であるか否か、すなわち、変数fig で示される指の現在の状態が離鍵状態にあるか否かが判定され、この判定結果がＹｅｓならばＳ３４７２に進み、ＮｏならばＳ３４６４に進む。
【０３００】
Ｓ３４６４では、変数fig の値が２よりも小さいか否か、すなわち、評価対象の指が親指若しくは示指であるか否かが判定され、判定結果がＹｅｓならばＳ３４６５において変数table に１が代入された後にＳ３４６７に進み、判定結果がＮｏならばＳ３４６６において変数table に０が代入される。
【０３０１】
Ｓ３４６７では、前述した定数kpos[fignote[fig]]の値に定数handrange[HandType][table][spantableno2[fig]][min]の値を加算した結果の値が変数leftに代入され、定数kpos[fignote[fig]]の値に定数handrange[HandType][table][spantableno2[fig]][max]の値を加算した結果の値が変数right に代入される。
【０３０２】
ここで図４３について説明する。同図は、手の範囲の取得処理において参照されるテーブルの例を示している。同図において、（ｂ）はhandrange[][][][] のテーブル例であり、このテーブルの値は、元々は、  「指の組み合わせ」欄に番号で示されている２本の指で押鍵することの可能な鍵の範囲を、手の位置（すなわち、中指の位置）を基準としたときの相対位置で示したものである。具体的に説明すると、例えば、右手の親指（指番号０）と示指（指番号１）との２本の指で押鍵することの可能な鍵の範囲は、同図の右手のfig>=2の行を参照すると、右手の位置（中指の位置）を基準として、半鍵盤単位で−４から＋８の範囲の鍵の押鍵が可能であることを示している。
【０３０３】
手の範囲の取得処理においては、このようにして得られた押鍵可能範囲のテーブルを流用し、ある指が押鍵状態にあるときにおける手の存在可能範囲をこの表に基づいて得るようにしている。この流用を可能とするために設けられたテーブルが図４３（ａ）のspantableno2[]である。
【０３０４】
例を挙げて説明する。例えば、押鍵中の指が右手薬指（指番号３）であるときには、同図（ａ）のspantableno2[]の値は７となる。この値に対応するhandrange[][][][] の値を同図（ｂ）から求めるには、指の組み合わせが「２−３」の列を参照することとなり、[min] の値が１、[max] の値が５となる。
【０３０５】
なお、図４３（ｂ）のhandrange[][][][] のテーブルは、本来は別の用途で作成したものをここでは流用するようにしたために、この手の範囲の取得処理で実際に使用されるデータは、同図で網掛けが施されていないセルのデータのみである。
【０３０６】
図４２の説明へ戻る。
Ｓ３４６８では、変数leftの値が変数leftlimit の値よりも大きいか否かが判定され、判定結果がＹｅｓのときにのみ、Ｓ３４６９において変数leftの値が変数leftlimit に代入される。
【０３０７】
Ｓ３４７０では、変数right の値が変数rightlimitの値よりも大きいか否かが判定され、判定結果がＹｅｓのときにのみ、Ｓ３４７１において変数right の値が変数rightlimitに代入される。
Ｓ３４７２では、変数fig の値を１だけ増加させ、その後はＳ３４６２へ戻って上述した処理が繰り返される。
【０３０８】
以上までの処理が手の範囲の取得処理である。
次に、上述した手の位置の取得処理のＳ３４４８（図４１）において実行される、手位置評価点算出処理について説明する。手位置評価点算出処理の処理内容を図４４にフローチャートで示す。
【０３０９】
まず、Ｓ３４８１において、図４１のＳ３４４７までの処理によって設定されている変数fig 及び変数spanの値がそのまま引き継がれ、更に変数score に初期値０が代入される。
Ｓ３４８２では、図４３（ａ）に示したテーブルがここでも再び参照され、定数spantableno2[fig] の値が変数table に代入される。
【０３１０】
以降のＳ３４８３からＳ３４８７にかけての処理は、前述した指の開き評価処理（図３６）のＳ３２１２からＳ３２１６にかけての処理と同様であり、その説明は省略する。つまり、Ｓ３４８２の処理に基づいて変数table の値が設定されることによって、押鍵する指の割り当てによって発生する現在の位置からの手の移動距離に基づく動作コストを算出する処理が、指の開きの大きさを動作コストとして算出する処理を流用して行なえるようになるのである。
【０３１１】
以上までの処理が手位置評価点算出処理である。
次に、図３５のＳ３１０５において実行される押鍵時間評価処理について説明する。押鍵時間評価処理は、押鍵の割り当て対象の指について、その指が直前に離鍵状態に移行してからの経過時間を調べ、この経過時間が所定のものよりも短い場合には押鍵操作が困難であるとみなして動作コストを課すが、その指による直前の押鍵時の押鍵時間が十分短い（短い発音時間の音符についての発音である）場合には、所定の動作コストを課す条件を緩和するものである。
【０３１２】
押鍵時間評価処理の処理内容を図４５にフローチャートで示す。
まず、Ｓ３５０１では、図３５のＳ３１０４までの処理によって設定されている変数fig の値がそのまま引き継がれる。そして、変数scに初期値０が代入され、また、変数costtimeには、上述した所定の経過時間を示す定数OnCostTimeが代入される。更に、変数fig の値で示される指が押鍵操作を割り当てられていた直前のノートオンイベントの押鍵時間の長さが変数lengthに代入され、そのノートオンイベントに対応するノートオフイベントの発生時刻（演奏開始後の経過時間）が変数foff[fig] に代入される。
【０３１３】
Ｓ３５０２では、変数costtimeの値が変数lengthの値よりも大きいか否かが判定され、判定結果がＹｅｓのときにのみ、Ｓ３５０３において変数lengthの値が変数costtimeに代入される。
Ｓ３５０４では、前述した変数tktimeから変数foff[fig] の値を減じた結果の値（すなわち上述した離鍵後の経過時間）が変数costtimeの値よりも小さいか否かが判定され、判定結果がＹｅｓのときにのみ、Ｓ３５０５において前述した所定の動作コストが設定されている定数sc＿oncostの値が変数scに代入される。
【０３１４】
以上の処理を終えた後には今回の押鍵時間評価処理が終了し、変数scの値を図３５の処理へ返す。
以上までの処理が押鍵時間評価処理である。
次に、図３５のＳ３１０６において実行される連続打鍵評価処理について説明する。連続打鍵評価処理は、割り当ての対象であるノートオンイベントが属するブロックのひとつ前のブロックにおける押鍵操作に割り当てられている指に対し、その指を続けて使用する（可能性が高い）場合には動作コストを課す処理である。
【０３１５】
連続打鍵評価処理の処理内容を図４６にフローチャートで示す。
まず、Ｓ３６０１では、図３５のＳ３１０５までの処理によって設定されている変数fig の値がそのまま引き継がれ、変数scには初期値０が代入される。また、変数fnoteold[fig] には、割り当ての対象であるノートオンイベントが属するブロックのひとつ前のブロックにおいて、変数fig の値で示される指が押鍵操作を行っていたか否かを示す値が代入される。ここで、変数fig の値で示される指が押鍵操作を行っていなかったときには、変数fnoteold[fig] には「ＮＯＤＡＴＡ」が代入される。
【０３１６】
Ｓ３６０２では、変数fnotedata[fig]の値が「ＮＯＤＡＴＡ」以外の値であるか否かが判定され、この判定結果がＹｅｓのときにのみＳ３６０３において前述した所定の動作コストが設定されている定数sc＿renzoku の値が変数scに代入される。
【０３１７】
以上の処理を終えた後には今回の連続打鍵評価処理が終了し、変数scの値を図３５の処理へ返す。
以上までの処理が連続打鍵評価処理である。
次に、図３５のＳ３１０７において実行される指潜り評価処理について説明する。指潜り評価処理は、指潜りの運指に対して動作コストを課す処理である。
【０３１８】
指潜り評価処理の処理内容を図４７にフローチャートで示す。
まず、Ｓ３７０１では、図３５のＳ３１０６までの処理によって設定されている変数fig の値がそのまま引き継がれ、変数scには初期値０が代入される。
また、変数fnote[0]〜fnote[4]には、変数fig で示される指で評価対象のノートオンイベントについての押鍵操作を行なったときの各指の押鍵状態が代入される（fnote[fig]は押鍵状態とみなす）。なお、この変数には、押鍵状態を示すときにはその押鍵されている鍵の番号が代入され、離鍵状態を示すときには「ＮＯＤＡＴＡ」が代入される。但し、この指潜り評価処理においては、ノートオフのイベントに対応して離鍵操作を行なってから所定の時間は押鍵状態が継続しているものとして取り扱うようにする。これは、ある指で離鍵操作を行なったとしても、その後のある程度の時間以内に指示されるノートオンイベントについては指潜りを伴う押鍵操作が避けられない場合があるからである。
【０３１９】
更に、変数blk0及びblk1には初期値０が代入され、変数f には初期値１が代入される。
Ｓ３７０２では、変数fnote[0]の値が「ＮＯＤＡＴＡ」であるか否か、すなわち、親指が離鍵状態にあるか否かが判定され、この判定結果がＹｅｓ、すなわち親指が離鍵状態にあるならば、指潜りの発生はないので、このまま今回の指潜り評価処理が終了し、変数scの値を図３５の処理へ返す。
【０３２０】
Ｓ３７０３では変数f の値が手の指の本数（すなわち５）を示す前述した定数MAX ＿FINGERよりも小さいか否かが判定され、判定結果がＹｅｓならば処理をＳ３７０３に進める。一方、この判定結果がＮｏならば今回の指潜り評価処理が終了し、変数scの値を図３５の処理へ返す。
【０３２１】
Ｓ３７０４では変数fnote[f]の値が「ＮＯＤＡＴＡ」であるか否かが判定され、判定結果がＹｅｓならばＳ３７１２に進み、ＮｏならばＳ３７０５に進む。
以上のＳ３７０２及びＳ３７０４の処理によって、変数fnote[0]及びfnote[f]の値がいずれも「ＮＯＤＡＴＡ」ではない状態、すなわち親指と変数f で示される指との両者が共に押鍵状態にあるときにＳ３７０５以降の処理が実行される。
【０３２２】
Ｓ３７０５では変数fig の値が０又は変数f の値であるか否かが判定され、判定結果がＹｅｓならばＳ３７０６に進み、ＮｏならばＳ３７１２に進む。
Ｓ３７０６では、前述した変数HandTypeが「ＲＩＧＨＴＨＡＮＤ」であって且つ変数fnote[0]の値が変数fnote[f]の値よりも大きい、若しくは、前述した変数HandTypeが「ＬＥＦＴＨＡＮＤ」であって且つ変数fnote[0]の値が変数fnote[f]の値よりも小さいか否か、すなわち、親指と変数f で示される指とによる押鍵で指潜りが発生するか否か判定され、判定結果がＹｅｓならばＳ３７０７に進み、ＮｏならばＳ３７１２に進む。
【０３２３】
Ｓ３７０７では、変数fnote[0]で示される、親指によって押鍵されている鍵が黒鍵であるか否かが判定され、この判定結果がＹｅｓのときにのみＳ３７０８において変数blk0に１が代入される。
Ｓ３７０９では、変数fnote[f]で示される、変数f で示される指によって押鍵されている鍵が黒鍵であるか否かが判定され、この判定結果がＹｅｓのときにのみＳ３７１０において変数blk1に１が代入される。
【０３２４】
Ｓ３７１１では、変数scの値に定数sc＿passtype[blk0][blk1]の値と定数sc＿passの値とが加算され、その加算結果が改めて変数scに代入される。なお、定数sc＿passは、指潜りの運指に対して課される動作コストであり、指潜りの運指を生じさせ難くするためのものである。
【０３２５】
ここで図４８について説明する。同図は、この指潜り評価処理において参照される上述した定数sc＿passtype[][]のテーブル例を示している。指潜りの運指では、押鍵に使用する指と押鍵される鍵の配置（黒鍵・白鍵の配置の違い）との関係によって指潜りの難度が異なってくる。このテーブルは、この難度に対応した動作コストを提供するものである。
【０３２６】
図４７の説明へ戻る。Ｓ３７１２では変数f の値を１だけ増加させ、その後はＳ３７０３へ戻って上述した処理が繰り返される。
以上までの処理が指潜り評価処理である。
次に、図３５のＳ３１０８において実行されるフレーズデータ比較評価処理について説明する。フレーズデータ比較評価処理は、前述したフレーズチェック処理（図２５）においてフレーズに基づく運指の割り当てが提供されているときには、その割り当てられたものを除く他の指に所定の動作コストを課す処理である。
【０３２７】
フレーズデータ比較評価処理の処理内容を図４９にフローチャートで示す。
まず、Ｓ３８０１では、図３５のＳ３１０７までの処理によって設定されている変数fig の値がそのまま引き継がれ、変数scには初期値０が代入される。また、変数ｐｅには、評価対象のノートオンイベントが格納されているＲＡＭ１７の格納アドレスが代入される。
【０３２８】
Ｓ３８０２では、変数fig[pe] の値と変数fig の値とが一致するか否か、すなわち、ポインタpeの指すイベントデータに設定されているノートオンイベントの対象である鍵を押鍵する、フレーズに基づいて割り当てられた指（図２５のＳ１１１６の処理参照）が、変数fig の値で示される指と一致しているか否かが判定され、この判定結果がＮｏのときにのみ、Ｓ３８０３において、上述した所定の動作コストが値として設定されている定数sc＿phraseの値が変数scの値に加算され、その結果の値が改めて変数scに代入される。
【０３２９】
以上の処理を終えた後には、今回のフレーズデータ評価処理が終了し、変数scの値を図３５の処理へ返す。
以上までの処理がフレーズデータ比較評価処理である。
次に、図３３のＳ３０１６において実行される先行音符評価処理について説明する。先行音符評価処理は、現在の評価対象となっているノートオンのイベントデータに変数fig で示される指を割り当てた場合に、それに続くイベントデータに対して同様の手法により指の割り当てを行なったときにおけるその指の評価点（動作コスト）を求める処理である。
【０３３０】
先行音符評価処理の処理内容を図５０にフローチャートで示す。同図に示すフローチャートを図２８のフローチャートと比較すると分かるように、この先行音符評価処理は第二運指情報生成処理と基本的には同様の動作コストを算出する処理を、評価対象のイベントデータに続く次のノートオンのイベントデータについて行ない、得られた動作コストを図３３の処理へ返すものである。
【０３３１】
図５０において、まず、Ｓ４００１では、図２８のＳ２００１と同様の初期設定処理が行なわれる。なお、先行音符評価処理においてその値が操作される各種の変数は、いずれも、第二運指情報生成処理における同一名称の変数の値には影響を及ぼさないものとする。
【０３３２】
Ｓ４００２では、図２８のＳ２００１と同様のフレーズ終端判定処理が実行される。
Ｓ４００３では、後述するＳ４０１５の処理によってポインタpeの値を進めた回数が、図２８のＳ２０１０の処理において設定される変数sakiyomiの値を超えたか否かが判定され、判定結果がＹｅｓのときにのみ今回の先行音符評価処理が終了し、値０を図３３の処理へ返す。
【０３３３】
Ｓ４００４では、ポインタpeの指すイベントデータが曲データの終了を示すものであるか否かが判定され、判定結果がＹｅｓのときにのみ今回の先行音符評価処理が終了し、値０を図３３の処理へ返す。
以降、Ｓ４００５からＳ４０１１にかけての処理は、図２８のＳ２００３からＳ２００４及びＳ２００７からＳ２０１１にかけてと全く同様の処理であり、各指についての評価結果の中で最良（すなわち最小）の動作コストの値が今回の先行音符評価処理の結果として図３３の処理に返される。
【０３３４】
また、Ｓ４０１２からＳ４０１５にかけての処理も図２８のＳ２００５、Ｓ２００６、Ｓ２０１６、Ｓ２０１７の各処理と全く同様のものであり、Ｓ４０１５の処理の後にはＳ４００３へと処理が戻り、上述した処理が繰り返される。
以上までの処理が先行音符評価処理である。
【０３３５】
次に図５１について説明する。同図は、前述した第二運指情報生成処理（図２８）のＳ２０１４において実行される条件変更処理で行なわれる各種条件の微調整の手法のひとつである、曲データのクオンタイズの例を説明する図である。同図において、クオンタイズ前の元の曲データの例を（１−ａ）や（２−ａ）に示し、これらに対してクオンタイズを施した後の曲データを（１−ｂ）及び（２−ｂ）に示す。
【０３３６】
（１−ａ）から（１−ｂ）へのクオンタイズ例では、所定時間よりも短い発音時間の重なりについては、ノートオフの時刻を前倒しにして発音時間の重なりを減らすことによって運指の難度を低下させるようにしている。
（２−ａ）から（２−ｂ）へのクオンタイズ例では、上述したものと同様の手法ではあるが、発音時間の重なりがある程度以上に長い場合には、ノートオフの時刻の変更を行なわないようにするものである。
【０３３７】
前述した条件変更処理においては、このような曲データのクオンタイズを行なうことによって、曲データにより運指情報が生成不能となる問題を回避する。
運指情報生成処理の第二実施例では以上のように構成することによって運指情報の生成が行なわれる。
【０３３８】
なお、図４、図６から図２２まで、図２４、図２５、図２８、図３０、図３３、図３５、図３６、図３８、図４０から図４２まで、図４４から図４７まで、図４９、及び図５０に示したＣＰＵ１５が実行するこれらの処理をコンピュータに行なわせる運指情報生成プログラムを作成してコンピュータで読み取り可能な記憶媒体に記憶させ、そのプログラムを記憶媒体からコンピュータに読み出させて実行させることにより、運指情報を生成する制御をコンピュータに行なわせることも可能である。
【０３３９】
図５２に運指情報生成プログラムを記憶するコンピュータ読み取り可能な記憶媒体の例を示す。同図に示すように、記憶媒体としては、例えば、コンピュータ２１に内蔵若しくは外付けの付属装置として備えられるＲＯＭやハードディスク装置などの記憶装置２２、フロッピーディスク、ＭＯ（光磁気ディスク）、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどといった携帯可能な記憶媒体２３、等が利用できる。
【０３４０】
また、記憶媒体はネットワーク２４を介してコンピュータ２１と接続されるコンピュータであるプログラムサーバ２５が備える記憶装置２６であってもよい。この場合には、制御プログラムを表現するデータ信号で搬送波を変調して得られる伝送信号を、プログラムサーバ２５から伝送媒体であるネットワーク２４を通じて伝送し、コンピュータ２１では受信した伝送信号を復調して制御プログラムを再生することで当該制御プログラムの実行が可能となる。
【０３４１】
【発明の効果】
以上詳細に説明したように、本発明は、楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成するときに、その演奏に関する情報である演奏情報を取得し、その演奏情報で示されている演奏の指示のうち、その指示に応じた運指が可能であるか否かの判定を行ない、その判定の結果に基づいて演奏情報の修正を行ない、そして、その運指を、その修正がなされた演奏情報に応じて生成するようにすることにより、指による演奏操作をそのまま忠実に行なうことが不可能な演奏情報でも、運指を生成することができるようになる。
【０３４２】
あるいは、本発明は、楽曲の演奏を楽器で行なうときの該楽器を操作する指の動きである運指を示す情報を生成するときに、その演奏に関する情報である演奏情報を取得し、各指について、その演奏情報で示されている楽音の発音指示に応じた楽器の操作をその指で行なうことが可能であり、その操作にその指を割り当てることができるか否かの判断を行ない、その操作に割り当てることができると判断された指の中からその操作に割り当てる１つの指を選択するときの選択の優先度を、各指に対して与え、その判断の結果及びその優先度に基づいて、その操作に割り当てる１つの指を、楽曲の先頭から順次１楽音ごとに確定していくようにすることにより、より適切な運指を生成することができる。
【０３４３】
以上のように、本発明のいずれの構成によっても、楽曲の演奏情報から楽器で該楽曲を演奏するための運指を生成することができるという効果を奏する。
【図面の簡単な説明】
【図１】本発明の第一の態様の原理構成を示す図である。
【図２】本発明の第二の態様の原理構成を示す図である。
【図３】本発明を実施する運指情報生成装置の全体構成を示す図である。
【図４】図３に示す運指情報生成装置全体の制御処理の処理内容を示すフローチャートである。
【図５】曲データのデータ構造を示す図である。
【図６】曲データ修正処理の処理内容を示すフローチャートである。
【図７】第一ノートオン処理の処理内容を示すフローチャートである。
【図８】第一ノートオフ処理の処理内容を示すフローチャートである。
【図９】第二ノートオン処理の処理内容を示すフローチャートである。
【図１０】第二ノートオフ処理の処理内容を示すフローチャートである。
【図１１】運指情報生成処理の処理内容を示すフローチャートである。
【図１２】第一指割当判断処理の処理内容を示すフローチャートである。
【図１３】第二指割当判断処理の処理内容を示すフローチャートである。
【図１４】指ｆ０がmaxnote に届くか否かの判定処理の処理内容を示すフローチャートである。
【図１５】指ｆ０がminnote に届くか否かの判定処理の処理内容を示すフローチャートである。
【図１６】第三指割当判断処理の処理内容を示すフローチャートである。
【図１７】第四指割当判断処理の処理内容を示すフローチャートである。
【図１８】第五指割当判断処理の処理内容を示すフローチャートである。
【図１９】第一優先値付加処理の処理内容を示すフローチャートである。
【図２０】第二優先値付加処理の処理内容を示すフローチャートである。
【図２１】第三優先値付加処理の処理内容を示すフローチャートである。
【図２２】第四優先値付加処理の処理内容を示すフローチャートである。
【図２３】第二実施例で行なわれる処理の概要を示す図である。
【図２４】第二実施例における、図３に示す運指情報生成装置全体の制御処理の処理内容を示すフローチャートである。
【図２５】フレーズチェック処理の処理内容を示すフローチャートである。
【図２６】フレーズデータベースのデータ例を示す図（その１）である
【図２７】フレーズデータベースのデータ例を示す図（その２）である
【図２８】第二運指情報生成処理の処理内容を示すフローチャートである。
【図２９】音符情報取得処理の処理内容を説明する図である。
【図３０】フレーズ判定処理の処理内容を示すフローチャートである。
【図３１】指潜りフレーズ判定の原理を説明する図である。
【図３２】使用可能指の検索テーブルを示す図である。
【図３３】割当指評価処理の処理内容を示すフローチャートである。
【図３４】フレーズ先頭評価処理の処理内容を説明する図である。
【図３５】コスト取得処理の処理内容を示すフローチャートである。
【図３６】指の開き評価処理の処理内容を示すフローチャートである。
【図３７】指の開き評価処理において参照されるテーブルの例を示す図である。
【図３８】黒鍵評価処理の処理内容を示すフローチャートである。
【図３９】ブロックの概念を説明する図である。
【図４０】手の移動評価処理の処理内容を示すフローチャートである。
【図４１】手の位置の取得処理の処理内容を示すフローチャートである。
【図４２】手の範囲の取得処理の処理内容を示すフローチャートである。
【図４３】手の範囲の取得処理において参照されるテーブルの例を示す図である。
【図４４】手位置評価点算出処理の処理内容を示すフローチャートである。
【図４５】押鍵時間評価処理の処理内容を示すフローチャートである。
【図４６】連続打鍵評価処理の処理内容を示すフローチャートである。
【図４７】指潜り評価処理の処理内容を示すフローチャートである。
【図４８】指潜り評価処理において参照されるテーブルの例を示す図である。
【図４９】フレーズデータ比較評価処理の処理内容を示すフローチャートである。
【図５０】先行音符評価処理の処理内容を示すフローチャートである。
【図５１】曲データのクオンタイズの例を示す図である。
【図５２】運指情報生成プログラムを記憶するコンピュータで読み取り可能な記憶媒体の例を示す図である。
【符号の説明】
１  演奏情報取得手段
２  運指可能性判定手段
３  演奏情報修正手段
４  運指情報生成手段
５  指割当判断手段
６  優先値付与手段
７  指割当確定手段
１１  表示部
１２  操作部
１３  音源
１４  サウンドシステム
１５  ＣＰＵ
１６  ＲＯＭ
１７  ＲＡＭ
１８  データ入力部
１９  バス
２１  コンピュータ
２２  記憶装置
２３  携帯可能記憶媒体
２４  ネットワーク
２５  プログラムサーバ
２６  記憶装置
５１  ＳＭＦ（スタンダードＭＩＤＩファイル）
５２  曲データ修正処理
５３  使用可能な指の導出処理
５４  手サイズデータ・鍵盤サイズデータ
５５  手・指の動作コスト
５６  コストの算出処理
５７  フレーズデータベース
【図１】
0004182637.tif 000002
【図２】
0004182637.tif 000003
【図３】
0004182637.tif 000004
【図４】
0004182637.tif 000005
【図５】
0004182637.tif 000006
【図６】
0004182637.tif 000007
【図７】
0004182637.tif 000008
【図８】
0004182637.tif 000009
【図９】
0004182637.tif 000010
【図１０】
0004182637.tif 000011
【図１１】
0004182637.tif 000012
【図１２】
0004182637.tif 000013
【図１３】
0004182637.tif 000014
【図１４】
0004182637.tif 000015
【図１５】
0004182637.tif 000016
【図１６】
0004182637.tif 000017
【図１７】
0004182637.tif 000018
【図１８】
0004182637.tif 000019
【図１９】
0004182637.tif 000020
【図２０】
0004182637.tif 000021
【図２１】
0004182637.tif 000022
【図２２】
0004182637.tif 000023
【図２３】
0004182637.tif 000024
【図２４】
0004182637.tif 000025
【図２５】
0004182637.tif 000026
【図２６】
0004182637.tif 000027
【図２７】
0004182637.tif 000028
【図２８】
0004182637.tif 000029
【図２９】
0004182637.tif 000030
【図３０】
0004182637.tif 000031
【図３２】
0004182637.tif 000032
【図３３】
0004182637.tif 000033
【図３５】
0004182637.tif 000034
【図３６】
0004182637.tif 000035
【図３７】
0004182637.tif 000036
【図３８】
0004182637.tif 000037
【図３９】
0004182637.tif 000038
【図４０】
0004182637.tif 000039
【図４１】
0004182637.tif 000040
【図４２】
0004182637.tif 000041
【図４３】
0004182637.tif 000042
【図４４】
0004182637.tif 000043
【図４５】
0004182637.tif 000044
【図４６】
0004182637.tif 000045
【図４７】
0004182637.tif 000046
【図４８】
0004182637.tif 000047
【図４９】
0004182637.tif 000048
【図５０】
0004182637.tif 000049
【図５１】
0004182637.tif 000050
【図５２】
0004182637.tif 000051
【図３１】
0004182637.tif 000052
【図３４】
0004182637.tif 000053