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