(57)【特許請求の範囲】
【請求項１】
曲を構成する各音を表す曲データを記憶する曲データ記憶手段と、
前記曲データ記憶手段に記憶される曲データから連桁する音列を検出する連桁検出手段と、
前記連桁検出手段が検出した連桁する音列において隣り合う音同士の音高差の正負に応じて増減される傾き補正値を発生する補正値発生手段と、
前記連桁検出手段が検出した連桁する音列の先頭音と後端音との音高差に応じた傾きを、前記補正値発生手段により生成される傾き補正値にて補正して連桁傾きを決定する連桁傾き決定手段と
を具備することを特徴とする楽譜表示装置。
【請求項２】
前記補正値発生手段は、ユーザ設定される重み係数に応じて傾き補正値を調節する調節手段を具備することを特徴とする請求項１に記載の楽譜表示装置。
【請求項３】
曲を構成する各音を表す曲データから連桁する音列を検出する連桁検出処理と、
前記連桁検出処理が検出した連桁する音列において隣り合う音同士の音高差の正負に応じて増減される傾き補正値を発生する補正値発生処理と、
前記連桁検出処理が検出した連桁する音列の先頭音と後端音との音高差に応じた傾きを、前記補正値発生処理にて生成される傾き補正値にて補正して連桁傾きを決定する連桁傾き決定処理と
をコンピュータで実行させることを特徴とする楽譜表示プログラム。
【請求項４】
前記補正値発生処理は、ユーザ設定される重み係数に応じて傾き補正値を調節する調節処理を具備することを特徴とする請求項３に記載の楽譜表示プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、連桁する音符を見易く表示する楽譜表示装置および楽譜表示プログラムに関する。
【背景技術】
【０００２】
曲を構成する各音を表す曲データを楽譜化して表示する楽譜表示装置が知られている。例えば、特許文献１には、連桁（ビーム）で繋ぐ音の両端の音の符頭表示位置の差を検出し、検出した符頭表示位置の差（音高差）が所定値より小さければ、連桁の傾きを水平に設定し、一方、符頭表示位置の差（音高差）が所定値より大きければ、連桁の傾きを所定に傾きに設定することによって、連桁で繋ぐ両端の音の音程が小さい場合や音程が極端に大きい場合でも演奏者が見易いように連桁を表示する楽譜表示方法が開示されている。
【０００３】
【特許文献１】特開平１０−７４０８２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記特許文献１に開示の楽譜表示方法では、連桁で繋ぐ音の両端の音の音高差で連桁の傾きを設定している。したがって、３つ以上の音を連桁で繋ぐ場合には、連桁される一連の音のうち両端以外の音の音高が考慮されない為、その両端以外の音の音高によっては、連桁の傾きと連桁される一連の音の符頭表示位置とが調和せず見た目のバランスが悪くなるという問題が生じる。
【０００５】
また、上記特許文献１に開示の楽譜表示方法では、連桁で繋ぐ音が和音である場合には和音構成音中の最高音のみを用いて連桁の傾きを設定している。ところが、和音の最高音と最低音との音高差は必ずしも一定ではない為、この場合もやはり連桁の傾きと連桁される和音構成音の符頭表示位置とが調和せずバランスの悪い傾きの連桁になってしまう。
【０００６】
さらに、上記特許文献１に開示の楽譜表示方法では、例えばト音記号の段に表示される音符とヘ音記号の段に表示される音符とを繋ぐ所謂段交叉の連桁を表示できない上、ユーザ好みに応じて連桁の表示形態を調整することができない、という問題もある。
【０００７】
そこで本発明は、このような事情に鑑みてなされたもので、連桁する音符を見易く表示出来、しかも段交叉の連桁を表示したり、ユーザ好みに応じて連桁の表示形態を調整することができる楽譜表示装置および楽譜表示プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、請求項１に記載の発明では、曲を構成する各音を表す曲データを記憶する曲データ記憶手段と、前記曲データ記憶手段に記憶される曲データから連桁する音列を検出する連桁検出手段と、前記連桁検出手段が検出した連桁する音列において隣り合う音同士の音高差の正負に応じて増減される傾き補正値を発生する補正値発生手段と、前記連桁検出手段が検出した連桁する音列の先頭音と後端音との音高差に応じた傾きを、前記補正値発生手段により生成される傾き補正値にて補正して連桁傾きを決定する連桁傾き決定手段とを具備することを特徴とする。
【００１１】
請求項１に従属する請求項２に記載の発明では、前記補正値発生手段は、ユーザ設定される重み係数に応じて傾き補正値を調節する調節手段を具備することを特徴とする。
【００１２】
請求項３に記載の発明では、曲を構成する各音を表す曲データから連桁する音列を検出する連桁検出処理と、前記連桁検出処理が検出した連桁する音列において隣り合う音同士の音高差の正負に応じて増減される傾き補正値を発生する補正値発生処理と、前記連桁検出処理が検出した連桁する音列の先頭音と後端音との音高差に応じた傾きを、前記補正値発生処理にて生成される傾き補正値にて補正して連桁傾きを決定する連桁傾き決定処理とをコンピュータで実行させることを特徴とする。
【００１５】
請求項３に従属する請求項４に記載の発明では、前記補正値発生処理は、ユーザ設定される重み係数に応じて傾き補正値を調節する調節処理を具備することを特徴とする記載の楽譜表示プログラム。
【発明の効果】
【００１６】
請求項１、３に記載の発明によれば、曲を構成する各音を表す曲データから連桁する音列を検出し、検出した連桁する音列において隣り合う音同士の音高差の正負に応じて増減される傾き補正値を発生する。そして、検出した連桁する音列の先頭音と後端音との音高差に応じた傾きを、上記傾き補正値にて補正して連桁傾きを決定するので、連桁する音符を見易く表示することができる。
【００１９】
請求項２、４に記載の発明によれば、ユーザ設定される重み係数に応じて傾き補正値を調節するので、ユーザ好みに応じて連桁の表示形態を調整することができる。
【発明を実施するための最良の形態】
【００２０】
以下、図面を参照して本発明の実施の形態について説明する。
Ａ．構成
図１は、本発明の実施の一形態による楽譜表示装置の構成を示すブロック図である。この図において、操作部１０は、電源スイッチの他、キー入力用のキーボードやマウス等の入力操作子を備え、入力操作に対応したイベントを発生する。このイベントはＣＰＵ１１に取り込まれる。ＣＰＵ１１は、ＲＯＭ１２に記憶される各種制御プログラムを実行し、操作部１０が発生するイベントに対応して装置各部を制御するものであり、その特徴的な処理動作については追って詳述する。
【００２１】
ＲＯＭ１２は、プログラムエリアおよびデータエリアを備える。ＲＯＭ１２のプログラムエリアには、ＣＰＵ１１にロードされる各種制御プログラムが記憶される。各種制御プログラムとは、後述するメインルーチン、楽譜情報生成処理、個別情報生成処理、和音処理、連桁グループ処理、連桁処理、段交叉連桁処理および楽譜表示処理を含む。ＲＯＭ１２のデータエリアには、音符や休符、譜表などを表示するための楽譜表示データやＧＵＩ画面を形成する各種画面データが記憶される。
【００２２】
ＲＡＭ１３は、ワークエリア、曲データエリアおよび音符データエリアを備える。ＲＡＭ１３のワークエリアには、ＣＰＵ１１の処理に用いられる各種レジスタ／フラグデータが一時記憶される。ＲＡＭ１３の曲データエリアには複数曲分の曲データが格納される。曲データは、演奏用の演奏データおよび表示用の楽譜データから構成される。演奏データは、図２に図示するように、演奏パートに対応する複数の演奏トラック［０］〜［Ｎ］から構成される。１つの演奏トラックは、対応する演奏パートを形成する各音を表す演奏用ノートデータ［０］〜［Ｎ］を有する。１つの演奏用ノートデータは、演奏開始時点からの経過時間（絶対時間）で表される発音開始時刻ＩＴｉｍｅ、音長ｌＧａｔｅおよび音高Ｐｉｔｃｈから構成される。
【００２３】
ＲＡＭ１３の音符データエリアには、後述する楽譜情報生成処理によって上述の演奏用ノートデータ［０］〜［Ｎ］から派生され、楽譜表示用の音符データ［０］〜［Ｎ］が格納される。演奏用ノートデータ［０］〜［Ｎ］に対応して生成される音符データ［０］〜［Ｎ］は、図３に図示するように、ポインタｍＥｖｅｎｔ、発音開始時刻ＩＴｉｍｅ、小節番号ｓＭｅａｓ、拍番号ｓＢｅａｔ、座標（ｉｘ，ｉｙ）、ノートタイプｃＮｏｔｅＴｙｐｅ、コードｃＣｈｏｒｄ、連桁パターン始点ｃＲｅｎＫｏｕＳ、連桁パターン終点ｃＲｅｎＫｏｕＥ、タイｃＴｉｅおよび段交叉フラグｃＤａｎＣｒｏｓｓから構成される。
【００２４】
ポインタｍＥｖｅｎｔは、対応する演奏用ノートデータを指定する。発音開始時刻ＩＴｉｍｅは、音符データの発音タイミングを演奏開始時点からの経過時間で表す。小節番号ｓＭｅａｓは、音符データが含まれる小節の番号を表す。拍番号ｓＢｅａｔは、音符データの拍番号を表す。座標（ｉｘ，ｉｙ）は、背景画像となる五線譜上における音符データの表示位置を表す。ノートタイプｃＮｏｔｅＴｙｐｅは、音符の種類を表す。例えば、「１」の場合には全音符、「２」の場合には２分音符、「４」の場合には４分音符を表す。
【００２５】
コードｃＣｈｏｒｄは、「０」の場合に非和音を、「１」の場合に和音開始音を、「２」の場合に和音開始音および和音終了音以外の和音構成音を意味する和音途中音を、「３」の場合に和音終了音を表す。連桁パターン始点ｃＲｅｎｋｏｕＳは、選択された連桁パターン（後述する）の始点を表す。連桁パターン終点ＲｅｎｋｏｕＥは、選択された連桁パターンの終点を表す。フラグｃＴｉｅは、タイ記号を付与するか否かを表す。段交叉フラグＤａｎＣｒｏｓｓは、段交叉の有無を表すフラグである。
【００２６】
図１において、音源１４は、周知の波形メモリ読み出し方式で構成され、ＲＡＭ１３の曲データエリアからＣＰＵ１１が読み出す曲データを、指定テンポに同期して再生して楽音信号を出力する。サウンドシステム１５は、音源１４から出力される楽音信号をＤ／Ａ変換した後に増幅してスピーカＳＰから発音する。表示部１６は、ＣＰＵ１１から供給される表示制御信号に応じて楽譜表示したり、装置の動作状態を表示する。インタフェース（Ｉ／Ｆ）部１７は、ＣＰＵ１１の制御の下に外部ＭＩＤＩ機器とＭＩＤＩ形式の曲データを授受するＭＩＤＩインタフェースを備える。なお、図１には図示していないが、インタフェース（Ｉ／Ｆ）部１７のＭＩＤＩインタフェースに、外部ＭＩＤＩ機器としてキーボード装置が接続される場合、当該キーボード装置の押離鍵操作に対応して生じる曲データは、ＭＩＤＩインタフェースを介してＲＡＭ１３の曲データエリアに格納されるようになっている。
【００２７】
Ｂ．動作
次に、図４〜図１６を参照して上記構成による実施形態の動作について説明する。以下では、先ず最初に全体動作としてメインルーチンの動作を説明した後、続いてメインルーチンからコールされる楽譜情報生成処理および楽譜表示処理の各動作並びに楽譜情報生成処理を構成する個別情報生成処理、和音処理、連桁グループ処理、連桁処理および段交叉連桁処理の各動作を説明する。
【００２８】
（１）メインルーチンの動作
装置電源の投入に応じて、ＣＰＵ１１は図４に図示するメインルーチンを実行してステップＳＡ１に処理を進め、ＲＡＭ１３のワークエリアに設けられる各種レジスタ／フラグ類をリセットしたり、初期値セットする初期化を実行する。この後、ステップＳＡ２に進み、ユーザによるキー操作入力待ち状態となる。そして、ステップＳＡ３〜ＳＡ５では、キー操作入力待ち状態下で「曲選択」、「設定」および「再生」の実行を指示するキー操作入力の有無を判断する。
【００２９】
「曲選択」を指示するキー操作入力、すなわちＲＡＭ１３の曲データエリアに記憶される複数曲の曲データのいずれかを選択すると、ステップＳＡ３の判断結果が「ＹＥＳ」になり、ステップＳＡ６を介して楽譜情報生成処理（後述する）を実行した後、ステップＳＡ９を介して楽譜表示処理（後述する）を実行する。そして、上述のステップＳＡ２に処理を戻してキー操作入力待ちの状態に復帰する。
【００３０】
「設定」を指示するキー操作入力が行われた場合には、ステップＳＡ４の判断結果が「ＹＥＳ」になり、ステップＳＡ７を介して設定処理を実行する。設定処理では、曲選択された曲データを楽譜として表示するための小節情報を設定する。小節情報とは、例えば音部記号や拍子記号、調記号を指定する他、曲選択された曲データの各小節位置および各段位置を指定する情報である。こうした設定処理を実行した後は、ステップＳＡ９を介して楽譜表示処理（後述する）を実行してから上述のステップＳＡ２に処理を戻し、キー操作入力待ちの状態に復帰する。
【００３１】
「再生」を指示するキー操作入力が行われた場合には、ステップＳＡ５の判断結果が「ＹＥＳ」になり、ステップＳＡ８に進む。ステップＳＡ８では、上記ステップＳＡ３にて選択された曲データを再生する再生処理を実行する。この後、ステップＳＡ９を介して楽譜表示処理（後述する）を実行してから上述のステップＳＡ２に処理を戻してキー操作入力待ち状態に復帰する。
【００３２】
（２）楽譜情報生成処理の動作
次に、図５を参照して楽譜情報生成処理の動作を説明する。上述したメインルーチンのステップＳＡ６（図４参照）を介して本処理が実行されると、ＣＰＵ１１はステップＳＢ１に処理を進め、選択された曲情報、すなわち各演奏トラック毎の演奏用ノートデータ［０］〜［Ｎ］について周知のクオンタイズ（時間軸の量子化）を施す。クオンタイズにより、演奏用ノートデータ［０］〜［Ｎ］の発音開始時刻ＩＴｉｍｅのずれが補正される。次いで、ステップＳＢ２では、演奏トラックを指定するトラックポインタＴｒｐｔｒをゼロリセットする。
【００３３】
続いて、ステップＳＢ３〜ＳＢ７では、全ての演奏トラックを指定し終える迄、トラックポインタＴｒｐｔｒを歩進させつつ、その歩進されるトラックポインタＴｒｐｔｒで指定される演奏トラックの演奏用ノートデータについて「個別情報生成処理（ステップＳＢ４）」および「和音処理（ステップＳＢ５）」、「連桁グループ処理（ステップＳＢ６）」を施す。そして、全ての演奏トラックについて処理を終え、ステップＳＢ７において歩進されるトラックポインタＴｒｐｔｒの値がｅｎｄになると、ステップＳＢ３の判断結果が「ＹＥＳ」になり、ステップＳＢ８に進む。
【００３４】
ステップＳＢ８では、演奏トラックを指定するトラックポインタＴｒｐｔｒをゼロリセットする。次いで、ステップＳＢ９〜ＳＢ１１では、全ての演奏トラックを指定し終える迄、トラックポインタＴｒｐｔｒを歩進させつつ、その歩進されるトラックポインタＴｒｐｔｒで指定される演奏トラックの演奏用ノートデータについて「段交叉連桁処理（ステップＳＢ１０）」を施す。そして、全ての演奏トラックについて「段交叉連桁処理（ステップＳＢ１０）」を行い、ステップＳＢ１１で歩進されるトラックポインタＴｒｐｔｒの値がｅｎｄになると、ステップＳＢ９の判断結果が「ＹＥＳ」になり、本処理を完了させる。
【００３５】
（３）個別情報生成処理の動作
次に、図６を参照して個別情報生成処理の動作を説明する。上述した楽譜情報生成処理のステップＳＢ４（図５参照）を介して本処理が実行されると、ＣＰＵ１１は図６に図示するステップＳＣ１に処理を進め、演奏用ノートデータ［０］〜［Ｎ］を指定するノートポインタｎｐｔｒをゼロリセットする。続いて、ステップＳＣ２では、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］が曲終端ｅｎｄに達したかどうかを判断する。曲終端ｅｎｄに達していなければ、判断結果は「ＮＯ」になり、ステップＳＣ３に進む。
【００３６】
ステップＳＣ３では、ノートポインタｎｐｔｒで現在指定される演奏用ノートデータ［ｎｐｔｒ］中の発音開始時刻ＩＴｉｍｅに音長ｌＧａｔｅを加算した時刻と、次の演奏用ノートデータ［ｎｐｔｒ＋１］中の発音開始時刻ＩＴｉｍｅとの時間差から休符が必要か否かを判断する。休符が必要ならば、判断結果は「ＹＥＳ」になり、ステップＳＣ４に進み、上記ステップＳＣ３で得た時間差に対応する休符を決定し、続くステップＳＣ５では、決定した休符を表示する小節内での表示位置を決めた後、ステップＳＣ６に進む。
【００３７】
一方、休符が不必要な場合には、上記ステップＳＣ３の判断結果が「ＮＯ」になり、ステップＳＣ６に進む。ステップＳＣ６では、ノートポインタｎｐｔｒで現在指定される演奏用ノートデータ［ｎｐｔｒ］中の音長ｌＧａｔｅに対応するノートタイプｃＮｏｔｅＴｙｐｅ（音符種類）を決定する。ステップＳＣ７では、その決定したノートタイプｃＮｏｔｅＴｙｐｅ（音符種類）を表示する小節内での表示位置を決定する。そして、ステップＳＣ８では、例えば次の音符とタイで繋ぐ等の、その他の付帯情報を設定する。次いで、ステップＳＣ９では、ノートポインタｎｐｔｒを歩進させた後、上記ステップＳＣ２に処理を戻す。以後、ノートポインタｎｐｔｒが曲終端ｅｎｄに達する迄、上記ステップＳＣ２〜ＳＣ９を繰り返し、ノートポインタｎｐｔｒが曲終端ｅｎｄに達すると、ステップＳＣ２の判断結果が「ＹＥＳ」になり、本処理を終える。
【００３８】
（４）和音処理の動作
次に、図７を参照して和音処理の動作を説明する。上述した楽譜情報生成処理のステップＳＢ５（図５参照）を介して本処理が実行されると、ＣＰＵ１１は図７に図示するステップＳＤ１に処理を進め、演奏用ノートデータ［０］〜［Ｎ］を指定するノートポインタｎｐｔｒをゼロリセットする。続いて、ステップＳＤ２では、和音検出の有無を表すフラグＩｎＣｈｏｒｄに「０」をセットして未検出状態を表す。次いで、ステップＳＤ３では、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］が曲終端ｅｎｄに達したかどうかを判断する。曲終端ｅｎｄに達していなければ、判断結果は「ＮＯ」になり、ステップＳＤ４に進む。
【００３９】
ステップＳＤ４では、ノートポインタｎｐｔｒで現在指定される演奏用ノートデータ［ｎｐｔｒ］中の発音開始時刻ＩＴｉｍｅと、次の演奏用ノートデータ［ｎｐｔｒ＋１］中の発音開始時刻ＩＴｉｍｅとが同一であるか否かを判断する。以下、次の音の発音時刻と同一の場合と、そうでない場合とに分けて動作説明を進める。
【００４０】
＜次の音の発音時刻と同一の場合＞
次の音の発音時刻と同一であると、ステップＳＤ４の判断結果が「ＹＥＳ」になり、ステップＳＤ５に進む。ステップＳＤ５では、上述したフラグＩｎＣｈｏｒｄが「０」、つまり和音未検出状態であるか否かを判断する。和音未検出状態であると、判断結果は「ＹＥＳ」になり、ステップＳＤ７に進み、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］に対応して派生する音符データ［ｎｐｔｒ］中のコードｃＣｈｏｒｄに、和音開始音を表す値「１」をストアする。次いで、ステップＳＤ８では、和音の検出に伴い、フラグＩｎＣｈｏｒｄに「１」をセットする。そして、ステップＳＤ９に進み、ノートポインタｎｐｔｒをインクリメントして歩進させた後、上述のステップＳＤ３に処理を戻す。
【００４１】
一方、すでに和音を検出した状態であると、上記ステップＳＤ５の判断結果は「ＮＯ」になり、ステップＳＤ６に進む。ステップＳＤ６では、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］に対応して派生する音符データ［ｎｐｔｒ］中のコードｃＣｈｏｒｄに、和音途中音を表す値「２」をストアする。そして、ステップＳＤ８に進み、フラグＩｎＣｈｏｒｄに「１」をセットした後、ステップＳＤ９においてノートポインタｎｐｔｒを歩進させてから上述のステップＳＤ３に処理を戻す。
【００４２】
＜次の音の発音時刻と同一でない場合＞
次の音の発音時刻と同一でなければ、前述したステップＳＤ４の判断結果は「ＮＯ」になり、ステップＳＤ１０に進む。ステップＳＤ１０では、フラグＩｎＣｈｏｒｄが「１」、つまり和音検出状態であるか否かを判断する。和音検出状態であると、判断結果が「ＹＥＳ」になり、ステップＳＤ１１に進み、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］に対応して派生する音符データ［ｎｐｔｒ］中のコードｃＣｈｏｒｄに、和音終了音を表す値「３」をストアする。そして、ステップＳＤ１３に進み、フラグＩｎＣｈｏｒｄをゼロリセットし、続くステップＳＤ９において、ノートポインタｎｐｔｒをインクリメントして歩進させてから上述のステップＳＤ３に処理を戻す。
【００４３】
一方、和音未検出状態であれば、上記ステップＳＤ１０の判断結果が「ＮＯ」になり、ステップＳＤ１２に進む。ステップＳＤ１２では、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］に対応して派生する音符データ［ｎｐｔｒ］中のコードｃＣｈｏｒｄに、非和音を表す値「０」をストアする。そして、ステップＳＤ１３に進み、フラグＩｎＣｈｏｒｄをゼロリセットした後、ステップＳＤ９においてノートポインタｎｐｔｒを歩進させてから上述のステップＳＤ３に処理を戻す。以後、ノートポインタｎｐｔｒが曲終端ｅｎｄに達する迄、ステップＳＤ３以降の処理を繰り返し、歩進されたノートポインタｎｐｔｒが曲終端ｅｎｄに達すると、ステップＳＤ３の判断結果が「ＹＥＳ」になり、本処理を終える。
【００４４】
（５）連桁グループ処理の動作
次に、図８〜図９を参照して連桁グループ処理の動作を説明する。上述した楽譜情報生成処理のステップＳＢ６（図５参照）を介して本処理が実行されると、ＣＰＵ１１は図８に図示するステップＳＥ１に処理を進め、演奏用ノートデータ［０］〜［Ｎ］を指定するノートポインタｎｐｔｒをゼロリセットする。続いて、ステップＳＥ２では、ノートポインタｎｐｔｒが曲終端ｅｎｄに達したかどうかを判断する。曲終端ｅｎｄに達していなければ、判断結果は「ＮＯ」になり、ステップＳＥ３に進む。
【００４５】
ステップＳＥ３では、ノートポインタｎｐｔｒ指定される演奏用ノートデータ［ｎｐｔｒ］が連桁の先頭音となる先頭音条件を満たすかどうかを判断する。ここで言う先頭音条件とは、直前の音が旗（符尾）の無い音符長、つまり４分音符長以上であって、今回判定対象とする音が旗のある８分音符長以下であることを指す。こうした先頭音条件を満たさない場合には、判断結果が「ＮＯ」になり、ステップＳＥ１１に進み、ノートポインタｎｐｔｒを歩進させた後、さらに連桁開始音をサーチする為に上述のステップＳＥ２に処理を戻す。
【００４６】
そして、歩進されたノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］が曲終端ｅｎｄに達しておらず、しかも連桁の先頭音となる条件を満たしたとする。そうすると、上記ステップＳＥ２、ＳＥ３の各判断結果はいずれも「ＹＥＳ」になり、ステップＳＥ４に進み、演奏用ノートデータ［ｎｐｔｒ］を連桁バッファに保存する。
【００４７】
次に、ステップＳＥ５では、ノートポインタｎｐｔｒを歩進させ、続くステップＳＥ６では、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］が連桁音条件を満たしているか否かを判断する。連桁音条件とは、直前および直後の音と今回判定対象の音とがいずれも旗のある音符長であることを指す。演奏用ノートデータ［ｎｐｔｒ］が連桁音条件を満たしていなければ、上記ステップＳＥ７の判断結果は「ＮＯ」になり、ステップＳＥ１１に進み、ノートポインタｎｐｔｒを歩進させて上述のステップＳＥ２に処理を戻す。
【００４８】
一方、連桁音条件を満たしていると、上記ステップＳＥ６の判断結果が「ＹＥＳ」になり、ステップＳＥ７に進み、演奏用ノートデータ［ｎｐｔｒ］を連桁バッファに保存する。次いで、ステップＳＥ８では、連桁バッファに格納した演奏用ノートデータ［ｎｐｔｒ］が連桁終端条件を満たすか否かを判断する。連桁終端条件とは、直前の音と今回判定対象の音とがいずれも旗のある音符長であって、直後の音が旗の無い音符長であることを指す。そして、この連桁終端条件を満たさなければ、判断結果は「ＮＯ」になり、上記ステップＳＥ５に処理を戻す。
【００４９】
以後、連桁の終端となる音が検索される迄、ステップＳＥ５〜ＳＥ８を繰り返し、連桁の先頭音に続いて連桁される音を検索し、該当する音（演奏用ノートデータ）を連桁バッファに保存する。そして、連桁の終端となる音が検索されると、ステップＳＥ８の判断結果が「ＹＥＳ」になり、ステップＳＥ９に進む。ステップＳＥ９では、予め設定される各種連桁パターン（連桁形状）の内、連桁バッファに保存された連桁の先頭音から終端音に適合する連桁パターンを選択する。そして、ステップＳＥ１０では、連桁バッファに保存された連桁の先頭音に対応する音符データ中の連桁パターン始点ｃＲｅｎｋｏｕＳ（図３参照）に、選択された連桁パターンを表す値をセットする一方、連桁バッファに保存された連桁の後端音に対応する音符データ中の連桁パターン終点ｃＲｅｎｋｏｕＥ（図３参照）に、選択された連桁パターンを表す値をセットする。
【００５０】
この後、図９に図示するステップＳＥ１２に進み、連桁バッファ最後尾音音高から連桁バッファ先頭音音高を減算した音高差を傾きとしてレジスタｉＳｌｏｐｅにストアする。以後、レジスタｉＳｌｏｐｅを傾きｉＳｌｏｐｅと記す。
次いで、ステップＳＥ１３では、連桁傾き補正値を一時記憶するレジスタｉＳｌｏｐｅＡｄｊ（以後、連桁傾き補正値ｉＳｌｏｐｅＡｄｊと称す）をゼロリセットする。続いて、ステップＳＥ１４では、ポインタｂｐｔｒをゼロリセットする。
【００５１】
そして、ステップＳＥ１５では、ポインタｂｐｔｒで指定される連桁バッファ［ｂｐｔｒ＋１］が空きであるか否かを判断する。空いていなければ、判断結果は「ＮＯ」になり、ステップＳＥ１６に進む。ステップＳＥ１６では、連桁バッファ［ｂｐｔｒ＋１］に格納される演奏用ノートデータの音高から連桁バッファ［ｂｐｔｒ］に格納される１つ前の演奏用ノートデータの音高を減算した音高差が「０」より大きいか否かを判断する。その音高差が「０」より大きければ、判断結果は「ＹＥＳ」になり、ステップＳＥ１７に進み、連桁傾き補正値ｉＳｌｏｐｅＡｄｊをインクリメントした後、ステップＳＥ２０に進み、ポインタｂｐｔｒを歩進させてから上記ステップＳＥ１５に処理を戻す。
【００５２】
一方、上記ステップＳＥ１６において算出した音高差が「０」より小さいと、判断結果は「ＮＯ」になり、ステップＳＥ１８に進む。ステップＳＥ１８では、連桁バッファ［ｂｐｔｒ＋１］に格納される演奏用ノートデータの音高から連桁バッファ［ｂｐｔｒ＋１］に格納される１つ前の演奏用ノートデータの音高を減算した音高差が「０」より小さいか否かを判断する。その音高差が「０」より小さければ、判断結果は「ＹＥＳ」になり、ステップＳＥ１９に進み、連桁傾き補正値ｉＳｌｏｐｅＡｄｊをデクリメントした後、ステップＳＥ２０に進む。
【００５３】
なお、連桁バッファ［ｂｐｔｒ＋１］に格納される演奏用ノートデータの音高と、連桁バッファ［ｂｐｔｒ＋１］に格納される１つ前の演奏用ノートデータの音高とが同じ音高であると、上記ステップＳＥ１６、ＳＥ１８の各判断結果は「ＮＯ」になり、ステップＳＥ２０に進み、ポインタｂｐｔｒを歩進させてからステップＳＥ１５に処理を戻す。
【００５４】
そして、歩進されたポインタｂｐｔｒで指定される連桁バッファ［ｂｐｔｒ＋１］が空きになると、上記ステップＳＥ１５の判断結果が「ＮＯ」になり、ステップＳＥ２１に進む。ステップＳＥ２１では、上記ステップＳＥ１２において算出された傾きｉＳｌｏｐｅに連桁傾き補正値ｉＳｌｏｐｅＡｄｊを乗算し、その乗算値が「０」以下であるかどうかを判断する。乗算値が「０」以下でなければ、つまり、ｉＳｌｏｐｅとｉＳｌｏｐｅＡｄｊが同じ向きに傾いていれば、ここでの判断結果は「ＮＯ」になり、図８に図示するステップＳＥ１１に進む。
【００５５】
これに対し、乗算値が「０」以下である場合、つまり、傾きｉＳｌｏｐｅと連桁傾き補正値ｉＳｌｏｐｅＡｄｊが逆の向きに傾いていれば、判断結果が「ＹＥＳ」になり、ステップＳＥ２２に進む。ステップＳＥ２２では、ユーザ設定される重み係数Ａを連桁傾き補正値ｉＳｌｏｐｅＡｄｊに乗算した値を、上記ステップＳＥ１２において算出された傾きｉＳｌｏｐｅに加算して補正された傾きｉＳｌｏｐｅを「連桁傾き」として本処理を終える。これにより、簡単な処理で自然な傾きの連桁にすることが可能になる。なお、こうして算出される「連桁傾き」は、連桁開始音および連桁終了音の属性として、これら各音に対応する音符データに登録されるようになっている。
【００５６】
（６）楽譜表示処理の動作
次に、図１０〜図１１を参照して楽譜表示処理の動作を説明する。前述したメインルーチンのステップＳＡ９（図４参照）を介して楽譜表示処理が実行されると、ＣＰＵ１１は図１０に図示するステップＳＧ１に進み、背景画像（五線譜）を表示部１６の表示面に描画する。続いて、ステップＳＧ２では、小節数を計数する小節カウンタを初期化する。次いで、ステップＳＧ３では、小節カウンタの値が終端ｅｎｄに達したか否か、つまり曲を形成する全ての小節について楽譜表示し終えたかどうかを判断する。全ての小節について楽譜表示し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＧ４に進む。ステップＳＧ４では、五線譜上で小節カウンタの値で指定される小節情報に基づき、例えば五線譜上に音部記号や調記号、小節線などを描画する。
【００５７】
そして、ステップＳＧ５では、音符データを指定するノートポインタｎｐｔｒをゼロリセットする。続いて、ステップＳＧ６では、ノートポインタｎｐｔｒが１小節分の音を指定し終えた否かを判断する。１小節分の音を指定し終えていなければ、判断結果は「ＮＯ」になり、ステップＳＧ７に進み、ノートポインタｎｐｔｒが現在指定する音符データの表示位置を計算する。次いで、ステップＳＧ８では、上記ステップＳＧ７にて算出した表示位置に、ノートポインタｎｐｔｒが現在指定する音符データを描画する。この後、ステップＳＧ９に進み、ノートポインタｎｐｔｒを歩進させてから上記ステップＳＧ６に処理を戻す。
【００５８】
こうして、小節カウンタの値で指定される小節を形成する各音の表示位置を順次算出し、それら表示位置に各音符を描画し終えると、上記ステップＳＧ６の判断結果が「ＹＥＳ」になり、ステップＳＧ１０に進み、小節カウンタを歩進させた後、上述のステップＳＧ３に処理を戻す。以後、各小節毎に音符の表示位置を算出し、算出した表示位置に対応する音符を描画して行き、全ての小節について音符を描画し終えると、上記ステップＳＧ３の判断結果が「ＹＥＳ」になり、本処理を終える。
【００５９】
なお、音符描画に際しては、対応する音符データが備える属性を参照する。音符データが備える属性とは、前述したノートタイプｃＮｏｔｅＴｙｐｅ、連桁パターン始点ｃＲｅｎｋｏｕＳおよび連桁パターン終点ＲｅｎｋｏｕＥの他、上述した連桁グループ処理（図８〜図９参照）において算出される連桁傾きを含む。
【００６０】
図１１は、楽譜表示処理によって画面表示される楽譜の一例を示す図である。図１１（ａ）は、前述した連桁グループ処理による連桁傾きの補正を行わない場合、つまり重み係数Ａ＝０とした場合の譜例である。この譜例では、連桁傾きの補正が行われず、従来と同様に連桁開始音と連桁終了音との音高差だけで連桁の傾きを決めるため、上段小節後半部の連桁が水平となりその間の音程が変化していないかのような印象を与える。
【００６１】
これに対し、同図（ｂ）は、前述した連桁グループ処理による連桁傾きの補正を重み係数Ａ＝３として行った譜例である。この譜例では、前述した上段小節後半部の連桁が後下がりとなり、音程変化を直感的にとらえることができる。さらに同図（ｃ）は前述した連桁グループ処理による連桁傾きの補正を重み係数Ａ＝６として行った譜例である。この譜例では、上段小節前半部の連桁が前下がりに変化している。これは連桁された音の間で音程が上がる方向で変化する回数と下がる方向で変化する回数のどちらが支配的であったかを示す変数を、連桁開始音と連桁終了音との音高差よりも強く反映した結果である。この上段小節前半部のように連行された音の音程関係に相反する要素がある場合には、どちらをより強く反映させるべきかはユーザの嗜好によるところがあるが、これは重み係数Ａの選択をユーザにゆだねることで解決できる。
【００６２】
（７）段交叉連桁処理の動作
次に、図１２を参照して段交叉連桁処理の動作を説明する。前述した楽譜情報生成処理のステップＳＢ１０（図５参照）を介して実行される段交叉連桁処理は、図１２に図示するように、ステップＳＨ１を介して実行される交叉判定処理と、ステップＳＨ２を介して実行される交叉連桁処理とから構成される。以下、交叉判定処理および交叉連桁処理の各動作について述べる。
【００６３】
（８）交叉判定処理の動作
図１２のステップＳＨ１を介して交叉判定処理が実行されると、ＣＰＵ１１は図１３に図示するステップＳＪ１に処理を進め、演奏用ノートデータ［０］〜［Ｎ］を指定するノートポインタｎｐｔｒをゼロリセットする。続いて、ステップＳＪ２では、ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］が曲終端ｅｎｄに達したかどうかを判断する。曲終端ｅｎｄに達していなければ、判断結果は「ＮＯ」になり、ステップＳＪ３に進む。ステップＳＪ３では、対象音（ノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］）が右手トラックであるか否かを判断する。
【００６４】
右手トラックならば、判断結果は「ＹＥＳ」になり、ステップＳＪ４に進み、対象音のピッチが所定値１より低いかどうかを判断する。所定値１より低くなければ、判断結果は「ＮＯ」になり、ステップＳＪ９にてノートポインタｎｐｔｒを歩進させた後、上述のステップＳＪ２に処理を戻す。
【００６５】
一方、対象音のピッチが所定値１より低い場合には、上記ステップＳＪ４の判断結果が「ＹＥＳ」になり、ステップＳＪ５に進み、下段での音符表示位置を計算する。この後、ステップＳＪ８に進み、対象音に対応する音符データ（該当音）の段交叉フラグＤａｎＣｒｏｓｓに「１」をセットして段交叉する旨を表した後、ステップＳＪ９においてノートポインタｎｐｔｒを歩進させてから上記ステップＳＪ２に処理を戻す。
【００６６】
これに対し、対象音が左手トラックであると、上述したステップＳＪ３の判断結果が「ＮＯ」になり、ステップＳＪ６に進む。ステップＳＪ６では、対象音のピッチが所定値２より高いかどうかを判断する。所定値２より高くなければ、判断結果は「ＮＯ」になり、ステップＳＪ９にてノートポインタｎｐｔｒを歩進させた後、上述のステップＳＪ２に処理を戻す。
【００６７】
一方、対象音のピッチが所定値２より高い場合には、上記ステップＳＪ６の判断結果が「ＹＥＳ」になり、ステップＳＪ７に進み、上段での音符表示位置を計算する。この後、ステップＳＪ８に進み、対象音に対応する音符データ（該当音）の段交叉フラグＤａｎＣｒｏｓｓに「１」をセットして段交叉する旨を表した後、ステップＳＪ９においてノートポインタｎｐｔｒを歩進させてから上記ステップＳＪ２に処理を戻す。
【００６８】
以後、ノートポインタｎｐｔｒが曲終端ｅｎｄに達する迄、ノートポインタｎｐｔｒを歩進させながら、その歩進されるノートポインタｎｐｔｒで指定される演奏用ノートデータ［ｎｐｔｒ］中の音高Ｐｉｔｃｈが所定範囲を超えるかどうかで段交叉の判定を行い、段交叉する音については対応する音符データの段交叉フラグＤａｎＣｒｏｓｓに「１」をセットする。そして、ノートポインタｎｐｔｒが曲終端ｅｎｄに達すると、ステップＳＪ２の判断結果が「ＹＥＳ」になり、本処理を終える。
【００６９】
（９）交叉連桁処理の動作
図１２のステップＳＨ２を介して交叉連桁処理が実行されると、ＣＰＵ１１は図１４に図示するステップＳＫ１に処理を進め、小節ポインタを初期化する。次いで、ステップＳＨ２では、小節ポインタが終端ｅｎｄに達したか否かを判断する。小節ポインタが終端ｅｎｄに達していなければ、判断結果は「ＮＯ」になり、ステップＳＫ３に進み、右手トラックであるか否かを判断する。右手トラックならば、判断結果は「ＹＥＳ」になり、ステップＳＫ４に進む。ステップＳＫ４では、小節ポインタで指定される小節における段交叉の有無を判断する。段交叉の有無は小節情報に含まれる段交叉フラグの値で判断する。段交叉しなければ、判断結果は「ＮＯ」になり、ステップＳＫ８に進み、小節ポインタをインクリメントして上記ステップＳＫ２に処理を戻す。
【００７０】
一方、小節ポインタで指定される小節で段交叉が有る場合には、上記ステップＳＫ４の判断結果は「ＹＥＳ」になり、ステップＳＫ５に進む。ステップＳＫ５では、段交叉する小節に含まれ、段交叉フラグＤａｎＣｒｏｓｓが「１」の音符データに対応する音符の棒の向きを全て上向きに変更する。この後、ステップＳＫ８に進み、小節ポインタをインクリメントして上記ステップＳＫ２に処理を戻す。
【００７１】
一方、左手トラックであると、上記ステップＳＫ３の判断結果が「ＮＯ」になり、ステップＳＫ６に進む。ステップＳＫ６では、小節ポインタで指定される小節における段交叉の有無を判断する。段交叉の有無は小節情報に含まれる段交叉フラグの値で判断する。段交叉しなければ、判断結果は「ＮＯ」になり、ステップＳＫ８に進み、小節ポインタをインクリメントして上記ステップＳＫ２に処理を戻すが、段交叉が有ると、上記ステップＳＫ６の判断結果は「ＹＥＳ」になり、ステップＳＫ７に進む。ステップＳＫ７では、段交叉する小節に含まれ、段交叉フラグＤａｎＣｒｏｓｓが「１」の音符データに対応する音符の棒の向きを全て下向きに変更する。この後、ステップＳＫ８に進み、小節ポインタをインクリメントして上記ステップＳＫ２に処理を戻す。
【００７２】
以後、小節ポインタが終端ｅｎｄに達する迄、上述したステップＳＫ２〜ＳＫ８を繰り返し、小節ポインタが指定する小節において段交叉が有る場合には、段交叉フラグＤａｎＣｒｏｓｓが「１」の音符データに対応する音符の棒の向きを反対向きに変更する。
【００７３】
これにより、例えば図１５（ａ）に図示する譜例において、上段第１小節の第１および第２音が段交叉の対象音となると、同図（ｂ）に図示するように、上段第１小節の第１および第２音の音高に対応してこれらの音符位置を下段側にシフトさせる一方、下段側の対応する音符の向きを下向きに変更する。この結果、自然で見易い段交叉連桁した楽譜表示となる。
【００７４】
次に、図１６を参照して、和音が含まれる場合の連桁の傾きについて述べる。演奏者にルートの動きを意識させたい場合には、図１６（ａ）に図示するように、和音開始音に従った形態とし、上声部の変化を意識させたい場合には、同図（ｂ）に図示するように、和音終了音に従った形態にすると有効である。さらに、全体的な音域の変化を意識させたい場合には、図１６（ａ）に図示した連桁の傾斜と、図１６（ｂ）に図示した連桁の傾斜との平均の傾きによる連桁とすることが望ましい。
【００７５】
なお、本実施形態においては演奏データをもとに楽譜データを一から生成するようにしたが、すでに生成された楽譜データを読み込んでこれに対し上記の連桁グループ処理、段交叉連桁処理を施してより見やすい楽譜を作成することもできる。
【図面の簡単な説明】
【００７６】
【図１】本発明による実施の一形態の構成を示すブロック図である。
【図２】曲データの構成を示す図である。
【図３】音符データの構成を示す図である。
【図４】メインルーチンの動作を示すフローチャートである。
【図５】楽譜情報生成処理の動作を示すフローチャートである。
【図６】個別情報生成処理の動作を示すフローチャートである。
【図７】和音処理の動作を示すフローチャートである。
【図８】連桁グループ処理の動作を示すフローチャートである。
【図９】連桁グループ処理の動作を示すフローチャートである。
【図１０】楽譜表示処理の動作を示すフローチャートである。
【図１１】楽譜表示処理によって画面表示される楽譜の一例を示す図である。
【図１２】段交叉連桁処理の動作を示すフローチャートである。
【図１３】交叉判定処理の動作を示すフローチャートである。
【図１４】交叉連桁処理の動作を示すフローチャートである。
【図１５】段交叉連桁の一例を示す図である。
【図１６】和音が含まれる場合の連桁の傾き例を示す図である。
【符号の説明】
【００７７】
１０  操作部
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  音源
１５  サウンドシステム
１６  表示部
１７  インタフェース部
【図１】
0004547719.tif 000002
【図２】
0004547719.tif 000003
【図３】
0004547719.tif 000004
【図４】
0004547719.tif 000005
【図５】
0004547719.tif 000006
【図６】
0004547719.tif 000007
【図７】
0004547719.tif 000008
【図８】
0004547719.tif 000009
【図９】
0004547719.tif 000010
【図１０】
0004547719.tif 000011
【図１１】
0004547719.tif 000012
【図１２】
0004547719.tif 000013
【図１３】
0004547719.tif 000014
【図１４】
0004547719.tif 000015
【図１５】
0004547719.tif 000016
【図１６】
0004547719.tif 000017