JPH08185164A - 自動演奏制御装置及びそれに使用する楽曲データ記憶装置 - Google Patents

自動演奏制御装置及びそれに使用する楽曲データ記憶装置

Info

Publication number
JPH08185164A
JPH08185164A JP6340418A JP34041894A JPH08185164A JP H08185164 A JPH08185164 A JP H08185164A JP 6340418 A JP6340418 A JP 6340418A JP 34041894 A JP34041894 A JP 34041894A JP H08185164 A JPH08185164 A JP H08185164A
Authority
JP
Japan
Prior art keywords
event data
data
event
bar
fragment
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.)
Abandoned
Application number
JP6340418A
Other languages
English (en)
Inventor
Katsu Setoguchi
克 瀬戸口
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP6340418A priority Critical patent/JPH08185164A/ja
Priority to US08/576,481 priority patent/US5672837A/en
Publication of JPH08185164A publication Critical patent/JPH08185164A/ja
Abandoned legal-status Critical Current

Links

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

(57)【要約】 【目的】 シーケンサー等のメモリに格納された楽曲デ
ータを自動演奏するための自動演奏制御技術に関し、編
集作業を簡単に実行し、小節単位のジャンプ操作なども
迅速に実行可能とすることを目的とする。 【構成】 配列SNG_BAR_TBLには、楽曲毎
及び各楽曲内のトラック毎に、第0小節〜第1023小
節の1024小節を128小節ずつ分割して得られる8
つの小節ブロックのそれぞれに対応する、配列SNG_
BAR_PTR内の128個ずつの配列データ群の各先
頭要素情報が記憶される。配列SNG_BAR_PTR
には、小節ブロック毎に、各小節ブロック内の128小
節のそれぞれに対応する、配列SNG_SONG内のイ
ベントデータ群の各先頭要素番号が記憶される。例えば
小節単位の早送り再生又は巻き戻し再生時には、配列S
NG_BAR_TBL上の小節ブロック又は配列SNG
_BAR_PTR上の小節に対する各ポインタ値をイン
クリメント又はデクリメントするだけでよい。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、シーケンサー等のメモ
リに格納された楽曲データを自動演奏するための自動演
奏制御技術に関する。
【0002】
【従来の技術】従来、楽曲を電子楽器などに自動演奏さ
せるための自動演奏装置においては、楽曲データが以下
のような一般的なデータフォーマットでメモリに記憶さ
れている。即ち、例えばスタンダードMIDIファイル
では、ノートオン、ノートオフなどのイベント間の時間
(デルタタイム)が、イベントデータの間に挟まれたデ
ータフォーマットを有する。
【0003】また、ノートオンからノートオフまでの時
間はゲートタイムとして有し、次のノートオン又は他の
イベントまでの時間をステップタイムの形式で有するデ
ータフォーマットも知られている。
【0004】しかし、これらのデータフォーマットは、
いずれもイベントデータが単に再生されるのみであれば
手軽でよい。
【0005】
【発明が解決しようとする課題】しかし、イベントデー
タに対して編集操作を実行したり、ランダムな小節への
ジャンプ操作を実行しようとした場合に、上述のデータ
フォーマットに対してこれらの操作に対応するデータ処
理を実行するには、非常に煩雑かつ複雑な制御を要する
という問題点を有している。
【0006】本発明の課題は、編集作業を簡単に実行
し、小節単位のジャンプ操作なども迅速に実行可能とす
ることにある。
【0007】
【課題を解決するための手段】本発明は、自動演奏を行
うための楽曲データに対して、楽曲データの記録、再
生、編集などの自動演奏のための制御を行う自動演奏制
御装置を前提とする。
【0008】そして、まず、小節単位の楽曲データ群で
あって、それぞれ小節の先頭からの時間データを含むこ
とのできる楽曲データ群(イベントデータ群)を記憶す
る第1の記憶手段(配列SNG_SONGを記憶するR
AM105)を有する。
【0009】次に、小節単位の楽曲データ群の第1の記
憶手段上での記憶位置を示す情報である小節単位楽曲デ
ータ群指示データを記憶する第2の記憶手段(配列SN
G_BAR_PTRを記憶するRAM105)を有す
る。
【0010】そして、その第2の記憶手段に記憶される
小節単位楽曲データ群指示データを操作することによっ
て、第1の記憶手段に記憶される楽曲データ群に対して
自動演奏のための制御を実行する制御手段(CPU10
3等)を有する。
【0011】本発明は、上述の発明の構成に加えて、更
に次のような構成を有することができる。まず、第2の
記憶手段に記憶される小節単位楽曲データ群指示データ
は、連続して記憶される複数個ずつが小節ブロックとし
て管理される。
【0012】次に、その小節ブロック単位の小節単位楽
曲データ群指示データの第2の記憶手段上での記憶位置
を示す情報である指示データを記憶する第3の記憶手段
(配列SNG_BAR_TBLを記憶するRAM10
5)を更に有する。
【0013】そして、前述の制御手段は、その第3の記
憶手段に記憶される指示データ及び第2の記憶手段に記
憶される小節単位楽曲データ群指示データを操作するこ
とによって、第1の記憶手段に記憶される楽曲データ群
に対して自動演奏のための制御を実行する。
【0014】なお、上記第1、第2、又は第3の記憶手
段のみからなる楽曲データ記憶装置も、本発明の範囲で
ある。
【0015】
【作用】例えば楽曲データの再生処理において、小節単
位の早送り再生又は巻き戻し再生が実行される場合に
は、制御手段が、第2の記憶手段に記憶される小節単位
楽曲データ群指示データ又は第3の記憶手段に記憶され
る指示データをインクリメント又はデクリメントするだ
けでよい。この結果、非常に高速な1又は複数小節単位
の早送り再生又は巻き戻し再生を簡単な制御で実現する
ことができる。
【0016】次に、楽曲データの編集処理が実行される
場合を考える。例えば小節単位の移動を行うためには、
制御手段が、第2の記憶手段に記憶される小節単位楽曲
データ群指示データ又は第3の記憶手段に記憶される指
示データの並びを入れ替えるだけでよい。この場合、各
小節の楽曲データ群に記憶される時間データはそれぞれ
の小節の先頭からの時間データとすることができるた
め、各楽曲データの時間データを編集し直す必要もな
い。
【0017】更に、例えば既存の小節に新たな楽曲デー
タを追加するためには、制御手段は、第1の記憶手段の
末尾に楽曲データ群を追加し、それに対応するデータを
第2又は第3の記憶手段に設定すればよい。
【0018】その他、楽曲データの挿入、削除等も、簡
単なデータ操作で実現できる。このように、楽曲データ
が、第1の記憶手段、第2の記憶手段、又は第3の記憶
手段を介して階層的に管理されることにより、楽曲デー
タの再生処理、編集処理等の制御を簡単に実行すること
ができる。
【0019】
【実施例】以下、図面を参照しながら本発明の実施例に
つき詳細に説明する。図1は、本発明の実施例の全体構
成図である。この実施例は、シーケンサ装置として実現
されている。
【0020】CPU103は、ROM104に記憶され
ている制御プログラムに基づいて、システム全体の動作
を制御する。そして、楽曲データの記録時には、特には
図示しない電子楽器から出力された演奏情報が、例えば
MIDI(Musical Instrument Digital Interface)規格に基
づいて転送され、その演奏情報が演奏情報入力部101
によって受信される。CPU103は、この演奏情報を
取り込み、その演奏情報を示すイベントデータを、必要
に応じてその入力タイミングと共に、RAM105の楽
曲データ記録領域上の記録対象トラックに順次記録す
る。記録対象トラックは、ユーザが予めシステム操作子
群107を操作して指定する。
【0021】楽曲データの編集時には、CPU103
は、ユーザがシステム操作子群107において指定した
内容に従って、RAM105の楽曲データ記録領域上の
所望のトラックに記録されている楽曲データを読み出し
て、例えば5線譜の形式で表示部102に表示する。ユ
ーザは、システム操作子群107を用いて、表示部10
2に表示されている楽曲データに対して、楽曲データの
挿入、削除、移動、複写などを行うことができる。この
編集結果は、RAM105の楽曲データ記録領域の楽曲
データの内容に反映される。
【0022】楽曲データの再生時には、RAM105の
楽曲データ記録領域上の再生対象トラックから、イベン
トデータが順次読み出され、各イベントデータに対応す
る演奏情報が、例えばMIDI規格に基づいて演奏情報出力
部106から外部の電子楽器又は音源装置に出力され、
これらの装置によってその演奏情報に対応する自動演奏
が行われる。
【0023】図2〜図5は、RAM105に記憶される
楽曲データのデータフォーマットを示す図である。本実
施例では、楽曲データは、各小節のイベントデータと、
連続する128小節分のイベントデータを単位とする小
節ブロックと、最大で8個の小節ブロックを含むトラッ
ク、16トラックを単位とする楽曲という各単位を用い
て、階層的に管理される点が特徴である。
【0024】まず、図2に示されるトラック使用状況デ
ータSNG_TRK_USEは、16ビットのデータで
あって、各楽曲毎に設定される。各データには、トラッ
ク0〜15の各トラックが楽曲の自動演奏において使用
されるか否かが、“1”又は“0”のフラグによって設
定される。このデータの、最下位ビットがトラック0に
対応し、最上位ビットがトラック15に対応する。
【0025】図3(a) に示される配列SNG_BAR_
TBLには、楽曲毎及び各楽曲内のトラック毎に、第0
小節〜第1023小節の1024小節を128小節ずつ
分割して得られる8つの小節ブロックのそれぞれに対応
する、図3(b) に示される配列SNG_BAR_PTR
内の128個ずつの配列データ群の各先頭要素情報が記
憶される。配列SNG_BAR_PTRに定義可能な小
節ブロックの数は、例えば最大で32である。その場
合、配列SNG_BAR_TBLには、小節ブロック先
頭要素情報として、0x00〜0x1f(10進数の0
〜31に対応)の何れかの値が記憶される。この小節ブ
ロック先頭要素情報の値を128倍して得られる値が、
その小節ブロックに対応する配列SNG_BAR_PT
R内の128個の配列データ群の先頭要素番号となる。
但し、未使用のトラックのそれぞれの小節ブロックの先
頭要素情報及び使用トラック内の未使用の小節ブロック
の先頭要素情報としては、値0xffが設定される。
【0026】図3(b) に示される配列SNG_BAR_
PTRには、上述の小節ブロック毎に、各小節ブロック
内の128小節のそれぞれに対応する、図3(c) に示さ
れる配列SNG_SONG内のイベントデータ群の各先
頭要素番号が記憶される。配列SNG_SONGに定義
可能なイベントデータの数は、例えば最大で16384
イベントである。その場合、配列SNG_BAR_PT
Rには、各小節に対応するイベントデータ群の先頭要素
番号として、0x0000〜0x4000(10進数の
0〜16383に対応)の何れかの値が記憶される。但
し、全休符の小節に対応する先頭要素番号としては、値
0xffffが設定される。
【0027】図3(c) に示される配列SNG_SONG
には、上述したように小節単位で連続したイベントデー
タが記憶される。1つのイベントデータは、後述するよ
うに3ワードのデータとして構成される。但し、配列S
NG_SONGは、512個のイベントデータを単位と
する32個のイベントデータブロック(16384イベ
ントデータ分)に分割される。ここで、1つの小節内の
イベントデータ群が2つのイベントデータブロックに分
割される場合には、第1番目のイベントデータブロック
の末尾に後述するジャンプイベントデータが記憶され、
また、第2番目のイベントデータブロックの先頭に後述
するジャンプソースイベントデータが記憶される。
【0028】図4は、図3(c) の配列SNG_SONG
に記憶されるイベントデータ群を構成するノートイベン
トデータとコントロールイベントデータのデータフォー
マットを示す図であり、各イベントデータは3ワードの
データとして構成される。
【0029】図4(a) に示されるノートイベントデータ
は、楽譜の音符に対応するものであり、単音の発音処理
に必要な複数の情報を含む。即ち、ノートイベントデー
タの第1ワードは、上位7ビットが音高番号、下位7ビ
ットがベロシティを表わす。ノートイベントデータの第
2ワードは、そのノートイベントデータに対応する音符
について、それが含まれる小節の先頭からの時間位置
を、適当な単位(例えば480分の1拍のクロック)で
カウントした値である。そして、ノートイベントデータ
の第3ワードは、そのノートイベントデータに対応する
音符の発音時間を前述の適当な単位でカウントしたゲー
トタイムである。
【0030】図4(b) に示されるコントロールイベント
データは、楽曲の再生を制御するために必要な、上述の
ノートイベントデータ以外のイベントデータであり、第
1ワードの最上位ビットが1であることによって、ノー
トイベントデータと区別される。このコントロールイベ
ントデータは、更に、メタイベントデータ群、ジャンプ
イベントデータ群、及びコマンドイベントデータ群の3
つに分類される。メタイベントデータ群は、楽曲全体の
テンポ、拍子、調に関する情報を含む。ジャンプイベン
トデータ群は、図5で後述するように、トラック終了、
小節終了、次処理データへのジャンプ等の、イベントデ
ータの位置制御に関する情報を含む。更に、コマンドイ
ベントデータ群は、音量、プログラムチェンジ(音
色)、ベンダー等の、楽音に対する修飾的な効果を付加
するための情報を含む。コントロールイベントデータの
第1ワードの下位7ビットはコントロールコードを示
し、このコードによって制御内容が決定される。例え
ば、メタイベントデータ群のテンポイベントデータに対
応する第1ワードの値は0xff00、ジャンプイベン
トデータ群の小節終了イベントデータに対応する第1ワ
ードの値は0xff11(図5(b) 参照)、コマンドイ
ベントデータ群のプログラムチェンジイベントデータに
対応する第1ワードの値は0xff20となる。コント
ロールイベントデータの第2ワードは、そのコントロー
ルイベントデータに対応する制御が実行される小節の先
頭からの時間位置を、前述した適当な単位でカウントし
た値である。コントロールイベントデータの第3ワード
には、コントロールコード以外に必要なコントロール値
が格納される。例えばメタイベントデータ群のテンポイ
ベントデータの第3ワードにはテンポ番号、ジャンプイ
ベントデータ群のジャンプイベントデータの第3ワード
には配列SNG_SONG(図3(c) )内でのジャンプ
先のイベントデータの要素番号、コマンドイベントデー
タ群のプログラムチェンジイベントデータの第3ワード
には音色番号が格納される。
【0031】次に、上述したコントロールイベントデー
タのうちのジャンプイベントデータ群を構成する4種類
のイベントデータについて説明する。図5は、これら4
種類のイベントデータのそれぞれのデータフォーマット
を示す図である。
【0032】まず、図5(a) のトラック終了イベントデ
ータは、各トラックのイベントデータ群の終了位置にそ
のトラックの最終のイベントデータとして挿入される。
次に、図5(b) の小節終了イベントデータは、各小節の
イベントデータ群の終了位置にその小節の最終イベント
データとして挿入される。
【0033】更に、図5(c) のジャンプイベントデータ
と図5(d) のジャンプソースイベントデータは、図3
(c) の配列SNG_SONGにおいて、1つの小節内の
イベントデータ群が512イベントずつの2つのイベン
トデータブロックに分割される場合に、それぞれ、第1
番目のイベントデータブロックの末尾と第2番目のイベ
ントデータブロックの先頭に記憶される。この場合、ジ
ャンプイベントデータの第3ワードには配列SNG_S
ONG内でのジャンプ先のイベントデータの要素番号が
格納され、ジャンプソースイベントデータの第3ワード
には同じくジャンプ元のイベントデータの要素番号が格
納される。
【0034】なお、図5(a) 〜(d) に示される4種類の
イベントデータについて、イベントデータの編集処理及
び再生処理においては、第1ワードにより現在処理イベ
ントデータがジャンプイベントデータ群に属するイベン
トであることが認識された時点で、各々のイベントデー
タに対応した処理が即座に実行される。従って、これら
各イベントデータの第2ワードは任意の値でよい。ま
た、トラック終了イベントデータと小節終了イベントデ
ータの第3ワードも任意の値でよい。
【0035】以上説明した図2〜図5の楽曲データのデ
ータフォーマットが採用されることにより、自動演奏に
関する制御を非常に効率的に実行することが可能とな
る。この効果について、以下に説明する。
【0036】まず、イベントデータの再生処理時(楽曲
の自動演奏時)の動作について説明する。ユーザが図1
のシステム操作子群107を操作することにより再生開
始が指示されると、図1のCPU103は、RAM10
5に記憶されている再生される楽曲に対応する図2に示
されるトラック使用状況データSNG_TRK_USE
の内容を調べる。CPU103は、トラック使用状況デ
ータSNG_TRK_USEにおいて値1が設定されて
いるビットに対応するトラックの処理タイミングで、そ
のトラックのイベントデータを再生させるために、ま
ず、図3(a) に示される配列SNG_BAR_TBLを
探索する。この結果、CPU103は、現在再生中の小
節に対応する図3(b) に示される配列SNG_BAR_
PTR内のの要素番号を得る。次に、配列SNG_BA
R_PTR内の該当データの値が0xffffでなけれ
ば(全休符小節でなければ)、CPU103は、配列S
NG_BAR_PTRの該当データの値が指す要素番号
の配列SNG_SONG中のイベントデータを読み込
む。そして、その第2ワードに格納されている小節先頭
からのクロックの値が現在のクロックの値以下であれ
ば、CPU103は、そのイベントデータを再生するた
めに、そのイベントデータの第1ワードのデータに従っ
た演奏情報を、図1の演奏情報出力部106から出力さ
せる。以下、上述の一連の処理が繰り返し実行され、現
在小節の現在クロックに従ったイベントデータの再生処
理が実行される。
【0037】上述のイベントデータの再生処理におい
て、小節単位の早送り再生又は巻き戻し再生が実行され
る場合を考える。この動作を実現するためには、図3
(a) に示される配列SNG_BAR_TBL上の小節ブ
ロックに対する現在処理ポインタ値、又は図3(b) に示
される配列SNG_BAR_PTR上の小節に対する現
在処理ポインタ値をインクリメント又はデクリメントす
るだけでよい。この結果、非常に高速な1又は複数小節
単位の早送り再生又は巻き戻し再生を簡単な制御で実現
することができる。
【0038】次に、イベントデータの編集処理が実行さ
れる場合を考える。例えば小節単位の移動を行うために
は、図3(a) の配列SNG_BAR_TBL又は図3
(b) の配列SNG_BAR_PTRの配列データの要素
を入れ替えるのみでよい。この場合、図3(c) の配列S
NG_SONG内のイベントデータに記憶されているク
ロックデータは小節の先頭からのクロックであるため
(図4等参照)、時間データを編集し直す必要もない。
更に、例えば既存の小節に新たなイベントデータを追加
するためには、図3(c) の配列SNG_SONGの末尾
にイベントデータ群を追加し、ジャンプイベントデータ
とジャンプソースイベントデータ(図5参照)を用い
て、そのイベントデータ群を所望の小節のイベントデー
タ群に連結するだけでよい。その他、イベントデータの
挿入、削除等も、簡単なデータ操作で実現できる。
【0039】このように、楽曲データが階層的に管理さ
れることにより、イベントデータの再生処理、編集処理
等の制御を簡単に実行することができる。ここで、上述
の楽曲データの階層構造が採用される場合におけるイベ
ントデータの編集処理において、小節内でイベントデー
タの挿入、削除、移動等の編集作業が実行された場合、
図3(c) の配列SNG_SONG内の1つの小節内のイ
ベントデータ群において、図5に示されるジャンプイベ
ントデータ群以外のイベントデータの第2ワードに設定
されている小節の先頭からのクロックの値の大小関係が
逆転している状況が発生することがある。例えば、所望
の小節内の任意の時間位置に新たなイベントデータが追
加される場合、配列SNG_SONGの末尾に、ジャン
プソースイベントデータと、それに続いて、第2ワード
に所望のクロック値が設定された所望のイベントデータ
と、更にそれに続いて、小節終了イベントデータが追加
されると共に、上記所望の小節の最終イベントの小節終
了イベントデータが、第3ワードに上記ジャンプソース
イベントデータの要素番号が設定されたジャンプイベン
トデータに置き換えられ、最後に、上記ジャンプソース
イベントデータの第3ワードに上記ジャンプイベントデ
ータの要素番号が設定される。この場合、上記追加イベ
ントデータは、上記所望の小節内のイベントデータ群の
最後に単純に追加されただけであるため、その追加イベ
ントデータが上記所望の小節内の他のイベントデータ群
との間で正しい時間関係を有するように、その追加イベ
ントデータを含む上記所望の小節内のイベントデータ群
が、各イベントデータの第2ワードのクロック値に関し
て並び換えられる(ソートする)必要がある。
【0040】この場合に、小節内のイベントデータ群に
含まれ得る図5に示されるジャンプイベントデータ群が
適切に処理される必要がある。そこで、本実施例におい
ては、小節内のイベントデータ群の時間ソート処理が次
のようにして実行される。以下に、小節内のイベントデ
ータ群の時間ソート処理の詳細を説明する。
【0041】図6は、図1に示されるCPU103がR
OM104に記憶された制御プログラムを実行する動作
として実現される時間ソート処理の全体動作フローチャ
ートである。
【0042】まず、時間ソート処理終了フラグ(CPU
103内のレジスタ又はRAM105に確保される)
は、その値が0であるときに時間ソート処理が終了して
いないことを示し、その値が1であるときに時間ソート
処理が終了したことを示す。
【0043】まず、ステップ601において、時間ソー
ト処理終了フラグの値が0にセットされる。次に、ステ
ップ602で時間ソート処理終了フラグの値が0である
と判定される間、ステップ603〜605の一連の処理
が繰り返し実行される。
【0044】ステップ603では、時間ソート処理終了
フラグの値が1にセットされる。ステップ604では、
配列SNG_SONGに記憶されている時間ソート処理
の対象とされる小節内のイベントデータ群に含まれ、ジ
ャンプイベントデータ及びジャンプソースイベントデー
タによって区切られる全てのイベントデータのグループ
(以下、イベントデータフラグメント又は単にフラグメ
ントと呼ぶ)のそれぞれの内部で閉じた時間ソート処理
であるフラグメント内ソート処理が実行される。
【0045】続いて、ステップ605では、配列SNG
_SONGに記憶されている上記対象小節に含まれる隣
接するフラグメント同士で、それらの接続部に位置する
イベントデータ(ジャンプイベントデータの直前に位置
するイベントデータとそのジャンプイベントデータに対
応するジャンプソースイベントデータの直後に位置する
イベントデータ)についての時間ソート処理であるフラ
グメント間ソート処理が実行される。
【0046】そして、上述のステップ604のフラグメ
ント内ソート処理とステップ605のフラグメント間ソ
ート処理が繰り返し実行され、両方の処理において実際
にイベントデータの入替えが発生しなくなった時点で、
配列SNG_SONGに記憶されている対象小節内のイ
ベントデータ群に対する時間ソート処理が完了する。具
体的には、ステップ604又は605において実際にイ
ベントデータの入替えが発生した場合は、ステップ60
4又は605内において後述するように時間ソート処理
終了フラグの値が0にセットされる。従って、この場合
にはステップ602の判定がYESとなるため、時間ソ
ート処理が続行される。一方、ステップ604及び60
5の両方で実際にイベントデータの入替えが発生しなく
なった場合は、ステップ604及び605の何れにおい
ても時間ソート処理終了フラグの値を0にセットする処
理が実行されなくなる。従って、この場合には時間ソー
ト処理終了フラグの値はステップ603で1にセットさ
れたままとなるため、ステップ602の判定がNOとな
り、時間ソート処理が終了する。
【0047】図7は、図6のステップ604のフラグメ
ント内ソート処理の動作フローチャートである。まず、
フラグメント内ソート処理終了フラグ(CPU103内
のレジスタ又はRAM105に確保される)は、フラグ
メント内ソート処理を、終了させるべきでない場合に値
0となり、終了させるべきである場合に値1となる。こ
のフラグの値は、ステップ701で、0に初期化され
る。
【0048】サーチ状態フラグ(CPU103内のレジ
スタ又はRAM105に確保される)は、配列SNG_
SONGに記憶されている対象小節に含まれる現在処理
中のフラグメント内において、ジャンプソースイベント
データ以外の先頭のイベントデータをサーチする処理
が、終了していない場合に値0となり、終了している場
合に値1となる。このフラグの値は、ステップ702
で、0に初期化される。
【0049】サーチイベント(CPU103内のレジス
タ又はRAM105に確保される)は、配列SNG_S
ONGに記憶されている対象小節に含まれる現在処理中
のフラグメント内において、現在処理中のイベントデー
タを指示するものである。このサーチイベントの値は、
ステップ703で、配列SNG_SONGに記憶される
対象小節内の先頭のイベントデータの要素番号にセット
される。この番号は、図3の配列SNG_BAR_TB
L及び配列SNG_BAR_PTRから容易に検索でき
る。
【0050】続いて、初期状態では、ステップ704と
705の判定が共にYESとなった後、ステップ706
〜713において、配列SNG_SONGに記憶されて
いる対象小節に含まれる現在処理中のフラグメント内に
おいて、ジャンプソースイベントデータ以外の先頭のイ
ベントデータをサーチする処理が実行される。
【0051】まず、サーチイベントによって指示される
現在イベントデータ(フロー中では現在イベントと記述
する)が、RAM105内の配列SNG_SONGから
読み出される。
【0052】そして、現在イベントデータがジャンプソ
ースイベントデータである場合は、ステップ706の判
定の後にステップ707が実行され、サーチイベントが
指示する配列SNG_SONGの要素番号がインクリメ
ントされる。これらのステップ706とステップ707
の処理の繰返しによって、現在処理中のフラグメント内
の先頭のジャンプソースイベントデータが無視される。
【0053】現在イベントデータがジャンプソースイベ
ントデータ以外のイベントデータとなった場合は、ステ
ップ708で、そのイベントデータの種類が判定され
る。ステップ708で現在イベントデータがトラック終
了イベントデータ又は小節終了イベントデータ(図5参
照)であると判定された場合には、ステップ709で、
フラグメント内ソート処理終了フラグの値が1にセット
される。即ち、この場合は、現在処理中のフラグメント
内にはソート処理を実行すべき有効なイベントデータは
存在せず、かつ現在処理中のフラグメント以降に対象小
節のイベントデータ群が存在しないため、ステップ70
9の処理の後にステップ704が実行された時点でその
判定がNOとなり、フラグメント内ソート処理を終了す
る。
【0054】また、ステップ708で現在イベントデー
タがジャンプイベントデータ(図5(c) 参照)であると
判定された場合には、ステップ710で、そのジャンプ
イベントデータの第3ワードに格納されているジャンプ
先要素番号が、サーチイベントの値としてセットされ
る。即ち、この場合には、現在処理中のフラグメント内
にはソート処理を実行すべき有効なイベントデータは存
在せず、かつ現在処理中のフラグメント以降に対象小節
のイベントデータ群が存在する。このため、ステップ7
10の処理によってサーチイベントに新たなフラグメン
トの先頭のイベントデータの要素番号が設定された後
に、再びステップ704と705の判定が共にYESと
なった後、ステップ706〜713において、配列SN
G_SONGに記憶されている対象小節に含まれる新た
なフラグメント内において、ジャンプソースイベントデ
ータ以外の先頭のイベントデータをサーチする処理が再
度実行される。
【0055】更に、ステップ708で現在イベントデー
タがトラック終了イベントデータ、小節終了イベントデ
ータ、及びジャンプイベントデータ以外のイベントデー
タであると判定された場合には、ステップ711で、サ
ーチイベントの値がフラグメント先頭イベントの値とし
てセットされる。この値が、現在処理中のフラグメント
内で最初に見つかったジャンプソースイベントデータ以
外の先頭のイベントデータの要素番号となる。続いて、
ステップ712で、サーチイベントが指示する配列SN
G_SONGの要素番号がインクリメントされた後、サ
ーチ処理を終了させるべく、ステップ713で、サーチ
状態フラグの値が1にセットされる。
【0056】この結果、ステップ713に続いてステッ
プ704の判定がYESとなった後に、ステップ705
の判定がNOとなって、ステップ714〜716が実行
される。ステップ714〜716では、配列SNG_S
ONGに記憶されている対象小節に含まれる現在処理中
のフラグメント内で、トラック終了イベントデータ、小
節終了イベントデータ、及びジャンプイベントデータ以
外の末尾のイベントデータをサーチする処理が実行され
る。
【0057】まず、サーチイベントによって指示される
現在イベントデータが、RAM105内の配列SNG_
SONGから読み出される。そして、現在イベントデー
タがトラック終了イベントデータ、小節終了イベントデ
ータ、及びジャンプイベントデータ以外のイベントデー
タである場合には、ステップ714の判定の後にステッ
プ715が実行され、サーチイベントが指示する配列S
NG_SONGの要素番号がインクリメントされる。こ
れらのステップ714とステップ707の処理の繰返し
によって、現在処理中のフラグメント内のイベントデー
タが末尾に向かって順次サーチされる。
【0058】現在イベントデータがトラック終了イベン
トデータ、小節終了イベントデータ、又はジャンプイベ
ントデータの何れかのイベントデータとなった場合は、
ステップ716で、サーチイベントが指示する要素番号
から−1して得られる値が、フラグメント終了イベント
の値としてセットされる。この値が、現在処理中のフラ
グメント内における、トラック終了イベントデータ、小
節終了イベントデータ、及びジャンプイベントデータ以
外の末尾のイベントデータである。
【0059】以上の処理により、現在処理中のフラグメ
ント内でソート処理が実行されるべき先頭のイベントデ
ータと末尾のイベントデータが、フラグメント先頭イベ
ント及びフラグメント終了イベントとして算出される。
【0060】続いて、ステップ717では、上記フラグ
メント先頭イベントとフラグメント終了イベントが指示
する要素番号が一致しているか否かが判定される。ステ
ップ717の判定がYESの場合は、現在処理中のフラ
グメント内でソート処理が実行されるべきイベントデー
タの数が1であり、実質的にソート処理を実行する必要
はないため、ステップ718のソート処理は実行されず
に、ステップ719以降が実行される。ステップ719
以降の処理については後述する。
【0061】ステップ717の判定がNOの場合は、ス
テップ718で、配列SNG_SONGに記憶されてい
る対象小節に含まれる現在処理中のフラグメント内で、
フラグメント先頭イベントとフラグメント終了イベント
により指示される範囲のイベントデータ群が、各イベン
トデータの第2ワードのクロック値に関してソートされ
る。この処理については、図13の動作フローチャート
を用いて後述する。なお、後述するように、ステップ7
18において実際にイベントデータの入替えが発生した
場合は、ステップ718内において時間ソート処理終了
フラグの値が0にセットされる。従って、この場合には
図6のステップ602の処理に戻った時点でその判定が
YESとなるため、時間ソート処理が続行される。
【0062】ステップ718の処理の後又はステップ7
17の判定がYESとなった後に、ステップ719で、
ステップ714で判定されている現在イベントデータの
種類が判定される。
【0063】ステップ719で現在イベントデータがト
ラック終了イベントデータ又は小節終了イベントデータ
であると判定された場合には、ステップ720で、フラ
グメント内ソート処理終了フラグの値が1にセットされ
る。即ち、この場合は、現在処理中のフラグメント以降
に対象小節のイベントデータ群が存在しないため、ステ
ップ720の処理の後にステップ704が実行された時
点でその判定がNOとなり、フラグメント内ソート処理
を終了する。
【0064】また、ステップ719で現在イベントデー
タがジャンプイベントデータであると判定された場合に
は、ステップ721で、そのジャンプイベントデータの
第3ワードに格納されているジャンプ先要素番号が、サ
ーチイベントの値としてセットされ、また、サーチ状態
フラグの値が0にセットされる。即ち、この場合は、現
在処理中のフラグメント以降に対象小節のイベントデー
タ群が存在する。このため、ステップ721の処理によ
ってサーチイベントに新たなフラグメントの先頭のイベ
ントデータの要素番号が設定された後に、再びステップ
704と705の判定が共にYESとなった後、ステッ
プ706以降において、配列SNG_SONGに記憶さ
れている対象小節に含まれる新たなフラグメントに対し
てフラグメント内ソート処理が実行される。
【0065】以上説明した図7の動作フローチャートの
処理によって、配列SNG_SONGに記憶されている
対象小節内の全てのフラグメントのそれぞれに対して、
図6のステップ604のフラグメント内ソート処理が1
回ずつ実行される。
【0066】続いて、図8〜図12は、図6のステップ
605のフラグメント間ソート処理の動作フローチャー
トである。まず、フラグメント間ソート処理終了フラグ
(CPU103内のレジスタ又はRAM105に確保さ
れる)は、フラグメント間ソート処理を、終了させるべ
きでない場合に値0となり、終了させるべきである場合
に値1となる。このフラグの値は、ステップ801で、
0に初期化される。
【0067】サーチイベント(CPU103内のレジス
タ又はRAM105に確保される)は、現在処理中のイ
ベントデータを指示するものである。このサーチイベン
トの値は、ステップ802で、配列SNG_SONGに
記憶される対象小節内の先頭のイベントデータの要素番
号にセットされる。
【0068】第1フラグメント最終イベント要素番号
(CPU103内のレジスタ又はRAM105に確保さ
れる)は、フラグメント間ソート処理が実行されるべき
現在処理中の2つのフラグメントのうちの第1番目のフ
ラグメントにおける、トラック終了イベントデータ、小
節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の末尾のイベント
データの要素番号を指示するものである。この値は、ス
テップ803で、配列SNG_SONG上の要素番号と
して出現し得ない値0xffffにセットされる。
【0069】次に、初期状態においては、ステップ80
4の判定がYESとなった後に、ステップ805でF1
フラグ(CPU103内のレジスタ又はRAM105に
確保される)の値が0にセットされる。F1フラグは、
配列SNG_SONGに記憶されている対象小節に含ま
れる現在処理中の2つのフラグメントのうちの第1番目
のフラグメントにおいて、トラック終了イベントデー
タ、小節終了イベントデータ、ジャンプソースイベント
データ、及びジャンプイベントデータ以外の末尾のイベ
ントデータをサーチする処理が、終了していない場合に
値0となり、終了している場合に値1となる。
【0070】続いて、図9のステップ806の判定がY
ESとなった後、図9のステップ807〜814で、配
列SNG_SONGに記憶されている対象小節に含まれ
る現在処理中の2つのフラグメントのうちの第1番目の
フラグメントにおいて、トラック終了イベントデータ、
小節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の末尾のイベント
データをサーチする処理が実行される。
【0071】まず、ステップ807で、サーチイベント
により指示される現在イベントデータが、RAM105
内の配列SNG_SONGから読み出される。そして、
そのイベントデータの種類が判定される。
【0072】ステップ807で現在イベントデータがト
ラック終了イベントデータ又は小節終了イベントデータ
であると判定された場合には、ステップ808で、F1
フラグとフラグメント間ソート処理終了フラグの値が共
に1にセットされる。即ち、この場合は、現在処理中の
第1番目のフラグメント内にはソート処理を実行すべき
有効な最終イベントデータは存在せず、かつ第1番目の
フラグメント以降に対象小節のイベントデータ群が存在
しないため、ステップ808の処理の後にステップ80
6が実行された時点でその判定がNOとなり、後述する
図10のステップ815が実行された後、ステップ81
6に対応する後述する図11の動作フローチャートが実
行される時点でステップ1101の判定がNOとなり、
更に、図10のステップ817の判定がNO、図8のス
テップ804の判定がNOとなって、フラグメント間ソ
ート処理を終了する。
【0073】また、図9のステップ807で現在イベン
トデータがジャンプイベントデータであると判定された
場合には、ステップ809で、第1フラグメント最終イ
ベント要素番号の値がステップ803で初期設定された
ままの値0xffffであるか否かが判定される。
【0074】今、配列SNG_SONG内の現在処理中
の2つのフラグメントのうちの第1番目のフラグメント
内に、トラック終了イベントデータ、小節終了イベント
データ、ジャンプソースイベントデータ、及びジャンプ
イベントデータ以外のイベントデータが1つも存在して
いなければ、第1フラグメント最終イベント要素番号の
値は初期設定値0xffffのままとなり、ステップ8
09の判定がYESとなる。この場合には、ステップ8
11で、そのジャンプイベントデータの第3ワードに格
納されている新たなフラグメントを示すジャンプ先要素
番号が、サーチイベントの値としてセットされる。その
後、再びステップ806の判定がYESとなることによ
り、ステップ807〜814において、配列SNG_S
ONGに記憶されている対象小節に含まれる新たなフラ
グメントが現在処理中の2つのフラグメントのうちの第
1番目のフラグメントとされて、処理が続行される。
【0075】更に、ステップ807で現在イベントデー
タがトラック終了イベントデータ、小節終了イベントデ
ータ、及びジャンプイベントデータ以外のイベントデー
タであると判定された場合において、更にステップ81
2で現在イベントデータがジャンプソースイベントデー
タであると判定された場合には、ステップ814で、単
純にサーチイベントが指示する配列SNG_SONGの
要素番号がインクリメントされた後に、再びステップ8
06からステップ807の処理に戻る。
【0076】また、ステップ807で現在イベントデー
タがトラック終了イベントデータ、小節終了イベントデ
ータ、及びジャンプイベントデータ以外のイベントデー
タであると判定された場合において、更にステップ81
2で現在イベントデータがジャンプソースイベントデー
タ以外の通常のイベントデータであると判定された場合
には、ステップ813で、サーチイベントの値が第1フ
ラグメント最終イベント要素番号としてセットされる。
そして、ステップ814で、サーチイベントが指示する
配列SNG_SONGの要素番号がインクリメントされ
た後に、再びステップ806からステップ807の処理
に戻る。
【0077】以上のようにして第1フラグメント最終イ
ベント要素番号がインクリメントされてゆき、最後にス
テップ807でジャンプイベントデータが検出された時
点において第1フラグメント最終イベント要素番号にセ
ットされている要素番号が、配列SNG_SONGに記
憶されている対象小節に含まれる現在処理中の2つのフ
ラグメントのうちの第1番目のフラグメントにおいて見
つかった、トラック終了イベントデータ、小節終了イベ
ントデータ、ジャンプソースイベントデータ、及びジャ
ンプイベントデータ以外の末尾のイベントデータの要素
番号となる。その後、ステップ809の判定がNOとな
って、第1番目のフラグメントにおけるサーチ処理を終
了させるべく、ステップ810で、F1フラグの値が1
にセットされる。そして、ステップ811で、そのジャ
ンプイベントデータの第3ワードに格納されている新た
なフラグメントを示すジャンプ先要素番号が、サーチイ
ベントの値としてセットされる。
【0078】この結果、ステップ811に続いて実行さ
れるステップ806の判定がNOとなり、図10のステ
ップ815でF2フラグ(CPU103内のレジスタ又
はRAM105に確保される)の値が0にセットされ
る。F2フラグは、配列SNG_SONGに記憶されて
いる対象小節に含まれる現在処理中の2つのフラグメン
トのうちの第2番目のフラグメントにおいて、トラック
終了イベントデータ、小節終了イベントデータ、ジャン
プソースイベントデータ、及びジャンプイベントデータ
以外の先頭のイベントデータをサーチする処理が、終了
していない場合に値0となり、終了している場合に値1
となる。
【0079】続いて、図10のステップ816で、配列
SNG_SONGに記憶されている対象小節に含まれる
現在処理中の2つのフラグメントのうちの第2番目のフ
ラグメントにおいて、トラック終了イベントデータ、小
節終了イベントデータ、ジャンプソースイベントデー
タ、及びジャンプイベントデータ以外の先頭のイベント
データをサーチする処理が実行される。
【0080】図11は、図10のステップ816の処理
の詳細を示す動作フローチャートである。まず、最初は
ステップ1101の判定がYESとなる。
【0081】次に、ステップ1102で、サーチイベン
トにより指示される現在イベントデータが、RAM10
5内の配列SNG_SONGから読み出される。そし
て、そのイベントデータの種類が判定される。
【0082】ステップ1102で現在イベントデータが
トラック終了イベントデータ又は小節終了イベントデー
タであると判定された場合には、ステップ1103で、
フラグメント間ソート処理終了フラグの値が1にセット
される。即ち、この場合は、現在処理中の2つのフラグ
メントのうちの第2番目のフラグメント内にはソート処
理を実行すべき有効な先頭イベントデータは存在せず、
かつ第2番目のフラグメント以降に対象小節のイベント
データ群が存在しないため、ステップ1103の処理の
後にステップ1101が実行された時点でその判定がN
Oとなり、図11の動作フローチャートによって示され
る図10のステップ816の処理を終了する。
【0083】また、ステップ1102で現在イベントデ
ータがジャンプイベントデータであると判定された場合
には、ステップ1104で、そのジャンプイベントデー
タの第3ワードに格納されているジャンプ先要素番号
が、サーチイベントの値としてセットされる。即ち、こ
の場合には、現在処理中の2つのフラグメントのうちの
第2番目のフラグメント内にはソート処理を実行すべき
有効なイベントデータは存在せず、かつその第2番目の
フラグメント以降に対象小節のイベントデータ群が存在
する。このため、ステップ1104の処理によってサー
チイベントに新たなフラグメントの先頭のイベントデー
タの要素番号が設定される。その後、再びステップ11
01の判定がYESとなることにより、ステップ110
2〜1108において、配列SNG_SONGに記憶さ
れている対象小節に含まれる新たなフラグメントが現在
処理中の2つのフラグメントのうちの第2番目のフラグ
メントとされて、処理が続行される。
【0084】更に、ステップ1102において現在イベ
ントデータがトラック終了イベントデータ、小節終了イ
ベントデータ、及びジャンプイベントデータ以外のイベ
ントデータであると判定された場合において、更にステ
ップ1105で現在イベントデータがジャンプソースイ
ベントデータであると判定された場合には、ステップ1
108で、単純にサーチイベントが指示する配列SNG
_SONGの要素番号がインクリメントされた後に、再
びステップ1101からステップ1102の処理に戻
る。
【0085】また、ステップ1102で現在イベントデ
ータがトラック終了イベントデータ、小節終了イベント
データ、及びジャンプイベントデータ以外のイベントデ
ータであると判定された場合において、更にステップ1
105で現在イベントデータがジャンプソースイベント
データ以外の通常のイベントデータであると判定された
場合には、ステップ1106で、サーチイベントの値が
第2フラグメント先頭イベント要素番号としてセットさ
れる。この値が、配列SNG_SONGに記憶されてい
る対象小節に含まれる現在処理中の2つのフラグメント
のうちの第2番目のフラグメントにおいて最初に見つか
った、トラック終了イベントデータ、小節終了イベント
データ、ジャンプソースイベントデータ、及びジャンプ
イベントデータ以外の先頭のイベントデータの要素番号
となる。続いて、第2番目のフラグメントにおけるサー
チ処理を終了させるべく、ステップ1107で、F2フ
ラグの値が1にセットされた後、ステップ1108で、
サーチイベントが指示する配列SNG_SONGの要素
番号がインクリメントされる。そして、ステップ110
6〜1108が実行された後にステップ1101が再び
実行される時点で、その判定がNOとなり、図11によ
って示される図10のステップ816の処理を終了す
る。
【0086】以上のようにして、配列SNG_SONG
に記憶されている対象小節に含まれる現在処理中の2つ
のフラグメントにつき、図9のステップ807〜814
で、第1番目のフラグメントの末尾のイベントデータを
サーチする処理が成功し、かつ、図11によって示され
る図10のステップ816で、第2番目のフラグメント
の先頭のイベントデータをサーチする処理に成功する
と、ステップ817の判定がYESとなった後、ステッ
プ818で、第1番目のフラグメントの末尾のイベント
データと第2番目のフラグメントの先頭のイベントデー
タについて、イベント移動処理が実行される。
【0087】図12は、図10のステップ818のイベ
ント移動処理の動作フローチャートである。まず、ステ
ップ1201で、RAM105内の配列SNG_SON
Gから、第1フラグメント最終イベント要素番号によっ
て指示される要素番号のイベントデータが読み出される
と共に、第2フラグメント先頭イベント要素番号によっ
て指示される要素番号のイベントデータが読み出され
る。そして、第1フラグメント最終イベント要素番号に
対応するイベントデータの第2ワードの値が、第2フラ
グメント先頭イベント要素番号に対応するイベントデー
タの第2ワードの値より大きいか否か、即ち、第1フラ
グメント最終イベント要素番号に対応するイベントデー
タが第2フラグメント先頭イベント要素番号に対応する
イベントデータよりも後ろに配置されるべきか否かが判
定される。
【0088】ステップ1201の判定がYESの場合に
は、ステップ1202で、第1フラグメント最終イベン
ト要素番号に対応するイベントデータと第2フラグメン
ト先頭イベント要素番号に対応するイベントデータの記
憶位置が入れ替えられる。その後、ステップ1203及
び1204で、フラグメント間ソート処理終了フラグ及
び時間ソート処理終了フラグの値が、共に0にセットさ
れる。このように、実際にイベントデータの入替えが発
生した場合には、時間ソート処理終了フラグの値が0に
セットされるため、前述した図6のステップ604のフ
ラグメント内ソート処理とステップ605のフラグメン
ト間ソート処理が終了した後にステップ602の判定に
戻った時点で、その判定が再びYESとなり、時間ソー
ト処理が続行される。
【0089】一方、ステップ1201の判定がNOの場
合には、第1フラグメント最終イベント要素番号に対応
するイベントデータと第2フラグメント先頭イベント要
素番号に対応するイベントデータの入替えは実行され
ず、ステップ1205で、フラグメント間ソート処理終
了フラグの値が0にセットされる。
【0090】以上のようにして、配列SNG_SONG
に記憶される対象小節に含まれる現在処理中の2つのフ
ラグメントについて、フラグメント間ソート処理が実現
される。
【0091】ステップ1204又は1205の処理の
後、再び図8のステップ804の処理に戻り、その判定
がYESとなることにより、ステップ805以降で、配
列SNG_SONGに記憶されている対象小節に含まれ
る新たな2つのフラグメントにつき、第1番目のフラグ
メントの末尾のイベントデータをサーチする処理と、第
2番目のフラグメントの先頭のイベントデータをサーチ
する処理と、サーチされた2つのイベントデータに対す
るイベント移動処理の実行が試みられる。この場合、サ
ーチイベントの値は今まで第2番目であったフラグメン
トの先頭のイベントデータを指示しているため、今まで
第2番目として処理されたフラグメントが新たな第1番
目のフラグメントとして処理される。そして、それに続
く対象小節内のフラグメントが第2番目のフラグメント
として処理される。
【0092】以上の処理が繰返される結果、対象小節の
末尾のフラグメントが第1番目のフラグメントとして処
理される過程において、ステップ807でトラック終了
イベントデータ又は小節終了イベントデータが検出され
る。これにより、ステップ808で、F1フラグとフラ
グメント間ソート処理終了フラグの値が共に1にセット
される。即ち、この場合は、現在処理中の第1番目のフ
ラグメント内にはソート処理を実行すべき有効な最終イ
ベントデータは存在せず、かつ第1番目のフラグメント
以降に対象小節のイベントデータ群が存在しないため、
ステップ808の処理の後にステップ806が実行され
た時点でその判定がNOとなり、後述する図10のステ
ップ815が実行された後、ステップ816に対応する
後述する図11の動作フローチャートが実行される時点
でステップ1101の判定がNOとなり、更に、図10
のステップ817の判定がNO、図8のステップ804
の判定がNOとなって、フラグメント間ソート処理を終
了する。
【0093】最後に、図13は、図7のステップ718
において実行される、配列SNG_SONGに記憶され
ている対象小節に含まれる現在処理中のフラグメント内
の、フラグメント先頭イベントとフラグメント終了イベ
ントにより指示される範囲のイベントデータ群に対する
時間ソート処理を示す動作フローチャートである。
【0094】ここでは、フラグメント先頭イベントとフ
ラグメント終了イベントにより指示される範囲のイベン
トデータ群が、各イベントデータの第2ワードのクロッ
ク値に関してソートされる。
【0095】以下の説明では、図13の動作フローチャ
ートについて説明する前に、ソートアルゴリズムの代表
例と、本実施例で採用する改良アルゴリズムの原理につ
いて簡単に説明する。なお、以下で説明するバブルソー
トアルゴリズムとコムソートアルゴリズムの詳細な原理
については、文献「バブル・ソートが簡単な手直しで劇
的に速くなる」(スティーブン・レイシー、リチャード
・ボックス)(日経BP社発行、日経バイト/1991
年11月号、p.305〜p.312)に記載されてい
る。
【0096】ソートアルゴリズムの最も代表的なものと
して、バブルソートアルゴリズムが知られている。この
アルゴリズムにおいては、例えば昇べきの順にソートが
行われる場合には、まず、第1番目のイベントデータ値
(第2バイトの値)と第2番目のイベントデータ値の大
小関係が比較され、第1番目のイベントデータ値の方が
大きければ両者のイベントデータが入れ替えられる。次
に、新たな第2番目のイベントデータ値と第3番目のイ
ベントデータ値の大小関係が同様に比較され入替えが実
行される。このようにして、最終イベントデータまで同
様の比較・入替え処理が実行される。この最終データま
での1回の処理単位を、ストロークと呼ぶ。続いて、再
び、第1番目のイベントデータから最終イベントデータ
に向かって第2ストローク目の処理が繰り返される。そ
して、このストローク処理が、イベントデータの入替え
が発生しなくなるまで繰り返される。
【0097】以上のバブルソートアルゴリズムは、隣り
同士のイベントデータ値の比較・入替え処理の繰返しに
よって実現されるため、処理プログラムが簡単に実現で
きる反面、イベントデータは1回の比較・入替え処理に
よって1アドレス分だけしか移動できないため、例えば
フラグメントの後部に位置するイベントデータがフラグ
メントの先頭付近に移動させられる場合には処理時間が
長くなってしまう。
【0098】そこで、そのようなバブルソートアルゴリ
ズムの欠点を改良するアルゴリズムとして、コムソート
アルゴリズムが知られている。このアルゴリズムでは、
バブルソートアルゴリズムのように隣接したイベントデ
ータ値同士について比較・入替えが実行されるのではな
く、1以上離れた間隔(以下、この間隔をギャップとい
う)のイベントデータ値同士について、比較・入替えが
実行される。
【0099】具体的には、次のようなコムソートアルゴ
リズムが最適であることが実験的に確かめられている。
即ち、まず、最初のストローク処理(第1番目のイベン
トデータから最終イベントデータまでの1回の処理)に
おけるギャップの値は、ソート処理されるイベントデー
タの要素数を1.3で割って得られる値とされる。以
下、ストロークが進む毎に、前回のギャップの値を1.
3で割って得られる値が新たなギャップの値とされる。
この過程で、ギャップの値が9又は10となった時点
で、ギャップの値が強制的に11に置き換えられて処理
が続行される。商が1未満になると、それ以降のギャッ
プの値は1とされる。そして、ギャップの値が1とな
り、かつストローク処理においてイベントデータの入替
えが発生しなくなった時点で、ソート処理が終了する。
【0100】以上のコムソートアルゴリズムが、最も高
速なソートアルゴリズムとして知られている。しかし、
上述のコムソートアルゴリズムでは、ストロークが進む
毎にソート処理されるべき要素数又は前回のギャップ値
を1.3で割ることにより新たなギャップの値を算出す
る処理が必要となる。このことは、上記除算処理のため
に小数演算用コプロセッサが必要になるということを意
味するため、ハードウエア規模が大きくなってしまうと
いう欠点がある。
【0101】そこで、本実施例では、コムソートアルゴ
リズムを基本とし、値1.3による除算処理を、値3の
乗算処理と値4の除算処理で置き換えたアルゴリズムが
採用される。即ち、値1.3による除算処理が値(3/
4)による除算処理に置き換えられたことになる。これ
により、小数演算用コプロセッサが不要となり、ハード
ウエア規模の増大を抑えることができる。なお、このよ
うにギャップ値が代用されても、ソート時間の増大はそ
れほど大きくならない。
【0102】図13は、上述のアルゴリズムに基づく図
7のステージ718の処理の詳細な動作フローチャート
である。図13の動作フローチャートにおいて、まず、
SIZE(CPU103内のレジスタ又はRAM105
に確保される)には、ソート処理の対象となるフラグメ
ントの要素数がセットされる。この数は、(フラグメン
ト終了イベント−フラグメント先頭イベント+1)とし
て算出できる。
【0103】次に、GAP(CPU103内のレジスタ
又はRAM105に確保される)には、前述のギャップ
の値がセットされる。また、TOP(CPU103内の
レジスタ又はRAM105に確保される)には、後述す
るイベント移動ループ処理時の上限のイベントの要素値
がセットされる。
【0104】更に、COUNTER(CPU103内の
レジスタ又はRAM105に確保される)には、後述す
る移動イベントカウンタ値がセットされる。図13の動
作フローチャートにおいて、まず、ステップ1301
で、GAPにSIZEの値がセットされる。次に、前述
した除算処理の簡略化原理に基づき、ステップ1302
において、GAPの値に整数値3を乗算する整数乗算処
理が実行され、更に、その乗算結果を整数値4で除算す
る整数除算処理が実行される。この除算処理は、実際に
は、2ビット右シフト演算として実現できる。この演算
結果が新たなGAPの値としてセットされる。
【0105】次に、ステップ1303で新たに算出され
たGAPの値が判定され、GAPの値が9又は10の場
合には、前述したコムソート11のアルゴリズムの原理
に基づいて、ステップ1304で、GAPの値が11に
修正される。また、GAPの値が0となってしまった場
合には、やはり前述したコムソート11のアルゴリズム
の原理に基づいて、ステップ1305で、GAPの値が
1に修正される。GAPの値が9、10、又は0の何れ
でもない場合には、GAPの値の修正は行われない。
【0106】次に、ステップ1306で、COUNTE
Rの値が0にセットされる。続いて、ステップ1307
で、第1イベント要素番号(CPU103内のレジスタ
又はRAM105に確保される)に、図7の動作フロー
チャートにおいて求まっているフラグメント先頭イベン
トにセットされている要素番号がセットされる。この第
1イベント要素番号は、後述するイベント移動ループ処
理において比較される2つのイベントデータのうち要素
番号が小さい方のイベントデータに対応する。
【0107】次に、TOPの値が、次の数1式により算
出されセットされる。
【0108】
【数1】 TOP=フラグメント先頭イベント+SIZE−GAP このTOPの値は、次に説明するイベント移動ループ処
理においてインクリメントすることのできる第1イベン
ト要素番号の上限値に対応する。
【0109】続いて、ステップ1309〜1314→1
315→1309のイベント移動ループ処理が実行され
る。ここでは、1ストローク分のイベントデータの比較
・入替え処理が実行される。
【0110】まず、ステップ1309では、第2イベン
ト要素番号(CPU103内のレジスタ又はRAM10
5に確保される)の値が、次の数2式によって算出され
セットされる。
【0111】
【数2】 第2イベント要素番号=第1イベント要素番号+GAP この第2イベント要素番号は、イベント移動ループ処理
において比較される2つのイベントデータのうち要素番
号が大きい方のイベントデータに対応する。
【0112】ステップ1310では、RAM105の配
列SNG_SONG(図3(c) )に記憶される第1イベ
ント要素番号に対応するイベントデータの第2ワードの
小節先頭からのクロック値が、同じく第2イベント要素
番号に対応するイベントデータの第2ワードの小節先頭
からのクロック値よりも大きいか否か、即ち、第1イベ
ント要素番号に対応するイベントデータが第2イベント
要素番号に対応するイベントデータよりも後ろに配置さ
れるべきか否かが判定される。
【0113】ステップ1310の判定がYESの場合に
は、ステップ1311で、第1イベント要素番号に対応
するイベントデータと第2イベント要素番号に対応する
イベントデータの記憶位置が入れ替えられる。その後、
ステップ1312で、COUNTERの値がインクリメ
ントされる。更に、ステップ1313で、時間ソート処
理終了フラグの値が、0にセットされる。このように、
実際にイベントデータの入替えが発生した場合には、時
間ソート処理終了フラグの値が0にセットされるため、
前述した図6のステップ604のフラグメント内ソート
処理とステップ605のフラグメント間ソート処理が終
了した後にステップ602の判定に戻った時点で、その
判定が再びYESとなり、時間ソート処理が続行され
る。
【0114】一方、ステップ1310の判定がNOの場
合には、ステップ1311〜1313の処理は実行され
ない。続いて、ステップ1314で、第1イベント要素
番号の値がTOPの値より小さいか否かが判定される。
【0115】ステップ1314の判定がYESなら、ス
テップ1315で第1イベント要素番号の値がインクリ
メントされた後、ステップ1309で第1イベント要素
番号からGAPの値分だけ離れた新たな第2イベント要
素番号の値が算出され、ステップ1310〜1313
で、両者に対する比較・入替えの処理が実行される。
【0116】以上のステップ1309〜1315の処理
がステップ1314の判定がNOとなるまで繰り返され
ることにより、1ストローク分のイベントデータの比較
・入替え処理が実行される。
【0117】次に、ステップ1314の判定がNOとな
り1ストローク分のイベントデータの比較・入替え処理
が終了すると、ステップ1315で、COUNTERの
値が0でないか(即ち、直前にイベントデータの入替え
が行われたか)、又はGAPの値が1より大きいかが判
定される。
【0118】ステップ1316の判定がYESなら、ス
テップ1302〜1305に戻って新たなストロークの
ためのGAPの値が算出され、ステップ1306〜13
08の処理の後、前述したステップ1309〜1315
のイベント移動ループ処理によって、新たなストローク
に対するイベントデータの比較・入替え処理が繰り返さ
れる。
【0119】GAPの値が1となり、かつ前述したイベ
ント移動ループ処理によってイベントデータの入替えが
発生しなくなり、ステップ1316の判定がNOとなっ
た時点で、図13によって示される図7のステップ71
8のフラグメント内のソート処理が終了する。
【0120】
【発明の効果】本発明によれば、例えば楽曲データの再
生処理において、非常に高速な1又は複数小節単位の早
送り再生又は巻き戻し再生を簡単な制御で実現すること
が可能となる。
【0121】また、楽曲データの編集処理が実行される
場合に、例えば小節単位の移動、既存の小節への新たな
楽曲データの追加、その他、楽曲データの挿入、削除等
を、簡単なデータ操作で実現することが可能となる。
【0122】このように、楽曲データが、第1の記憶手
段、第2の記憶手段、又は第3の記憶手段を介して階層
的に管理されることにより、楽曲データの再生処理、編
集処理等の制御を簡単に実行することが可能となる。
【図面の簡単な説明】
【図1】本発明の実施例の構成図である。
【図2】RAM105に記憶される楽曲データのデータ
フォーマットを示す図(その1)である。
【図3】RAM105に記憶される楽曲データのデータ
フォーマットを示す図(その2)である。
【図4】ノートイベントデータとコントロールイベント
データのデータフォーマットを示す図である。
【図5】ジャンプイベントデータ群のデータフォーマッ
トを示す図である。
【図6】時間ソート処理の全体動作フローチャートであ
る。
【図7】フラグメント内ソート処理の動作フローチャー
トである。
【図8】フラグメント間ソート処理の動作フローチャー
ト(その1)である。
【図9】フラグメント間ソート処理の動作フローチャー
ト(その2)である。
【図10】フラグメント間ソート処理の動作フローチャ
ート(その3)である。
【図11】第2フラグメント先頭イベントサーチ処理の
動作フローチャートである。
【図12】イベント移動処理の動作フローチャートであ
る。
【図13】フラグメント内のイベントソート処理を示す
動作フローチャートである。
【符号の説明】
101 演奏情報入力部 102 表示部 103 CPU 104 ROM 105 RAM 106 演奏情報出力部 107 システム操作子群

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 自動演奏を行うための楽曲データに対し
    て自動演奏のための制御を行う自動演奏制御装置におい
    て、 小節単位の楽曲データ群であって、それぞれ小節の先頭
    からの時間データを含むことのできる楽曲データ群を記
    憶する第1の記憶手段と、 前記小節単位の楽曲データ群の前記第1の記憶手段上で
    の記憶位置を示す情報である小節単位楽曲データ群指示
    データを記憶する第2の記憶手段と、 該第2の記憶手段に記憶される小節単位楽曲データ群指
    示データを操作することによって、前記第1の記憶手段
    に記憶される楽曲データ群に対して自動演奏のための制
    御を実行する制御手段と、 を有することを特徴とする自動演奏制御装置。
  2. 【請求項2】 前記第2の記憶手段に記憶される小節単
    位楽曲データ群指示データは、連続して記憶される複数
    個ずつが小節ブロックとして管理され、 該小節ブロック単位の小節単位楽曲データ群指示データ
    の前記第2の記憶手段上での記憶位置を示す情報である
    指示データを記憶する第3の記憶手段を更に有し、 前記制御手段は、該第3の記憶手段に記憶される指示デ
    ータ及び前記第2の記憶手段に記憶される小節単位楽曲
    データ群指示データを操作することによって、前記第1
    の記憶手段に記憶される楽曲データ群に対して自動演奏
    のための制御を実行する、 ことを特徴とする請求項1に記載の自動演奏制御装置。
  3. 【請求項3】 自動演奏を行うための楽曲データに対し
    て自動演奏のための制御を行う自動演奏制御装置に使用
    する楽曲データ記憶装置において、 小節単位の楽曲データ群であって、それぞれ小節の先頭
    からの時間データを含むことのできる楽曲データ群を記
    憶する第1の記憶手段と、 前記小節単位の楽曲データ群の前記第1の記憶手段上で
    の記憶位置を示す情報である小節単位楽曲データ群指示
    データを記憶する第2の記憶手段と、 を有することを特徴とする楽曲データ記憶装置。
  4. 【請求項4】 前記第2の記憶手段に記憶される小節単
    位楽曲データ群指示データは、連続して記憶される複数
    個ずつが小節ブロックとして管理され、 該小節ブロック単位の小節単位楽曲データ群指示データ
    の前記第2の記憶手段上での記憶位置を示す情報である
    指示データを記憶する第3の記憶手段を更に有する、 ことを特徴とする請求項3に記載の楽曲データ記憶装
    置。
