以下、図面を参照して本発明の実施形態について説明する。
(第1の実施形態)
図1は本発明の第1の実施形態に係る楽譜表示装置の構成を示すブロック図である。図中の10は楽譜表示装置全体を示す。
楽譜表示装置10は、例えばPC(パーソナルコンピュータ)で構成される。この楽譜表示装置10には、主制御部であるCPU11と、このCPU11に接続されるRAM12、ROM13、入力部14、表示部15などが設けられている。
CPU11は、ROM13に記憶された各種プログラム13aを起動し、入力部14から入力されるイベントに従って各種処理を実行する。本実施形態において、このCPU11には、楽譜表示を実現するための各種機能が備えられている(図2参照)。
RAM12には、CPU11の処理に必要な各種データが記憶される。このRAM12には、後述する楽譜の画像データや演奏情報などが記憶される。ROM13には、各種プログラム13aなどが記憶されている。上記各種プログラム13aには、本発明の楽譜表示制御用のプログラムも含まれる。
入力部14は、例えばキーボードやマウスなどの入力デバイスであり、ユーザの入力操作に対応したイベントを発生してCPU11に与える。表示部15は、例えばLCD(Liquid Crystal Display)等のカラー表示可能な表示デバイスからなり、所定サイズの画面を有する。ここで、本実施形態では、入力部14としてタッチパネルを用い、そのタッチパネルが表示部15の画面上に載置された構成を想定している。
図2はCPU11の機能構成を示すブロック図である。CPU11には、楽譜表示に関わる機能構成として、元領域設定部11aと、表示先領域設定部11bと、表示制御部11cとが設けられている。
元領域設定部11aは、画面上に表示された楽譜の任意の箇所が指定された際に、その指定された箇所を基準として、RAM12に記憶された楽譜の拡大表示の対象となる範囲である元領域を設定する。表示先領域設定部11bは、元領域設定部11aによって設定された画面上の元領域に対応した表示先領域を設定する。表示制御部11cは、元領域内の楽譜を抽出し、表示先領域設定部11bによって設定された画面上の表示先領域に拡大表示する。
図3は表示画面に関する制御変数を示す図である。なお、以下の各図における変数は、構造体形式やクラスで定義される変数で実現される例を示している。
表示画面に関する制御変数として、「表示中のページ」,「前回の指示時刻」,「ディスプレイ上のx方向楽譜表示開始座標」,「ディスプレイ上のy方向楽譜表示開始座標」,「ディスプレイ上の楽譜表示幅」,「ディスプレイ上の楽譜表示高さ」,「ページ数」,「各ページの画像データ」,「元画像に対する表示倍率」,「元画像のx方向表示開始座標」,「元画像のy方向表示開始座標」,「元画像のx方向の表示幅」,「元画像のy方向の表示幅」が図3に示すような変数で定義されている。これらの変数に関するデータは、例えばRAM12内の図示せぬ表示画面制御領域に記憶されている。
図4は楽譜画像に関する制御変数を示す図である。
楽譜画像に関する制御変数として、「画像データ」,「幅」,「高さ」が図4に示すような変数で定義されている。これらの変数に関するデータは、例えばRAM12内の図示せぬ楽譜画像制御領域に記憶されている。
図5は小節情報の構成を示す図である。
楽譜のデータは小節単位で管理されている。図中の“Meas[N]”のNは小節の番号を表している。各小節の「(存在する)ページ番号」,「元画像上での小節の矩形座標(Left/Top/Right/Bottom)」,「段番号」,「元画像上での右手パートの最上部五線のy座標」,「元画像上での右手パートの最下部五線のy座標」,「元画像上での左手パートの最上部五線のy座標」,「元画像上での左手パートの最下部五線のy座標」,「小節先頭の時刻」,「小節の長さ(時間)」が図5に示すような変数で定義されており、これらの変数に関するデータが例えばRAM12内の図示せぬ小節管理領域に記憶されている。なお、ここでは、ピアノ用の大譜表(2段譜)の場合を想定しているので、右手用と左手用の五線のy座標を記憶しているが、より多段の楽譜の場合、例えば、各段の上下の五線の位置を記憶しているようにしても良い。
図6は演奏情報の構成を示す図である。
演奏情報は、楽譜の各音符を発音するための情報であり、音符単位で管理されている。図中の“Note[N]”のNは音符(ノート)番号を表している。各音符の「発音開始時間」,「発音継続時間」,「音高」,「トラック番号(1:右手用,2:左手用)」,「小節番号」,「元画像上での玉のx座標」,「元画像上での玉のy座標」が図6に示すような変数で定義されており、これらの変数に関するデータが例えばRAM12内の図示せぬ演奏情報管理領域に記憶されている。
ここで、楽譜演奏装置10の動作を説明する前に理解を容易にするため、本発明の楽譜の拡大表示方法について具体例を挙げて説明する。
図7は現在表示中の楽譜画像に設定される拡大表示の元領域と表示先領域との関係を示す図である。
図中の20が楽譜画像である。この楽譜画像20は、複数段(ここでは2段)からなる任意の楽譜をイメージ化したものであり、表示部15の画面内に所定のサイズで表示される。ユーザが画面上の楽譜画像20の任意の箇所21を指でタッチして指定すると、その指定箇所21を基準にして矩形状の元領域22と、この元領域22に対応した矩形状の表示先領域23が設定される。
元領域22は、楽譜画像20の中の拡大表示の対象範囲を示す。表示先領域23は、拡大表示先の範囲を示す。元領域22と表示先領域23が設定されると、元領域22内の楽譜画像20の一部が抽出され、表示先領域23内に拡大表示される。このとき、元領域22内が所定の色で塗り潰しされる(図中の斜線で示す部分)。
ここで、第1の実施形態において、元領域22は、指定箇所21を中心にして固定のサイズである。表示先領域23は、指定箇所21の近傍に元領域22に重ならない場所に設定される。ただし、表示先領域23が楽譜画像20の範囲を超える場合には他の場所に設定される。このときの例を図8に示す。
図8は現在表示中の楽譜画像に設定される拡大表示の元領域と表示先領域との関係を示す図であり、表示先領域を指示箇所の下に設定した例を示している。
例えば、ユーザが画面上の楽譜画像20の上部付近を指でタッチして指定したとする。このような場合、指定箇所21を基準にして元領域22の上に表示先領域23を設定すると、楽譜画像20の範囲からはみ出してしまうため、元領域22の下に表示先領域23が設定される。
以下に、第1の実施形態における楽譜表示装置10の動作について、(a)メイン処理、(b)楽譜画像表示処理、(c)部分拡大表示処理に分けて詳しく説明する。なお、以下の各フローチャートで示される処理は、楽譜表示装置10に設けられたCPU11がROM13に記憶されたプログラム13aを読み込むことにより実行される。
(a)メイン処理
図9は楽譜表示装置10のCPU11によって実行されるメイン処理を示すフローチャートである。
まず、CPU11は、電源投入時のイニシャライズとして、図3から図6に示した各種制御変数を必要に応じて初期化した後(ステップA11)、所定の操作により選択された楽譜の画像データをRAM12から読み込み(ステップA12)、表示部15の画面上に表示する(ステップA13)。詳しくは、後に図10を参照して説明する。
ここで、ユーザのタッチ操作により部分拡大が指示されると(ステップA15のYes)、CPU11は、現在表示中の楽譜画像30の一部を拡大表示する(ステップA16)
。この部分拡大表示処理については、後に図12などを参照して詳しく説明する。また、所定の操作により終了指示があると(ステップA14のYes)、ここでの一連の処理が終了する。
(b)楽譜画像表示処理
図10は上記図9のステップA13で実行される楽譜画像表示処理を示すフローチャートである。
いま、図11に示すように、楽譜画像として用いられる元画像41内の一部をディスプレイ画面42(表示部15の画面)に表示する場合を想定する。なお、各変数の定義は図3に従う。ただし、簡単のため、構造体名(例えば図3のscoreCtrlなど)は、適宜省略して、メンバ変数のみで説明する。
まず、CPU11は、ディスプレイ画面42内の画像表示エリア44の始点の座標(scrX,scrY)と、縦横サイズ(scrSX,scrSY)を設定する(ステップB11)。例えば、PCで作動しているアプリケーションのウィンドウの所定の楽譜表示エリアなどに基づいて設定される。続いて、CPU11は、楽譜表示する元画像41内の始点の座標(x,y)を設定する(ステップB12)。具体的には、例えば、現在表示すべき楽譜のページ番号や小節番号などに応じて定められる。
ここで、CPU11は、元画像41に対する表示倍率(Scale)を取得し(ステップB13)、その表示倍率に従って元画像41の中で楽譜表示する矩形領域を決定し(ステップB14)、その矩形領域内の画像43を楽譜画像20としてディスプレイ画面42上の画像表示エリア44に展開して表示する(ステップB15)。
具体的には、ユーザの設定や、アプリケーションによって設定された表示倍率(Scale)に基づき、ステップB12で設定された元画像41内の始点の座標(x,y)から、画面表示する縦横サイズ(scrSX,scrSY)をスケール変換したサイズの画像部分を画像表示する矩形領域として決定し、表示倍率(Scale)により拡大縮小を施してディスプレイ画面42上の画像表示エリア44に展開して表示する。
この図10に示した一連の処理によって、楽譜画像として用いられる元画像41内の一部が、ディスプレイ画面42(表示部15の画面)に表示される。
(c)部分拡大表示処理
図12は上記図9のステップA16で実行される部分拡大表示処理を示すフローチャートである。
先に説明した図10の楽譜画像表示処理によって、表示部15の画面上に任意の楽譜画像20が表示された状態で(ステップC11)、CPU11は以下のような処理を実行する。
すなわち、CPU11は、ユーザが指定した箇所21のディスプレイ画面42(表示部15の画面)上の指示座標を、タッチパネルの入力位置座標情報に基づいて取得し(ステップC12)、その指示座標を元画像41上の座標に変換する(ステップC13)。詳しくは、図11に示した元画像41とディスプレイ画面42との相対関係からディスプレイ画面42上の指示座標に対応した元画像41上の座標を算出する。
ここで、元画像41の座標系において、CPU11は、ユーザが指定した箇所21(指示座標)に基づいて拡大表示の対象となる元領域22を設定するための元領域設定処理と(ステップC14)、この元領域22に対する表示先領域23を設定するための表示先領域設定処理を実行する(ステップC15)。なお、元領域設定処理については、後に図13を参照して詳しく説明する。また、表示先領域設定処理については、後に図16および図17を参照して詳しく説明する。
元領域22と表示先領域23がそれぞれ設定されると、CPU11は、元画像41の楽譜画像20内の元領域22を抽出し、これをディスプレイ画面42上の表示先領域23に対応した箇所に拡大表示する(ステップC16)。
その際、CPU11は、元画像41内の元領域22の矩形領域をディスプレイ画面42の座標に変換し(ステップC17)、元領域22に対応した箇所を他の部分と区別して所定の色で塗り潰す(ステップC18)。これにより、楽譜画像20のどの部分が拡大表示の対象となっているのかを視覚的に把握することができる。
以下に、元領域設定処理と表示先領域設定処理について詳しく説明する。なお、これらの処理については、すべて元画像41の座標系を使って行われる。
(元領域設定処理)
図13は上記図12のステップC14で実行される元領域設定処理を示すフローチャートである。
まず、CPU11は、ディスプレイ画面42(表示部15の画面)上でユーザが指定した箇所21の、元画像41上における座標(指示点のx,y座標)を取得する(ステップD11)。具体的には、ディスプレイ画面上のタッチされた位置をタッチパネルにより検出し、そのタッチ位置座標を、元画像41とディスプレイ画面42との対応関係に基づいて、タッチされた位置に相当する元画像上における位置座標を算出する。その後CPU11は、矩形領域の規定表示サイズを取得する(ステップD12)。具体的には、例えば、あらかじめ、ユーザの指定した位置を中心として、どのくらいの範囲(幅/高さ)の画像を表示させるかが定められていて、その規定のサイズを読み出すこと等により行う。
次に、CPU11は、現在画面上に表示されている楽譜の画像領域に対応した元画像41上の4辺(左辺,右辺,上辺,下辺)の座標(左辺/右辺のx座標、上辺/下辺のy座標)を取得すると共に(ステップD13)、指定箇所21の座標を中心にして、拡大表示すべき領域つまり元領域22(矩形領域)の4辺(左辺,右辺,上辺,下辺)の座標を取得する(ステップD14)。
このときの様子を図14に示す。
いま、元画像41上における指定箇所21の座標を(xc,yc)とすると、その座標を中心にして上記規定表示サイズだけ広げた矩形領域が拡大表示の対象範囲を示す元領域22として得られる。この元領域22(矩形領域)の4辺(左辺,右辺,上辺,下辺)の座標を「SrcRect.left,SrcRect.right,SrcRect.top,SrcRect.bottom」とする。
ここで、CPU11は、ステップD14で取得した元領域22が、ステップD13で取得した、現在表示中の楽譜画像領域内に収まっているか否かを判断する。その結果、元領域22が楽譜画像領域内に収まっていれば、現在の座標位置で確定される。
一方、元領域22が楽譜画像領域内に収まっていなければ、元領域22は現在表示している楽譜領域からはみ出していることになるので、CPU11は、楽譜画像領域内に収めるように元領域22の座標位置を修正する。すなわち、例えば楽譜画像領域の左側からはみ出している場合には(ステップD15のYes)、CPU11は、元領域22をそのはみ出し分だけ右にずらす(ステップD16)。
このときの様子を図15に示す。
元領域22が楽譜画像領域の左側(bmp L)からはみ出している場合に、そのはみ出し分を修正量(Offset)として右にずらすものとする。
同様にして、CPU11は、元領域22が楽譜画像領域の上側からはみ出している場合には下にずらし(ステップD17,D18)、楽譜画像領域の右側からはみ出している場合には左にずらし(ステップD19,D20)、楽譜画像領域の下側からはみ出している場合には上にずらして(ステップD21,D22)、楽譜画像領域内に収めるように元領域22の座標を修正する。
以上の処理により、元の楽譜画像上において、拡大する元領域が設定される。
(表示先領域設定処理)
図16および図17は上記図12のステップC15で実行される表示先領域設定処理を示すフローチャートである。
まず、CPU11は、ディスプレイ画面42(表示部15の画面)上でユーザが指定した箇所21の元画像41上の座標(指示点のx,y座標)を取得する(ステップE11)。また、CPU11は、拡大表示の表示先領域のディスプレイ画面42上のサイズに所定の倍率をかけて元画像41でのサイズに置き換える(ステップE12)。具体的には、ステップB13にて求めた、元画像と表示画像との表示倍率(scale)に基づいて、ディスプレイ画面42上の表示領域のサイズを、元画像41でのサイズに変換する。
次に、CPU11は、現在画面上に表示されている楽譜の画像領域に対応した元画像41上の4辺(左辺,右辺,上辺,下辺)の座標(左辺/右辺のx座標、上辺/下辺のy座標)を取得すると共に(ステップE13)、指定箇所21のX座標から表示先領域(矩形領域)の左辺と右辺の座標を取得する(ステップE14)。
このときの様子を図18に示す。
いま、元画像41上における指定箇所21の座標を(xc,yc)とし、表示先領域23の幅サイズをdestwとする。指定箇所21のX座標から左右にdestw/2だけ広げた位置が表示先領域23(矩形領域)の左辺,右辺の座標(destRect.left,destRect.right)として得られる。
表示先領域23(矩形領域)の左辺,右辺の座標が得られると、続いてCPU11は、表示先領域23を指定箇所21より上に表示する仮定で表示先領域23の下辺の座標を所定のマージンを考慮して設定するとともに(ステップE15)、その下辺の座標を基準にして上辺の座標を設定する(ステップE16)。
このときの様子を図19に示す。
表示先領域23の高さサイズをdesthとすると、指定箇所21の座標(xc,yc)から上方向に所定のマージン(margin)分だけ移動させた位置が表示先領域23の下辺座標(destRect.bottom)となる。また、この下辺座標(destRect.bottom)から高さdesthの分だけ上げた位置が表示先領域23の上辺座標(destRect.top)となる。なお、実際には、例えば、所定のマージン(margin)としては、拡大元領域22のサイズを考慮した値とすることができる。
ここで、CPU11は、表示先領域23が現在表示中の楽譜画像領域内に収まっているか否かを判断する。その結果、表示先領域23が楽譜画像領域内に収まっていれば、現在の座標位置で確定される。
一方、表示先領域23が楽譜画像領域内に収まっていなければ、CPU11は、楽譜画像領域内に収めるように元領域22の座標位置を修正する。すなわち、例えば楽譜画像領域の左側からはみ出している場合には(ステップE18のYes)、CPU11は、表示先領域23をそのはみ出し分だけ右にずらす(ステップE19)。
また、楽譜画像領域の上側からはみ出している場合には(ステップE20のYes)、CPU11は、指定箇所の下に表示するように表示先領域23の上辺と下辺の座標を再設定する(ステップE21,E22)。
このときの様子を図20に示す。
表示先領域23が楽譜画像領域の上側から出てしまう場合には、指定箇所21の座標(xc,yc)から下方向に所定のマージン(margin)分だけ移動させた位置を表示先領域23の上辺座標(destRect.top)として再設定する。また、この上辺座標(destRect.top)から高さdesthの分だけ下げた位置を表示先領域23の下辺座標(destRect.bottom)として再設定する。
なお、本フローチャートでは、このようにして下方向に表示させた結果、下側にはみ出した場合の判定を行っていないが、これは、上記のように、当初上側に拡大表示を行うべく座標の計算を行い、その結果、上側にはみ出た場合にのみ下側に表示するようにしているため、下側にはみ出た時点で、上も下も、どちらへ持って行ってもはみ出てしまうことを意味している。従って、そのような場合は、例えば、はみ出ることは承知の上で、片方側(例えば、そのまま下側)に表示できる部分だけ表示するようにする。
また、楽譜画像領域の右側からはみ出している場合には(ステップE23のYes)、CPU11は、表示先領域23をそのはみ出し分だけ左にずらす(ステップE24)。
このようにして、元領域22と表示先領域23が設定されると、図12のステップC16〜C18で説明したように、元領域22内の楽譜画像20の一部が抽出されてディスプレイ画面42上の表示先領域23に対応した箇所に拡大表示される。その際、ディスプレイ画面42上の元領域22に対応した箇所が所定の色で塗り潰される。
このように第1の実施形態によれば、画面上に楽譜が表示された状態で、ユーザがタッチ操作により任意の箇所を指定すると、その指定箇所を基準にして楽譜の中の拡大表示の対象範囲を示す第1の領域(元領域22)と拡大表示先の第2の領域(表示先領域23)が設定され、第1の領域内の楽譜の一部が第2の領域に拡大表示される。
したがって、全体の視認性を求めて楽譜全体を表示しておくことができ、ユーザが楽譜の細部を確認したいときにタッチ操作すれば、そのタッチ操作で指定された箇所を部分拡大表示して確認することできる。
その際、拡大表示の対象となった領域が所定の色で区別表示されるので、楽譜のどの部分が拡大表示されているのかを視覚的に把握することができる。
(第2の実施形態)
次に、第2の実施形態について説明する。
上記第1の実施形態では、拡大表示の対象範囲を示す元領域22のサイズが固定であったが、第2の実施形態では、楽譜の小節とパートを考慮して元領域22のサイズが決定される。
具体例を挙げて説明する。
図21および図22は楽譜画像の表示画面上に設定される拡大表示の元領域を示す図である。なお、図中の点線で示す矩形領域は上記第1の実施形態での元領域22の範囲の例を示している。
上記第1の実施形態と同様に、ユーザが画面上の楽譜画像20の任意の箇所21を指でタッチして指定すると、その指定箇所21を基準にして矩形状の元領域22が設定される。
ここで、第2の実施形態では、指定箇所21が属する小節の範囲が元領域22として設定される。その際に、指定箇所21が楽譜上の位置に応じてパート別で元領域22の範囲が変わる。すなわち、図21の例のように、ユーザが楽譜の上段の五線譜をタッチしている場合にはその上段五線譜の小節部分を表示対象とした元領域22が設定される。
また、例えばユーザが楽譜の下段の五線譜をタッチすれば、下段の五線譜の小節部分を表示対象とした元領域22が設定される。さらに、図22に示すように、上段と下段の中間位置をタッチすると、上段と下段の両方の小節を表示対象とした元領域22が設定される。
第2の実施形態における楽譜表示装置10の動作について詳しく説明する。
(a)メイン処理、(b)楽譜画像表示処理については上記第1の実施形態と同様である(図9および図10参照)。ここでは、(c)部分拡大表示処理について説明する。なお、以下の各フローチャートで示される処理は、楽譜表示装置10に設けられたCPU11がROM13に記憶されたプログラム13aを読み込むことにより実行される。
(c)部分拡大表示処理
図23は上記図9のステップA16で、本第2の実施形態の場合に図12に替えて実行される部分拡大表示処理を示すフローチャートである。
先に説明した図10の楽譜画像表示処理によって、表示部15の画面上に任意の楽譜画像20が表示された状態で(ステップF11)、CPU11は以下のような処理を実行する。
すなわち、CPU11は、ユーザが指定した箇所21のディスプレイ画面42(表示部15の画面)上の指示座標を、タッチパネルの入力位置座標情報に基づいて取得し(ステップF12)、その指示座標を元画像41上の座標に変換する(ステップF13)。詳しくは、図11に示した元画像41とディスプレイ画面42との相対関係からディスプレイ画面42上の指示座標に対応した元画像41上の座標を算出する。
次に、元画像41の座標系において、CPU11は、ユーザが指定した箇所21(指示座標)の小節番号を取得する(ステップF14)。なお、小節番号取得処理については、後に図24を参照して詳しく説明する。
ここで、ユーザの指定箇所21が楽譜の小節内にあるか否かによって処理が分岐する。指定箇所21が楽譜の小節外(例えば余白部分等)であれば(ステップF15のNo)、CPU11は、通常の元領域設定処理(図13参照)により元領域22を設定する(ステップF16)。指定箇所21が楽譜の小節内であれば(ステップF15のYes)、CPU11は、楽譜を考慮した元領域設定処理により元領域22を設定する(ステップF17)。この元領域設定処理については、後に図26および図27を参照して説明する。
上記ステップF16またはF17の元領域設定処理によって元領域22が設定されると、CPU11は、この元領域22に対する表示先領域23を設定するための表示先領域設定処理を実行する(ステップF18)。この表示先領域設定処理については上記第1の実施形態と同様であり、既に図16および図17を参照して説明済みであるため、ここではその詳しい説明は省略するものとする。
元領域22と表示先領域23がそれぞれ設定されると、CPU11は、元画像41の楽譜画像20内の元領域22を抽出し、これをディスプレイ画面42上の表示先領域23に対応した箇所に拡大表示する(ステップF19)。
その際、CPU11は、元画像41内の元領域22の矩形領域をディスプレイ画面42の座標に変換し(ステップF20)、元領域22に対応した箇所を他の部分と区別して所定の色で塗り潰す(ステップF21)。
以下に、第2の実施形態の特徴的な処理である小節番号取得処理と元領域設定処理(楽譜考慮)について詳しく説明する。
(小節番号取得処理)
図24は上記図23のステップF14で実行される小節番号取得処理を示すフローチャートである。
まず、CPU11は、楽譜画像20の中で現在画面上に表示されているページを取得し(ステップG11)、そのページの楽譜の小節を先頭から順にサーチして、指定箇所(指示座標)が属する小節の番号を検索する(ステップG12)。この場合、複数段からなる楽譜であれば、各段を含んだ小節の区切りで指定箇所が属する小節を判断することになる。
ここで、指定箇所(指示座標)が属する小節について定義しておく。
図25(a)は2つのパートを有する楽曲の楽譜を例とした図、同図(b)は3つのパートを有する楽曲の楽譜を例とした図である。
図25(a)に示すように、2つのパートを有する楽曲の楽譜であれば、上段のパート1における五線譜の小節の区切りの左上の点P1と右上の点P2と、下段のパート2における五線譜の小節の区切りの左下の点P3と右下の点P4の4点で囲まれる範囲が指定箇所の属する小節である。
また、図25(b)に示すように、3つのパート1,2,3を有する楽譜であれば、最上段のパート1における五線譜の小節の区切りの左上の点P1と右上の点P2と、最下段のパート3における五線譜の小節の区切りの左下の点P3と右下の点P4の4点で囲まれる範囲内が指定箇所の属する小節である。
該当する小節の番号が得られると、続いてCPU11は、指定箇所が属するパートの番号を取得する(ステップG13)。この場合、指定箇所のy座標が小節内のどこに位置しているのかを見てパートの番号を決める。
すなわち、図25(a)の例で、指定箇所のy座標が小節のパート1の中にあれば、パート番号として「1」が設定される。指定箇所のy座標が小節のパート2の中にあれば、パート番号として「2」が設定される。さらに、指定箇所のy座標がパート1とパート2との間であれば、パート1とパート2の両方の小節の範囲が表示対象となる。この場合、パート番号として「0」が設定される。なお、指定箇所のy座標がパート1とパート2のどこにもなければ、表示対象外として処理される。なお、例えば「指定箇所のy座標が小節のパート1の中にある」とは、指定位置のy座標が、パート1の五線譜の第五線(最上線)から第一線(最下線)の間にある場合等とすることによって判定可能である。
また、図25(b)の例では、指定箇所のy座標がパート1とパート2との間、またはパート2とパート3との間であれば、全パートの小節の範囲が表示対象となり、パート番号として「0」が設定される。
(元領域設定処理)
図26および図27は上記図23のステップF17で実行される元領域設定処理(楽譜考慮)を示すフローチャートである。
まず、CPU11は、ディスプレイ画面42(表示部15の画面)上でユーザが指定した箇所21の元画像41上の座標(指示点のx,y座標)を取得する(ステップH11)。また、CPU11、現在画面上に表示されている楽譜の画像領域に対応した元画像41上の4辺(左辺,右辺,上辺,下辺)の座標(左辺/右辺のx座標、上辺/下辺のy座標)を取得する(ステップH12)。
ここで、CPU11は、上記図24の小節番号取得処理で得られた小節番号とパート番号に基づいて、元画像41における元領域22の座標を設定する。詳しくは、まず、CPU11は、上記小節番号に基づいて元画像41上の該当する小節の左右の座標を確認し、その左右の座標(ユーザの指定箇所が属する小節の左右の座標)を基準にして、拡大表示を行うべき元領域22(矩形領域)の左右の座標を、所定のマージンを含めて設定する(ステップH13)
このときの様子を図28に示す。
指定箇所21の座標(xc,yc)が属する小節が得られた場合に、その小節の左右の座標に所定のマージン(margin)を加えた位置を元領域22の左右の座標(SrcRect.left,SrcRect.right)として決定する。すなわち、この場合、指定箇所21の位置に対して、拡大すべき元領域22は、必ずしも指定箇所21を中心として左右対称の幅を決定するとは限らず、その指定箇所21が含まれる小節の範囲によって元領域が定まることとなる。
続いて、CPU11は、上記パート番号に基づいて元画像41上の該当するパートに応じて元領域22(矩形領域)の上下の座標を設定する(ステップH14)。
このときの様子を図29に示す。
例えば、指定箇所21の座標(xc,yc)が属する小節のパート番号が「1」であれば、当該小節の上段のパート1の上下の座標を元領域22の上下の座標(SrcRect.top,SrcRect.bootom)として決定する。
同様に、パート番号が「2」であれば、当該小節の中段のパート2の上下の座標を元領域22の上下の座標として決定し、パート番号が「3」であれば、当該小節の下段のパート3の上下の座標を元領域22の上下の座標として決定する。また、パート番号が「0」であった場合には、当該小節のすべてパートが表示対象となり、パート1の上辺の座標が元領域22の上辺の座標として決定され、パート3の下辺の座標が元領域22の下辺の座標として決定されることになる。なお、この段階で、元領域22の上下の座標に対して、左右の座標を設定したときと同様、マージンを設定することとしても良い。
このようにして、元画像41上における元領域22を構成する矩形領域の4辺(左辺,右辺,上辺,下辺)の座標が設定されると、CPU11は、音符の位置や画面サイズに応じて元領域22の位置をさらに調整する。
詳しくは、まず、CPU11は、表示対象とする小節内のパートの各音を図6の演奏情報から順次検索し、その中で最高音と最低音の音符の座標を取得する(ステップH15)。そして、CPU11は、これらの音符の座標に基づいて最高音と最低音を元領域22内に収めるように上下の座標を適宜修正する(ステップH16)。
このときの様子を図30に示す。
表示対象とする小節内に含まれる各音の中で、最低音の音符の玉の位置が五線譜の一番下の第一線より下にあれば、その音符の玉の位置に合わせて元領域22の下辺の座標(SrcRect.bootom)を修正する。また、最高音の音符の玉の位置が五線譜の一番上の第五線より上にあれば、その音符の玉の位置に合わせて元領域22の上辺の座標(SrcRect.top)を修正する。
続いて、CPU11は、元領域22が現在表示中の楽譜画像領域内に収まっているか否かを判断する。その結果、元領域22が楽譜画像領域内に収まっていれば、現在の座標位置で確定される。
一方、元領域22が楽譜画像領域内に収まっていなければ、CPU11は、楽譜画像領域内に収めるように元領域22の座標位置を修正する。すなわち、図15で説明したように、例えば楽譜画像領域の左側からはみ出している場合には(ステップH17のYes)、CPU11は、元領域22をそのはみ出し分だけ右にずらす(ステップH18)。
同様にして、CPU11は、元領域22が楽譜画像領域の上側からはみ出している場合には下にずらし(ステップH19,H20)、楽譜画像領域の右側からはみ出している場合には左にずらし(ステップH21,H22)、楽譜画像領域の下側からはみ出している場合には上にずらして(ステップH23,H24)、楽譜画像領域内に収めるように元領域22の座標を修正する。
このようして元領域22が設定されると、以後は図23のステップF18〜F21で説明したように、元領域22に対する表示先領域23が設定された後、元領域22内の楽譜画像20の一部が抽出されてディスプレイ画面42上の表示先領域23に対応した箇所に拡大表示される。その際、ディスプレイ画面42上の元領域22に対応した箇所が所定の色で塗り潰される。
このように第2の実施形態によれば、ユーザの指定箇所が属する小節の範囲を拡大表示の対象とした領域(元領域22)が設定される。したがって、その領域内を拡大表示したときに、小節の単位で細部を確認することができる。さらに、本第2の実施例では、拡大表示の対象とする領域(元領域22)が、ユーザの指定箇所が属する小節の範囲に基づいて設定されるので、ユーザが着目している小節を適切に拡大表示することができ、音楽的に意味の無い範囲の拡大表示(たとえば、小節の半分のみを拡大表示したり、五線譜の第3線より上のみを拡大表示する、といった、音楽的に意味の無い区切りによる拡大表示)を防いで、使いやすい拡大表示を行うことができる。
また、その小節が複数のパートから構成されている場合に、指定箇所と各パートの位置関係に応じて拡大表示対象領域(元領域22)が設定される。つまり、指定箇所が各パートのいずれかのパートの五線譜上にあれば、そのパートが拡大表示対象となり、指定箇所が各パートの五線譜の間にあれば、すべてのパートが拡大表示対象となる。したがって、簡単な操作で所望のパートを拡大表示して細部を確認することができ、多数のパートを有する楽曲を練習するような場合に便利である。
(第3の実施形態)
次に、第3の実施形態について説明する。
上記第1の実施形態では、元領域22に対応した表示先領域23が任意の位置に設定されていたが、第3の実施形態では、指定箇所の楽譜を考慮して表示先領域23を設定するものである。
具体例を挙げて説明する。
図31および図32は現在表示中の楽譜画像に設定される表示先領域を示す図である。なお、図中の点線で示す矩形領域は上記第1の実施形態での表示先領域23の範囲を示している。
上記第1の実施形態と同様に、ユーザが画面上の楽譜画像20の任意の箇所21を指でタッチして指定すると、その指定箇所21を基準にして矩形状の元領域22が設定される。また、この指定箇所21を基準にして矩形状の表示先領域23が設定され、元領域22内の楽譜の一部が表示先領域23に拡大表示される。
ここで、第3の実施形態では、指定箇所21の近くの楽譜を隠さないように表示先領域23の位置が設定される。すなわち、図31の例では、指定箇所21のすぐ上に表示先領域23を設定した場合、指定箇所21の含まれている小節の、上段の楽譜が表示先領域23で隠れてしまう。そこで、さらに上の位置に表示先領域23を設定して元領域22内の楽譜の一部を拡大表示する。
また、図32の例では。指定箇所21のすぐ下に表示先領域23を設定した場合に、指定箇所21の含まれている小節の下段の楽譜が表示先領域23で隠れてしまうので、さらに下の位置に表示先領域23を設定して元領域22内の楽譜の一部を拡大表示する。
第3の実施形態における楽譜表示装置10の動作について詳しく説明する。
(a)メイン処理、(b)楽譜画像表示処理については上記第1の実施形態と同様である(図9および図10参照)。ここでは、(c)部分拡大表示処理について説明する。なお、以下の各フローチャートで示される処理は、楽譜表示装置10に設けられたCPU11がROM13に記憶されたプログラム13aを読み込むことにより実行される。
(c)部分拡大表示処理
図33は上記図9のステップA16で、本第3の実施形態の場合に図12に替えて実行される部分拡大表示処理を示すフローチャートである。
先に説明した図10の楽譜画像表示処理によって、表示部15の画面上に任意の楽譜画像20が表示された状態で(ステップI11)、CPU11は以下のような処理を実行する。
すなわち、CPU11は、ユーザが指定した箇所21のディスプレイ画面42(表示部15の画面)上の指示座標を、タッチパネルの入力位置座標情報に基づいて取得し(ステップI12)、その指示座標を元画像41上の座標に変換する(ステップI13)。詳しくは、図11に示した元画像41とディスプレイ画面42との相対関係からディスプレイ画面42上の指示座標に対応した元画像41上の座標を算出する。
次に、元画像41の座標系において、CPU11は、ユーザが指定した箇所21(指示座標)に基づいて拡大表示の対象となる元領域22を設定するための元領域設定処理を実行する(ステップI14)。なお、元領域設定処理については、上記第1の実施形態のステップC14と同様であり、既に図13を参照して説明済みであるため、ここではその詳しい説明は省略するものとする。
また、CPU11は、ユーザが指定した箇所21(指示座標)の小節番号を取得する(ステップI15)。なお、小節番号取得処理については、上記第2の実施形態のステップF14と同様であり、既に図24を参照して説明済みであるため、ここではその詳しい説明は省略するものとする。
ここで、ユーザの指定箇所21が楽譜の小節内にあるか否かによって処理が分岐する。指定箇所21が楽譜の小節外(例えば余白部分等)であれば(ステップI16のNo)、CPU11は、通常の表示先領域設定処理(図16および図17参照)により表示先領域23を設定する(ステップI17)。指定箇所21が楽譜の小節内であれば(ステップI16のYes)、CPU11は、楽譜を考慮した表示先領域設定処理を実行する(ステップI18)。この表示先領域設定処理については、後に図34および図35を参照して説明する。
元領域22と表示先領域23がそれぞれ設定されると、CPU11は、元画像41の楽譜画像20内の元領域22を抽出し、これをディスプレイ画面42上の表示先領域23に対応した箇所に拡大表示する(ステップI19)。
その際、CPU11は、元画像41内の元領域22の矩形領域をディスプレイ画面42の座標に変換し(ステップI20)、元領域22に対応した箇所を他の部分と区別して所定の色で塗り潰す(ステップI21)。
以下に、第3の実施形態の特徴的な処理である表示先領域設定処理(楽譜考慮)について詳しく説明する。
(表示先領域設定処理)
図34および図35は上記図33のステップI18で実行される表示先領域設定処理(楽譜考慮)を示すフローチャートである。
まず、CPU11は、ディスプレイ画面42(表示部15の画面)上でユーザが指定した箇所21の元画像41上の座標(指示点のx,y座標)を取得する(ステップJ11)。また、CPU11は、拡大表示の表示先領域のディスプレイ画面42上のサイズに所定の倍率をかけて元画像41でのサイズに置き換える(ステップJ12)。
次に、CPU11は、現在画面上に表示されている楽譜の画像領域に対応した元画像41上の4辺(左辺,右辺,上辺,下辺)の座標(左辺/右辺のx座標、上辺/下辺のy座標)を取得すると共に(ステップJ13)、指定箇所21のX座標から表示先領域(矩形領域)の左辺と右辺の座標を取得する(ステップE14)。
すなわち、図18で説明したように、いま、元画像41上における指定箇所21の座標を(xc,yc)とし、表示先領域23の幅サイズをdestwとすると、指定箇所21のX座標から左右にdestw/2だけ広げた位置が表示先領域23(矩形領域)の左辺,右辺の座標(destRect.left,destRect.right)として得られる。
表示先領域23(矩形領域)の左辺,右辺の座標が得られると、CPU11は、その表示先領域23が現在表示中の楽譜画像領域の左右から外れているか否かを判断する。その結果、楽譜画像領域の左側からはみ出している場合には(ステップJ15のYes)、CPU11は、表示先領域23をそのはみ出し分だけ右にずらす(ステップJ16)。楽譜画像領域の右側からはみ出している場合には(ステップJ17のYes)、CPU11は、表示先領域23をそのはみ出し分だけ左にずらす(ステップJ18)。
このようして表示先領域23の左辺と右辺の座標が決定されると、続いてCPU11は、指定箇所が属する小節との位置関係に応じて、以下のようにして上辺と下辺の座標を決める。
まず、CPU11は、ユーザが指示した箇所の上方に表示先領域23を設定するものと仮定して、表示先領域23の下辺の座標として、指示箇所が属する小節の上辺の座標を設定する(ステップJ19)。そして、さらにCPU11は、当該小節内の各音を図6の演奏情報から順次検索し(ステップJ20)、表示先領域23の下辺の座標よりも上に音符が在った場合に、表示先領域23の下辺の座標をその音符の位置に合わせる(ステップJ21)。
CPU11は、当該小節内の各音について同様のチェックを行って表示先領域23の下辺の座標を適宜修正した後(ステップJ22のYes)、さらに所定のマージン分だけ上にずらした位置を表示先領域23の下辺の座標として決定する(ステップJ23)。
表示先領域23の下辺座標が決まると、CPU11は、その下辺座標を基準にして表示先領域23の上辺の座標を設定する(ステップJ24)。
この様子を図36に示す。
ユーザの指示箇所の座標(xc,yc)の上に表示先領域23を設定する場合を想定する。その際、まず最初に、表示先領域23の下辺座標(destRect.bottom)として、指示箇所が属する小節の上辺座標(MeasRect.top)を設定する。
ここで、当該小節内の音符の位置をチェックする。その結果、表示先領域23の下辺座標(destRect.bottom)よりも上に音符が有った場合に、その音符のコマの位置+所定のマージン(margin)分だけ上にずらした位置を最終的な下辺座標(destRect.bottom)として決定する。また、この下辺座標(destRect.bottom)から高さdesthの分だけ上げた位置が表示先領域23の上辺座標(destRect.top)となる。
このようにして、ユーザの指示箇所の上に表示先領域23を設定した後に、CPU11は、この設定された表示先領域23が現在表示中の楽譜画像領域内に収まっているか否かを判断する。その結果、表示先領域23が楽譜画像領域内に収まっていれば、現在の座標位置で確定される。
一方、表示先領域23が楽譜画像領域内に収まっていない場合、つまり、表示先領域23の上辺座標が楽譜画像領域を超えてはみ出ている場合には(ステップJ25のYes)、以下のようにしてユーザの指示箇所の下方に表示先領域23を設定し直す。
すなわち、まず、CPU11は、表示先領域23の上辺の座標として、指示箇所が属する小節の下辺の座標を設定する(ステップJ26)。そして、さらにCPU11は、当該小節内の各音を図6の演奏情報から順次検索し(ステップJ27)、表示先領域23の上辺の座標よりも下に音符が在った場合に、表示先領域23の上辺の座標をその音符の位置に合わせる(ステップJ28)。
CPU11は、当該小節内の各音について同様のチェックを行って表示先領域23の上辺の座標を適宜修正した後(ステップJ29のYes)、さらに所定のマージン分だけ下にずらした位置を表示先領域23の上辺の座標として決定する(ステップJ30)。
表示先領域23の上辺座標が決まると、CPU11は、その上辺座標を基準にして表示先領域23の下辺の座標を設定する(ステップJ31)。
この様子を図37に示す。
ユーザの指示箇所の座標(xc,yc)の下に表示先領域23を設定する場合に、まず、表示先領域23の上辺座標(destRect.top)として、指示箇所が属する小節の下辺座標(MeasRect.bottom)を設定する。
ここで、当該小節内の音符の位置をチェックする。その結果、表示先領域23の上辺座標(destRect.top)よりも下に音符が有った場合に、その音符のコマの位置+所定のマージン(margin)分だけ下にずらした位置を最終的な上辺座標(destRect.top)として決定する。また、この上辺座標(destRect.top)から高さdesthの分だけ下げた位置が表示先領域23の下辺座標(destRect.bottom)となる。
このようして表示先領域23が設定されると、以後は図33のステップF19〜F21で説明したように、元領域22内の楽譜画像20の一部が抽出されてディスプレイ画面42上の表示先領域23に対応した箇所に拡大表示される。その際、ディスプレイ画面42上の元領域22に対応した箇所が所定の色で塗り潰される。
このように第3の実施形態によれば、ユーザが楽譜の任意の箇所を指定した際に、その指定箇所が属する小節全体の表示や、さらにその小節内の音符に重ならないように拡大表示先の領域(表示先領域23)が設定される。
詳しくは、まず、当該小節の上辺若しくは下辺の位置座標に基づいて、表示先領域の下辺若しくは上辺が設定され、これにより、表示先領域が当該小節の範囲と重ならずに表示されることとなる。そしてさらに、当該小節内の最高音の音符と最低音の音符が検索され、これらの音符の位置を基準にして拡大表示先の領域(表示先領域23)が設定される。したがって、楽譜の一部を拡大表示したときに、その拡大表示によってユーザの指定箇所の楽譜が見えなくなる不具合を解消でき、拡大表示された部分と指定箇所の部分とを見比べながら楽譜の勉強を行うことができる。
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
例えば、ユーザの指定箇所に応じて、どの段の楽譜を何段分拡大表示するか、といった点については、種々の形態が可能である。例えば、楽譜が多段からなるオーケストラ譜のような場合には、ユーザの指定箇所が、ある五線の段内でない場合に、例えば、指定箇所の上下の段を表示することとしても良いし、例えば、弦楽器群、金管楽器群、木管楽器群、など、所定の複数の段について拡大表示することとしても良い。
また、元領域22については、ユーザの指定箇所に応じた複数小節分の領域を拡大することとしても良い。例えば、ユーザの指定箇所が含まれる小節と、その次の小節の2小節分を表示するようにしても良い。
また、表示先領域23と元領域22について、いずれかの領域の広さに応じて、他方の領域の広さを変化させることとしても良い。例えば、上記第2の実施形態の場合に、元領域22としてある小節の範囲が設定された場合に、その小節範囲を拡大するのに相応しい表示先領域23が設定されるようにしても良い。また、他の方法として、表示先領域23と元領域22が定まった後に、これらの両領域に応じて、表示倍率(scale)を定めて、ちょうど良い倍率によって拡大表示を行うこととしても良い。
さらに、上述した実施形態において記載した手法は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク(フレシキブルディスク、ハードディスク等)、光ディスク(CD−ROM、DVD等)、半導体メモリなどの記録媒体に書き込んで各種装置に適用したり、通信媒体により伝送して各種装置に適用することも可能である。本装置を実現するコンピュータは、記録媒体に記録されたプログラムを読み込み、このプログラムによって動作が制御されることにより、上述した処理を実行する。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1]
楽譜のデータが記憶された楽譜データ記憶手段と、
画面上に表示された楽譜の任意の箇所を指定する指定手段と、
この指定手段によって指定された箇所を基準として、上記楽譜データ記憶手段に記憶された楽譜の拡大表示の対象となる範囲である元領域を設定する元領域設定手段と、
この元領域設定手段によって設定された上記元領域に対応した画面上の表示先領域を設定する表示先領域設定手段と、
上記元領域内の楽譜を、上記表示先領域設定手段によって設定された画面上の表示先領域に拡大表示する表示制御手段と
を具備したことを特徴とする楽譜表示装置。
[2]
上記元領域設定手段は、
上記楽譜の中で上記指定箇所が属する小節を判断し、その小節を拡大表示対象として上記元領域を設定することを特徴とする[1]記載の楽譜表示装置。
[3]
上記元領域設定手段は、
上記小節が複数のパートから構成されている場合に上記指定箇所と上記各パートとの位置関係に応じて上記元領域を設定することを特徴とする[1]または[2]記載の楽譜表示装置。
[4]
上記元領域設定手段は、
上記指定箇所が上記各パートのいずれかのパートの五線譜上にある場合に、そのパートを拡大表示対象として上記元領域を設定することを特徴とする[3]記載の楽譜表示装置。
[5]
上記元領域設定手段は、
上記指定箇所が上記各パートの五線譜の間にある場合に、すべてのパートを拡大表示対象として上記元領域を設定することを特徴とする[3]記載の楽譜表示装置。
[6]
上記表示先領域設定手段は、
上記楽譜の中で上記指定箇所が属する小節を判断し、その小節内の音符に重ならない位置に上記表示先領域を設定することを特徴とする[1]記載の楽譜表示装置。
[7]
上記表示先領域設定手段は、
上記小節内の最高音の音符または最低音の音符を検索し、その音符の位置を基準にして上記表示先領域を設定することを特徴とする[6]記載の楽譜表示装置。
[8]
上記表示制御手段は、
上記元領域に対応した上記楽譜の一部を上記表示先領域に拡大表示したときに、上記元領域に対応した上記楽譜の一部を他の部分と区別して表示することを特徴とする[1]から[7]のいずれかに記載の楽譜表示装置。
[9]
楽譜のデータが記憶された楽譜データ記憶手段と接続された楽譜表示装置において実行される楽譜表示方法であって、
該楽譜表示装置が、
画面上に表示された楽譜の任意の箇所が指定された際に、この指定された箇所を基準として、上記楽譜データ記憶手段に記憶された楽譜の拡大表示の対象となる範囲である元領域を設定し、
上記元領域に対応した画面上の表示先領域を設定し、
上記元領域内の楽譜を上記画面上の表示先領域に拡大表示する
ことを特徴とする楽譜表示方法。
[10]
楽譜のデータが記憶された楽譜データ記憶手段と接続されたコンピュータによって実行される楽譜表示用のプログラムであって、
上記コンピュータに、
画面上に表示された楽譜の任意の箇所が指定された際に、この指定された箇所を基準として、上記楽譜データ記憶手段に記憶された楽譜の拡大表示の対象となる範囲である元領域を設定する機能と、
上記元領域に対応した画面上の表示先領域を設定する機能と、
上記元領域内の楽譜を上記画面上の表示先領域に拡大表示する機能と
を実現させるためのプログラム。