JPH0981368A - シーケンスデータのソート処理装置/方法 - Google Patents
シーケンスデータのソート処理装置/方法Info
- Publication number
- JPH0981368A JPH0981368A JP7233590A JP23359095A JPH0981368A JP H0981368 A JPH0981368 A JP H0981368A JP 7233590 A JP7233590 A JP 7233590A JP 23359095 A JP23359095 A JP 23359095A JP H0981368 A JPH0981368 A JP H0981368A
- Authority
- JP
- Japan
- Prior art keywords
- event data
- fragment
- processing
- event
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Landscapes
- Electrophonic Musical Instruments (AREA)
Abstract
(57)【要約】
【課題】 電子楽器の自動演奏装置のメモリに格納され
た楽曲データなどシーケンスデータのソート処理技術に
関し、複数のフラグメント内のシーケンスデータに対す
る適切かつ高速なソート処理を実現することにある。 【解決手段】 1101で時間ソート処理終了フラグの
値が0にセットされる。そして、1102で時間ソート
処理終了フラグの値が0であると判定される間、110
3〜1105の一連の処理が繰り返し実行される。11
03では、時間ソート処理終了フラグの値が1にセット
される。1104では、複数のフラグメントのそれぞれ
について、各フラグメントに属するシーケンスデータに
対して、各フラグメント内で閉じたソート処理が実行さ
れる。1105では、複数のフラグメント中の隣接する
フラグメント同士で、それらの接続部のソート対象パラ
メータの大小関係が逆転状態にある区間に位置するシー
ケンスデータ群に対して、ソート処理が実行される。1
104又は1105で実際にシーケンスデータの入替え
が発生した場合は時間ソート処理終了フラグの値が0に
セットされる。
た楽曲データなどシーケンスデータのソート処理技術に
関し、複数のフラグメント内のシーケンスデータに対す
る適切かつ高速なソート処理を実現することにある。 【解決手段】 1101で時間ソート処理終了フラグの
値が0にセットされる。そして、1102で時間ソート
処理終了フラグの値が0であると判定される間、110
3〜1105の一連の処理が繰り返し実行される。11
03では、時間ソート処理終了フラグの値が1にセット
される。1104では、複数のフラグメントのそれぞれ
について、各フラグメントに属するシーケンスデータに
対して、各フラグメント内で閉じたソート処理が実行さ
れる。1105では、複数のフラグメント中の隣接する
フラグメント同士で、それらの接続部のソート対象パラ
メータの大小関係が逆転状態にある区間に位置するシー
ケンスデータ群に対して、ソート処理が実行される。1
104又は1105で実際にシーケンスデータの入替え
が発生した場合は時間ソート処理終了フラグの値が0に
セットされる。
Description
【0001】
【発明の属する技術分野】本発明は、電子楽器の自動演
奏装置のメモリに格納された楽曲データなどのシーケン
スデータのソート処理技術に関する。
奏装置のメモリに格納された楽曲データなどのシーケン
スデータのソート処理技術に関する。
【0002】
【従来の技術】シーケンスデータのソート処理は、様々
な分野で使用されており、そのアルゴリズムも種々のも
のが提案されている。
な分野で使用されており、そのアルゴリズムも種々のも
のが提案されている。
【0003】ここで、シーケンスデータが、複数の連続
するシーケンスデータ群を単位として管理される場合が
ある(以下、この単位をフラグメントと呼ぶ)。例え
ば、電子楽器などのための自動演奏装置において、自動
演奏を制御する楽曲データが、メモリに、楽曲データ
が、時間的に連続する楽曲データ群であるフラグメント
を単位として記憶され、1つのフラグメントとそれと離
れたメモリ内のアドレスに記憶されている他のフラグメ
ントとが、ジャンプ制御用のデータで連結されることに
より、複数のフラグメント間で楽曲データの時間的な連
続性が保たれるように、楽曲データが記憶される形態が
考えられる。このような形態において、新たな楽曲デー
タ群のフラグメントがメモリに追加され、そのフラグメ
ントがメモリ内の他の既存のフラグメントに連結される
ような場合には、新たなフラグメント内の楽曲データ群
と既存のフラグメント内の楽曲データ群との間で時間的
な連続性が保たれるように、それらの楽曲データに対し
てソート処理を実行する必要が生じる。
するシーケンスデータ群を単位として管理される場合が
ある(以下、この単位をフラグメントと呼ぶ)。例え
ば、電子楽器などのための自動演奏装置において、自動
演奏を制御する楽曲データが、メモリに、楽曲データ
が、時間的に連続する楽曲データ群であるフラグメント
を単位として記憶され、1つのフラグメントとそれと離
れたメモリ内のアドレスに記憶されている他のフラグメ
ントとが、ジャンプ制御用のデータで連結されることに
より、複数のフラグメント間で楽曲データの時間的な連
続性が保たれるように、楽曲データが記憶される形態が
考えられる。このような形態において、新たな楽曲デー
タ群のフラグメントがメモリに追加され、そのフラグメ
ントがメモリ内の他の既存のフラグメントに連結される
ような場合には、新たなフラグメント内の楽曲データ群
と既存のフラグメント内の楽曲データ群との間で時間的
な連続性が保たれるように、それらの楽曲データに対し
てソート処理を実行する必要が生じる。
【0004】このような従来の要請に対して、本出願人
は、特願平6−339364号の特許出願において、
複数のフラグメントに属するシーケンスデータ全体に対
するソート処理を、フラグメント内ソート処理とフラグ
メント間ソート処理の繰返しという処理構造に単純化さ
せたソート処理技術を開示した。
は、特願平6−339364号の特許出願において、
複数のフラグメントに属するシーケンスデータ全体に対
するソート処理を、フラグメント内ソート処理とフラグ
メント間ソート処理の繰返しという処理構造に単純化さ
せたソート処理技術を開示した。
【0005】フラグメント内ソート処理は、フラグメン
ト内の連続するデータに対する通常のソート処理であ
る。次に、これに続いて実行されるフラグメント間ソー
ト処理は、所定の複数のフラグメント中の隣接するフラ
グメント同士で、それらの接続部に位置するシーケンス
データを交換する処理である。
ト内の連続するデータに対する通常のソート処理であ
る。次に、これに続いて実行されるフラグメント間ソー
ト処理は、所定の複数のフラグメント中の隣接するフラ
グメント同士で、それらの接続部に位置するシーケンス
データを交換する処理である。
【0006】
【発明が解決しようとする課題】しかし、上述の従来技
術では、フラグメント間ソート処理は、隣接するフラグ
メント同士で、それらの接続部に位置するそれぞれ1個
ずつのシーケンスデータのみが比較され交換される。こ
のような処理の結果、フラグメントのサイズが大きくな
ると、ソート処理に必要な時間が極端に大きくなる場合
が発生し得るという問題点を有している。
術では、フラグメント間ソート処理は、隣接するフラグ
メント同士で、それらの接続部に位置するそれぞれ1個
ずつのシーケンスデータのみが比較され交換される。こ
のような処理の結果、フラグメントのサイズが大きくな
ると、ソート処理に必要な時間が極端に大きくなる場合
が発生し得るという問題点を有している。
【0007】本発明の課題は、複数のフラグメント内の
シーケンスデータに対する適切かつ高速なソート処理を
実現することにある。
シーケンスデータに対する適切かつ高速なソート処理を
実現することにある。
【0008】
【課題を解決するための手段】本発明は、複数の連続す
るシーケンスデータ群(楽曲データ群)から構成される
フラグメントを単位としてシーケンスデータを記憶する
メモリ(配列SNG_SONGを記憶するRAM30
5)を有し、そのメモリに記憶される所定の複数のフラ
グメントに属するシーケンスデータ全体に対し、シーケ
ンスデータが有する所定の属性に関してソート処理を実
行するソート処理装置を前提とする。
るシーケンスデータ群(楽曲データ群)から構成される
フラグメントを単位としてシーケンスデータを記憶する
メモリ(配列SNG_SONGを記憶するRAM30
5)を有し、そのメモリに記憶される所定の複数のフラ
グメントに属するシーケンスデータ全体に対し、シーケ
ンスデータが有する所定の属性に関してソート処理を実
行するソート処理装置を前提とする。
【0009】そして、まず、所定の複数のフラグメント
のそれぞれについて、その各フラグメントに属するシー
ケンスデータに対して、所定の属性に関してその各フラ
グメント内で閉じたソート処理を実行するフラグメント
内ソート処理手段(フラグメント内ソート処理を実行す
るCPU303)を有する。
のそれぞれについて、その各フラグメントに属するシー
ケンスデータに対して、所定の属性に関してその各フラ
グメント内で閉じたソート処理を実行するフラグメント
内ソート処理手段(フラグメント内ソート処理を実行す
るCPU303)を有する。
【0010】次に、そのフラグメント内ソート処理手段
による処理に続いて、所定の複数のフラグメント中の隣
接するフラグメント同士で、それらの接続部の前記所定
の属性の大小関係が逆転状態にある区間に位置するシー
ケンスデータ群に対して、所定の属性に関してソート処
理を実行するフラグメント間ソート処理手段(フラグメ
ント間ソート処理を実行するCPU303)を有する。
による処理に続いて、所定の複数のフラグメント中の隣
接するフラグメント同士で、それらの接続部の前記所定
の属性の大小関係が逆転状態にある区間に位置するシー
ケンスデータ群に対して、所定の属性に関してソート処
理を実行するフラグメント間ソート処理手段(フラグメ
ント間ソート処理を実行するCPU303)を有する。
【0011】そして、フラグメント内ソート処理手段に
よる処理とフラグメント間ソート処理手段による処理
を、ソート処理の対象となったシーケンスデータの入替
えが発生しなくなるまで繰り返させる制御手段(CPU
303)を有する。
よる処理とフラグメント間ソート処理手段による処理
を、ソート処理の対象となったシーケンスデータの入替
えが発生しなくなるまで繰り返させる制御手段(CPU
303)を有する。
【0012】なお、本発明は、上述のシーケンスデータ
のソート処理装置が有する機能と同じ機能を実現するシ
ーケンスデータのソート処理方法として実現することも
できる。
のソート処理装置が有する機能と同じ機能を実現するシ
ーケンスデータのソート処理方法として実現することも
できる。
【0013】上述した本発明の構成では、複数のフラグ
メントに属するシーケンスデータ全体に対するソート処
理が、フラグメント内ソート処理とフラグメント間ソー
ト処理の繰返しという処理構造に単純化されるため、フ
ラグメント内ソート処理に対して、従来からある通常の
シーケンスデータに対する高速ソート処理アルゴリズム
を適用することができる。
メントに属するシーケンスデータ全体に対するソート処
理が、フラグメント内ソート処理とフラグメント間ソー
ト処理の繰返しという処理構造に単純化されるため、フ
ラグメント内ソート処理に対して、従来からある通常の
シーケンスデータに対する高速ソート処理アルゴリズム
を適用することができる。
【0014】また、フラグメント間ソート処理におい
て、ソート対象の所定の属性の大小関係が逆転している
区間について一括して交換が行われるため、複数のフラ
グメントにまたがるソート処理を高速化することができ
る。
て、ソート対象の所定の属性の大小関係が逆転している
区間について一括して交換が行われるため、複数のフラ
グメントにまたがるソート処理を高速化することができ
る。
【0015】
【発明の実施の形態】以下、図面を参照しながら本発明
の実施の形態につき詳細に説明する。なお、本実施の形
態において本発明に最も関連する部分は、図17の動作
フローチャートのステップ1702の処理である。本実施の形態の構成 図1は、本発明の実施の形態に係るシーケンサ装置の外
観図である。
の実施の形態につき詳細に説明する。なお、本実施の形
態において本発明に最も関連する部分は、図17の動作
フローチャートのステップ1702の処理である。本実施の形態の構成 図1は、本発明の実施の形態に係るシーケンサ装置の外
観図である。
【0016】このシーケンサ装置101は、家庭用テレ
ビ102に接続される。シーケンサ装置101内に記憶
される自動演奏用のシーケンスデータは、家庭用テレビ
102に表示することが可能である。
ビ102に接続される。シーケンサ装置101内に記憶
される自動演奏用のシーケンスデータは、家庭用テレビ
102に表示することが可能である。
【0017】家庭用テレビ102上での表示内容の示す
意味は図に示されるとおりである。“PRGCHG”は
プログラムチェンジイベントデータを、“NOTE”は
ノートイベントを、それぞれ示す。
意味は図に示されるとおりである。“PRGCHG”は
プログラムチェンジイベントデータを、“NOTE”は
ノートイベントを、それぞれ示す。
【0018】本実施の形態が採用する一例として、ユー
ザは、カーソルキー105によって家庭用テレビ102
の場面上でカーソルを任意に移動させながら、コピース
イッチ103及び取消スイッチ104によってコピー範
囲の指定及び取消しを行うことができる。また、変更ス
イッチ106によって、カーソルキー105によって選
択されているコマンド又はパラメータの内容を変更する
ことができる。変更スイッチ106の機能については、
本実施の形態の説明の最後で説明する。
ザは、カーソルキー105によって家庭用テレビ102
の場面上でカーソルを任意に移動させながら、コピース
イッチ103及び取消スイッチ104によってコピー範
囲の指定及び取消しを行うことができる。また、変更ス
イッチ106によって、カーソルキー105によって選
択されているコマンド又はパラメータの内容を変更する
ことができる。変更スイッチ106の機能については、
本実施の形態の説明の最後で説明する。
【0019】図2は、本実施の形態におけるシーケンス
データのコピー処理の外観を示す図である。まず、カー
ソルキー105の操作により家庭用テレビ102の表示
画面上でカーソルを移動させることができ、任意のカー
ソル位置でコピースイッチ103を押すことによって、
コピー処理範囲の開始位置を指定できる(図2(a) )。
データのコピー処理の外観を示す図である。まず、カー
ソルキー105の操作により家庭用テレビ102の表示
画面上でカーソルを移動させることができ、任意のカー
ソル位置でコピースイッチ103を押すことによって、
コピー処理範囲の開始位置を指定できる(図2(a) )。
【0020】引き続いて、カーソルキー105の操作に
より表示画面上でカーソルを更に移動させることがで
き、他の任意のカーソル位置でコピースイッチ103を
再び押すことにより、コピー処理範囲の終了位置を指定
できる(図2(b) )。
より表示画面上でカーソルを更に移動させることがで
き、他の任意のカーソル位置でコピースイッチ103を
再び押すことにより、コピー処理範囲の終了位置を指定
できる(図2(b) )。
【0021】続いて、カーソルキー105の操作により
表示画面上でカーソルを更に移動させることができ、更
に他の任意のカーソル位置でコピースイッチ103を再
び押すことにより、コピー先を指定することができる
(図2(c) )。
表示画面上でカーソルを更に移動させることができ、更
に他の任意のカーソル位置でコピースイッチ103を再
び押すことにより、コピー先を指定することができる
(図2(c) )。
【0022】最後に、コピースイッチ103を再び押す
ことにより、コピー処理を指示することができる。この
結果、現在のカーソル位置の次(手前でもよい)の位置
に指定された範囲のシーケンスデータがコピーされる
(図2(d) )。
ことにより、コピー処理を指示することができる。この
結果、現在のカーソル位置の次(手前でもよい)の位置
に指定された範囲のシーケンスデータがコピーされる
(図2(d) )。
【0023】上述の一連の処理過程の途中で取消スイッ
チ104が押されると、コピー処理が取り消される。図
3は、本発明の実施の形態の全体構成図である。この実
施の形態は、シーケンサ装置として実現されている。
チ104が押されると、コピー処理が取り消される。図
3は、本発明の実施の形態の全体構成図である。この実
施の形態は、シーケンサ装置として実現されている。
【0024】CPU303は、ROM304に記憶され
ている制御プログラムに基づいて、システム全体の動作
を制御する。そして、楽曲データの記録時には、特には
図示しない電子楽器から出力された演奏情報が、例えば
MIDI(Musical Instrument Digital Interface)規格に基
づいて転送され、その演奏情報が演奏情報入力部301
によって受信される。CPU303は、この演奏情報を
取り込み、その演奏情報を示すイベントデータを、必要
に応じてその入力タイミングと共に、RAM305の楽
曲データ記録領域上の記録対象トラックに順次記録す
る。記録対象トラックは、ユーザが予めシステム操作子
群307を操作して指定する。
ている制御プログラムに基づいて、システム全体の動作
を制御する。そして、楽曲データの記録時には、特には
図示しない電子楽器から出力された演奏情報が、例えば
MIDI(Musical Instrument Digital Interface)規格に基
づいて転送され、その演奏情報が演奏情報入力部301
によって受信される。CPU303は、この演奏情報を
取り込み、その演奏情報を示すイベントデータを、必要
に応じてその入力タイミングと共に、RAM305の楽
曲データ記録領域上の記録対象トラックに順次記録す
る。記録対象トラックは、ユーザが予めシステム操作子
群307を操作して指定する。
【0025】楽曲データの編集時には、CPU303
は、ユーザがシステム操作子群307において指定した
内容に従って、RAM305の楽曲データ記録領域上の
所望のトラックに記録されている楽曲データを読み出し
て、例えば5線譜の形式で表示部302に表示する。ユ
ーザは、システム操作子群307を用いて、表示部30
2に表示されている楽曲データに対して、楽曲データの
挿入、削除、移動、複写などを行うことができる。この
編集結果は、RAM305の楽曲データ記録領域の楽曲
データの内容に反映される。このシステム操作子群30
7には、前述したコピースイッチ103、取消スイッチ
104、及び変更スイッチ106が含まれる。
は、ユーザがシステム操作子群307において指定した
内容に従って、RAM305の楽曲データ記録領域上の
所望のトラックに記録されている楽曲データを読み出し
て、例えば5線譜の形式で表示部302に表示する。ユ
ーザは、システム操作子群307を用いて、表示部30
2に表示されている楽曲データに対して、楽曲データの
挿入、削除、移動、複写などを行うことができる。この
編集結果は、RAM305の楽曲データ記録領域の楽曲
データの内容に反映される。このシステム操作子群30
7には、前述したコピースイッチ103、取消スイッチ
104、及び変更スイッチ106が含まれる。
【0026】楽曲データの再生時には、RAM305の
楽曲データ記録領域上の再生対象トラックから、イベン
トデータが順次読み出され、各イベントデータに対応す
る演奏情報が、例えばMIDI規格に基づいて演奏情報出力
部306から外部の電子楽器又は音源装置に出力され、
これらの装置によってその演奏情報に対応する自動演奏
が行われる。本実施の形態のデータフォーマット 図4〜図7は、RAM305に記憶される楽曲データの
データフォーマットを示す図である。
楽曲データ記録領域上の再生対象トラックから、イベン
トデータが順次読み出され、各イベントデータに対応す
る演奏情報が、例えばMIDI規格に基づいて演奏情報出力
部306から外部の電子楽器又は音源装置に出力され、
これらの装置によってその演奏情報に対応する自動演奏
が行われる。本実施の形態のデータフォーマット 図4〜図7は、RAM305に記憶される楽曲データの
データフォーマットを示す図である。
【0027】本実施の形態では、楽曲データは、各小節
のイベントデータと、連続する128小節分のイベント
データを単位とする小節ブロックと、最大で8個の小節
ブロックを含むトラック、16トラックを単位とする楽
曲という各単位を用いて、階層的に管理される点が特徴
である。
のイベントデータと、連続する128小節分のイベント
データを単位とする小節ブロックと、最大で8個の小節
ブロックを含むトラック、16トラックを単位とする楽
曲という各単位を用いて、階層的に管理される点が特徴
である。
【0028】まず、図4に示されるトラック使用状況デ
ータSNG_TRK_USEは、16ビットのデータで
あって、各楽曲毎に設定される。各データには、トラッ
ク0〜15の各トラックが楽曲の自動演奏において使用
されるか否かが、“1”又は“0”のフラグによって設
定される。このデータの、最下位ビットがトラック0に
対応し、最上位ビットがトラック15に対応する。
ータSNG_TRK_USEは、16ビットのデータで
あって、各楽曲毎に設定される。各データには、トラッ
ク0〜15の各トラックが楽曲の自動演奏において使用
されるか否かが、“1”又は“0”のフラグによって設
定される。このデータの、最下位ビットがトラック0に
対応し、最上位ビットがトラック15に対応する。
【0029】図5(a) に示される配列SNG_BAR_
TBLには、楽曲毎及び各楽曲内のトラック毎に、第0
小節〜第1023小節の1024小節を128小節ずつ
分割して得られる8つの小節ブロックのそれぞれに対応
する、図5(b) に示される配列SNG_BAR_PTR
内の128個ずつの配列データ群の各先頭要素情報が記
憶される。配列SNG_BAR_PTRに定義可能な小
節ブロックの数は、例えば最大で32である。その場
合、配列SNG_BAR_TBLには、小節ブロック先
頭要素情報として、0x00〜0x1f(10進数の0
〜31に対応)の何れかの値が記憶される。この小節ブ
ロック先頭要素情報の値を128倍して得られる値が、
その小節ブロックに対応する配列SNG_BAR_PT
R内の128個の配列データ群の先頭要素番号となる。
但し、未使用のトラックのそれぞれの小節ブロックの先
頭要素情報及び使用トラック内の未使用の小節ブロック
の先頭要素情報としては、値0xffが設定される。
TBLには、楽曲毎及び各楽曲内のトラック毎に、第0
小節〜第1023小節の1024小節を128小節ずつ
分割して得られる8つの小節ブロックのそれぞれに対応
する、図5(b) に示される配列SNG_BAR_PTR
内の128個ずつの配列データ群の各先頭要素情報が記
憶される。配列SNG_BAR_PTRに定義可能な小
節ブロックの数は、例えば最大で32である。その場
合、配列SNG_BAR_TBLには、小節ブロック先
頭要素情報として、0x00〜0x1f(10進数の0
〜31に対応)の何れかの値が記憶される。この小節ブ
ロック先頭要素情報の値を128倍して得られる値が、
その小節ブロックに対応する配列SNG_BAR_PT
R内の128個の配列データ群の先頭要素番号となる。
但し、未使用のトラックのそれぞれの小節ブロックの先
頭要素情報及び使用トラック内の未使用の小節ブロック
の先頭要素情報としては、値0xffが設定される。
【0030】図5(b) に示される配列SNG_BAR_
PTRには、上述の小節ブロック毎に、各小節ブロック
内の128小節のそれぞれに対応する、図5(c) に示さ
れる配列SNG_SONG内のイベントデータ群の各先
頭要素番号が記憶される。配列SNG_SONGに定義
可能なイベントデータの数は、例えば最大で16384
イベントである。その場合、配列SNG_BAR_PT
Rには、各小節に対応するイベントデータ群の先頭要素
番号として、0x0000〜0x4000(10進数の
0〜16383に対応)の何れかの値が記憶される。但
し、全休符の小節に対応する先頭要素番号としては、値
0xffffが設定される。
PTRには、上述の小節ブロック毎に、各小節ブロック
内の128小節のそれぞれに対応する、図5(c) に示さ
れる配列SNG_SONG内のイベントデータ群の各先
頭要素番号が記憶される。配列SNG_SONGに定義
可能なイベントデータの数は、例えば最大で16384
イベントである。その場合、配列SNG_BAR_PT
Rには、各小節に対応するイベントデータ群の先頭要素
番号として、0x0000〜0x4000(10進数の
0〜16383に対応)の何れかの値が記憶される。但
し、全休符の小節に対応する先頭要素番号としては、値
0xffffが設定される。
【0031】図5(c) に示される配列SNG_SONG
には、上述したように小節単位で連続したイベントデー
タが記憶される。1つのイベントデータは、後述するよ
うに3ワードのデータとして構成される。但し、配列S
NG_SONGは、512個のイベントデータを単位と
する32個のイベントデータブロック(16384イベ
ントデータ分)に分割される。ここで、1つの小節内の
イベントデータ群が2つのイベントデータブロックに分
割される場合には、第1番目のイベントデータブロック
の末尾に後述するジャンプイベントデータが記憶され、
また、第2番目のイベントデータブロックの先頭に後述
するジャンプソースイベントデータが記憶される。
には、上述したように小節単位で連続したイベントデー
タが記憶される。1つのイベントデータは、後述するよ
うに3ワードのデータとして構成される。但し、配列S
NG_SONGは、512個のイベントデータを単位と
する32個のイベントデータブロック(16384イベ
ントデータ分)に分割される。ここで、1つの小節内の
イベントデータ群が2つのイベントデータブロックに分
割される場合には、第1番目のイベントデータブロック
の末尾に後述するジャンプイベントデータが記憶され、
また、第2番目のイベントデータブロックの先頭に後述
するジャンプソースイベントデータが記憶される。
【0032】図6は、図5(c) の配列SNG_SONG
に記憶されるイベントデータ群を構成するノートイベン
トデータとコントロールイベントデータのデータフォー
マットを示す図であり、各イベントデータは3ワードの
データとして構成される。
に記憶されるイベントデータ群を構成するノートイベン
トデータとコントロールイベントデータのデータフォー
マットを示す図であり、各イベントデータは3ワードの
データとして構成される。
【0033】図6(a) に示されるノートイベントデータ
は、楽譜の音符に対応するものであり、単音の発音処理
に必要な複数の情報を含む。即ち、ノートイベントデー
タの第1ワードは、上位7ビットが音高番号、下位7ビ
ットがベロシティを表わす。ノートイベントデータの第
2ワードは、そのノートイベントデータに対応する音符
について、それが含まれる小節の先頭からの時間位置
を、適当な単位(例えば480分の1拍のクロック)で
カウントした値である。そして、ノートイベントデータ
の第3ワードは、そのノートイベントデータに対応する
音符の発音時間を前述の適当な単位でカウントしたゲー
トタイムである。
は、楽譜の音符に対応するものであり、単音の発音処理
に必要な複数の情報を含む。即ち、ノートイベントデー
タの第1ワードは、上位7ビットが音高番号、下位7ビ
ットがベロシティを表わす。ノートイベントデータの第
2ワードは、そのノートイベントデータに対応する音符
について、それが含まれる小節の先頭からの時間位置
を、適当な単位(例えば480分の1拍のクロック)で
カウントした値である。そして、ノートイベントデータ
の第3ワードは、そのノートイベントデータに対応する
音符の発音時間を前述の適当な単位でカウントしたゲー
トタイムである。
【0034】図6(b) に示されるコントロールイベント
データは、楽曲の再生を制御するために必要な、上述の
ノートイベントデータ以外のイベントデータであり、第
1ワードの最上位ビットが1であることによって、ノー
トイベントデータと区別される。このコントロールイベ
ントデータは、更に、メタイベントデータ群、ジャンプ
イベントデータ群、及びコマンドイベントデータ群の3
つに分類される。メタイベントデータ群は、楽曲全体の
テンポ、拍子、調に関する情報を含む。ジャンプイベン
トデータ群は、図7で後述するように、トラック終了、
小節終了、次処理データへのジャンプ等の、イベントデ
ータの位置制御に関する情報を含む。更に、コマンドイ
ベントデータ群は、音量、プログラムチェンジ(音
色)、ベンダー等の、楽音に対する修飾的な効果を付加
するための情報を含む。コントロールイベントデータの
第1ワードの下位7ビットはコントロールコードを示
し、このコードによって制御内容が決定される。例え
ば、メタイベントデータ群のテンポイベントデータに対
応する第1ワードの値は0xff00、ジャンプイベン
トデータ群の小節終了イベントデータに対応する第1ワ
ードの値は0xff11(図7(b) 参照)、コマンドイ
ベントデータ群のプログラムチェンジイベントデータに
対応する第1ワードの値は0xff20となる。コント
ロールイベントデータの第2ワードは、そのコントロー
ルイベントデータに対応する制御が実行される小節の先
頭からの時間位置を、前述した適当な単位でカウントし
た値である。コントロールイベントデータの第3ワード
には、コントロールコード以外に必要なコントロール値
が格納される。例えばメタイベントデータ群のテンポイ
ベントデータの第3ワードにはテンポ番号、ジャンプイ
ベントデータ群のジャンプイベントデータの第3ワード
には配列SNG_SONG(図5(c) )内でのジャンプ
先のイベントデータの要素番号、コマンドイベントデー
タ群のプログラムチェンジイベントデータの第3ワード
には音色番号が格納される。
データは、楽曲の再生を制御するために必要な、上述の
ノートイベントデータ以外のイベントデータであり、第
1ワードの最上位ビットが1であることによって、ノー
トイベントデータと区別される。このコントロールイベ
ントデータは、更に、メタイベントデータ群、ジャンプ
イベントデータ群、及びコマンドイベントデータ群の3
つに分類される。メタイベントデータ群は、楽曲全体の
テンポ、拍子、調に関する情報を含む。ジャンプイベン
トデータ群は、図7で後述するように、トラック終了、
小節終了、次処理データへのジャンプ等の、イベントデ
ータの位置制御に関する情報を含む。更に、コマンドイ
ベントデータ群は、音量、プログラムチェンジ(音
色)、ベンダー等の、楽音に対する修飾的な効果を付加
するための情報を含む。コントロールイベントデータの
第1ワードの下位7ビットはコントロールコードを示
し、このコードによって制御内容が決定される。例え
ば、メタイベントデータ群のテンポイベントデータに対
応する第1ワードの値は0xff00、ジャンプイベン
トデータ群の小節終了イベントデータに対応する第1ワ
ードの値は0xff11(図7(b) 参照)、コマンドイ
ベントデータ群のプログラムチェンジイベントデータに
対応する第1ワードの値は0xff20となる。コント
ロールイベントデータの第2ワードは、そのコントロー
ルイベントデータに対応する制御が実行される小節の先
頭からの時間位置を、前述した適当な単位でカウントし
た値である。コントロールイベントデータの第3ワード
には、コントロールコード以外に必要なコントロール値
が格納される。例えばメタイベントデータ群のテンポイ
ベントデータの第3ワードにはテンポ番号、ジャンプイ
ベントデータ群のジャンプイベントデータの第3ワード
には配列SNG_SONG(図5(c) )内でのジャンプ
先のイベントデータの要素番号、コマンドイベントデー
タ群のプログラムチェンジイベントデータの第3ワード
には音色番号が格納される。
【0035】次に、上述したコントロールイベントデー
タのうちのジャンプイベントデータ群を構成する4種類
のイベントデータについて説明する。図7は、これら4
種類のイベントデータのそれぞれのデータフォーマット
を示す図である。
タのうちのジャンプイベントデータ群を構成する4種類
のイベントデータについて説明する。図7は、これら4
種類のイベントデータのそれぞれのデータフォーマット
を示す図である。
【0036】まず、図7(a) のトラック終了イベントデ
ータは、各トラックのイベントデータ群の終了位置にそ
のトラックの最終のイベントデータとして挿入される。
次に、図7(b) の小節終了イベントデータは、各小節の
イベントデータ群の終了位置にその小節の最終イベント
データとして挿入される。
ータは、各トラックのイベントデータ群の終了位置にそ
のトラックの最終のイベントデータとして挿入される。
次に、図7(b) の小節終了イベントデータは、各小節の
イベントデータ群の終了位置にその小節の最終イベント
データとして挿入される。
【0037】更に、図7(c) のジャンプイベントデータ
と図7(d) のジャンプソースイベントデータは、図5
(c) の配列SNG_SONGにおいて、1つの小節内の
イベントデータ群が512イベントずつの2つのイベン
トデータブロックに分割される場合に、それぞれ、第1
番目のイベントデータブロックの末尾と第2番目のイベ
ントデータブロックの先頭に記憶される。この場合、ジ
ャンプイベントデータの第3ワードには配列SNG_S
ONG内でのジャンプ先のイベントデータの要素番号が
格納され、ジャンプソースイベントデータの第3ワード
には同じくジャンプ元のイベントデータの要素番号が格
納される。
と図7(d) のジャンプソースイベントデータは、図5
(c) の配列SNG_SONGにおいて、1つの小節内の
イベントデータ群が512イベントずつの2つのイベン
トデータブロックに分割される場合に、それぞれ、第1
番目のイベントデータブロックの末尾と第2番目のイベ
ントデータブロックの先頭に記憶される。この場合、ジ
ャンプイベントデータの第3ワードには配列SNG_S
ONG内でのジャンプ先のイベントデータの要素番号が
格納され、ジャンプソースイベントデータの第3ワード
には同じくジャンプ元のイベントデータの要素番号が格
納される。
【0038】なお、図7(a) 〜(d) に示される4種類の
イベントデータについて、イベントデータの編集処理及
び再生処理においては、第1ワードにより現在処理イベ
ントデータがジャンプイベントデータ群に属するイベン
トであることが認識された時点で、各々のイベントデー
タに対応した処理が即座に実行される。従って、これら
各イベントデータの第2ワードは任意の値でよい。ま
た、トラック終了イベントデータと小節終了イベントデ
ータの第3ワードも任意の値でよい。
イベントデータについて、イベントデータの編集処理及
び再生処理においては、第1ワードにより現在処理イベ
ントデータがジャンプイベントデータ群に属するイベン
トであることが認識された時点で、各々のイベントデー
タに対応した処理が即座に実行される。従って、これら
各イベントデータの第2ワードは任意の値でよい。ま
た、トラック終了イベントデータと小節終了イベントデ
ータの第3ワードも任意の値でよい。
【0039】以上説明した図4〜図7の楽曲データのデ
ータフォーマットが採用されることにより、自動演奏に
関する制御を非常に効率的に実行することが可能とな
る。この効果について、以下に説明する。
ータフォーマットが採用されることにより、自動演奏に
関する制御を非常に効率的に実行することが可能とな
る。この効果について、以下に説明する。
【0040】まず、イベントデータの再生処理時(楽曲
の自動演奏時)の動作について説明する。ユーザが図3
のシステム操作子群307を操作することにより再生開
始が指示されると、図3のCPU303は、RAM30
5に記憶されている再生される楽曲に対応する図4に示
されるトラック使用状況データSNG_TRK_USE
の内容を調べる。CPU303は、トラック使用状況デ
ータSNG_TRK_USEにおいて値1が設定されて
いるビットに対応するトラックの処理タイミングで、そ
のトラックのイベントデータを再生させるために、ま
ず、図5(a) に示される配列SNG_BAR_TBLを
探索する。この結果、CPU303は、現在再生中の小
節に対応する図5(b) に示される配列SNG_BAR_
PTR内のの要素番号を得る。次に、配列SNG_BA
R_PTR内の該当データの値が0xffffでなけれ
ば(全休符小節でなければ)、CPU303は、配列S
NG_BAR_PTRの該当データの値が指す要素番号
の配列SNG_SONG中のイベントデータを読み込
む。そして、その第2ワードに格納されている小節先頭
からのクロックの値が現在のクロックの値以下であれ
ば、CPU303は、そのイベントデータを再生するた
めに、そのイベントデータの第1ワードのデータに従っ
た演奏情報を、図3の演奏情報出力部306から出力さ
せる。以下、上述の一連の処理が繰り返し実行され、現
在小節の現在クロックに従ったイベントデータの再生処
理が実行される。
の自動演奏時)の動作について説明する。ユーザが図3
のシステム操作子群307を操作することにより再生開
始が指示されると、図3のCPU303は、RAM30
5に記憶されている再生される楽曲に対応する図4に示
されるトラック使用状況データSNG_TRK_USE
の内容を調べる。CPU303は、トラック使用状況デ
ータSNG_TRK_USEにおいて値1が設定されて
いるビットに対応するトラックの処理タイミングで、そ
のトラックのイベントデータを再生させるために、ま
ず、図5(a) に示される配列SNG_BAR_TBLを
探索する。この結果、CPU303は、現在再生中の小
節に対応する図5(b) に示される配列SNG_BAR_
PTR内のの要素番号を得る。次に、配列SNG_BA
R_PTR内の該当データの値が0xffffでなけれ
ば(全休符小節でなければ)、CPU303は、配列S
NG_BAR_PTRの該当データの値が指す要素番号
の配列SNG_SONG中のイベントデータを読み込
む。そして、その第2ワードに格納されている小節先頭
からのクロックの値が現在のクロックの値以下であれ
ば、CPU303は、そのイベントデータを再生するた
めに、そのイベントデータの第1ワードのデータに従っ
た演奏情報を、図3の演奏情報出力部306から出力さ
せる。以下、上述の一連の処理が繰り返し実行され、現
在小節の現在クロックに従ったイベントデータの再生処
理が実行される。
【0041】上述のイベントデータの再生処理におい
て、小節単位の早送り再生又は巻き戻し再生が実行され
る場合を考える。この動作を実現するためには、図5
(a) に示される配列SNG_BAR_TBL上の小節ブ
ロックに対する現在処理ポインタ値、又は図5(b) に示
される配列SNG_BAR_PTR上の小節に対する現
在処理ポインタ値をインクリメント又はデクリメントす
るだけでよい。この結果、非常に高速な1又は複数小節
単位の早送り再生又は巻き戻し再生を簡単な制御で実現
することができる。
て、小節単位の早送り再生又は巻き戻し再生が実行され
る場合を考える。この動作を実現するためには、図5
(a) に示される配列SNG_BAR_TBL上の小節ブ
ロックに対する現在処理ポインタ値、又は図5(b) に示
される配列SNG_BAR_PTR上の小節に対する現
在処理ポインタ値をインクリメント又はデクリメントす
るだけでよい。この結果、非常に高速な1又は複数小節
単位の早送り再生又は巻き戻し再生を簡単な制御で実現
することができる。
【0042】次に、イベントデータの編集処理が実行さ
れる場合を考える。例えば小節単位の移動を行うために
は、図5(a) の配列SNG_BAR_TBL又は図5
(b) の配列SNG_BAR_PTRの配列データの要素
を入れ替えるのみでよい。この場合、図5(c) の配列S
NG_SONG内のイベントデータに記憶されているク
ロックデータは小節の先頭からのクロックであるため
(図6等参照)、時間データを編集し直す必要もない。
更に、例えば既存の小節に新たなイベントデータを追加
するためには、図5(c) の配列SNG_SONGの末尾
にイベントデータ群を追加し、ジャンプイベントデータ
とジャンプソースイベントデータ(図7参照)を用い
て、そのイベントデータ群を所望の小節のイベントデー
タ群に連結するだけでよい。その他、イベントデータの
挿入、削除等も、簡単なデータ操作で実現できる。
れる場合を考える。例えば小節単位の移動を行うために
は、図5(a) の配列SNG_BAR_TBL又は図5
(b) の配列SNG_BAR_PTRの配列データの要素
を入れ替えるのみでよい。この場合、図5(c) の配列S
NG_SONG内のイベントデータに記憶されているク
ロックデータは小節の先頭からのクロックであるため
(図6等参照)、時間データを編集し直す必要もない。
更に、例えば既存の小節に新たなイベントデータを追加
するためには、図5(c) の配列SNG_SONGの末尾
にイベントデータ群を追加し、ジャンプイベントデータ
とジャンプソースイベントデータ(図7参照)を用い
て、そのイベントデータ群を所望の小節のイベントデー
タ群に連結するだけでよい。その他、イベントデータの
挿入、削除等も、簡単なデータ操作で実現できる。
【0043】このように、楽曲データが階層的に管理さ
れることにより、イベントデータの再生処理、編集処理
等の制御を簡単に実行することができる。ここで、上述
の楽曲データの階層構造が採用される場合におけるイベ
ントデータの編集処理において、小節内でイベントデー
タの挿入、削除、移動、複写等の編集作業が実行された
場合、図5(c) の配列SNG_SONG内の1つの小節
内のイベントデータ群において、図7に示されるジャン
プイベントデータ群以外のイベントデータの第2ワード
に設定されている小節の先頭からのクロックの値の大小
関係が逆転している状況が発生することがある。例え
ば、所望の小節内の任意の時間位置に新たなイベントデ
ータが追加される場合、配列SNG_SONGの末尾
に、ジャンプソースイベントデータと、それに続いて、
第2ワードに所望のクロック値が設定された所望のイベ
ントデータと、更にそれに続いて、小節終了イベントデ
ータが追加されると共に、上記所望の小節の最終イベン
トの小節終了イベントデータが、第3ワードに上記ジャ
ンプソースイベントデータの要素番号が設定されたジャ
ンプイベントデータに置き換えられ、最後に、上記ジャ
ンプソースイベントデータの第3ワードに上記ジャンプ
イベントデータの要素番号が設定される。この場合、上
記追加イベントデータは、上記所望の小節内のイベント
データ群の最後に単純に追加されただけであるため、そ
の追加イベントデータが上記所望の小節内の他のイベン
トデータ群との間で正しい時間関係を有するように、そ
の追加イベントデータを含む上記所望の小節内のイベン
トデータ群が、各イベントデータの第2ワードのクロッ
ク値に関して並び換えられる(ソートする)必要があ
る。
れることにより、イベントデータの再生処理、編集処理
等の制御を簡単に実行することができる。ここで、上述
の楽曲データの階層構造が採用される場合におけるイベ
ントデータの編集処理において、小節内でイベントデー
タの挿入、削除、移動、複写等の編集作業が実行された
場合、図5(c) の配列SNG_SONG内の1つの小節
内のイベントデータ群において、図7に示されるジャン
プイベントデータ群以外のイベントデータの第2ワード
に設定されている小節の先頭からのクロックの値の大小
関係が逆転している状況が発生することがある。例え
ば、所望の小節内の任意の時間位置に新たなイベントデ
ータが追加される場合、配列SNG_SONGの末尾
に、ジャンプソースイベントデータと、それに続いて、
第2ワードに所望のクロック値が設定された所望のイベ
ントデータと、更にそれに続いて、小節終了イベントデ
ータが追加されると共に、上記所望の小節の最終イベン
トの小節終了イベントデータが、第3ワードに上記ジャ
ンプソースイベントデータの要素番号が設定されたジャ
ンプイベントデータに置き換えられ、最後に、上記ジャ
ンプソースイベントデータの第3ワードに上記ジャンプ
イベントデータの要素番号が設定される。この場合、上
記追加イベントデータは、上記所望の小節内のイベント
データ群の最後に単純に追加されただけであるため、そ
の追加イベントデータが上記所望の小節内の他のイベン
トデータ群との間で正しい時間関係を有するように、そ
の追加イベントデータを含む上記所望の小節内のイベン
トデータ群が、各イベントデータの第2ワードのクロッ
ク値に関して並び換えられる(ソートする)必要があ
る。
【0044】この場合に、小節内のイベントデータ群に
含まれ得る図7に示されるジャンプイベントデータ群が
適切に処理される必要がある。そこで、本実施の形態に
おいては、小節内のイベントデータ群の時間ソート処理
が次のようにして実行される。以下に、図1のコピース
イッチ103又は取消スイッチ104が押された場合の
イベントデータのコピー処理を例として、その処理にお
ける小節内のイベントデータ群の時間ソート処理の詳細
について説明する。なお、変更スイッチ106が押され
た場合においても、時間ソート処理が実行されるが、こ
れについては本実施の形態の説明の最後で説明する。本実施の形態の全体動作 図8は、本実施の形態において図2のCPU303が実
行するメインフローを示す図である。このフローは、C
PU303が、RAM305とワークメモリとして使用
しながら、ROM304に記憶された制御プログラムを
実行する動作として実現される。
含まれ得る図7に示されるジャンプイベントデータ群が
適切に処理される必要がある。そこで、本実施の形態に
おいては、小節内のイベントデータ群の時間ソート処理
が次のようにして実行される。以下に、図1のコピース
イッチ103又は取消スイッチ104が押された場合の
イベントデータのコピー処理を例として、その処理にお
ける小節内のイベントデータ群の時間ソート処理の詳細
について説明する。なお、変更スイッチ106が押され
た場合においても、時間ソート処理が実行されるが、こ
れについては本実施の形態の説明の最後で説明する。本実施の形態の全体動作 図8は、本実施の形態において図2のCPU303が実
行するメインフローを示す図である。このフローは、C
PU303が、RAM305とワークメモリとして使用
しながら、ROM304に記憶された制御プログラムを
実行する動作として実現される。
【0045】装置の電源がオンされると、ステップ80
1で、RAM305の記憶内容等がイニシャライズされ
た後、ステップ802のスイッチ処理とステップ803
のその他の処理が繰り返し実行される。ステップ802
のスイッチ処理では、システム操作子群307の各スイ
ッチが操作されたか否かが判定され、それぞれのスイッ
チ操作に対応する処理が実行される。ステップ803の
その他の処理では、演奏情報入力部301からの演奏情
報の取り込みの処理や、楽曲データの再生処理等が実行
される。
1で、RAM305の記憶内容等がイニシャライズされ
た後、ステップ802のスイッチ処理とステップ803
のその他の処理が繰り返し実行される。ステップ802
のスイッチ処理では、システム操作子群307の各スイ
ッチが操作されたか否かが判定され、それぞれのスイッ
チ操作に対応する処理が実行される。ステップ803の
その他の処理では、演奏情報入力部301からの演奏情
報の取り込みの処理や、楽曲データの再生処理等が実行
される。
【0046】図9は、図8のステップ802のスイッチ
処理を示す動作フローチャートである。まず、ステップ
901で、システム操作子群307の図1に示されるコ
ピースイッチ103がオンされたか否かが判定される。
処理を示す動作フローチャートである。まず、ステップ
901で、システム操作子群307の図1に示されるコ
ピースイッチ103がオンされたか否かが判定される。
【0047】この判定がYESの場合は、ステップ90
2で、CPU303内のレジスタ又はRAM305内に
設けられるコピー処理実行フラグの値がインクリメント
される。このフラグは、次のステップ903のコピー処
理において参照される。続いて、ステップ903で、コ
ピー処理が実行される。図2で説明したように、コピー
スイッチ103が4回押されると実際のイベントデータ
のコピー処理が実行されるが、ステップ903のコピー
処理はその判別ルーチンも含む。
2で、CPU303内のレジスタ又はRAM305内に
設けられるコピー処理実行フラグの値がインクリメント
される。このフラグは、次のステップ903のコピー処
理において参照される。続いて、ステップ903で、コ
ピー処理が実行される。図2で説明したように、コピー
スイッチ103が4回押されると実際のイベントデータ
のコピー処理が実行されるが、ステップ903のコピー
処理はその判別ルーチンも含む。
【0048】一方、ステップ901の判定がNOの場合
には、ステップ904で、システム操作子群307の図
1に示される取消スイッチ104がオンされたか否かが
判定される。
には、ステップ904で、システム操作子群307の図
1に示される取消スイッチ104がオンされたか否かが
判定される。
【0049】この判定がYESの場合は、ステップ90
5で、コピー処理実行フラグの値が0にリセットされ
る。これにより、コピー処理がキャンセルされる。一
方、ステップ902の判定がNOの場合には、ステップ
906で、システム操作子群307の図1に示される変
更スイッチ106がオンされたか否かが判定される。
5で、コピー処理実行フラグの値が0にリセットされ
る。これにより、コピー処理がキャンセルされる。一
方、ステップ902の判定がNOの場合には、ステップ
906で、システム操作子群307の図1に示される変
更スイッチ106がオンされたか否かが判定される。
【0050】この判定がYESの場合は、ステップ90
7で、カーソルキー105によって選択されているコマ
ンド又はパラメータの内容を変更するためのイベントリ
ストモード処理が実行される。この処理については、本
実施の形態の説明の最後で説明する。
7で、カーソルキー105によって選択されているコマ
ンド又はパラメータの内容を変更するためのイベントリ
ストモード処理が実行される。この処理については、本
実施の形態の説明の最後で説明する。
【0051】ステップ906の判定がNOの場合、又は
ステップ903若しくは905若しくは907の処理の
後に、ステップ908で、その他のスイッチ処理が実行
される。ここでは、カーソルスイッチの操作に対応する
家庭用テレビ102の表示画面上でのカーソルの移動処
理や、イベントデータの各種編集処理のためのスイッチ
操作に対応する処理等が実行される。コピー処理 図10は、図9のステップ903のコピー処理を示す動
作フローチャートである。
ステップ903若しくは905若しくは907の処理の
後に、ステップ908で、その他のスイッチ処理が実行
される。ここでは、カーソルスイッチの操作に対応する
家庭用テレビ102の表示画面上でのカーソルの移動処
理や、イベントデータの各種編集処理のためのスイッチ
操作に対応する処理等が実行される。コピー処理 図10は、図9のステップ903のコピー処理を示す動
作フローチャートである。
【0052】まず、ステップ1001では、コピー処理
実行フラグの値が4になっているか否かが判定される。
図2で説明したように、コピースイッチ103が4回押
されると実際のイベントデータのコピー処理が実行され
る。
実行フラグの値が4になっているか否かが判定される。
図2で説明したように、コピースイッチ103が4回押
されると実際のイベントデータのコピー処理が実行され
る。
【0053】このため、ステップ1001の判定がNO
の場合には、そのまま図9のステップ903のコピー処
理を終了する。ステップ1001の判定がYESになっ
た場合は、まず、ステップ1002でデータ移動処理が
実行される。この処理においては、図2(a) 及び(b) の
フェーズで指定されたコピー範囲のイベントデータ群の
第2ワードの値が、図2(c) のフェーズで指定されたコ
ピー先のイベントデータの第2ワードの値と同じ値に設
定された後、それらのイベントデータ群が対象小節の末
尾に追加される。具体的には、配列SNG_SONGの
末尾に、ジャンプソースイベントデータと、それに続い
て、上記イベントデータ群と、更にそれに続いて、小節
終了イベントデータが追加されると共に、上記所望の小
節の最終イベントの小節終了イベントデータが、第3ワ
ードに上記ジャンプソースイベントデータの要素番号が
設定されたジャンプイベントデータに置き換えられ、最
後に、上記ジャンプソースイベントデータの第3ワード
に上記ジャンプイベントデータの要素番号が設定され
る。
の場合には、そのまま図9のステップ903のコピー処
理を終了する。ステップ1001の判定がYESになっ
た場合は、まず、ステップ1002でデータ移動処理が
実行される。この処理においては、図2(a) 及び(b) の
フェーズで指定されたコピー範囲のイベントデータ群の
第2ワードの値が、図2(c) のフェーズで指定されたコ
ピー先のイベントデータの第2ワードの値と同じ値に設
定された後、それらのイベントデータ群が対象小節の末
尾に追加される。具体的には、配列SNG_SONGの
末尾に、ジャンプソースイベントデータと、それに続い
て、上記イベントデータ群と、更にそれに続いて、小節
終了イベントデータが追加されると共に、上記所望の小
節の最終イベントの小節終了イベントデータが、第3ワ
ードに上記ジャンプソースイベントデータの要素番号が
設定されたジャンプイベントデータに置き換えられ、最
後に、上記ジャンプソースイベントデータの第3ワード
に上記ジャンプイベントデータの要素番号が設定され
る。
【0054】続いて、ステップ1003では、時間ソー
ト処理が実行される。上述の小節の末尾に追加されたイ
ベントデータ群は、対象小節内のイベントデータ群の最
後に単純に追加されただけである。このため、ステップ
1003では、追加イベントデータが対象小節内の他の
イベントデータ群との間で正しい時間関係を有するよう
に、そのイベントデータ群を含む対象小節内のイベント
データ群が、各イベントデータの第2ワードのクロック
値に関して並び換えられる。時間ソート処理 図11は、図3に示されるCPU303がROM304
に記憶された制御プログラムを実行する動作として実現
される時間ソート処理の全体動作フローチャートであ
る。
ト処理が実行される。上述の小節の末尾に追加されたイ
ベントデータ群は、対象小節内のイベントデータ群の最
後に単純に追加されただけである。このため、ステップ
1003では、追加イベントデータが対象小節内の他の
イベントデータ群との間で正しい時間関係を有するよう
に、そのイベントデータ群を含む対象小節内のイベント
データ群が、各イベントデータの第2ワードのクロック
値に関して並び換えられる。時間ソート処理 図11は、図3に示されるCPU303がROM304
に記憶された制御プログラムを実行する動作として実現
される時間ソート処理の全体動作フローチャートであ
る。
【0055】まず、時間ソート処理終了フラグ(CPU
303内のレジスタ又はRAM305に確保される)
は、その値が0であるときに時間ソート処理が終了して
いないことを示し、その値が1であるときに時間ソート
処理が終了したことを示す。
303内のレジスタ又はRAM305に確保される)
は、その値が0であるときに時間ソート処理が終了して
いないことを示し、その値が1であるときに時間ソート
処理が終了したことを示す。
【0056】まず、ステップ1101において、時間ソ
ート処理終了フラグの値が0にセットされる。次に、ス
テップ1102で時間ソート処理終了フラグの値が0で
あると判定される間、ステップ1103〜1105の一
連の処理が繰り返し実行される。
ート処理終了フラグの値が0にセットされる。次に、ス
テップ1102で時間ソート処理終了フラグの値が0で
あると判定される間、ステップ1103〜1105の一
連の処理が繰り返し実行される。
【0057】ステップ1103においては、時間ソート
処理終了フラグの値が1にセットされる。ステップ11
04では、配列SNG_SONGに記憶されている時間
ソート処理の対象とされる小節内のイベントデータ群に
含まれ、ジャンプイベントデータ及びジャンプソースイ
ベントデータによって区切られる全てのイベントデータ
のグループ(以下、イベントデータフラグメント又は単
にフラグメントと呼ぶ)のそれぞれの内部で閉じた時間
ソート処理であるフラグメント内ソート処理が実行され
る。
処理終了フラグの値が1にセットされる。ステップ11
04では、配列SNG_SONGに記憶されている時間
ソート処理の対象とされる小節内のイベントデータ群に
含まれ、ジャンプイベントデータ及びジャンプソースイ
ベントデータによって区切られる全てのイベントデータ
のグループ(以下、イベントデータフラグメント又は単
にフラグメントと呼ぶ)のそれぞれの内部で閉じた時間
ソート処理であるフラグメント内ソート処理が実行され
る。
【0058】続いて、ステップ1105では、配列SN
G_SONGに記憶されている上記対象小節に含まれる
隣接するフラグメント同士で、それらの接続部に位置す
るイベントデータ(ジャンプイベントデータの直前に位
置するイベントデータとそのジャンプイベントデータに
対応するジャンプソースイベントデータの直後に位置す
るイベントデータ)についての時間ソート処理であるフ
ラグメント間ソート処理が実行される。
G_SONGに記憶されている上記対象小節に含まれる
隣接するフラグメント同士で、それらの接続部に位置す
るイベントデータ(ジャンプイベントデータの直前に位
置するイベントデータとそのジャンプイベントデータに
対応するジャンプソースイベントデータの直後に位置す
るイベントデータ)についての時間ソート処理であるフ
ラグメント間ソート処理が実行される。
【0059】そして、上述のステップ1104のフラグ
メント内ソート処理とステップ1105のフラグメント
間ソート処理が繰り返し実行され、両方の処理において
実際にイベントデータの入替えが発生しなくなった時点
で、配列SNG_SONGに記憶されている対象小節内
のイベントデータ群に対する時間ソート処理が完了す
る。具体的には、ステップ1104又は1105におい
て実際にイベントデータの入替えが発生した場合は、ス
テップ1104又は1105内において後述するように
時間ソート処理終了フラグの値が0にセットされる。従
って、この場合にはステップ1102の判定がYESと
なるため、時間ソート処理が続行される。一方、ステッ
プ1104及び1105の両方で実際にイベントデータ
の入替えが発生しなくなった場合は、ステップ1104
及び1105の何れにおいても時間ソート処理終了フラ
グの値を0にセットする処理が実行されなくなる。従っ
て、この場合には時間ソート処理終了フラグの値はステ
ップ1103で1にセットされたままとなるため、ステ
ップ1102の判定がNOとなり、時間ソート処理が終
了する。
メント内ソート処理とステップ1105のフラグメント
間ソート処理が繰り返し実行され、両方の処理において
実際にイベントデータの入替えが発生しなくなった時点
で、配列SNG_SONGに記憶されている対象小節内
のイベントデータ群に対する時間ソート処理が完了す
る。具体的には、ステップ1104又は1105におい
て実際にイベントデータの入替えが発生した場合は、ス
テップ1104又は1105内において後述するように
時間ソート処理終了フラグの値が0にセットされる。従
って、この場合にはステップ1102の判定がYESと
なるため、時間ソート処理が続行される。一方、ステッ
プ1104及び1105の両方で実際にイベントデータ
の入替えが発生しなくなった場合は、ステップ1104
及び1105の何れにおいても時間ソート処理終了フラ
グの値を0にセットする処理が実行されなくなる。従っ
て、この場合には時間ソート処理終了フラグの値はステ
ップ1103で1にセットされたままとなるため、ステ
ップ1102の判定がNOとなり、時間ソート処理が終
了する。
【0060】図12は、図11のステップ1104のフ
ラグメント内ソート処理の動作フローチャートである。
まず、フラグメント内ソート処理終了フラグ(CPU3
03内のレジスタ又はRAM305に確保される)は、
フラグメント内ソート処理を、終了させるべきでない場
合に値0となり、終了させるべきである場合に値1とな
る。このフラグの値は、ステップ1201で、0に初期
化される。
ラグメント内ソート処理の動作フローチャートである。
まず、フラグメント内ソート処理終了フラグ(CPU3
03内のレジスタ又はRAM305に確保される)は、
フラグメント内ソート処理を、終了させるべきでない場
合に値0となり、終了させるべきである場合に値1とな
る。このフラグの値は、ステップ1201で、0に初期
化される。
【0061】サーチ状態フラグ(CPU303内のレジ
スタ又はRAM305に確保される)は、配列SNG_
SONGに記憶されている対象小節に含まれる現在処理
中のフラグメント内において、ジャンプソースイベント
データ以外の先頭のイベントデータをサーチする処理
が、終了していない場合に値0となり、終了している場
合に値1となる。このフラグの値は、ステップ1202
で0に初期化される。
スタ又はRAM305に確保される)は、配列SNG_
SONGに記憶されている対象小節に含まれる現在処理
中のフラグメント内において、ジャンプソースイベント
データ以外の先頭のイベントデータをサーチする処理
が、終了していない場合に値0となり、終了している場
合に値1となる。このフラグの値は、ステップ1202
で0に初期化される。
【0062】サーチイベント(CPU303内のレジス
タ又はRAM305に確保される)は、配列SNG_S
ONGに記憶されている対象小節に含まれる現在処理中
のフラグメント内において、現在処理中のイベントデー
タを指示するものである。このサーチイベントの値は、
ステップ1203で、配列SNG_SONGに記憶され
る対象小節内の先頭のイベントデータの要素番号にセッ
トされる。この番号は、図5の配列SNG_BAR_T
BL及び配列SNG_BAR_PTRから容易に検索で
きる。
タ又はRAM305に確保される)は、配列SNG_S
ONGに記憶されている対象小節に含まれる現在処理中
のフラグメント内において、現在処理中のイベントデー
タを指示するものである。このサーチイベントの値は、
ステップ1203で、配列SNG_SONGに記憶され
る対象小節内の先頭のイベントデータの要素番号にセッ
トされる。この番号は、図5の配列SNG_BAR_T
BL及び配列SNG_BAR_PTRから容易に検索で
きる。
【0063】続いて、初期状態では、ステップ1204
と1205の判定が共にYESとなった後に、ステップ
1206〜1213において、配列SNG_SONGに
記憶されている対象小節に含まれる現在処理中のフラグ
メント内において、ジャンプソースイベントデータ以外
の先頭のイベントデータをサーチする処理が実行され
る。
と1205の判定が共にYESとなった後に、ステップ
1206〜1213において、配列SNG_SONGに
記憶されている対象小節に含まれる現在処理中のフラグ
メント内において、ジャンプソースイベントデータ以外
の先頭のイベントデータをサーチする処理が実行され
る。
【0064】まず、サーチイベントによって指示される
現在イベントデータ(フロー中では現在イベントと記述
する)が、RAM305内の配列SNG_SONGから
読み出される。
現在イベントデータ(フロー中では現在イベントと記述
する)が、RAM305内の配列SNG_SONGから
読み出される。
【0065】そして、現在イベントデータがジャンプソ
ースイベントデータである場合は、ステップ1206の
判定の後にステップ1207が実行され、サーチイベン
トが指示する配列SNG_SONGの要素番号がインク
リメントされる。これらのステップ1206とステップ
1207の処理の繰返しによって、現在処理中のフラグ
メント内の先頭のジャンプソースイベントデータが無視
される。
ースイベントデータである場合は、ステップ1206の
判定の後にステップ1207が実行され、サーチイベン
トが指示する配列SNG_SONGの要素番号がインク
リメントされる。これらのステップ1206とステップ
1207の処理の繰返しによって、現在処理中のフラグ
メント内の先頭のジャンプソースイベントデータが無視
される。
【0066】現在イベントデータがジャンプソースイベ
ントデータ以外のイベントデータとなった場合は、ステ
ップ1208でそのイベントデータの種類が判定され
る。ステップ1208で現在イベントデータがトラック
終了イベントデータ又は小節終了イベントデータ(図7
参照)であると判定された場合には、ステップ1209
で、フラグメント内ソート処理終了フラグの値が1にセ
ットされる。即ち、この場合は、現在処理中のフラグメ
ント内にはソート処理を実行すべき有効なイベントデー
タは存在せず、かつ現在処理中のフラグメント以降に対
象小節のイベントデータ群が存在しないため、ステップ
1209の処理の後にステップ1204が実行された時
点でその判定がNOとなり、フラグメント内ソート処理
を終了する。
ントデータ以外のイベントデータとなった場合は、ステ
ップ1208でそのイベントデータの種類が判定され
る。ステップ1208で現在イベントデータがトラック
終了イベントデータ又は小節終了イベントデータ(図7
参照)であると判定された場合には、ステップ1209
で、フラグメント内ソート処理終了フラグの値が1にセ
ットされる。即ち、この場合は、現在処理中のフラグメ
ント内にはソート処理を実行すべき有効なイベントデー
タは存在せず、かつ現在処理中のフラグメント以降に対
象小節のイベントデータ群が存在しないため、ステップ
1209の処理の後にステップ1204が実行された時
点でその判定がNOとなり、フラグメント内ソート処理
を終了する。
【0067】また、ステップ1208で現在イベントデ
ータがジャンプイベントデータ(図7(c) 参照)である
と判定された場合には、ステップ1210で、そのジャ
ンプイベントデータの第3ワードに格納されているジャ
ンプ先要素番号が、サーチイベントの値としてセットさ
れる。即ち、この場合には、現在処理中のフラグメント
内にはソート処理を実行すべき有効なイベントデータは
存在せず、かつ現在処理中のフラグメント以降に対象小
節のイベントデータ群が存在する。このため、ステップ
1210の処理によってサーチイベントに新たなフラグ
メントの先頭のイベントデータの要素番号が設定された
後に、再びステップ1204と1205の判定が共にY
ESとなった後、ステップ1206〜1213におい
て、配列SNG_SONGに記憶されている対象小節に
含まれる新たなフラグメント内において、ジャンプソー
スイベントデータ以外の先頭のイベントデータをサーチ
する処理が再度実行される。
ータがジャンプイベントデータ(図7(c) 参照)である
と判定された場合には、ステップ1210で、そのジャ
ンプイベントデータの第3ワードに格納されているジャ
ンプ先要素番号が、サーチイベントの値としてセットさ
れる。即ち、この場合には、現在処理中のフラグメント
内にはソート処理を実行すべき有効なイベントデータは
存在せず、かつ現在処理中のフラグメント以降に対象小
節のイベントデータ群が存在する。このため、ステップ
1210の処理によってサーチイベントに新たなフラグ
メントの先頭のイベントデータの要素番号が設定された
後に、再びステップ1204と1205の判定が共にY
ESとなった後、ステップ1206〜1213におい
て、配列SNG_SONGに記憶されている対象小節に
含まれる新たなフラグメント内において、ジャンプソー
スイベントデータ以外の先頭のイベントデータをサーチ
する処理が再度実行される。
【0068】更に、ステップ1208で現在イベントデ
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合には、ステップ1211
で、サーチイベントの値がフラグメント先頭イベントの
値としてセットされる。この値が、現在処理中のフラグ
メント内で最初に見つかったジャンプソースイベントデ
ータ以外の先頭のイベントデータの要素番号となる。続
いて、ステップ1212で、サーチイベントが指示する
配列SNG_SONGの要素番号がインクリメントされ
た後、サーチ処理を終了させるべく、ステップ1213
で、サーチ状態フラグの値が1にセットされる。
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合には、ステップ1211
で、サーチイベントの値がフラグメント先頭イベントの
値としてセットされる。この値が、現在処理中のフラグ
メント内で最初に見つかったジャンプソースイベントデ
ータ以外の先頭のイベントデータの要素番号となる。続
いて、ステップ1212で、サーチイベントが指示する
配列SNG_SONGの要素番号がインクリメントされ
た後、サーチ処理を終了させるべく、ステップ1213
で、サーチ状態フラグの値が1にセットされる。
【0069】この結果、ステップ1213に続いてステ
ップ1204の判定がYESとなった後に、ステップ1
205の判定がNOとなって、ステップ1214〜12
16が実行される。ステップ1214〜1216では、
配列SNG_SONGに記憶されている対象小節に含ま
れる現在処理中のフラグメント内で、トラック終了イベ
ントデータ、小節終了イベントデータ、及びジャンプイ
ベントデータ以外の末尾のイベントデータをサーチする
処理が実行される。
ップ1204の判定がYESとなった後に、ステップ1
205の判定がNOとなって、ステップ1214〜12
16が実行される。ステップ1214〜1216では、
配列SNG_SONGに記憶されている対象小節に含ま
れる現在処理中のフラグメント内で、トラック終了イベ
ントデータ、小節終了イベントデータ、及びジャンプイ
ベントデータ以外の末尾のイベントデータをサーチする
処理が実行される。
【0070】まず、サーチイベントによって指示される
現在イベントデータが、RAM305内の配列SNG_
SONGから読み出される。そして、現在イベントデー
タがトラック終了イベントデータ、小節終了イベントデ
ータ、及びジャンプイベントデータ以外のイベントデー
タである場合には、ステップ1214の判定の後にステ
ップ1215が実行され、サーチイベントが指示する配
列SNG_SONGの要素番号がインクリメントされ
る。これらのステップ1214とステップ1207の処
理の繰返しによって、現在処理中のフラグメント内のイ
ベントデータが末尾に向かって順次サーチされる。
現在イベントデータが、RAM305内の配列SNG_
SONGから読み出される。そして、現在イベントデー
タがトラック終了イベントデータ、小節終了イベントデ
ータ、及びジャンプイベントデータ以外のイベントデー
タである場合には、ステップ1214の判定の後にステ
ップ1215が実行され、サーチイベントが指示する配
列SNG_SONGの要素番号がインクリメントされ
る。これらのステップ1214とステップ1207の処
理の繰返しによって、現在処理中のフラグメント内のイ
ベントデータが末尾に向かって順次サーチされる。
【0071】現在イベントデータがトラック終了イベン
トデータ、小節終了イベントデータ、又はジャンプイベ
ントデータの何れかのイベントデータとなった場合に
は、ステップ1216で、サーチイベントが指示する要
素番号から−1して得られる値が、フラグメント終了イ
ベントの値としてセットされる。この値が、現在処理中
のフラグメント内における、トラック終了イベントデー
タ、小節終了イベントデータ、及びジャンプイベントデ
ータ以外の末尾のイベントデータである。
トデータ、小節終了イベントデータ、又はジャンプイベ
ントデータの何れかのイベントデータとなった場合に
は、ステップ1216で、サーチイベントが指示する要
素番号から−1して得られる値が、フラグメント終了イ
ベントの値としてセットされる。この値が、現在処理中
のフラグメント内における、トラック終了イベントデー
タ、小節終了イベントデータ、及びジャンプイベントデ
ータ以外の末尾のイベントデータである。
【0072】以上の処理により、現在処理中のフラグメ
ント内でソート処理が実行されるべき先頭のイベントデ
ータと末尾のイベントデータが、フラグメント先頭イベ
ント及びフラグメント終了イベントとして算出される。
ント内でソート処理が実行されるべき先頭のイベントデ
ータと末尾のイベントデータが、フラグメント先頭イベ
ント及びフラグメント終了イベントとして算出される。
【0073】続いて、ステップ1217では、上記フラ
グメント先頭イベントとフラグメント終了イベントが指
示する要素番号が一致しているか否かが判定される。ス
テップ1217の判定がYESの場合は、現在処理中の
フラグメント内でソート処理が実行されるべきイベント
データの数が1であり、実質的にソート処理を実行する
必要はないため、ステップ1218のソート処理は実行
されずに、ステップ1219以降が実行される。ステッ
プ1219以降の処理については後述する。
グメント先頭イベントとフラグメント終了イベントが指
示する要素番号が一致しているか否かが判定される。ス
テップ1217の判定がYESの場合は、現在処理中の
フラグメント内でソート処理が実行されるべきイベント
データの数が1であり、実質的にソート処理を実行する
必要はないため、ステップ1218のソート処理は実行
されずに、ステップ1219以降が実行される。ステッ
プ1219以降の処理については後述する。
【0074】ステップ1217の判定がNOの場合は、
ステップ1218で、配列SNG_SONGに記憶され
ている対象小節に含まれる現在処理中のフラグメント内
で、フラグメント先頭イベントとフラグメント終了イベ
ントにより指示される範囲のイベントデータ群が、各イ
ベントデータの第2ワードのクロック値に関してソート
される。この処理については図18の動作フローチャー
トを用いて後述する。なお、後述するように、ステップ
1218において実際にイベントデータの入替えが発生
した場合は、ステップ1218内において時間ソート処
理終了フラグの値が0にセットされる。従って、この場
合は図11のステップ1102の処理に戻った時点でそ
の判定がYESとなるため、時間ソート処理が続行され
る。
ステップ1218で、配列SNG_SONGに記憶され
ている対象小節に含まれる現在処理中のフラグメント内
で、フラグメント先頭イベントとフラグメント終了イベ
ントにより指示される範囲のイベントデータ群が、各イ
ベントデータの第2ワードのクロック値に関してソート
される。この処理については図18の動作フローチャー
トを用いて後述する。なお、後述するように、ステップ
1218において実際にイベントデータの入替えが発生
した場合は、ステップ1218内において時間ソート処
理終了フラグの値が0にセットされる。従って、この場
合は図11のステップ1102の処理に戻った時点でそ
の判定がYESとなるため、時間ソート処理が続行され
る。
【0075】ステップ1218の処理の後又はステップ
1217の判定がYESとなった後に、ステップ121
9で、ステップ1214で判定されている現在イベント
データの種類が判定される。
1217の判定がYESとなった後に、ステップ121
9で、ステップ1214で判定されている現在イベント
データの種類が判定される。
【0076】ステップ1219で現在イベントデータが
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合は、ステップ1220で、フ
ラグメント内ソート処理終了フラグの値が1にセットさ
れる。即ち、この場合は、現在処理中のフラグメント以
降に対象小節のイベントデータ群が存在しないため、ス
テップ1220の処理の後にステップ1204が実行さ
れた時点でその判定がNOとなり、フラグメント内ソー
ト処理を終了する。
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合は、ステップ1220で、フ
ラグメント内ソート処理終了フラグの値が1にセットさ
れる。即ち、この場合は、現在処理中のフラグメント以
降に対象小節のイベントデータ群が存在しないため、ス
テップ1220の処理の後にステップ1204が実行さ
れた時点でその判定がNOとなり、フラグメント内ソー
ト処理を終了する。
【0077】また、ステップ1219で現在イベントデ
ータがジャンプイベントデータであると判定された場合
には、ステップ1221で、そのジャンプイベントデー
タの第3ワードに格納されているジャンプ先要素番号
が、サーチイベントの値としてセットされ、また、サー
チ状態フラグの値が0にセットされる。即ち、この場合
は、現在処理中のフラグメント以降に対象小節のイベン
トデータ群が存在する。このため、ステップ1221の
処理によってサーチイベントに新たなフラグメントの先
頭のイベントデータの要素番号が設定された後に、再び
ステップ1204と1205の判定が共にYESとなっ
た後、ステップ1206以降において、配列SNG_S
ONGに記憶されている対象小節に含まれる新たなフラ
グメントに対してフラグメント内ソート処理が実行され
る。
ータがジャンプイベントデータであると判定された場合
には、ステップ1221で、そのジャンプイベントデー
タの第3ワードに格納されているジャンプ先要素番号
が、サーチイベントの値としてセットされ、また、サー
チ状態フラグの値が0にセットされる。即ち、この場合
は、現在処理中のフラグメント以降に対象小節のイベン
トデータ群が存在する。このため、ステップ1221の
処理によってサーチイベントに新たなフラグメントの先
頭のイベントデータの要素番号が設定された後に、再び
ステップ1204と1205の判定が共にYESとなっ
た後、ステップ1206以降において、配列SNG_S
ONGに記憶されている対象小節に含まれる新たなフラ
グメントに対してフラグメント内ソート処理が実行され
る。
【0078】以上説明した図12の動作フローチャート
の処理によって、配列SNG_SONGに記憶されてい
る対象小節内の全てのフラグメントのそれぞれに対し
て、図11のステップ1104のフラグメント内ソート
処理が1回ずつ実行される。
の処理によって、配列SNG_SONGに記憶されてい
る対象小節内の全てのフラグメントのそれぞれに対し
て、図11のステップ1104のフラグメント内ソート
処理が1回ずつ実行される。
【0079】続いて、図13〜図17は、図11のステ
ップ1105のフラグメント間ソート処理の動作フロー
チャートである。まず、フラグメント間ソート処理終了
フラグ(CPU303内のレジスタ又はRAM305に
確保される)は、フラグメント間ソート処理を、終了さ
せるべきでない場合に値0となり、終了させるべきであ
る場合に値1となる。このフラグの値は、ステップ13
01で、0に初期化される。
ップ1105のフラグメント間ソート処理の動作フロー
チャートである。まず、フラグメント間ソート処理終了
フラグ(CPU303内のレジスタ又はRAM305に
確保される)は、フラグメント間ソート処理を、終了さ
せるべきでない場合に値0となり、終了させるべきであ
る場合に値1となる。このフラグの値は、ステップ13
01で、0に初期化される。
【0080】サーチイベント(CPU303内のレジス
タ又はRAM305に確保される)は、現在処理中のイ
ベントデータを指示するものである。このサーチイベン
トの値は、ステップ1302で、配列SNG_SONG
に記憶される対象小節内の先頭のイベントデータの要素
番号にセットされる。
タ又はRAM305に確保される)は、現在処理中のイ
ベントデータを指示するものである。このサーチイベン
トの値は、ステップ1302で、配列SNG_SONG
に記憶される対象小節内の先頭のイベントデータの要素
番号にセットされる。
【0081】第1フラグメント最終イベント要素番号
(CPU303内のレジスタ又はRAM305に確保さ
れる)は、フラグメント間ソート処理が実行されるべき
現在処理中の2つのフラグメントのうちの第1番目のフ
ラグメントにおける、トラック終了イベントデータ、小
節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の末尾のイベント
データの要素番号を指示するものである。この値は、ス
テップ1303で、配列SNG_SONG上の要素番号
として出現し得ない値0xffffにセットされる。
(CPU303内のレジスタ又はRAM305に確保さ
れる)は、フラグメント間ソート処理が実行されるべき
現在処理中の2つのフラグメントのうちの第1番目のフ
ラグメントにおける、トラック終了イベントデータ、小
節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の末尾のイベント
データの要素番号を指示するものである。この値は、ス
テップ1303で、配列SNG_SONG上の要素番号
として出現し得ない値0xffffにセットされる。
【0082】次に、初期状態においては、ステップ13
04の判定がYESとなった後に、ステップ1305で
F1フラグ(CPU303内のレジスタ又はRAM30
5に確保される)の値が0にセットされる。F1フラグ
は、配列SNG_SONGに記憶されている対象小節に
含まれる現在処理中の2つのフラグメントのうちの第1
番目のフラグメントにおいて、トラック終了イベントデ
ータ、小節終了イベントデータ、ジャンプソースイベン
トデータ、及びジャンプイベントデータ以外の末尾のイ
ベントデータをサーチする処理が、終了していない場合
に値0となり、終了している場合に値1となる。
04の判定がYESとなった後に、ステップ1305で
F1フラグ(CPU303内のレジスタ又はRAM30
5に確保される)の値が0にセットされる。F1フラグ
は、配列SNG_SONGに記憶されている対象小節に
含まれる現在処理中の2つのフラグメントのうちの第1
番目のフラグメントにおいて、トラック終了イベントデ
ータ、小節終了イベントデータ、ジャンプソースイベン
トデータ、及びジャンプイベントデータ以外の末尾のイ
ベントデータをサーチする処理が、終了していない場合
に値0となり、終了している場合に値1となる。
【0083】続いて、図14のステップ1306の判定
がYESとなった後、図14のステップ1307〜13
14で、配列SNG_SONGに記憶されている対象小
節に含まれる現在処理中の2つのフラグメントのうちの
第1番目のフラグメントにおいて、トラック終了イベン
トデータ、小節終了イベントデータ、ジャンプソースイ
ベントデータ、及びジャンプイベントデータ以外の末尾
のイベントデータをサーチする処理が実行される。
がYESとなった後、図14のステップ1307〜13
14で、配列SNG_SONGに記憶されている対象小
節に含まれる現在処理中の2つのフラグメントのうちの
第1番目のフラグメントにおいて、トラック終了イベン
トデータ、小節終了イベントデータ、ジャンプソースイ
ベントデータ、及びジャンプイベントデータ以外の末尾
のイベントデータをサーチする処理が実行される。
【0084】まず、ステップ1307で、サーチイベン
トにより指示される現在イベントデータが、RAM30
5内の配列SNG_SONGから読み出される。そし
て、そのイベントデータの種類が判定される。
トにより指示される現在イベントデータが、RAM30
5内の配列SNG_SONGから読み出される。そし
て、そのイベントデータの種類が判定される。
【0085】ステップ1307で現在イベントデータが
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合には、ステップ1308で、
F1フラグとフラグメント間ソート処理終了フラグの値
が共に1にセットされる。即ち、この場合は、現在処理
中の第1番目のフラグメント内にはソート処理を実行す
べき有効な最終イベントデータは存在せず、かつ第1番
目のフラグメント以降に対象小節のイベントデータ群が
存在しないため、ステップ1308の処理の後にステッ
プ1306が実行された時点でその判定がNOとなり、
後述する図15のステップ1315が実行された後、ス
テップ1316に対応する後述する図16の動作フロー
チャートが実行される時点でステップ1601の判定が
NOとなり、更に、図15のステップ1317の判定が
NO、図13のステップ1304の判定がNOとなっ
て、フラグメント間ソート処理を終了する。
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合には、ステップ1308で、
F1フラグとフラグメント間ソート処理終了フラグの値
が共に1にセットされる。即ち、この場合は、現在処理
中の第1番目のフラグメント内にはソート処理を実行す
べき有効な最終イベントデータは存在せず、かつ第1番
目のフラグメント以降に対象小節のイベントデータ群が
存在しないため、ステップ1308の処理の後にステッ
プ1306が実行された時点でその判定がNOとなり、
後述する図15のステップ1315が実行された後、ス
テップ1316に対応する後述する図16の動作フロー
チャートが実行される時点でステップ1601の判定が
NOとなり、更に、図15のステップ1317の判定が
NO、図13のステップ1304の判定がNOとなっ
て、フラグメント間ソート処理を終了する。
【0086】また、図14のステップ1307で現在イ
ベントデータがジャンプイベントデータであると判定さ
れた場合は、ステップ1309で、第1フラグメント最
終イベント要素番号の値がステップ1303で初期設定
されたままの値0xffffであるか否かが判定され
る。
ベントデータがジャンプイベントデータであると判定さ
れた場合は、ステップ1309で、第1フラグメント最
終イベント要素番号の値がステップ1303で初期設定
されたままの値0xffffであるか否かが判定され
る。
【0087】今、配列SNG_SONG内の現在処理中
の2つのフラグメントのうちの第1番目のフラグメント
内に、トラック終了イベントデータ、小節終了イベント
データ、ジャンプソースイベントデータ、及びジャンプ
イベントデータ以外のイベントデータが1つも存在して
いなければ、第1フラグメント最終イベント要素番号の
値は初期設定値0xffffのままとなり、ステップ1
309の判定がYESとなる。この場合には、ステップ
1311で、そのジャンプイベントデータの第3ワード
に格納されている新たなフラグメントを示すジャンプ先
要素番号が、サーチイベントの値としてセットされる。
その後、再びステップ1306の判定がYESとなるこ
とにより、ステップ1307〜1314において、配列
SNG_SONGに記憶されている対象小節に含まれる
新たなフラグメントが現在処理中の2つのフラグメント
のうちの第1番目のフラグメントとされて、処理が続行
される。
の2つのフラグメントのうちの第1番目のフラグメント
内に、トラック終了イベントデータ、小節終了イベント
データ、ジャンプソースイベントデータ、及びジャンプ
イベントデータ以外のイベントデータが1つも存在して
いなければ、第1フラグメント最終イベント要素番号の
値は初期設定値0xffffのままとなり、ステップ1
309の判定がYESとなる。この場合には、ステップ
1311で、そのジャンプイベントデータの第3ワード
に格納されている新たなフラグメントを示すジャンプ先
要素番号が、サーチイベントの値としてセットされる。
その後、再びステップ1306の判定がYESとなるこ
とにより、ステップ1307〜1314において、配列
SNG_SONGに記憶されている対象小節に含まれる
新たなフラグメントが現在処理中の2つのフラグメント
のうちの第1番目のフラグメントとされて、処理が続行
される。
【0088】更に、ステップ1307で現在イベントデ
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
312で現在イベントデータがジャンプソースイベント
データであると判定された場合には、ステップ1314
で、単純にサーチイベントが指示する配列SNG_SO
NGの要素番号がインクリメントされた後に、再びステ
ップ1306からステップ1307の処理に戻る。
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
312で現在イベントデータがジャンプソースイベント
データであると判定された場合には、ステップ1314
で、単純にサーチイベントが指示する配列SNG_SO
NGの要素番号がインクリメントされた後に、再びステ
ップ1306からステップ1307の処理に戻る。
【0089】また、ステップ1307で現在イベントデ
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
312で現在イベントデータがジャンプソースイベント
データ以外の通常のイベントデータであると判定された
場合は、ステップ1313で、サーチイベントの値が第
1フラグメント最終イベント要素番号としてセットされ
る。そして、ステップ1314で、サーチイベントが指
示する配列SNG_SONGの要素番号がインクリメン
トされた後に、再びステップ1306からステップ13
07の処理に戻る。
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
312で現在イベントデータがジャンプソースイベント
データ以外の通常のイベントデータであると判定された
場合は、ステップ1313で、サーチイベントの値が第
1フラグメント最終イベント要素番号としてセットされ
る。そして、ステップ1314で、サーチイベントが指
示する配列SNG_SONGの要素番号がインクリメン
トされた後に、再びステップ1306からステップ13
07の処理に戻る。
【0090】以上のようにして第1フラグメント最終イ
ベント要素番号がインクリメントされてゆき、最後にス
テップ1307でジャンプイベントデータが検出された
時点において第1フラグメント最終イベント要素番号に
セットされている要素番号が、配列SNG_SONGに
記憶されている対象小節に含まれる現在処理中の2つの
フラグメントのうちの第1番目のフラグメントにおいて
見つかった、トラック終了イベントデータ、小節終了イ
ベントデータ、ジャンプソースイベントデータ、及びジ
ャンプイベントデータ以外の末尾のイベントデータの要
素番号となる。その後、ステップ1309の判定がNO
となって、第1番目のフラグメントにおけるサーチ処理
を終了させるべく、ステップ1310で、F1フラグの
値が1にセットされる。そして、ステップ1311で、
そのジャンプイベントデータの第3ワードに格納されて
いる新たなフラグメントを示すジャンプ先要素番号が、
サーチイベントの値としてセットされる。
ベント要素番号がインクリメントされてゆき、最後にス
テップ1307でジャンプイベントデータが検出された
時点において第1フラグメント最終イベント要素番号に
セットされている要素番号が、配列SNG_SONGに
記憶されている対象小節に含まれる現在処理中の2つの
フラグメントのうちの第1番目のフラグメントにおいて
見つかった、トラック終了イベントデータ、小節終了イ
ベントデータ、ジャンプソースイベントデータ、及びジ
ャンプイベントデータ以外の末尾のイベントデータの要
素番号となる。その後、ステップ1309の判定がNO
となって、第1番目のフラグメントにおけるサーチ処理
を終了させるべく、ステップ1310で、F1フラグの
値が1にセットされる。そして、ステップ1311で、
そのジャンプイベントデータの第3ワードに格納されて
いる新たなフラグメントを示すジャンプ先要素番号が、
サーチイベントの値としてセットされる。
【0091】この結果、ステップ1311に続いて実行
されるステップ1306の判定がNOとなり、図15の
ステップ1315でF2フラグ(CPU303内のレジ
スタ又はRAM305に確保される)の値が0にセット
される。F2フラグは、配列SNG_SONGに記憶さ
れている対象小節に含まれる現在処理中の2つのフラグ
メントのうちの第2番目のフラグメントにおいて、トラ
ック終了イベントデータ、小節終了イベントデータ、ジ
ャンプソースイベントデータ、及びジャンプイベントデ
ータ以外の先頭のイベントデータをサーチする処理が、
終了していない場合に値0となり、終了している場合に
値1となる。
されるステップ1306の判定がNOとなり、図15の
ステップ1315でF2フラグ(CPU303内のレジ
スタ又はRAM305に確保される)の値が0にセット
される。F2フラグは、配列SNG_SONGに記憶さ
れている対象小節に含まれる現在処理中の2つのフラグ
メントのうちの第2番目のフラグメントにおいて、トラ
ック終了イベントデータ、小節終了イベントデータ、ジ
ャンプソースイベントデータ、及びジャンプイベントデ
ータ以外の先頭のイベントデータをサーチする処理が、
終了していない場合に値0となり、終了している場合に
値1となる。
【0092】続いて、図15のステップ1316で、配
列SNG_SONGに記憶されている対象小節に含まれ
る現在処理中の2つのフラグメントのうちの第2番目の
フラグメントにおいて、トラック終了イベントデータ、
小節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の先頭のイベント
データをサーチする処理が実行される。
列SNG_SONGに記憶されている対象小節に含まれ
る現在処理中の2つのフラグメントのうちの第2番目の
フラグメントにおいて、トラック終了イベントデータ、
小節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の先頭のイベント
データをサーチする処理が実行される。
【0093】図16は、図15のステップ1316の処
理の詳細を示す動作フローチャートである。まず、最初
はステップ1601の判定がYESとなる。
理の詳細を示す動作フローチャートである。まず、最初
はステップ1601の判定がYESとなる。
【0094】次に、ステップ1602で、サーチイベン
トにより指示される現在イベントデータが、RAM30
5内の配列SNG_SONGから読み出される。そし
て、そのイベントデータの種類が判定される。
トにより指示される現在イベントデータが、RAM30
5内の配列SNG_SONGから読み出される。そし
て、そのイベントデータの種類が判定される。
【0095】ステップ1602で現在イベントデータが
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合には、ステップ1603で、
フラグメント間ソート処理終了フラグの値が1にセット
される。即ち、この場合は、現在処理中の2つのフラグ
メントのうちの第2番目のフラグメント内にはソート処
理を実行すべき有効な先頭イベントデータは存在せず、
かつ第2番目のフラグメント以降に対象小節のイベント
データ群が存在しないため、ステップ1603の処理の
後にステップ1601が実行された時点でその判定がN
Oとなり、図16の動作フローチャートによって示され
る図15のステップ1316の処理を終了する。また、
ステップ1602で現在イベントデータがジャンプイベ
ントデータであると判定された場合には、ステップ16
04で、そのジャンプイベントデータの第3ワードに格
納されているジャンプ先要素番号が、サーチイベントの
値としてセットされる。即ち、この場合には、現在処理
中の2つのフラグメントのうちの第2番目のフラグメン
ト内にはソート処理を実行すべき有効なイベントデータ
は存在せず、かつその第2番目のフラグメント以降に対
象小節のイベントデータ群が存在する。このため、ステ
ップ1604の処理によってサーチイベントに新たなフ
ラグメントの先頭のイベントデータの要素番号が設定さ
れる。その後、再びステップ1601の判定がYESと
なることにより、ステップ1602〜1608におい
て、配列SNG_SONGに記憶されている対象小節に
含まれる新たなフラグメントが現在処理中の2つのフラ
グメントのうちの第2番目のフラグメントとされて、処
理が続行される。
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合には、ステップ1603で、
フラグメント間ソート処理終了フラグの値が1にセット
される。即ち、この場合は、現在処理中の2つのフラグ
メントのうちの第2番目のフラグメント内にはソート処
理を実行すべき有効な先頭イベントデータは存在せず、
かつ第2番目のフラグメント以降に対象小節のイベント
データ群が存在しないため、ステップ1603の処理の
後にステップ1601が実行された時点でその判定がN
Oとなり、図16の動作フローチャートによって示され
る図15のステップ1316の処理を終了する。また、
ステップ1602で現在イベントデータがジャンプイベ
ントデータであると判定された場合には、ステップ16
04で、そのジャンプイベントデータの第3ワードに格
納されているジャンプ先要素番号が、サーチイベントの
値としてセットされる。即ち、この場合には、現在処理
中の2つのフラグメントのうちの第2番目のフラグメン
ト内にはソート処理を実行すべき有効なイベントデータ
は存在せず、かつその第2番目のフラグメント以降に対
象小節のイベントデータ群が存在する。このため、ステ
ップ1604の処理によってサーチイベントに新たなフ
ラグメントの先頭のイベントデータの要素番号が設定さ
れる。その後、再びステップ1601の判定がYESと
なることにより、ステップ1602〜1608におい
て、配列SNG_SONGに記憶されている対象小節に
含まれる新たなフラグメントが現在処理中の2つのフラ
グメントのうちの第2番目のフラグメントとされて、処
理が続行される。
【0096】更に、ステップ1602において現在イベ
ントデータがトラック終了イベントデータ、小節終了イ
ベントデータ、及びジャンプイベントデータ以外のイベ
ントデータであると判定された場合において、更にステ
ップ1605で現在イベントデータがジャンプソースイ
ベントデータであると判定された場合には、ステップ1
608で、単純にサーチイベントが指示する配列SNG
_SONGの要素番号がインクリメントされた後に、再
びステップ1601からステップ1602の処理に戻
る。
ントデータがトラック終了イベントデータ、小節終了イ
ベントデータ、及びジャンプイベントデータ以外のイベ
ントデータであると判定された場合において、更にステ
ップ1605で現在イベントデータがジャンプソースイ
ベントデータであると判定された場合には、ステップ1
608で、単純にサーチイベントが指示する配列SNG
_SONGの要素番号がインクリメントされた後に、再
びステップ1601からステップ1602の処理に戻
る。
【0097】また、ステップ1602で現在イベントデ
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
605で現在イベントデータがジャンプソースイベント
データ以外の通常のイベントデータであると判定された
場合には、ステップ1606で、サーチイベントの値が
第2フラグメント先頭イベント要素番号としてセットさ
れる。この値が、配列SNG_SONGに記憶されてい
る対象小節に含まれる現在処理中の2つのフラグメント
のうちの第2番目のフラグメントにおいて最初に見つか
った、トラック終了イベントデータ、小節終了イベント
データ、ジャンプソースイベントデータ、及びジャンプ
イベントデータ以外の先頭のイベントデータの要素番号
となる。続いて、第2番目のフラグメントにおけるサー
チ処理を終了させるべく、ステップ1607で、F2フ
ラグの値が1にセットされた後、ステップ1608で、
サーチイベントが指示する配列SNG_SONGの要素
番号がインクリメントされる。そして、ステップ160
6〜1608が実行された後にステップ1601が再び
実行される時点で、その判定がNOとなり、図16によ
って示される図15のステップ1316の処理を終了す
る。
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
605で現在イベントデータがジャンプソースイベント
データ以外の通常のイベントデータであると判定された
場合には、ステップ1606で、サーチイベントの値が
第2フラグメント先頭イベント要素番号としてセットさ
れる。この値が、配列SNG_SONGに記憶されてい
る対象小節に含まれる現在処理中の2つのフラグメント
のうちの第2番目のフラグメントにおいて最初に見つか
った、トラック終了イベントデータ、小節終了イベント
データ、ジャンプソースイベントデータ、及びジャンプ
イベントデータ以外の先頭のイベントデータの要素番号
となる。続いて、第2番目のフラグメントにおけるサー
チ処理を終了させるべく、ステップ1607で、F2フ
ラグの値が1にセットされた後、ステップ1608で、
サーチイベントが指示する配列SNG_SONGの要素
番号がインクリメントされる。そして、ステップ160
6〜1608が実行された後にステップ1601が再び
実行される時点で、その判定がNOとなり、図16によ
って示される図15のステップ1316の処理を終了す
る。
【0098】以上のようにして、配列SNG_SONG
に記憶されている対象小節に含まれる現在処理中の2つ
のフラグメントにつき、図14のステップ1307〜1
314で、第1番目のフラグメントの末尾のイベントデ
ータをサーチする処理が成功し、かつ、図16によって
示される図15のステップ1316で、第2番目のフラ
グメントの先頭のイベントデータをサーチする処理に成
功すると、ステップ1317の判定がYESとなった
後、ステップ1318で、第1番目のフラグメントの末
尾のイベントデータと第2番目のフラグメントの先頭の
イベントデータについて、イベント移動処理が実行され
る。
に記憶されている対象小節に含まれる現在処理中の2つ
のフラグメントにつき、図14のステップ1307〜1
314で、第1番目のフラグメントの末尾のイベントデ
ータをサーチする処理が成功し、かつ、図16によって
示される図15のステップ1316で、第2番目のフラ
グメントの先頭のイベントデータをサーチする処理に成
功すると、ステップ1317の判定がYESとなった
後、ステップ1318で、第1番目のフラグメントの末
尾のイベントデータと第2番目のフラグメントの先頭の
イベントデータについて、イベント移動処理が実行され
る。
【0099】図17は、図15のステップ1318のイ
ベント移動処理の動作フローチャートである。この処理
は、本発明に最も関連する処理である。まず、ステップ
1701で、RAM305内の配列SNG_SONGか
ら、第1フラグメント最終イベント要素番号によって指
示される要素番号のイベントデータが読み出されると共
に、第2フラグメント先頭イベント要素番号によって指
示される要素番号のイベントデータが読み出される。そ
して、第1フラグメント最終イベント要素番号に対応す
るイベントデータの第2ワードの値が、第2フラグメン
ト先頭イベント要素番号に対応するイベントデータの第
2ワードの値より大きいか否か、即ち、第1フラグメン
ト最終イベント要素番号に対応するイベントデータが第
2フラグメント先頭イベント要素番号に対応するイベン
トデータよりも後ろに配置されるべきか否かが判定され
る。
ベント移動処理の動作フローチャートである。この処理
は、本発明に最も関連する処理である。まず、ステップ
1701で、RAM305内の配列SNG_SONGか
ら、第1フラグメント最終イベント要素番号によって指
示される要素番号のイベントデータが読み出されると共
に、第2フラグメント先頭イベント要素番号によって指
示される要素番号のイベントデータが読み出される。そ
して、第1フラグメント最終イベント要素番号に対応す
るイベントデータの第2ワードの値が、第2フラグメン
ト先頭イベント要素番号に対応するイベントデータの第
2ワードの値より大きいか否か、即ち、第1フラグメン
ト最終イベント要素番号に対応するイベントデータが第
2フラグメント先頭イベント要素番号に対応するイベン
トデータよりも後ろに配置されるべきか否かが判定され
る。
【0100】ステップ1701の判定がYESの場合に
は、ステップ1702で、第1フラグメントと第2フラ
グメントのイベントデータ群の中で、第2ワードの値が
逆転している状態にある区間について、イベントデータ
群の記憶位置が交換される。これが本発明に関連する最
も大きな特徴である。その後、ステップ1703及び1
704で、フラグメント間ソート処理終了フラグ及び時
間ソート処理終了フラグの値が、共に0にセットされ
る。このように、実際にイベントデータの入替えが発生
した場合には、時間ソート処理終了フラグの値が0にセ
ットされるため、前述した図11のステップ1104の
フラグメント内ソート処理とステップ1105のフラグ
メント間ソート処理が終了した後にステップ1102の
判定に戻った時点で、その判定が再びYESとなり、時
間ソート処理が続行される。
は、ステップ1702で、第1フラグメントと第2フラ
グメントのイベントデータ群の中で、第2ワードの値が
逆転している状態にある区間について、イベントデータ
群の記憶位置が交換される。これが本発明に関連する最
も大きな特徴である。その後、ステップ1703及び1
704で、フラグメント間ソート処理終了フラグ及び時
間ソート処理終了フラグの値が、共に0にセットされ
る。このように、実際にイベントデータの入替えが発生
した場合には、時間ソート処理終了フラグの値が0にセ
ットされるため、前述した図11のステップ1104の
フラグメント内ソート処理とステップ1105のフラグ
メント間ソート処理が終了した後にステップ1102の
判定に戻った時点で、その判定が再びYESとなり、時
間ソート処理が続行される。
【0101】一方、ステップ1701の判定がNOの場
合には、第1フラグメント最終イベント要素番号に対応
するイベントデータと第2フラグメント先頭イベント要
素番号に対応するイベントデータの入替えは実行され
ず、ステップ1705で、フラグメント間ソート処理終
了フラグの値が0にセットされる。
合には、第1フラグメント最終イベント要素番号に対応
するイベントデータと第2フラグメント先頭イベント要
素番号に対応するイベントデータの入替えは実行され
ず、ステップ1705で、フラグメント間ソート処理終
了フラグの値が0にセットされる。
【0102】以上のようにして、配列SNG_SONG
に記憶される対象小節に含まれる現在処理中の2つのフ
ラグメントについて、フラグメント間ソート処理が実現
される。
に記憶される対象小節に含まれる現在処理中の2つのフ
ラグメントについて、フラグメント間ソート処理が実現
される。
【0103】ステップ1704又は1705の処理の
後、再び図13のステップ1304の処理に戻り、その
判定がYESとなることにより、ステップ1305以降
で、配列SNG_SONGに記憶されている対象小節に
含まれる新たな2つのフラグメントにつき、第1番目の
フラグメントの末尾のイベントデータをサーチする処理
と、第2番目のフラグメントの先頭のイベントデータを
サーチする処理と、サーチされた2つのイベントデータ
に対するイベント移動処理の実行が試みられる。この場
合、サーチイベントの値は今まで第2番目であったフラ
グメントの先頭のイベントデータを指示しているため、
今まで第2番目として処理されたフラグメントが新たな
第1番目のフラグメントとして処理される。そして、そ
れに続く対象小節内のフラグメントが第2番目のフラグ
メントとして処理される。
後、再び図13のステップ1304の処理に戻り、その
判定がYESとなることにより、ステップ1305以降
で、配列SNG_SONGに記憶されている対象小節に
含まれる新たな2つのフラグメントにつき、第1番目の
フラグメントの末尾のイベントデータをサーチする処理
と、第2番目のフラグメントの先頭のイベントデータを
サーチする処理と、サーチされた2つのイベントデータ
に対するイベント移動処理の実行が試みられる。この場
合、サーチイベントの値は今まで第2番目であったフラ
グメントの先頭のイベントデータを指示しているため、
今まで第2番目として処理されたフラグメントが新たな
第1番目のフラグメントとして処理される。そして、そ
れに続く対象小節内のフラグメントが第2番目のフラグ
メントとして処理される。
【0104】以上の処理が繰返される結果、対象小節の
末尾のフラグメントが第1番目のフラグメントとして処
理される過程において、ステップ1307でトラック終
了イベントデータ又は小節終了イベントデータが検出さ
れる。これによって、ステップ1308で、F1フラグ
とフラグメント間ソート処理終了フラグの値が共に1に
セットされる。即ち、この場合は、現在処理中の第1番
目のフラグメント内にはソート処理を実行すべき有効な
最終イベントデータは存在せず、かつ第1番目のフラグ
メント以降に対象小節のイベントデータ群が存在しない
ため、ステップ1308の処理の後にステップ1306
が実行された時点でその判定がNOとなり、後述する図
15のステップ1315が実行された後、ステップ13
16に対応する後述する図16の動作フローチャートが
実行される時点でステップ1601の判定がNOとな
り、更に、図15のステップ1317の判定がNO、図
13のステップ1304の判定がNOとなって、フラグ
メント間ソート処理を終了する。
末尾のフラグメントが第1番目のフラグメントとして処
理される過程において、ステップ1307でトラック終
了イベントデータ又は小節終了イベントデータが検出さ
れる。これによって、ステップ1308で、F1フラグ
とフラグメント間ソート処理終了フラグの値が共に1に
セットされる。即ち、この場合は、現在処理中の第1番
目のフラグメント内にはソート処理を実行すべき有効な
最終イベントデータは存在せず、かつ第1番目のフラグ
メント以降に対象小節のイベントデータ群が存在しない
ため、ステップ1308の処理の後にステップ1306
が実行された時点でその判定がNOとなり、後述する図
15のステップ1315が実行された後、ステップ13
16に対応する後述する図16の動作フローチャートが
実行される時点でステップ1601の判定がNOとな
り、更に、図15のステップ1317の判定がNO、図
13のステップ1304の判定がNOとなって、フラグ
メント間ソート処理を終了する。
【0105】最後に、図18は、図12のステップ12
18において実行される、配列SNG_SONGに記憶
されている対象小節に含まれる現在処理中のフラグメン
ト内の、フラグメント先頭イベントとフラグメント終了
イベントによって指示される範囲のイベントデータ群に
対する時間ソート処理を示す動作フローチャートであ
る。
18において実行される、配列SNG_SONGに記憶
されている対象小節に含まれる現在処理中のフラグメン
ト内の、フラグメント先頭イベントとフラグメント終了
イベントによって指示される範囲のイベントデータ群に
対する時間ソート処理を示す動作フローチャートであ
る。
【0106】ここでは、フラグメント先頭イベントとフ
ラグメント終了イベントにより指示される範囲のイベン
トデータ群が、各イベントデータの第2ワードのクロッ
ク値に関してソートされる。
ラグメント終了イベントにより指示される範囲のイベン
トデータ群が、各イベントデータの第2ワードのクロッ
ク値に関してソートされる。
【0107】以下の説明では、図18の動作フローチャ
ートについて説明する前に、ソートアルゴリズムの代表
例と、本実施の形態で採用する改良アルゴリズムの原理
について簡単に説明する。なお、以下で説明するバブル
ソートアルゴリズムとコムソートアルゴリズムの詳細な
原理については、文献「バブル・ソートが簡単な手直し
で劇的に速くなる」(スティーブン・レイシー、リチャ
ード・ボックス)(日経BP社発行、日経バイト/19
91年11月号、p.305〜p.312)に記載され
ている。
ートについて説明する前に、ソートアルゴリズムの代表
例と、本実施の形態で採用する改良アルゴリズムの原理
について簡単に説明する。なお、以下で説明するバブル
ソートアルゴリズムとコムソートアルゴリズムの詳細な
原理については、文献「バブル・ソートが簡単な手直し
で劇的に速くなる」(スティーブン・レイシー、リチャ
ード・ボックス)(日経BP社発行、日経バイト/19
91年11月号、p.305〜p.312)に記載され
ている。
【0108】ソートアルゴリズムの最も代表的なものと
して、バブルソートアルゴリズムが知られている。この
アルゴリズムにおいては、例えば昇べきの順にソートが
行われる場合には、まず、第1番目のイベントデータ値
(第2バイトの値)と第2番目のイベントデータ値の大
小関係が比較され、第1番目のイベントデータ値の方が
大きければ両者のイベントデータが入れ替えられる。次
に、新たな第2番目のイベントデータ値と第3番目のイ
ベントデータ値の大小関係が同様に比較され入替えが実
行される。このようにして、最終イベントデータまで同
様の比較・入替え処理が実行される。この最終データま
での1回の処理単位を、ストロークと呼ぶ。続いて、再
び、第1番目のイベントデータから最終イベントデータ
に向かって第2ストローク目の処理が繰り返される。そ
して、このストローク処理が、イベントデータの入替え
が発生しなくなるまで繰り返される。
して、バブルソートアルゴリズムが知られている。この
アルゴリズムにおいては、例えば昇べきの順にソートが
行われる場合には、まず、第1番目のイベントデータ値
(第2バイトの値)と第2番目のイベントデータ値の大
小関係が比較され、第1番目のイベントデータ値の方が
大きければ両者のイベントデータが入れ替えられる。次
に、新たな第2番目のイベントデータ値と第3番目のイ
ベントデータ値の大小関係が同様に比較され入替えが実
行される。このようにして、最終イベントデータまで同
様の比較・入替え処理が実行される。この最終データま
での1回の処理単位を、ストロークと呼ぶ。続いて、再
び、第1番目のイベントデータから最終イベントデータ
に向かって第2ストローク目の処理が繰り返される。そ
して、このストローク処理が、イベントデータの入替え
が発生しなくなるまで繰り返される。
【0109】以上のバブルソートアルゴリズムは、隣り
同士のイベントデータ値の比較・入替え処理の繰返しに
よって実現されるため、処理プログラムが簡単に実現で
きる反面、イベントデータは1回の比較・入替え処理に
よって1アドレス分だけしか移動できないため、例えば
フラグメントの後部に位置するイベントデータがフラグ
メントの先頭付近に移動させられる場合には処理時間が
長くなってしまう。
同士のイベントデータ値の比較・入替え処理の繰返しに
よって実現されるため、処理プログラムが簡単に実現で
きる反面、イベントデータは1回の比較・入替え処理に
よって1アドレス分だけしか移動できないため、例えば
フラグメントの後部に位置するイベントデータがフラグ
メントの先頭付近に移動させられる場合には処理時間が
長くなってしまう。
【0110】そこで、そのようなバブルソートアルゴリ
ズムの欠点を改良するアルゴリズムとして、コムソート
アルゴリズムが知られている。このアルゴリズムでは、
バブルソートアルゴリズムのように隣接したイベントデ
ータ値同士について比較・入替えが実行されるのではな
く、1以上離れた間隔(以下、この間隔をギャップとい
う)のイベントデータ値同士について、比較・入替えが
実行される。
ズムの欠点を改良するアルゴリズムとして、コムソート
アルゴリズムが知られている。このアルゴリズムでは、
バブルソートアルゴリズムのように隣接したイベントデ
ータ値同士について比較・入替えが実行されるのではな
く、1以上離れた間隔(以下、この間隔をギャップとい
う)のイベントデータ値同士について、比較・入替えが
実行される。
【0111】具体的には、次のようなコムソートアルゴ
リズムが最適であることが実験的に確かめられている。
即ち、まず、最初のストローク処理(第1番目のイベン
トデータから最終イベントデータまでの1回の処理)に
おけるギャップの値は、ソート処理されるイベントデー
タの要素数を1.3で割って得られる値とされる。以
下、ストロークが進む毎に、前回のギャップの値を1.
3で割って得られる値が新たなギャップの値とされる。
この過程で、ギャップの値が9又は10となった時点
で、ギャップの値が強制的に11に置き換えられて処理
が続行される。商が1未満になると、それ以降のギャッ
プの値は1とされる。そして、ギャップの値が1とな
り、かつストローク処理においてイベントデータの入替
えが発生しなくなった時点で、ソート処理が終了する。
リズムが最適であることが実験的に確かめられている。
即ち、まず、最初のストローク処理(第1番目のイベン
トデータから最終イベントデータまでの1回の処理)に
おけるギャップの値は、ソート処理されるイベントデー
タの要素数を1.3で割って得られる値とされる。以
下、ストロークが進む毎に、前回のギャップの値を1.
3で割って得られる値が新たなギャップの値とされる。
この過程で、ギャップの値が9又は10となった時点
で、ギャップの値が強制的に11に置き換えられて処理
が続行される。商が1未満になると、それ以降のギャッ
プの値は1とされる。そして、ギャップの値が1とな
り、かつストローク処理においてイベントデータの入替
えが発生しなくなった時点で、ソート処理が終了する。
【0112】以上のコムソートアルゴリズムが、最も高
速なソートアルゴリズムとして知られている。しかし、
上述のコムソートアルゴリズムでは、ストロークが進む
毎にソート処理されるべき要素数又は前回のギャップ値
を1.3で割ることにより新たなギャップの値を算出す
る処理が必要となる。このことは、上記除算処理のため
に小数演算用コプロセッサが必要になるということを意
味するため、ハードウエア規模が大きくなってしまうと
いう欠点がある。
速なソートアルゴリズムとして知られている。しかし、
上述のコムソートアルゴリズムでは、ストロークが進む
毎にソート処理されるべき要素数又は前回のギャップ値
を1.3で割ることにより新たなギャップの値を算出す
る処理が必要となる。このことは、上記除算処理のため
に小数演算用コプロセッサが必要になるということを意
味するため、ハードウエア規模が大きくなってしまうと
いう欠点がある。
【0113】そこで、本実施の形態では、コムソートア
ルゴリズムを基本とし、値1.3による除算処理を、値
3の乗算処理と値4の除算処理で置き換えたアルゴリズ
ムが採用される。即ち、値1.3による除算処理が値
(3/4)による除算処理に置き換えられたことにな
る。これにより、小数演算用コプロセッサが不要とな
り、ハードウエア規模の増大を抑えることができる。な
お、このようにギャップ値が代用されても、ソート時間
の増大はそれほど大きくならない。
ルゴリズムを基本とし、値1.3による除算処理を、値
3の乗算処理と値4の除算処理で置き換えたアルゴリズ
ムが採用される。即ち、値1.3による除算処理が値
(3/4)による除算処理に置き換えられたことにな
る。これにより、小数演算用コプロセッサが不要とな
り、ハードウエア規模の増大を抑えることができる。な
お、このようにギャップ値が代用されても、ソート時間
の増大はそれほど大きくならない。
【0114】図18は、上述のアルゴリズムに基づく図
12のステップ1218の処理の詳細な動作フローチャ
ートである。図18の動作フローチャートにおいて、ま
ず、SIZE(CPU303内のレジスタ又はRAM3
05に確保される)には、ソート処理の対象となるフラ
グメントの要素数がセットされる。この数は、(フラグ
メント終了イベント−フラグメント先頭イベント+1)
として算出できる。
12のステップ1218の処理の詳細な動作フローチャ
ートである。図18の動作フローチャートにおいて、ま
ず、SIZE(CPU303内のレジスタ又はRAM3
05に確保される)には、ソート処理の対象となるフラ
グメントの要素数がセットされる。この数は、(フラグ
メント終了イベント−フラグメント先頭イベント+1)
として算出できる。
【0115】次に、GAP(CPU303内のレジスタ
又はRAM305に確保される)には、前述のギャップ
の値がセットされる。また、TOP(CPU303内の
レジスタ又はRAM305に確保される)には、後述す
るイベント移動ループ処理時の上限のイベントの要素値
がセットされる。
又はRAM305に確保される)には、前述のギャップ
の値がセットされる。また、TOP(CPU303内の
レジスタ又はRAM305に確保される)には、後述す
るイベント移動ループ処理時の上限のイベントの要素値
がセットされる。
【0116】更に、COUNTER(CPU303内の
レジスタ又はRAM305に確保される)には、後述す
る移動イベントカウンタ値がセットされる。図18の動
作フローチャートにおいて、まず、ステップ1801
で、GAPにSIZEの値がセットされる。次に、前述
した除算処理の簡略化原理に基づき、ステップ1802
において、GAPの値に整数値3を乗算する整数乗算処
理が実行され、更に、その乗算結果を整数値4で除算す
る整数除算処理が実行される。この除算処理は、実際に
は、2ビット右シフト演算として実現できる。この演算
結果が新たなGAPの値としてセットされる。
レジスタ又はRAM305に確保される)には、後述す
る移動イベントカウンタ値がセットされる。図18の動
作フローチャートにおいて、まず、ステップ1801
で、GAPにSIZEの値がセットされる。次に、前述
した除算処理の簡略化原理に基づき、ステップ1802
において、GAPの値に整数値3を乗算する整数乗算処
理が実行され、更に、その乗算結果を整数値4で除算す
る整数除算処理が実行される。この除算処理は、実際に
は、2ビット右シフト演算として実現できる。この演算
結果が新たなGAPの値としてセットされる。
【0117】次に、ステップ1803で新たに算出され
たGAPの値が判定され、GAPの値が9又は10の場
合には、前述した最適化されたコムソートのアルゴリズ
ムの原理に基づいて、ステップ1804で、GAPの値
が11に修正される。また、GAPの値が0となってし
まった場合には、やはり前述した最適化されたコムソー
トのアルゴリズムの原理に基づいて、ステップ1805
で、GAPの値が1に修正される。GAPの値が9、1
0、又は0の何れでもない場合には、GAPの値の修正
は行われない。
たGAPの値が判定され、GAPの値が9又は10の場
合には、前述した最適化されたコムソートのアルゴリズ
ムの原理に基づいて、ステップ1804で、GAPの値
が11に修正される。また、GAPの値が0となってし
まった場合には、やはり前述した最適化されたコムソー
トのアルゴリズムの原理に基づいて、ステップ1805
で、GAPの値が1に修正される。GAPの値が9、1
0、又は0の何れでもない場合には、GAPの値の修正
は行われない。
【0118】次に、ステップ1806で、COUNTE
Rの値が0にセットされる。続いて、ステップ1807
で、第1イベント要素番号(CPU303内のレジスタ
又はRAM305に確保される)に、図12の動作フロ
ーチャートにおいて求まっているフラグメント先頭イベ
ントにセットされている要素番号がセットされる。この
第1イベント要素番号は、後述するイベント移動ループ
処理において比較される2つのイベントデータのうち要
素番号が小さい方のイベントデータに対応する。
Rの値が0にセットされる。続いて、ステップ1807
で、第1イベント要素番号(CPU303内のレジスタ
又はRAM305に確保される)に、図12の動作フロ
ーチャートにおいて求まっているフラグメント先頭イベ
ントにセットされている要素番号がセットされる。この
第1イベント要素番号は、後述するイベント移動ループ
処理において比較される2つのイベントデータのうち要
素番号が小さい方のイベントデータに対応する。
【0119】次に、TOPの値が、次の数1式により算
出されセットされる。
出されセットされる。
【0120】
【数1】 TOP=フラグメント先頭イベント+SIZE−GAP このTOPの値は、次に説明するイベント移動ループ処
理においてインクリメントすることのできる第1イベン
ト要素番号の上限値に対応する。
理においてインクリメントすることのできる第1イベン
ト要素番号の上限値に対応する。
【0121】続いて、ステップ1809〜1814→1
815→1809のイベント移動ループ処理が実行され
る。ここでは、1ストローク分のイベントデータの比較
・入替え処理が実行される。
815→1809のイベント移動ループ処理が実行され
る。ここでは、1ストローク分のイベントデータの比較
・入替え処理が実行される。
【0122】まず、ステップ1809では、第2イベン
ト要素番号(CPU303内のレジスタ又はRAM30
5に確保される)の値が、次の数2式によって算出され
セットされる。
ト要素番号(CPU303内のレジスタ又はRAM30
5に確保される)の値が、次の数2式によって算出され
セットされる。
【0123】
【数2】 第2イベント要素番号=第1イベント要素番号+GAP この第2イベント要素番号は、イベント移動ループ処理
において比較される2つのイベントデータのうち要素番
号が大きい方のイベントデータに対応する。
において比較される2つのイベントデータのうち要素番
号が大きい方のイベントデータに対応する。
【0124】ステップ1810では、RAM305の配
列SNG_SONG(図5(c) )に記憶される第1イベ
ント要素番号に対応するイベントデータの第2ワードの
小節先頭からのクロック値が、同じく第2イベント要素
番号に対応するイベントデータの第2ワードの小節先頭
からのクロック値よりも大きいか否か、即ち、第1イベ
ント要素番号に対応するイベントデータが第2イベント
要素番号に対応するイベントデータよりも後ろに配置さ
れるべきか否かが判定される。
列SNG_SONG(図5(c) )に記憶される第1イベ
ント要素番号に対応するイベントデータの第2ワードの
小節先頭からのクロック値が、同じく第2イベント要素
番号に対応するイベントデータの第2ワードの小節先頭
からのクロック値よりも大きいか否か、即ち、第1イベ
ント要素番号に対応するイベントデータが第2イベント
要素番号に対応するイベントデータよりも後ろに配置さ
れるべきか否かが判定される。
【0125】ステップ1810の判定がYESの場合に
は、ステップ1811で、第1イベント要素番号に対応
するイベントデータと第2イベント要素番号に対応する
イベントデータの記憶位置が入れ替えられる。その後、
ステップ1812で、COUNTERの値がインクリメ
ントされる。更に、ステップ1813で、時間ソート処
理終了フラグの値が、0にセットされる。このように、
実際にイベントデータの入替えが発生した場合は、時間
ソート処理終了フラグの値が0にセットされるため、前
述の図11のステップ1104のフラグメント内ソート
処理とステップ1105のフラグメント間ソート処理が
終了した後にステップ1102の判定に戻った時点で、
その判定が再びYESとなり、時間ソート処理が続行さ
れる。
は、ステップ1811で、第1イベント要素番号に対応
するイベントデータと第2イベント要素番号に対応する
イベントデータの記憶位置が入れ替えられる。その後、
ステップ1812で、COUNTERの値がインクリメ
ントされる。更に、ステップ1813で、時間ソート処
理終了フラグの値が、0にセットされる。このように、
実際にイベントデータの入替えが発生した場合は、時間
ソート処理終了フラグの値が0にセットされるため、前
述の図11のステップ1104のフラグメント内ソート
処理とステップ1105のフラグメント間ソート処理が
終了した後にステップ1102の判定に戻った時点で、
その判定が再びYESとなり、時間ソート処理が続行さ
れる。
【0126】一方、ステップ1810の判定がNOの場
合には、ステップ1811〜1813の処理は実行され
ない。続いて、ステップ1814で、第1イベント要素
番号の値がTOPの値より小さいか否かが判定される。
合には、ステップ1811〜1813の処理は実行され
ない。続いて、ステップ1814で、第1イベント要素
番号の値がTOPの値より小さいか否かが判定される。
【0127】ステップ1814の判定がYESなら、ス
テップ1815で第1イベント要素番号の値がインクリ
メントされた後、ステップ1809で第1イベント要素
番号からGAPの値分だけ離れた新たな第2イベント要
素番号の値が算出され、ステップ1810〜1813
で、両者に対する比較・入替えの処理が実行される。
テップ1815で第1イベント要素番号の値がインクリ
メントされた後、ステップ1809で第1イベント要素
番号からGAPの値分だけ離れた新たな第2イベント要
素番号の値が算出され、ステップ1810〜1813
で、両者に対する比較・入替えの処理が実行される。
【0128】以上のステップ1809〜1815の処理
がステップ1814の判定がNOとなるまで繰り返され
ることにより、1ストローク分のイベントデータの比較
・入替え処理が実行される。
がステップ1814の判定がNOとなるまで繰り返され
ることにより、1ストローク分のイベントデータの比較
・入替え処理が実行される。
【0129】次に、ステップ1814の判定がNOとな
り1ストローク分のイベントデータの比較・入替え処理
が終了すると、ステップ1815で、COUNTERの
値が0でないか(即ち、直前にイベントデータの入替え
が行われたか)、又はGAPの値が1より大きいかが判
定される。
り1ストローク分のイベントデータの比較・入替え処理
が終了すると、ステップ1815で、COUNTERの
値が0でないか(即ち、直前にイベントデータの入替え
が行われたか)、又はGAPの値が1より大きいかが判
定される。
【0130】ステップ1816の判定がYESなら、ス
テップ1802〜1805に戻って新たなストロークの
ためのGAPの値が算出され、ステップ1806〜18
08の処理の後、前述したステップ1809〜1815
のイベント移動ループ処理によって、新たなストローク
に対するイベントデータの比較・入替え処理が繰り返さ
れる。
テップ1802〜1805に戻って新たなストロークの
ためのGAPの値が算出され、ステップ1806〜18
08の処理の後、前述したステップ1809〜1815
のイベント移動ループ処理によって、新たなストローク
に対するイベントデータの比較・入替え処理が繰り返さ
れる。
【0131】GAPの値が1となり、かつ前述したイベ
ント移動ループ処理によってイベントデータの入替えが
発生しなくなり、ステップ1816の判定がNOとなっ
た時点で、図18によって示される図12のステップ1
218のフラグメント内のソート処理が終了する。イベントリストモード処理 次に、図1の変更スイッチ106が押された場合に実行
されるイベントリストモード処理について説明する。
ント移動ループ処理によってイベントデータの入替えが
発生しなくなり、ステップ1816の判定がNOとなっ
た時点で、図18によって示される図12のステップ1
218のフラグメント内のソート処理が終了する。イベントリストモード処理 次に、図1の変更スイッチ106が押された場合に実行
されるイベントリストモード処理について説明する。
【0132】変更スイッチ106が押されると、前述し
たように、図8のスイッチ処理802内の図9のステッ
プ906の判定がYESとなることにより、図9のステ
ップ907で、イベントリストモード処理が実行され
る。
たように、図8のスイッチ処理802内の図9のステッ
プ906の判定がYESとなることにより、図9のステ
ップ907で、イベントリストモード処理が実行され
る。
【0133】今、予め入力されているシーケンスデータ
のコマンド種類が変更される場合、調コマンド、拍コマ
ンド、又はテンポコマンドなどの特殊コマンドに変更さ
れる場合には、変更後のそれらのコマンドが小節の先頭
位置に並び替えられる必要がある。もし、このような並
び替えが行われない場合には、いわゆるコケや音飛び等
が発生してしまう。以下に説明するイベントリストモー
ド処理は、上述のような並び替え処理を実現するもので
ある。
のコマンド種類が変更される場合、調コマンド、拍コマ
ンド、又はテンポコマンドなどの特殊コマンドに変更さ
れる場合には、変更後のそれらのコマンドが小節の先頭
位置に並び替えられる必要がある。もし、このような並
び替えが行われない場合には、いわゆるコケや音飛び等
が発生してしまう。以下に説明するイベントリストモー
ド処理は、上述のような並び替え処理を実現するもので
ある。
【0134】図9は、本実施の形態におけるコマンド変
更処理の外観を示す図である。まず、カーソルキー10
5の操作により家庭用テレビ102の表示画面上でカー
ソルを移動させることができる(図9(a) )。
更処理の外観を示す図である。まず、カーソルキー10
5の操作により家庭用テレビ102の表示画面上でカー
ソルを移動させることができる(図9(a) )。
【0135】次に、任意のカーソル位置で図1の変更ス
イッチ106を押すことにより、現在のカーソル位置が
コマンド種類の表示位置上にある場合には、変更スイッ
チ106が押される毎にコマンド種類が変更される(図
9(b) )。
イッチ106を押すことにより、現在のカーソル位置が
コマンド種類の表示位置上にある場合には、変更スイッ
チ106が押される毎にコマンド種類が変更される(図
9(b) )。
【0136】このような変更が行われた直後に、変更後
のコマンドが前述した特殊コマンドである場合には、イ
ベントリストモード処理内の時間ソート処理によって、
その特殊コマンドが自動的に小節の先頭位置に移動させ
られる(図9(c) )。
のコマンドが前述した特殊コマンドである場合には、イ
ベントリストモード処理内の時間ソート処理によって、
その特殊コマンドが自動的に小節の先頭位置に移動させ
られる(図9(c) )。
【0137】図20は、図9のステップ907のイベン
トリストモード処理を示す動作フローチャートである。
まず、ステップ2001で、変更スイッチ106が押さ
れた時点においてカーソルによって現在選択されている
項目がコマンドであるかパラメータであるかが判定され
る。
トリストモード処理を示す動作フローチャートである。
まず、ステップ2001で、変更スイッチ106が押さ
れた時点においてカーソルによって現在選択されている
項目がコマンドであるかパラメータであるかが判定され
る。
【0138】ステップ2001で、現在選択されている
項目がコマンドであると判定された場合には、ステップ
2002で、現在のカーソル位置に対応するイベントデ
ータのコマンド種類(図6、図7参照)が、所定の変更
規則に従って変更される。
項目がコマンドであると判定された場合には、ステップ
2002で、現在のカーソル位置に対応するイベントデ
ータのコマンド種類(図6、図7参照)が、所定の変更
規則に従って変更される。
【0139】次に、ステップ2003で、変更後の新た
なコマンドの種類が判定される。ステップ2003にお
いて、変更後の新たなコマンドの種類が調コマンド、拍
コマンド、又はテンポコマンドなどの特殊コマンド以外
のコマンドであると判定された場合には、そのまま図9
のステップ907のイベントリストモード処理を終了す
る。
なコマンドの種類が判定される。ステップ2003にお
いて、変更後の新たなコマンドの種類が調コマンド、拍
コマンド、又はテンポコマンドなどの特殊コマンド以外
のコマンドであると判定された場合には、そのまま図9
のステップ907のイベントリストモード処理を終了す
る。
【0140】ステップ2003において、変更後の新た
なコマンドの種類が調コマンド、拍コマンド、又はテン
ポコマンドなどの特殊コマンドであると判定された場合
は、まず、ステップ2004で、変更されたイベントデ
ータの小節先頭からのクロック値を示す第2ワードの値
が、0に設定される。更に、ステップ2005で、変更
されたイベントデータが所属する小節について、前述し
た図11〜図18の時間ソート処理が実行される。変更
されたイベントデータの第2ワードの値が0にされたた
め、この時間ソート処理の結果、変更後の特殊コマンド
が小節の先頭に並び替えられる。その後、図9のステッ
プ907のイベントリストモード処理を終了する。
なコマンドの種類が調コマンド、拍コマンド、又はテン
ポコマンドなどの特殊コマンドであると判定された場合
は、まず、ステップ2004で、変更されたイベントデ
ータの小節先頭からのクロック値を示す第2ワードの値
が、0に設定される。更に、ステップ2005で、変更
されたイベントデータが所属する小節について、前述し
た図11〜図18の時間ソート処理が実行される。変更
されたイベントデータの第2ワードの値が0にされたた
め、この時間ソート処理の結果、変更後の特殊コマンド
が小節の先頭に並び替えられる。その後、図9のステッ
プ907のイベントリストモード処理を終了する。
【0141】一方、ステップ2001で、現在選択され
ている項目がパラメータであると判定された場合には、
ステップ2006で、現在のカーソル位置に対応するイ
ベントデータのパラメータ値が、所定の変更規則に従っ
て変更される。その後、図9のステップ907のイベン
トリストモード処理を終了する。他の実施の形態 以上説明した実施の形態では、時間ソート処理は、コピ
ー処理とコマンド変更処理に適用されたが、本発明はこ
れに限定されるものではなく、様々な処理に時間ソート
処理を適用することができる。
ている項目がパラメータであると判定された場合には、
ステップ2006で、現在のカーソル位置に対応するイ
ベントデータのパラメータ値が、所定の変更規則に従っ
て変更される。その後、図9のステップ907のイベン
トリストモード処理を終了する。他の実施の形態 以上説明した実施の形態では、時間ソート処理は、コピ
ー処理とコマンド変更処理に適用されたが、本発明はこ
れに限定されるものではなく、様々な処理に時間ソート
処理を適用することができる。
【0142】
【発明の効果】本発明によれば、複数のフラグメントに
属するシーケンスデータ全体に対するソート処理が、フ
ラグメント内ソート処理とフラグメント間ソート処理の
繰返しという処理構造に単純化される結果、フラグメン
ト内ソート処理に対して、従来からある通常のシーケン
スデータに対する高速ソート処理アルゴリズムを適用す
ることが可能となる。この結果、複数のフラグメントに
属するシーケンスデータ全体に対する高速なソート処理
を、単純な制御で実現することが可能となる。
属するシーケンスデータ全体に対するソート処理が、フ
ラグメント内ソート処理とフラグメント間ソート処理の
繰返しという処理構造に単純化される結果、フラグメン
ト内ソート処理に対して、従来からある通常のシーケン
スデータに対する高速ソート処理アルゴリズムを適用す
ることが可能となる。この結果、複数のフラグメントに
属するシーケンスデータ全体に対する高速なソート処理
を、単純な制御で実現することが可能となる。
【0143】また、フラグメント間ソート処理におい
て、ソート対象の所定の属性の大小関係が逆転している
区間について一括して交換が行われるため、複数のフラ
グメントにまたがるソート処理を高速化することが可能
となる。
て、ソート対象の所定の属性の大小関係が逆転している
区間について一括して交換が行われるため、複数のフラ
グメントにまたがるソート処理を高速化することが可能
となる。
【図1】本発明の実施の形態の外観図(その1)であ
る。
る。
【図2】本発明の実施の形態の外観図(その2)であ
る。
る。
【図3】本発明の実施の形態に係るシーケンサ装置の構
成図である。
成図である。
【図4】RAM305に記憶される楽曲データのデータ
フォーマットを示す図(その1)である。
フォーマットを示す図(その1)である。
【図5】RAM305に記憶される楽曲データのデータ
フォーマットを示す図(その2)である。
フォーマットを示す図(その2)である。
【図6】ノートイベントデータとコントロールイベント
データのデータフォーマットを示す図である。
データのデータフォーマットを示す図である。
【図7】ジャンプイベントデータ群のデータフォーマッ
トを示す図である。
トを示す図である。
【図8】メインフローを示す図である。
【図9】スイッチ処理の動作フローチャートである。
【図10】コピー処理の動作フローチャートである。
【図11】時間ソート処理の全体動作フローチャートで
ある。
ある。
【図12】フラグメント内ソート処理の動作フローチャ
ートである。
ートである。
【図13】フラグメント間ソート処理の動作フローチャ
ート(その1)である。
ート(その1)である。
【図14】フラグメント間ソート処理の動作フローチャ
ート(その2)である。
ート(その2)である。
【図15】フラグメント間ソート処理の動作フローチャ
ート(その3)である。
ート(その3)である。
【図16】第2フラグメント先頭イベントサーチ処理の
動作フローチャートである。
動作フローチャートである。
【図17】イベント移動処理の動作フローチャートであ
る。
る。
【図18】フラグメント内のイベントソート処理を示す
動作フローチャートである。
動作フローチャートである。
【図19】本発明の実施の形態の外観図(その3)であ
る。
る。
【図20】イベントリストモード処理の動作フローチャ
ートである。
ートである。
101 シーケンサ装置 102 家庭用テレビ 103 コピースイッチ 104 取消スイッチ 105 カーソルキー 106 変更スイッチ 301 演奏情報入力部 302 表示部 303 CPU 304 ROM 305 RAM 306 演奏情報出力部 307 システム操作子群
Claims (2)
- 【請求項1】 複数の連続するシーケンスデータ群から
構成されるフラグメントを単位として前記シーケンスデ
ータを記憶するメモリを有し、該メモリに記憶される所
定の複数のフラグメントに属するシーケンスデータ全体
に対し、前記シーケンスデータが有する所定の属性に関
してソート処理を実行するソート処理装置において、 前記所定の複数のフラグメントのそれぞれについて、該
各フラグメントに属するシーケンスデータに対して、前
記所定の属性に関して該各フラグメント内で閉じたソー
ト処理を実行するフラグメント内ソート処理手段と、 該フラグメント内ソート処理手段による処理に続いて、
前記所定の複数のフラグメント中の隣接するフラグメン
ト同士で、それらの接続部の前記所定の属性の大小関係
が逆転状態にある区間に位置するシーケンスデータ群に
対して、前記所定の属性に関してソート処理を実行する
フラグメント間ソート処理手段と、 前記フラグメント内ソート処理手段による処理と前記フ
ラグメント間ソート処理手段による処理を、ソート処理
の対象となったシーケンスデータの入替えが発生しなく
なるまで繰り返させる制御手段と、 を有することを特徴とするシーケンスデータのソート処
理装置。 - 【請求項2】 複数の連続するシーケンスデータ群から
構成されるフラグメントを単位としてメモリに記憶され
る前記シーケンスデータについて、該メモリに記憶され
る所定の複数のフラグメントに属するシーケンスデータ
全体に対し、前記シーケンスデータが有する所定の属性
に関してソート処理を実行するソート処理方法におい
て、 前記所定の複数のフラグメントのそれぞれについて、該
各フラグメントに属するシーケンスデータに対して、前
記所定の属性に関して該各フラグメント内で閉じたソー
ト処理を実行する処理であるフラグメント内ソート処理
を実行し、 該フラグメント内ソート処理に続いて、前記所定の複数
のフラグメント中の隣接するフラグメント同士で、それ
らの接続部の前記所定の属性の大小関係が逆転状態にあ
る区間に位置するシーケンスデータ群に対して、前記所
定の属性に関してソート処理を実行する処理であるフラ
グメント間ソート処理を実行し、 前記フラグメント内ソート処理及び前記フラグメント間
ソート処理を、ソート処理の対象となったシーケンスデ
ータの入替えが発生しなくなるまで繰り返させる、 ことを特徴とするシーケンスデータのソート処理方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7233590A JPH0981368A (ja) | 1995-09-12 | 1995-09-12 | シーケンスデータのソート処理装置/方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP7233590A JPH0981368A (ja) | 1995-09-12 | 1995-09-12 | シーケンスデータのソート処理装置/方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0981368A true JPH0981368A (ja) | 1997-03-28 |
Family
ID=16957452
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP7233590A Withdrawn JPH0981368A (ja) | 1995-09-12 | 1995-09-12 | シーケンスデータのソート処理装置/方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0981368A (ja) |
-
1995
- 1995-09-12 JP JP7233590A patent/JPH0981368A/ja not_active Withdrawn
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3516406B2 (ja) | カラオケオーサリング装置 | |
| JPH11341350A (ja) | マルチメディア情報編集および再生装置、マルチメディア情報再生プログラムを記録した記録媒体ならびにシーケンス情報を記録した記録媒体 | |
| KR100252399B1 (ko) | 음악 정보 기록 및 재생 방법, 재생 장치 | |
| US6635816B2 (en) | Editor for musical performance data | |
| US5672837A (en) | Automatic performance control apparatus and musical data storing device | |
| JP3700532B2 (ja) | 演奏情報編集再生装置 | |
| US7323630B2 (en) | Automatic performance system | |
| JP3533481B2 (ja) | シーケンスデータの挿入処理装置 | |
| JP3489236B2 (ja) | シーケンスデータのソート処理装置/方法 | |
| JPH0981368A (ja) | シーケンスデータのソート処理装置/方法 | |
| JP6657693B2 (ja) | 波形書き込み装置、方法、プログラム、及び電子楽器 | |
| JP3933156B2 (ja) | 演奏情報編集装置及び演奏情報編集方法、並びに演奏情報編集プログラムを記録したコンピュータ読み取り可能な記録媒体 | |
| US6956161B2 (en) | Musical performance data search system | |
| JPH08185164A (ja) | 自動演奏制御装置及びそれに使用する楽曲データ記憶装置 | |
| JP2940129B2 (ja) | リズム演奏装置 | |
| JP2743808B2 (ja) | 自動演奏装置 | |
| JP3604513B2 (ja) | 演奏データ編集装置 | |
| JPH06203534A (ja) | 電子楽器のファイル管理システム | |
| JP3873872B2 (ja) | 演奏情報記録装置及びプログラム | |
| JP3465585B2 (ja) | カラオケの歌詞表示装置およびカラオケの歌詞表示方法 | |
| JP3794299B2 (ja) | 演奏情報編集装置及び演奏情報編集プログラム | |
| JP2798777B2 (ja) | ワードプロセッサ | |
| JPH0713562A (ja) | シーケンサ装置 | |
| JPH10124047A (ja) | 演奏データ編集装置および演奏データ編集プログラムを記憶した媒体 | |
| JP4456469B2 (ja) | 演奏情報再生装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20021203 |