JP6340418A 1994-12-29 1994-12-29 自動演奏制御装置及びそれに使用する楽曲データ記憶装置 Abandoned JPH08185164A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP6340418A JPH08185164A (ja) 1994-12-29 1994-12-29 自動演奏制御装置及びそれに使用する楽曲データ記憶装置
US08/576,481 US5672837A (en) 1994-12-29 1995-12-21 Automatic performance control apparatus and musical data storing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6340418A JPH08185164A (ja) 1994-12-29 1994-12-29 自動演奏制御装置及びそれに使用する楽曲データ記憶装置

Publications (1)

Publication Number Publication Date
JPH08185164A true JPH08185164A (ja) 1996-07-16

Family

ID=18336767

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6340418A Abandoned JPH08185164A (ja) 1994-12-29 1994-12-29 自動演奏制御装置及びそれに使用する楽曲データ記憶装置

Country Status (1)

Country Link
JP (1) JPH08185164A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7019205B1 (en) 1999-10-14 2006-03-28 Sony Computer Entertainment Inc. Entertainment system, entertainment apparatus, recording medium, and program
US7058462B1 (en) 1999-10-14 2006-06-06 Sony Computer Entertainment Inc. Entertainment system, entertainment apparatus, recording medium, and program

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7019205B1 (en) 1999-10-14 2006-03-28 Sony Computer Entertainment Inc. Entertainment system, entertainment apparatus, recording medium, and program
US7058462B1 (en) 1999-10-14 2006-06-06 Sony Computer Entertainment Inc. Entertainment system, entertainment apparatus, recording medium, and program

