(57)【特許請求の範囲】
【請求項１】
先行する音符の直前からそれに続く音符の直前までの音符の表示間隔がその先行する音符の音符長に正比例しておらず、かつ少なくとも一部の音符の表示間隔が等間隔でない楽譜を表示するために、夫々音符画像及び座標からなる複数の音符データを記憶する音符データ記憶手段と、
音符データ記憶手段に記憶された複数の音符データの少なくとも一部を読み出し、当該音符データに含まれる音符画像を対応する座標にて指定される表示手段の表示画面上の位置に表示させる表示制御手段と、
この表示制御手段にて前記表示手段に表示された音符画像の表示位置を設定された速度で所定方向にスクロールさせるスクロール手段と、
このスクロール手段によりスクロールされた音符画像の表示位置を表わす前記スクロール方向に対応する座標が、前記表示手段の表示画面上に設定された位置の座標に到達したか否かを判別する判別手段と、
この判別手段により到達したと判別された場合に、当該到達した音符画像が表わす音符の音符長と、前記到達した音符画像の表示位置とこれに続く音符画像の表示位置との前記スクロール方向における差分とに基づいて前記スクロール手段にてスクロールさせる速度を変更するスクロール速度変更手段と、
を具備することを特徴とする楽譜表示装置。
【請求項２】
前記スクロール速度変更手段は、前記到達した音符画像の表示位置とこれに続く音符画像の表示位置との前記スクロール方向における差分に基づいてスクロールさせる速度を算出し、前記到達した音符画像が表わす音符の音符長の長さに応じて前記算出されたスクロール速度を増減させる、ことを特徴とする請求項１記載の楽譜表示装置。
【請求項３】
コンピューターに、
先行する音符の直前からそれに続く音符の直前までの音符の表示間隔がその先行する音符の音符長に正比例しておらず、かつ少なくとも一部の音符の表示間隔が等間隔でない楽譜を表示するための夫々音符画像及び座標からなる複数の音符データを記憶する音符データ記憶手段から複数の音符データの少なくとも一部を読み出し、当該音符データに含まれる音符画像を対応する座標にて指定される表示手段の表示画面上の位置に表示させる表示制御機能と、
前記表示手段に表示された音符画像の表示位置を設定された速度で所定方向にスクロールさせるスクロール機能と、
このスクロールされた音符画像の表示位置を表わす前記スクロール方向に対応する座標が、前記表示手段の表示画面上に設定された位置の座標に到達したか否かを判別する判別機能と、
この判別機能により到達したと判別された場合に、当該到達した音符画像が表わす音符の音符長と、前記到達した音符画像の表示位置とこれに続く音符画像の表示位置との前記スクロール方向における差分とに基づいて前記スクロール手段にてスクロールさせる速度を変更するスクロール速度変更機能と、
を実現させるためのプログラムを記録したコンピューター読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、楽譜をそれが表す演奏の内容に沿ってスクロール表示するための技術に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
現在では、楽譜をＬＣＤなどの表示装置上に表示させる楽譜表示装置が製品化されている。その楽譜は楽器を練習するうえで必要不可欠である。このことから、多くの楽譜表示装置は電子楽器や自動演奏装置（シーケンサー）などの楽音発生装置に搭載されるか、或いはそれに接続させて用いられるようになっている。それ以外には、専用のソフトウェアをパーソナル・コンピュータ（以降、パソコンと略記する）などのデータ処理装置に実行させることにより実現されるものもある。
【０００３】
楽譜表示装置のなかには、楽譜のスクロール表示、即ちそれまで表示させている部分の楽譜のなかで最も早く演奏すべき部分（音符やその周辺）を消去させつつ、その消去に合わせて、表示させている部分の最後に続く部分を新たに表示させるということを行えるようになっているものがある。そのスクロール表示を行うことで、楽譜を表示できる面積が小さくとも、楽器を演奏するユーザに対して楽譜のなかで演奏すべき箇所を常に提示できるようになる。
【０００４】
楽譜の表示は、その画像データを描画するか、或いは音符や変化記号（嬰記号や変記号）などの表示すべきシンボルの種類を示すデータやその表示位置を指定するデータなどからなるデータの組み合わせに従って、シンボルの画像データを配置することで行われる。
【０００５】
楽譜のスペーシング（譜割り）は、演奏上、先行する音符の直前からそれに続く音符の直前までの間隔（以降、音符間隔と呼ぶ）がその先行する音符の音の長さ（音符長）に正比例している（例えば４分音符の音符間隔は８分音符の音符間隔の２倍となっている）リニアスペーシングと、その音符間隔が先行する音符の音長に必ずしも正比例していないノンリニアスペーシングと、に大別される。パソコン用のソフトウェアなどでは普通、前者の方法で楽譜を表示するようになっており、一般的に印刷されて流通している楽譜は後者の方法で記譜されている。なお、ノンリニアスペーシングに関しては、その記譜法に厳密な規則が存在しているわけではなく、楽譜浄書家が自身の経験則や美的感覚などを基に行っているのが実情である。
【０００６】
従来の楽譜表示装置は、リニアスペーシングで作成された楽譜を対象にスクロール表示を行っていた。そのために、スクロールは、小節線間の幅や拍子、及びテンポなどからスクロールの速度を予め決定し、その決定した速度で行うようになっていた。
【０００７】
リニアスペーシングとノンリニアスペーシングとを比較すると、読みやすさという点でノンリニアスペーシングの方が優れている。このことから、ノンリニアスペーシングで作成された楽譜を表示するほうが望ましい。しかし、ノンリニアスペーシングで作成された楽譜では、上述したように、音符間隔が音符の音符長と必ずしも正比例していない。このため、予め定めた速度でスクロールを行うと、演奏すべきタイミングとなる前に音符を消去させたり、或いはそのタイミングのときに先行する音符が消去されていないといったことが起こってしまい、ユーザが楽譜の内容を正確に読み取れなくなるという問題点が生じてしまう。
【０００８】
その問題点は、従来の楽譜表示装置ではノンリニアスペーシングで作成された楽譜を適切な形でスクロールさせることができないということを意味する。このため、ノンリニアスペーシングで作成された楽譜のスクロール表示には、それに合った手法で行う必要があるということになる。
【０００９】
本発明の課題は、楽譜のスペーシングに係わらず、それが表す演奏内容に沿ってスクロール表示を行うことができる楽譜表示装置を提供することにある。
【００１０】
【課題を解決するための手段】
本発明の楽譜表示装置は、先行する音符の直前からそれに続く音符の直前までの音符の表示間隔がその先行する音符の音符長に正比例しておらず、かつ少なくとも一部の音符の表示間隔が等間隔でない楽譜を表示するために、夫々音符画像及び座標からなる複数の音符データを記憶する音符データ記憶手段と、音符データ記憶手段に記憶された複数の音符データの少なくとも一部を読み出し、当該音符データに含まれる音符画像を対応する座標にて指定される表示手段の表示画面上の位置に表示させる表示制御手段と、この表示制御手段にて前記表示手段に表示された音符画像の表示位置を設定された速度で所定方向にスクロールさせるスクロール手段と、このスクロール手段によりスクロールされた音符画像の表示位置を表わす前記スクロール方向に対応する座標が、前記表示手段の表示画面上に設定された位置の座標に到達したか否かを判別する判別手段と、この判別手段により到達したと判別された場合に、当該到達した音符画像が表わす音符の音符長と、前記到達した音符画像の表示位置とこれに続く音符画像の表示位置との前記スクロール方向における差分とに基づいて前記スクロール手段にてスクロールさせる速度を変更するスクロール速度変更手段と、
を具備する。
【００１１】
なお、前記スクロール速度変更手段は、前記到達した音符画像の表示位置とこれに続く音符画像の表示位置との前記スクロール方向における差分に基づいてスクロールさせる速度を算出し、前記到達した音符画像が表わす音符の音符長の長さに応じて前記算出されたスクロール速度を増減させる、ことが望ましい。
【００１２】
本発明のコンピュータ読み取り可能な記録媒体は、コンピューターに、先行する音符の直前からそれに続く音符の直前までの音符の表示間隔がその先行する音符の音符長に正比例しておらず、かつ少なくとも一部の音符の表示間隔が等間隔でない楽譜を表示するための夫々音符画像及び座標からなる複数の音符データを記憶する音符データ記憶手段から複数の音符データの少なくとも一部を読み出し、当該音符データに含まれる音符画像を対応する座標にて指定される表示手段の表示画面上の位置に表示させる表示制御機能と、前記表示手段に表示された音符画像の表示位置を設定された速度で所定方向にスクロールさせるスクロール機能と、このスクロールされた音符画像の表示位置を表わす前記スクロール方向に対応する座標が、前記表示手段の表示画面上に設定された位置の座標に到達したか否かを判別する判別機能と、この判別機能により到達したと判別された場合に、当該到達した音符画像が表わす音符の音符長と、前記到達した音符画像の表示位置とこれに続く音符画像の表示位置との前記スクロール方向における差分とに基づいて前記スクロール手段にてスクロールさせる速度を変更するスクロール速度変更機能と、を実現させるためのプログラムを記録している。
【００１３】
本発明では、楽譜上に配置される音符（或いは休符）毎に、その音符の種類に基づいて、その音符、及びそれから次の音符（休符、或いは小節線などの場合もある）の直前までの部分を消去していくスクロールに要する時間を決定し、その決定した時間で対応する部分を消去していくスクロールを行う。
【００１４】
上記のような方法でスクロールを行う場合、音符（或いは休符）の種類が同じであれば、その音符の直前から次の音符（休符、或いは小節線などの場合もある）の直前までの間隔が異なっていても、その間隔部分を消去していくスクロールに要する時間は一定となる。この結果、楽譜のスペーシングに係わらず、それが表す演奏内容に沿った形でのスクロール表示が実現されることになる。
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施の形態による楽譜表示装置を搭載した電子楽器の回路ブロック図である。
【００１６】
図１に示すように、その電子楽器は、楽器全体の制御を実行するＣＰＵ２０１と、そのＣＰＵ２０１が実行するプログラムや各種制御用データ、及び楽譜表示用データなどを格納したＲＯＭ１０２と、そのＣＰＵ１０１がワーク用に使用するＲＡＭ１０３と、多数の鍵を備えた鍵盤１０４と、楽譜の表示、或いはその終了をユーザが指示するためのスイッチ（ＳＷ）１０５と、ＣＰＵ１０１の指示に従って楽音を放音するサウンドシステム１０６と、楽譜を表示するＬＣＤ１０７と、そのＬＣＤ１０７に表示すべき内容を表示させるＬＣＤコントローラ（ＬＣＤＣ）１０８と、を備えて構成されている。
【００１７】
上記サウンドシステム１０６は、例えばＣＰＵ１０１が発音を指示した楽音の波形データを生成する音源、その音源が出力する波形データをＤ／Ａ変換するＤ／Ａコンバータ、そのコンバータが出力するアナログのオーディオ信号の増幅を行うアンプ、及びそのアンプが出力するオーディオ信号を音声に変換するスピーカを備えたものである。
【００１８】
上記スイッチ１０５は、その状態を検出する検出回路を合わせて表したものである。そのスイッチ１０５以外にもユーザの操作の対象となるものは存在するが、ここでは、説明上、便宜的にそれらについては言及しないことにする。なお、それ以外のスイッチとしては、例えばテンポを変更するためのものや表示する楽譜（曲）の種類を選択するためのもの、音色を選択するためのもの、及びテンキーなどがある。
【００１９】
以上の構成において動作を説明する。
ＣＰＵ１０１は、電源がオンされると、ＲＯＭ１０２に格納されたプログラムを読み出して実行することにより、楽器全体の制御を開始する。その制御は、ユーザの鍵盤１０４、或いはスイッチ１０５への操作に対応する形で行う。
【００２０】
上記鍵盤１０４は、例えば各鍵の走査を行うことで状態の変化した鍵、及びその変化の内容（押鍵、或いは離鍵）を特定し、それらを表す情報（以降、操作情報と呼ぶ）を生成してＣＰＵ１０１に送出する。他方のスイッチ１０５でも同様に、その検出回路はスイッチ１０５の走査を行うことでそれの状態変化（例えば押下）の有無を検出し、状態変化を検出すればそれを表す情報（以降、同様に走査情報と呼ぶ）を生成してそれをＣＰＵ１０１に送出する。ＣＰＵ１０１は、鍵盤１０４、及びスイッチ１０５からそれぞれ送出される操作情報を解析することで、ユーザの指示内容を認識し、その認識結果に応じた処理を行う。それにより、楽器をユーザの指示に応じて動作させる。なお、ＣＰＵ１０１は、鍵盤１０４から操作情報を受け取ると、その内容に応じて、楽音の発音開始、或いは消音を指示するコマンドを生成してそれをサウンドシステム１０６に送出する。この結果、ユーザの鍵盤１０４への操作に応じて楽音がリアルタイムで発音される。
【００２１】
一方、ＣＰＵ１０１は、制御の開始時に、ＲＯＭ１０２から表示の対象となる楽譜表示用データを読み出してＲＡＭ１０３に格納し、それを用いてビットマップの画像データを生成し、それをＲＡＭ１０３内に確保した領域に書き込む。それにより、ＬＣＤ１０７に楽譜を表示させるうえでの準備を行う。
【００２２】
ＬＣＤＣ１０８は、それが備えたＶＲＡＭに書き込まれた画像データに従ってＬＣＤ１０７を駆動することにより、その画像データをＬＣＤ１０７に表示させる。このことから、楽譜の表示は、ＣＰＵ１０１が、その画像データをＬＣＤＣ１０８の備えたＶＲＡＭに書き込むことで実現される。
【００２３】
図２及び図３は、ＲＡＭ１０３に格納されたデータの内容を説明する図である。楽譜の表示に係わるデータに着目して、ＲＡＭ１０３内に割り当てられた領域（エリア）に格納されるデータの種類、及びその構成を表したものである。
図２或いは図３に示すように、楽譜の表示に係わるデータとして、バックグランド（ＢＧ）画面表示用のデータ（以降、ＢＧ画面データと呼ぶ）が格納されるエリア（以降、ＢＧ画面エリアと呼ぶ）２０１、五線譜上に配置すべき音符や変化記号等を配置するためのデータ（以降、音符データと呼ぶ）が格納されるエリア（以降、音符エリアと呼ぶ）２０２、ＬＣＤ１０７に表示させる画像データが格納されるＬＣＤ  ＶＲＡＭエリア２０３、及び、そのエリア２０３に格納すべき画像データを生成するために用いるワーク用エリアであるＶＲＡＭ１エリア２０４及びＶＲＡＭ２エリア２０５がＲＡＭ１０３内に確保されている。
【００２４】
上記ＢＧ画面データは、五線譜や音部記号、拍子記号、調記号（調号）、及び五線譜を区切る小節線などのシンボル毎に、その画像データ、及びそれの配置を指定するＸ、Ｙの各座標値を持つデータである。そのシンボルとして、図４に示すマーカー４０１、及び４０２が含まれている。シンボルのなかで、例えば五線譜の画像データはその形状を表すデータであり、他のシンボルのはビットマップの画像データである。
【００２５】
一方、音符データも、五線譜上に配置すべき音符や変化記号などのシンボル毎に、そのビットマップの画像データ、及びそれの配置を指定するＸ、Ｙの各座標値を持つデータである。なお、図３中の「（連）」は、それが連桁、即ち符鉤が隣の音符の符鉤とつながった音符であることを表している（図４、或いは図５参照）。音符の画像データは、符頭の左端のＸＹ座標値が、配置を指定するＸＹ座標値とそれぞれ一致するように配置されるようになっている。
【００２６】
ＣＰＵ１０１は、楽譜を表示させるためのビットマップの画像データを、上記ＢＧ画面データ、及び音符データを用いて作成する。しかし、図４に示すように、ＬＣＤ１０７に一度に表示できる楽譜はその一部だけである。このことから、その作成は、楽譜のなかで画像データを作成するＸ座標上の範囲を決定し、その決定した範囲内に画像データの一部でも配置されるシンボルをＸ座標値、及びその画像データから特定し、その特定したシンボルの画像データをＸＹ座標値に従って配置していくことで作成する。なお、そのようにしてＢＧ画面データ、及び音符データから作成した楽譜の画像データについては、以降、楽譜データと呼ぶことにする。
【００２７】
図５は、楽譜の表示方法を説明する図である。ここで、上述したようにして作成される楽譜データをＬＣＤ１０７に表示させる方法について、図５を参照して詳細に説明する。
ＣＰＵ１０１は、２つの範囲を決定し、範囲別に楽譜データを作成して（楽譜データ全体から一部を切り出すことに対応する）、一方をＶＲＡＭ１エリア２０４に、他方をＶＲＡＭ２エリア２０５に格納する。電源がオンされたときには、楽譜の先頭部分の楽譜データはＶＲＡＭ１エリア２０４に格納し、それに続く部分の楽譜データはＶＲＡＭ２エリア２０５に格納する。
【００２８】
ＶＲＡＭ１エリア２０４に格納した楽譜データのＬＣＤ１０７への表示は、ユーザがスイッチ１０５を操作するのを待って行う。その表示は、ＶＲＡＭ１エリア２０４に格納された楽譜データ中の先頭部分を切り出してＬＣＤＣ１０８のＶＲＡＭに書き込むことにより実現される。
【００２９】
ＬＣＤ１０７に表示させた楽譜データは、予め定めたタイミングでスクロールを開始させる。そのスクロールは、最初は、ＶＲＡＭ１エリア２０４に格納された楽譜データ中から切り出す範囲を順次、変更しながら、それから切り出した楽譜データをＬＣＤＣ１０８のＶＲＡＭに書き込むことで行う。
【００３０】
ＶＲＡＭ１エリア２０４を対象とした範囲を変更しながらの楽譜データの切り出しが終了すると、その対象をＶＲＡＭ２エリア２０５に変更して、範囲を変更しながらの切り出しを同様に行う。それまで対象としていたＶＲＡＭ１エリア２０４には、ＶＲＡＭ２エリア２０５に格納された楽譜データに続く部分の楽譜データを作成して格納する。そのようにして、切り出しの対象とするエリアの変更や、それまで切り出しの対象としていたエリアへの新たな楽譜データの格納を行いつつ、楽譜のスクロール表示を実現させる。そのスクロールは、ユーザが再度スイッチ１０５を操作してスクロールの終了を指示するか、或いは楽譜を全てスクロールするまで行う。
【００３１】
楽譜の先頭には、音部記号や拍子記号が少なくとも存在する。それらの記号は楽譜が表す演奏内容を把握するうえで必要な情報である。このことから、本実施の形態では、それらは常に表示させるようにしている。それに合わせて、常に表示させている部分とそうでない部分（スクロールを行う部分）との区別をユーザが容易に行えるようにするために、図４に示すマーカー４０１を表示させている。それにより、スクロールは、マーカー４０１の左側（音部記号が存在しない側）に表示されている楽譜のみを対象に行っている。それ以外には、押鍵すべき鍵の音高をより容易に把握できるように、次に処理すべき音符の符頭の近傍にマーカー４０２を表示させている。なお、マーカー４０１は表示位置を移動させないことから、以降、便宜的に固定マーカー４０１と呼ぶことにする。
【００３２】
本実施の形態では、ノンリニアスペーシングで作成された楽譜を表示するようにしている。そのノンリニアスペーシングで作成された楽譜では、先行する音符（或いは休符）の直前からそれに続く音符（休符、或いは小節線の場合もある）の直前までの音符間隔（表示間隔）がその先行する音符の音符長に正比例していない。このことから、スクロールの速度は一定とせず、先行する音符の種類、その音符間隔（先行する音符の直前から次の音符の直前までのＸ座標上の間隔）に応じて個々に決定している。例えば同じ音符間隔であっても、先行する音符が４分音符であれば速度は８分音符のときの１／２倍とし、その音符が１６分音符であれば８分音符のときの２倍としている。
【００３３】
そのようにして、演奏上、隣り合う音符間を単位にスクロールの速度を決定し、その決定した速度でスクロールを行うことにより、音符間隔部分を消去するスクロールに要する時間は先行する音符の種類に対応する長さとしている。言い換えれば、その時間は先行する音符が表す音の長さ（音符長）に正比例させている。このため、スペーシングに係わらず、楽譜が表す演奏内容に沿った形でのスクロール表示が実現されることになる。それにより、ユーザは正確な演奏の進行を視認することができる。
【００３４】
次に、図６〜図１３に示す各種フローチャートを参照して、上記ＣＰＵ１０１の動作について詳細に説明する。
図６、及び図７は、全体処理のフローチャートである。楽譜の表示に注目して、それに特に係わる処理を抜粋してその流れを表したものである。始めに、図６及び図７を参照して、全体処理について詳細に説明する。なお、その全体処理は、ＣＰＵ１０１が、ＲＡＭ１０３をワーク用に使用しながら、ＲＯＭ１０２から読み出したプログラムを実行することにより実現される。
【００３５】
先ず、ステップ６０１では、イニシャライズを行う。それにより、サウンドシステム１０６を含めて予め定められた状態に設定した後はステップ６０２に移行して、ＬＣＤ１０７に楽譜を表示させるうえでの前処理を実行する。その実行が終了すると、ステップ６０３に移行する。その前処理を実行することで、新たに作成すべき楽譜データのＸ座標上の範囲を示す値が変数ＸＡ、及びＸＢにそれぞれ代入される。
【００３６】
ステップ６０３では、スイッチ１０５が操作されたか否か判定する。そのスイッチ１０５の検出回路からユーザが操作を行ったことを表す操作情報を受け取った場合、判定はＹＥＳとなり、ステップ６０４で変数ＳＴＦの値を反転、即ちその値が１であれば０を代入し、その値が０であれば１を代入した後、ステップ６０５に移行する。そうでない場合には、判定はＮＯとなって後述するステップ６０７に移行する。
【００３７】
ステップ６０５では、変数ＳＴＦの値が１か否か判定する。ユーザが楽譜の表示を指示、言い換えれば、ＬＣＤ１０７に楽譜が表示されていない状態でユーザがスイッチ１０５を操作した場合、変数ＳＴＦにはステップ６０４の実行時に楽譜表示中を表す値の１が代入されることから、判定はＹＥＳとなり、ステップ６０６に移行して、楽譜の表示を開始するための開始処理を実行した後、ステップ６０７に移行する。そうでない場合には、判定はＮＯとなってステップ６１０に移行する。
【００３８】
ステップ６０７では、変数ＳＴＦの値が１か否か判定する。現在、楽譜を表示中であった場合、判定はＹＥＳとなってステップ６０８に移行する。そうでない場合には、判定はＮＯとなって上記ステップ６０３に戻る。
ステップ６０８では、変数ＭＦの値が１か否か判定する。その変数ＭＦは、楽譜データを切り出す対象となるエリアを変更するタイミングを管理するために用意した変数であり、１はそのタイミングであることを表し、０はそのタイミングでないことを表している。このことから、切り出す対象となるエリアを変更するタイミングであった場合、判定はＹＥＳとなってステップ６０９に移行する。そうでない場合には、判定はＮＯとなって上記ステップ６０３に戻る。
【００３９】
ステップ６０９では、ＲＡＭ１０３のＢＧ画面エリア２０１、及び音符エリア２０２にそれぞれ格納されているデータのなかで、Ｘ座標値が変数ＸＡの値に１を加算した値から変数ＸＢの値までの範囲に画像データの一部でも配置されるシンボルの画像データをそのＸＹ座標値に従って配置することにより、新たに楽譜データを作成する。その作成を行った後には図７のステップ６１２に移行する。なお、上記変数ＭＦ、ＸＡ、及びＸＢは、後述するタイマインタラプト処理の実行時に値の書き換えの対象となる変数であり、その実行時に変数ＭＦに１を代入した場合には、変数ＸＡ、及びＸＢの値も更新するようになっている。
【００４０】
図７のステップ６１２では、変数ＳＥＬの値が１か否か判定する。その変数ＳＥＬはＬＣＤ１０７に表示させる楽譜データの切り出し先を管理するために用意した変数であり、１はＶＲＡＭ１エリア２０４、２はＶＲＡＭ２エリア２０５をそれぞれ表している。このことから、楽譜データの切り出し先をＶＲＡＭ１エリア２０４に変更した場合、判定はＹＥＳとなり、ステップ６１３に移行して、ステップ６０９で作成した楽譜データをＶＲＡＭ２エリア２０５に書き込み、更にステップ６１４で変数ＭＦに０を代入した後、図６のステップ６０３に戻る。そうでない場合には、判定はＮＯとなってステップ６１５に移行し、ステップ６０９で作成した楽譜データをＶＲＡＭ１エリア２０４に書き込んだ後、ステップ６１４に移行する。
【００４１】
一方、図６のステップ６０５の判定がＮＯとなって移行するステップ６１０では、後述するタイマインタラプト処理の実行を禁止させる。続くステップ６１１では、ＶＲＡＭ１エリア２０４、ＶＲＡＭ２エリア２０５、及びＬＣＤ  ＶＲＡＭエリア２０３に格納されたデータのクリアを行う。その後は上記ステップ６０２に戻る。なお、例えばタイマインタラプト処理の実行の禁止は、特には図示しない割り込みフラグレジスタの対応するビットの値を０にすることで行われる。その禁止解除は、そのビットの値を１にすることで行われる。
【００４２】
次に、上記全体処理内で実行されるサブルーチン処理について説明する。
図８及び図９は、上記ステップ６０２として実行される前処理のフローチャートである。全体処理内で実行されるサブルーチン処理については、始めに図８及び図９を参照して、その前処理について詳細に説明する。
【００４３】
先ず、ステップ８０１では、ＲＯＭ１０２から表示の対象とする楽譜のＢＧ画面データ、及び音符データを読み出してＲＡＭ１０３に確保したＢＧ画面エリア２０１、及び音符エリア２０２にそれぞれ書き込んだ後、ＢＧ画面エリア２０１に書き込んだＢＧ画面データのなかで、配置を指定するＸ座標値が固定マーカー４０１のＸ座標値以下となっているシンボルの画像データを配置することにより、楽譜の先頭から固定マーカー４０１（図４参照）までの部分の画像データを生成する。それ以外には、そのようにして生成した画像データの横方向（Ｘ軸上）のドット数をカウントして、そのカウント値を変数ＸＨに代入する。
【００４４】
ステップ８０１に続くステップ８０２では、生成したＸ座標上の位置が０〜ＸＨまでの画像データをＬＣＤ  ＶＲＡＭエリア２０３に先頭から書き込むとともに、それをＬＣＤＣ１０８のＶＲＡＭに先頭から書き込む。それにより、ステップ８０１で生成した画像データを、ＬＣＤ１０７のドットのＸ座標上の位置が０〜ＸＨまでの表示エリアに表示させる。その後はステップ８０３に移行する。なお、ステップ８０１で生成した画像データはユーザがスイッチ１０５を操作する前に表示させるようになっているが、ユーザがスイッチ１０５を操作してから表示させるようにしても良い。
【００４５】
ステップ８０３では、変数ＸＡに変数ＸＨの値を代入するとともに、変数ＳＥＬに１を代入する。次に移行するステップ８０４では、変数ＸＢに、変数ＸＡの値に６４０を加算した値を代入する。なお、変数ＸＡに６４０を加算した値を変数ＸＢに代入するのは、楽譜の固定マーカー４０１以降の部分は、一度に表示できるＸ座標上のドット数を最大で３２０ドットとしているためである。
【００４６】
上記変数ＸＢへの値の代入が終了すると、ステップ８０５に移行する。そのステップ８０５では、ＲＡＭ１０３のＢＧ画面エリア２０１、及び音符エリア２０２にそれぞれ格納されているデータのなかで、Ｘ座標値が変数ＸＡの値に１を加算した値から変数ＸＢの値までの範囲に画像データの一部でも配置されるシンボルの画像データをそのＸＹ座標値に従って配置することにより、新たに楽譜データを作成する。続くステップ８０６では、作成した楽譜データをＶＲＡＭ１エリア２０４に書き込む。その次に移行するステップ８０７では、変数ＸＡに、それまでの値に３２０を加算した値を新たに代入する。
【００４７】
その変数ＸＡへの値の代入が終了した後は、ステップ８０８〜図９のステップ８１０を上記ステップステップ８０４〜８０６と同様に実行することにより、ステップ８０５で作成した楽譜データに続く部分の楽譜データを作成してＶＲＡＭ２エリア２０５に書き込む。その書き込みを行うと、ステップ８１１に移行して、タイマインタラプト処理の実行間隔（周期）を指定する値を算出し、その算出した値を変数Ｔに代入する。一連の処理はその後に終了する。
【００４８】
上記実行間隔を示す値は、例えば、固定マーカー４０１のＸ座標値から最初の小節線のＸ座標値までの間隔（ドット数）、拍子記号が表す拍子、及びテンポ値を用いて算出する。具体的には、その間隔が２００ドット、拍子が４／４拍子、テンポ値が１２０であれば、４分音符の音長は０．５秒、１小節の長さは２秒となり、その２秒間で２００ドット、スクロールさせれば良いことから、０．０１（＝２／２００）を実行間隔として、それに対応する値を変数Ｔに代入する。その変数Ｔに代入した値は、ＣＰＵ１０１に搭載された割り込み信号発生用のタイマにセットする。それにより、タイマインタラプト処理は、ＬＣＤ１０７に表示させた楽譜を１ドット、右から左にスクロールさせるべきタイミングで実行するようにしている。
【００４９】
図１０は、図６及び図７に示す全体処理内でステップ６０６として実行される開始処理のフローチャートである。次に、図１０を参照して、開始処理について詳細に説明する。この開始処理を実行することにより、固定マーカー４０１に続く部分の楽譜が図４に示すようにＬＣＤ１０７に表示される。
【００５０】
先ず、ステップ１００１では、ＶＲＡＭ１エリア２０４に格納された楽譜データのＸ座標上の先頭から３２０ドット分だけ切り出し、ＬＣＤ  ＶＲＡＭエリア２０３のＸ座標上の位置が変数ＸＨの値に１を加算した値以降のエリアに格納するとともに、そのＶＲＡＭエリア２０３に格納したデータをＬＣＤＣ１０８のＶＲＡＭに先頭から書き込む。ＬＣＤ  ＶＲＡＭエリア２０３には、図８及び図９に示す前処理の実行時に、その先頭から楽譜の先頭部分（音部記号や拍子記号、調号、及びマーカー４０１及び４０２を含む部分）の楽譜データが書き込まれている。Ｘ座標上でのその範囲は、０〜ＸＨである。このことから、ＬＣＤ  ＶＲＡＭエリア２０３に格納されたデータをＬＣＤＣ１０８のＶＲＡＭに先頭から書き込むことにより、ＬＣＤ１０７には固定マーカー４０１前後の部分を含む楽譜が表示されることになる。
【００５１】
ステップ１００１に続くステップ１００２では、変数Ｘ、ＥＦ、及びＹＥＦにそれぞれ０を代入する。その次に実行するステップ１００３では、タイマインタラプト処理の実行禁止の解除を行う。その解除を行った後は、ステップ１００４に移行する。なお、変数Ｘは、ＶＲＡＭ１エリア２０４、或いはＶＲＡＭ２エリア２０４に格納された楽譜データのなかから切り出すべき部分を管理するために用意した変数である。変数ＹＥＦは新たに楽譜データを作成する必要性の有無を判定するために用意した変数であり、変数ＥＦは、楽譜データを切り出すエリアを変更する必要性の有無を判定するために用意した変数である。
【００５２】
ステップ１００４では、変数Ｎに１を代入する。その代入を行った後はステップ１００５に移行して、マーカー４０２を配置するＹ座標値を変数Ｎの値で指定される音符のＹ座標値に変更し、その変更に合わせてＬＣＤ  ＶＲＡＭ２０３に格納された楽譜データ中におけるマーカー４０２の画像データの位置を変更し、その変更を行った後の楽譜データをＬＣＤＣ１０８のＶＲＡＭに書き込む。その書き込みは、例えばＸ座標上の位置が０〜ＸＨの範囲の楽譜データのみを対象に行う。その書き込みを行った後、一連の処理を終了する。
【００５３】
上記開始処理を実行することにより、ＬＣＤ１０７に図４に示すように楽譜が表示される。以降は、その後のスクロール表示を実現させるためのタイマインタラプト処理について、図１１〜図１３に示すそのフローチャートを参照して詳細に説明する。なお、上述したように、そのタイマインタラプト処理は、変数Ｔの値に対応する時間間隔で発生する割り込み信号によって実行される。
【００５４】
先ず、ステップ１１０１では、変数ＥＦの値が０か否か判定する。変数ＥＦには、楽譜データを切り出すエリアを変更する必要が無くなったときに、言い換えれば、１エリアに格納された楽譜データのスクロール表示によって全てのスクロール表示が終了する状況となったときに、１が代入される。このことから、その状況ではない場合、判定はＹＥＳとなってステップ１１０２に移行する。そうでない場合には、判定はＮＯとなって図１３のステップ１１２７に移行する。
【００５５】
ステップ１１０２では、変数Ｘの値が３２０以上か否か判定する。ＶＲＡＭ１エリア２０４及びＶＲＡＭ２エリア２０５に格納する楽譜データはＸ座標上で６４０ドット分であり、固定マーカー４０１以降の一度に表示する範囲はＸ座標上で３２０ドット分である。変数Ｘの値はエリア２０４或いは２０５に格納された楽譜データから切り出す部分のＸ座標上の先頭位置を示している。このことから、変数ＳＥＬの値で指定されるエリアに格納された楽譜データのスクロール表示が終了した場合、判定はＹＥＳとなってステップ１１０３に移行する。そうでない場合には、判定はＮＯとなって図１２のステップ１１１４に移行する。
【００５６】
ステップ１１０３では、変数ＹＥＦの値が１か否か判定する。その変数ＹＥＦには、新たに楽譜データを作成する必要が無くなったときに、言い換えれば、２つのエリア２０４及び２０５に格納された楽譜データのスクロール表示によって全てのスクロール表示が終了する状況となったときに、１が代入される。このことから、その状況となった場合、判定はＹＥＳとなり、ステップ１１０４で変数ＥＦに１、更にステップ１１０５で変数ＹＥＦに０を代入した後、ステップ１１０６に移行する。そうでない場合には、判定はＮＯとなってそのステップ１１０６に移行する。
【００５７】
ステップ１１０６では、変数ＳＥＬの値が１か否か判定する。変数ＳＥＬの値が１、即ちスクロール表示が終了した楽譜データを格納していたのがＶＲＡＭ１エリア２０４であった場合、判定はＹＥＳとなり、ステップ１１０７で変数ＳＥＬに２を代入した後、ステップ１１０９に移行する。そうでない場合には、判定はＮＯとなり、ステップ１１０８で変数ＳＥＬに１を代入した後、そのステップ１１０９に移行する。
【００５８】
ステップ１１０９では、変数Ｘに０を代入するとともに、変数ＭＦに１を代入する。続くステップ１１１０では、変数ＸＡに、それまでの値に３２０を加算した値を代入する。その次に実行するステップ１１１１では、変数ＸＢに、変数ＸＡの値に６４０を加算した値を代入する。その代入を行った後はステップ１１１２に移行する。上記変数ＭＦに１を代入することにより、全体処理の図６に示すステップ６０９が実行される。その結果、変数ＸＡ及びＸＢの値で指定される範囲の楽譜データが新たに生成され、その楽譜データが、変数ＳＥＬの値が１であればＶＲＡＭ２エリア２０５に、その値が２であればＶＲＡＭ１エリア２０４に書き込まれることになる。
【００５９】
ステップ１１１２では、変数ＸＢの値が、ＢＧ画面データ（図２参照）によって表示されるシンボルのなかでＸ座標値の最大値（通常、最後の小節線のＸ座標値）以上か否か判定する。ＢＧ画面データ、及び音符データから新たに作成する楽譜データが楽譜の最後の部分である場合、判定はＹＥＳとなり、ステップ１１１３で変数ＹＥＦに１を代入した後、一連の処理を終了する。そうでない場合には、判定はＮＯとなり、ここで一連の処理を終了する。
【００６０】
このようにして、上記ステップ１１０３〜１１１３では、スクロール表示のために楽譜データを切り出すエリアの変更やその変更に合わせた準備を行うための処理を実行するようになっている。
上記ステップ１１０２の判定がＮＯとなって移行する図１２のステップ１１１４では、変数Ｘの値をインクリメントする。続くステップ１１１５では、変数ＳＥＬの値が１か否か判定する。スクロール表示のために楽譜データを切り出しているエリアがＶＲＡＭ１エリア２０４であった場合、判定はＹＥＳとなり、ステップ１１１６に移行して、ＶＲＡＭ１エリア２０４に格納された楽譜データから、Ｘ座標上の位置がＸ（変数Ｘの値）〜Ｘ＋３２０の範囲内となっている部分を切り出し、それをＬＣＤ  ＶＲＡＭエリア２０３のＸ座標上の位置がＸＨ（変数ＸＨの値）＋１〜ＸＨ＋３２１であるエリアに書き込むとともに、それによる更新に合わせて、ＬＣＤＣ１０８のＶＲＡＭに格納された楽譜データの更新を行った後、ステップ１１１８に移行する。そうでない場合には、判定はＮＯとなってステップ１１１７に移行し、ＶＲＡＭ２エリア２０５を対象に同様の処理を実行した後、そのステップ１１１８に移行する。
【００６１】
上記ステップ１１１６、或いは１１１７の処理を実行することにより、固定マーカー４０１に続く部分は全体的に１ドット、右から左に移動する。その移動に伴い、固定マーカー４０１の直後に位置する１ドットの列の表示内容は消去され、最も右側の１ドットの列には、それまで表示されていた最後の部分に続く内容が新たに表示される。最後の部分に続く内容がなければ、単に固定マーカー４０１以降の部分の表示内容が１ドットの列単位で消去されていくことになる。
【００６２】
ステップ１１１８では、音符データ（図３参照）のなかで変数Ｎの値によって指定される音符（休符を含む）のＸ座標値が、変数ＸＡの値から３２０を引き、その結果に変数Ｘの値を加算した値（＝ＸＡ−３２０＋Ｘ）と等しいか否か判定する。変数Ｎの値で指定される音符が図４に示す４分音符のように固定マーカー４０１の直後に表示されているような場合、判定はＹＥＳとなってステップ１１１８に移行する。そうでない場合には、判定はＮＯとなり、ここで一連の処理を終了する。
【００６３】
ステップ１１１９では、音符データを参照することにより、変数Ｎで指定される音符（或いは休符）の音符長を抽出する。続くステップ１１２０では、変数Ｎの値で指定される音符（或いは休符）と、変数Ｎの値に１を加算した値で指定される音符との間のＸ座標上の差分（ドット数）Ｓ（＝変数Ｎの値で指定される音符のＸ座標値−変数Ｎの値に１を加算した値で指定される音符のＸ座標値）を検出する。それらの音符の間に小節線が存在している場合は、その小節線までの差分Ｓを検出する。そのような差分Ｓを検出した後はステップ１１２１に移行する。なお、上記音符長の抽出は、例えば音符（或いは休符）の形状から種類を特定することで行っても良いが、その種類を示すデータを音符データ中に予め用意しておいても良い。
【００６４】
ステップ１１２１では、検出した差分Ｓに基づきタイマインタラプト処理の周期（実行間隔）を算出し変数Ｔに代入する。その算出は、例えば６０をテンポの値に２を掛けた値で割り、その割った値を差分Ｓで更に割ることで行う（＝６０／（テンポの値×２）／Ｓ）。それにより、変数Ｎの値で指定される音符が８分音符であった場合に、その音符長で差分Ｓのスクロールを行う際の周期を算出する。
【００６５】
ステップ１１２１に続くステップ１１２２では、ステップ１１１９で抽出した音符長、即ち変数Ｎの値で指定される音符の種類を判定する。その音符が８分音符であった場合、その旨を判定してステップ１１２５に移行する。その音符が４分音符であった場合には、その旨を判定してステップ１１２３に移行し、変数Ｔの値をそれまでの２倍に変更するとともに、その変更後の値を割り込み信号発生用のタイマにセットした後、ステップ１１２５に移行する。その音符が１６分音符であった場合には、その旨を判定してステップ１１２４に移行し、変数Ｔの値をそれまでの１／２倍に変更するとともに、その変更後の値を割り込み信号発生用のタイマにセットした後、ステップ１１２５に移行する。
【００６６】
上述したようにして算出した変数Ｔの値をタイマにセットすることにより、スクロールは変数Ｎの値で指定される音符の種類、及び差分Ｓに応じた速度で行われることになる。その結果、ＬＣＤ１０７に表示された楽譜が表す演奏内容に沿った形でのスクロール表示が実現される。
【００６７】
ステップ１１２５では、マーカー４０２のＹ座標上の表示位置を変数Ｎの値で指定される音符のＹ座標値に変更し、その変更に合わせて、ＬＣＤ  ＶＲＡＭ２０３、及びＬＣＤＣ１０８のＶＲＡＭにそれぞれ格納された楽譜データのなかでＸ座標上の位置が０〜ＸＨ（変数ＸＨの値）となっている部分の書き換えを行う。そのようにして、図４に示すように、マーカー４０２のＹ座標上の表示位置を固定マーカー４０１の直後に位置する音符の符頭に合わせると、ステップ１１２６に移行して、変数Ｎの値のインクリメントを行う。一連の処理はそのインクリメントを行った後に終了する。
【００６８】
一方、図１１に示すステップ１１０１の判定がＮＯとなって移行する図１３のステップ１１２７では、変数Ｘの値が６４０以上か否か判定する。上記したように、エリア２０４、２０５にはＸ座標上で６４０ドット分の楽譜データを書き込むようになっている。変数Ｘの値は楽譜データを切り出すＸ座標上の先頭位置を指定する。変数ＥＦに代入された値は、変数ＳＥＬの値が指定するエリアに格納された楽譜データがスクロール表示すべき最後のデータであることを表している。このことから、楽譜のスクロール表示が全て終了した場合、判定はＹＥＳとなり、ステップ１１２８で変数ＳＴＦに０を代入し、更にステップ１１２９で変数ＥＦに０を代入した後、一連の処理を終了する。そうでない場合には、判定はＮＯとなり、図１５のステップ１１１４に移行して、それ以降の処理を同様に実行する。
【００６９】
なお、本実施の形態では、音符間隔、即ち演奏上、先行する音符（或いは休符）の直前からそれに続く次の音符（休符、或いは小節線の可能性もある）の直前までの間の部分を消去するスクロールは同じ速度で行うようになっているが、その速度は変動させても良い。例えば音符（或いは休符）を消去するスクロールは比較的に遅い速度で行い、それを消去した後は比較的に速い速度でスクロールを行うようにしても良い。その音符間隔部分のスクロールによる消去に要する時間（本実施の形態では、先行する音符（或いは休符）の種類、及びテンポ値から算出）を変化させない範囲内で、その部分を消去していく際のスクロールの速度は任意に変動させることができる。
【００７０】
本発明を適用する楽譜表示装置は、電子楽器やシーケンサなどの楽音発生装置に搭載される、或いは接続して用いられるものに限定されるものではない。表示装置を備えたものに限定されるものでもない。本発明は、そのような形態に係わらず、幅広く適用できるものである。
【００７１】
楽譜の表示については、本実施の形態ではシンボル毎にその画像データを配置していくことで行えるようになっているが、楽譜の表示を行うためのデータはそのようなものに限定されるものではない。別な構成、或いは内容のものであっても良い。五線譜など、必ず表示されるシンボルについては予め印刷するなどして、それの表示用のデータは省略するようにしても良い。
【００７２】
上述したような楽譜表示装置、或いはその変形例の動作を実現させるようなプログラムは、ＲＯＭ、ＣＤ−ＲＯＭ、フロッピーディスク、或いは光磁気ディスク等の記録媒体に記録させて配布しても良い。或いは、公衆網等で用いられる伝送媒体を介して、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザはプログラムを取得して楽譜表示装置、或いはコンピュータなどのデータ処理装置にロードすることにより、それをロードした装置に本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。
【００７３】
【発明の効果】
以上、説明したように本発明は、楽譜上に配置される音符（或いは休符）毎に、その音符の種類に基づいて、その音符、及びそれから次の音符（休符、或いは小節線などの場合もある）の直前までの部分を消去していくスクロールに要する時間を決定し、その決定した時間で対応する部分を消去していくスクロールを行う。このため、楽譜のスペーシングに係わらず、それが表す演奏内容に沿った形でスクロール表示を行うことができる。
【図面の簡単な説明】
【図１】本実施の形態による楽譜表示装置を搭載した電子楽器の回路ブロック図である。
【図２】ＲＡＭに格納されたデータの内容を説明する図である（その１）。
【図３】ＲＡＭに格納されたデータの内容を説明する図である（その２）。
【図４】ＬＣＤに表示された楽譜例を示す図である。
【図５】楽譜の表示方法を説明する図である。
【図６】全体処理のフローチャートである。
【図７】全体処理のフローチャートである（続き）。
【図８】前処理のフローチャートである。
【図９】前処理のフローチャートである（続き）。
【図１０】開始処理のフローチャートである。
【図１１】タイマインタラプト処理のフローチャートである。
【図１２】タイマインタラプト処理のフローチャートである（続き１）。
【図１３】タイマインタラプト処理のフローチャートである（続き２）。
【符号の説明】
１０１    ＣＰＵ
１０２    ＲＯＭ
１０３    ＲＡＭ
１０５    スイッチ
１０７    ＬＣＤ
１０８    ＬＣＤＣ
２０１    ＢＧ画面エリア
２０２    音符エリア
２０３    ＬＣＤ  ＶＲＡＭエリア
２０４    ＶＲＡＭ１エリア
２０５    ＶＲＡＭ２エリア
４０１、４０２    マーカー
【図１】
0004016594.tif 000002
【図２】
0004016594.tif 000003
【図３】
0004016594.tif 000004
【図４】
0004016594.tif 000005
【図５】
0004016594.tif 000006
【図６】
0004016594.tif 000007
【図７】
0004016594.tif 000008
【図９】
0004016594.tif 000009
【図１０】
0004016594.tif 000010
【図１１】
0004016594.tif 000011
【図１２】
0004016594.tif 000012
【図１３】
0004016594.tif 000013
【図８】
0004016594.tif 000014