(57)【要約】【課題】自動演奏情報を再生して得られる音符情報を例えば電子ピアノの表示部にピアノロール風に表示させて演奏ガイドを行う技術に関し、練習曲のテンポや再生スピードに合わせることが難しい初心者でも練習に取り組めるようにする。【解決手段】演奏ガイド表示部１０２は、記憶手段１０１に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報１０５から、その楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、その読み出された音符情報及びその読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させる。演奏ガイド進行制御部１０３は、楽器１０４等におけるユーザ演奏により例えばＭＩＤＩインタフェースを介して入力されるユーザ演奏情報１０６を判別し、そのユーザ演奏情報１０６が示す演奏状態に応じて、演奏ガイド情報表示の進行を制御する。ユーザの演奏状態に応じて、演奏ガイドの表示進行を停止させたり、再開させたりすることが可能になる。【選択図】図１
2015069151.tif 000002
【特許請求の範囲】
【請求項１】
記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、当該楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、当該読み出された音符情報及び当該読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させる演奏ガイド表示部と、
ユーザ演奏により入力されるユーザ演奏情報を判別し、当該ユーザ演奏情報が示す演奏状態に応じて、前記演奏ガイド情報表示の進行を制御する演奏ガイド進行制御部と、
を備えることを特徴とする演奏練習装置。
【請求項２】
前記演奏ガイド進行制御部は、
前記読み出された自動演奏情報の音符情報が表す発音タイミングに到達した場合に、前記演奏ガイド表示の進行を停止し、
入力された前記ユーザ演奏情報が、当該発音タイミングに到達した音符に対応しているときに、前記演奏ガイド表示の進行を再開する、
ことを特徴とする請求項１に記載の演奏練習装置。
【請求項３】
前記演奏ガイド進行制御部は、
前記楽曲の進行に合わせて読み出された音符情報と前記入力されたユーザ演奏情報とが対応しているときは前記演奏ガイド表示を進行させ、
前記ユーザ演奏情報の入力が中断した場合、当該入力が中断された時点で読み出されている音符情報に基づいて前記入力の中断が許容されるものであるか否かを判断するとともに、
前記入力の中断が許容されるものであると判断された場合は、前記楽曲の進行に合わせて読み出された音符情報に続く音符情報の発音タイミングまで、前記演奏ガイド表示を進行させる、
ことを特徴とする請求項１または２に記載の演奏練習装置。
【請求項４】
前記演奏ガイド進行制御部は、
前記ユーザ演奏情報の入力が中断した場合に、当該入力の中断が、前記楽曲の進行に合わせて読み出された音符情報がスタッカートあるいは休符であることに起因している場合、または前記入力の中断の長さが、予め定められた許容範囲内である場合に、前記入力の中断が許容されるものと判断する、
ことを特徴とする請求項３に記載の演奏練習装置。
【請求項５】
前記演奏ガイド進行制御部は、
入力する前記ユーザ演奏情報が、ノートオンを示しているときに、前記演奏ガイド表示の進行を進め、
入力する前記ユーザ演奏情報が、ノートオンからノートオフに変化したときに、前記演奏ガイド表示の進行を予め定められた時間進めてから前記演奏ガイド表示の進行を当該ノートオフに対応するタイミング位置に戻して停止し、
前記演奏ガイド表示の進行を前記予め定められた時間進める動作を実行している最中に、前記ユーザ演奏情報がノートオフからノートオンに変化したときに、当該動作を解除する、
ことを特徴とする請求項１から４のいずれかに記載の演奏練習装置。
【請求項６】
請求項２ないし４のいずれかに記載された前記演奏ガイド進行制御部による制御モードと、請求項５に記載された前記演奏ガイド進行制御部による制御モードとを、前記ユーザの指示に基づいて切り替える練習モード切替部をさらに備える、
ことを特徴とする演奏練習装置。
【請求項７】
前記演奏ガイド表示部は、前記演奏ガイド表示に対応する前記音符情報に重ねて、入力される前記ユーザ演奏情報に対応する音符情報を前記表示画面上に表示する、
ことを特徴とする請求項１ないし７のいずれかに記載の演奏練習装置。
【請求項８】
演奏練習装置で用いられる演奏練習方法であって、前記演奏練習装置は、
記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、当該楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、当該読み出された音符情報及び当該読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させ、
ユーザ演奏により入力されるユーザ演奏情報を判別し、当該ユーザ演奏情報が示す演奏状態に応じて、前記演奏ガイド情報表示の進行を制御する、演奏練習方法。
【請求項９】
演奏練習装置として用いられるコンビュータに、
記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、当該楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、当該読み出された音符情報及び当該読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させるステップと、
ユーザ演奏により入力されるユーザ演奏情報を判別し、当該ユーザ演奏情報が示す演奏状態に応じて、前記演奏ガイド情報表示の進行を制御するステップと、
を実行させる演奏練習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動演奏情報を再生して得られる音符情報を例えば電子ピアノの表示部にピアノロール風に表示させて演奏ガイドを行う技術に関する。
【背景技術】
【０００２】
従来から、いわゆるピアノロールと呼ばれる演奏ガイド装置が知られている。この装置は例えば、電子ピアノの表示部に鍵盤画像を縦に表示させ、楽曲を自動演奏させながら、鍵盤画像の右側方向の自動演奏情報が示す音符の音高に対応する鍵盤の延長線上に、その音符長に対応する長さを有する棒グラフ状態の図形情報を、自動演奏に従って順次流れるように表示させてゆく（例えば特許文献１）。
【０００３】
また、演奏テンポに応じて表示画面に表示される音符の長さに対応する図形の長さを設定し、表示画面を演奏テンポに関わらず一定速度でスクロールすることにより、表示画面に表示されるピアノロールを伝統的に知られている紙製のロールによるピアノロールと同等の表示を実現した技術が知られている（例えば特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許３１７８４７２号公報
【特許文献２】特許４６２８２９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ピアノロールに関する上述の従来技術は、練習曲の再生に合わせて練習を行うものであり、曲の再生テンポに合わせて練習することが難しい初心者の場合、音高と音長を自分のペースで確かめながら練習することができないという問題点を有していた。
【０００６】
また、従来技術では、例えば初心者が、練習曲の各音符の音高のみについてまず自分の発音タイミングで練習したいといったニーズに応えることができず、扱いづらいという問題点を有していた。
【０００７】
本発明は、練習曲のテンポや再生スピードに合わせることが難しい初心者でも練習に取り組めるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
態様の一例では、記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、その楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、その読み出された音符情報及びその読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させる演奏ガイド表示部と、ユーザ演奏により入力されるユーザ演奏情報を判別し、そのユーザ演奏情報が示す演奏状態に応じて、演奏ガイド情報表示の進行を制御する演奏ガイド進行制御部と、を備える。
【発明の効果】
【０００９】
練習曲のテンポや再生スピードに合わせることが難しい初心者でも練習に取り組むことが可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明による演奏練習装置の実施形態を示すブロック図である。
【図２】演奏練習装置の実施形態のハードウェア構成の一例を示す図である。
【図３】ピアノロールデータのデータ構成例を示す図である。
【図４】小節データのデータ構成例を示す図である。
【図５】ピアノロールの表示例を示す説明図である。
【図６】入力音符データのデータ構成例を示す図である。
【図７】演奏ガイド進行制御処理の全体動作の例を示すフローチャートである。
【図８】ピアノロール練習処理である。
【図９】手本ピアノロールデータ表示処理の例を示すフローチャートである。
【図１０】入力ピアノロールデータ生成処理の例を示すフローチャートである。
【図１１】手本を参照するカーソル時刻更新処理の例を示すフローチャートである。
【図１２】手本を参照しないカーソル時刻更新処理の例を示すフローチャートである。
【図１３】カーソル進行の例を示す説明図である（その１）。
【図１４】カーソル進行の例を示す説明図である（その２）
【図１５】カーソル進行の例を示す説明図である（その３）
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。
【００１２】
図１は、本発明による演奏練習装置１００の実施形態を示すブロック図である。この演奏練習装置１００は、練習用の楽曲（以下単に「楽曲」と記載する）の自動演奏データを記憶する手段を備え、これらのうちからユーザが指定した楽曲の自動演奏データを順次処理していわゆるピアノロール表示を行う機能を備える、電子ピアノやシンセサイザー等の電子楽器に、ＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）インタフェースを介して接続される。
【００１３】
あるいは、この演奏練習装置１００は、電子楽器に内蔵されてもよい。さらに、電子楽器は、電子ギター、電子サキソフォン、電子バイオリン等であってもよく、演奏練習装置１００は、それぞれの楽器に適したロール表示を行うものであってもよい。
【００１４】
この演奏練習装置１００は、演奏ガイド表示部１０２、演奏ガイド進行制御部１０３、楽器１０４を備える。また、演奏練習装置１００は、練習モード切替部１０７を備えてもよい。また、この演奏練習装置１００の内部または外部に、自動演奏情報１０５を記憶する記憶手段１０１が具備されてよい。さらに、この演奏練習装置１００は、楽器１０４に接続されてよい。
【００１５】
記憶手段１０１は、練習曲の自動演奏情報を、例えばＳＭＦ（Ｓｔａｎｄａｒｔ  ＭＩＤＩ  Ｆｉｌｅ）フォーマットで記憶する。
【００１６】
演奏ガイド表示部１０２は、記憶手段１０１に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報１０５から、その楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、その読み出された音符情報及びその読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させる。
【００１７】
演奏ガイド進行制御部１０３は、楽器１０４等におけるユーザ演奏により例えばＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）フォーマットに従った通信インタフェースを介して入力されるユーザ演奏情報１０６を判別し、そのユーザ演奏情報１０６が示す演奏状態に応じて、演奏ガイド情報表示の進行を制御する。
【００１８】
以上の演奏練習装置１００の構成により、ユーザ演奏情報１０６が示すユーザの演奏状態に応じて、演奏ガイドの表示進行を停止させたり、再開させたりすることが可能になる。これにより、練習曲のテンポや再生スピードに合わせることが難しい初心者でも、ユーザのペースで練習に取り組むことが可能となる。
【００１９】
以上の演奏練習装置１００の構成において、演奏ガイド進行制御部１０３は例えば、読み出された自動演奏情報１０５の音符情報が表す発音タイミングに到達した場合に、演奏ガイド表示の進行を停止し、入力されたユーザ演奏情報１０６が、その発音タイミングに到達した音符に対応しているときに、演奏ガイド表示の進行を再開してよい。
【００２０】
また、演奏ガイド進行制御部１０３は例えば、楽曲の進行に合わせて読み出された音符情報と入力されたユーザ演奏情報１０６とが対応しているときは演奏ガイド表示を進行させ、ユーザ演奏情報１０６の入力が中断した場合、その入力が中断された時点で読み出されている音符情報に基づいて入力の中断が許容されるものであるか否かを判断するとともに、入力の中断が許容されるものであると判断された場合は、楽曲の進行に合わせて読み出された音符情報に続く音符情報の発音タイミングまで、演奏ガイド表示を進行させてよい。
【００２１】
また、演奏ガイド進行制御部１０３は例えば、ユーザ演奏情報１０６の入力が中断した場合に、その入力の中断が、楽曲の進行に合わせて読み出された音符情報がスタッカートあるいは休符であることに起因している場合、または入力の中断の長さが、予め定められた許容範囲内である場合に、入力の中断が許容されるものと判断してよい。
【００２２】
さらに、演奏ガイド進行制御部１０３は例えば、入力するユーザ演奏情報１０６が、ノートオンを示しているときに、演奏ガイド表示の進行を進め、入力するユーザ演奏情報１０６が、ノートオンからノートオフに変化したときに、演奏ガイド表示の進行を予め定められた時間進めてから演奏ガイド表示の進行をそのノートオフに対応するタイミング位置に戻して停止し、演奏ガイド表示の進行を予め定められた時間進める動作を実行している最中に、ユーザ演奏情報１０６がノートオフからノートオンに変化したときに、その動作を解除してよい。
【００２３】
以上のような制御により、ユーザは、自分の意思に従って、例えばピアノロールによる演奏ガイドで楽器演奏を練習することができる。
【００２４】
また一般的に、スタッカートのように音符長に比較してノートオンとなっている時間が非常に短い音符や、休符などの場合には、ユーザ演奏情報１０６においてノートオンを検出することができない場合があり、この場合ユーザ演奏情報１０６はノートオフ中の状態となる。ユーザ演奏情報１０６がノートオフ中の状態に演奏ガイドの表示進行が単純に進まないように制御される場合、スタッカートまたは休符のときにまったく進行を進めることができなくなる。そこで、本実施形態では、ユーザ演奏情報１０６がノートオフ中であるときに、自動演奏情報１０５がスタッカートまたは休符あるいは許容時間内でのノートオフを示していれば、演奏ガイドの表示進行を所定時間だけ進めるようにすることにより、練習を自然に進行させることが可能となる。
【００２５】
図１において、練習モード切替部１０７は、上述したように、ユーザが、自身の演奏が自動演奏情報１０５が示す手本による自動演奏に対して音符毎に音高が合っているかどうかを確認しながら演奏ガイドの表示進行を行うモードと、単純にノートオンおよびノートオフだけで演奏ガイドの表示進行を行うモードとを切り替えることができるようにする。
【００２６】
ここまで説明した本実施形態の構成において、図１の演奏ガイド表示部１０２は、演奏ガイド表示に対応する音符情報に重ねて、入力されるユーザ演奏情報１０６に対応する音符情報を表示画面上に表示するように構成してもよい。これにより、ユーザは、自身の演奏が演奏ガイドの表示進行に対して合っているか否かを、視覚的に確認することが可能となる。
【００２７】
なお、演奏ガイド進行制御部１０３はさらに、予め設定されたまたはユーザの指示に基づいて設定されたテンポ情報に基づいて、演奏ガイドの表示進行の速度を制御するように構成されてもよい。これにより、ユーザは、自身の演奏の上達度に応じて、自由にテンポを設定し、それに合った演奏ガイドの表示進行を行うことが可能となる。
【００２８】
図２は、図１の機能構成を有する演奏練習装置１００の実施形態のハードウェア構成の一例を示す図である。この演奏練習装置１００は、ＣＰＵ（中央演算処理装置）２０１、ＲＯＭ（リードオンリーメモリ）２０２、ＲＡＭ（ランダムアクセスメモリ）２０３、入力部２０４、表示部２０５、およびＭＩＤＩインタフェース部（以下「ＭＩＤＩ  Ｉ／Ｆ」と表記する）２０６が、バス２０７によって相互に接続された構成を備える。ＭＩＤＩ  Ｉ／Ｆ２０６は、外部（内蔵でもよい）の電子楽器２０８（図１の楽器１０４に対応）に接続される。
【００２９】
ＣＰＵ２０１は、ＲＯＭ２０２に記憶された制御プログラムに従って、当該演奏練習装置１００の全体の制御を行う。
【００３０】
ＲＯＭ２０２は、後述する図７から図１２の各フローチャートで示される制御動作を実行する制御プログラムを記憶する。また、ＲＯＭ２０２は、図１の記憶手段１０１に対応し、複数の楽曲の図１に示される自動演奏情報１０５などを記憶する。
【００３１】
ＲＡＭ２０３は、制御プログラムの実行に必要な、後述する図３、図４、図６に示される、ピアノロールデータ、小節データ、入力音符データなどの各種制御データや、練習対象となる自動演奏情報１０５等を、一時的に記憶する。
【００３２】
入力部２０４は、ユーザによるキーボード、マウス、各種スイッチ等による入力操作を検出し、その検出結果をＣＰＵ２０１に通知する。
【００３３】
表示部２０５は、ＣＰＵ２０１の制御によって送られてくるデータを液晶ディスプレイなどに出力する。例えば、表示部２０５は、後述する図４のような表示形式で、ピアノロールによる演奏ガイドを表示する。
【００３４】
ＭＩＤＩ  Ｉ／Ｆ２０６は、ユーザが電子楽器２０８において演奏したユーザ演奏情報１０６を取り込んで、ＲＡＭ２０３上のノートバッファに記憶させる。ＣＰＵ２０１は、図１の演奏ガイド進行制御部１０３の機能に対応する演奏ガイド進行制御処理において、ノートバッファに取り込まれるユーザの演奏によるユーザ演奏情報１０６と、順次自動演奏する自動演奏情報１０５とを順次比較することにより、前述したようにして演奏ガイドの表示進行を制御する。
【００３５】
本実施形態による演奏練習装置１００の動作は、後述する図７から図１２のフローチャート等で実現される図１の各部の機能処理を搭載した制御プログラムを、ＣＰＵ２０１がＲＯＭ２０２から読み出して順次実行することで実現される。そのプログラムは、特には図示しない可搬型記録媒体を介して提供されてもよく、或いは特には図示しないネットワーク接続装置によりネットワークから取得できるようにしてもよい。
【００３６】
以下、図１の機能構成と図２のハードウェア構成を有する本実施形態による演奏練習装置１００の動作について、以下に詳細に説明する。
【００３７】
図３は、図２において、ＣＰＵ２０１が表示部２０５にピアノロールを表示するために生成しＲＡＭ２０３に記憶するピアノロールデータのデータ構成例を示す図である。ピアノロールデータは、音符データ（演奏情報）のうち、ピアノロール上に表示するものを、表示用に効率の良い形にしたデータであり、図３（ａ）に示される手本ピアノロールデータと図３（ｂ）に示される入力ピアノロールデータとがある。図３（ａ）の手本ピアノロールデータは自動演奏情報１０５に基づいて生成され、図３（ｂ）の入力ピアノロールデータはユーザ演奏情報１０６に基づいて生成される。図３（ａ）の手本ピアノロールデータは、曲の音符数をｍとしたときに、０番目からｍ−１番目までのデータ組からなる。図３（ｂ）の入力ピアノロールデータは、ユーザの演奏に従って動的に増加してゆき、現在までの音符数ｎとしたときに、０番目からｎ−１番目までのデータ組からなる。両方のピアノロールデータの各データ組において、「発音時刻」は、ノートオンを示す自動演奏情報１０５によって音符の発音が開始される、曲の先頭を基準（ゼロ）としたときの経過時刻である。「発音時間」は、「発音時刻」からノートオフを示す自動演奏情報１０５によって音符の発音が消音するまでの時間である。「音高」は、発音開始時の音符の音高である。「音量」は、発音開始時の音量（ベロシティ）である。図３（ａ）の手本ピアノロールデータの各データ組において、「パート」は、そのデータ組が示す音符が属する例えば鍵盤演奏における右手パートまたは左手パートのいずれかを示すデータである。また、「運指」は、そのデータ組が示す音符を弾くべき指の情報である。図３（ｂ）の入力ピアノロールデータの各データ組において、「推定パート」は、例えば鍵盤入力によるユーザ演奏情報１０６はもともと左右どちらの手で弾いたかは判断されないが、ある再生時刻における入力に対してその時刻の手本ピアノロールデータの「パート」を参照して、どちらのパートか推測した結果が代入されるデータである。
【００３８】
図４は、図２において、ＣＰＵ２０１が、ＲＡＭ２０３に記憶させた手本ピアノロールデータに対応して、ＲＡＭ２０３に記憶させる小節データのデータ構成例を示す図である。曲の小節数をｋとしたとき、小節データは、０番目からｋ−１番目までのデータ組からなる。各データ組において、「開始時刻」は、曲の先頭を基準（ゼロ）としたときのそのデータ組に対応する小節の再生が開始される経過時刻である。「拍分子」と「拍分母」はそのデータ組対応する小節の拍の分子と分母をそれぞれ記憶したものであり、その小節の「拍子」の情報を表す。この「拍子」の情報は、自動演奏情報１０５に予め埋め込まれてもよいし、ＣＰＵ２０１が、自動演奏情報１０５を分析して設定してもどちらでも良い。この「拍子」の情報は、ピアノロールデータとともに、図２の表示部２０５に表示される。
【００３９】
図５は、図２において、ＣＰＵ２０１が、ＲＡＭ２０３上に生成した図３（ａ）（ｂ）に例示される手本ピアノロールデータおよび入力ピアノロールデータと、図４に例示される小節データに基づいて、表示部２０５に表示するピアノロールの表示例を示す説明図である。図２の電子楽器２０８に対応する例えば鍵盤が横向きに表示される。この鍵盤上の縦方向に１，２，３，４と数字が付けられた４つの領域が、現在自動演奏されている音符を上記数字に対応して小節単位で表示する領域である。このように、本実施形態では、現在再生中の小節を含むその前後４小節が、表示部２０５にピアノロール表示される。現在再生中の小節の領域は、それに対応する数字の右横に黒い縦棒でカーソルが表示される。図５の表示例では、カーソルの位置は３番の位置にあるので、現在再生中の領域は３番の領域（小節）である。ＣＰＵ２０１は、現在自動演奏中の曲の先頭を基準とする再生時刻に基づいて、その再生時刻に対応する「開始時刻」を記憶する小節データのデータ組を、図４に例示されるＲＡＭ２０３上の小節データ［０］〜［ｋ−１］より抽出する。ＣＰＵ２０１は、この小節データの「開始時刻」から次の小節データの「開始時刻」までの間に「発音時刻」が含まれる手本ピアノロールデータおよび入力ピアノロールデータの各データ組を、図３（ａ）および（ｂ）にそれぞれ例示されるＲＡＭ２０３上の手本ピアノロールデータ［０］〜「ｍ−１」および入力ピアノロールデータ［０］〜［ｎ−１］より抽出する。ＣＰＵ２０１は、上述の小節データを、図５のカーソル位置の小節とする。ＣＰＵ２０１は、抽出した手本ピアノロールデータの各データ組中の「音高」と「発音時刻」と「発音時間」に基づいて、「音高」に対応する鍵盤位置の上方の、小節データのデータ組で定まるカーソル位置の小節領域内に、小節データの「開始時刻」と手本ピアノロールデータの「発音時刻」との相対的な位置関係に対応する座標から「発音時間」に対応する長さの棒グラフ状の音符情報を表示する。また、手本ピアノロールデータの「パート」情報に基づいて、左手パートまたは右手パートごとに、音符情報の色を変えて表示する。図５の表示例では、一点鎖線で囲まれた左手パートの音符情報群と右手パートの音符情報群とで、色を変えて表示される。なお、一点鎖線の枠は説明のためのものであり、実際のピアノロールには表示されない。ＣＰＵ２０１は、抽出した入力ピアノロールデータの各データ組中の「音高」と「発音時刻」と「発音時間」とで上記と同様に決まる棒グラフ状の音符情報を、下の色が透過する色を用いるなどして、上記棒グラフ状に表示されている手本ピアノロールデータの音符情報に重ねるようにして表示する。図５の表示例では、破線枠で囲まれている棒グラフ状の部分が、手本ピアノロールデータの音符情報に入力ピアノロールデータの音符情報が重なっている部分である。両者がぴったりと重なっていれば、ユーザは、自分の楽器演奏が手本の自動演奏にぴったり合っていることを視覚的に認識することができる。ＣＰＵ２０１は、図３（ａ）に例示される手本ピアノロールデータのデータ組中の「運指」データを、上記棒グラフ状の音符情報に近接して表示してもよい。また、ＣＰＵ２０１は、図３（ａ）（ｂ）に例示される各ピアノロールデータのデータ組中の「音量」データに基づいて、上記棒グラフ状の音符情報の色や太さを変える等してもよい。さらに、ＣＰＵ２０１は、図４に例示される小節データのデータ組中の「拍分子」「拍分母」データに基づいて、図５の１，２，３，４で示される各小節領域毎に、例えば「拍分子／拍分母」などの「拍子」に関する情報を表示してもよい。
【００４０】
ＣＰＵ２０１は、自動演奏の進行とともに、表示部２０５に表示される例えば４小節分の各音符情報を次々と書き換えてゆくことにより、図５の表示例上で音符情報が例えば上（鍵盤側）から下に流れてゆくようなピアノロールの効果を実現する。そのときの表示進行とその停止を制御するのが、後述する演奏ガイド進行制御処理である。
【００４１】
図６は、図２において、電子楽器２０８からＭＩＤＩ  Ｉ／Ｆ２０６を介して入力されるユーザ演奏情報１０６（図１）のＭＩＤＩデータに基づいて、ＣＰＵ２０１が、ＲＡＭ２０３上に生成する入力音符データのデータ構成例を示す図である。本実施形態では、電子楽器２０８からのユーザ演奏情報１０６であるノートオン／ノートオフの情報が、音高毎に、想定音高数分のＲＡＭ２０３上のバイトバッファに値「０」または値「１」で格納されている。そして、ＣＰＵ２０１は、ＲＡＭ２０３のバイトバッファが書き換わる度、コールバックによりＲＡＭ２０３上の図６に例示される入力音符データのバッファを書き換え、音符情報をリングバッファなどの形式でバッファリングする。この入力音符データは、ユーザが演奏した例えば鍵盤の音高に対応する「ノート番号」、「ノートオン時のシステム時刻」、「ノートオフ時のシステム時刻」、「ノートオン時の再生時刻」、「ノートオフ時の再生時刻」などを記憶する。ＣＰＵ２０１は、後述する演奏ガイド進行処理において、この入力音符データを参照しながら、演奏ガイドの表示進行を制御する。
【００４２】
以下、本実施形態の制御動作について、フローチャートに沿って説明する。なお、各フローチャートの説明において、随時図１または図２の各部を参照するものとする。
【００４３】
図７は、図１の機能構成および図２のハードウェア構成を有する演奏練習装置１００が実行する演奏ガイド進行制御処理の全体動作の例を示すフローチャートである。この処理は、ＣＰＵ２０１が、ＲＯＭ２０２に記憶された演奏ガイド進行制御処理プログラムを実行する処理として実行され、図１の演奏ガイド進行制御部１０３と演奏ガイド表示部１０２と練習モード切替部１０７の各機能を実現する。
【００４４】
ユーザが、例えば入力部２０４で手本の練習曲を選択し、ピアノロールの開始を指示すると、ＣＰＵ２０１は、図７のフローチャートで例示される演奏ガイド進行制御処理を開始する。
【００４５】
ＣＰＵ２０１は、演奏ガイド進行制御処理を開始すると、まず以下の設定処理を実行する（ステップＳ７０１）．ＣＰＵ２０１は、まず、指定された曲の一部分または全体をピアノロールを実行する範囲として設定する。ＣＰＵ２０１は、ピアノロールの作成を開始する小節と終了する小節の組を、ユーザの入力部２０４からの指示に基づいて設定してもよいし、なんらかの手法に基づいて自動的に設定してもよい。ユーザは、入力部２０４において、左、右、左右パートのどのパートを練習するかを選択してもよい。その選択に基づいて、ＣＰＵ２０１は、選択されたパートの自動演奏情報１０５をＲＯＭ２０２からＲＡＭ２０３に読み出し、図３（ａ）の手本ピアノロールデータを生成する。さらに、ユーザは、入力部２０４から、練習モードを設定してよい。練習モードの設定では、前述したように、ユーザは、自身の演奏が自動演奏情報１０５が示す手本による自動演奏に対して音符毎に音高が合っているかどうかを確認しながらピアノロールの表示進行（演奏ガイドの表示進行）を行うモードか、単純にノートオンおよびノートオフだけでピアノロールの表示進行を行うモードのいずれかを指定できる。ＣＰＵ２０１は、後述する入力ピアノロールデータ生成処理において、それぞれのモードに応じた処理（図１０のステップＳ１００２またはＳ１００３）を切り替えて実行する（図１の練習モード切替部１０７の機能）。
【００４６】
上記設定処理の終了後、ＣＰＵ２０１は、ピアノロール練習処理を繰り返し実行することにより、ピアノロールの表示を進行させる（ステップＳ７０２→Ｓ７０３→Ｓ７０４→Ｓ７０２の繰返し処理）。このとき、ＣＰＵ２０１は、ステップＳ７０３で、ユーザが入力部２０４から設定変更を指示したか否かを判定し、指示があれば、ステップＳ７０１の設定処理に戻って設定を変更する。また、ＣＰＵ２０１は、ステップＳ７０４で、ユーザが入力部２０４からピアノロールの終了を指示したか否かを判定し、指示があれば、図７のフローチャートで例示される演奏ガイド進行制御処理を終了する。
【００４７】
図８は、図７のステップＳ７０２で繰り返し実行されるピアノロール練習処理の例を示すフローチャートである。
【００４８】
ＣＰＵ２０１は、表示部２０５に表示するピアノロールの背景を表示する（ステップＳ８０１）。例えば、図５の表示例における鍵盤の表示や、それを延長した音高位置表示、各小節領域の枠の表示等である。
【００４９】
次に、ＣＰＵ２０１は、表示部２０５に、ＲＡＭ２０３上の図３（ａ）に例示される手本ピアノロールデータに対して、図５を例に前述した表示処理を実行する。この処理の詳細は、図９のフローチャートを用いて後述する。
【００５０】
続いて、ＣＰＵ２０１は、ユーザによる電子楽器２０８の演奏に基づいてＭＩＤＩ  Ｉ／Ｆ２０６を介して入力するユーザ演奏情報１０６に対応してＲＡＭ２０３上の入力バッファに図６の例で前述した入力音符データを順次生成する。そして、ＣＰＵ２０１は、その入力音符データから、図３（ｂ）の例で前述した入力ピアノロールデータをＲＡＭ２０３上に生成する（以上、ステップＳ８０３）。この処理の詳細は、図１０から図１２のフローチャートを用いて後述する。
【００５１】
そして、ＣＰＵ２０１は、ステップＳ８０３で生成した入力ピアノロールデータに対して、図５を例に前述した表示処理を実行する（ステップＳ８０４）。
【００５２】
最後に、ＣＰＵ２０１は、図５の例で説明したカーソル位置をピアノロール上に表示する（ステップＳ８０５）。
【００５３】
図９は、図８のステップＳ８０２の手本ピアノロールデータ表示処理の例を示すフローチャートである。
【００５４】
ＣＰＵ２０１はまず、現在決定しているカーソル時刻      から、表示する小節の番号を決め、ＲＡＭ２０３上に設定した表示小節番号リストに保存する（ステップＳ９０１）。カーソル時刻は、図５の例で説明したカーソル位置に対応する時刻であり、図１０から図１２のフローチャートで後述する図８のステップＳ８０３の入力ピアノロールデータ生成処理で更新される。図５の例で前述したように、例えば、ピアノロールで一度に表示できる小節数が４だとして、ピアノロール表示をする曲全体の中の小節の範囲として例えば６小節分が選択されているとする。この場合、単純にピアノロールが進行する場合、カーソル時刻が小節１の中、小節２の中、小節３の中と進んでいくに従い、「１・２・３・４」小節、「２・３・４・５」小節、「３・４・５・６」小節というように、表示する小節の番号が順次決定されることになる。
【００５５】
次に、ＣＰＵ２０１は、小節番号を示すＲＡＭ２０３上の変数ｉの値をステップＳ９０２で０に初期化した後、ステップＳ９０６で変数ｉの値を＋１ずつインクリメントしながら、ステップＳ９０７で変数ｉの値が表示小節番号リストの要素数（本実施形態では例えば４）に達したと判定するまで、ステップＳ９０３からＳ９０５の一連の処理を実行する。
【００５６】
まず、ＣＰＵ２０１は、変数ｉが示す小節に含まれる手本ピアノロールデータを、ＲＡＭ２０３から取得する（ステップＳ９０３）。図３（ａ）で前述したように、ＣＰＵ２０１は、この小節に対応する図４に例示した小節データの「開始時刻」から次の小節データの「開始時刻」までの間に「発音時刻」が含まれる手本ピアノロールデータを、図３（ａ）に例示されるＲＡＭ２０３上の手本ピアノロールデータ［０］〜「ｍ−１」より抽出する。
【００５７】
ＣＰＵ２０１は、図５の例で前述したように、抽出した手本ピアノロールデータの各データ組中の「音高」と「発音時刻」と「発音時間」に基づいて、棒グラフ状の音符情報の座標データを算出する（ステップＳ９０４）。そして、ＣＰＵ２０１は、その音符情報を表示部２０５のディスプレイに表示する（ステップＳ９０５）。
【００５８】
本実施形態では、図５に例示したように入力ピアノロールデータをお手本ピアノロールデータに対して重ね合わせて表示するために、カーソルが過ぎてからある一定時間そのまま表示を更新しないように表示小節を管理する必要があり、ピアノロールで一度に表示できる小節数が４だとして、ピアノロール表示をする楽曲全体の小節範囲として６小節分が選択されている場合に、カーソル時刻が小節１の中、小節２の中、小節３の中と進んでいくに従い、「１・２・３・４」小節、「１・２・３・４」小節、「２・３・４・５」小節と、例えば２小節分遅延してから更新を開始するなどの制御を行ってよい。また、最大同時表示小節数と、カーソルが過ぎたあと残しておく小節数は、ユーザが入力部２０４から設定できるようにしてよい。
【００５９】
図１３から図１５は、カーソル進行の例を示す説明図である。これらの例では、まだ再生をしていない小節、カーソル位置の小節、再生済みの小節、鍵盤部というようにピアノロールが表示されている。各小節領域毎に、一定の遅れをもって表示が更新されてよい。例えば、図１５の例では、７小節目にカーソルが位置しているときに、２小節分遅れ、５・６・７・８小節が表示されている。
【００６０】
図１０は、図８のステップＳ８０３の入力ピアノロールデータ生成処理の例を示すフローチャートである。
【００６１】
ＣＰＵ２０１は、図７のステップＳ７０１の設定処理で、手本による自動演奏に対して音符毎に音高が合っているかどうかを確認しながらピアノロールの表示進行を行うモード（以下「手本参照モード」と呼ぶ）か、単純にノートオンおよびノートオフだけでピアノロールの表示進行を行うモード（以下「手本非参照モード」と呼ぶ）のいずれが選択されているかを判定する（ステップＳ１００１）。
【００６２】
ＣＰＵ２０１は、手本参照モードが選択されている場合には、手本参照モードにおけるカーソル時刻更新処理（ステップＳ１００２）と、ピアノロール上でユーザの演奏による音符情報を手本の自動演奏に重ねて表示するための図３（ｂ）の例で前述した入力ピアノロールデータ生成の処理（ステップＳ１００３）を実行する。
【００６３】
一方、ＣＰＵ２０１は、手本非参照モードが選択されている場合には、手本非参照モードにおけるカーソル時刻更新処理（ステップＳ１００４）を実行する。そして、その後ピアノロール上でユーザの演奏による音符情報を手本の自動演奏に重ねて表示するための図３（ｂ）の例で前述した入力ピアノロールデータ生成の処理（ステップＳ１００３）を実行する。
【００６４】
図１１は、図１０のステップＳ１００２の手本を参照するカーソル時刻更新処理の例を示すフローチャートである。この処理では、ＣＰＵ２０１は、大きく分けて、５種類の制御処理を実行する。
【００６５】
まず、ＣＰＵ２０１は、第１の制御処理として、練習開始時、またはユーザが電子楽器２０８の鍵盤を押鍵中でノートオンの状態を維持しているときに、ピアノロールの表示進行が進むようにし、手本ピアノロールデータの音符が発生するイベントタイミングに到達したらそこで停止させる制御処理を実行する。
【００６６】
ＣＰＵ２０１はまず、ＲＡＭ２０３に記憶している判定待ちフラグの論理値がＯＮ（オン）の状態であるか否かを判定する。判定待ちフラグについては後述するが、最初は判定待ちフラグの論理値はＯＦＦ（オフ）であるため、ステップＳ１１０１の判定はＮＯとなる。
【００６７】
次に、ＣＰＵ２０１は、練習開始時であるか、ＲＡＭ２０３上の最新の入力音符データ（図６）を参照する等することによりユーザの演奏がノートオン中であるか、またはＲＡＭ２０３上の自動加算フラグがオンで自動加算中であるか、のいずれかの状態であるか否かを判定する（ステップＳ１１０２）。練習開始時は、ステップＳ１１０２の判定はＹＥＳとなる。
【００６８】
次に、ＣＰＵ２０１は、ステップＳ１１０３からＳ１１０６の一連の処理によって、ピアノロール上での現在のイベントタイミングで、手本ピアノロールデータによる音符のノートオンが発生するか否かをチェックする。すなわち、ＣＰＵ２０１は、ピアノロール上でカーソルの存在する小節内の音符を順次処理するための、音符の番号を示すＲＡＭ２０３上の変数ｉをステップＳ１１０３で０に初期化した後、ステップＳ１１０５で変数ｉの値を＋１ずつインクリメントしながら、ステップＳ１１０６で、変数ｉの値が表示中のカーソル位置の小節内の手本ピアノロールデータの音符数に達したと判定するまで、ステップＳ１１０４で、現在のイベントタイミングが各音符番号に対応する手本ピアノロールデータの発音時刻（図３（ａ）参照）に一致するか否かを判定する。
【００６９】
現在のカーソル時刻が、現在のカーソル位置の小節内のどの手本ピアノロールデータの発音時刻にも一致しない場合は、ステップＳ１１０４の判定がＹＥＳとならないまま、ステップＳ１１０６の判定がＹＥＳとなる。その結果、ＣＰＵ２０１は、ＲＡＭ２０３上の判定待ちフラグがオフか否かを判定する（ステップＳ１１０７）。
【００７０】
現在のイベントタイミングが手本ピアノロールデータの発音時刻に一致しないうちはステップＳ１１１１が実行されず、判定待ちフラグはオフのままとなり、ステップＳ１１０７の判定がＹＥＳとなる。この場合には、ＣＰＵ２０１は、ＲＡＭ２０３上に記憶しているカーソル時刻の変数を更新する（ステップＳ１１０８）。このカーソル時刻の更新により、ピアノロール上のカーソル位置が順次進行されることとなる。このとき、ＣＰＵ２０１は、図７のステップＳ７０１の設定処理で設定されたテンポの情報に基づいて、ピアノロールを進行させるためのカーソル時刻の更新量を決定してよい。例えば、ＢＰＭ＝１２０（１分間に４分音符が１２０回鳴る)、４／４拍子、ピアノロールの表示上１小節の長さが固定値（例えば１００ピクセル）である場合、１分間に１２０／４＝３０小節進むため、２秒で１小節（１００ピクセル）カーソル位置が進行する。テンポを半分のＢＰＭ＝６０にした場合、４秒で１小節（１００ピクセル）カーソル位置が進行する。従って、画面の解像度に応じて、例えば、１ピクセル分カーソル位置が進行する時間をテンポに応じて算出し、この時間に応じたシステムクロック数などに基づいて、カーソル時刻を更新することができる。また、一般的なＭＩＤＩ信号で、例えば、１小節が９６０ティックに分割されているような場合、このようなテンポおよびティック数に応じて、ピアノロール上で１ティックずつ進む場合の時間（クロック数）を基にカーソル時刻を更新してゆくことも可能である。なお、カーソル時刻は、ＣＰＵ２０１が計時するシステム時刻に基づいて決定してよい。
【００７１】
カーソル時刻が更新されることにより、前述した図８のステップＳ８０２の手本ピアノロールデータ表示処理において、図９のステップＳ９０１において、上述したように更新されたカーソル時刻に基づいて小節のカーソル位置が進行したピアノロールが表示されることになる。
【００７２】
上述したステップＳ１１０４からＳ１１０６までの繰返し処理において、現在のカーソル時刻が、現在のカーソル位置の小節内のいずれかの手本ピアノロールデータの発音時刻に一致し、ステップＳ１１０４の判定がＹＥＳになると、ＣＰＵ２０１は、ＲＡＭ２０３上の後述する自動加算フラグの論理値をＯＦＦに設定し（ステップＳ１１１０）、ＲＡＭ２０３上の判定待ちフラグの論理値をＯＮに設定し（ステップＳ１１１１）、ステップＳ１１０４で判定された、イベントタイミングが到来した手本ピアノロールデータの音符情報をＲＡＭ２０３上に一時保存する（ステップＳ１１１２）。
【００７３】
その後、ＣＰＵ２０１は、ステップＳ１１０４からＳ１１０６の繰返し処理に戻り、現在のカーソル位置が示す小節内の、他の音符番号に対応する手本ピアノロールデータの中で、発音時刻が現在のイベントタイミングに一致して同時発音すべきものがあるか否かをさらにチェックする。同時発音すべきデータが見つかったら、ステップＳ１１０４の判定が再びＹＥＳとなり、ステップＳ１１１２で、新たに判定された手本ピアノロールデータの音符情報をＲＡＭ２０３上に一時保存する。
【００７４】
上述のようにして、ステップＳ１１１１で判定待ちフラグが１回でもオンされた後にステップＳ１１０６の判定がＹＥＳになると、判定待ちフラグがオンになっているため、その次に実行されるステップＳ１１０７の判定がＮＯとなる。この結果、ステップＳ１１０８のカーソル時刻の更新は実行されずに、図１１のフローチャートの処理を終了する。
【００７５】
以上のようにして、練習開始時には、ピアノロールの表示進行がスタートし、手本ピアノロールデータによる最初の音符が発音されるイベントタイミングに到達したらそこでピアノロールが一旦停止して、ユーザによる演奏を待つという第１の制御処理が実行される。
【００７６】
以上のようにして判定待ちフラグがオンになると、ＣＰＵ２０１は、図７におけるステップＳ７０２〜Ｓ７０４のループで図８のステップＳ８０３から図１０のステップＳ１００２を経由する繰り返し処理により、図１１のフローチャートの処理を再び実行する次のカーソル時刻処理タイミングで、ステップＳ１１０１の判定がＹＥＳとなる。この結果、ＣＰＵ２０１は、ステップＳ１１１２でＲＡＭ２０３に一時保存した手本ピアノロールデータの、同時に発音される１つ以上の音符情報中の音高（図３（ａ）参照）に、ユーザの押鍵で発生した最新の１つ以上の入力音符データ中のノート番号（音高）が一致しているか否かのノート正誤判定を行う（ステップＳ１１１３、Ｓ１１１４）。この判定では、音高だけに限らず、音量やその他のノート正誤の評価が可能なパラメータが判定されてもよい。
【００７７】
ユーザが正しい押鍵を行わずステップＳ１１１４の判定がＮＯならば、そのまま今回のカーソル時刻更新処理を終了する。そして、次のカーソル時刻処理タイミングになったときに、再び図１１のフローチャートが実行され、今度は判定待ちフラグがＯＮになっているためステップＳ１１０１の判定がＹＥＳとなる。そして再び、ステップＳ１１１３→Ｓ１１１４の処理へと進む。このようにして、ユーザが正しい押鍵を行うまで、カーソル時刻更新処理（ステップＳ１１０８）が実行されない。カーソル時刻が更新されないことにより、前述した図８のステップＳ８０２の手本ピアノロールデータ表示処理において、図９のステップＳ９０１において、カーソル時刻が変わらないため、ピアノロールの表示は進行が停止する状態となる。
【００７８】
次に、ＣＰＵ２０１は、第２の制御処理として、ユーザがピアノロールが停止している位置で正しい押鍵を行った場合に、第１の制御処理による次のイベントタイミングまでのピアノロールの表示進行を再開する制御処理を実行する。
【００７９】
この場合、Ｓ１１０１の判定がＹＥＳ→Ｓ１１１３→Ｓ１１１４という処理経路において、ユーザの正しい押鍵によりステップＳ１１１４の判定がＹＥＳになる。これにより、ＣＰＵ２０１は、判定待ちフラグの論理値をＯＦＦにする（ステップＳ１１１５）。この結果、ユーザが押鍵の状態を維持している間、次以降のカーソル時刻処理タイミングで、判定待ちフラグがオフによりステップＳ１１０１の判定がＮＯとなり、さらにノートオン中によりステップＳ１１０２の判定がＹＥＳとなって、前述した第１の制御処理と同様の制御経路が実行されることにより、ステップＳ１１０６の判定がＹＥＳ→Ｓ１１０７の処理へと進む。判定待ちフラグはオフとなっているため、ステップＳ１１０７の判定がＹＥＳとなり、ＣＰＵ２０１は、ステップＳ１０８でカーソル時刻の更新を実行する。これにより、ユーザが押鍵の状態を維持している間、手本ピアノロールデータの音符情報に対応する次のイベントタイミングまで、ピアノロールの表示進行が進むことになる。
【００８０】
また、上述のユーザが正しい押鍵を行ってピアノロールが進行する間にも、各イベントタイミングが次の１つ以上の手本ピアノロールデータの音符情報の発音時刻に一致すれば、再びステップＳ１１０４の判定がＹＥＳ→ステップＳ１１１０→Ｓ１１１１→Ｓ１１１２が実行されることにより、前述したように、さらにユーザの押鍵待ちの状態に移行して、ピアノロールの表示進行が停止しユーザによる新たな押鍵入力待ちの状態となる。つまり、ユーザが押鍵している間に、その音を離鍵せずにさらに別の音を押鍵すべきタイミングが来たような場合にも、その別の音を正しく押鍵するまでは再びピアノロールの進行を止めることができる。
【００８１】
次に、ＣＰＵ２０１は、第３の制御処理として、ユーザが正しい押鍵を行った後に押鍵を継続している状態で押鍵していた鍵を離鍵して、入力音符データがノートオンからノートオフとなったときに、ピアノロールの表示進行を停止する制御処理を実行する。
【００８２】
この場合、ＣＰＵ２０１は、判定待ちフラグがＯＦＦでステップＳ１１０１の判定がＮＯ→Ｓ１１０２の判定がＮＯ→Ｓ１１１６のノートオンからノートオフの判定がＹＥＳ→Ｓ１１１７のスタッカートまたは休符の判定がＮＯとなって、カーソル時刻の更新処理を実行せずに終了する。カーソル時刻が更新されないことにより、前述した図８のステップＳ８０２の手本ピアノロールデータ表示処理において、図９のステップＳ９０１において、カーソル時刻が変わらないため、ピアノロールの表示進行が停止する状態となる。
【００８３】
ここで、ステップＳ１１１７の判定がＮＯとなる条件は、ステップＳ１１１２でＲＡＭ２０３に一時記憶された手本ピアノロールデータによる音符が、スタッカートおよび休符のどちらでもない場合、ならびにユーザによるノートオンからノートオフまでの発音時間が手本ピアノロールデータのノートイベントの発音時間（図３（ａ）参照）の許容範囲（例えば８０％以上）となっていない場合である。すなわち、ユーザが、スタッカートおよび休符以外の場所で、手本ピアノロールデータの音符情報が示す音符長よりもあまりに早く離鍵してしまった場合に、ピアノロールの表示進行が停止する。この場合には、ＣＰＵ２０１は、音符情報毎に、ノートオフしたときの発音時間をＲＡＭ２０３等に記憶しておく。そして、次に、ユーザが、同じ音高の鍵を再度押鍵（ノートオン）し、ステップＳ１１０２の判定がＹＥＳとなってピアノロールの表示進行が再開し、さらにそれを離鍵してステップＳ１１１６からＳ１１１７が実行されたときに、ＣＰＵ２０１は、記憶しておいた発音時間に今回の発音時間を加算した結果に対して、上記ノートイベント許容範囲の判定を行うようにしてよい。
【００８４】
次に、ＣＰＵ２０１は、第４の制御処理として、入力音符情報がノートオンからノートオフに変化したタイミングで、直前のイベントタイミング時のピアノロールデータが示す音符情報がスタッカートまたは休符のいずれか、あるいはノートイベント許容範囲内であるときに、ピアノロールの表示進行をスタッカートまたは休符に対応する音符長または許容範囲内でノートオフしたときの音符の残り時間長に対応する時間だけ自動的に進めてから停止する制御を実行する。
【００８５】
この場合、ＣＰＵ２０１は、ステップＳ１１１６の判定がＹＥＳとなった後、ステップＳ１１１７の判定がＹＥＳとなる。この結果、ＣＰＵ２０１は、ＲＡＭ２０３の変数として確保されている自動加算時間に、スタッカートまたは休符に対応する音符長または許容範囲内でノートオフしたときの音符の残り時間長に対応する時間値をセットし（ステップＳ１１１８）、ＲＡＭ２０３上の自動加算フラグをＯＮし（ステップＳ１１１９）、ステップＳ１１２０のカーソル時刻の更新処理に進む。
【００８６】
その後、ＣＰＵ２０１は、ユーザが何も演奏をしなくても、自動加算フラグがオンになっているために、ステップＳ１１０１の判定がＮＯ→Ｓ１１０２の判定がＹＥＳ→Ｓ１１０４〜Ｓ１１０６の繰返し処理の後、ステップＳ１１０７の判定がＹＥＳ→ステップＳ１１０８と進んで、ステップＳ１１０８でのカーソル時刻の更新処理を繰り返し実行する。さらに、ＣＰＵ２０１は、ステップＳ１１０９の判定がＹＥＳ→Ｓ１１２１と処理を進め、自動加算時間が０以下にならない限り（ステップＳ１１２１の判定がＮＯである限り）、ステップＳ１１２２で自動加算時間から今回の経過時間を減算しながら、ステップＳ１１０８でのカーソル時刻の更新処理を繰り返し実行する。
【００８７】
ＣＰＵ２０１は、ステップＳ１１２２での自動加算時間の減算の繰返しにより、やがてステップＳ１１２１の判定がＹＥＳになると、ステップＳ１１２３で自動加算フラグの論理値をＯＦＦにして、カーソル時刻の更新をしなくなる。
【００８８】
このようにして、スタッカートまたは休符、あるいはノートイベント許容範囲でのノートオフについては、ユーザがなにもしなくてもピアノロールの表示進行をそれらの音符長または残り時間長に対応する時間だけ進めるようにすることにより、練習を自然に進行させることが可能となる。例えば、図１３から図１５に示されるカーソル進行の例において、例えば図１３および図１４の右手パート、図１５の右手パートと左手パートの後半などでは、スタッカートや休符の処理が多くなっているが、これらの場合には、ピアノロールの表示進行をストップさせずに進めることが可能となる。
【００８９】
上述の自動加算による自動進行中において、ステップＳ１１０４からＳ１１０６の繰返し処理の中で、各イベントタイミングが次の１つ以上の手本ピアノロールデータの音符情報の発音時刻に一致すれば、ステップＳ１１０４の判定がＹＥＳ→ステップＳ１１１０→Ｓ１１１１→Ｓ１１１２が実行されることにより、前述した第２の制御処理に移行して、ピアノロールの自動表示進行が停止しユーザによる新たな押鍵入力待ちの状態となる。この場合、自動加算時間はゼロとなっているはずのものであるが、念のため自動加算時間をクリアすることとしても良い。
【００９０】
最後に、第５の制御処理として、ＣＰＵ２０１は、ユーザがどの鍵も押鍵せずに新たな入力音符データが入力していない状態のときに、ピアノロールの表示進行の停止を維持する制御処理を実行する。すなわち、このような場合には、ＣＰＵ２０１は、ステップＳ１１０１の判定がＮＯ→Ｓ１１０２の判定がＮＯ→Ｓ１１１６の判定もＮＯとなって、カーソル時刻の更新処理を実行せずに終了する。カーソル時刻が更新されないことにより、前述した図８のステップＳ８０２の手本ピアノロールデータ表示処理において、図９のステップＳ９０１において、カーソル時刻が変わらないため、ピアノロールの表示進行の停止状態が維持される。
【００９１】
図１２は、図１０のステップＳ１００４の手本を参照しないカーソル時刻更新処理の例を示すフローチャートである。この処理では、ＣＰＵ２０１は、ノートオンしている間には演奏ガイドの表示進行を進め、ノートオフしたら少しだけ進行を進めた後に進行の表示をノートオフした位置に戻す制御を行う。
【００９２】
ＣＰＵ２０１はまず、ユーザの押鍵に基づく入力音符データとして、ユーザが何らかの鍵の押鍵している（ノートオン中である）か否かを判定する（ステップＳ１２０１）。
【００９３】
ユーザがノートオン中でステップＳ１２０１の判定がＹＥＳになると、ＣＰＵ２０１は、カーソル時刻の更新処理を実行する（ステップＳ１２０２）。この処理は、前述した図１１のステップＳ１１０８の処理と同様である。この結果、カーソル時刻が更新されることにより、前述した図８のステップＳ８０２の手本ピアノロールデータ表示処理において、図９のステップＳ９０１において、上述したように更新されたカーソル時刻に基づいて小節のカーソル位置が進行したピアノロールが表示されることになる。ステップＳ１２０２の処理の後、ＣＰＵ２０１は、図１２のフローチャートで示される図１０のステップＳ１００４のカーソル時刻更新処理を終了する。
【００９４】
ユーザがノートオン中でなく、ステップＳ１２０１の判定がＮＯになると、ＣＰＵ２０１は、入力音符データ（図６参照）上で、ノートオンからノートオフへのイベントが発生したか否か、すなわち、ユーザがノートオンしていた音を離鍵（ノートオフ）したか否かを判定する（ステップＳ１２０３）。
【００９５】
ステップＳ１２０３の判定がＹＥＳになると、ＣＰＵ２０１は、入力音符データ上のノートオフ時のシステム時刻（図６参照）をＲＡＭ２０３に保存した後（ステップＳ１２０４）、ＲＡＭ２０３の変数として確保されている自動加算時間に所定値をセットし（ステップＳ１２０５）、ＲＡＭ２０３上の自動加算フラグをＯＮする（ステップＳ１２０６）。その後、ＣＰＵ２０１は、図１２のフローチャートで示される図１０のステップＳ１００４のカーソル時刻更新処理を終了する。
【００９６】
その後、ＣＰＵ２０１は、ユーザが何も演奏をしなくても、ステップＳ１２０１の判定がＮＯ→Ｓ１２０２の判定がＮＯ→Ｓ１２０７の判定がＮＯと進む。そして、自動加算フラグがＯＮであることによりステップＳ１２０９の判定がＹＥＳになる。ＣＰＵ２０１は、自動加算時間が０以下にならない限り（ステップＳ１２１０）、ステップＳ１２１３で自動加算時間から所定の経過時間を減算しながら、ステップＳ１２１２でのカーソル時刻の更新処理を繰り返し実行する。
【００９７】
ＣＰＵ２０１は、ステップＳ１２１３での自動加算時間の減算の繰返しにより、やがてステップＳ１２１０の判定がＹＥＳになると、カーソル時刻として、ステップＳ１２０４でＲＡＭ２０３に保持されていたノートオフシステム時刻を代入し（ステップＳ１２１１）、自動加算フラグの論理値をＯＦＦにして（ステップＳ１２０８）、カーソル時刻の更新をしなくなる。その後、ＣＰＵ２０１は、図１２のフローチャートで示される図１０のステップＳ１００４のカーソル時刻更新処理を終了する。
【００９８】
上記カーソル時刻の更新処理中に、入力音符データにおいてノートオフからノートオンへのイベントが発生すると、ステップＳ１２０７の判定がＹＥＳになる。この結果、ＣＰＵ２０１は、自動加算フラグの論理値をＯＦＦにして（ステップＳ１２０８）、図１２のフローチャートで示される図１０のステップＳ１００４のカーソル時刻更新処理を終了する。次回のカーソル時刻の更新処理のタイミング以降、ステップＳ１２０１の判定がＹＥＳとなるため、ユーザが押鍵を継続してノートオンが継続される限りカーソル時刻が更新され（ステップＳ１２０２）、ピアノロールの表示進行が進む状態が続く。
【００９９】
以上のようにして、ユーザは、自動演奏情報１０５が示す音符情報と自分の演奏とが合っているかどうかをあまり気にする必要なく、ピアノロールの表示進行を進めることが可能となる。手本データを特に認識していない場合でも、ノートオフしてから数秒カーソルを自動で進め、その間にノートオンが無ければノートオフした位置までカーソルが戻るという仕様を入れることでスタッカートや休符があっても練習できるようになる。この場合は、ステップ１２０５でセットする自動加算時間に、所望の（例えば数秒の）時間をセットすることにより実現できる。
【０１００】
その他、手本データを使用した場合には、ノートオンの音高が合っていないとカーソルが進まないようにすることや、両手協調タイプがあっていないと進まないようにするなど、何か正誤を確認する要素を入れることで多彩な練習が可能になる。
【０１０１】
また、本実施形態では、図５に例示したように、手本データと入力データを重ねて表示することで、正誤をすぐさま確認することが可能となる。
【０１０２】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、当該楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、当該読み出された音符情報及び当該読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させる演奏ガイド表示部と、
ユーザ演奏により入力されるユーザ演奏情報を判別し、当該ユーザ演奏情報が示す演奏状態に応じて、前記演奏ガイド情報表示の進行を制御する演奏ガイド進行制御部と、
を備えることを特徴とする演奏練習装置。
（付記２）
前記演奏ガイド進行制御部は、
前記読み出された自動演奏情報の音符情報が表す発音タイミングに到達した場合に、前記演奏ガイド表示の進行を停止し、
入力された前記ユーザ演奏情報が、当該発音タイミングに到達した音符に対応しているときに、前記演奏ガイド表示の進行を再開する、
ことを特徴とする付記１に記載の演奏練習装置。
（付記３）
前記演奏ガイド進行制御部は、
前記楽曲の進行に合わせて読み出された音符情報と前記入力されたユーザ演奏情報とが対応しているときは前記演奏ガイド表示を進行させ、
前記ユーザ演奏情報の入力が中断した場合、当該入力が中断された時点で読み出されている音符情報に基づいて前記入力の中断が許容されるものであるか否かを判断するとともに、
前記入力の中断が許容されるものであると判断された場合は、前記楽曲の進行に合わせて読み出された音符情報に続く音符情報の発音タイミングまで、前記演奏ガイド表示を進行させる、
ことを特徴とする付記１または２に記載の演奏練習装置。
（付記４）
前記演奏ガイド進行制御部は、
前記ユーザ演奏情報の入力が中断した場合に、当該入力の中断が、前記楽曲の進行に合わせて読み出された音符情報がスタッカートあるいは休符であることに起因している場合、または前記入力の中断の長さが、予め定められた許容範囲内である場合に、前記入力の中断が許容されるものと判断する、
ことを特徴とする付記３に記載の演奏練習装置。
（付記５）
前記演奏ガイド進行制御部は、
入力する前記ユーザ演奏情報が、ノートオンを示しているときに、前記演奏ガイド表示の進行を進め、
入力する前記ユーザ演奏情報が、ノートオンからノートオフに変化したときに、前記演奏ガイド表示の進行を予め定められた時間進めてから前記演奏ガイド表示の進行を当該ノートオフに対応するタイミング位置に戻して停止し、
前記演奏ガイド表示の進行を前記予め定められた時間進める動作を実行している最中に、前記ユーザ演奏情報がノートオフからノートオンに変化したときに、当該動作を解除する、
ことを特徴とする付記１から４のいずれかに記載の演奏練習装置。
（付記６）
付記２ないし４のいずれかに記載された前記演奏ガイド進行制御部による制御モードと、付記５に記載された前記演奏ガイド進行制御部による制御モードとを、前記ユーザの指示に基づいて切り替える練習モード切替部をさらに備える、
ことを特徴とする演奏練習装置。
（付記７）
前記演奏ガイド表示部は、前記演奏ガイド表示に対応する前記音符情報に重ねて、入力される前記ユーザ演奏情報に対応する音符情報を前記表示画面上に表示する、
ことを特徴とする付記１ないし７のいずれかに記載の演奏練習装置。
（付記８）
演奏練習装置で用いられる演奏練習方法であって、前記演奏練習装置は、
記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、当該楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、当該読み出された音符情報及び当該読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させ、
ユーザ演奏により入力されるユーザ演奏情報を判別し、当該ユーザ演奏情報が示す演奏状態に応じて、前記演奏ガイド情報表示の進行を制御する、演奏練習方法。
（付記９）
演奏練習装置として用いられるコンビュータに、
記憶手段に記憶される楽曲を構成する少なくとも複数の音符情報からなる自動演奏情報から、当該楽曲の進行に合わせて対応する音符情報を順次読み出すとともに、当該読み出された音符情報及び当該読み出された音符情報の前後の音符情報に基づいた演奏ガイド情報を表示画面上に表示させるステップと、
ユーザ演奏により入力されるユーザ演奏情報を判別し、当該ユーザ演奏情報が示す演奏状態に応じて、前記演奏ガイド情報表示の進行を制御するステップと、
を実行させる演奏練習プログラム。
【符号の説明】
【０１０３】
１００  演奏練習装置
１０１  自動演奏情報記憶部
１０２  演奏ガイド表示部
１０３  演奏ガイド進行制御部
１０４  楽器
１０５  自動演奏情報
１０６  ユーザ演奏情報
１０７  練習モード切替部
２０１  ＣＰＵ
２０２  ＲＯＭ
２０３  ＲＡＭ
２０４  入力部
２０５  表示部
２０６  ＭＩＤＩ  Ｉ／Ｆ（ＭＩＤＩインタフェース部）
２０７  バス
２０８  電子楽器
【図１】
2015069151.tif 000003
【図２】
2015069151.tif 000004
【図３】
2015069151.tif 000005
【図４】
2015069151.tif 000006
【図７】
2015069151.tif 000007
【図８】
2015069151.tif 000008
【図９】
2015069151.tif 000009
【図１０】
2015069151.tif 000010
【図１１】
2015069151.tif 000011
【図１２】
2015069151.tif 000012
【図５】
2015069151.tif 000013
【図６】
2015069151.tif 000014
【図１３】
2015069151.tif 000015
【図１４】
2015069151.tif 000016
【図１５】
2015069151.tif 000017