Similar Documents

Publication Publication Date Title
JP3163119B2 (ja) 記録再生装置
JP3829549B2 (ja) 楽音生成装置及びテンプレート編集装置
US5672837A (en) Automatic performance control apparatus and musical data storing device
US5009145A (en) Automatic performance apparatus having automatic synchronizing function
JP3448928B2 (ja) 楽譜認識装置
JPH08185164A (ja) 自動演奏制御装置及びそれに使用する楽曲データ記憶装置
US6956161B2 (en) Musical performance data search system
JP3489236B2 (ja) シーケンスデータのソート処理装置/方法
JP3533481B2 (ja) シーケンスデータの挿入処理装置
JP2743808B2 (ja) 自動演奏装置
JP3029339B2 (ja) 楽音波形に関するデータの処理装置及び処理方法
JP4305315B2 (ja) 自動演奏データ特性変更装置及びそのプログラム
JPH0981368A (ja) シーケンスデータのソート処理装置/方法
JP2641851B2 (ja) 自動演奏装置
JP3219150B2 (ja) 演奏情報圧縮方法
JP2625800B2 (ja) 自動演奏装置
JP3322763B2 (ja) 演奏情報圧縮方法
JP3217772B2 (ja) 楽音波形に関するデータの処理装置及び処理方法
JP3031392B2 (ja) 演奏再生装置及び演奏再生方法
JPS63192097A (ja) 自動演奏装置
JP3307598B2 (ja) 演奏記録再生装置
JP2583377B2 (ja) 自動演奏装置
JP3040583B2 (ja) 楽音波形に関するデータの処理装置及び処理方法
JP4350198B2 (ja) 楽音演奏装置
JP2002116758A (ja) 波形編集方法および装置

Legal Events

Date Code Title Description
A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20040109