(57)【特許請求の範囲】
【請求項１】
イベントとこのイベントを継続させる時間とを複数個所定の順序で並べられて成る曲データを複数のデータ列に分割された状態で記憶し、この各データ列の最後には次のデータ列の記憶位置を表わす制御データを付加して記憶した記憶媒体から該データを読み出しするデータ読出装置であって、
前記記憶媒体から前記曲データを構成する各データ列を前記制御データに基づいて順次指定するとともに、指定されたデータ列に含まれるイベントを、当該イベントの時間に対応するタイミングで読み出すことにより、前記曲データを再生する再生手段と、
前記曲データの再生開始からの時間をカウントするカウント手段と、
前記再生手段により前記曲データの再生中に、所定のデータが読み出される毎に、当該読み出されたデータを含むデータ列の前記記憶媒体における記憶位置を示す情報を、前記カウント手段によりカウントされた時間とともに格納するデータ記憶位置情報格納手段と、
巻き戻しを指示する指示手段と、
前記カウント手段によりカウントされた再生時間から前記指示手段による指示に基づいた時間分減算した再生時間に再生すべき曲データの読み出し位置を、前記データ記憶位置情報格納手段に記憶されたデータ列の記憶位置を示す情報及び時間により検出する検出手段と、
この検出手段により検出された読み出し位置からの読み出しを前記再生手段に行なわせて再生を開始させる再生制御手段と、
を有することを特徴とするデータ読出装置。
【請求項２】
前記指示はある時間だけ継続して行なわれ、前記検出手段は、前記カウント手段によりカウントされた再生時間から前記指示手段による指示の継続時間に基づいた時間に基づいた時間分減算することを特徴とする請求項１に記載のデータ読出装置。
【請求項３】
イベントとこのイベントを継続させる時間とを複数個所定の順序で並べられて成る曲データを複数のデータ列に分割された状態で記憶し、この各データ列の最後には次のデータ列の記憶位置を表わす制御データを付加して記憶した記憶媒体から該データを読み出しするデータ読出方法であって、
前記記憶媒体から前記曲データを構成する各データ列を前記制御データに基づいて順次指定するとともに、指定されたデータ列に含まれるイベントを、当該イベント対応する時間に対応するタイミングで読み出すことにより、前記曲データを再生するステップと、
前記曲データの再生開始からの時間をカウントするステップと、
前記曲データの再生中に、所定のデータが読み出される毎に、当該読み出されたデータを含むデータ列の前記記憶媒体における記憶位置を示す情報を、前記カウントされた時間とともに格納するステップと、
前記カウントされた再生時間から指示手段による指示に基づいた時間分減算した再生時間に再生すべき曲データの読み出し位置を、前記格納されたデータ列の記憶位置を示す情報及び時間により検出するステップと、
この検出された読み出し位置からの読み出しを行なって再生を開始させるステップと、
を有することを特徴とするデータ読出方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は記憶媒体に記憶されているデータを管理する技術に関するものであり、特に、時間の経過に応じて変化するデータが時間順に並べられて成るデータ列のデータを管理する技術に関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
ここでは、時間の経過に応じて変化するデータが時間順に並べられて成るデータ列として、楽曲の演奏情報を例に説明する。
【０００３】
電子楽器を自動演奏させるために用いられるシーケンサでは、自動演奏を行なわせる楽曲の演奏情報の受け渡しのためにフロッピーディスク等の記憶媒体が用いられる。このような用途においては、記憶媒体上には１曲分の演奏情報が１つのデータファイルとして記憶されていることが一般的である。
【０００４】
このシーケンサに、テープレコーダ等に装備されているようないわゆる巻戻し（あるいはリワインド：rewind）と同様の機能、すなわち、現在演奏中の楽曲の演奏途中の箇所より時間的に溯った箇所からの再度の自動演奏を使用者による指示に応じて電子楽器に行なわせる機能を設けることを考える。
【０００５】
テープレコーダ等の巻戻し機能では、使用者による指示操作の操作時間を加減することにより、巻戻し後の再生箇所をおおよそ指示することが可能である。しかしながら、ＭＩＤＩ（Musical Instrument Digital Interface）に代表されるような自動演奏のための演奏情報には演奏時間当たりのデータ量が一定ではないものがある。そのため、記憶媒体により楽曲の演奏情報を受け取るシーケンサでの巻戻しの機能について、テープレコーダ等と同様に、楽曲中の再度の自動演奏の開始箇所を指示操作の操作時間により指示可能とするには、巻戻しの指示に応じて溯る楽曲の部分の演奏情報を記憶媒体から読み出し、その楽曲の溯った部分を自動演奏すると費やされる演奏時間を演奏情報から算出し、その算出結果に基づいて巻戻し後の再生箇所を特定するなどといった煩雑な処理が必要となり、処理の負荷が大きい。
【０００６】
また、記憶媒体におけるファイル管理システムとして広く知られているＭＳ−ＤＯＳ（ＭＳ−ＤＯＳはマイクロソフト社の登録商標）のファイルシステムを例えば採用している場合では、演奏情報であるデータファイルが１つのクラスタに納まりきらずに、物理的に不連続な位置の複数のクラスタに記憶されていることがある。このようなデータファイルが演奏情報である楽曲について巻戻しの処理を実現するためには、記憶媒体に記憶されているＦＡＴ（File Allocation Table ）を参照してクラスタ間でのデータ列の繋がりを辿って溯りながら演奏情報を読み出す必要もあり、処理の負荷は更に大きくなる。
【０００７】
これらの処理の大きな負荷は、巻戻しの指示から自動演奏が再開されるまでの応答時間に遅れを生じさせる原因のひとつとなってしまう。
【０００８】
以上の問題を鑑み、データが時間順に並べられて成り、記憶媒体に記憶されているデータ列に対して上述したような巻戻しの処理を行なうために要する処理の負荷を軽減させることが本発明が解決しようとする課題である。
【０００９】
【課題を解決するための手段】
本発明は、イベントとこのイベントを継続させる時間とを複数個所定の順序で並べられて成る曲データを複数のデータ列に分割された状態で記憶し、この各データ列の最後には次のデータ列の記憶位置を表わす制御データを付加して記憶した記憶媒体から該データを読み出しするデータ読出装置であって、記憶媒体から曲データを構成する各データ列を制御データに基づいて順次指定するとともに、指定されたデータ列に含まれるイベントを、当該イベントの時間に対応するタイミングで読み出すことにより曲データを再生する再生手段と、曲データの再生開始からの時間をカウントするカウント手段と、再生手段により曲データの再生中に、所定のデータが読み出される毎に、当該読み出されたデータを含むデータ列の記憶媒体における記憶位置を示す情報を、カウント手段によりカウントされた時間とともに格納するデータ記憶位置情報格納手段と、巻き戻しを指示する指示手段と、カウント手段によりカウントされた再生時間から指示手段による指示に基づいた時間分減算した再生時間に再生すべき曲データの読み出し位置を、データ記憶位置情報格納手段に記憶されたデータ列の記憶位置を示す情報及び時間により検出する検出手段と、この検出手段により検出された読み出し位置からの読み出しを再生手段に行なわせて再生を開始させる再生制御手段と、を有することを特徴とするものである。
【００１０】
ここにおいて、指示はある時間だけ継続して行なわれ、検出手段は、カウント手段によりカウントされた再生時間から指示手段による指示の継続時間に基づいた時間に基づいた時間分減算することが望ましい。
【００１１】
また本発明は、イベントとこのイベントを継続させる時間とを複数個所定の順序で並べられて成る曲データを複数のデータ列に分割された状態で記憶し、この各データ列の最後には次のデータ列の記憶位置を表わす制御データを付加して記憶した記憶媒体から該データを読み出しするデータ読出方法であって、記憶媒体から曲データを構成する各データ列を制御データに基づいて順次指定するとともに、指定されたデータ列に含まれるイベントを、当該イベント対応する時間に対応するタイミングで読み出すことにより、曲データを再生するステップと、曲データの再生開始からの時間をカウントするステップと、曲データの再生中に、所定のデータが読み出される毎に、当該読み出されたデータを含むデータ列の記憶媒体における記憶位置を示す情報を、カウントされた時間とともに格納するステップと、カウントされた再生時間から指示手段による指示に基づいた時間分減算した再生時間に再生すべき曲データの読み出し位置を、格納されたデータ列の記憶位置を示す情報及び時間により検出するステップと、この検出された読み出し位置からの読み出しを行なって再生を開始させるステップと、を有することを特徴とするものである。
【００１４】
ここで、データ列は例えば楽曲の演奏データが該当する。また、記憶媒体としては例えばフロッピーディスクやＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等が適用可能である。
【００１５】
上述した構成によれば、既に読出されたデータについて、そのデータの記憶媒体における記憶位置を示す情報がデータ列においてこのデータが出現する時間に対応させて格納されている。従って、前述した巻戻しの機能、すなわち、読出しているデータより指示に基づいた時間だけデータ列においての時間順に溯った順番からのデータの時間順の読出を行なう際にこの格納情報を活用すれば、その指示に対応する順番のデータを素早く見つけることができ、しかもこの処理のための処理の負荷はごくわずかで済む。
【００１６】
ここで、巻戻しにおいて、現在のデータの読み出し位置から時間的に前方に遠い位置への巻戻しほど行われる頻度が低い場合などでは、データの記憶位置を示す情報を格納する格納量が所定値を超えた場合に、データ列においての時間順に早い順番のデータに関する情報を削除するようにしてもよい。この構成によれば、データの記憶位置を示す情報を格納するために必要な記憶量を削減することができる。
【００１７】
また、データの記憶位置を示す情報は、必ずしも読出したデータの全てについて格納しておかなくても、そのうちの一部のデータについてのみ前記情報を格納しておくようにしてもよい。例えばデータ列が楽曲データであるならば楽曲を構成する各小節に属する演奏データについての記憶位置を示す情報を、該各小節毎に１つずつ格納するようにする。このような、一部のデータについての情報しか格納されていない構成であっても、その格納情報を活用すれば、情報が格納されていない他のデータの記憶媒体上の記憶位置を比較的早く見つけることができる。この構成では、データの記憶位置を示す情報を格納するために必要な記憶量を削減することが可能である。
【００１８】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。なお、本実施の形態では、フロッピーディスクに記憶されている楽曲の演奏情報を読み出してその楽曲の自動演奏を行なう機能を有する電子キーボードで本発明に係る巻戻し機能、すなわち使用者によるスイッチに対しての指示操作に応じ、現在演奏中の楽曲の演奏途中の箇所より時間的に溯った箇所からの再度の自動演奏を行なわせる機能を実現する場合について説明する。
【００１９】
図１は、本発明を実施する電子キーボート（以下、「本装置」という）の全体構成を示すブロック図である。また、図２は、各操作子が備えられている本装置の表面パネルの様子を示す図である。
【００２０】
図１に示すＣＰＵ１１、タイマ（ＴＩＭＥＲ）１２、ＲＯＭ１３、ＲＡＭ１４、ＬＣＤ１５、ＬＥＤ１６、スライダ１７、スイッチ１８、エンコーダ１９、音源２０、鍵盤２１、ＦＤＤ２２は、いずれもバス２３を介して相互に接続されている。また、図２に示されている各構成要素に付した符号は、図１に示されている同一の構成要素については同一のものを付している。
【００２１】
ＣＰＵ１１は、ＲＯＭ１３に記憶された制御プログラムに従って、ＲＡＭ１４をワークエリアとして使用しながら、本装置全体の動作を制御する中央演算処理装置である。
【００２２】
タイマ１２は時間経過を計時するものである。
【００２３】
ＲＯＭ１３は、ＣＰＵ１１で実行される本装置全体の制御のための制御プログラムや楽音データ等に加え、後述する仕様データテーブルを格納している。
【００２４】
ＲＡＭ１４は、ＣＰＵ１１が制御処理を実行するために必要なワークエリアとして、また各種の設定パラメータの記憶用として用いられるランダムアクセスメモリである。
【００２５】
ＬＣＤ１５は液晶ディスプレイ（Liquid Crystal Display）であり、スイッチ１５の用途を説明する表示を行なうものである。
【００２６】
ＬＥＤ１６は発光ダイオード（Light Emitting Diode）であり、点灯／消灯させることによって、機器の動作状態等を示すものである。
【００２７】
スライダ１７はスライドボリュームであり、本装置の使用者によるスライド操作に応じて制御量を変化させる操作子である。図２に示すように、本装置にはスライダ１７ａ、１７ｂ、１７ｃの３つが設けられている。
【００２８】
スイッチ１８は押下されることによって本装置に対して使用者からの指示が与えれる操作子である。図２に示すように、スイッチ１８は、ＬＣＤ１５の左側に５個（１８a 〜１８ｅ）、右側に５個（１８ｆ〜１８ｊ）、下側に２段に３個ずつ（上段：１８ｋ〜１８ｍ、下段：１８ｎ〜１８ｐ）の計１６個のスイッチ１８ａ〜１８ｐが設けられている。これらのスイッチ１８には固定された用途が定義されておらず、現在の本装置の動作モードに応じて異なる用途で機能する。
【００２９】
図３は、現在の本装置の動作モードに応じて変化するＬＣＤ１５の表示例を示す図である。ＬＣＤ１５には同図に示す６種類の動作画面を表示させることが可能である。ここで、ＬＣＤ１５の左右に設けられているスイッチ１８ａ〜１８ｊの各々の用途は、このＬＣＤ１５の表示によって示される。
【００３０】
一例としてＬＣＤ１５の左側の最上段に設けられているスイッチ１８ａの用途について説明する。本装置の起動時にはＬＣＤ１５には図３（ａ）の「起動画面」の表示がなされ、スイッチ１８ａの用途は「ＳＴＯＰ」、すなわち自動演奏を停止させる機能であることが示される。また、本装置が音源パラメータ変更という動作モードで動作しているときにはＬＣＤ１５には図３（ｅ）の「音源パラメータ変更画面」の表示がなされ、スイッチ１８ａの用途は「Ｔｏｎｅ」、すなわち出力する音の音色を変更させる機能であることが示される。
【００３１】
また、本装置の起動時にＬＣＤ１５に表示される図３（ａ）の「起動画面」の表示において、スイッチ１８ｈ、１８ｉ、１８ｊについてはその用途が示されていない。これは、スイッチ１８ｈ、１８ｉ、１８ｊについての用途の定義が存在していないことを示しており、「起動画面」が表示されているときのスイッチ１８ｈ、１８ｉ、１８ｊに対する操作は無視される。
【００３２】
図１の説明に戻る。エンコーダ１９はいわゆるロータリーエンコーダであり、本装置の使用者による回転操作に応じて制御量を変化させる操作子である。
【００３３】
音源２０はＣＰＵ１１から指示された音色、音高、音量の音を発生させて出力するものである。
【００３４】
鍵盤２１は鍵盤楽器のキーボードであり、使用者の押鍵による演奏操作の様子を検出してＣＰＵ１１に伝える操作子である。
【００３５】
ＦＤＤ２２はフロッピーディスクドライブであり、本装置で自動演奏を行なう楽曲の自動演奏データをフロッピーディスク（以下、「ＦＤ」と略す）から読み出すものである。なお、本実施の形態においては、楽曲の１曲分の自動演奏データが１つのファイルとしてＦＤに記憶されているものとし、また、発音させる楽音の音高とベロシティについての情報を有する発音データ（発音を行なわない休符データを含む）と直前のイベント（発音データもしくは休符データに基づく発音イベント）についてのそのイベントを継続させる時間を示す時間データとが自動演奏データには含まれているものとし、ＦＤの１つのクラスタに１小節分の自動演奏データ列が記憶されているようにしている。そして、この１小節分の自動演奏データ列の最後には次に続く小節の自動演奏データ列の先頭の時間データ（各小節のデータは「時間データ」、「発音データ」、の順に交互に並べられている）のＦＤ上の格納位置を指す読み出しポインタを有する制御データが格納されているものとする。
【００３６】
次に仕様データテーブルについて説明する。仕様データテーブルの一例を図４に示す。
【００３７】
仕様データテーブルとは、現在の本装置の動作モードと本装置の各操作子であるスライダ１７、スイッチ１８、エンコーダ１９、鍵盤２１に対する操作との関係から、ＣＰＵ１１に行なわせる制御処理の内容の定義（命令定義）が示されているものである。図４において、仕様データテーブルの各列は操作された操作子を示しており、ＳＷＬＥＦＴ１〜ＳＷＬＥＦＴ５がスイッチ１８ａ〜１８ｅに、ＳＷＲＩＧＨＴ１〜ＳＷＲＩＧＨＴ５がスイッチ１８ｆ〜１８ｊに、ＳＷＥＮＣ１Ｕ〜ＳＷＥＮＣ３Ｕがスイッチ１８ｋ〜１８ｍに、ＳＷＥＮＣ１Ｄ〜ＳＷＥＮＣ３Ｄがスイッチ１８ｎ〜１８ｐに、ＳＬＩＤＥＲ１〜ＳＬＩＤＥＲ３がスライダ１７ａ〜１７ｃに、ＲＯＴＥＮＣがエンコーダ１９に、そして、ＫＥＹＢＯＤが鍵盤２１に、それぞれ対応している。また、仕様データテーブルの各行は現在の本装置の動作モードを示しており、特に、図４に示した動作モードと図３に示したＬＣＤ１５の表示例とはスイッチ１８ａ〜１８ｊの用途において動作モード毎に同一の内容を示している。
【００３８】
仕様データテーブルの使用法を、本装置の起動時にスイッチ１８ａの操作が行なわれた場合を例に説明する。図４において、「起動」時の動作モードである行と、スイッチ１８ａに対応する「ＳＷＬＷＥＦＴ１」である列とが交差する欄を参照すると、「楽器（状態、演奏停止）」なる命令定義がなされている。従ってこの場合においてＣＰＵ１１は楽器（状態、演奏停止）なる処理を実行する。
【００３９】
また、図４において、例えば「起動」時の動作モードである行と、スイッチ１８ｈに対応する「ＳＷＲＩＧＨＴ３」である列とが交差する欄を参照すると、「無視」なる定義がなされていることが分かる。このように仕様データテーブルの該当欄に「無視」の定義がなされている場合には、ＣＰＵ１１は当該操作子の操作に応じた制御処理を実行しない。
【００４０】
もしも、各操作子に割り当てている用途の割り当ての変更を行なうには、この仕様データテーブルの定義を書き換えることで行なうことができる。例え仕様変更によってそれまでの制御プログラムに含まれていなかった新たな命令定義が仕様データテーブルになされたとしても、既にコーディングを終えた制御プログラムの他の部分には変更を加える必要はなく、その命令定義に応じたサブルーチンを制御プログラムに追加すればよい。
【００４１】
なお、本装置では、図４に示す仕様データテーブルがＲＯＭ１３に格納されている。
【００４２】
以下、本装置のＣＰＵ１１が、図４示した仕様データテーブルの命令定義に従って、現在の本装置の動作モードと本装置の各操作子に対する操作との関係から各種制御処理を選択して実行する手順について説明する。
【００４３】
まず、ＲＯＭ１３に格納されている各データについて図５を用いて説明する。
【００４４】
ＲＯＭ１３には、制御プログラム（図５には不図示）と仕様データテーブル（図５に「ＴＡＢＬＥ」と表示）との他に、音源２０で発音させる音の音色を設定するＮ種類の音色（ＴＯＮＥ）データからなるＴＯＮＥデータ群を格納している。
【００４５】
次に、ＣＰＵ１１が使用するＲＡＭ１４のワークエリアの使用状態を、図６を用いて説明する。
【００４６】
同図（Ａ）において、音楽データバッファは、本装置が自動演奏を行なう場合の自動演奏データが格納される領域である。
【００４７】
音色データバッファは、音源２０に発音させる音の音色に関する要素を設定するデータが格納される領域である。
【００４８】
時刻カウンタは、タイマ１２が一定の時間を計時する度に発生させるタイマインタラプトの回数を格納する領域であり、この値を参照することによって時間経過を知ることができる。
【００４９】
ＳＯＮＧＮＯ．は、フロッピーディスクに記憶されている複数の楽曲の自動演奏データから本装置で自動演奏を行なわせる楽曲の自動演奏データを選択する番号が格納される領域である。
【００５０】
ＴＲＡＮＳＰＯＳＥは、鍵盤２１の音域を移調する際の移調の量を示す値が格納される領域である。
【００５１】
ＶＯＬＵＭＥは、音源２０で発生させる音の基準音量が設定されて格納される領域である。
【００５２】
ＴＯＮＥＮＯ．は、ＲＯＭ１３に格納されている複数の音色データから音源２０に発音させる音色データを選択する番号が格納される領域である。
【００５３】
図６（Ｂ）には、音楽データバッファ及び音色データバッファ内部の更に詳細な使用状態を示している。
【００５４】
音楽データバッファにおいて、領域ＳＥＶＥＮＴには楽曲の自動演奏を行なっているときに次に音源２０で発音させる楽音のデータが一時的に格納され、領域ＳＴには領域ＳＥＶＥＮＴに格納されている楽音データを発音させる時刻を、楽曲の自動演奏を開始してからの経過時間として示すデータが格納される。
【００５５】
音色データバッファにおいて、領域ＴＯＮＥにはＲＯＭ１３のＴＯＮＥデータ群から選択されたＴＯＮＥデータが格納される。また、ＰＩＴＣＨ、ＦＩＬＴＥＲ、ＥＮＶＥＬＯＰＥ、ＭＯＤＵＬＡＴＩＯＮの各領域には音源２０で発音させる音の基準のピッチ、発音させた音の信号を通過させるフィルタの特性、音源２０で発音させる音のエンベロープ特性、音源２０で発音させる音に付加するモジュレーション（変調）の深さをそれぞれ示すデータが格納される。
【００５６】
次に図７について説明する。同図は、本装置の各操作子及び本装置の各動作モード（楽器状態）のそれぞれに与えられている番号の定義を示している。同図（Ａ）は、スイッチ１８ａ〜１８ｐ（ＳＷＬＥＦＴ１〜５、ＳＷＲＩＧＨＴ１〜５、ＳＷＥＮＣ１Ｕ〜３Ｕ、ＳＷＥＮＣ１Ｄ〜３Ｄ）、スライダ１７ａ〜１７ｃ  （ＳＬＩＤＥＲ１〜３）、エンコーダ１９（ＲＯＴＥＮＣ）、鍵盤２１（ＫＥＹＢＯＤ）の各操作子の各々に与えられている番号の定義を示すものであり、同図（Ｂ）は、起動画面（起動時）、自動演奏停止、自動演奏中、自動演奏待機、音源パラメータ変更、演奏パラメータ変更の各楽器状態の各々に与えられている番号の定義を示すものである。
【００５７】
以下、ＣＰＵ１１により行なわれる制御処理の詳細について説明する。
【００５８】
［１．装置全体の制御処理］
図８は、ＣＰＵ１１が、電源投入直後よりＲＯＭ１３に格納されている制御プログラムを読み出して実行することにより行われる、ＣＰＵ１１による本装置全体の制御処理を示すフローチャートである。ＣＰＵ１１による制御動作を同図に従って説明する。
【００５９】
まず、Ｓ１００１において電源投入直後にイニシャライズ（初期化）処理が実行され、ＣＰＵ１１の有する内部レジスタやＲＡＭ１４の初期化、及び後述する各種処理において用いられる各種の変数・フラグへの初期値の代入などといった処理が行なわれる。
【００６０】
Ｓ１００２では楽器（状態、起動画面）処理が行われる。この処理は図３（ａ）に示した起動画面をＬＣＤ１５に表示させる処理である。楽器（状態、起動画面）処理の詳細は後述する。
【００６１】
Ｓ１００３ではタイマインタラプトの受付禁止状態を解除する。ＣＰＵ１１はタイマ１２が一定の時間を計時する度に発生させるタイマインタラプト（割り込み）に応じてタイマ処理を実行する。タイマ処理の詳細は後述するが、このステップの処理はイニシャライズ処理で禁止状態に設定されるタイマインタラプトの受付を許可の状態に変更するものである。
【００６２】
Ｓ１００４ではイベント発生フラグが「１」に設定されているか否かを判別し、判定結果がＹｅｓならばＳ１００５に進み、ＮｏならばこのＳ１００４の判別処理を繰り返す。イベント発生フラグは本装置の有するいずれかの操作子に対する操作が行われたか否か（イベントが発生したか否か）を示すフラグであり、Ｓ１００１のイニシャライズ処理ではイベントが発生していないことを示す「０」に設定される。
【００６３】
Ｓ１００５ではＣＰＵ１１の有する、本装置の現在の動作モード（楽器状態）が図６（Ｂ）に示す番号で示されて格納されている楽器状態レジスタの現在の値を、同じくＣＰＵ１１の有するレジスタであるＹ軸レジスタに代入する。
【００６４】
Ｓ１００６ではＣＰＵ１１の有する、イベントの発生した（操作の行われた）操作子が図６（Ａ）に示す番号で示されて格納されている入力イベントレジスタの現在の値を、同じくＣＰＵ１１の有するレジスタであるＸ軸レジスタに代入する。
【００６５】
Ｓ１００７ではＲＯＭ１３に格納されている、図４に示した仕様データテーブルを参照し、（Ｘ軸レジスタ値，Ｙ軸レジスタ値）の欄に示されている命令定義を読み出して取得する。
【００６６】
Ｓ１００８では仕様データ処理を実行する。仕様データ処理は、本発明の特徴である、前ステップで仕様データテーブルから読み出した命令定義に応じてＣＰＵ１１が各種の制御を実行する処理である。仕様データ処理の詳細は次に述べる。
【００６７】
Ｓ１００９では今回のイベント発生に応じた制御処理の実行が完了したのでイベント発生フラグを「０」に設定し、その後はＳ１００４へ戻って上述した処理を繰り返す。
【００６８】
［２．仕様データ処理］
次に、前述した本装置全体の制御処理でＳ１００８（図８）として示した仕様データ処理を説明する。仕様データ処理の処理内容を示すフローチャートを図９に示す。
【００６９】
図４に示した仕様データテーブルでは、その各欄を参照すると分かるように、大別して「楽器」、「音源」の２種の命令定義が用いられている。仕様データ処理では本装置全体の制御処理でのＳ１００８（図８）においてＲＯＭ１３に格納されている仕様データテーブルから読み出した命令定義の内容を調べ、この２種のうちのいずれであるかを判別する。
【００７０】
この結果、仕様データテーブルから読み出した命令定義が「楽器」（Ｓ２００１の判定結果がＹｅｓ）ならば楽器処理を実行する（Ｓ２００２）。楽器処理は本装置の動作モードの変更や自動演奏の動作状態の設定などを行なう処理であり、その処理の詳細は次に説明する。
【００７１】
また、仕様データテーブルから読み出した命令定義が「音源」（Ｓ２００３の判定結果がＹｅｓ）ならば音源処理を実行する（Ｓ２００４）。音源処理はスライダ１７、スイッチ１８、エンコーダ１９に対して行われる設定操作に応じ、図６に示したＲＡＭ１４の音色データバッファのＴＯＮＥ、ＰＩＴＣＨ、ＦＩＬＴＥＲ、ＥＭＶＥＬＯＰ、ＭＯＤＵＬＡＴＩＯＮの各領域に格納されている値を設定あるいは変更してそれらの値を音源２０に送付することにより、音源２０で発音させる音の音色、基準の音高、エンベロープ等の各要素の設定などを行なう処理である。この音源処理は本発明と直接に関係するものではないので、詳細な説明は省略する。
【００７２】
その後、この楽器処理もしくは音源処理のいずれかを終了したのであれば今回の仕様処理を終了して図８においての次の処理に進む。
【００７３】
また、仕様データテーブルから読み出した命令定義がこれらのいずれとも異なるものである場合（Ｓ２００１、Ｓ２００３の判定結果がどちらもＮｏ）、例えば「無視」が定義されていたのであれば、何ら処理を行なわずに図８においての次の処理に進む。
【００７４】
以下、仕様データ処理において実行される楽器処理の詳細について説明する。
【００７５】
［３．楽器処理］
楽器処理の処理内容を示すフローチャートを図１０に示す。
【００７６】
図４に示した仕様データテーブルでは処理の実行命令の定義として、「楽器（状態）」、「楽器（選択）」、「楽器（テンポ）」、「楽器（音量）」、「楽器（曲）」、「楽器（移調）」、「楽器（巻戻し）」という７種の命令定義がなされている。図１０に示したフローチャートは本装置全体の制御処理でのＳ１００８（図８）においてＲＯＭ１３に格納されている仕様データテーブルから読み出した命令定義の内容がこの７種のうちのいずれであるかを判別する。
【００７７】
この結果、仕様データテーブルから読み出した命令定義が「楽器（状態）」（Ｓ３００１の判定結果がＹｅｓ）ならば楽器状態処理を実行する（Ｓ３００２）。図７（Ｂ）にも示したように、本装置は起動直後の状態である「起動（画面）」、自動演奏の開始前もしくは終了後の状態である「自動演奏停止」、自動演奏機能の実行中の状態である「自動演奏中」、自動演奏の一時停止状態である「自動演奏待機」、スライダ１７やエンコーダ１９の操作によっても音源２０で発生させる音に関する各種パラメータの設定変更が行なえる状態である「音源パラメータ変更」、自動演奏機能に関する各種パラメータの設定変更を行なう状態である「演奏パラメータ変更」、という６つの動作モード（楽器状態）を有している。楽器状態処理は現在の本装置の楽器状態とスイッチ１８ａ〜１８ｅに対する操作とに応じてこれらの本装置の楽器状態を相互に切り替え、更にＬＣＤ１５への表示内容をその楽器状態に応じて図３に示した表示に切り替える処理である。楽器状態処理の詳細は後述する。
【００７８】
また、仕様データテーブルから読み出した命令定義が「楽器（選択）」（Ｓ３００３の判定結果がＹｅｓ）ならば楽器選択処理を実行する（Ｓ３００４）。図４を参照すると分かるように、楽器選択処理は本装置の楽器状態が「演奏パラメータ変更」である場合に実行される処理であり、エンコーダ１９に対する操作に基づいて自動演奏機能に関する各種パラメータの設定変更の変更、具体的には自動演奏させる曲データの選択の変更や、テンポ、基準音量、移調量の設定の変更を行なう処理である。
【００７９】
また、仕様データテーブルから読み出した命令定義が「楽器（テンポ）」（Ｓ３００５の判定結果がＹｅｓ）ならば楽器テンポ処理を実行する（Ｓ３００６）。図４を参照すると分かるように、楽器テンポ処理は本装置の楽器状態が「自動演奏中」である場合に実行される処理であり、スライダ１７ａ、スイッチ１８ｋまたは１８ｎ、あるいはエンコーダ１９に対する操作に基づいてＲＡＭ１４に確保されている領域ＴＥＭＰＯの値を変更することによって自動演奏が行なわれている曲のテンポを変更する処理である。
【００８０】
また、仕様データテーブルから読み出した命令定義が「楽器（音量）」（Ｓ３００７の判定結果がＹｅｓ）ならば楽器音量処理を実行する（Ｓ３００８）。楽器音量処理は本装置の楽器状態が「自動演奏中」である場合に実行される処理であり、スライダ１７ｂあるいはスイッチ１８ｌまたは１８ｏに対する操作に基づいてＲＡＭ１４に確保されている領域ＶＯＬＵＭＥの値を変更することによって自動演奏の基準音量を変更する処理である。
【００８１】
また、仕様データテーブルから読み出した命令定義が「楽器（曲）」（Ｓ３００９の判定結果がＹｅｓ）ならば楽器曲処理を実行する（Ｓ３０１０）。楽器曲処理は本装置の楽器状態が「演奏パラメータ変更」である場合に実行される処理であり、スライダ１７ａあるいはスイッチ１８ｋまたは１８ｎに対する操作に基づいてＲＡＭ１４に確保されている領域ＳＯＮＧＮＯ．の値を変更することによって自動演奏を行なう曲目を選択する処理である。
【００８２】
また、仕様データテーブルから読み出した命令定義が「楽器（移調）」（Ｓ３０１１の判定結果がＹｅｓ）ならば楽器移調処理を実行する（Ｓ３０１２）。楽器移調処理は本装置の楽器状態が「演奏パラメータ変更」である場合に実行される処理であり、スライダ１７ｂあるいはスイッチ１８ｌまたは１８ｏに対する操作に基づいてＲＡＭ１４に確保されている領域ＴＲＡＮＳＰＯＳＥの値を変更することによって、自動演奏もしくは鍵盤２１への演奏について移調を行なうための移調量を設定する処理である。
【００８３】
また、仕様データテーブルから読み出した命令定義が「楽器（巻戻し）」（Ｓ３０１３の判定結果がＹｅｓ）ならば楽器巻戻し処理を実行する（Ｓ３０１４）。楽器巻戻し処理は本装置の楽器状態が「自動演奏停止」、「自動演奏中」、「自動演奏待機」のいずれかである場合に実行される処理であり、本発明に関する機能である巻戻し機能、すなわち、使用者によるスイッチ１８ｈへの指示操作に応じ、現在演奏中の楽曲の演奏途中の箇所より時間順で前に溯った箇所からの再度の自動演奏を本装置に行なわせるべく、この巻戻し機能の処理を開始させるために必要な各種のフラグの設定を行なう処理である。
【００８４】
その後、上述した各処理が終了したのであれば今回の楽器処理を終了し、図９に示す仕様データ処理へ戻る。
【００８５】
また、仕様データテーブルから読み出した「楽器」の命令定義がこれらのいずれとも異なるものであるならば（Ｓ３００１からＳ３０１３にかけてのうちの判定処理の判定結果がいずれもＮｏ）、今回の楽器処理を終了して図９に示す仕様データ処理へ戻る。
【００８６】
以上までの処理が楽器処理である。
【００８７】
次に、図１０に示した楽器処理のフローチャートのＳ３００２において実行される楽器状態処理の詳細を説明する。
【００８８】
前述したように本装置は６種の動作モード（楽器状態）を有しており、図４に示す仕様データテーブルにおいては、その各動作モードへの切り替えを命令する命令定義として、「楽器（状態、起動画面）」、「楽器（状態、演奏停止）」、「楽器（状態、演奏中）」、「楽器（状態、演奏待機）」、「楽器（状態、音源変更）」、「楽器（状態、演奏変更）」の各命令定義がスイッチ１８ａ〜１８ｊのそれぞれに動作モード毎に割り当てられている。なお、「楽器（状態、演奏中）」の命令定義は本装置の動作状態が自動演奏待機である場合における鍵盤２１にも割り当てられている。
【００８９】
楽器状態処理の処理内容を示すフローチャートを図１１に示す。同図に示したフローチャートでは本装置全体の制御処理でのＳ１００７（図８）においてＲＯＭ１３に格納されている仕様データテーブルから読み出した命令定義の内容を調べ、「楽器（状態、起動画面）」（Ｓ３１０１の判定結果がＹｅｓ）であれば楽器（状態、起動画面）処理を実行し（Ｓ３１０２）、「楽器（状態、演奏停止）」（Ｓ３１０３の判定結果がＹｅｓ）であれば楽器（状態、自動演奏停止）処理を実行し（Ｓ３１０４）、「楽器（状態、演奏中）」（Ｓ３１０５の判定結果がＹｅｓ）であれば楽器（状態、自動演奏中）処理を実行し（Ｓ３１０６）、「楽器（状態、演奏待機）」（Ｓ３１０７の判定結果がＹｅｓ）であれば楽器（状態、自動演奏待機）処理を実行し（Ｓ３１０８）、「楽器（状態、音源変更）」（Ｓ３１０９の判定結果がＹｅｓ）であれば楽器（状態、音源パラメータ変更）処理を実行し（Ｓ３１１０）、「楽器（状態、演奏変更）」（Ｓ３１１１の判定結果がＹｅｓ）であれば楽器（状態、演奏パラメータ変更）処理を実行する（Ｓ３１１２）。
【００９０】
そして、Ｓ３１０１からＳ３１１２までのうちの偶数ステップに示されているいずれかの処理を実行した後、または、Ｓ３１０１からＳ３１１１までのうちの奇数ステップに示されている各判定処理の結果がいずれもＮｏである場合には、今回の楽器状態処理を終了して図１０に示す楽器処理へ戻る。
【００９１】
以下、図１１に示されている各処理の詳細について説明する。
【００９２】
図１２はＳ３１０２（図１１）に示されている楽器（状態、起動画面）処理の詳細を示している。この処理では、まずＳ３１２１においてＳ１００１（図８）と同様のイニシャライズ処理を実行し、続くＳ３１２２でＬＣＤ１５に現在表示中の画面をクリアする。その後、Ｓ３１２３で図３（ａ）に示した起動画面をＬＣＤ１５に表示させ、Ｓ３１２４で本装置の現在の動作モード（楽器状態）が図７（Ｂ）に示した番号で設定される楽器状態レジスタに「０」を設定して楽器状態が起動画面（起動時）であることを示し、楽器状態処理へ戻る。
【００９３】
なお、この楽器（状態、起動画面）処理は前述した本装置全体の制御処理のＳ１００２（図８）でも実行される。
【００９４】
図１３はＳ３１０４（図１１）に示されている楽器（状態、自動演奏停止）処理の詳細を示している。この処理では、まずＳ３１３１でＬＣＤ１５に現在表示中の画面をクリアし、続くＳ３１３２で図３（ｂ）に示した画面をＬＣＤ１５に表示させ、更にＳ３１３３で前述した楽器状態レジスタに「１」を設定して楽器状態（本装置の動作モード）が自動演奏停止であることを示す。その後、機能中の自動演奏を停止させるために、Ｓ３１３４でスタートフラグＳＴＦ及びウェイトフラグＷＦを共に「０」に設定すると共に、Ｓ３１３５で音源２０に対して消音指示を行ない、その後に楽器状態処理へ戻る。ここで、スタートフラグＳＴＦは自動演奏の開始指示の有無が示されるフラグであり、自動演奏の開始指示がなされたときにはこのフラグが「１」に設定される。また、ウェイトフラグＷＦは自動演奏の一時停止指示の有無が示されるフラグであり、自動演奏が行われている最中に一時停止指示がなされるとこのフラグが「１」に設定される。
【００９５】
図１４は、Ｓ３１０６（図１１）に示されている楽器（状態、自動演奏中）処理の詳細を示している。この処理では、まず同図（Ａ）のＳ３１４１においてＬＣＤ１５に現在表示中の画面をクリアし、続くＳ３１４２で図３（ｃ）に示した画面をＬＣＤ１５に表示させ、更にＳ３１４３で前述した楽器状態レジスタに  「２」を設定して楽器状態が自動演奏中であることを示す。その後、自動演奏を開始させるために、Ｓ３１４４でスタートフラグＳＴＦを「１」に、そしてウェイトフラグＷＦを「０」に設定する。その後、Ｓ３１４５で曲開始処理を実行し、その後に楽器状態処理へ戻る。
【００９６】
図１４（Ｂ）はＳ３１４５で実行される曲開始処理の詳細を示している。この処理では、まず、Ｓ３１５１で変数ＳＴに「０」を代入する。そして、Ｓ３１５２で、同じくＲＡＭ１４に確保されている領域ＳＯＮＧＮＯ．に格納されている番号を取得し、その番号で特定される楽曲の自動演奏データ列であるデータファイルが格納されているＦＤをＦＤＤ２２から読み出すために、そのデータファイルにおける先頭のデータが格納されている格納位置を指す読み出しポインタを取得して変数ＳＡＤＤに代入する。この先頭のポインタの値はＦＤの特定のセクタにデータファイル毎に対応させて予め格納しておく。
【００９７】
Ｓ３１５３では、変数ＳＡＤＤの値で指し示される、ＦＤの記憶領域に格納されている自動演奏データ列のうちの１つのデータＦＤＤ（ＳＡＤＤ）をＦＤＤ２２を介して読み出して取得し、変数ΔＳＴに代入する。なお、ＦＤに格納されている楽曲の自動演奏データの先頭には最初の楽音を発音するまでの待ち時間を示すデータが配置されている。
【００９８】
Ｓ３１５４では変数ＳＴの値に変数ΔＳＴの値を加算した結果を改めて変数ＳＴに代入し、続くＳ３１５５で変数ＳＴの値を図６に示す音楽データバッファの領域ＳＴに格納する。
【００９９】
Ｓ３１５６では自動演奏データを指す読み出しポインタである変数ＳＡＤＤの値をインクリメント（１だけ進める）し、続くＳ３１５７で自動演奏データＦＤＤ（ＳＡＤＤ）の値を再度取得し、変数ＳＥＶＥＮＴに代入する。なお、ここで取得されるデータは楽曲の最初の楽音の発音データである。
【０１００】
Ｓ３１５８では変数ＳＥＶＥＮＴの値を図６に示す音楽データバッファの領域ＳＥＶＥＮＴに格納する。
【０１０１】
Ｓ３１５９では変数ＳＴＡＲＴに「０」を代入し、続くＳ３１６０で変数ＳＡＤに「０」を代入して両変数をそれぞれ初期化する。これらの変数は後述するタイマ処理において使用される変数である。
【０１０２】
以上の処理を終えた後に曲開始処理を終了し、図１４（Ａ）に示す処理へ戻る。
【０１０３】
図１５はＳ３１０８（図１１）に示されている楽器（状態、自動演奏待機）処理の詳細を示している。この処理では、まずＳ３１７１でＬＣＤ１５に現在表示中の画面をクリアし、続くＳ３１７２で図３（ｄ）に示した画面をＬＣＤ１５に表示させ、更にＳ３１７３で楽器状態レジスタに「３」を設定して楽器状態が自動演奏待機であることを示す。その後、機能中の自動演奏を一時停止（待機）させるために、Ｓ３１７４で前述したウェイトフラグを「１」に設定し、その後に楽器状態処理へ戻る。
【０１０４】
図１６はＳ３１１０（図１１）に示されている楽器（状態、音源パラメータ変更）処理の詳細を示している。この処理では、まずＳ３１８１でＬＣＤ１５に現在表示中の画面をクリアし、続くＳ３１８２で図３（ｅ）に示した音源パラメータ変更画面をＬＣＤ１５に表示させ、更にＳ３１８３で楽器状態レジスタに「４」を設定して楽器状態が音源パラメータ変更であることを示す。そして、Ｓ３１８４で音源パラメータ変更画面の数値表示を、ＲＡＭ１３の領域ＴＯＮＥＮＯ．、ＰＩＴＣＨ、ＦＩＬＴＥＲ、ＥＮＶＥＬＯＰＥ、ＭＯＤＵＬＡＴＩＯＮの各々に格納されている現在の値に変更して表示させる。その後は楽器状態処理へ戻る。
【０１０５】
図１７はＳ３１１２（図１１）に示されている楽器（状態、演奏パラメータ変更）処理の詳細を示している。この処理では、まずＳ３１９１でＬＣＤ１５に現在表示中の画面をクリアし、続くＳ３１９２で図３（ｆ）に示した演奏パラメータ変更画面をＬＣＤ１５に表示させ、更にＳ３１９３で楽器状態レジスタに「５」を設定して楽器状態が演奏パラメータ変更であることを示す。そして、Ｓ３１９４で、演奏パラメータ変更画面の数値表示を、ＲＡＭ１３の領域ＳＯＮＧＮＯ．、ＴＥＭＰＯ、ＶＯＬＵＭＥ、ＴＲＡＮＳＰＯＳＥの各々に格納されている現在の値に変更して表示させる。その後は楽器状態処理へ戻る。
【０１０６】
以上までに説明した各処理が楽器状態処理において実行される。
【０１０７】
次に、図１０に示した楽器処理のフローチャートのＳ３０１４において実行される楽器巻戻し処理の詳細を説明する。
【０１０８】
楽器巻戻し処理は、前述したように、本発明に関する機能である巻戻し機能を本装置に行なわせるべく、この巻戻し機能の処理を開始させるために必要な各種のフラグの設定を行なう処理である。
【０１０９】
図１８は楽器巻戻し処理の処理内容を示すフローチャートである。
【０１１０】
この処理では、まずＳ３２０１でリワインドフラグＲＷＦを「１」にセットする。リワインドフラグに「１」がセットされることにより、使用者によるスイッチ１８ｈの押下操作がなされて巻戻し機能の開始が指示されたことが示される。
【０１１１】
Ｓ３２０２では、変数ＲＷＴＩＭＥに「０」を代入して初期化する。変数ＲＷＴＩＭＥは使用者によるスイッチ１８ｈの押下継続時間、すなわち、使用者からの巻戻し指示の指示時間を得るために用いられる変数である。
【０１１２】
Ｓ３２０３ではスタートフラグＳＴＦ及びウェイトフラグＷＦを共に「０」に設定し、その後は今回の楽器巻戻し処理を終了して図１０に示す楽器処理へ戻る。
【０１１３】
以上までの処理が楽器巻戻し処理である。
【０１１４】
［４．タイマ処理］
前述したように、ＣＰＵ１１はタイマ１２が一定の時間を計時する度に発生させるタイマインタラプトに応じてタイマ処理を実行する。以下、タイマ処理の詳細について、その処理内容を示す図１９のフローチャートに沿って説明する。
【０１１５】
タイマ１２からのタイマインタラプトを受け付けると、まず、Ｓ４００１においてＲＡＭ１４のワークエリアに領域確保されている時刻カウンタの値を１だけ進める。
【０１１６】
Ｓ４００２では鍵盤処理が実行される。鍵盤処理は鍵盤２１に対する操作の内容をＣＰＵ１１が取得する処理であり、押鍵・離鍵の発生の検出や、押鍵あるいは離鍵された鍵の音高やベロシティ（押鍵・離鍵の速度）を示すデータの取得などを行なう。
【０１１７】
Ｓ４００３ではスイッチ処理が実行される。スイッチ処理はスイッチ１８に対する操作の内容をＣＰＵ１１が取得する処理であり、スイッチ１８に対する操作の有無を検出し、操作が検出された場合には何らかの操作イベントが発生をしたことの明示をＣＰＵ１１の有するフラグに設定すると共に、スイッチ１８ａから１８ｐの何れに対しての操作が検出されたのかを示しておくために、図７（Ａ）に示されている操作されたスイッチに対応する番号（以下、図７（Ａ）に示されている番号を「デバイス番号」と呼ぶ）をＣＰＵ１１の有する入力イベントレジスタに代入する処理が実行される。
【０１１８】
Ｓ４００４ではスライダ処理が実行される。スライダ処理はスライダ１７に対する操作の内容をＣＰＵ１１が取得する処理である。この処理の概要を説明すると、まず、スライダ１７ａ、１７ｂ、１７ｃの各々についてタイマ処理の前回の実行時以降の操作の有無を検出する。ここで操作ありと検出された場合には、何らかの操作イベントが発生をしたことをＣＰＵ１１の有するフラグに設定すると共に、スライダ１７ａ、１７ｂ、１７ｃの何れに対しての操作が検出されたのかを示しておくために、図７（Ａ）に示されている操作されたスライダに対応するデバイス番号をＣＰＵ１１の有する入力イベントレジスタに代入する処理と、操作されたスライド１７におけるタイマ処理の前回の実行時以降の操作量（スライド量）をＲＡＭ１４のワークエリアの所定領域（図６には図示せず）に格納しておく処理とが実行される。
【０１１９】
Ｓ４００５ではエンコーダ処理が実行される。エンコーダ処理はエンコーダ１９に対する操作の内容をＣＰＵ１１が取得する処理である。この処理の概要は、まず、タイマ処理の前回の実行時以降の操作の有無を検出し、操作が検出された場合には、何らかの操作イベントが発生をしたことをＣＰＵ１１の有するフラグに設定すると共に、エンコーダ１９に対しての操作が検出されたのかを示しておくために、図７（Ａ）に示されているエンコーダ１９に対応するデバイス番号「１９」をＣＰＵ１１の有する入力イベントレジスタに代入する。そして、エンコーダ１９におけるタイマ処理の前回の実行時以降の操作量（回転量）をＲＡＭ１４のワークエリアの所定領域（図６には図示せず）に格納しておく処理が実行される。
【０１２０】
Ｓ４００６では再生処理が実行される。再生処理は楽曲の自動演奏を本装置で行なうための処理であり、楽曲を構成する楽音データを所定のタイミングで音源２０に送付して楽音を出力させる処理である。また、楽曲の自動演奏に併せ、自動演奏の経過時間と自動演奏データにおいて楽曲を構成する各小節の先頭の楽音データの格納されているＦＤ上の格納位置を指す読み出しポインタとの関係を示すデータテーブルＤＡＴＡを作成する処理も実行される。
【０１２１】
Ｓ４００７では巻戻し処理が実行される。巻戻し処理は、再生処理で作成される前述したデータテーブルＤＡＴＡを活用し、現在自動演奏中の楽曲における本装置の使用者による巻戻し指示の指示操作時間に応じた箇所からの自動演奏を本装置に行なわせる処理である。
【０１２２】
この再生処理及び巻戻し処理は本発明に特に関係する処理であり、その処理の詳細は次に説明する。
【０１２３】
巻戻し処理を終えた後は今回のタイマ処理を終了する。
以下、Ｓ４００６の再生処理およびＳ４００７の巻戻し処理の詳細について説明する。
【０１２４】
図２０及び図２１は、再生処理の処理内容を示すフローチャートである。
【０１２５】
まず、図２０のＳ４１０１では自動演奏の開始指示の有無を示すスタートフラグＳＴＦが「１」、すなわち開始指示に設定されており、且つ自動演奏の一時停止指示の有無を示すウェイトフラグＷＦが「０」、すなわち非停止に設定されているか否かを判別する。この判別結果がＹｅｓならばＳ４１０２に進み、Ｎｏならば今回の再生処理を終了して図１９においての次の処理に進む。
【０１２６】
Ｓ４１０２では変数ＳＴＡＲＴをインクリメント（１だけ加算）する。この変数ＳＴＡＲＴには自動演奏を開始してからの経過時間を示す値が格納される。なお、変数ＳＴＡＲＴは前述した曲開始処理（図１４（Ｂ））においてその値が「０」に初期化される。
【０１２７】
Ｓ４１０３では図６に示す音楽データバッファの領域ＳＴに格納されている、次の楽音を発音させる時刻が楽曲の自動演奏を開始してからの経過時間として示されているデータを変数ＳＴに代入する。
【０１２８】
Ｓ４１０４では変数ＳＴＡＲＴの値が変数ＳＴの値よりも大きいか否かを判別し、判定結果がＹｅｓならばＳ４１０５に進み、Ｎｏならば今回の再生処理を終了して図１９においての次の処理に進む。
【０１２９】
Ｓ４１０５では図６に示す音楽データバッファのＳＥＶＥＮＴに格納されている楽音データを音源２０に送付して対応する楽音を発音させる。
【０１３０】
Ｓ４１０６では自動演奏データ列を構成するデータのＦＤ上の格納位置を指す読み出しポインタが値として格納されている変数ＳＡＤＤの値をインクリメント（１だけ進める）する。
【０１３１】
Ｓ４１０７では変数ＳＡＤＤの値で指し示される、ＦＤの記憶領域に格納されている自動演奏データ列のうちの１つのデータＦＤＤ（ＳＡＤＤ）をＦＤＤ２２を介して読み出し、そのデータ内容が楽曲の終了を示すデータであるか否かを判別する。判別結果がＹｅｓであればＳ４１０８に進み、ＮｏであればＳ４１１０（図２１）に進む。
【０１３２】
Ｓ４１０８では音源２０に対して楽音の出力の中止（消音）を指示する。
【０１３３】
Ｓ４１０９では自動演奏の開始指示の有無を示す前述したスタートフラグＳＴＦを「０」、すなわち開始指示無しに設定し、その後は今回の再生処理を終了して図１９においての次の処理に進む。
【０１３４】
ところで、Ｓ４１０７の判定処理の結果、ＦＤＤ（ＳＡＤＤ）の内容が楽曲の終了を示すデータでなかったならば図２１に移り、Ｓ４１１０においてＦＤＤ（ＳＡＤＤ）のデータ内容を更に調べる。その結果ＦＤＤ（ＳＡＤＤ）の内容が楽音データであればＳ４１１１に進む。あるいは、楽曲の１小節の区切りごとに挿入され、次に続く小節の先頭の演奏データのＦＤ上の格納位置を示す読み出しポインタを有する制御データであればＳ４１１３に進む。もしくは、楽音データに対応する発音時間を示す時間データであればＳ４１１５に進む。
【０１３５】
Ｓ４１１１ではＦＤＤ（ＳＡＤＤ）に格納されていた楽音データを変数ＳＥＶＥＮＴに代入する。
【０１３６】
Ｓ４１１２では変数ＳＥＶＥＮＴの値を図６に示す音楽データバッファの領域ＳＥＶＥＮＴに格納し、その後はＳ４１０６（図２０）へ戻る。
【０１３７】
Ｓ４１１３ではＦＤＤ（ＳＡＤＤ）に格納されていた制御データの有する読み出しポインタの値を変数ＦＤＤＡＤに代入し、続くＳ４１１４でその読み出しポインタの値を更に変数ＳＡＤＤにも代入する。その後はＳ４１０７（図２０）へ戻る。
【０１３８】
Ｓ４１１５ではＦＤＤ（ＳＡＤＤ）の時間データを変数ΔＳＴに代入する。
【０１３９】
Ｓ４１１６では変数ＳＴの値に変数ΔＳＴの値を加えた計算結果を改めて変数ＳＴに代入する。
【０１４０】
Ｓ４１１７では変数ＳＴの値を図６に示す音楽データバッファの領域ＳＴに格納する。
【０１４１】
Ｓ４１１８では前述したデータテーブルＤＡＴＡのＳＡＤ番目の格納位置ＤＡＴＡ（ＳＡＤ）に変数ＳＴの値及び変数ＦＤＤＡＤの値を対応づけて格納する。
【０１４２】
以降のＳ４１１９からＳ４１２３にかけての処理はデータテーブルＤＡＴＡへのデータ格納容量を制限をするための処理である。これらの処理ではデータテーブルＤＡＴＡがデータで埋め尽くされてしまった場合には、楽曲における時間的に前の楽音に関するデータから順に削除し、新たなデータをその代わりに格納するようにする。この処置は、巻戻しにおいて、現在の楽曲の演奏箇所から時間的に前方に遠い箇所への巻戻しほど行われる頻度が低いことを利用したものである。本実施の形態においてはデータテーブルＤＡＴＡをＲＡＭ１４の記憶領域に確保するのであるが（図６には不図示）、この処置によりデータテーブルＤＡＴＡとして確保する必要のある記憶領域を小さく抑えることが可能となり、メモリを節約することができる。
【０１４３】
Ｓ４１１９では変数ＳＡＤの値をインクリメント（１だけ加算）する。
【０１４４】
Ｓ４１２０では予め設定されるデータテーブルＤＡＴＡへのデータ格納容量によって定められる特定数を変数ＳＡＤが上回ったか否かを判定し、判定結果がＹｅｓ、すなわち用意されたデータテーブルＤＡＴＡが格納データで埋め尽くされてしまったならばＳ４１２１に進む。一方、判定結果がＮｏ、すなわちデータテーブルＤＡＴＡに新たなデータをまだ格納することが可能ならば、何もせずに今回の再生処理を終了して図１９においての次の処理に進む。
【０１４５】
Ｓ４１２１ではデータテーブルＤＡＴＡにおけるＤＡＴＡ（０）に格納されているデータを削除する。
【０１４６】
Ｓ４１２２ではデータテーブルＤＡＴＡに格納されている各データの格納位置を１つずつ前にずらして詰める。
【０１４７】
Ｓ４１２３では変数ＳＡＤの値をデクリメント（１だけ減算）し、Ｓ４１２０へ戻る。
【０１４８】
以上までの処理が再生処理である。
【０１４９】
次に、図１９に示すタイマ処理のＳ４００７において実行される巻戻し処理について説明する。図２２及び図２３は巻戻し処理の処理内容を示すフローチャートである。
【０１５０】
Ｓ４２０１ではリワインドフラグＲＷＦが「１」にセットされているか否か、すなわち使用者による巻戻し機能の開始の指示がなされたか否かを判別する。この判別結果がＹｅｓならばＳ４２０２に進み、Ｎｏならば何もせずにこのまま今回の巻戻し処理を終了して図１９においての次の処理に進む。
【０１５１】
Ｓ４２０２では変数ＲＷＴＩＭＥの値をインクリメント（１だけ加算）する。
【０１５２】
Ｓ４２０３では使用者による巻戻し機能の開始の指示がなされるスイッチ１８ｈがオフ、つまりスイッチ１８ｈの押下が終了されたか否かを判別する。この判別結果がＹｅｓならばＳ４２０４に進み、Ｎｏならば何もせずにこのまま今回の巻戻し処理を終了して図１９においての次の処理に進む。
【０１５３】
以上のＳ４２０１からＳ４２０３にかけての処理によって変数ＲＷＴＩＭＥには使用者によるスイッチ１８ｈの押下の継続時間を示す値が格納される。Ｓ４２０３ではこの変数ＲＷＴＩＭＥの値に所定の倍数を掛け、この計算結果を改めて変数ＲＷＴＩＭＥに代入する。ここで変数ＲＷＴＩＭＥの値に掛けられる所定の倍数は巻戻しの速度を決定する値であり、巻戻しの機能においてスイッチ１８ｈの押下の継続時間に対しての楽曲の演奏箇所を溯る速度を設定するものである。
【０１５４】
Ｓ４２０５では変数ＳＴから変数ＲＷＴＩＭＥの値を減じ、この計算結果を変数ＲＥＳＴＡＲＴに代入する。
【０１５５】
Ｓ４２０６は変数ＲＥＳＴＡＲＴが負であるか否か、すなわち、楽曲の使用者による自動演奏再開の指示位置がその楽曲の先頭位置よりも前になってしまっているか否かを判別する。この判別結果がＹｅｓならばＳ４２０７に進み、ＮｏならばＳ４２１１（図２３）に進む。
【０１５６】
Ｓ４２０７では既に説明した曲開始処理（図１４（Ｂ））を実行する。
【０１５７】
Ｓ４２０８では楽器状態レジスタを参照し、リワインドフラグＲＷＦを「１」にセットしたときの本装置の動作モード（楽器状態）を判別する。こ の判別処理の結果、楽器状態レジスタが「１」に設定されている、すなわち本装置が「自動演奏停止」の状態にあるならば何もせずに今回の巻戻し処理を終了し て図１９においての次の処理に進む。また、楽器状態レジスタが「２」に設定されている、すなわち本装置が「自動演奏中」の状態にあるならばＳ４２０９においてスタートフラグＳＴＦを「１」にセットした後に今回の巻戻し処理を終了して図１９においての次の処理に進む。更に、楽器状態レジスタが「３」に設定されている、すなわち本装置が「自動演奏待機」の状態にあるならば、Ｓ４２１０においてスタートフラグＳＴＦ及びウェイトフラグＷＦを共に「１」にセットした後に今回の巻戻し処理を終了して図１９においての次の処理に進む。
【０１５８】
図２３に移り、Ｓ４２１１からＳ４２１４にかけての処理は本装置に備えられる巻戻し機能において使用者によるスイッチ１８ｈの押下の継続時間に応じた自動演奏の再開位置、より正確に述べれば演奏を再開する楽音の属する小節の演奏データにおける先頭の時間データが格納されているＦＤ上の位置を指し示す読み出しポインタの値を取得する処理である。
【０１５９】
まず、Ｓ４２１１では変数ＳＡＤの現在の値に基づき、前述したデータテーブルＤＡＴＡのＳＡＤ番目の格納位置ＤＡＴＡ（ＳＡＤ）に格納したデータを読み出し、そのデータから含まれている変数ＳＴの値であったデータを取り出して変数ＳＴに代入する。
【０１６０】
Ｓ４２１２では変数ＳＴの値が変数ＲＥＳＴＡＲＴの値よりも大きいか否かを判別し、判別結果がＹｅｓであればＳ４２１３に進み、ＮｏであればＳ４２１４に進む。
【０１６１】
Ｓ４２１３では変数ＳＡＤの値をデクリメント（１だけ減算）し、Ｓ４２１１へ戻る。
【０１６２】
Ｓ４２１４では変数ＳＡＤの値に対応するデータテーブルＤＡＴＡのＳＡＤ番目の格納位置ＤＡＴＡ（ＳＡＤ）に格納したデータを読み出し、そのデータに含まれているＦＤ上の格納位置を指す読み出しポインタの値を変数ＦＤＤＡＤに代入する。
【０１６３】
Ｓ４２１５では前ステップで変数ＦＤＤＡＤに代入した値を変数ＳＡＤＤにも代入する。
【０１６４】
Ｓ４２１６では変数ＳＡＤＤの現在の値に基づき、ＦＤの記憶領域に格納されている自動演奏データ列のうちのひとつのデータＦＤＤ（ＳＡＤＤ）をＦＤＤ２２を介して読み出し、読み出した値を変数ΔＳＴに代入する。
【０１６５】
Ｓ４２１７では変数ＳＴの値に変数ΔＳＴの値を加算した計算結果を改めて変数ＳＴに代入する。
【０１６６】
Ｓ４２１８では変数ＳＴの値が変数ＲＥＳＴＡＲＴの値を下回ったか否かを判別し、判別結果がＹｅｓ、すなわち変数ＳＴの値が未だ変数ＲＥＳＴＡＲＴの値にまで達していない、つまり変数ＳＴの値に対応して示される楽曲の位置が変数ＲＥＳＴＡＲＴで示される楽曲の使用者による自動演奏再開の指示位置よりも時間的に前の位置を示しているのであればＳ４２１９に進む。一方、Ｓ４２１８の判別結果がＮｏであればＳ４２２０に進む。
【０１６７】
Ｓ４２１９では変数ＳＡＤＤの値に２を加算した計算結果を改めて変数ＳＡＤＤに代入し、その後はＳ４２１６へ戻る。以前に、ＦＤに格納されているデータの格納位置を指す読み出しポインタの値が変数ＳＡＤＤには格納されていること、また、演奏データはＦＤ上で「時間データ」、「発音データ」、の順に交互に並べられていることを説明した。このことから、変数ＳＡＤＤの値を２だけ増加させることによって、加算前のこの値が指し示していた自動演奏データ列における時間データに続く次の時間データの格納位置を加算後の変数ＳＡＤＤの値は示すようになる。
【０１６８】
Ｓ４２２０では変数ＳＴの値を図６に示す音楽データバッファの領域ＳＴに格納する。
【０１６９】
Ｓ４２２１では変数ＳＡＤＤの値をインクリメント（１だけ進める）し、続くＳ４２２２で自動演奏データＦＤＤ（ＳＡＤＤ）の値を再度取得して変数ＳＥＶＥＮＴに代入する。
【０１７０】
Ｓ４２２３では変数ＳＥＶＥＮＴの値を図６に示す音楽データバッファの領域ＳＥＶＥＮＴに格納し、その後はＳ４２０８（図２２）へ戻る。
【０１７１】
以上までの処理が巻戻し処理である。
【０１７２】
［５．本発明の他の実施例を実現させるための制御処理の変形］
以上までに説明した各種処理をＣＰＵ１１が実行することによって本装置は動作し、フロッピーディスクに記憶されている楽曲の演奏情報を読み出してその楽曲の自動演奏を行なう場合に、テープレコーダ等と同様の巻戻し機能、すなわち楽曲中の再度の自動演奏のおおよその開始箇所を指示操作の操作時間に基づいて指示できるという、本発明に係る巻戻しの自動演奏機能が実現される。
【０１７３】
なお、今までに説明したＣＰＵ１１により実行される処理においては、自動演奏の経過時間と自動演奏データ列において楽曲を構成する各小節の先頭のデータの格納されているＦＤ上の格納位置を指す読み出しポインタとの関係が示されるデータテーブルＤＡＴＡについて、自動演奏データ列における時間データ毎、言い換えれば楽曲の１楽音（休符）毎に前述の関係を取得してデータテーブルの１項目とするようにして作成していた。これに対し、これより説明する実施例（この実施例を前述した実施例と区別すべく「第二実施例」と呼び、前述した実施例を「第一実施例」と呼ぶこととする）では、前述の関係を楽曲の１楽音（休符）毎に項目とするのではなく、自動演奏データ列において楽曲を構成する各小節の先頭のデータの格納されているＦＤ上の格納位置と自動演奏の経過時間との関係を、楽曲を構成する１小節毎に１項目とするデータテーブルＢＡＲを作成する。こうすることによって同一曲の同一箇所における演奏時間当たりのデータテーブルの項目数を削減できるので、同一の格納容量を有するデータテーブルでより長時間に渡る巻戻し機能を提供することができるようになり、また、同一の演奏時間内での巻戻し機能を提供するのであればデータテーブルの格納容量を削減することができる。
【０１７４】
第二実施例である電子キーボードの構成は前述した第一実施例である電子キーボードの構成と同様であり、ＣＰＵ１１により行なわれる第一実施例における制御処理のうち、既に説明した再生処理及び巻戻し処理にわずかな変更を加えることで第二実施例の実現が可能である。以下、これらの処理の変更について説明する。
【０１７５】
図２４は第二実施例における再生処理の第一実施例からの変更部分の処理内容を示すフローチャートである。ここで、第二実施例における再生処理のフローチャートの前半部分は第一実施例における再生処理のフローチャートの前半部分を示した図２０と同一であり、第一実施例の後半部分を示した図２１を図２４に置き換えることにより第二実施例における再生処理のフローチャートとなる。
【０１７６】
図２４を図２１と比較すると、図２１ではＳ４１１７以降に実行されるＳ４１１８からＳ４１２３にかけての処理が図２４では削除され、そして、Ｓ４１１０における判別処理の結果により、ＦＤＤ（ＳＡＤＤ）の内容が前述した制御データであった場合に実行されるＳ４１１４に続くＳ４１３１からＳ４１３６にかけての処理が図２４では追加されていることが分かる。
【０１７７】
Ｓ４１３１では前述したデータテーブルＢＡＲのＳＡＤ番目の格納位置ＢＡＲ（ＳＡＤ）に変数ＦＤＤＡＤの値及び変数ＳＴの値を対応づけて格納する。
【０１７８】
Ｓ４１３２では変数ＳＡＤの値をインクリメント（１だけ加算）する。
【０１７９】
Ｓ４１３３では予め設定されるデータテーブルＢＡＲへのデータ格納容量によって定められる特定数を変数ＳＡＤが上回ったか否かを判定し、判定結果がＹｅｓ、すなわち用意されたデータテーブルＢＡＲが格納データで埋め尽くされてしまったならばＳ４１３４に進む。一方、判定結果がＮｏ、すなわちデータテーブルＢＡＲに新たなデータをまだ格納することが可能ならば、何もせずに今回の再生処理を終了して図１９においての次の処理に進む。
【０１８０】
Ｓ４１３４ではデータテーブルＢＡＲにおけるＢＡＲ（０）に格納されているデータを削除する。
【０１８１】
Ｓ４１３５ではデータテーブルＢＡＲに格納されている各データの格納位置を１つずつ前にずらして詰める。
【０１８２】
Ｓ４１３６では変数ＳＡＤの値をデクリメント（１だけ減算）し、Ｓ４１３３へ戻る。
【０１８３】
以上のＳ４１３１からＳ４１３６にかけての処理により、自動演奏データ列において楽曲を構成する各小節の先頭のデータの格納されているＦＤ上の格納位置と自動演奏の経過時間との関係が楽曲を構成する１小節毎に１項目として示されるデータテーブルＢＡＲが作成される。
【０１８４】
次に、第二実施例における巻戻し処理の処理内容について説明する。
【０１８５】
図２５は第二実施例における巻戻し処理の第一実施例からの変更部分の処理内容を示すフローチャートである。ここで、第二実施例における巻戻し処理のフローチャートの前半部分は第一実施例における巻戻し処理のフローチャートの前半部分を示した図２２と同一であり、第一実施例の後半部分を示した図２３を図２５に置き換えることにより第二実施例における巻戻し処理のフローチャートとなる。
【０１８６】
図２５を図２３と比較すると、図２３におけるＳ４２１１及びＳ４２１４の処理が図２５ではそれぞれＳ４２３１Ｓ及び４２３２に置き換えられている点が異なるのみであり、その内容も処理の対象とするデータテーブルがＤＡＴＡからＢＡＲに変更されたのみである。巻戻し処理をこのように変更するだけで前述したデータテーブルＢＡＲを用いての巻戻し機能が実現される。
【０１８７】
【発明の効果】
以上詳細に説明したように、本発明では、イベントとこのイベントを継続させる時間とを複数個所定の順序で並べられて成る曲データを複数のデータ列に分割された状態で記憶し、この各データ列の最後には次のデータ列の記憶位置を表わす制御データを付加して記憶した記憶媒体から該データを読み出しするとき、曲データを構成する各データ列を制御データに基づいて順次指定するとともに、指定されたデータ列に含まれるイベントを、当該イベント対応する時間に対応するタイミングで読み出すことにより、曲データを再生する。
この曲データの再生中に再生開始からの時間をカウントし、かつ所定のデータが読み出される毎に、当該読み出されたデータを含むデータ列の前記記憶媒体における記憶位置を示す情報を、カウントされた時間とともに格納する。
この再生中に巻き戻しの指示が為された場合、カウントされた再生時間から指示手段による指示に基づいた時間分減算した再生時間に再生すべき曲データの読み出し位置を、前記格納されたデータ列の記憶位置を示す情報及び時間により検出して、この検出された読み出し位置からの読み出しを行なって再生を開始させる。
【０１８８】
そして、この構成によって、既に読出されたデータについて、そのデータの記憶媒体における記憶位置を示す情報がデータ列においてこのデータが出現する時間に対応させて格納されるので、前述した巻戻しの機能、すなわち、読出しているデータより指示に基づいた時間だけデータ列においての時間順に溯った順番からのデータの時間順の読出を行なう際にこの格納情報を活用すれば、その指示に対応する順番のデータを素早く見つけることができるようになり、巻戻しの機能を実現させるための処理の負荷を軽減させる効果を奏する。
【図面の簡単な説明】
【図１】本発明を実施する電子キーボードの全体構成を示す図である。
【図２】電子キーボードの操作部分の様子を示す図である。
【図３】ＬＣＤの表示例を示す図である。
【図４】仕様データテーブルの一例を示す図である。
【図５】ＲＯＭ内の各データの格納の様子を示す図である。
【図６】ＲＡＭのワークエリアの使用状態を示す図である。
【図７】操作子及び楽器状態に与えられている番号の定義を示す図である。
【図８】ＲＯＭに格納されている制御プログラムの実行によりＣＰＵが行なう処理の処理内容を示すフローチャートである。
【図９】仕様データ処理の処理内容を示すフローチャートである。
【図１０】楽器処理の処理内容を示すフローチャートである。
【図１１】楽器状態処理の処理内容を示すフローチャートである。
【図１２】楽器（状態、起動画面）処理の処理内容を示すフローチャートである。
【図１３】楽器（状態、自動演奏停止）処理の処理内容を示すフローチャートである。
【図１４】楽器（状態、自動演奏中）処理の処理内容を示すフローチャートである。
【図１５】楽器（状態、自動演奏待機）処理の処理内容を示すフローチャートである。
【図１６】楽器（状態、音源パラメータ変更）処理の処理内容を示すフローチャートである。
【図１７】楽器（状態、演奏パラメータ変更）処理の処理内容を示すフローチャートである。
【図１８】楽器巻戻し処理の処理内容を示すフローチャートである。
【図１９】タイマ処理の処理内容を示すフローチャートである。
【図２０】再生処理の処理内容を示すフローチャート（その１）である。
【図２１】再生処理の処理内容を示すフローチャート（その２）である。
【図２２】巻戻し処理の処理内容を示すフローチャート（その１）である。
【図２３】巻戻し処理の処理内容を示すフローチャート（その２）である。
【図２４】第二実施例における再生処理の第一実施例からの変更部分の処理内容を示すフローチャートである。
【図２５】第二実施例における巻戻し処理の第一実施例からの変更部分の処理内容を示すフローチャートである。
【符号の説明】
１１  ＣＰＵ
１２  タイマ
１３  ＲＯＭ
１４  ＲＡＭ
１５  ＬＣＤ
１６  ＬＥＤ
１７  スライダ
１８  スイッチ
１９  エンコーダ
２０  音源
２１  鍵盤
２２  ＦＤＤ
２３  バス
【図１】
0003900754.tif 000002
【図２】
0003900754.tif 000003
【図３】
0003900754.tif 000004
【図４】
0003900754.tif 000005
【図５】
0003900754.tif 000006
【図６】
0003900754.tif 000007
【図７】
0003900754.tif 000008
【図８】
0003900754.tif 000009
【図９】
0003900754.tif 000010
【図１０】
0003900754.tif 000011
【図１１】
0003900754.tif 000012
【図１２】
0003900754.tif 000013
【図１３】
0003900754.tif 000014
【図１４】
0003900754.tif 000015
【図１５】
0003900754.tif 000016
【図１６】
0003900754.tif 000017
【図１７】
0003900754.tif 000018
【図１８】
0003900754.tif 000019
【図１９】
0003900754.tif 000020
【図２０】
0003900754.tif 000021
【図２１】
0003900754.tif 000022
【図２２】
0003900754.tif 000023
【図２３】
0003900754.tif 000024
【図２４】
0003900754.tif 000025
【図２５】
0003900754.tif 000026