JPH07181967A - 演奏データ読込装置 - Google Patents
演奏データ読込装置Info
- Publication number
- JPH07181967A JPH07181967A JP5328841A JP32884193A JPH07181967A JP H07181967 A JPH07181967 A JP H07181967A JP 5328841 A JP5328841 A JP 5328841A JP 32884193 A JP32884193 A JP 32884193A JP H07181967 A JPH07181967 A JP H07181967A
- Authority
- JP
- Japan
- Prior art keywords
- performance data
- track
- cache
- data
- performance
- 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)【要約】
【目的】本発明は、例えばフロッピィディスク等の外部
メモリに記憶された演奏データを読み込む演奏データ読
込装置に関し、内部メモリの使用効率を向上させる。 【構成】空いている(または空いた)キャッシュにどこ
のトラックの演奏データをロードするかを固定的には定
めず、ロードされている演奏データの総クロック(演奏
時間)の最小のトラックの演奏データをロードする。
メモリに記憶された演奏データを読み込む演奏データ読
込装置に関し、内部メモリの使用効率を向上させる。 【構成】空いている(または空いた)キャッシュにどこ
のトラックの演奏データをロードするかを固定的には定
めず、ロードされている演奏データの総クロック(演奏
時間)の最小のトラックの演奏データをロードする。
Description
【0001】
【産業上の利用分野】本発明は、例えばフロッピィディ
スク等の外部メモリに記憶された演奏データを読み込む
演奏データ読込装置に関する。
スク等の外部メモリに記憶された演奏データを読み込む
演奏データ読込装置に関する。
【0002】
【従来の技術】近年、自動演奏装置が広く使用されてい
る。自動演奏装置は、通常、外部メモリ、例えばフロッ
ピィディスク(以下フロッピィディスクで代表させる)
が装填可能に構成されており、好みの楽曲を表わす演奏
データが記憶されたフロッピィディスクを装填して演奏
を楽しむことができるように構成されている。
る。自動演奏装置は、通常、外部メモリ、例えばフロッ
ピィディスク(以下フロッピィディスクで代表させる)
が装填可能に構成されており、好みの楽曲を表わす演奏
データが記憶されたフロッピィディスクを装填して演奏
を楽しむことができるように構成されている。
【0003】このように構成された自動演奏装置におい
て、自動演奏を行なうには、従来は装填されたフロッピ
ィディスクに記憶された演奏データを一旦RAM等の内
部メモリに一曲分全部を転送し、その転送の後、その内
部メモリから演奏データを順次読み出して演奏を行なっ
ていた。ところがこの方法では少なくとも一曲分の演奏
データを記憶できる程度の大容量の内部メモリが必要で
あり、近年一曲分の演奏データがますます増加する傾向
にあるため、ますます大容量の内部メモリを備える必要
があり、コスト上好ましくない傾向となっている。
て、自動演奏を行なうには、従来は装填されたフロッピ
ィディスクに記憶された演奏データを一旦RAM等の内
部メモリに一曲分全部を転送し、その転送の後、その内
部メモリから演奏データを順次読み出して演奏を行なっ
ていた。ところがこの方法では少なくとも一曲分の演奏
データを記憶できる程度の大容量の内部メモリが必要で
あり、近年一曲分の演奏データがますます増加する傾向
にあるため、ますます大容量の内部メモリを備える必要
があり、コスト上好ましくない傾向となっている。
【0004】これを解決するため、以下に説明する手法
が提案されている。図27は、従来の手法における演奏
データのロード方法を示すフローチャート、図28はそ
の従来の手法の説明図である。ここでは、1つの曲を構
成するのに必要な演奏の各パート毎の演奏データ、例え
ばリズムを表わす演奏データ、メロディを表わす演奏デ
ータ、ベースを表わす演奏データ等のそれぞれを「トラ
ック」と称する。またここでは、フロッピィディスクの
アクセスの単位を「セクタ」と称する。
が提案されている。図27は、従来の手法における演奏
データのロード方法を示すフローチャート、図28はそ
の従来の手法の説明図である。ここでは、1つの曲を構
成するのに必要な演奏の各パート毎の演奏データ、例え
ばリズムを表わす演奏データ、メロディを表わす演奏デ
ータ、ベースを表わす演奏データ等のそれぞれを「トラ
ック」と称する。またここでは、フロッピィディスクの
アクセスの単位を「セクタ」と称する。
【0005】図28に示すように、この自動演奏装置で
は最大5トラックの演奏を行なうことができるものと
し、各トラック毎に、セクタ単位のデータが格納される
一時メモリであるキャッシュを、キャッシュAとキャッ
シュBの2つ用意する。そして、図27のステップ27
_1に示すように、各トラック毎のキャッシュA,Bが
空いているかどうか判断し、空いているキャッシュがあ
ればそのキャッシュに演奏データをロードし(ステップ
27_2)、それを全トラックについて順次繰り返して
いた(ステップ27_3)。
は最大5トラックの演奏を行なうことができるものと
し、各トラック毎に、セクタ単位のデータが格納される
一時メモリであるキャッシュを、キャッシュAとキャッ
シュBの2つ用意する。そして、図27のステップ27
_1に示すように、各トラック毎のキャッシュA,Bが
空いているかどうか判断し、空いているキャッシュがあ
ればそのキャッシュに演奏データをロードし(ステップ
27_2)、それを全トラックについて順次繰り返して
いた(ステップ27_3)。
【0006】例えばトラック0〜4について、各トラッ
ク専用の各2つのキャッシュA,Bを用意し、それらの
キャッシュA,Bにデータを格納し、キャッシュAのデ
ータを1パケット単位で読み出してバッファに一旦格納
し、そのバッファからクロックに応じて1メッセージ単
位のデータとしてMIDI出力する。ここで、例えばト
ラック0についてキャッシュAの演奏データの読み出し
が終了すると、それに引き続いてキャッシュBの演奏デ
ータが1パケット単位で順次バッファに転送され、その
間にキャッシュAに、キャッシュBに格納された演奏デ
ータに引き続く演奏データがフロッピィディスクから読
み出されて格納される。以後同様にして、キャッシュA
とキャッシュBが交互に用いられる。他のトラック2〜
5についても同様である。各トラック毎にキャッシュを
2つ用意するのは、フロッピィディスクからキャッシュ
に演奏データを転送するのに、1回の転送あたり例えば
0.25秒程度必要とし、これはテンポ120で考える
と8分音符1つ分程度に相当し、1つのトラックについ
てキャッシュを1つしか備えないとそのキャッシュに格
納された演奏データによる演奏が終了した後次の演奏デ
ータが転送されるまでの間、演奏が中断してしまうから
である。
ク専用の各2つのキャッシュA,Bを用意し、それらの
キャッシュA,Bにデータを格納し、キャッシュAのデ
ータを1パケット単位で読み出してバッファに一旦格納
し、そのバッファからクロックに応じて1メッセージ単
位のデータとしてMIDI出力する。ここで、例えばト
ラック0についてキャッシュAの演奏データの読み出し
が終了すると、それに引き続いてキャッシュBの演奏デ
ータが1パケット単位で順次バッファに転送され、その
間にキャッシュAに、キャッシュBに格納された演奏デ
ータに引き続く演奏データがフロッピィディスクから読
み出されて格納される。以後同様にして、キャッシュA
とキャッシュBが交互に用いられる。他のトラック2〜
5についても同様である。各トラック毎にキャッシュを
2つ用意するのは、フロッピィディスクからキャッシュ
に演奏データを転送するのに、1回の転送あたり例えば
0.25秒程度必要とし、これはテンポ120で考える
と8分音符1つ分程度に相当し、1つのトラックについ
てキャッシュを1つしか備えないとそのキャッシュに格
納された演奏データによる演奏が終了した後次の演奏デ
ータが転送されるまでの間、演奏が中断してしまうから
である。
【0007】このように構成することにより、フロッピ
ィディスクに格納された演奏データを1曲分まとめてロ
ードすることのできる大容量の内部メモリを備えること
なく、演奏データをフロッピィディスクから少しずつ順
次ロードしながら演奏を行なうことができる。
ィディスクに格納された演奏データを1曲分まとめてロ
ードすることのできる大容量の内部メモリを備えること
なく、演奏データをフロッピィディスクから少しずつ順
次ロードしながら演奏を行なうことができる。
【0008】
【発明が解決しようとする課題】上述したように1回の
データ転送に約0.25秒程度必要とするため、上述
の、フロッピィディスクから内部のキャッシュに少しず
つデータ転送を行なう手法では、この転送速度よりキャ
ッシュからデータを送出する速度の方が速い、例えばテ
ンポの速い演奏を行う場合、クロックに正確な安定した
演奏を行なうためには、1つのトラックあたりのキャッ
シュの数を増やす必要がある。しかし、そのように1つ
のトラックあたりのキャッシュの数を増やすと、キャッ
シュとして必要な全メモリ容量はその装置の最大トラッ
ク数に比例して膨大なものになってしまうということに
なる。また曲目によっては、その装置の最大トラック数
よりも少ない数のトラックしか使用しない場合もあり、
そのときにはその曲の演奏の間ずっと空のままのキャッ
シュが生じてしまい、メモリの使用効率が悪いという問
題がある。
データ転送に約0.25秒程度必要とするため、上述
の、フロッピィディスクから内部のキャッシュに少しず
つデータ転送を行なう手法では、この転送速度よりキャ
ッシュからデータを送出する速度の方が速い、例えばテ
ンポの速い演奏を行う場合、クロックに正確な安定した
演奏を行なうためには、1つのトラックあたりのキャッ
シュの数を増やす必要がある。しかし、そのように1つ
のトラックあたりのキャッシュの数を増やすと、キャッ
シュとして必要な全メモリ容量はその装置の最大トラッ
ク数に比例して膨大なものになってしまうということに
なる。また曲目によっては、その装置の最大トラック数
よりも少ない数のトラックしか使用しない場合もあり、
そのときにはその曲の演奏の間ずっと空のままのキャッ
シュが生じてしまい、メモリの使用効率が悪いという問
題がある。
【0009】本発明は、上記事情に鑑み、内部メモリの
使用効率を向上させた演奏データ読込装置を提供するこ
とを目的とする。
使用効率を向上させた演奏データ読込装置を提供するこ
とを目的とする。
【0010】
【課題を解決するための手段】上記目的を達成する本発
明の第1の演奏データ読込装置は、装填された外部メモ
リから、1つの曲を構成する複数のトラックの演奏デー
タを読み込む演奏データ読込装置において、 (1)外部メモリから読み込まれた演奏データを、外部
メモリをアクセスする単位で格納する複数の内部メモリ (2)上記複数の内部メモリに格納された演奏データ
を、各トラックそれぞれについて順次取り出すデータ取
出し手段 (3)上記複数の内部メモリ中に空の内部メモリが発生
した際、それら複数の内部メモリに格納されている各ト
ラック毎の演奏データのうち最短時間で演奏が終了する
トラックの演奏データに続く、そのトラックの次の演奏
データを外部メモリから読み込んで空の内部メモリに格
納する読込制御手段 を備えたことを特徴とする。
明の第1の演奏データ読込装置は、装填された外部メモ
リから、1つの曲を構成する複数のトラックの演奏デー
タを読み込む演奏データ読込装置において、 (1)外部メモリから読み込まれた演奏データを、外部
メモリをアクセスする単位で格納する複数の内部メモリ (2)上記複数の内部メモリに格納された演奏データ
を、各トラックそれぞれについて順次取り出すデータ取
出し手段 (3)上記複数の内部メモリ中に空の内部メモリが発生
した際、それら複数の内部メモリに格納されている各ト
ラック毎の演奏データのうち最短時間で演奏が終了する
トラックの演奏データに続く、そのトラックの次の演奏
データを外部メモリから読み込んで空の内部メモリに格
納する読込制御手段 を備えたことを特徴とする。
【0011】また、上記目的を達成する本発明の第2の
演奏データ読込装置は、上記第1の演奏データ読込装置
にいう外部メモリとしてディスク装置を備え、さらに、
上記(3)の読込制御手段に代えて、 (4)上記複数の内部メモリ中に空の内部メモリが発生
した際、それら複数の内部メモリに格納されている演奏
データの各トラック毎の演奏終了時刻と、ディスク装置
の現在のヘッド位置とに基づいて、ディスク装置の、次
にアクセスされるメモリ領域を定め、そのメモリ領域に
記憶された演奏データをディスク装置から読み込んで空
の内部メモリに格納する読込制御手段 を備えたことを特徴とする。
演奏データ読込装置は、上記第1の演奏データ読込装置
にいう外部メモリとしてディスク装置を備え、さらに、
上記(3)の読込制御手段に代えて、 (4)上記複数の内部メモリ中に空の内部メモリが発生
した際、それら複数の内部メモリに格納されている演奏
データの各トラック毎の演奏終了時刻と、ディスク装置
の現在のヘッド位置とに基づいて、ディスク装置の、次
にアクセスされるメモリ領域を定め、そのメモリ領域に
記憶された演奏データをディスク装置から読み込んで空
の内部メモリに格納する読込制御手段 を備えたことを特徴とする。
【0012】
【作用】複数のトラックの演奏データをよく観察してみ
ると、テンポトラックのようにほとんどデータがなかっ
たり、リズムトラックやギターデータが記録されている
トラックのように大量のデータが記録されていたりと、
データ量は同一ではない。
ると、テンポトラックのようにほとんどデータがなかっ
たり、リズムトラックやギターデータが記録されている
トラックのように大量のデータが記録されていたりと、
データ量は同一ではない。
【0013】そこで、本発明のうち第1の自動演奏装置
では、空いている(または空いた)内部メモリにどこの
トラックのデータをロードするかを固定的には定めず、
ロードされているデータの総クロック最小(演奏時間最
短)のトラックのデータをロードするようにしたため、
内部メモリの利用効率が上がり、内部メモリの数が少な
めであっても、過密データの、クロックに正確な演奏が
可能になる。
では、空いている(または空いた)内部メモリにどこの
トラックのデータをロードするかを固定的には定めず、
ロードされているデータの総クロック最小(演奏時間最
短)のトラックのデータをロードするようにしたため、
内部メモリの利用効率が上がり、内部メモリの数が少な
めであっても、過密データの、クロックに正確な演奏が
可能になる。
【0014】また、外部メモリとして、ディスク装置を
備えた場合に、そのディスク装置に記憶されたデータを
ロードする際に、そのディスク装置のヘッドを大きく移
動させるとそれだけロードする迄に時間がかかり、した
がってヘッドの動きの少ない順序でロードすることが好
ましい。本発明の第2の自動演奏装置は、この観点から
成されたものであり、基本的には上記第1の自動演奏装
置と同様ではあるが、次にロードすべきデータを、ロー
ドされているデータの総クロックの最小トラックのデー
タに固定するものではなく、総クロックの小さいいくつ
かのデータの中からヘッドの動きが少なくて済むデータ
を先にロードすることにより、全体としてより迅速なロ
ードが行なわれる。
備えた場合に、そのディスク装置に記憶されたデータを
ロードする際に、そのディスク装置のヘッドを大きく移
動させるとそれだけロードする迄に時間がかかり、した
がってヘッドの動きの少ない順序でロードすることが好
ましい。本発明の第2の自動演奏装置は、この観点から
成されたものであり、基本的には上記第1の自動演奏装
置と同様ではあるが、次にロードすべきデータを、ロー
ドされているデータの総クロックの最小トラックのデー
タに固定するものではなく、総クロックの小さいいくつ
かのデータの中からヘッドの動きが少なくて済むデータ
を先にロードすることにより、全体としてより迅速なロ
ードが行なわれる。
【0015】
【実施例】以下、本発明の実施例について説明する。図
1は、本発明の演奏データ読込装置の一実施例の構成を
表わすブロック図である。この自動演奏装置10には、
プログラムを実行するCPU11、CPU11で実行さ
れるプログラムを格納するROM12、プログラムの作
業領域として使用されるRAM13が備えられている。
本実施例では、このRAM13内部に、本発明にいう複
数のキャッシュが確保される。
1は、本発明の演奏データ読込装置の一実施例の構成を
表わすブロック図である。この自動演奏装置10には、
プログラムを実行するCPU11、CPU11で実行さ
れるプログラムを格納するROM12、プログラムの作
業領域として使用されるRAM13が備えられている。
本実施例では、このRAM13内部に、本発明にいう複
数のキャッシュが確保される。
【0016】またこの自動演奏装置10には、演奏の開
始(PLAY)、停止(STOP)等を指示するスイッ
チ14、この自動演奏装置10の状態、例えば演奏中の
曲の曲番号や小節番号等を表示する表示器15、フロッ
ピィディスク装置16を制御してフロッピィディスク装
置16に装填されたフロッピィディスクをアクセスする
フロッピィディスク制御装置17、演奏データをMID
I出力端子から出力するMIDI通信装置18が接続さ
れている。これらの各構成要素11〜15,17,18
はバス19により互いに接続されている。MIDI通信
装置18から出力された演奏データは、外部に接続され
た。例えば自動演奏装置に入力され、この自動演奏装置
により、入力された演奏データに基づく自動演奏が行な
われる。尚、ここでは、演奏データ読込装置に自動演奏
装置が接続されるものとして説明するが、本実施例の演
奏データ読込装置を内包した自動演奏装置を構成しても
よいことはもちろんである。
始(PLAY)、停止(STOP)等を指示するスイッ
チ14、この自動演奏装置10の状態、例えば演奏中の
曲の曲番号や小節番号等を表示する表示器15、フロッ
ピィディスク装置16を制御してフロッピィディスク装
置16に装填されたフロッピィディスクをアクセスする
フロッピィディスク制御装置17、演奏データをMID
I出力端子から出力するMIDI通信装置18が接続さ
れている。これらの各構成要素11〜15,17,18
はバス19により互いに接続されている。MIDI通信
装置18から出力された演奏データは、外部に接続され
た。例えば自動演奏装置に入力され、この自動演奏装置
により、入力された演奏データに基づく自動演奏が行な
われる。尚、ここでは、演奏データ読込装置に自動演奏
装置が接続されるものとして説明するが、本実施例の演
奏データ読込装置を内包した自動演奏装置を構成しても
よいことはもちろんである。
【0017】図2、図3は、本実施例におけるデータ転
送処理の基本概念を示した、それぞれフローチャート、
データの流れを示す説明図である。図3に示すように、
この実施例では5つのキャッシュが用意されており、図
2のルーチンのステップ2_1において番号i(i=0
〜4)のキャッシュが空か否かを判断し、空のキャッシ
ュがあった場合、ステップ2_2において、ロード済デ
ータの総クロック数が最小のトラックを捜し、そのトラ
ックのデータをロードする。これを全キャッシュについ
て繰り返す(ステップ2_3)。すなわち、ここには、
キャッシュとトラックとの固定的な対応づけはなく、空
きのキャッシュが発生する毎に、総クロック数が最小、
即ちロードした演奏データが最も早くなくなってしまう
トラックの演奏データを、その空のキャッシュに転送す
るようにしたものである。
送処理の基本概念を示した、それぞれフローチャート、
データの流れを示す説明図である。図3に示すように、
この実施例では5つのキャッシュが用意されており、図
2のルーチンのステップ2_1において番号i(i=0
〜4)のキャッシュが空か否かを判断し、空のキャッシ
ュがあった場合、ステップ2_2において、ロード済デ
ータの総クロック数が最小のトラックを捜し、そのトラ
ックのデータをロードする。これを全キャッシュについ
て繰り返す(ステップ2_3)。すなわち、ここには、
キャッシュとトラックとの固定的な対応づけはなく、空
きのキャッシュが発生する毎に、総クロック数が最小、
即ちロードした演奏データが最も早くなくなってしまう
トラックの演奏データを、その空のキャッシュに転送す
るようにしたものである。
【0018】以下、このデータ転送について詳細に説明
する。図4は、本実施例における、フロッピィディスク
装置16(図1参照)に装填されたフロッピィディスク
中の、今から演奏しようとするある曲の演奏データのデ
ータ構造を示した図である。この曲の演奏には3つのト
ラックが使用され、トラック1の演奏データは、そのフ
ロッピィディスクのセクタ0と、セクタ1の一部とに記
憶されており、その各セクタ内のトラック0の演奏デー
タのクロック数(演奏時間)はそれぞれ150,10で
ある。またトラック1の演奏データは、セクタ1の一部
と、セクタ2,セクタ3と、セクタ4の一部とに記憶さ
れており、その各セクタ内のトラック1のクロック数
は、それぞれ、10,50,50,50である。同様
に、トラック2の演奏データは、セクタ4の一部と、セ
クタ5,6に記憶されており、各セクタ内のトラック2
のクロック数は、それぞれ20,100,40である。
する。図4は、本実施例における、フロッピィディスク
装置16(図1参照)に装填されたフロッピィディスク
中の、今から演奏しようとするある曲の演奏データのデ
ータ構造を示した図である。この曲の演奏には3つのト
ラックが使用され、トラック1の演奏データは、そのフ
ロッピィディスクのセクタ0と、セクタ1の一部とに記
憶されており、その各セクタ内のトラック0の演奏デー
タのクロック数(演奏時間)はそれぞれ150,10で
ある。またトラック1の演奏データは、セクタ1の一部
と、セクタ2,セクタ3と、セクタ4の一部とに記憶さ
れており、その各セクタ内のトラック1のクロック数
は、それぞれ、10,50,50,50である。同様
に、トラック2の演奏データは、セクタ4の一部と、セ
クタ5,6に記憶されており、各セクタ内のトラック2
のクロック数は、それぞれ20,100,40である。
【0019】図5〜図14は、フロッピィディスクに記
憶された図4に示すデータ構造の演奏データが、図3に
示す5つのキャッシュに転送(ロード)される際の転送
手順と、そのデータ転送に伴う図1に示すCPU11で
実行されるデータ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
憶された図4に示すデータ構造の演奏データが、図3に
示す5つのキャッシュに転送(ロード)される際の転送
手順と、そのデータ転送に伴う図1に示すCPU11で
実行されるデータ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
【0020】これらの図5〜図14に示す各種フラグ、
レジスタ等の役割りは以下のとおりである。 ・LoadPtr[i]:番号i(i=0〜2)のトラ
ックの演奏データを最後にロードしたキャッシュの番号
(0〜4)を格納するレジスタ ・LoadTime[i]:番号iのトラックの、それ
までキャッシュにロードされた演奏データの総クロック
数を格納するレジスタ ・SectCnt[i]:番号iのトラックの、未だキ
ャッシュにロードされていない、残りのセクタの数を格
納するレジスタ ・PlayNo[i]:番号iのトラックの、次に出力
される演奏データが格納されているキャッシュの番号を
格納するレジスタ ・Cache[j]:番号jのキャッシュにロードされ
た演奏データが記憶されていた、フロッピィディスクの
セクタの番号を格納するレジスタ ・Free[j]:番号jのキャッシュが空(‘1’)
であるか否(‘0’)かを示すフラグ ・Next[j]:番号jのキャッシュに格納された演
奏データに引き続く、その演奏データのトラックと同一
のトラックの演奏データが格納されたキャッシュの番号
を格納するレジスタ。自分が最後のときは‘−1’が格
納される。
レジスタ等の役割りは以下のとおりである。 ・LoadPtr[i]:番号i(i=0〜2)のトラ
ックの演奏データを最後にロードしたキャッシュの番号
(0〜4)を格納するレジスタ ・LoadTime[i]:番号iのトラックの、それ
までキャッシュにロードされた演奏データの総クロック
数を格納するレジスタ ・SectCnt[i]:番号iのトラックの、未だキ
ャッシュにロードされていない、残りのセクタの数を格
納するレジスタ ・PlayNo[i]:番号iのトラックの、次に出力
される演奏データが格納されているキャッシュの番号を
格納するレジスタ ・Cache[j]:番号jのキャッシュにロードされ
た演奏データが記憶されていた、フロッピィディスクの
セクタの番号を格納するレジスタ ・Free[j]:番号jのキャッシュが空(‘1’)
であるか否(‘0’)かを示すフラグ ・Next[j]:番号jのキャッシュに格納された演
奏データに引き続く、その演奏データのトラックと同一
のトラックの演奏データが格納されたキャッシュの番号
を格納するレジスタ。自分が最後のときは‘−1’が格
納される。
【0021】以下、図5〜図14について順を追って説
明する。図5、図6は、演奏開始前の演奏準備段階にお
けるデータ転送を示すものであり、先ず図5に示すよう
に、最初は全てのキャッシュが空であるから、キャッシ
ュ0,1,2に、それぞれトラック0,1,2の各先頭
の演奏データが格納されたセクタ0,1,4の演奏デー
タが順次転送される。これにより、LoadPtr
[0],LoadPtr[1],LoadPtr[2]
に、それぞれ、転送先のキャッシュ番号0,1,2が格
納され、LoadTime[0],LoadTime
[1],LoadTime[2]に、それぞれ、転送さ
れたセクタ内の各トラック0,1,2の演奏データの総
クロック数‘150’,‘10’,‘20’が格納され
る。またSectCont[0],SectCont
[1],SectCont[2]には、それぞれ、トラ
ック0,1,2の演奏データが格納された、未だキャッ
シュに転送されていないセクタ数‘1’,‘3’,
‘2’が格納される。
明する。図5、図6は、演奏開始前の演奏準備段階にお
けるデータ転送を示すものであり、先ず図5に示すよう
に、最初は全てのキャッシュが空であるから、キャッシ
ュ0,1,2に、それぞれトラック0,1,2の各先頭
の演奏データが格納されたセクタ0,1,4の演奏デー
タが順次転送される。これにより、LoadPtr
[0],LoadPtr[1],LoadPtr[2]
に、それぞれ、転送先のキャッシュ番号0,1,2が格
納され、LoadTime[0],LoadTime
[1],LoadTime[2]に、それぞれ、転送さ
れたセクタ内の各トラック0,1,2の演奏データの総
クロック数‘150’,‘10’,‘20’が格納され
る。またSectCont[0],SectCont
[1],SectCont[2]には、それぞれ、トラ
ック0,1,2の演奏データが格納された、未だキャッ
シュに転送されていないセクタ数‘1’,‘3’,
‘2’が格納される。
【0022】さらにPlayNo[0],PlayNo
[1],PlayNo[2]には、演奏のための各トラ
ックの演奏データの取り出し先であるキャッシュ番号
0’,‘1’,‘2’が格納される。またCache
[0],Cache[1],Cache[2]には、そ
のキャッシュに転送された演奏データが記憶されていた
フロッピィディスクのセクタ番号‘0’,‘1’,
‘4’が格納される。キャッシュ3,4には未だ転送さ
れていないため、Cache[3],Cache[4]
は空である。またキャッシュ0,1,2にはデータが転
送されたため、Free[0]〜Free[2]には、
それぞれ‘0’が格納される。キャッシュ3,4は空で
あるためFree[3],Free[4]には‘1’が
格納されている。さらに、キャッシュ1,2,3に格納
された演奏データが、現在のところ、各トラック0,
1,2について転送された演奏データの最終であるた
め、Next[0]〜Next[2]には、最終である
ことを示す‘−1’が格納され、また、Next
[3],Next[4]には初期値としての‘−1’が
格納されている。
[1],PlayNo[2]には、演奏のための各トラ
ックの演奏データの取り出し先であるキャッシュ番号
0’,‘1’,‘2’が格納される。またCache
[0],Cache[1],Cache[2]には、そ
のキャッシュに転送された演奏データが記憶されていた
フロッピィディスクのセクタ番号‘0’,‘1’,
‘4’が格納される。キャッシュ3,4には未だ転送さ
れていないため、Cache[3],Cache[4]
は空である。またキャッシュ0,1,2にはデータが転
送されたため、Free[0]〜Free[2]には、
それぞれ‘0’が格納される。キャッシュ3,4は空で
あるためFree[3],Free[4]には‘1’が
格納されている。さらに、キャッシュ1,2,3に格納
された演奏データが、現在のところ、各トラック0,
1,2について転送された演奏データの最終であるた
め、Next[0]〜Next[2]には、最終である
ことを示す‘−1’が格納され、また、Next
[3],Next[4]には初期値としての‘−1’が
格納されている。
【0023】次に、LoadTime[0]〜Load
Time[2]を比較し、総クロック数の最小のトラッ
ク(ここではトラック1)について空のキャッシュ3に
演奏データが転送され、空のキャッシュ4がまだ残って
いるため、キャッシュ3にデータが転送された段階にお
ける、LoadTime[0]〜LoadTime
[2]を比較し、総クロック数の最小のトラック(今度
はトラック2)について空のキャッシュ4に演奏データ
が転送され、これにより、キャッシュ0〜4の全てにつ
いて演奏データが転送される。
Time[2]を比較し、総クロック数の最小のトラッ
ク(ここではトラック1)について空のキャッシュ3に
演奏データが転送され、空のキャッシュ4がまだ残って
いるため、キャッシュ3にデータが転送された段階にお
ける、LoadTime[0]〜LoadTime
[2]を比較し、総クロック数の最小のトラック(今度
はトラック2)について空のキャッシュ4に演奏データ
が転送され、これにより、キャッシュ0〜4の全てにつ
いて演奏データが転送される。
【0024】図6は、そのときの状態を示した図であ
る。LoadPtr[1],LoadPtr[2]に
は、それぞれ、対応するトラックの、最後に転送したデ
ータのデータ転送先であるキャッシュ番号‘3’,
‘4’が格納され、LoadTime[1],Load
Time[2]には、それぞれ、トラック1,2に関す
る転送された演奏データの総クロック数‘10+5
0’,‘20+12’0が格納され、SectCont
[1],SectCont[2]には、それぞれ各トラ
ック1,2のデータ未転送のセクタ数‘2’,‘1’が
格納される。
る。LoadPtr[1],LoadPtr[2]に
は、それぞれ、対応するトラックの、最後に転送したデ
ータのデータ転送先であるキャッシュ番号‘3’,
‘4’が格納され、LoadTime[1],Load
Time[2]には、それぞれ、トラック1,2に関す
る転送された演奏データの総クロック数‘10+5
0’,‘20+12’0が格納され、SectCont
[1],SectCont[2]には、それぞれ各トラ
ック1,2のデータ未転送のセクタ数‘2’,‘1’が
格納される。
【0025】また、Cache[3],Cache
[4]には、そこに格納された演奏データのセクタ番号
‘2’,‘5’が格納され、Free[3],Free
[4]にはデータが格納されていることを示す‘0’が
格納される。さらに、Next[1],Next[2]
には、次の演奏データの格納先であるキャッシュ番号
‘3’,‘4’が格納される。
[4]には、そこに格納された演奏データのセクタ番号
‘2’,‘5’が格納され、Free[3],Free
[4]にはデータが格納されていることを示す‘0’が
格納される。さらに、Next[1],Next[2]
には、次の演奏データの格納先であるキャッシュ番号
‘3’,‘4’が格納される。
【0026】このようにして、全てのキャッシュ0〜4
に演奏データがロードされた後、演奏が開始される。図
7は、演奏開始後、10クロックに相当する時間が経過
した後の状態を表わすものである。10クロック経過し
たことにより、LoadTime[0],LoadTi
me[1],LoadTime[2]は、図6の状態の
ときよりもそれぞれ10クロックずつ減り、それぞれ
‘140’,‘0+50’,‘10+100’となる。
このとき、キャッシュ1に格納されていた演奏データに
よる演奏が終了し、Free[1]=1,Next
[1]=−1に変更され、PlayNo[1]=3に変
更される。
に演奏データがロードされた後、演奏が開始される。図
7は、演奏開始後、10クロックに相当する時間が経過
した後の状態を表わすものである。10クロック経過し
たことにより、LoadTime[0],LoadTi
me[1],LoadTime[2]は、図6の状態の
ときよりもそれぞれ10クロックずつ減り、それぞれ
‘140’,‘0+50’,‘10+100’となる。
このとき、キャッシュ1に格納されていた演奏データに
よる演奏が終了し、Free[1]=1,Next
[1]=−1に変更され、PlayNo[1]=3に変
更される。
【0027】これによりキャッシュ1は空になったた
め、SectCnt[0]〜SectCnt[2]が
‘0’ではないトラック(ここではトラック0〜2のい
ずれも‘0’ではない)に関し、LoadTime
[0]〜LoadTime[2]の内容が比較され、総
クロック数の最小のトラック1の、次の演奏データがキ
ャッシュ1にロードされる。
め、SectCnt[0]〜SectCnt[2]が
‘0’ではないトラック(ここではトラック0〜2のい
ずれも‘0’ではない)に関し、LoadTime
[0]〜LoadTime[2]の内容が比較され、総
クロック数の最小のトラック1の、次の演奏データがキ
ャッシュ1にロードされる。
【0028】図8は、キャッシュ1にトラック1の演奏
データがロードされた後の状態を示した図である。キャ
ッシュ1にセクタ3の演奏データが転送され、Cach
e[1]=3,Free[1]=0に変更され、Nex
t[3]=1に変更され、さらにLoadPtr[1]
=1,LoadTime[1]=50+50,Sect
Cont[1]=1に変更される。
データがロードされた後の状態を示した図である。キャ
ッシュ1にセクタ3の演奏データが転送され、Cach
e[1]=3,Free[1]=0に変更され、Nex
t[3]=1に変更され、さらにLoadPtr[1]
=1,LoadTime[1]=50+50,Sect
Cont[1]=1に変更される。
【0029】図9は、図8の状態から10クロック経過
後の状態を示す図である。10クロック経過したことに
より、LoadTime[0],LoadTime
[1],LoadTime[2]は、図8の状態のとき
よりもそれぞれ10クロックずつ減り、‘130’,
‘40+50’,‘0+100’となる。このときキャ
ッシュ2に格納された演奏データによるトラック2の演
奏が終了し、Free[2]=1,Next[2]=−
1に変更される。またPlayNo[2]が4に変更さ
れ、キャッシュ4に格納されたトラック2の演奏データ
による演奏が開始される。
後の状態を示す図である。10クロック経過したことに
より、LoadTime[0],LoadTime
[1],LoadTime[2]は、図8の状態のとき
よりもそれぞれ10クロックずつ減り、‘130’,
‘40+50’,‘0+100’となる。このときキャ
ッシュ2に格納された演奏データによるトラック2の演
奏が終了し、Free[2]=1,Next[2]=−
1に変更される。またPlayNo[2]が4に変更さ
れ、キャッシュ4に格納されたトラック2の演奏データ
による演奏が開始される。
【0030】また、キャッシュ2は空になったため、S
ectCnt[0]〜SectCnt[2]が‘0’で
はないトラックに関しLoadTime[0]〜Loa
dTime[2]の内容が比較され、総クロック数の最
小のトラック1の、次の演奏データが、図10に示すよ
うに、キャッシュ2にロードされる。キャッシュ2に、
トラック1の次の演奏データ、即ちセクタ4の演奏デー
タが転送され、Free[2]=0に変更され、Nex
t[1]=2に変更され、さらにLoadPtr[1]
=2、LoadTime[1]=40+50+50、S
ectCnt[1]=0に変更される。
ectCnt[0]〜SectCnt[2]が‘0’で
はないトラックに関しLoadTime[0]〜Loa
dTime[2]の内容が比較され、総クロック数の最
小のトラック1の、次の演奏データが、図10に示すよ
うに、キャッシュ2にロードされる。キャッシュ2に、
トラック1の次の演奏データ、即ちセクタ4の演奏デー
タが転送され、Free[2]=0に変更され、Nex
t[1]=2に変更され、さらにLoadPtr[1]
=2、LoadTime[1]=40+50+50、S
ectCnt[1]=0に変更される。
【0031】SectCnt[1]=0となったことか
ら、トラック1の演奏データは、全てキャッシュにロー
ドされたことになる。図11は、図10に示す状態か
ら、さらに40クロック経過後の状態を示す図である。
40クロック経過したことにより、LoadTime
[0],LoadTime[1],LoadTime
[2]は、図10の状態よりもそれぞれ40クロックず
つ減り、‘90’,‘0+50+50’,‘60’とな
る。
ら、トラック1の演奏データは、全てキャッシュにロー
ドされたことになる。図11は、図10に示す状態か
ら、さらに40クロック経過後の状態を示す図である。
40クロック経過したことにより、LoadTime
[0],LoadTime[1],LoadTime
[2]は、図10の状態よりもそれぞれ40クロックず
つ減り、‘90’,‘0+50+50’,‘60’とな
る。
【0032】このときキャッシュ3に格納されたトラッ
ク1の演奏データは空になり、Free[3]=1,N
ext[3]=−1に変更され、PlayNo[1]=
1に変更され、今度はキャッシュ1に格納されたトラッ
ク1の演奏データによる演奏が行なわれる。またキャッ
シュ3は空になったため、SectCnt[0]〜Se
ctCnt[2]が‘0’ではないトラックに関し、L
oadTime[0]〜LoadTime[2]の内容
が比較され、総クロック数の最小のトラック2の、次の
演奏データがキャッシュ3にロードされる。
ク1の演奏データは空になり、Free[3]=1,N
ext[3]=−1に変更され、PlayNo[1]=
1に変更され、今度はキャッシュ1に格納されたトラッ
ク1の演奏データによる演奏が行なわれる。またキャッ
シュ3は空になったため、SectCnt[0]〜Se
ctCnt[2]が‘0’ではないトラックに関し、L
oadTime[0]〜LoadTime[2]の内容
が比較され、総クロック数の最小のトラック2の、次の
演奏データがキャッシュ3にロードされる。
【0033】図12は、キャッシュ3にトラック2の、
次の演奏データ、即ちセクタ6の演奏データがロードさ
れた状態を示した図である。Cache[3]=6,F
ree[3]=0に変更され、また、Next[4]=
3に変更される。さらに、LoadPtr[2]=3,
LoadTime[2]=60+40,SectCnt
[2]=0に変更される。
次の演奏データ、即ちセクタ6の演奏データがロードさ
れた状態を示した図である。Cache[3]=6,F
ree[3]=0に変更され、また、Next[4]=
3に変更される。さらに、LoadPtr[2]=3,
LoadTime[2]=60+40,SectCnt
[2]=0に変更される。
【0034】図13は、図12の状態から更に50クロ
ック経過した後の状態を示す図である。50クロック経
過したことにより、LoadTime[0],Load
Time[1],LoadTime[2]は、図12に
示す状態のときよりもそれぞれ50クロックずつ減少
し、それぞれ、40,0+150,10+40となる。
ック経過した後の状態を示す図である。50クロック経
過したことにより、LoadTime[0],Load
Time[1],LoadTime[2]は、図12に
示す状態のときよりもそれぞれ50クロックずつ減少
し、それぞれ、40,0+150,10+40となる。
【0035】このとき、キャッシュ1に格納されたトラ
ック1の演奏データは空になり、Free[1]=1,
Next[1]=−1に変更され、PlayNo[1]
=2に変更される。また、キャッシュ1が空になったこ
とから、SectCnt[0]〜SectCnt[2]
が‘0’ではないトラックに関し、LoadTime
[0]〜LoadTime[2]が比較されるが、ここ
ではSectCnt[1]=0,SectCnt[2]
=0、すなわち、トラック1,2の演奏データのキャッ
シュへのロードは既に終了しているため、残りのトラッ
ク0の演奏データがキャッシュ1にロードされる。
ック1の演奏データは空になり、Free[1]=1,
Next[1]=−1に変更され、PlayNo[1]
=2に変更される。また、キャッシュ1が空になったこ
とから、SectCnt[0]〜SectCnt[2]
が‘0’ではないトラックに関し、LoadTime
[0]〜LoadTime[2]が比較されるが、ここ
ではSectCnt[1]=0,SectCnt[2]
=0、すなわち、トラック1,2の演奏データのキャッ
シュへのロードは既に終了しているため、残りのトラッ
ク0の演奏データがキャッシュ1にロードされる。
【0036】図14は、キャッシュ1にトラック0の次
の演奏データ、即ちセクタ1の演奏データが転送された
状態を示した図である。Cache[1]=1,Fre
e[1]=0に変更され、またNext[0]=1に変
更される。さらにLoadPtr[0]=1,Load
Time[0]=40+10,SectCnt[0]=
0に変更される。
の演奏データ、即ちセクタ1の演奏データが転送された
状態を示した図である。Cache[1]=1,Fre
e[1]=0に変更され、またNext[0]=1に変
更される。さらにLoadPtr[0]=1,Load
Time[0]=40+10,SectCnt[0]=
0に変更される。
【0037】その後10クロック経過すると、Load
Time[0]=30+10,LoadTime[1]
=40,LoadTime[2]=0+40となって、
トラック2の、キャッシュ4に格納された演奏データに
よる演奏が終了し、Free[4]=1,Next
[4]=−1,PlayNo[2]=3に変更される。
さらにその後30クロック経過すると、LoadTim
e[0]=0+10,LoadTime[1]=10,
LoadTime[2]=10となってキャッシュ0に
格納されたトラック0の演奏データが空になって、Fr
ee[0]=1,Next[0]=−1,PlayNo
=1に変更される。
Time[0]=30+10,LoadTime[1]
=40,LoadTime[2]=0+40となって、
トラック2の、キャッシュ4に格納された演奏データに
よる演奏が終了し、Free[4]=1,Next
[4]=−1,PlayNo[2]=3に変更される。
さらにその後30クロック経過すると、LoadTim
e[0]=0+10,LoadTime[1]=10,
LoadTime[2]=10となってキャッシュ0に
格納されたトラック0の演奏データが空になって、Fr
ee[0]=1,Next[0]=−1,PlayNo
=1に変更される。
【0038】さらにその後ろ10クロック経過すると、
この曲一曲分の演奏データによる演奏が全て終了する。
以下、フロッピィディスクに記憶された演奏データのデ
ータフォーマットについて説明し、次いで、図5〜図1
4を参照して説明した演奏データの転送に関連した各種
ルーチンについて説明する。
この曲一曲分の演奏データによる演奏が全て終了する。
以下、フロッピィディスクに記憶された演奏データのデ
ータフォーマットについて説明し、次いで、図5〜図1
4を参照して説明した演奏データの転送に関連した各種
ルーチンについて説明する。
【0039】図15は、フロッピィディスクに記憶され
た演奏データのフォーマットを示した図である。先頭に
1バイトのヘッダがありそこに総トラック数が記述され
ている。その後ろは、トラック毎のデータとなってお
り、トラック毎のデータの先頭の4バイトはそのトラッ
クの長さ(バイト数)が記述され、その後ろに実際の演
奏データが記述されている。
た演奏データのフォーマットを示した図である。先頭に
1バイトのヘッダがありそこに総トラック数が記述され
ている。その後ろは、トラック毎のデータとなってお
り、トラック毎のデータの先頭の4バイトはそのトラッ
クの長さ(バイト数)が記述され、その後ろに実際の演
奏データが記述されている。
【0040】図16は演奏データのフォーマットを示し
た図である。各演奏データは2バイトの時間情報部分と
3バイトのデータ情報部分で構成されている。図17は
演奏データ中のデータ情報部分の詳細を示した図であ
る。3バイトのMIDI情報はそのまま記述され、MI
DI情報が2バイト、1バイトの場合は余分なところを
FFhで埋めている。さらに、時間情報のみ、テンポ、
拍子、終了情報なども記述することができる。
た図である。各演奏データは2バイトの時間情報部分と
3バイトのデータ情報部分で構成されている。図17は
演奏データ中のデータ情報部分の詳細を示した図であ
る。3バイトのMIDI情報はそのまま記述され、MI
DI情報が2バイト、1バイトの場合は余分なところを
FFhで埋めている。さらに、時間情報のみ、テンポ、
拍子、終了情報なども記述することができる。
【0041】次に、図18〜図26のルーチンについて
説明するが、既に図5〜図14を参照してデータ転送の
具体例について詳細に説明したため、以下では、各ルー
チンについて簡単に説明するにとどめる。以下に、既出
のものも含め、図18〜図26のルーチンで使用される
主なレジスタ、フラグの役割りについてまとめて説明す
る。 ・Cache[MAX_CACHE][512]:ディ
スクから演奏データがロードされるキャッシの番号が格
納されるレジスタ ・PlayNo[MAX_TRACK]:次に出力され
る演奏データが格納されたキャッシュの番号が格納され
るレジスタ ・PlayAddr[MAX_TRACK]:次に出力
される演奏データのキャッシュ内のアドレスが格納され
るレジスタ ・TimeCount[MAX_TRACK]:待時間
カウンタ ・LoadPtr[MAX_TRACK]:最後にロー
ドされたキャッシュの番号が格納されるレジスタ ・LoadTime[MAX_TRACK]:既にキャ
ッシュにロードされた演奏データの、トラック毎のクロ
ック数を記憶するレジスタ ・SectCnt[MAX_TRACK]:各トラック
のロードが終了したか調べるために演奏データが記録さ
れている残りのセクタ数が格納されるレジスタ ・EndFlag[MAX_TRACK]:そのトラッ
クの演奏が既に終了したか否かを示すフラグ ・Next[MAX_CACHE]:次のキャッシュ番
号が格納されるレジスタ ・Free[MAX_CACHE]:そのキャッシュが
空か否かを示すレジスタ(‘1’が空を表わす) ・SetData[trk][3]:出力される演奏デ
ータをトラック毎に記憶するレジスタ ・work[5]:5バイトの演奏データを時間情報部
分とデータ情報部分とに分離するために使用される作業
用レジスタ ・work0:ロード済み演奏データの総クロック数が
最小のトラックを捜すために総クロック数を一時的に格
納しておく作業用レジスタ ・Song:曲番号が格納されるレジスタ ・EndCount:曲の終了を調べるためのレジスタ ・Buff:総トラック数を調べるための作業用レジス
タ ・TrkNo:その曲のトラック数が格納されるレジス
タ ・trk:トラックループカウンタ1 ・trk0:トラックループカウンタ2 ・trk1:ロード済クロック(LoadTime)が
最小のトラックのトラック番号が格納されるレジスタ ・i:ループカウンタ ・MeasCount:小節番号計測用レジスタ ・Measure:小節番号が格納されるレジスタ 図18は電源オンで実行が開始される、メインルーチン
のフローチャートである。
説明するが、既に図5〜図14を参照してデータ転送の
具体例について詳細に説明したため、以下では、各ルー
チンについて簡単に説明するにとどめる。以下に、既出
のものも含め、図18〜図26のルーチンで使用される
主なレジスタ、フラグの役割りについてまとめて説明す
る。 ・Cache[MAX_CACHE][512]:ディ
スクから演奏データがロードされるキャッシの番号が格
納されるレジスタ ・PlayNo[MAX_TRACK]:次に出力され
る演奏データが格納されたキャッシュの番号が格納され
るレジスタ ・PlayAddr[MAX_TRACK]:次に出力
される演奏データのキャッシュ内のアドレスが格納され
るレジスタ ・TimeCount[MAX_TRACK]:待時間
カウンタ ・LoadPtr[MAX_TRACK]:最後にロー
ドされたキャッシュの番号が格納されるレジスタ ・LoadTime[MAX_TRACK]:既にキャ
ッシュにロードされた演奏データの、トラック毎のクロ
ック数を記憶するレジスタ ・SectCnt[MAX_TRACK]:各トラック
のロードが終了したか調べるために演奏データが記録さ
れている残りのセクタ数が格納されるレジスタ ・EndFlag[MAX_TRACK]:そのトラッ
クの演奏が既に終了したか否かを示すフラグ ・Next[MAX_CACHE]:次のキャッシュ番
号が格納されるレジスタ ・Free[MAX_CACHE]:そのキャッシュが
空か否かを示すレジスタ(‘1’が空を表わす) ・SetData[trk][3]:出力される演奏デ
ータをトラック毎に記憶するレジスタ ・work[5]:5バイトの演奏データを時間情報部
分とデータ情報部分とに分離するために使用される作業
用レジスタ ・work0:ロード済み演奏データの総クロック数が
最小のトラックを捜すために総クロック数を一時的に格
納しておく作業用レジスタ ・Song:曲番号が格納されるレジスタ ・EndCount:曲の終了を調べるためのレジスタ ・Buff:総トラック数を調べるための作業用レジス
タ ・TrkNo:その曲のトラック数が格納されるレジス
タ ・trk:トラックループカウンタ1 ・trk0:トラックループカウンタ2 ・trk1:ロード済クロック(LoadTime)が
最小のトラックのトラック番号が格納されるレジスタ ・i:ループカウンタ ・MeasCount:小節番号計測用レジスタ ・Measure:小節番号が格納されるレジスタ 図18は電源オンで実行が開始される、メインルーチン
のフローチャートである。
【0042】ステップ18_1では、フロッピィディス
ク装置にフロッピィディスクが入っているか否かが調べ
られる。尚、図中には示されていないが、フロッピィデ
ィスクが抜かれると、クロック停止と全音楽消去の処理
が行なわれた後、ステップ18_1に飛ぶ。ステップ1
8_2では、曲番号を記憶しておくレジスタSongに
‘0’がセットされる。本実施例では、簡単のため、曲
の演奏は必ず0番の曲から開始されるものとしてステッ
プ18_3では、初期化が行なわれる。すなわち、全ト
ラック分のPlayNo,PlayAddr,Time
Count,LoadPtr,SectCnt,Loa
dTimeに‘0’,EndFlagに‘1’、全キャ
ッシュのNextに‘0’、Freeに‘1’、Mea
sCount,Measureに‘0’が格納される。
ク装置にフロッピィディスクが入っているか否かが調べ
られる。尚、図中には示されていないが、フロッピィデ
ィスクが抜かれると、クロック停止と全音楽消去の処理
が行なわれた後、ステップ18_1に飛ぶ。ステップ1
8_2では、曲番号を記憶しておくレジスタSongに
‘0’がセットされる。本実施例では、簡単のため、曲
の演奏は必ず0番の曲から開始されるものとしてステッ
プ18_3では、初期化が行なわれる。すなわち、全ト
ラック分のPlayNo,PlayAddr,Time
Count,LoadPtr,SectCnt,Loa
dTimeに‘0’,EndFlagに‘1’、全キャ
ッシュのNextに‘0’、Freeに‘1’、Mea
sCount,Measureに‘0’が格納される。
【0043】ステップ18_4では、曲番号記憶レジス
タSongで示される曲の演奏準備が行なわれる。詳細
については後述する。ステップ18_5では、小節カウ
ンタの準備が行なわれる。詳細は後述する。以上で演奏
の準備が終了し、ステップ18_6で、プレイ(PLA
Y)スイッチが押されるのを待つ。
タSongで示される曲の演奏準備が行なわれる。詳細
については後述する。ステップ18_5では、小節カウ
ンタの準備が行なわれる。詳細は後述する。以上で演奏
の準備が終了し、ステップ18_6で、プレイ(PLA
Y)スイッチが押されるのを待つ。
【0044】PLAYスイッチが押されるとステップ1
8_7に進み、クロック割り込みの発生が指示される。
ステップ18_8ではストップ(STOP)スイッチが
押されたか否かが調べられ、押されていないときはステ
ップ18_9に進んで曲の終了を表わすレジスタEnd
Countが調べられ、曲の途中(EndCount>
0)のときはステップ18_10に進む。
8_7に進み、クロック割り込みの発生が指示される。
ステップ18_8ではストップ(STOP)スイッチが
押されたか否かが調べられ、押されていないときはステ
ップ18_9に進んで曲の終了を表わすレジスタEnd
Countが調べられ、曲の途中(EndCount>
0)のときはステップ18_10に進む。
【0045】ステップ18_10では、ディスクからキ
ャッシュ(Cache)へのデータロードが指示され、
ステップ18_11では小節番号表示が指示される。ス
テップ18_10,18_11の詳細については後述す
る。一方、STOPスイッチが押された場合、もしくは
曲の終了の場合、ステップ18_12に進み、STOP
スイッチが押されたことに伴う処理が指示される。詳細
については後述する。
ャッシュ(Cache)へのデータロードが指示され、
ステップ18_11では小節番号表示が指示される。ス
テップ18_10,18_11の詳細については後述す
る。一方、STOPスイッチが押された場合、もしくは
曲の終了の場合、ステップ18_12に進み、STOP
スイッチが押されたことに伴う処理が指示される。詳細
については後述する。
【0046】ステップ18_13ではSongに1が加
えられ、ステップ18_4ではSongがフロッピィデ
ィスクに記録されている曲数以下か否か調べられ、フロ
ッピィディスク中にまだ演奏されていない曲が残ってい
るときはそのままステップ18_3に戻り、最終曲まで
演奏されたときはSongに‘0’がセットされて先頭
の曲に戻った上でステップ18_3に戻る。
えられ、ステップ18_4ではSongがフロッピィデ
ィスクに記録されている曲数以下か否か調べられ、フロ
ッピィディスク中にまだ演奏されていない曲が残ってい
るときはそのままステップ18_3に戻り、最終曲まで
演奏されたときはSongに‘0’がセットされて先頭
の曲に戻った上でステップ18_3に戻る。
【0047】以上のようにして、フロッピィディスクに
記憶された演奏データに基づいて、循環的に演奏が繰り
返される。図19は、図18のステップ18_4で実行
される、Songで示される曲の演奏準備を行なうサブ
ルーチンのフローチャートである(図5参照)。先ずス
テップ19_1では、その曲のトラック数を調べるため
に、その曲ファイル(図15参照)の先頭部分の1セク
タを、作業用レジスタBuffにロードする。
記憶された演奏データに基づいて、循環的に演奏が繰り
返される。図19は、図18のステップ18_4で実行
される、Songで示される曲の演奏準備を行なうサブ
ルーチンのフローチャートである(図5参照)。先ずス
テップ19_1では、その曲のトラック数を調べるため
に、その曲ファイル(図15参照)の先頭部分の1セク
タを、作業用レジスタBuffにロードする。
【0048】ステップ19_2では、その曲のトラック
数を記憶するレジスタTrkNo、曲の終了を調べるた
めのレジスタEndCountに、ヘッダに書かれてい
るトラック数をセットする。ステップ19_3では、ト
ラックループカウンタtrkに‘0’をセットする。
数を記憶するレジスタTrkNo、曲の終了を調べるた
めのレジスタEndCountに、ヘッダに書かれてい
るトラック数をセットする。ステップ19_3では、ト
ラックループカウンタtrkに‘0’をセットする。
【0049】ステップ19_4では、ロードの終了を検
出するために、trkトラックで示されるのデータが何
セクタに渡って記録されているか計算し、その値をSe
ctCnt[trk]にセットする。ステップ19_5
では、trkで示されるトラックの先頭の演奏データが
格納されているセクタの演奏データをCache[tr
k]にロードする。
出するために、trkトラックで示されるのデータが何
セクタに渡って記録されているか計算し、その値をSe
ctCnt[trk]にセットする。ステップ19_5
では、trkで示されるトラックの先頭の演奏データが
格納されているセクタの演奏データをCache[tr
k]にロードする。
【0050】ステップ19_6では、ステップ19_5
でロードが発生したので、SectCnt[trk]か
ら1が引き算される。ステップ19_7では、ステップ
19_5で何クロック分の演奏データがロードされたか
を調べ、そのクロック数を、キャッシュにこれまでにロ
ードされていた演奏データのクロック数を記憶するレジ
スタLoadTime[trk]にセットする。
でロードが発生したので、SectCnt[trk]か
ら1が引き算される。ステップ19_7では、ステップ
19_5で何クロック分の演奏データがロードされたか
を調べ、そのクロック数を、キャッシュにこれまでにロ
ードされていた演奏データのクロック数を記憶するレジ
スタLoadTime[trk]にセットする。
【0051】ステップ19_8では、最後にロードされ
たキャッシュの番号を記憶するレジスタLoadPrt
[trk]に、trkをセットする。ステップ19_9
では、次に出力される演奏データが格納されたCach
eの番号を記憶するレジスタPlayNo[trk]に
trkをセットし、さらに、次に出力される演奏データ
のキャッシュ内のアドレスを記憶するレジスタPlay
Addr[trk]に演奏データの先頭アドレスをセッ
トする。
たキャッシュの番号を記憶するレジスタLoadPrt
[trk]に、trkをセットする。ステップ19_9
では、次に出力される演奏データが格納されたCach
eの番号を記憶するレジスタPlayNo[trk]に
trkをセットし、さらに、次に出力される演奏データ
のキャッシュ内のアドレスを記憶するレジスタPlay
Addr[trk]に演奏データの先頭アドレスをセッ
トする。
【0052】ステップ19_10では、次の演奏データ
のセットが指示される。詳細については後述する。ステ
ップ19_11では、trkに‘1’が加えられ、ステ
ップ19_12ではtrkがTrkNo以内か否か調べ
られ、trkがTrkNo以内であればステップ19_
4に戻り、trkがTrkNoを越えるとステップ19
_13へ進む。ステップ19_13では、図18に示す
メインルーチンにおけるステップ18_10と同様に、
演奏データのロードが指示される。ステップ19_13
のルーチンの詳細については後述する。
のセットが指示される。詳細については後述する。ステ
ップ19_11では、trkに‘1’が加えられ、ステ
ップ19_12ではtrkがTrkNo以内か否か調べ
られ、trkがTrkNo以内であればステップ19_
4に戻り、trkがTrkNoを越えるとステップ19
_13へ進む。ステップ19_13では、図18に示す
メインルーチンにおけるステップ18_10と同様に、
演奏データのロードが指示される。ステップ19_13
のルーチンの詳細については後述する。
【0053】図20は、図19のルーチンのステップ1
9_10で実行される、次の演奏データをセットする処
理を行なうサブルーチンのフローチャートである(図6
参照)。ステップ20_1では、PlayNo[tr
k]が作業レジスタnoにセットされ、また、Play
Addr[trk]が作業レジスタaddrにセットさ
れる。
9_10で実行される、次の演奏データをセットする処
理を行なうサブルーチンのフローチャートである(図6
参照)。ステップ20_1では、PlayNo[tr
k]が作業レジスタnoにセットされ、また、Play
Addr[trk]が作業レジスタaddrにセットさ
れる。
【0054】ステップ20_2では、作業用ループカウ
ンタiに‘0’がセットされる。ステップ20_3で
は、iが5以内か否か調べられる。これは、演奏データ
は、図16にあるように5バイトで構成されており、1
バイトずつ読み込むため5回読み込む必要があるからで
ある。i<5の場合ステップ20_4に進み、addr
が512(1セクタのバイト数)以内か否か調べられ
る。addr≧512の場合、ステップ20_5に進
み、PlayNo[trk]に、次に演奏される演奏デ
ータがロードされたキャッシュ番号が記憶されたレジス
タNext[no]がセットされ、PlayAddr
[trk]に‘0’がセットされ、Next[no]
に、次が存在しないことを示す値‘−1’がセットさ
れ、さらにFree[no]にそのキャッシュが空であ
ることを示す値‘1’がセットされる。
ンタiに‘0’がセットされる。ステップ20_3で
は、iが5以内か否か調べられる。これは、演奏データ
は、図16にあるように5バイトで構成されており、1
バイトずつ読み込むため5回読み込む必要があるからで
ある。i<5の場合ステップ20_4に進み、addr
が512(1セクタのバイト数)以内か否か調べられ
る。addr≧512の場合、ステップ20_5に進
み、PlayNo[trk]に、次に演奏される演奏デ
ータがロードされたキャッシュ番号が記憶されたレジス
タNext[no]がセットされ、PlayAddr
[trk]に‘0’がセットされ、Next[no]
に、次が存在しないことを示す値‘−1’がセットさ
れ、さらにFree[no]にそのキャッシュが空であ
ることを示す値‘1’がセットされる。
【0055】ステップ20_6では、作業用レジスタw
ork[i]にキャッシュCache[no][add
r]がセットされ、ステップ20_7でiに‘1’が加
えられてステップ20_3に戻る。ステップ20_3で
i≧5であると判定されるとステップ20_8に進み、
待時間カウンタTimeCount[trk]に新しい
時間が加えられる。
ork[i]にキャッシュCache[no][add
r]がセットされ、ステップ20_7でiに‘1’が加
えられてステップ20_3に戻る。ステップ20_3で
i≧5であると判定されるとステップ20_8に進み、
待時間カウンタTimeCount[trk]に新しい
時間が加えられる。
【0056】ステップ20_9では、出力される演奏デ
ータを記憶するレジスタSetDataに新しいデータ
がセットされる。図21は、図18に示すメインルーチ
ンのステップ18_10、および図19に示すサブルー
チンのステップ19_13で実行される。空のキャッシ
ュをさがしてその空のキャッシュにロード済み時間の最
も少ないトラックの演奏データをロードするロードデー
タサブルーチンのフローチャートである。
ータを記憶するレジスタSetDataに新しいデータ
がセットされる。図21は、図18に示すメインルーチ
ンのステップ18_10、および図19に示すサブルー
チンのステップ19_13で実行される。空のキャッシ
ュをさがしてその空のキャッシュにロード済み時間の最
も少ないトラックの演奏データをロードするロードデー
タサブルーチンのフローチャートである。
【0057】先ずステップ21_1では、キャッシュの
番号を示す作業用カウンタiに‘0’がセットされる。
ステップ21_2では、そのキャッシュが空かどうかを
示すレジスタFree[i]が調べられ、空いていれば
ステップ21_2に進み、空いていなければステップ2
1_14に進む。
番号を示す作業用カウンタiに‘0’がセットされる。
ステップ21_2では、そのキャッシュが空かどうかを
示すレジスタFree[i]が調べられ、空いていれば
ステップ21_2に進み、空いていなければステップ2
1_14に進む。
【0058】以下のステップ21_3〜ステップ21_
8はロード済み時間の少ないトラックを捜す処理であ
る。ステップ21_3では、トラック番号を示す作業用
レジスタtrk0に‘0’がセットされ、ロード済クロ
ックが最小のトラックのトラック番号を示す作業用レジ
スタtrk1に0がセットされ、さらに最小クロック数
を捜すための作業用レジスタwork0に、本装置で扱
える最大時間MAX_TIMEがセットされる。
8はロード済み時間の少ないトラックを捜す処理であ
る。ステップ21_3では、トラック番号を示す作業用
レジスタtrk0に‘0’がセットされ、ロード済クロ
ックが最小のトラックのトラック番号を示す作業用レジ
スタtrk1に0がセットされ、さらに最小クロック数
を捜すための作業用レジスタwork0に、本装置で扱
える最大時間MAX_TIMEがセットされる。
【0059】ステップ21_4では、ロード完了レジス
タSectCnt[trk0]が正か否かが調べられ、
正であればステップ21_5に進み、そうでなければス
テップ21_7に進む。ステップ21_5ではwork
0がLoadTime[trk0]を越えるか否かが調
べられ、work0>LoadTime[trk0]の
場合ステップ21_6に進み、そうでないときはステッ
プ21_7に進む。
タSectCnt[trk0]が正か否かが調べられ、
正であればステップ21_5に進み、そうでなければス
テップ21_7に進む。ステップ21_5ではwork
0がLoadTime[trk0]を越えるか否かが調
べられ、work0>LoadTime[trk0]の
場合ステップ21_6に進み、そうでないときはステッ
プ21_7に進む。
【0060】ステップ21_6では、作業用レジスタw
ork0にLoadTime[trk0]がセットさ
れ、さらにtrk1にtrk0がセットされる。ステッ
プ21_7ではtrk0に‘1’が加えられる。ステッ
プ21_8では、trk0がTrkNo以下か否か調べ
られ、trk<TrkNoの場合ステップ21_4に戻
り、trk≧TrkNoの場合ステップ21_9に進
む。
ork0にLoadTime[trk0]がセットさ
れ、さらにtrk1にtrk0がセットされる。ステッ
プ21_7ではtrk0に‘1’が加えられる。ステッ
プ21_8では、trk0がTrkNo以下か否か調べ
られ、trk<TrkNoの場合ステップ21_4に戻
り、trk≧TrkNoの場合ステップ21_9に進
む。
【0061】ステップ21_9では、work0がステ
ップ21_3で格納されたMAX_TIMEから変更さ
れたか調べられ、変更されていないときは終了し、変更
されていたときはステップ21_10に進む。ステップ
21_10以降は、データのロードに伴う処理である。
ステップ21_10では、trk1で示されるトラック
の、次の演奏データがCache[i]にロードされ
る。
ップ21_3で格納されたMAX_TIMEから変更さ
れたか調べられ、変更されていないときは終了し、変更
されていたときはステップ21_10に進む。ステップ
21_10以降は、データのロードに伴う処理である。
ステップ21_10では、trk1で示されるトラック
の、次の演奏データがCache[i]にロードされ
る。
【0062】ステップ21_11では、SectCnt
[trk1]から‘1’が引き算される。ステップ21
_12では、ステップ21_10で何クロック分の演奏
データがロードされたかを調べ、その値がLoadTi
me[trk1]に加算される。ステップ21_13で
は、ロードに関するリンク情報の更新のため、最後にロ
ードされたキャッシュの番号を記憶するLondPtr
[trk1]がNext[i]にセットされ、Lond
Ptr[trk1]に1がセットされ、Free[i]
に‘0’がセットされる。
[trk1]から‘1’が引き算される。ステップ21
_12では、ステップ21_10で何クロック分の演奏
データがロードされたかを調べ、その値がLoadTi
me[trk1]に加算される。ステップ21_13で
は、ロードに関するリンク情報の更新のため、最後にロ
ードされたキャッシュの番号を記憶するLondPtr
[trk1]がNext[i]にセットされ、Lond
Ptr[trk1]に1がセットされ、Free[i]
に‘0’がセットされる。
【0063】ステップ21_14ではiに‘1’が加え
られる。ステップ21_15では、iがキャッシュの数
MAX_CACHE以内か否か調べられ、未だ処理の行
なわれていないキャッシュがあるときはステップ21−
2に進み、全てのキャッシュについて処理が終了したと
きはこのルーチンを抜ける。
られる。ステップ21_15では、iがキャッシュの数
MAX_CACHE以内か否か調べられ、未だ処理の行
なわれていないキャッシュがあるときはステップ21−
2に進み、全てのキャッシュについて処理が終了したと
きはこのルーチンを抜ける。
【0064】図22は、演奏データの出力指示、次のデ
ータのセット、ロード済みカウンタの更新、曲の終りを
検出して自動的に演奏終了する指示を行なうクロック割
込みルーチンのフローチャートである。このクロック割
込みルーチンは、図18のメインルーチンのステップ1
8_7でクロック割込みの発生が指示されたことを受け
て発生する割込み用クロックにより、所定時間間隔毎に
起動される。
ータのセット、ロード済みカウンタの更新、曲の終りを
検出して自動的に演奏終了する指示を行なうクロック割
込みルーチンのフローチャートである。このクロック割
込みルーチンは、図18のメインルーチンのステップ1
8_7でクロック割込みの発生が指示されたことを受け
て発生する割込み用クロックにより、所定時間間隔毎に
起動される。
【0065】このルーチンが起動されると、先ずステッ
プ22_1において、トラックカウンタtrkに‘0’
がセットされる。ステップ22_2では、そのトラック
の演奏が既に終了しているか否かを示すレジスタEnd
Flag[trk]が調べられ、終了しているときはス
テップ22_8に進み、そうでないときはステップ22
_3に進む。
プ22_1において、トラックカウンタtrkに‘0’
がセットされる。ステップ22_2では、そのトラック
の演奏が既に終了しているか否かを示すレジスタEnd
Flag[trk]が調べられ、終了しているときはス
テップ22_8に進み、そうでないときはステップ22
_3に進む。
【0066】ステップ22_3では、TimeCoun
t[trk]から‘1’が引き算される。ステップ22
_4では、TimeCount[trk]が正か0以下
かが調べられ、正の場合ステップ22_7に進み、0以
下の場合ステップ22_5に進む。
t[trk]から‘1’が引き算される。ステップ22
_4では、TimeCount[trk]が正か0以下
かが調べられ、正の場合ステップ22_7に進み、0以
下の場合ステップ22_5に進む。
【0067】ステップ22_5ではデータの出力が指示
される。このステップ22_5の詳細については後述す
る。ステップ22_6では、次のデータのセットが指示
される。詳細については、図20が参照され既に説明さ
れている。
される。このステップ22_5の詳細については後述す
る。ステップ22_6では、次のデータのセットが指示
される。詳細については、図20が参照され既に説明さ
れている。
【0068】ステップ22_7では、LoadTime
[trk]から‘1’が引き算される。ステップ22_
8では、EndCountが正か0か調べられ、正の場
合ステップ22_10に進み、0の場合ステップ22_
9に進む。ステップ22_9では、自動終了のために演
奏停止処理が指示される。詳細については後述する。
[trk]から‘1’が引き算される。ステップ22_
8では、EndCountが正か0か調べられ、正の場
合ステップ22_10に進み、0の場合ステップ22_
9に進む。ステップ22_9では、自動終了のために演
奏停止処理が指示される。詳細については後述する。
【0069】ステップ22_10ではtrkに‘1’が
加算される。ステップ22_11ではtrkがTrkN
o以下か否か調べられ、trk<TrkNoのときはス
テップ22_2に戻り、trk≧TrkNoのときはス
テップ22_12に進む。ステップ22_12では、小
節番号計測用レジスタMeasCountに‘1’が加
算される。
加算される。ステップ22_11ではtrkがTrkN
o以下か否か調べられ、trk<TrkNoのときはス
テップ22_2に戻り、trk≧TrkNoのときはス
テップ22_12に進む。ステップ22_12では、小
節番号計測用レジスタMeasCountに‘1’が加
算される。
【0070】ステップ22_13では、MeasCou
ntが16以上か否か調べられる。MeasCount
>16のときはステップ22_14に進み、そうでなけ
ればそのまま終了する。ステップ22_14では、Me
asCountに‘1’がセットされ、小節番号を記憶
するレジスタMeasureに‘1’が加算される。
ntが16以上か否か調べられる。MeasCount
>16のときはステップ22_14に進み、そうでなけ
ればそのまま終了する。ステップ22_14では、Me
asCountに‘1’がセットされ、小節番号を記憶
するレジスタMeasureに‘1’が加算される。
【0071】図23は、図22に示すクロック割込みル
ーチンのステップ22_5で実行される、演奏データを
その種類によりMIDI出力端子に出力したり、テン
ポ、拍子を更新したり、曲の終りを検出するサブルーチ
ンのフローチャートである。ステップ23_1ではDa
taSet[trk]がMIDI情報であるか否か調べ
られ、MIDI情報であった場合はステップ23_2に
進んで、DataSet[trk]がMIDI出力端子
から出力される。
ーチンのステップ22_5で実行される、演奏データを
その種類によりMIDI出力端子に出力したり、テン
ポ、拍子を更新したり、曲の終りを検出するサブルーチ
ンのフローチャートである。ステップ23_1ではDa
taSet[trk]がMIDI情報であるか否か調べ
られ、MIDI情報であった場合はステップ23_2に
進んで、DataSet[trk]がMIDI出力端子
から出力される。
【0072】ステップ23_3では、DataSet
[trk]がテンポ情報であるか否か調べられ、テンポ
情報であった場合はステップ23_4に進みテンプが変
更される。ステップ23_5では、DataSet[t
rk]が拍子情報であるか否か調べられ、拍子情報であ
った場合はステップ23_6に進み、拍子が変更され
る。
[trk]がテンポ情報であるか否か調べられ、テンポ
情報であった場合はステップ23_4に進みテンプが変
更される。ステップ23_5では、DataSet[t
rk]が拍子情報であるか否か調べられ、拍子情報であ
った場合はステップ23_6に進み、拍子が変更され
る。
【0073】ステップ23_7ではDataSet[t
rk]が終了情報であるか否かが調べられ、終了情報で
あった場合はステップ23_8に進み、EndCoun
tから‘1’が引き算され、EndFlag[trk]
に‘0’がセットされる。図24は、図18に示すメイ
ンルーチンのステップ18_12で実行される、演奏停
止処理を行なうサブルーチンのフローチャートである。
rk]が終了情報であるか否かが調べられ、終了情報で
あった場合はステップ23_8に進み、EndCoun
tから‘1’が引き算され、EndFlag[trk]
に‘0’がセットされる。図24は、図18に示すメイ
ンルーチンのステップ18_12で実行される、演奏停
止処理を行なうサブルーチンのフローチャートである。
【0074】ステップ24_1ではクロック割り込みが
停止され、ステップ24_2では、発音中の全楽音の消
音処理が実行される。図25は、図18に示すメインル
ーチンのステップ18_5で実行される、小節カウンタ
の曲頭の休符区間を検出し、楽譜通りの小節番号にする
ための処理を行なうサブルーチンのフローチャートであ
る。
停止され、ステップ24_2では、発音中の全楽音の消
音処理が実行される。図25は、図18に示すメインル
ーチンのステップ18_5で実行される、小節カウンタ
の曲頭の休符区間を検出し、楽譜通りの小節番号にする
ための処理を行なうサブルーチンのフローチャートであ
る。
【0075】ステップ25_1では、曲の先頭から最初
の発音までの時間(休符時間)が検出され、その値が作
業用レジスタRestTimeにセットされる。ステッ
プ25_2では、RestTimeが3未満か否か調べ
られ、3未満であればステップ25_3に進み、そうで
なければステップ25_5に進む。ステップ25_3で
は、Measureに‘0’がセットされてこのルーチ
ンを抜ける。
の発音までの時間(休符時間)が検出され、その値が作
業用レジスタRestTimeにセットされる。ステッ
プ25_2では、RestTimeが3未満か否か調べ
られ、3未満であればステップ25_3に進み、そうで
なければステップ25_5に進む。ステップ25_3で
は、Measureに‘0’がセットされてこのルーチ
ンを抜ける。
【0076】ステップ25_4では、RestTime
が5未満か否か調べられ、5未満であればステップ25
_5に進み、そうでなければステップ25_6に進む。
ステップ25_5では、アウフタクトの小節番号とし
て、Measureに‘−1’がセットされ、このルー
チンを抜ける。ステップ25_6では、Measure
に‘0’がセットされ、このルーチンを抜ける。
が5未満か否か調べられ、5未満であればステップ25
_5に進み、そうでなければステップ25_6に進む。
ステップ25_5では、アウフタクトの小節番号とし
て、Measureに‘−1’がセットされ、このルー
チンを抜ける。ステップ25_6では、Measure
に‘0’がセットされ、このルーチンを抜ける。
【0077】図26は、図18のメインルーチンのステ
ップ18_11で実行される、小節番号を表示する処理
を行なうサブルーチンのフローチャートである。ステッ
プ26_1では、Measureが0以上か否か調べら
れ、0以上の場合ステップ26_2に進み、そうでなけ
れば26_3に進む。ステップ26_2では、表示器に
Measure+1の値が表示される。
ップ18_11で実行される、小節番号を表示する処理
を行なうサブルーチンのフローチャートである。ステッ
プ26_1では、Measureが0以上か否か調べら
れ、0以上の場合ステップ26_2に進み、そうでなけ
れば26_3に進む。ステップ26_2では、表示器に
Measure+1の値が表示される。
【0078】ステップ26_3では、表示器にMeas
ureの値が表示される。尚、上記実施例では、2つの
トラックに跨る演奏データが記憶されたセクタは、各ト
ラック毎に2回ロードされているが、別のトラックで既
にロードされている演奏データがどこかのキャッシュに
あったら、その演奏データの再度のロードは行わず、あ
たかもそのキャッシュにロードしたかのようにしてロー
ドの時間を少なくするようにしてもよい。また上記実施
例では、単純に、クロック数の少ないトラックの演奏デ
ータをロードするように構成されているが、空いている
キャッシュにどこのトラックの演奏データをロードする
かを決定する処理(図18のステップ18_3〜ステッ
プ18_8の処理)を変更して、ロード済み総クロック
数だけではなく、ディスクのヘッド移動時間等も加味し
た評価により、どのトラックの演奏データをロードする
かを決定してもよい。
ureの値が表示される。尚、上記実施例では、2つの
トラックに跨る演奏データが記憶されたセクタは、各ト
ラック毎に2回ロードされているが、別のトラックで既
にロードされている演奏データがどこかのキャッシュに
あったら、その演奏データの再度のロードは行わず、あ
たかもそのキャッシュにロードしたかのようにしてロー
ドの時間を少なくするようにしてもよい。また上記実施
例では、単純に、クロック数の少ないトラックの演奏デ
ータをロードするように構成されているが、空いている
キャッシュにどこのトラックの演奏データをロードする
かを決定する処理(図18のステップ18_3〜ステッ
プ18_8の処理)を変更して、ロード済み総クロック
数だけではなく、ディスクのヘッド移動時間等も加味し
た評価により、どのトラックの演奏データをロードする
かを決定してもよい。
【0079】
【発明の効果】以上説明したように、本発明の演奏デー
タ読込装置は、空いている(または空いた)内部メモリ
にどこのトラックの演奏データをロードするかを固定的
には定めず、ロードされている演奏データの総クロック
の最小のトラックの演奏データもしくはこれにディスク
装置のアクセスのためのヘッド位置を加味したトラック
の演奏データをロードするものであるため、内部メモリ
の利用効率が上がり、少ない数の内部メモリでクロック
に正確な演奏が可能となる。
タ読込装置は、空いている(または空いた)内部メモリ
にどこのトラックの演奏データをロードするかを固定的
には定めず、ロードされている演奏データの総クロック
の最小のトラックの演奏データもしくはこれにディスク
装置のアクセスのためのヘッド位置を加味したトラック
の演奏データをロードするものであるため、内部メモリ
の利用効率が上がり、少ない数の内部メモリでクロック
に正確な演奏が可能となる。
【図1】本発明の演奏データ読込装置の一実施例の構成
を表わすブロック図である。
を表わすブロック図である。
【図2】本実施例におけるデータ転送処理の基本概念を
示したフローチャートである。
示したフローチャートである。
【図3】本実施例におけるデータ転送処理の基本概念を
示したデータの流れを示す説明図である。
示したデータの流れを示す説明図である。
【図4】フロッピィディスク中の、今から演奏しようと
するある曲の演奏データのデータ構造を示した図であ
る。
するある曲の演奏データのデータ構造を示した図であ
る。
【図5】データ転送のためのルーチンで使用される各種
フラグ、レジスタ等の値の変化を示した模式図である。
フラグ、レジスタ等の値の変化を示した模式図である。
【図6】データ転送のためのルーチンで使用される各種
フラグ、レジスタ等の値の変化を示した模式図である。
フラグ、レジスタ等の値の変化を示した模式図である。
【図7】データ転送のためのルーチンで使用される各種
フラグ、レジスタ等の値の変化を示した模式図である。
フラグ、レジスタ等の値の変化を示した模式図である。
【図8】データ転送のためのルーチンで使用される各種
フラグ、レジスタ等の値の変化を示した模式図である。
フラグ、レジスタ等の値の変化を示した模式図である。
【図9】データ転送のためのルーチンで使用される各種
フラグ、レジスタ等の値の変化を示した模式図である。
フラグ、レジスタ等の値の変化を示した模式図である。
【図10】データ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
【図11】データ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
【図12】データ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
【図13】データ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
【図14】データ転送のためのルーチンで使用される各
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
種フラグ、レジスタ等の値の変化を示した模式図であ
る。
【図15】フロッピィディスクに記憶された演奏データ
のフォーマットを示した図である。
のフォーマットを示した図である。
【図16】演奏データのフォーマットを示した図であ
る。
る。
【図17】演奏データ中のデータ情報部分の詳細を示し
た図である。
た図である。
【図18】メインルーチンのフローチャートである。
【図19】Songで示される曲の演奏準備を行なうサ
ブルーチンのフローチャートである。
ブルーチンのフローチャートである。
【図20】次の演奏データをセットする処理を行なうサ
ブルーチンのフローチャートである。
ブルーチンのフローチャートである。
【図21】トラックの演奏データをロードするロードデ
ータサブルーチンのフローチャートである。
ータサブルーチンのフローチャートである。
【図22】クロック割込みルーチンのフローチャートで
ある。
ある。
【図23】演奏データをその種類によりMIDI出力端
子に出力したり、テンポ、拍子を更新したり、曲の終り
を検出するサブルーチンのフローチャートである。
子に出力したり、テンポ、拍子を更新したり、曲の終り
を検出するサブルーチンのフローチャートである。
【図24】演奏停止処理を行なうサブルーチンのフロー
チャートである。
チャートである。
【図25】小節カウンタの曲頭の休符区間を検出し、楽
譜通りの小節番号にするための処理を行なうサブルーチ
ンのフローチャートである。
譜通りの小節番号にするための処理を行なうサブルーチ
ンのフローチャートである。
【図26】小節番号を表示する処理を行なうサブルーチ
ンのフローチャートである。
ンのフローチャートである。
【図27】従来の手法における演奏データのロード方法
を示すフローチャートである。
を示すフローチャートである。
【図28】従来の手法の説明図である。
Claims (2)
- 【請求項1】 装填された外部メモリから、1つの曲を
構成する複数のトラックの演奏データを読み込む演奏デ
ータ読込装置において、 前記外部メモリから読み込まれた演奏データを、該外部
メモリをアクセスする単位で格納する複数の内部メモリ
と、 前記複数の内部メモリに格納された演奏データを、各ト
ラックそれぞれについて順次取り出すデータ取出し手段
と、 前記複数の内部メモリ中に空の内部メモリが発生した
際、前記複数の内部メモリに格納されている各トラック
毎の演奏データのうち最短時間で演奏が終了するトラッ
クの演奏データに続く、該トラックの次の演奏データを
前記外部メモリから読み込んで空の内部メモリに格納す
る読込制御手段とを備えたことを特徴とする演奏データ
読込装置。 - 【請求項2】 ディスク装置から、1つの曲を構成する
複数のトラックの演奏データを読み込む演奏データ読込
装置において、 前記ディスク装置から読み込まれた演奏データを、該デ
ィスク装置をアクセスする単位で格納する複数の内部メ
モリと、 前記複数の内部メモリに格納された演奏データを、各ト
ラックそれぞれについて順次取り出すデータ取出し手段
と、 前記複数の内部メモリ中に空の内部メモリが発生した
際、前記複数の内部メモリに格納されている演奏データ
の各トラック毎の演奏終了時刻と、前記ディスク装置の
現在のヘッド位置とに基づいて、前記ディスク装置の、
次にアクセスされるメモリ領域を定め、該メモリ領域に
記憶された演奏データを前記ディスク装置から読み込ん
で空の内部メモリに格納する読込制御手段とを備えたこ
とを特徴とする演奏データ読込装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5328841A JPH07181967A (ja) | 1993-12-24 | 1993-12-24 | 演奏データ読込装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5328841A JPH07181967A (ja) | 1993-12-24 | 1993-12-24 | 演奏データ読込装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH07181967A true JPH07181967A (ja) | 1995-07-21 |
Family
ID=18214688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP5328841A Withdrawn JPH07181967A (ja) | 1993-12-24 | 1993-12-24 | 演奏データ読込装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH07181967A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001073749A1 (fr) * | 2000-03-28 | 2001-10-04 | Yamaha Corporation | Lecteur de musique pouvant s'appliquer a un terminal telephonique portatif |
US7167725B1 (en) | 1999-08-05 | 2007-01-23 | Yamaha Corporation | Music reproducing apparatus, music reproducing method and telephone terminal device |
-
1993
- 1993-12-24 JP JP5328841A patent/JPH07181967A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7167725B1 (en) | 1999-08-05 | 2007-01-23 | Yamaha Corporation | Music reproducing apparatus, music reproducing method and telephone terminal device |
WO2001073749A1 (fr) * | 2000-03-28 | 2001-10-04 | Yamaha Corporation | Lecteur de musique pouvant s'appliquer a un terminal telephonique portatif |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0527670A (ja) | 楽譜表示装置 | |
JP2637816B2 (ja) | 情報再生装置 | |
KR100200290B1 (ko) | 자동연주장치 | |
JPH11178987A (ja) | スロットマシン | |
JPH07181967A (ja) | 演奏データ読込装置 | |
JPH0922287A (ja) | 楽音波形生成方法 | |
US7020749B2 (en) | Signal processor, prefetch instruction method and prefetch instruction program | |
JPH0926791A (ja) | 楽音発生方法及び波形記憶方法 | |
JPH0415959B2 (ja) | ||
JP3609045B2 (ja) | 自動演奏装置 | |
JP2641851B2 (ja) | 自動演奏装置 | |
JPS6236258B2 (ja) | ||
JPH0749518Y2 (ja) | 自動演奏装置 | |
EP0587952A1 (en) | Method for controlling a tape system storage device | |
JPH0677196B2 (ja) | 演奏装置 | |
JP2877075B2 (ja) | 計測器制御装置および方法 | |
JPH08185164A (ja) | 自動演奏制御装置及びそれに使用する楽曲データ記憶装置 | |
JPH06203534A (ja) | 電子楽器のファイル管理システム | |
JP2570783B2 (ja) | 自動演奏装置 | |
JP2580873Y2 (ja) | 自動演奏装置 | |
JPH0413830Y2 (ja) | ||
JPH0633518Y2 (ja) | 外部音可変長記録装置 | |
JPS60220424A (ja) | 配列要素の演算方式 | |
JP2000122675A (ja) | 音声情報処理装置 | |
JP3455786B2 (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: 20010306 |