(57)【特許請求の範囲】
【請求項１】
夫々発音開始タイミング、発音すべき楽音の長さを示す発音時間、音高、および、発音すべき楽音の大きさを示すベロシティを含む複数の音符データを格納する音符データバッファと、
発音中データバッファと、
発音開始タイミングが到来した音符データを前記音符データバッファ内から検索し、当該検索された音符データを特定する発音中データを前記発音中データバッファに格納する格納手段と、
演奏操作に基づくタイミングで入力される音高情報を順次受け入れる入力手段と、
前記発音中データバッファに格納された発音中データの中から、発音が行われていないことを示す発音保留フラグを有し、かつ当該発音中データにより特定される音符データの発音開始タイミングと前記入力手段による音高情報の入力タイミングとの差が所定時間内の発音中データを検索する第１の検索手段と、
この第１の検索手段により検索された発音中データにより特定される音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第１の判定手段と、
この第１の判定手段により所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示するとともに、当該音符データに対応する発音中データに含まれる発音保留フラグを消去する第１の発音指示手段と、
前記音符データバッファに格納された音符データの中から、発音開始タイミングが前記音高情報の入力タイミングより後でかつ両タイミングの差が所定時間内の音符データを検索する第２の検索手段と、
この第２の検索手段により検索された音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第２の判定手段と、
この第２の判定手段により所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示する第２の発音指示手段と、
を有し、
前記第１の判定手段および第２の判定手段は、前記発音開始タイミングと、前記押鍵タイミングとの差の絶対値、および、前記発音時間に基づいて、前記差の絶対値が大きくなるのに伴って、前記音源にて発音すべき楽音のベロシティを小さくすることを特徴とする演奏練習支援装置。
【請求項２】
前記第１の判定手段および第２の判定手段は、前記発音時間に対する差の絶対値の比を算出し、前記比が小さくなるのに伴って、前記音源にて発音すべき楽音のベロシティを大きくすることを特徴とする請求項１に記載の演奏練習支援装置。
【請求項３】
前記入力手段は、押鍵された鍵に対応する音高情報を当該押鍵のタイミングに応じて出力する鍵盤が接続されるとともに、前記音符データはさらに、前記音高に対応する前記鍵盤上の鍵の位置を示す座標、および、押鍵すべき指を示す情報を含み、
前記音符データの前記鍵の座標および押鍵すべき指を示す情報に基づいて、当該押鍵すべき指で押鍵した場合に他の指の鍵盤上の位置を示す指座標情報を生成し、当該生成された指座標情報を前記音符データバッファに格納する支援情報生成手段をさらに備え、
前記第１及び第２の判定手段は、前記指座標情報を参照して、前記音高情報が示す音高に対応する鍵の座標が、特定の２つの指の座標の間に位置するときに前記所定範囲内であると判定することを特徴とする請求項１または２に記載の演奏練習支援装置。
【請求項４】
前記支援情報生成手段が、前記鍵の座標および押鍵すべき指を示す情報に基づいて、隣接する指が、それぞれ、隣接する白鍵に位置するように、前記他の指の鍵盤上の位置を示す指座標情報を生成することを特徴とする請求項３に記載の演奏練習支援装置。
【請求項５】
前記支援情報生成手段は、前記音符データが和音構成音のひとつを示す場合、他の和音構成音を示す音符データの音高に対応する鍵の座標を指座標情報とすることを特徴とする請求項４に記載の演奏練習支援装置。
【請求項６】
前記特定の２つの指の座標は、親指の座標および小指の座標であることを特徴とする請求項３ないし５の何れか一項に記載の演奏練習支援装置。
【請求項７】
コンピュータに、
夫々発音開始タイミング、音高を含む複数の音符データを格納する音符データバッファから、発音開始タイミングが到来した音符データを検索し、当該検索された音符データを特定する情報及び発音が行われていないことを示す発音保留フラグを含む発音中データを発音中データバッファに格納するステップと、
演奏操作に基づくタイミングで音高情報を順次受け入れるステップと、
前記発音中データバッファに格納された発音中データの中から、前記発音保留フラグを有し、かつ当該発音中データにより特定される音符データの発音開始タイミングと前記音高情報の入力タイミングとの差が所定時間内の発音中データを検索するステップと、
この検索された発音中データにより特定される音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第１の判定ステップと、
所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示するとともに、当該音符データに対応する発音中データに含まれる発音保留フラグを消去するステップと、
前記音符データバッファに格納された音符データの中から、発音開始タイミングが前記音高情報の入力タイミングより後でかつ両タイミングの差が所定時間内の音符データを検索するステップと、
この検索された音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第２の判定ステップと、
所定範囲内と判定された音符データの音高に基づいた楽音の発音を前記音源に指示するステップと、
を実行させ、
前記第１の判定ステップおよび第２の判定ステップが、
前記発音開始タイミングと、前記押鍵タイミングとの差の絶対値、および、前記発音時間に基づいて、前記差の絶対値が大きくなるのに伴って、前記音源にて発音すべき楽音のベロシティを小さくするステップを含むことを特徴とする演奏練習支援処理のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、鍵盤楽器の演奏の練習を支援する装置および練習を支援するプログラムに関する。
【背景技術】
【０００２】
従来、演奏者の演奏レベルの向上を目的として、次に操作すべき鍵盤をＬＥＤ光などにより示すような機能（ナビゲート機能）がよく知られている。この技術を利用することで、演奏者は、楽器を独習することができる。
【０００３】
たとえば、特許文献１には、発音開始タイミングに対する押鍵タイミングの教習を、曲データの編集を行うことなく容易に実現する演奏教習装置が開示されている。この演奏教習装置においては、音高データ、発音開始タイミングを示す時間データ、発音の強弱又は消音を示すベロシティデータからなるイベントデータを読み出し、発音のイベントデータの発音開始タイミングを経過した後もその鍵が操作されない場合には、発音のイベントデータを変更した消音のイベントデータを生成し、発音のイベントデータ及び変更した消音のイベントデータに応じて、点灯信号及び消灯信号を生成して、押鍵すべき鍵内のＬＥＤに交互に送出して点滅させる。
【特許文献１】特開２０００−２６７６６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
たとえば、演奏教習装置においては、複数の教習段階を設けるのが望ましい。たとえば、押鍵するタイミングを知るために、ＬＥＤが点灯するタイミングから所定の範囲内に何れかの鍵が押鍵されると、処理対象が次のイベントデータとなり、楽曲が進行するような段階、正しい鍵を知るために、ＬＥＤが点灯した鍵盤が押鍵されると、処理対象が次のイベントデータとなり、楽曲が進行するような段階、並びに、ＬＥＤが点灯するタイミングから所定範囲内に正しい鍵（ＬＥＤが点灯した鍵）が押鍵されると、処理対象が次のイベントデータとなり、楽曲が進行するような段階を考えることができる。
【０００５】
しかしながら、押鍵すべき鍵の移動が著しく大きい楽曲や、短時間で多数の移動が生じるような楽曲においては、正しい押鍵タイミング、および、正しい鍵位置を同時に認識することが難しい。したがって、上記各段階を効果的に結びつけるような中間的な段階を設けることが望ましい。
【０００６】
本発明は、演奏者の練習の進度にしたがって適切に押鍵タイミングおよび鍵位置を認識することを支援する演奏練習支援装置および演奏練習支援処理のプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の目的は、夫々発音開始タイミング、発音すべき楽音の長さを示す発音時間、音高、および、発音すべき楽音の大きさを示すベロシティを含む複数の音符データを格納する音符データバッファと、
発音中データバッファと、
発音開始タイミングが到来した音符データを前記音符データバッファ内から検索し、当該検索された音符データを特定する発音中データを前記発音中データバッファに格納する格納手段と、
演奏操作に基づくタイミングで入力される音高情報を順次受け入れる入力手段と、
前記発音中データバッファに格納された発音中データの中から、発音が行われていないことを示す発音保留フラグを有し、かつ当該発音中データにより特定される音符データの発音開始タイミングと前記入力手段による音高情報の入力タイミングとの差が所定時間内の発音中データを検索する第１の検索手段と、
この第１の検索手段により検索された発音中データにより特定される音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第１の判定手段と、
この第１の判定手段により所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示するとともに、当該音符データに対応する発音中データに含まれる発音保留フラグを消去する第１の発音指示手段と、
前記音符データバッファに格納された音符データの中から、発音開始タイミングが前記音高情報の入力タイミングより後でかつ両タイミングの差が所定時間内の音符データを検索する第２の検索手段と、
この第２の検索手段により検索された音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第２の判定手段と、
この第２の判定手段により所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示する第２の発音指示手段と、
を有し、
前記第１の判定手段および第２の判定手段は、前記発音開始タイミングと、前記押鍵タイミングとの差の絶対値、および、前記発音時間に基づいて、前記差の絶対値が大きくなるのに伴って、前記音源にて発音すべき楽音のベロシティを小さくすることを特徴とする演奏練習支援装置により達成される。
【０００８】
好ましい実施態様においては、前記第１の判定手段および第２の判定手段は、前記発音時間に対する差の絶対値の比を算出し、前記比が小さくなるのに伴って、前記音源にて発音すべき楽音のベロシティを大きくする。
【０００９】
より好ましい実施態様においては、前記入力手段は、押鍵された鍵に対応する音高情報を当該押鍵のタイミングに応じて出力する鍵盤が接続されるとともに、前記音符データはさらに、前記音高に対応する前記鍵盤上の鍵の位置を示す座標、および、押鍵すべき指を示す情報を含み、
前記音符データの前記鍵の座標および押鍵すべき指を示す情報に基づいて、当該押鍵すべき指で押鍵した場合に他の指の鍵盤上の位置を示す指座標情報を生成し、当該生成された指座標情報を前記音符データバッファに格納する支援情報生成手段をさらに備え、
前記第１及び第２の判定手段は、前記指座標情報を参照して、前記音高情報が示す音高に対応する鍵の座標が、特定の２つの指の座標の間に位置するときに前記所定範囲内であると判定する。
【００１０】
別の好ましい実施態様においては、前記支援情報生成手段が、前記鍵の座標および押鍵すべき指を示す情報に基づいて、隣接する指が、それぞれ、隣接する白鍵に位置するように、前記他の指の鍵盤上の位置を示す指座標情報を生成する。
【００１１】
さらに別の好ましい実施態様においては、前記支援情報生成手段は、前記音符データが和音構成音のひとつを示す場合、他の和音構成音を示す音符データの音高に対応する鍵の座標を指座標情報とする。
【００１２】
たとえば、前記特定の２つの指の座標は、親指の座標および小指の座標である。
【００１３】
また、本発明の目的は、コンピュータに、
夫々発音開始タイミング、音高を含む複数の音符データを格納する音符データバッファから、発音開始タイミングが到来した音符データを検索し、当該検索された音符データを特定する情報及び発音が行われていないことを示す発音保留フラグを含む発音中データを発音中データバッファに格納するステップと、
演奏操作に基づくタイミングで音高情報を順次受け入れるステップと、
前記発音中データバッファに格納された発音中データの中から、前記発音保留フラグを有し、かつ当該発音中データにより特定される音符データの発音開始タイミングと前記音高情報の入力タイミングとの差が所定時間内の発音中データを検索するステップと、
この検索された発音中データにより特定される音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第１の判定ステップと、
所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示するとともに、当該音符データに対応する発音中データに含まれる発音保留フラグを消去するステップと、
前記音符データバッファに格納された音符データの中から、発音開始タイミングが前記音高情報の入力タイミングより後でかつ両タイミングの差が所定時間内の音符データを検索するステップと、
この検索された音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定する第２の判定ステップと、
所定範囲内と判定された音符データの音高に基づいた楽音の発音を前記音源に指示するステップと、
を実行させ、
前記第１の判定ステップおよび第２の判定ステップが、
前記発音開始タイミングと、前記押鍵タイミングとの差の絶対値、および、前記発音時間に基づいて、前記差の絶対値が大きくなるのに伴って、前記音源にて発音すべき楽音のベロシティを小さくするステップを含むことを特徴とする演奏練習支援処理のプログラムにより達成される。
【発明の効果】
【００１４】
本発明によれば、演奏者の練習の進度にしたがって適切に押鍵タイミングおよび鍵位置を認識することを支援する演奏練習支援装置および演奏練習支援処理のプログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【００１５】
以下、添付図面を参照して、本発明の実施の形態について説明する。図１は、本実施の形態にかかる演奏練習支援システムのハードウェア構成を示すブロックダイヤグラムである。図１に示すように、演奏練習支援システムのハードウェアは、ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、入力装置１８、表示装置２０、ＭＩＤＩインタフェース（Ｉ／Ｆ）２２、２４、鍵盤２６、楽音生成回路２８およびサウンドシステム４０を含む。
【００１６】
図１の例では、ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、入力装置１８、表示装置２０およびＭＩＤＩ＿Ｉ／Ｆ２２は、通常のパーソナルコンピュータにより実現され得る。また、ＭＩＤＩ＿Ｉ／Ｆ２４、鍵盤２６、楽音生成回路２８およびサウンドシステム３０は、通常の電子鍵盤楽器により実現され得る。したがって、本実施の形態では、パーソナルコンピュータと電子鍵盤楽器とをＭＩＤＩケーブルで接続することにより、演奏練習支援システムを構成することができる。
【００１７】
ＣＰＵ１４は、演奏練習支援システムの制御、後述する音符データ等の読み出し、演奏支援情報の生成、ＭＩＤＩ＿Ｉ／Ｆ２２から出力すべきＭＩＤＩデータの生成などの処理を実行する。ＲＯＭ１６は、プログラムやプログラムの実行の際に使用される定数などを記憶する。ＲＡＭ１４は、プログラムの実行の過程で必要な変数、入力データ、出力データなどを一時的に記憶する。
【００１８】
入力装置１８は、キーボードやマウスを含み、演奏者により入力装置１８に入力された情報をＣＰＵ１２に与える。表示装置１２の画面上には、楽譜や鍵盤を描いた画像データが表示され得る。
【００１９】
楽音生成回路２８は、いわゆる音源であり、ＣＰＵ１２からＭＩＤＩ＿Ｉ／Ｆ２４を介して与えられたＭＩＤＩデータに基づいて、所定の音高でかつ所定の音量（ベロシティ）の楽音データを生成する。鍵盤２６は、演奏者が押鍵した鍵の情報を押鍵情報として、また、離鍵した件の情報を離鍵情報として出力する。押鍵情報は、ＭＩＤＩ＿Ｉ／Ｆ２２、２４を介して、ＣＰＵ１２に伝達される。
【００２０】
サウンドシステム３０は、増幅器、スピーカなどを含み、楽音生成回路２８により生成された楽音データに基づく音響信号を出力する。
【００２１】
図２は、本実施の形態にかかる演奏練習支援システムの概要を示すブロックダイヤグラムである。図２に示すように、本実施の形態にかかる演奏練習支援システムにおいては、後述する発音中データや音符データのうち、演奏者が演奏すべきパートのデータ（演奏データ）が、演奏支援情報生成部３２により取得される。演奏支援情報生成部３２は、演奏データに基づいて、演奏者が押鍵すべき指を指定する運指情報、および、演奏者の指の位置を示す指座標情報を生成する（符号２０１参照）。
【００２２】
また、鍵盤２６からは、前述したように押鍵情報および離鍵情報（符号２０２参照）が与えられる。演奏動作正誤判定部３４は、運指情報・指座標情報２０１と、押鍵情報・離鍵情報２０２に基づいて、演奏の正誤を判定する。また、楽曲データのうち伴奏パートのデータ（伴奏データ）は、再生処理部３６により取得される。演奏の正誤の情報とは、押鍵すべきタイミングで、押鍵すべき鍵が押鍵されたか否かを示す情報、ずれが生じている場合には、タイミングのずれの程度および音高のずれの程度を示す情報などを含む。
【００２３】
再生処理部３６は、演奏の正誤情報にしたがって、演奏パートのデータのうち所定の条件を満たすデータに対応する楽音を再生し、或いは、タイミングのずれや音高のずれにしたがってベロシティを変化させた楽音を再生する。また、伴奏データについては、当該伴奏データに示される音高およびベロシティの楽音を再生する。
【００２４】
図２に示す演奏支援情報生成部３２および演奏動作正誤判定部３４は、図１に示すＣＰＵ１２により実現される。また、図２に示す再生処理部３６は、図１に示すＣＰＵ１２および楽音生成回路２８により実現される。
【００２５】
概略的に、本実施の形態にかかる演奏練習支援システムにおいては、
第１の検索手段が、後述する発音中データバッファに格納された発音中データの中から、発音が行われていないことを示す発音保留フラグを有し、かつ当該発音中データにより特定される音符データの発音開始タイミングと、入力手段による音高情報の入力タイミングとの差が所定時間内の発音中データを検索し、
第１の判定手段が、第１の検索手段により検索された発音中データにより特定される音符データの音高と音高情報の音高との差が所定範囲内であるか否か判定し、
第１の発音指示手段が、第１の判定手段により所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示するとともに、当該音符データに対応する発音中データに含まれる発音保留フラグを消去する。
【００２６】
また、第２の検索手段が、音符データバッファに格納された音符データの中から、発音開始タイミングが音高情報の入力タイミングより後でかつ両タイミングの差が所定時間内の音符データを検索し、
第２の判定手段が、第２の検索手段により検索された音符データの音高と前記音高情報の音高との差が所定範囲内であるか否か判定し、
第２の発音指示手段が、第２の判定手段により所定範囲内と判定された音符データの音高に基づいた楽音の発音を接続された音源に指示する。
【００２７】
上記第１の判定手段および第２の判定手段は、発音開始タイミングと、押鍵タイミングとの差の絶対値、および、発音時間に基づいて、差の絶対値が大きくなるのに伴って、音源にて発音すべき楽音のベロシティを小さくする。
【００２８】
また、支援情報生成手段は、音符データの鍵の座標および押鍵すべき指を示す情報に基づいて、当該押鍵すべき指で押鍵した場合に他の指の鍵盤上の位置を示す指座標情報を生成し、当該生成された指座標情報を前記音符データバッファに格納する。
【００２９】
第１および第２の検索手段、第１および第２の発音指示手段は、図２の再生処理部３６にほぼ相当する。第１および第２の判定手段は、図２の演奏動作性誤判定部３４に相当する。また、支援情報生成手段は、図２の演奏支援情報生成部３２に相当する。
【００３０】
図３（ａ）は、トラックごとの属性を示すトラックデータを説明する図である。図３（ａ）に示すように、トラックデータバッファ３００には、トラックごとのデータ（トラックデータ）を含む。トラックデータのレコードは、項目としてトラックの種類を示すｉＰｌａｙＴｙｐｅ、トラック先頭の音符データのポインタであるｐＦｉｒｓｔＭＥ、および、出力チャンネルを示すｉＣｈａｎｎｅｌを有している。トラック種類ｉＰｌａｙＴｙｐｅの値「０」はそのトラックが右手パートであることを示し、「１」は左手パートであることを示し、また、「２」は伴奏パートであることを示す。したがって、あるチャンネルについて、トラック種類ｉＰｌａｙＴｙｐｅが「０」または「１」である場合、そのトラックの音符データは「演奏データ」を構成する。また、トラック種類ｉＰｌａｙＴｙｐｅが「２」である場合には、そのトラックの音符データは「伴奏データ」を構成する。
【００３１】
図４は、音符データの構成を示す図である。図４に示すように、音符データバッファ４００には、ミディイベント（ＭｉｄｉＥｖｅｎｔ）ごとのデータ（音符データ）が含まれる。音符データのレコードは、発音開始時刻ＩＴｉｍｅ、発音時間ＩＧａｔｅ、発音開始時刻（絶対時刻）ＩＴｍｓｅｃ、音高（ピッチ）Ｐｉｔｃｈ、ベロシティｉＶｅｌ、鍵盤の座標ｉＰｏｓＸ、再生時の状態ｉＰｌａｙＳｔａｔｕｓ、割り振られた運指情報ｃｆｉｇ、右手左手何れかのパート情報ｉＨａｎｄ、各指の横方向の座標ｓｆｉｇＰｏｓＸ［０］〜ｓｆｉｇＰｏｓＸ［４］、手の横方向の座標ｓＨａｎｄＰｏｓＸ、和音構成音フラグｃＩｓＨａｒｍ、和音の先頭音（最下音）へのポインタｐＨＴｏｐ、和音の終端音（最高音）へのポインタｐＨＴａｉｌ、次の音符データへのポインタｐｒｅｖ、および、前の音符データへのポインタｎｅｘｔを有する。
【００３２】
発音開始時刻ＩＴｉｍｅ、発音時間ＩＧａｔｅは、システムのクロックにしたがった単位での時刻（システム時刻）、時間であり、その一方、発音開始時刻（絶対時刻）ＩＴｍｓｅｃはミリ秒を単位とする絶対時刻である。
【００３３】
鍵盤座標ｉＰｏｓＸは以下のような値となる。低音側の鍵から高音側の鍵に向けて、各白鍵には、０、２、４、６、というように増大する偶数が割り当てられる。その一方、黒鍵には、隣接する２つの白鍵の座標の値の中間の奇数が割り当てられる。
【００３４】
たとえば、Ｃ１を最低音とする鍵盤であれば、以下のような鍵盤座標となる。
【００３５】
Ｃ１：０
Ｃ＃１：１
Ｄ１：２
Ｄ＃１：３
Ｅ１：４
Ｆ１：６
Ｆ＃１：７
Ｇ１：８
Ｇ＃１：９
Ａ１：１０
Ａ＃１：１１
Ｂ１：１２
Ｃ２：１４
：
再生時の状態ｉＰｌａｙＳｔａｔｕｓは、「０」〜「３」の値をとり、それぞれ、以下のような意味を示す。「０」であれば消音状態であること、「１」であれば、ミディイベントが存在し、かつ、ノートオンが実行されていること、「２」であれば、ミディイベントが存在しているが、ノートオンがまだ実行されていないこと、「３」であれば、ノートオンのみが実行されていること、を示す。
【００３６】
ここに、ミディイベントが存在することは、発音開始時刻に到達していることを意味する。その一方、ノートオンが実行されていることは、演奏者によりそのミディイベントに対応する押鍵がされていることを意味する。
【００３７】
運指情報ｃｆｉｇは、このレコードに対応する鍵を押鍵すべき指を示す。また、パート情報ｉＨａｎｄは、右手の指で押鍵すべきか、或いは、左手の指で押鍵すべきかを示す。横方向の座標ｓｆｉｇＰｏｓＸ［０］〜ｓｆｉｇＰｏｓＸ［４］は、このレコードに対応する押鍵をする際に、それぞれの指（０：親指〜４：小指）がどの位置（座標）にいるかを示す。
【００３８】
手の横方向の座標ｓＨａｎｄＰｏｓＸは、手の位置を示す。
【００３９】
なお、ここにいう座標とは、上述した鍵盤座標に相当する。つまり、ｉＨａｎｄが左手を示し、かつ、ｓｆｉｇＰｏｓＸ［４］＝１４であれば、左手の小指が鍵Ｃ２に位置すべきことを示す。
【００４０】
和音構成音フラグｃｌｓＨａｒｍは、当該レコードで特定される音符が和音構成音かを示す。ｃｌｓＨａｒｍが「０」であることは、その音符が、和音構成音ではないことを示す。その一方、ｃｌｓＨａｒｍが「１」であることは、その音符が和音構成音であることを意味する。
【００４１】
なお、図４において、符号４０１および４０２で示す一群のデータ項目が演奏支援情報を構成する。
【００４２】
図３（ｂ）および図３（ｃ）は、本実施の形態にかかる再生制御データを示す図である。再生制御データは、再生処理時の制御のためのデータ構造体である。
【００４３】
図３（ｂ）は、基本データバッファを示し、図３（ｃ）は、発音中の音符データの格納バッファ（発音中データバッファ）を示す。図３（ｂ）に示すように、基本データバッファ３０１には基本データが格納される。基本データは、現在時刻ＩＮｏｗＴｉｃｋ、各トラックの次の音符データへのポインタＭｉｄｉＥｖｅｎｔｓ［０］〜［ｎ］、演奏状態ｉＰＳｔａｔｕｓ、待機開始時刻ＩｗａｉｔＳｔａｒｔ、テンポｉＮｏｗＴｅｍｐｏ、最後に上記現在時刻ＩＮｏｗＴｉｃｋが更新されたシステム時刻ＩＴｉｃｋＵｐｄａｔｅ、途中停止用フラグｉｎｔｅｒｒｕｐｔｉｏｎ、および、発音中の音符データｍｅＰｌａｙｉｎｇ［０］〜［Ｎ］が含まれる。次の音符データへのポインタＭｉｄｉＥｖｅｎｔｓ［０］〜［ｎ］は、それぞれ、音符データバッファ４００の音符データを特定するポインタである。
【００４４】
発音中の音符データｍｅＰｌａｙｉｎｇ［０］〜［Ｎ］については、それぞれ発音中データバッファ３０２にさらに必要な情報が格納される。図３（ｃ）に示すように、発音中データのレコードは、各ＭｉｄｉＥｖｅｎｔについて、音符データ（ＭｉｄｉＥｖｅｎｔ［］）へのポインタｐＭＥ、発音保留フラグｉＳｔａｔｕｓ、および、押鍵の有無を示す押鍵フラグｉＳｔａｔｕｓを含む。
【００４５】
押鍵フラグｉＳｔａｔｕｓが「０」であることは押鍵がまだされていないことを示し、押鍵フラグが「１」であることは、押鍵があったことを示す。
【００４６】
基本データの演奏状態ｉＰＳｔａｔｕｓが「０」であることは、停止されている状態を示し、「１」であることは再生中であることを示す。また、ｉＰＳｔａｔｕｓが「２」であることは、待機中であることを示す。
【００４７】
また、発音中データの発音保留フラグｉＳｔａｔｕｓが「０」であることは、発音保留中であることを示し、「１」であることは、ミディアウト（ＭＩＤＩ−ＯＵＴ）済であることを示す。
【００４８】
なお、図３および図４に示すトラックデータバッファ、音符データバッファ、基本データバッファおよび発音中データバッファは、ＲＡＭ１４およびＲＯＭ１６に設けられる。予め定められたデータは、ＲＯＭ１６に記憶され、処理により生成されたデータは、ＲＡＭ１４に記憶される。
【００４９】
図５は、本実施の形態にかかる演奏練習支援システムにて実行されるメインフローの例を示す図である。図１に示すように、ＣＰＵ１２は、ＲＡＭ１４に記憶された、処理において使用されるパラメータやフラグを初期化する（ステップ５０１）。次いで、ＣＰＵ１２は、ＲＯＭ１６やＲＡＭ１４から、音符データなどを読み込み（ステップ５０２）、演奏支援情報を生成し、ＲＡＭ１４に記憶する（ステップ５０３）。
【００５０】
ここに、ステップ５０２においては、図３や図４に示す、トラックデータ、発音中データ、基本データも、ＲＡＭ１４やＲＯＭ１６から必要に応じて読み出される。演奏支援情報の生成（ステップ５０３）については後に詳述する。
【００５１】
ＣＰＵ１２は、演奏者による入力装置１８の操作によって終了指示を受け付けていない場合には（ステップ５０４でＮｏ）、入力装置１８の操作による再生指示を受け付けたか否かを判断する（ステップ５０５）。ステップ５０５でＹｅｓと判断された場合には、ＣＰＵ１２は、再生処理を起動させ（ステップ５０６）、また、ＭＩＤＩ−ＩＮ処理を起動させる（ステップ５０７）。再生処理およびＭＩＤＩ−ＩＮ処理については後に詳述する。
【００５２】
再生中で、かつ、停止指示を受け付けた場合には（ステップ５０８でＹｅｓ）、ＣＰＵ１２は、図３（ｂ）の基本データ中の途中停止用フラグｉｎｔｅｒｒｕｐｔｉｏｎを「ＴＲＵＥ」にセットする（ステップ５０９）。
【００５３】
ステップ５０５〜５０９は、終了指示が受け付けられる（ステップ５０４でＹｅｓ）まで繰り返される。
【００５４】
図５のステップ５０３の演奏支援情報生成処理についてより詳細に説明する。図６は、演奏支援情報生成処理の例を示すフローチャートである。演奏支援情報生成部３２（図２参照）は、処理で使用する変数を初期化して（ステップ６０１）、音符データごとに（つまり音符ごとに）、押鍵する指の座標を算出して、座標を示す情報等を音符データのレコード中、演奏支援情報としてＲＡＭ１４に格納する（ステップ６０２）。また、演奏支援情報生成部３２は、上記押鍵している状況（現在の状況）を考慮して他の指の座標を算出し、当該座標を示す情報等を、ＲＡＭ１４中の音符データバッファに、演奏支援情報として格納する（ステップ６０３）。
【００５５】
次に、ステップ６０２の押鍵する指の座標設定処理について図７を参照して説明する。図７に示すように、演奏支援情報生成部３２は、処理対象の音符データを特定するポインタｍｅを音符データの先頭レコードに設定する（ステップ７０１）。演奏支援情報生成部３２は、全ての音符データについて処理が終了するまで（ステップ７０２でＹｅｓ）、ステップ７０３以下の処理を実行する。
【００５６】
まず、演奏支援情報生成部３２は、指を使っている否か、つまり、押鍵しているか否かを示すフラグｉＦｉｇＯｎ［０］〜［４］、同時に押鍵する鍵の中に黒鍵があるか否かを示すフラグｉＢＫ［０］〜［４］、および、処理対象となる指を特定するパラメータｉｆｉｇをそれぞれ初期化する（ステップ７０３）。
【００５７】
演奏支援情報生成部３２は、処理対象となる指を示すパラメータｉｆｉｇが５以上である場合、つまり、５つの指のそれぞれについての処理が終了していれば（ステップ７０４でＮｏ）、ポインタｍｅを次の音符データに移動させる（ステップ７０５）。
【００５８】
これに対して、パラメータｉｆｉｇが５より小さい場合（ステップ７０４でＹｅｓ）には、演奏支援情報生成部３２は、当該音符データについて、ｉｆｉｇで示される指の横方向の座標ｓｆｉｇＰｏｓＸ［ｉｆｉｇ］の初期値として「−１」を与える（ステップ７０６）。次いで、演奏支援情報生成部３２は、ｉｆｉｇが、処理対象となるレコードに割符振られた運指ｃｆｉｇと一致する場合には（ステップ７０７でＹｅｓ）、処理対象となる指ｉｆｉｇの横方向の座標ｓｆｉｇＰｏｓＸ［ｉｆｉｇ］として、当該音符データの鍵盤の座標ｉＰｏｓＸをセットする（ステップ７０８）。
【００５９】
次いで、演奏支援情報生成部３２は、当該音符データについて、和音フラグｃＩｓＨａｒｍが０より大きい場合、つまり当該音符データにより特定される音符が和音構成音である場合には（ステップ７０９でＹｅｓ）、同じタイミングで押鍵する指の座標、つまり、和音として押鍵する指の座標の設定処理を実行する（ステップ７１０）。
【００６０】
次いで、演奏支援情報生成部３２は、指を特定するパラメータｉｆｉｇをインクリメントする（ステップ７１１）。
【００６１】
図８は、ステップ７０８の同じタイミングで押鍵する指の座標の設定処理の例を示すフローチャートである。図８に示すように、演奏支援情報生成部３２は、ポインタｍｅｈとして、処理対象となっている音符データにおける和音の先頭音へのポインタｐＨＴｏｐをセットする（ステップ８０１）。
【００６２】
また、演奏支援情報生成部３２は、パラメータｃｆｉｇＨとして、当該音符データについて割り振られた運指ｃｆｉｇをセットする（ステップ８０２）とともに、パラメータｉＦｉｇＯｎ［ｃｆｉｇＨ］として「１」をセットする(ステップ８０３)。
【００６３】
次いで、演奏支援情報生成部３２は、当該音符データについて、指ｃｆｉｇＨに関する指の座標ｓｆｉｇＰｏｓＸ［ｃｆｉｇＨ］について、上記ポインタｍｅｈで特定される音符データについての鍵盤の座標ｉＰｏｓＸをセットする(ステップ８０４)。これらセットされた値は、ＲＡＭ１４に記憶される。
【００６４】
演奏支援情報生成部３２は、ポインタｍｅｈが、処理対象となっている音符データの和音の終端音へのポインタｐＨＴａｉｌと一致するか否かを判断し（ステップ８０５）、ステップ８０５でＹｅｓと判断される場合には、ステップ７１１に進む。ステップ８０５でＮｏと判断された場合には、ポインタｍｅｈを次の音符データを示すように移動させて（ステップ８０６）、ステップ８０２に戻る。
【００６５】
図８の処理は以下のような意味を有する。先に述べたようにｉＦｉｇＯｎ［０］〜［４］は、それぞれ、指を使っているかどうかを示すフラグである。図８の処理によって、処理対象の音符データにおいて、和音構成音を押鍵すべき指の横方向の座標ｓｆｉｇＰｏｓＸ［ｃｆｉｇＨ］として、当該和音構成音の音符データのレコード中の、割り振られた運指ｃｆｉｇがセットされることになる。
【００６６】
図７および図８の処理によって、ある音符データに対応する音符、および、当該音符が和音構成音であった場合には、当該和音構成音の音符に基づいて、その音符を押鍵する際における押鍵している指の横方向の座標ｓｆｉｇＰｏｓＸが決定され、決定された値が、ＲＡＭ１４に記憶される。
【００６７】
次に、図６のステップ６０３についてより詳細に説明する。図９〜図１１は、現在の状況を考慮した座標設定処理の例を示すフローチャートである。図９に示すように、演奏支援情報生成部３２は、処理対象の音符データを特定するポインタｍｅを音符データの先頭レコードに設定する（ステップ９０１）。演奏支援情報生成部３２は、全ての音符データについて処理が終了するまで（ステップ９０２でＹｅｓ）、ステップ９０３以下の処理を実行する。
【００６８】
まず、演奏支援情報生成部３２は、図７のステップ７０３と同様に、指を使っている否かを示すフラグｉＦｉｇＯｎ［０］〜［４］、同時に押鍵する鍵の中に黒鍵があるか否かを示すフラグｉＢＫ［０］〜［４］、および、処理対象となる指を特定するパラメータｉｆｉｇをそれぞれ初期化する（ステップ９０３）。
【００６９】
演奏支援情報生成部３２は、ポインタｍｅｈとして、処理対象となっている音符データの和音の先頭音へのポインタｐＨＴｏｐをセットする（ステップ９０４）。
【００７０】
演奏支援情報生成部３２は、パラメータｃｆｉｇＨとして、当該音符データについて割り振られた運指ｃｆｉｇをセットする（ステップ９０５）とともに、パラメータｉＦｉｇＯｎ［ｃｆｉｇＨ］として「１」をセットする(ステップ９０６)。
【００７１】
演奏支援情報生成部３２は、ポインタｍｅｈが、処理対象となっている音符データの和音の終端音へのポインタｐＨＴａｉｌと一致するか否かを判断し（ステップ９０７）、ステップ９０７でＹｅｓと判断される場合には、ステップ１００１に進む。ステップ９０７でＮｏと判断された場合には、ポインタｍｅｈを次の音符データを示すように移動させて（ステップ９０８）、ステップ９０５に戻る。
【００７２】
ステップ９０５〜ステップ９０８においては、和音構成音ｃｆｉｇＨについて、ｉＦｉｇＯｎ［ｃｆｉｇＨ］に初期値「−１」を格納している。
【００７３】
図１０に示すように、演奏支援情報生成部３２は、パラメータｉｆｉｇを「０」に初期化する（ステップ１００１）。次いで、演奏支援情報生成部３２は、パラメータｉｆｉｇが「５」より小さいか否かを判断する（ステップ１００２）。ステップ１００２でＹｅｓと判断される場合には、演奏支援情報生成部３２は、処理対象となる音符データにおいて、フラグｉＦｉｇＯｎ［ｉｆｉｇ］が「０」であるか否かを判断する（ステップ１００３）。
【００７４】
ステップ９０６においては、フラグｉＦｉｇＯｎ［ｃｆｉｇＨ］として「１」がセットされている。つまり、和音構成音については、指が使われていることを示すフラグ「１」がセットされている。したがって、ステップ１００３でＹｅｓと判断されることは、パラメータｉｆｉｇで示される指が、押鍵のために使われていないことを意味している。
【００７５】
ステップ１００３でＹｅｓと判断された場合には、演奏支援情報生成部３２は、指の横方向の座標の高い側の候補値ｓｆｉｇＨおよび低い側の候補値ｓｆｉｇＬに、初期値「−１」を与える（ステップ１００４）。演奏支援情報生成部３２は、パラメータｉｆｇを、ｉｆｉｇ＋１と設定して（ステップ１００５）、パラメータｉｆｇが、０以上５未満であるか否かを判断する（ステップ１００６）。
【００７６】
ステップ１００６でＹｅｓと判断された場合には、演奏支援情報生成部３２は、ｉＦｉｇＯｎ［ｉｆｇ］が「１」であるか否かを判断する（ステップ１００７）。ここでは、パラメータｉｆｇで特定される指が押鍵しているか否かが判断されている。
【００７７】
ステップ１００７でＹｅｓと判断された場合には、演奏支援情報生成部３２は、ｓＦｉｇＨとして、処理対象となる音符データにおけるｓｆｉｇＰｏｓＸ［ｉｆｇ］に、２＊（ｉｆｉｇ−ｉｆｇ）を加えた値をセットする（ステップ１００８）。
【００７８】
次いで、演奏支援情報生成部３２は、パラメータｉｆｇをインクリメントして（ステップ１００９）、ステップ１００６に戻る。
【００７９】
ステップ１００７〜ステップ１００９の処理においては、パラメータｉｆｉｇで特定される指の右側に押鍵している指があるか否かが判断され、指が存在する場合には、その指ｉｆｇについての横方向の座標ｓｆｉｇＰｏｓＸ［ｉｆｇ］より白鍵１つだけ右側の鍵に相当する座標値を、ｓｆｉｇＨとしてセットしている。
【００８０】
ステップ１００６でＮｏと判断されると、演奏支援情報生成部３２は、図１１に示すように、パラメータｉｆｇを、「ｉｆｉｇ−１」と設定して（ステップ１１０１）、パラメータｉｆｇが、０以上５未満であるか否かを判断する（ステップ１１０２）。ステップ１１０２でＹｅｓと判断された場合には、演奏支援情報生成部３２は、演奏支援情報生成部３２は、ｉＦｉｇＯｎ［ｉｆｇ］が「１」であるか否かを判断する（ステップ１１０３）。ここでは、パラメータｉｆｇで特定される指が押鍵しているか否かが判断されている。
【００８１】
ステップ１１０３でＹｅｓと判断された場合には、演奏支援情報生成部３２は、ｓＦｉｇＨとして、処理対象となる音符データにおけるｓｆｉｇＰｏｓＸ［ｉｆｇ］に、２＊（ｉｆｉｇ−ｉｆｇ）を加えた値をセットする（ステップ１１０４）。
【００８２】
次いで、演奏支援情報生成部３２は、ｉｆｇをデクリメントして（ステップ１１０５）、ステップ１１０２に戻る。
【００８３】
ステップ１１０３〜ステップ１１０５の処理においては、パラメータｉｆｉｇで特定される指の右側に押鍵している指があるか否かが判断され、指が存在する場合には、その指ｉｆｇについての横方向の座標ｓｆｉｇＰｏｓＸ［ｉｆｇ］より白鍵１つ分だけ左側の鍵に相当する座標値を、ｓｆｉｇＬとしてセットしている。
【００８４】
その後、演奏支援情報生成部３２は、処理対象となる音符データのｓｆｉｇＰｏｓＸ［ｉｆｉｇ］、つまり、当該音符データのパラメータｉｆｉｇで特定される指の横方向の座標として、ｓｆｉｇＨおよびｓｆｉｇＬの双方が存在すれば、その平均値（ｓｆｉｇＨ＋ｓｆｉｇＬ）／２をセットし、ｓｆｉｇＨのみが存在すれば、ｓｆｉｇＨをセットし、或いは、ｓｆｉｇＬのみが存在すればｓｆｉｇＬをセットする（ステップ１１０６）。
【００８５】
また、演奏支援情報生成部３２は、ｓｆＭａｘおよびｓｆＭｉｎを更新して、ＲＡＭ１４に一時的に記憶する（ステップ１１０７）。ｓｆＭａｘは、ｓｆｉｇＨの最高値であり、新たに算出されたｓｆｉｇＨ＞ｓｆＭａｘであれば、新たなｓｆＭａｘとしてｓｆｉｇＨがセットされる。同様に、ｓｆＭｉｎは、ｓｆｉｇＬの最小値であり、ｓｆｉｇＬ＜ｓｆＭｉｎであれば、新たなｓｆＭｉｎとしてｓｆｉｇＬがセットされる。
【００８６】
ステップ１１０７の処理の後、演奏支援情報生成部３２は、パラメータｉｆｉｇをインクリメントして（ステップ１１０８）、ステップ１００２に戻る。
【００８７】
図１０のステップ１００２でＮｏと判断された場合、つまり、パラメータｉｆｉｇが５以上である場合には、演奏支援情報生成部３２は、処理対象である音符データにおける手の横方向の座標ｓＨａｎｄＰｏｓＸとして、ｓｆＭａｘおよびｓｆＭｉｎの平均値（ｓｆＭｍａｘ＋ｓｆＭｉｎ）／２をセットする（ステップ１０１０）。その後、演奏支援情報生成部３２は、処理対象となる音符データを特定するポインタを次のレコードに移動して（ステップ１０１１）、ステップ９０２に戻る。
【００８８】
図９〜図１１の処理によって、押鍵していない指の横方向の座標も、その時点で押鍵している他の指の座標に基づいて算出され、音符データの項目としてＲＡＭ１４に記憶される。
【００８９】
次に、ステップ５０６において起動される再生処理について説明する。図１２および図１３は、再生処理の例を示すフローチャートである。再生処理部３６は、図１２に示すように、ＲＡＭ１４に記憶された、再生処理において使用されるパラメータやフラグを初期化する（ステップ１２０１）。次いで、再生処理部３６は、基本データバッファ（図３（ｂ）参照）の基本データ中の現在時刻ＩＮｏｗＴｉｃｋとして、システム時刻に基づく再生開始時刻をセットし（ステップ１２０２）、次いで、トラックを示すパラメータｉＴｒを「０」に初期化する（ステップ１２０３）。
【００９０】
再生処理部３６は、全てのトラックについての処理が終了する（ステップ１２０４でＮｏ）まで、ステップ１２０５以下の処理を実行する。再生処理部３６は、処理対象となる音符データを特定するポインタｍｅとして、Ｔｒａｃｋ［ｉＴｒ］で特定されるトラックデータ（図３（ａ）参照）中のトラック最初の音符データｐＦｉｒｓｔＭＥをセットする（ステップ１２０５）。
【００９１】
次いで、再生処理部３６は、ポインタｍｅにより特定される音符データの発音開始時刻ＩＴｉｍｅ＜基本データの現在時刻ＩＮｏｗＴｉｃｋであるか否かを判断する（ステップ１２０６）。ステップ１２０６においては、現在時刻が、音符データ中の発音開始時刻に達しているか否かが判断される。
【００９２】
ステップ１２０６でＮｏと判断された場合には、再生処理部３６は、トラックを示すパラメータｉＴｒをインクリメントして（ステップ１２０９）、ステップ１２０４に戻る。
【００９３】
ステップ１２０６でＹｅｓと判断された場合には、再生処理部３６は、トラックデータにおいて、トラックｉＴｒの次の音符データへのポインタＭｉｄｉＥｖｅｎｔｓ［ｉＴｒ］として、ｍｅをセットする（ステップ１２０７）。次いで、再生処理部３６は、音符データを特定するポインタｍｅを、次の音符データを指定するように移動させる（ステップ１２０８）。
【００９４】
ステップ１２０４でＮｏと判断された場合には、再生処理部３６は、基本データの現在時刻ＩＮｏｗＴｉｃｋが、最後の音符データに基づく、音符を消音すべき時間より大きいか否かを判断する（ステップ１３０１）。上記音符を消音すべき時間とは、末尾の音符データの発音開始時刻ＩＴｉｍｅ＋発音時間ＩＧａｔｅに相当する。
【００９５】
ステップ１３０１でＹｅｓと判断された場合には、再生処理は終了する。その一方、ステップ１３０１でＮｏと判断された場合には、再生処理部３６は、時刻計算処理（ステップ１３０２）、発音処理（ステップ１３０３）および消音処理（ステップ１３０４）を実行する。ステップ１３０２〜１３０４の各処理については後述する。
【００９６】
また、基本データの途中停止フラグｉｎｔｅｒｒｕｐｔｉｏｎが「ＦＡＬＳＥ」であれば（ステップ１３０５でＹｅｓ）、ステップ１３０１に戻る。その一方、途中停止フラグｉｎｔｅｒｒｕｐｔｉｏｎが「ＴＲＵＥ」であれば（ステップ１３０５でＮｏ）、発音中の音符データの全てについて消音処理を実行する（ステップ１３０６）。
【００９７】
図１４は、本実施の形態にかかる時刻計算処理の例を示すフローチャートである。再生処理部３６は、基本データの演奏状態ｉＰＳｔａｔｕｓが「１」であるか否か、つまり再生中を示しているか否かを判断する（ステップ１４０１）。ステップ１４０１でＹｅｓと判断された場合には、再生処理部３６は、ＩＳｙｓＧａｔｅとして、コンピュータから取得したおおもとのシステム時刻と、基本データバッファ中の更新されたシステム時刻ＩＴｉｃｋＵｐｄａｔｅとの差をセットする（ステップ１４０２）。ステップ１４０２においては、前回の時刻計算処理からどのくらいのシステム時刻が経過しているかを算出する。
【００９８】
次いで、再生処理部３６は、ＩＴｉｃｋＴｍｐとして、（６０＊１０００／ＩＮｏｗＴｅｍｐｏ）／Ｒｅｓｏｌｏｕｔｉｏｎ／ＩＳｙｓＧａｔｅをセットし（ステップ１４０３）、セットされたＩＴｉｃｋＴｍｐが「０」より大きいか否かを判断する（ステップ１４０４）。
【００９９】
ここに、ＩＮｏｗＴｅｍｐｏは、基本データバッファに格納されているテンポ値である。また、Ｒｅｓｏｌｕｔｉｏｎは、解像度であり、たとえば、１／４８０秒に相当する値である。
【０１００】
ステップ１４０４でＹｅｓと判断された場合には、再生処理部３６は、基本データのＩＴｉｃｋＵｐｄａｔｅとして、システム時刻をセットし（ステップ１４０５）かつ、基本データのＩＮｏｗＴｉｃｋとして、ＩＮｏｗＴｉｃｋ＋ＩＴｉｃｋＴｍｐをセットする（ステップ１４０６）。これにより、基本データにおける時刻の情報が更新される。
【０１０１】
図１５および図１６は、本実施の形態にかかる発音処理の例を示すフローチャートである。再生処理部３６は、再生制御データの基本データを検索する（ステップ１５０１）。再生処理部３６は、全てのトラックについての検索が終了していなければ（ステップ１５０２でＮｏ）、当該処理対象となるトラックについて、次の音符データへのポインタを参照して、音符データを特定して、当該音符データを取得する（ステップ１５０３）。また、再生処理部３６は、トラックデータ（図３（ａ））を参照して、処理対象となるトラック種類ｉＰｌａｙＴｙｐｅから、当該トラックが演奏データであるか否かを判断する（ステップ１５０４）。
【０１０２】
ステップ１５０４でＮｏと判断された場合には、再生処理部３６は、音符データの発音開始時刻ＩＴｉｍｅが、現在時刻ＩＮｏｗＴｉｃｋを経過しているか否かを判断する（ステップ１５０５）。
【０１０３】
ステップ１５０５でＮｏと判断された場合には、再生処理部３６は、処理対象を次のトラックとする（ステップ１５１０）。
【０１０４】
ステップ１５０５でＹｅｓと判断された場合には、再生処理部３６は、発音中データバッファに、当該音符データを特定するためのポインタｐＭＥを格納する（ステップ１５０６）。次いで、再生処理部３６は、発音中データバッファに格納したポインタｐＭＥにより示される音符データの発音を楽音生成回路２８に対して指示する（ステップ１５０７）。
【０１０５】
再生処理部３６は、基本データにおいて、処理対象となっているトラックの音符データとして、次の音符データを示すポインタを格納する（ステップ１５０８）。その後、当該処理対象を次の音符データとする（ステップ１５０９）。
【０１０６】
ステップ１５０４でＮｏと判断された場合には、再生処理部３６は、音符データにおいて、再生時の状態ｉＰｌａｙＳｔａｔｕｓが「１」であるか否かを判断する（ステップ１６０１）。ステップ１６０１でＹｅｓと判断された場合には、再生処理部３６は、発音中データバッファに、当該音符データを示すポインタを追加する（ステップ１６０２）。
【０１０７】
その一方、ステップ１６０１でＮｏと判断された場合には、再生処理部３６は、音符データの発音開始時刻ＩＴｉｍｅが、現在時刻ＩＮｏｗＴｉｃｋを経過しているか否かを判断する（ステップ１６０３）。ステップ１６０３でＮｏと判断された場合には、再生処理部３６は、検索すべきトラックを次のトラックとする（ステップ１５１０）。
【０１０８】
ステップ１６０３でＹｅｓと判断された場合には、再生処理部３６は、発音中データバッファに、当該音符データを特定するためのポインタｐＭＥを格納する（ステップ１６０４）。次いで、再生処理部３６は、発音中データバッファの発音中データにおいて、発音保留フラグｉＳｔａｔｕｓに「０」をセットする（ステップ１６０５）。
【０１０９】
また、再生処理部３６は、基本データバッファの演奏状態ｉＰＳｔａｔｕｓを「２」、つまり、待機中であることを示す値にセットする（ステップ１６０６）とともに、基本データバッファの待機開始時刻ＩｗａｉｔＳｔａｒｔに、現在のシステム時刻をセットする（ステップ１６０７）。
【０１１０】
その後、再生制御データの基本データにおいて、処理対象となっているトラックの音符データとして、次の音符データを示すポインタを格納する（ステップ１６０８）。その後、当該次の音符データについての処理に移行する（ステップ１６０９）。
【０１１１】
ステップ１６０１において、再生時の状態ｉＰｌａｙＳｔａｔｕｓが「１」であることは、ミディイベントが存在し、かつ、ノートオンが実行されていることを意味しており、本来の発音開始時刻よりも早いタイミングで演奏者により押鍵されていることを意味している。この場合には、後述するＭＩＤＩ−ＩＮ処理において対応がされるため、発音処理においては特に何もしない。
【０１１２】
その一方、ステップ１６０１において、再生時の状態ｉＰｌａｙＳｔａｔｕｓが「１」以外であることは、少なくとも早いタイミングでの押鍵はなかったことを意味している。この場合には、発音開始時間より遅く押鍵される場合もあるし、押鍵されない場合もある。したがって、ステップ１６０５において、発音データバッファの対応する発音中データにおいて、発音保留フラグｉＳｔａｔｕｓを「０」にセットしておくことで、後述するように、発音開始時間より遅いタイミングであっても、許容時間内に押鍵があれば、発音できるようにする。
【０１１３】
次に、消音処理について説明する。図１７は、本実施の形態にかかる消音処理の例を示すフローチャートである。再生処理部３６は、発音中データバッファの発音中データを検索する（ステップ１７０１）。
【０１１４】
再生処理部３６は、全ての発音中データについての検索が終了していなければ（ステップ１７０２でＮｏ）、発音中データバッファに格納された音符データへのポインタｐＭＥを参照して、音符データを特定して、データを取得する（ステップ１７０３）。
【０１１５】
再生処理部３６は、音符データの消音時刻（該当トラックの発音開始時刻ＩＴｉｍｅ＋発音時間ＩＧａｔｅ）が、現在時刻ＩＮｏｗＴｉｃｋを経過しているか否かを判断する（ステップ１７０４）。
【０１１６】
ステップ１７０４でＮｏと判断された場合には、再生処理部３６は、処理対象を次の発音中データとする（ステップ１７０７）。
【０１１７】
ステップ１７０４でＹｅｓと判断された場合には、再生処理部３６は、発音中データバッファの発音中データをクリアする（ステップ１７０５）。次いで、再生処理部３６は、発音中データバッファに格納されていたポインタｐＭＥにより示される音符データの消音を楽音生成回路２８に対して指示する（ステップ１７０６）。次いで、再生処理部３６は、処理対象を次の発音中データとする（ステップ１７０７）。
【０１１８】
次に、本実施の形態にかかるＭＩＤＩ−ＩＮ処理について説明する。図１８は、本実施の形態にかかるＭＩＤＩ−ＩＮ処理の例を示すフローチャートである。図１８に示すように、再生処理部３６が、演奏者による鍵盤２６の押鍵に基づく押鍵情報（ノートオンメッセージ）を受け入れている場合には（ステップ１８０１でＹｅｓ）、ノートオンメッセージに含まれる音高およびベロシティ（ＰｉｔｃｈおよびｉＶｅｌ）を取得する（ステップ１８０２）。
【０１１９】
次いで、ポインタｍｅＰｌａｙを無し（ＮＵＬＬ）とする（ステップ１８０４）。次いで、発音中データバッファからの検索処理（ステップ１８０４）および音符データからの検索処理（ステップ１８０５）が実行される。
【０１２０】
ステップ１８０１でＮｏと判断された場合、および、ステップ１８０５が終了した後に、基本データバッファの途中停止フラグｉｎｔｅｒｒｕｐｔｉｏｎが「ＦＡＬＳＥ」であり（ステップ１８０６でＹｅｓ）、つまり、途中停止ではない状態であり、かつ、基本データの演奏状態ｉＰＳｔａｔｕｓが「０」でなければ(ステップ１８０７でＮｏ)、つまり、停止状態でなければ、ステップ１８０１に戻る。その一方、ステップ１８０６でＮｏ、或いは、ステップ１８０７でＹｅｓと判断された場合には処理を終了する。
【０１２１】
以下、発音中データバッファからの検索処理（ステップ１８０４）および音符データからの検索処理（ステップ１８０５）についてより詳細に説明する。発音中データバッファからの検索処理は、音符データにおいて既に発音開始時刻ＩＴｉｍｅが経過しており、当該音符データへのポインタが発音中データバッファに格納されているが、演奏者による押鍵がないため発音保留フラグが「０」となっているような音符について押鍵があった場合に実行される処理である。すなわち、発音開始時刻より遅れて押鍵された場合の発音処理である。
【０１２２】
図１９および図２０は、本実施の形態にかかる発音中データバッファからの検索処理の例を示すフローチャートである。図１９に示すように、再生処理部３６は、発音中データバッファ中の発音中データを検索する（ステップ１９０１）。
【０１２３】
再生処理部３６は、全ての発音中データについての検索が終了していなければ(ステップ１９０２でＮｏ)，処理対象となる発音中データについて、発音保留フラグｉＳｔａｔｕｓが「０」、すなわち、発音保留中であるか否かを判断する（ステップ１９０３）。ステップ１９０２でＹｅｓと判断された場合には、ステップ２００１に進む。なお、図１９および図２０において、処理対象となっている発音中データのｍｅＰｌａｙｉｎｇを示すパラメータをｍｅｐと称する。
【０１２４】
ステップ１９０３でＮｏと判断された場合には、再生処理部３６は、処理対象を、発音中データバッファの次の発音中データに移動させる（ステップ１９１０）。
【０１２５】
ステップ１９０３でＹｅｓと判断された場合には、再生処理部３６は、ポインタｍｅｐにより示される発音中データ中のポインタｐＭｅを参照して、音符データのレコードを取得する(ステップ１９０４)。
【０１２６】
次いで、演奏データ正誤判定部３４は、現在時刻ＩＮｏｗＴｉｃｋと、前記ポインタｍｅｐにより特定される音符データの発音開始時刻ＩＴｉｍｅとを比較して、ＩＮｏｗＴｉｃｋ−ＩＴｉｍｅが、許容時間を示す所定の閾値より小さいか否かを判断する（ステップ１９０５）。ステップ１９０５でＮｏと判断された場合には、ステップ２００１に進む。
【０１２７】
ステップ１９０５でＹｅｓと判断された場合には、演奏データ正誤判定部３４は、押鍵された鍵の座標ｉＰｉｔを取得し（ステップ１９０６）、取得した座標ｉＰｉｔが、音符データ中の、親指の横方向の座標および小指の横方向の座標の範囲内に含まれるか否か（ｓｆｉｇＰｏｓＸ［０］＜ｉＰｉｔ＜ｓｆｉｇＰｏｓＸ［４］）であるか否かを判断する（ステップ１９０７）。
【０１２８】
ステップ１９０７でＹｅｓと判断された場合には、演奏データ正誤判定部３４は、さらに、ポインタｍｅｐにより特定される音符データのピッチＰｉｔｃｈと押鍵された鍵の座標ｉＰｉｔとの差の絶対値、および、後述するポインタｍｅｐｌａｙにより特定される音符データのピッチＰｉｔｃｈと押鍵された鍵の座標ｉＰｉｔとの差の絶対値を比較する（ステップ１９０８）。
【０１２９】
ステップ１９０８において、前者（ポインタｍｅｐにより特定される音符データのピッチＰｉｔｃｈと押鍵された鍵の座標ｉＰｉｔとの差の絶対値）の方が小さかった場合には、演奏データ正誤判定部３４は、ポインタｍｅｐｌａｙとして、ポインタｍｅｐをセットする（ステップ１９０９）。
【０１３０】
その後、再生処理部３６は、処理対象を、発音中データバッファの次の発音中データに移動させる（ステップ１９１０）。
【０１３１】
ステップ１９０８および１９０９について以下に説明する。発音中データバッファには、複数の発音中データが格納されている可能性がある。そこで、発音中データバッファ中の発音中データで、所定の条件をみたす（ｉＳｔａｔｕｓが「０」で、かつ、発音開始時刻とのずれおよび音高のずれが所定の許容範囲であること）ものの中で、その音高が、最も押鍵された鍵の音高に近いものを見出し、その音符データを示すポインタｍｅｐｌａｙを保存し、当該ｍｅｐｌａｙにより示される音符データの発音を行わせている。音符データの発音については、図２０を参照して説明する。
【０１３２】
図２０に示すように、再生処理部３６は、ポインタｍｅｐｌａｙが存在するか否かを判断する（ステップ２００１）。ステップ２００１でＹｅｓと判断された場合には、再生処理部３６は、基本データ中の演奏状態ｉＰＳｔａｔｕｓが「２」、つまり待機中であるか否かを判断する（ステップ２００２）。
【０１３３】
ステップ９００２でＮｏと判断された場合には、再生処理部３６は、ポインタｍｅｐｌａｙにより示される音符データに基づく楽音の発音を、楽音生成回路２８に対して指示する（ステップ２００６）。
【０１３４】
これに対して、ステップ２００２でＹｅｓと判断された場合には、再生処理部３６は、パラメータｍＧａｔｅとして、ポインタｍｅｐｌａｙにより示される音符データの発音時間ＩＧａｔｅをセットする（ステップ２００３）。
【０１３５】
再生処理部３６は、発音すべき楽音のベロシティｉＶｅｌｎｅｗ＝ｉＶｅｌ＊（１−｛ａｂｓ（ＩＮｏｗＴｉｃｋ−ＩｗａｉｔＳｔａｒｔ）／ｍＧａｔｅ｝）を算出する（ステップ２００４）。また、再生処理部３６は、基本データ中の演奏状態ｉＰＳｔａｔｕｓを「１」にセットする（ステップ２００５）。
【０１３６】
ステップ２００４においては、押鍵された時刻に相当する現在時刻ＩＮｏｗＴｉｃｋと、待機状態となった時刻ＩｗａｉｔＳｔａｒｔとの差の絶対値に応じて、差の絶対値が大きくなるのにしたがって発音すべき楽音のベロシティが小さくなるように、当該ベロシティを調整している。特に、本実施の形態においては、発音時間全体に対する、上記差の絶対値の比を算出し、その比に基づいてベロシティを調整している。ここでは、発音時間に対して差の絶対値が大きいこと、つまり比が小さくなるのに伴って、ベロシティは大きくなる。
【０１３７】
次いで、再生処理部３６は、ポインタｍｅｐｌａｙにより示される音符データに基づく楽音の発音を、楽音生成回路２８に対して指示する（ステップ２００６）。
【０１３８】
再生処理部３６は、ポインタｍｅｐｌａｙにより示される音符データにおいて、再生時の状態ｉＰｌａｙＳｔａｔｕｓを「１（ミディイベントおよびノートオンの双方あり）」にセットする（ステップ２００７）。
【０１３９】
次に、本実施の形態にかかる音符データからの検索処理について説明する。図２１〜図２３は、本実施の形態にかかる音符データからの検索処理の例を示すフローチャートである。
【０１４０】
図２１に示すように、再生処理部３６は、ポインタｍｅｐｌａｙが存在するか否かを判断し（ステップ２１０１）、存在する場合には（ステップ２１０１でＹｅｓ）、処理を終了する。
【０１４１】
ステップ２１０１でＮｏと判断された場合には、再生処理部３６は、再生制御データの基本データバッファを検索する（ステップ２１０２）。再生処理部３６は、全てのトラックについての検索が終了していなければ（ステップ２１０３でＮｏ）、トラックデータ（図３（ａ））を参照して、処理対象となるトラックデータのトラック種類ｉＰｌａｙＴｙｐｅから、当該トラックが演奏データであるか否かを判断する（ステップ２１０４）。
【０１４２】
ステップ２１０４でＮｏと判断された場合には、再生処理部３６は、処理対象を次のトラックに移動する（ステップ２１０５）。
【０１４３】
ステップ２１０４でＹｅｓと判断された場合には、再生処理部３６は、当該処理対象となるトラックについて、ポインタｍｅｐとして、基本データ中のＭｉｄｉＥｖｅｎｔ［トラック番号］をセットする（ステップ２１０６）。
【０１４４】
再生処理部３６および演奏データ正誤判定部３４は、処理対象となっているトラックについて音符データの検索が終了する（音符データの末尾のレコードとなる：ステップ２２０１でＹｅｓ）まで、ステップ２２０２以下の処理を実行する。
【０１４５】
ステップ２２０１でＮｏと判断された場合には、演奏データ正誤判定部３４は、現在時刻ＩＮｏｗＴｉｃｋと、ｍｅｐにより特定される音符データ中の発音開始時刻ＩＴｉｍｅとを比較して、ＩＴｉｍｅ−ＩＮｏｗＴｉｃｋが、許容時間を示す所定の閾値以上であるか否かを判断する（ステップ２２０２）。ステップ２２０２でＹｅｓと判断された場合には、ステップ２３０１に進む。
【０１４６】
その一方、ステップ２２０２でＮｏと判断された場合には、演奏データ正誤判定部３４は、０＜ＩＴｉｍｅ−ＩＮｏｗＴｉｃｋ＜所定の閾値であるか否かを判断する（ステップ２２０３）。
【０１４７】
ステップ２２０３でＹｅｓと判断された場合には、演奏データ正誤判定部３４は、押鍵された鍵の座標ｉＰｉｔを取得し（ステップ２５０４）、取得した座標ｉＰｉｔが、ポインタｍｅｐにより特定される音符データ中の、親指の横方向の座標および小指の横方向の座標の範囲内に含まれるか否か（ｓｆｉｇＰｏｓＸ［０］＜ｉＰｉｔ＜ｓｆｉｇＰｏｓＸ［４］）であるか否かを判断する（ステップ２２０５）。
【０１４８】
ステップ２２０５でＹｅｓと判断された場合には、演奏データ正誤判定部３４は、さらに、ポインタｍｅｐにより特定される音符データ中のピッチＰｉｔｃｈと押鍵された鍵の座標ｉＰｉｔとの差の絶対値、および、ポインタｍｅｐｌａｙにより特定される音符データ中のピッチＰｉｔｃｈと押鍵された鍵の座標ｉＰｉｔとの差の絶対値を比較する（ステップ２２０６）。
【０１４９】
ステップ２２０６において、前者（ポインタｍｅｐにより特定される音符データ中のピッチＰｉｔｃｈと押鍵された鍵の座標ｉＰｉｔとの差の絶対値）の方が小さかった場合には、再生処理部３６は、ポインタｍｅｐｌａｙとして、ポインタｍｅｐに示す発音中データのｐＭｅをセットする（ステップ２２０７）。
【０１５０】
その後、再生処理部３６は、処理対象を次の音符データに移動する（ステップ２２０８）。
【０１５１】
ステップ２２０２でＹｅｓと判断された場合には、再生処理部３６は、ｍｅｐｌａｙが存在するか否かを判断する（ステップ２３０１）。ステップ２３０１でＹｅｓと判断された場合には、再生処理部３６は、基本データ中の演奏状態ｉＰＳｔａｔｕｓが「２」、つまり待機中であるかどかを判断する（ステップ２３０２）。ステップ２３０２でＮｏと判断された場合には、再生処理部３６は、ポインタｍｅｐｌａｙにより示される音符データの楽音の発音を、楽音生成回路２８に対して指示する（ステップ２３０６）。
【０１５２】
ステップ２３０２でＹｅｓと判断された場合には、再生処理部３６は、パラメータｍＧａｔｅとして、ポインタｍｅｐｌａｙにより示される音符データの発音時間ＩＧａｔｅをセットする（ステップ２３０３）。
【０１５３】
再生処理部３６は、発音すべき楽音のベロシティｉＶｅｌｎｅｗ＝ｉＶｅｌ＊（１−｛ａｂｓ（ＩＮｏｗＴｉｃｋ−ＩｗａｉｔＳｔａｒｔ）／ｍＧａｔｅ｝）を算出する（ステップ２３０４）。また、再生処理部３６は、基本データ中の演奏状態ｉＰＳｔａｔｕｓを「１」にセットする（ステップ２３０５）。
【０１５４】
ステップ２３０４においては、押鍵された時刻に相当する現在時刻ＩＮｏｗＴｉｃｋと、待機状態となった時刻ＩｗａｉｔＳｔａｒｔとの差の絶対値に応じて、差の絶対値が大きくなるのにしたがって発音すべき楽音のベロシティが小さくなるように、当該ベロシティを調整している。特に、本実施の形態においては、発音時間全体に対する、上記差の絶対値の比を算出し、その比に基づいてベロシティを調整している。
【０１５５】
次いで、再生処理部３６は、ポインタｍｅｐｌａｙにより示される音符データに基づく楽音の発音を、楽音生成回路２８に対して指示する（ステップ２３０６）。
【０１５６】
再生処理部３６は、ポインタｍｅｐｌａｙにより示される音符データにおいて、再生時の状態ｉＰｌａｙＳｔａｔｕｓを「１（ミディイベントおよびノートオンの双方あり）」にセットする（ステップ２３０７）。
【０１５７】
本発明においては、音符データに含まれる、ある音符の発音開始時刻より押鍵が先行し、或いは、遅れた場合であっても、その先行或いは押鍵が、許容時間内であれば、対応する音符データにより示される音高の楽音を発音する。すなわち、所定の時間的条件が満たされる場合には、押鍵タイミングのずれを許容する。
【０１５８】
特に、本実施の形態においては、その発音の際に、本来の発音開始時刻と、実際の押鍵時刻との差の絶対値にしたがって、その音の発音時間全体に対する差の絶対値の比を算出し、その比に基づいて楽音のベロシティを制御している。これにより、演奏者は、押鍵タイミングのずれの度合いを認識することが可能となる。
【０１５９】
また、本実施の形態では、その音符を押鍵する際の親指の位置に対応する鍵と、小指の位置に対応する鍵との間の鍵が押鍵されていれば、音符データにより示される音高の楽音を発音する。すなわち、所定の押鍵位置に関する条件が満たされる場合には、押鍵におけるミスタッチを許容する。
【０１６０】
また、本実施の形態においては、前記親指の座標と小指の座標との間に位置するような鍵の座標と、音符データにおける鍵盤の座標との差の絶対値が最も小さいような音符データを特定し、特定された音符データの発音が、楽音生成回路に指示される。これにより、ミスタッチがあった場合でも、押鍵された鍵ともっとも近い音高の音符データを発音させることができる。
【０１６１】
これにより、一定範囲内の時間のずれや押鍵する鍵のずれがあった場合にも発音を許容することで、正しい押鍵タイミングおよび正しい鍵位置の押鍵を認識するための中間的な段階を設けることが可能となる。
【０１６２】
また、本実施の形態においては、指の座標の算出に際して、鍵の座標および押鍵すべき指を示す情報に基づいて、隣接する指が、それぞれ、隣接する白鍵に位置するように、指の鍵盤上の位置を示す指座標情報が生成される。これにより、押鍵される指以外の他の指の位置（座標）を適切に算出することができる。
【０１６３】
さらに、本実施の形態においては、和音構成音を構成する他の音符の音符データを参照して、和音構成音を押鍵している指については、前記押鍵している鍵の座標を指座標情報としている。これにより、押鍵されている他の指も考慮した音符データにおける指の位置（座標）を算出することが可能となる。
【０１６４】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【０１６５】
たとえば、上記実施の形態においては、押鍵情報にしたがって、当該押鍵された鍵の音高が、音符データの音高と一致しない場合にも、一定の条件が満たされれば、音符データにしたがった楽音が発音されている。しかしながら、これに限定されず、音高は、音符データ中のものではなく、実際された鍵のものであっても良い。これにより、演奏者は、ミスタッチをしたこと自体を認識することができる。
【図面の簡単な説明】
【０１６６】
【図１】図１は、本実施の形態にかかる演奏練習支援システムのハードウェア構成を示すブロックダイヤグラムである。
【図２】図２は、本実施の形態にかかる演奏練習支援システムの概要を示すブロックダイヤグラムである。
【図３】図３（ａ）は、トラックごとの属性を示すトラックデータを示す図、図３（ｂ）は、基本データバッファを示す図、図３（ｃ）は、発音中の音符データの格納バッファ（発音中データバッファ）を示す図である。
【図４】図４は、本実施の形態にかかる音符データの構成を示す図である。
【図５】図５は、本実施の形態にかかる演奏練習支援システムにて実行されるメインフローの例を示す図である。
【図６】図６は、本実施の形態にかかる演奏支援情報生成処理の例を示すフローチャートである。
【図７】図７は、本実施の形態にかかる押鍵する指の座標設定処理の例を示すフローチャートである。
【図８】図８は、ステップ７０８の同じタイミングで押鍵する指の座標の設定処理の例を示すフローチャートである。
【図９】図９は、本実施の形態にかかる現在の状況を考慮した座標設定処理の例を示すフローチャートである。
【図１０】図１０は、本実施の形態にかかる現在の状況を考慮した座標設定処理の例を示すフローチャートである。
【図１１】図１１は、本実施の形態にかかる現在の状況を考慮した座標設定処理の例を示すフローチャートである。
【図１２】図１２は、本実施の形態にかかる再生処理の例を示すフローチャートである。
【図１３】図１３は、本実施の形態にかかる再生処理の例を示すフローチャートである。
【図１４】図１４は、本実施の形態にかかる時刻計算処理の例を示すフローチャートである。
【図１５】図１５は、本実施の形態にかかる発音処理の例を示すフローチャートである。
【図１６】図１６は、本実施の形態にかかる発音処理の例を示すフローチャートである。
【図１７】図１７は、本実施の形態にかかる消音処理の例を示すフローチャートである。
【図１８】図１８は、本実施の形態にかかるＭＩＤＩ−ＩＮ処理の例を示すフローチャートである。
【図１９】図１９は、本実施の形態にかかる発音中データバッファからの検索処理の例を示すフローチャートである。
【図２０】図２０は、本実施の形態にかかる発音中データバッファからの検索処理の例を示すフローチャートである。
【図２１】図２１は、本実施の形態にかかる音符データからの検索処理の例を示すフローチャートである。
【図２２】図２２は、本実施の形態にかかる音符データからの検索処理の例を示すフローチャートである。
【図２３】図２３は、本実施の形態にかかる音符データからの検索処理の例を示すフローチャートである。
【符号の説明】
【０１６７】
１２        ＣＰＵ
１４        ＲＡＭ
１６        ＲＯＭ
１８        入力装置
２０        表示装置
２２、２４  ＭＩＤＩ＿Ｉ／Ｆ
２６        鍵盤
２８        楽音生成回路
３０        サウンドシステム
３２        演奏支援情報生成部
３４        演奏動作正誤判定部
３６        再生処理部
【図１】
0005145875.tif 000002
【図２】
0005145875.tif 000003
【図３】
0005145875.tif 000004
【図４】
0005145875.tif 000005
【図５】
0005145875.tif 000006
【図６】
0005145875.tif 000007
【図７】
0005145875.tif 000008
【図８】
0005145875.tif 000009
【図９】
0005145875.tif 000010
【図１０】
0005145875.tif 000011
【図１１】
0005145875.tif 000012
【図１２】
0005145875.tif 000013
【図１３】
0005145875.tif 000014
【図１４】
0005145875.tif 000015
【図１５】
0005145875.tif 000016
【図１６】
0005145875.tif 000017
【図１７】
0005145875.tif 000018
【図１８】
0005145875.tif 000019
【図１９】
0005145875.tif 000020
【図２０】
0005145875.tif 000021
【図２１】
0005145875.tif 000022
【図２２】
0005145875.tif 000023
【図２３】
0005145875.tif 000024