(57)【特許請求の範囲】
【請求項１】
複数パートのパターンデータを記憶したパターンデータ記憶手段と、
自動演奏の時間進行を管理する時間管理手段と、
該時間管理手段の内容に基づいて前記パターンデータ記憶手段に記憶された全パートのパターンデータを順次読み出すパターンデータ読出手段と、
該パターンデータ読出手段により読み出されたパターンデータに基づいて作成された全パートの演奏データを記憶する演奏データ記憶手段と、
該演奏データ記憶手段に記憶された演奏データの中の残りの発音時間を示す残存ゲートタイムを所定時間毎に更新する更新手段と、
各パートの発音を指示する指示手段と、
該指示手段により指示されたパートのみ発音する発音手段とを有し、
前記発音手段は、自動演奏中に前記指示手段により新たなパートの発音が指示された場合に、前記演奏データ記憶手段に記録された該パートの演奏データの中の残存ゲートタイムに基づいて発音をするかしないか制御することを特徴とする自動演奏装置。
【請求項２】
前記発音手段は、新たなパートの発音が指示された場合に、前記演奏データ記憶手段に記憶されている演奏データのうち、前記残存ゲートタイムが所定値以上の演奏データのみを新たに発音することを特徴とする請求項１に記載の自動演奏装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、数小節程度の演奏パターンを繰り返すことにより自動演奏を行う自動演奏装置に関する。
【０００２】
【従来の技術】
従来、予め記憶手段に記憶された数小節（２〜１６小節程度）分の自動演奏データ（以下、「パターンデータ」という。）を繰り返して読み出して音源に与えることにより所定の演奏パターンを再生する自動演奏装置が知られている。
【０００３】
この種の自動演奏装置は、パターンデータを機械的に読み出して再生するだけであるので、発音のタイミングや音量等に揺らぎがなく画一的であり、人間味に欠けるという欠点があった。そこで、かかる画一的な自動演奏を回避して揺らぎを持たせるために、発音タイミングや音量等をランダムに変化させることにより人間の感情の周期にマッチさせる試みがなされている。発音タイミングや音量等をランダムに変化させれば変化に富んだ自動演奏は可能である。しかしながら、人間の感情の周期にマッチした演奏パターン、例えばノリの良い演奏パターンを実現することは困難であった。
【０００４】
従って、従来は、例えばノリの良い自動演奏を行うためには、たとえ２小節の演奏パターンの繰り返しで成る自動演奏曲であっても、曲の最初から最後までのパターンデータを作成して記憶しておき、それを忠実に再生する必要があった。従って、人間の感情の周期にマッチした演奏パターンを得るためには膨大なメモリ容量を必要とするという問題があった。
【０００５】
また、上記のような自動演奏装置は、複数パート（例えばリズム、ベース、アカンパニメント及びメロディ等）を有し、各パートがそれぞれ独立して制御できるように構成される場合も多い。例えば、特開昭５８−３５５９７号公報には、複数パートを同時に再生でき、また、各パート単位で発音するかどうかを制御可能にした自動演奏装置が開示されている。この自動演奏装置によれば、複数のパートを同時に発音することにより、多重演奏を行わせることができる。
【０００６】
しかしながら、複数パートを有する自動演奏装置においては、特定パートの演奏を自動演奏でなく人が行うという応用が望まれている。例えば、リズム、ベース、アカンパニメントの各パートは自動演奏にまかせメロディパートは人が弾くといった具合である。このためには、パート単位で随時再生又は停止の制御が可能である必要がある。上掲の公報に開示された自動演奏装置は、ＲＵＮスイッチを投入してスタートパルスが発生したときには既に再生（又は録音）すべきパートは確定している必要があり、演奏途中でパートスイッチを変化させることは予定されていない。即ち、演奏途中でパートスイッチをオンにしてもそのパートの再生はできない。
【０００７】
【発明が解決しようとする課題】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、自動演奏の途中からでも特定パートの再生又は停止を行わせることのできる自動演奏装置を提供することにある。
【０００８】
【課題を解決するための手段】
上記目的を達成するために、本発明は、複数パートのパターンデータを記憶したパターンデータ記憶手段と、自動演奏の時間進行を管理する時間管理手段と、該時間管理手段の内容に基づいて前記パターンデータ記憶手段に記憶された全パートのパターンデータを順次読み出すパターンデータ読出手段と、該パターンデータ読出手段により読み出されたパターンデータに基づいて作成された全パートの演奏データを記憶する演奏データ記憶手段と、該演奏データ記憶手段に記憶された演奏データを自動演奏の進行に応じて更新する更新手段と、各パートの発音を指示する指示手段と、該指示手段により指示されたパートについてのみ発音する発音手段とを有し、前記発音手段は、前記指示手段により新たなパートの発音指示がなされた場合に、そのパートに対応する前記演奏データ記憶手段中の演奏データに基づき発音することを特徴とする。
【０００９】
本発明においては、全パートのパターンデータを時間管理手段、例えば小節レジスタ／拍レジスタ等の内容に従って順次読み出し、これから演奏データを作成して演奏データ記憶手段に記憶する。この演奏データ記憶手段に記憶された演奏データのうち、指示手段で指示されたパートに対応する演奏データのみが発音される。この演奏データ記憶手段の内容は、発音の有無とは独立に自動演奏の進行に応じて更新される。
【００１０】
自動演奏の途中で新たなパートの発音指示がなされた場合は、演奏データ記憶手段に記憶されている演奏データが既に発音開始タイミングを過ぎていても、未だ消音タイミングに至らない音については途中からであっても発音を開始する。
【００１１】
これにより、演奏者の指示手段による指示タイミングが多少ずれる（遅れる）ことにより、本来発音されるべき音が発音されないという事態を回避できるので、演奏者の意図したタイミングで特定パートの自動演奏を完全な形で開始させることができるという効果がある。
【００１２】
なお、指示手段で所定のパートをオフにすべきことが指示された場合は、その指示手段に対応するパートで発音中の音は全て速やかに発音を中止するように構成することができる。例えば、長いサスティンがかかっている音色やピアノ音でダンパーオンされているような場合でも、それらのエンベロープよりも格段に高速なリリースエンベロープに置き換えて発音を終了させることができる。
【００１３】
このように、特定パートの自動演奏を演奏者の所望のタイミングで開始させ又は終了させることができるということは、パターンデータに基づく発音又は消音のタイミングよりも細かいタイミングで、特定パートの自動演奏を行わせたり停止したりすることができることを意味し、新たな演奏形態が可能になるという効果がある。
【００１４】
また、本発明における前記発音手段は、新たなパートの発音指示がなされた場合に、前記演奏データ記憶手段に記憶されている演奏データのうち、残りの発音時間が所定値以上のときにのみ新たに発音するように構成できる。
【００１５】
この構成によれば、新たなパートの発音指示がなされた場合に、未だ消音タイミングに至っていないが、残りの発音時間が所定値より小さければ発音を行わず、所定値以上の場合にのみ発音を行う。
【００１６】
これにより、発音されてもすぐに消音されてしまうような、聴感には何等の影響を与えない音に対しては、最初から発音されないので、例えば発音手段の一部としてＣＰＵを用いる場合は、ＣＰＵの負荷が軽減される。この場合、ＣＰＵは他の処理を実行することが可能となるので、より効率の良い自動演奏装置を実現できる。
【００１７】
【発明の実施の形態】
以下、本発明の自動演奏装置の実施の形態につき、図面を参照しながら詳細に説明する。
【００１８】
図１は、本発明の自動演奏装置の実施の形態の構成を示すブロック図である。本自動演奏装置は、中央処理装置（以下、「ＣＰＵ」という。）１０、リードオンリメモリ（以下、「ＲＯＭ」という。）１１、ランダムアクセスメモリ（以下、「ＲＡＭ」という。）１２、操作パネル１３、楽音発生器１４、タイマ１６、ＭＩＤＩコントローラ１７及びＦＤコントローラ１８がシステムバス３０を介して相互に接続されて構成されている。システムバス３０は、例えばアドレス線、データ線及び制御信号線等で成り、上記各構成要素間で各種データを送受するために使用される。
【００１９】
ＣＰＵ１０は、パターンデータ読出手段、発音手段の一部及び更新手段に対応するものであり、ＲＯＭ１１に格納されている制御プログラムに従って、本自動演奏装置の全体を制御する。このＣＰＵ１０には、２つの割込信号入力端子ＩＮＴ１及びＩＮＴ２が設けられている。割込信号入力端子ＩＮＴ１にはＭＩＤＩコントローラ１７から、割込信号入力端子ＩＮＴ２にはタイマ１６からそれぞれ割込信号が供給される。このＣＰＵ１０の動作の詳細については後述する。
【００２０】
ＲＯＭ１１には、上述したＣＰＵ１０を動作させるための制御プログラムが記憶されている他、ＣＰＵ１０が各種処理に用いる種々の固定データが記憶されている。このＲＯＭ１１の内容はＣＰＵ１０により読み出される。即ち、ＣＰＵ１０は、ＲＯＭ１１から制御プログラム（命令）を読み出して解釈・実行すると共に、所定の固定データを読み出して各種処理に使用する。
【００２１】
ＲＡＭ１２はパターンデータ記憶手段に対応するものである。ＲＡＭ１２は、ＣＰＵ１０が使用する種々のデータを一時記憶する。このＲＡＭ１２には、例えばバッファ、レジスタ、カウンタ、フラグ等の各種領域が定義されている。本実施の形態で使用する具体的なバッファ、レジスタ、カウンタ、フラグ等については、以下において出現する都度説明するが、ここでは、「受信バッファ」、「レジスタ群ｎ」及び「小節レジスタと拍レジスタ」について説明しておく。
【００２２】
▲１▼受信バッファ
受信バッファは、後述するＭＩＤＩコントローラ１７から受信したＭＩＤＩデータを一時記憶するために使用される。この受信バッファは、例えば図１３に示されるように、ＲＡＭ１２に定義されたカウンタＣＴＲ、ポインタＰＴＲ及び記憶エリアとで構成され、ＣＰＵ１０の制御によりＦＩＦＯ（ファーストイン−ファーストアウト）メモリとして機能するようになっている。記憶エリアは、例えば２５６個のエントリを有し、各エントリにはＭＩＤＩデータが順次記憶される。
【００２３】
カウンタＣＴＲは受信したＭＩＤＩデータを書き込むべき記憶エリアの位置を指定する。このカウンタＣＴＲは、常に最後に書き込まれたＭＩＤＩデータの次のアドレスを指示するように制御される。このカウンタＣＴＲの初期値は「０」であり、ＭＩＤＩデータが書き込まれる度にインクリメントされ、その結果が最大値ＴＯＰを越えた場合は最小値ＢＴＭに循環する。
【００２４】
ポインタＰＴＲは記憶エリア中の、読み出すべきＭＩＤＩデータの位置を指示する。このポインタＰＴＲは、常に最後に読み出されたＭＩＤＩデータの次のアドレス、つまり次に読み出すべきＭＩＤＩデータのアドレスを指示するように制御される。このポインタＰＴＲの初期値は「０」であり、ＭＩＤＩデータが読み込まれる度にインクリメントされ、その結果が最大値ＴＯＰを越えた場合は最小値ＢＴＭに循環する。
【００２５】
この受信バッファは、カウンタＣＴＲの内容とポインタＰＴＲの内容とが一致するときはエンプティであると判断される。なお、カウンタＣＴＲをインクリメントした結果、カウンタＣＴＲの内容がポインタＰＴＲの内容に一致することとなる場合は受信バッファは満杯であるのでＭＩＤＩデータの受信を抑止するように制御される。カウンタＣＴＲの内容とポインタＰＴＲの内容とが一致しない場合は、受信バッファにＭＩＤＩデータが存在することが判断される。
【００２６】
この受信バッファへのＭＩＤＩデータの書込みは後述するＭＩＤＩ−ＩＮ割込処理ルーチンにて行われ、受信バッファからのＭＩＤＩデータの読み出しは後述するＭＩＤＩ−ＩＮ処理ルーチンで行われる。なお、本実施の形態では受信バッファをＲＡＭ１２内に形成し、ＭＩＤＩデータの書込み／読み出しの制御はＣＰＵ１０で行うように構成したが、これらの代わりに周知のＦＩＦＯメモリ素子を用いて構成することもできる。
【００２７】
▲２▼レジスタ群ｎ
レジスタ群ｎは演奏データ記憶手段に対応するものである。レジスタ群ｎ（ｎはパート番号に対応しており、ｎ＝１〜４である。）は、パート毎の発音を管理するために使用される。本実施の形態における各パートのポリフォニック数を「８」とすると、このレジスタ群ｎは、例えば図１４（Ａ）に示されるように、８個のブロックで構成される。各ブロックは１音に対応しており、演奏データに対応する「キーコード及びそのオン／オフ」、「補正ベロシティ」、「残存ゲートタイム」の３バイトで構成されている。
【００２８】
キーコード（７ビット）は音高を示すために使用される。オン／オフビット（１ビット）はキーコードで示される音がキーオン状態にあるか又はキーオフ状態にあるかを示すために使用される。補正ベロシティ（７ビット）はパターンデータ中のベロシティをベロシティ補正データに応じて補正したデータである。残存ゲートタイム（７ビット）は発音中の音（オン／オフビットが「１」になっている音）の残りの発音時間を示すために使用される。図１４（Ａ）においては、１つのパートに対するレジスタ群のみ示されているが、実際はパート１〜４のそれぞれに対して同じ構成のレジスタ群が設けられている。
【００２９】
▲３▼小節レジスタと拍レジスタ
小節レジスタＢＲＲ及び拍レジスタＢＴＲは時間管理手段に対応する。小節レジスタＢＲＲは、小節の進行を計数するレジスタである。この小節レジスタＢＲＲは、１０進数４桁分に相当する計数が可能である。また、拍レジスタＢＴＲは小節内の拍の進行を計数するレジスタである。この拍レジスタＢＴＲは、１ステップタイム毎にカウントアップされる。本実施の形態では、１拍を４８ステップの分解能としている。従って、拍レジスタＢＴＲは、４拍子の場合は４拍、つまり１９２ステップを計数したらゼロにラウンドする。この際、小節レジスタＢＲＲはインクリメントされるように制御される。この小節レジスタＢＲＲと拍レジスタＢＴＲとは、揺らぎを発生させるためのステップタイム補正データ及びベロシティ補正データを読み出すために使用される（詳細は後述する）。
【００３０】
このＲＡＭ１２には、上述したようなバッファ、レジスタ等が定義されている他、パターンデータ及び揺らぎデータが格納されるようになっている。揺らぎデータは、ステップタイム補正データとベロシティ補正データとで構成されている。以下、これらの各データについて説明する。
【００３１】
▲１▼パターンデータ
パターンデータは、例えば２〜１６小節程度の演奏パターンを発生させるために使用される。このパターンデータは、例えば図１４（Ｂ）に示されるような、ステップタイム、ノートナンバ（キーコード）、ゲートタイム及びベロシティといった４バイトのデータの集合で構成されている。個々のパターンデータは、１つの音符に対応している。ここに、ステップタイムは発音を開始する時刻を指定するものであり小節の先頭からのステップ数で規定される。ノートナンバは音高を規定するために使用される。ゲートタイムは発音時間を規定するために使用される。ベロシティは発音の強さ（音量）を規定するために使用される。
【００３２】
▲２▼ステップタイム補正データ
ステップタイム補正データは、例えば図１５にその一部を示すように、各パート１〜４のそれぞれについて１曲の全小節分が用意されている。本実施の形態では１拍（４分音符）を４８ステップの分解能で制御するものとしている。従って、ステップタイム補正データは、図１５に拡大して示すように、各拍のステップタイムを±２４ステップの範囲内で変動できるように定義されている。これにより、最大８分音符の長さまで発音タイミングを遅らせ又は進ませることができる。ただし、負側に補正する場合は、ステップタイム補正データは、後述するパート１〜４読出処理ルーチン（図９、図１０）における処理の関係上、１つ前のデータに対して「−１ステップ」分だけ変化するように作成される。
【００３３】
なお、ステップタイム補正データは、１小節を４つのエリア（４分音符単位）に分割し、各エリア毎に用意されている。従って、１つのエリアの中に複数のキーイベントがある場合は、同一のステップタイム補正データが使用されることになる。かかるデータ構成によりステップタイム補正データの量を小さく抑えることができるものとなっている。
【００３４】
▲３▼ベロシティ補正データ
ベロシティ補正データは、例えば図１６にその一部を示すように、各パート１〜４のそれぞれについて１曲の全小節分が用意されている。本実施の形態では１拍（４分音符）毎の補正レートＶＡｎを補正データとして記憶している。即ち、ベロシティ補正データは、図１６に拡大して示すように、各拍毎に「０．０〜２．０」の範囲内で変動できるように定義されている。従って、１倍を中心に０倍から２倍までの範囲でベロシティを補正できる。
【００３５】
なお、ベロシティ補正データも上記ステップタイム補正データと同様に、１小節を４つのエリア（４分音符単位）に分割し、各エリア毎に用意されている。従って、１つのエリアの中に複数のキーイベントがある場合は、同一のベロシティ補正データが使用されることになる。かかるデータ構成によりベロシティ補正データの量を小さく抑えることができるものとなっている。
【００３６】
図１の説明に戻る。操作パネル１３には、本自動演奏装置と操作者とがコミュニケーションするための各種スイッチ、表示器等が設けられている。この操作パネル１３の詳細については後述する。
【００３７】
楽音発生器１４は発音手段の一部に対応するものであり、ＣＰＵ１０からシステムバス３０を介して送られてくるデータに基づいて楽音信号を生成するものである。この楽音発生器１４で発生された楽音信号は、スピーカシステム１６に送られる。スピーカシステム１６は発音手段の一部に対応するものであり、例えば増幅器、スピーカ等で構成されており、楽音発生器１４から送られてくる楽音信号を音響信号に変換して放音する周知のものである。
【００３８】
タイマ１６は、テンポに対応した間隔で割込信号を発生する。この割込信号の発生間隔は、ＣＰＵ１０からタイマ１６にセットされるデータにより決定される。このタイマ１６で発生された割込信号はＣＰＵ１０の割込信号入力端子ＩＮＴ２に供給される。本実施の形態では、４分音符を１／４８の分解能（精度）で制御するものとしている。従って、４分音符当たりに４８回の割込信号が発生されることになる。
【００３９】
ＭＩＤＩコントローラ１７は、外部装置と本自動演奏装置との間のＭＩＤＩデータの転送を制御するものである。このＭＩＤＩコントローラ１７の外部側に接続される外部装置としては、例えばＭＩＤＩデータを処理することのできる電子楽器、音源モジュール、コンピュータ、シーケンサ等が挙げられる。ＭＩＤＩコントローラ１７は、外部装置からシリアルに送られてくるＭＩＤＩデータを受信し、これが例えば１バイト分になった時点で割込信号を発生する。この割込信号は、ＣＰＵ１０の割込信号入力端子ＩＮＴ１に供給される。
【００４０】
ＦＤコントローラ１８は、フロッピーディスクドライブ装置１９を制御するものである。フロッピーディスクドライブ装置１９に装着されるフロッピーディスクには、例えば、パターンデータ、揺らぎデータ等が記憶される。そして、操作パネルに設けられた所定のスイッチ（図示しない）を操作することにより、フロッピーディスクに記録されている上記パターンデータ、揺らぎデータがＦＤコントローラ１８を介してＲＡＭ１２の所定領域にロードされる。
【００４１】
図２は本自動演奏装置の操作パネル１３の構成例を示す図である。小節／拍表示器１３０は、例えば５桁の７セグメントＬＥＤ表示器で構成されている。この小節／拍表示器１３０の上位４桁には、現在自動演奏されている「小節」、つまり小節レジスタＢＲＲの内容が表示され、下位１桁には現在自動演奏されている「拍」、つまり拍レジスタＢＴＲの内容に対応する拍（具体的には、４拍子の場合は、拍レジスタＢＴＲの内容を４８で割って得られる商に１を加えた値）が表示される。この小節／拍表示器の表示内容は、自動演奏の進行に伴って順次更新される。
【００４２】
コード表示器１３１は、例えばＬＣＤ表示器で構成されている。このコード表示器１３１には、後述するコード検出処理で検出されたコード（コードルート及びコードタイプ）が表示される。本実施の形態では、ＭＩＤＩチャンネル１（ＭＩＤＩ−ＣＨ１）により送られてきたＭＩＤＩデータをロワー鍵からのデータとみなし、これに対してコード検出を行うものとする。従って、このコード表示器１３１には、ＭＩＤＩチャンネル１から送られてきたＭＩＤＩデータに基づいて検出されたコードが表示される。なお、コード検出は、ＭＩＤＩチャンネル１から送られてきた演奏データに限定されず、他の任意のＭＩＤＩチャンネル、或いは複数のＭＩＤＩチャンネルから送られてきた演奏データを対象とするように構成しても良い。
【００４３】
テンポスピード表示器１３２は、例えば３桁の７セグメントＬＥＤ表示器で構成されている。このテンポスピード表示器１３２には、現在設定されているテンポスピードが表示される。
【００４４】
なお、小節／拍表示器１３０及びテンポスピード表示器１３２は、７セグメントのＬＥＤ表示器で構成したが、ＬＣＤ表示器、ＣＲＴ表示器、その他の種々の表示器で構成することができる。同様に、コード表示器１３１もＬＣＤ表示器に限定されず、ＣＲＴ表示器、その他の種々の表示器で構成することができる。
【００４５】
インクリメンタ１３３は、テンポを設定するために使用される。このインクリメンタ１３３は、例えば右回転させることによりテンポが増加し、左回転させることによりテンポが減少するように制御される。そして、このインクリメンタ１３３で設定されたテンポは、テンポスピード表示器１３２に表示される。
【００４６】
ストップスイッチ１３４は、自動演奏を停止させるために使用される。即ち、自動演奏中にストップスイッチ１３４が押されると自動演奏は停止される。プレイ／ポーズスイッチ１３５は、自動演奏を開始させ又は一時停止させるために使用される。自動演奏の停止中又はポーズ（一時停止）状態にあるときに、このプレイ／ポーズスイッチ１３５が押されるとＬＥＤ表示器１４３が点灯されて自動演奏が開始又は再開され、自動演奏中に押されるとＬＥＤ表示器１４３が消灯されてポーズ状態になる。
【００４７】
ＦＦスイッチ１３６は、テンポスピードを上げて再生するために使用される。即ち、自動演奏状態にあるときにＦＦスイッチ１３６が押されるとＬＥＤ表示器１４４が点灯されて高速再生が行われ、次に押されるとＬＥＤ表示器１４４が消灯されて元のテンポスピードに戻る。ＲＥＷスイッチ１３７は、再生位置を戻すために使用される。即ち、このＲＥＷスイッチ１３７が押下されるとＬＥＤ表示器１４５が点灯されて小節／拍数が減少（リワインド）する。このリワインド状態は小節／拍表示器１３０で確認することができる。リワインド状態で再度ＲＥＷスイッチ１３７が押されるとＬＥＤ表示器１４５が消灯されて自動演奏の再生が再開される。
【００４８】
リピートスイッチ１３８は、曲を繰り返し自動演奏させるために使用される。即ち、自動演奏を開始させる前にこのリピートスイッチ１３８が押されるとＬＥＤ表示器１４６が点灯され、曲の最後まで自動演奏が行われると最初に戻って同じ曲の自動演奏が繰り返される。この状態で再度リピートスイッチ１３８が押されるとＬＥＤ表示器１４６が消灯されて自動演奏の繰り返し再生状態は解除される。なお、このリピートスイッチ１３８は、自動演奏状態で所定の操作を行うことにより、曲の特定区間を繰り返し再生するためにも使用されるがここでは説明は省略する。
【００４９】
パートスイッチ１３９〜１４２は指示手段に対応するものである。パート１スイッチ１３９は、リズムパートの発音を指示するために使用される。このパート１スイッチ１３９が押されるとＬＥＤ表示器１４７が点灯されてリズムパートが発音され、次に押されるとＬＥＤ表示器１４７が消灯されてリズムパートの発音は停止される。同様に、パート２スイッチ１４０は、ベースパートの発音を指示するために使用される。このパート２スイッチ１４０が押されるとＬＥＤ表示器１４８が点灯されてベースパートが発音され、次に押されるとＬＥＤ表示器１４８が消灯されてベースパートの発音は停止される。
【００５０】
同様に、パート３スイッチ１４１は、アカンパニメントパート（例えばコードパート等）の発音を指示するために使用される。このパート３スイッチ１４１が押されるとＬＥＤ表示器１４９が点灯されてアカンパニメントパートが発音され、次に押されるとＬＥＤ表示器１４９が消灯されてアカンパニメントパートの発音が停止される。同様に、パート４スイッチ１４２は、メロディパートを指示するために使用される。このパート４スイッチ１４２が押されるとＬＥＤ表示器１５０が点灯されてメロディパートが発音され、次に押されるとＬＥＤ表示器１５０が消灯されてメロディパートの発音が停止される。
【００５１】
上記各パートのうち、リズムパート、ベースパート及びアカンパニメントパートは１〜数小節程度のパターンデータの繰り返し実行により発音されるものであり、本発明は、これら各パートに揺らぎを与えて単調さを解消するものである。なお、メロディパートは、１曲分の全パターンデータが記憶される。
【００５２】
操作パネル１３には、上記以外に複数の音色の中から所望の音色を選択する音色選択操作子、音量を調整する音量操作子、フロッピーディスクからのデータをＲＡＭ１２にロードするための操作子等が設けられているが、本発明とは直接関係しないので図示及び説明は省略する。
【００５３】
上記のように構成される操作パネル１３の各スイッチ等の設定状態は次のようにしてＣＰＵ１０に読み込まれる。即ち、ＣＰＵ１０は操作パネル１３に対してスキャン指令を送出する。操作パネル１３は、このスキャン指令に応答して操作各スイッチのオン／オフを示す信号及びインクリメンタ１３３の現在値を示す信号をＣＰＵ１０に送る。ＣＰＵ１０は、受け取った信号からパネルデータ（各スイッチのオン／オフを１ビットに対応させたスイッチデータとインクリメンタ１３３の設定値を示すインクリメンタデータとで成る。）を生成する。このパネルデータは、ＣＰＵ１０の制御下でＲＡＭ１２に格納され、パネルイベントの有無を判断するために使用される（詳細は後述）。
【００５４】
次に、本発明の自動演奏装置の動作につき、図３〜図１２に示したフローチャートを参照しながら詳細に説明する。
【００５５】
（１）メイン処理（図３）
図３は、本発明の自動演奏装置のメインルーチンを示すフローチャートであり、電源投入により起動される。電源が投入されると、先ず、初期化処理が行われる（ステップＳ１０）。この初期化処理では、ＣＰＵ１０の内部状態が初期状態に設定されると共に、ＲＡＭ１２に定義されているレジスタ、カウンタ或いはフラグ等に初期値が設定される。
【００５６】
この初期化処理が終了すると、次いでパネルスイッチスキャン処理が行われる（ステップＳ１１）。即ち、ＣＰＵ１０は操作パネル１３に対してスキャン指令を送出する。これにより、操作パネル１３は、既に説明したようにパネルデータを生成し、ＣＰＵ１０に送る。ＣＰＵ１０は、このパネルデータ（以下、「新パネルデータ」という。）をＲＡＭ１２の所定領域に格納する。次いで、前回のパネルスイッチスキャン処理で読み込んで既にＲＡＭ１２に記憶されているパネルデータ（以下、「旧パネルデータ」という。）と、上記新パネルデータとを比較して相違するビットをオンにしたパネルイベントマップを作成する。
【００５７】
次いで、イベントの有無が調べられる（ステップＳ１２）。これは、上記パネルイベントマップを参照することにより行われる。即ち、パネルイベントマップ中にオンになっているビットが１つ以上存在するかどうかが調べられ、１つも存在しなければイベントはなかったものと、１つ以上存在すればイベントがあったものとそれぞれ判断される。このステップＳ１２でイベントがあることが判断されるとパネル制御処理が行われ（ステップＳ１３）、そうでなければパネル制御処理はスキップされる。このパネル制御処理の詳細については後述する。
【００５８】
次いで、受信バッファに受信データ（ＭＩＤＩデータ）があるかどうかが調べられる（ステップＳ１４）。これは、上述したように、カウンタＣＴＲの内容とポインタＰＴＲの内容とが一致するかどうかを調べることにより行われる。ここで受信バッファに受信データがあることが判断されるとＭＩＤＩ−ＩＮ処理が行われ（ステップＳ１５）、そうでなければＭＩＤＩ−ＩＮ処理はスキップされる。このＭＩＤＩ−ＩＮ処理の詳細については後述する。
【００５９】
次いで、パート１〜４読出処理が実行される（ステップＳ１６）。この処理は、各パートのパターンデータを読み出して楽音を再生する処理である。このパート１〜４読出処理の詳細については後述する。
【００６０】
次いで、「その他の処理」が行われる（ステップＳ１７）。この「その他の処理」では、フロッピーディスクの制御、音色選択処理、ボリューム設定処理等が行われるが、本発明とは直接関係しないので説明は省略する。その後、ステップＳ１１に戻り、以下同様の処理が繰り返される。
【００６１】
（２）ＭＩＤＩ−ＩＮ割込処理（図４）
このＭＩＤＩ−ＩＮ割込処理は、メインルーチンの処理に割り込んで実行される。このＭＩＤＩ−ＩＮ割込処理では、ＭＩＤＩコントローラ１７で受信されたＭＩＤＩデータが受信バッファに格納される。ＭＩＤＩコントローラ１７は、外部装置からシリアルに送られてくるＭＩＤＩデータが１バイト分になると割込信号を発生する。この割込信号はＣＰＵ１０の割込信号入力端子ＩＮＴ１に供給される。これにより、ＣＰＵ１０は割込モードに入り、本ＭＩＤＩ−ＩＮ割込処理ルーチンがコールされる。
【００６２】
ＭＩＤＩ−ＩＮ割込処理では、先ず、ＭＩＤＩコントローラ１７からＭＩＤＩデータが読み込まれ、これが受信バッファのカウンタＣＴＲで示される位置に書き込まれる（ステップＳ２０）。次いで、カウンタＣＴＲがインクリメントされ（ステップＳ２１）、その結果が記憶エリアの最大値ＴＯＰを越えたかどうかが調べられる（ステップＳ２２）。そして、最大値ＴＯＰを越えていないことが判断されるとこのＭＩＤＩ−ＩＮ処理ルーチンからメインルーチンの割り込まれた位置に戻る。一方、上記ステップＳ２２で最大値ＴＯＰを越えたことが判断されると、カウンタＣＴＲの内容が最小値ＢＴＭに書き換えられ（ステップＳ２３）、その後、このＭＩＤＩ−ＩＮ処理ルーチンからメインルーチンの割り込まれた位置に戻る。これにより、最大値ＴＯＰから最小値ＢＴＭへラウンドする循環バッファの機能が実現されている。
【００６３】
なお、図中には示されていないが、カウンタＣＴＲをインクリメントした結果がポインタＰＴＲの値を越えることとなる場合は受信バッファは満杯であるので、ＭＩＤＩデータの取り込み処理は抑止される。
【００６４】
（３）パネル制御処理（図５）
次に、メインルーチンのステップＳ１３で行われるパネル制御処理の詳細について、図５のフローチャートを参照しながら説明する。
【００６５】
このパネル制御処理ルーチンは、メインルーチンでパネルスイッチ等のイベントがあったことが判断された場合にコールされる。パネル制御処理では、先ず、インクリメンタ１３３のイベントがあるかどうかが調べられる（ステップＳ３０）。即ち、新旧両パネルデータ中のインクリメンタデータが比較され、これらが相違する場合にインクリメンタ１３３のイベントがあったことが判断される。このステップＳ３０でインクリメンタ１３３のイベントがあったことが判断されるとテンポスピード処理が行われ（ステップＳ３１）、そうでなければテンポスピード処理はスキップされる。テンポスピード処理では、新パネルデータ中のインクリメンタデータがタイマ１６にセットされると共に、テンポスピード表示器１３２に送られる。これによりタイマ１６から発生される割込信号の間隔が変更されて自動演奏のテンポスピードが変更される。また、変更後のテンポスピードがテンポスピード表示器１３２に表示される。
【００６６】
次いで、ストップスイッチ１３４のイベントがあるかどうかが調べられる（ステップＳ３２）。これは、パネルイベントマップ中のストップスイッチ１３４に対応するビットが「１」であるかどうかを調べることにより行われる。ここでストップスイッチ１３４のイベントがあることが判断されるとストップ処理が行われ（ステップＳ３３）、そうでなければストップ処理はスキップされる。ストップ処理では、ＲＡＭ１２に定義されている自動演奏フラグが「０」にクリアされる。これにより、後述するタイマ割込処理（図１２）において小節レジスタＢＲＲ及び拍レジスタＢＴＲの更新が抑止されて自動演奏の進行が停止され、各パートの発音が停止される。
【００６７】
次いで、プレイ／ポーズスイッチ１３５のイベントがあるかどうかが調べられる（ステップＳ３４）。これは、パネルイベントマップ中のプレイ／ポーズスイッチ１３５に対応するビットが「１」であるかどうかを調べることにより行われる。ここでプレイ／ポーズスイッチ１３５のイベントがあることが判断されるとプレイ処理が行われ（ステップＳ３５）、そうでなければプレイ処理はスキップされる。プレイ処理では、上記自動演奏フラグが「０」、つまり自動演奏停止中にプレイ／ポーズスイッチ１３５が押されたことが判断されると自動演奏フラグが「１」にセットされると共に、ＬＥＤ表示器１４３が点灯される。これにより、後述するタイマ割込処理（図１２）において小節レジスタＢＲＲ及び拍レジスタＢＴＲの更新が開始され、自動演奏が進行される。逆に、自動演奏フラグが「１」、つまり自動演奏中にプレイ／ポーズスイッチ１３５が押されたことが判断されると自動演奏フラグが「０」にクリアされると共に、ＬＥＤ表示器１４３が消灯される。これにより、上記ストップスイッチ１３４が押された時と同様の処理が行われて各パートの発音が停止される。
【００６８】
次いで、ＦＦスイッチ１３６のイベントがあるかどうかが調べられる（ステップＳ３６）。これは、パネルイベントマップ中のＦＦスイッチ１３６に対応するビットが「１」であるかどうかを調べることにより行われる。ここでＦＦスイッチ１３６のイベントがあることが判断されるとＦＦ処理が行われ（ステップＳ３７）、そうでなければＦＦ処理はスキップされる。ＦＦ処理では、ＲＡＭ１２に定義されたＦＦフラグが「０」、つまり通常再生中にＦＦスイッチ１３６が押されたことが判断されるとＦＦフラグが「１」にセットされ、タイマ１６に所定のデータがセットされると共に、ＬＥＤ表示器１４４が点灯される。これにより、テンポスピードが早くなって高速再生が行われる。逆に、ＦＦフラグが「１」、つまり高速再生中にＦＦスイッチ１３６が押されたことが判断されるとＦＦフラグが「０」にクリアされ、タイマ１６に元のデータがリストアされると共に、ＬＥＤ表示器１４４が消灯される。これにより、ＦＦスイッチ１３６が押される前のテンポスピードに戻る。
【００６９】
次いで、ＲＥＷスイッチ１３７のイベントがあるかどうかが調べられる（ステップＳ３８）。これは、パネルイベントマップ中のＲＥＷスイッチ１３７に対応するビットが「１」であるかどうかを調べることにより行われる。ここでＲＥＷスイッチ１３７のイベントがあることが判断されるとＲＥＷ処理が行われ（ステップＳ３９）、そうでなければＲＥＷ処理はスキップされる。ＲＥＷ処理では、ＲＡＭ１２に定義されたＲＥＷフラグが「０」、つまり通常再生中にＲＥＷスイッチ１３７が押されたことが判断されるとＲＥＷフラグが「１」にセットされ、ＲＡＭ１２に定義された小節レジスタＢＲＲ及び拍レジスタＢＴＲが所定の速度でデクリメントされ、その結果が小節／拍表示器１３０に送られると共に、ＬＥＤ表示器１４５が点灯される。これにより、小節／拍表示器１３０の表示がデクリメントされながら自動演奏のシーケンスが後退する。なお、このＲＥＷ処理中には発音は停止される。逆に、ＦＦフラグが「１」、つまり高速再生中にＲＥＷスイッチ１３７が押されたことが判断されるとＲＥＷフラグが「０」にクリアされ、ＬＥＤ表示器１４５が消灯される。これにより、減少された小節レジスタＢＲＲ及び拍レジスタＢＴＲの位置から自動演奏が再開される。
【００７０】
次いで、リピートスイッチ１３８のイベントがあるかどうかが調べられる（ステップＳ４０）。これは、パネルイベントマップ中のリピートスイッチ１３８に対応するビットが「１」であるかどうかを調べることにより行われる。ここでリピートスイッチ１３８のイベントがあることが判断されるとリピート処理が行われ（ステップＳ４１）、そうでなければリピート処理はスキップされる。リピート処理では、ＲＡＭ１２に定義されたリピートフラグが「０」であればリピートフラグが「１」にセットされると共に、ＬＥＤ表示器１４６が点灯される。逆に、リピートフラグが「１」であればリピートフラグが「０」にクリアされ、ＬＥＤ表示器１４５が消灯される。これにより、詳細は図示されていないが、１曲分のパターンデータの読み出しが終了した場合に、リピートフラグが「１」であれば自動演奏のシーケンスは曲の先頭に戻り、同じ自動演奏が繰り返し実行される。一方、リピートフラグが「０」であれば自動演奏は停止される。
【００７１】
次いで、パートスイッチ１３９〜１４２のイベントであるかどうかが調べられる（ステップＳ４２）。これは、パネルイベントマップ中のパートスイッチ１３９〜１４２に対応するビットが「１」であるかどうかを調べることにより行われる。ここでパートスイッチ１３９〜１４２のイベントがあることが判断されるとパート１〜４切換処理が行われ（ステップＳ４３）、そうでなければパート１〜４切換処理はスキップされる。その後、このパネル制御処理ルーチンからリターンしてメインルーチンに戻る。上記パート１〜４切換処理の詳細については後述する。
【００７２】
（４）ＭＩＤＩ−ＩＮ処理（図６及び図７）
このＭＩＤＩ−ＩＮ処理ルーチンはメインルーチンから一定周期でコールされる。ＭＩＤＩ−ＩＮ処理では、先ず、受信バッファから１つのＭＩＤＩメッセージが取り出され、それに含まれるＭＩＤＩチャンネル番号が「１」、つまりロワー鍵のデータであるかどうかが調べられる（ステップＳ５０）。これは、ＭＩＤＩメッセージの第１バイト目の下位４ビットにあるチャンネル番号を調べることにより行われる。ここで、チャンネル番号が「１」でないことが判断されるとステップＳ６７へ分岐し、ＭＩＤＩデータに基づく発音処理が行われる。一方、チャンネル番号が「１」、つまりロワー鍵のデータである旨が判断されるとキービットマップが作成される（ステップＳ５１）。キービットマップは、全鍵のオン又はオフ状態をそれぞれ「１」又は「０」に対応させて成るデータである。
【００７３】
次いで、コード検出処理が行われる（ステップＳ５２）。即ち、上記で作成されたキービットマップを使用してコード検出処理が行われ、コードタイプ及びコードルートが検出される。このコード検出は周知の種々の方法を用いて行うことができる。ここで検出されたコードは、新コードとしてＲＡＭ１２の新コード領域に格納される。また、ここで検出されたコードタイプ及びコードルートはコード表示器１３１に送られて表示される。
【００７４】
次いで、コード変化があったかどうかが調べられる（ステップＳ５３）。これは、前回のコード検出処理で検出されてＲＡＭ１２の旧コード領域に格納されている旧コードと上記新コードとを比較することにより行われる。そして、コードの変化がなかったことが判断されると、このＭＩＤＩ−ＩＮ処理ルーチンからリターンしてメインルーチンに戻る。即ち、コードタイプ及びコードルートが変化しないようなＭＩＤＩメッセージが入力されても自動演奏状態は変化しない。一方、コードの変化があったことが判断されると、ステップＳ５４以下のコード変化に対応する処理が行われる。
【００７５】
本実施の形態の自動演奏装置は、コード変化があった場合に、単にコード構成音が変化するだけでなく、演奏パターンも変化するという構成を有するものとする。例えばメジャーのコードとマイナーのコードとでは演奏パターンが異なる。検出されたコードに応じて演奏パターンを変化させる機能を実現するために、コードタイプ毎のパターンデータ、例えばメジャーコードのパターンデータとマイナーコードのパターンデータは常時ＲＡＭ１２から読み出されており、何れのパターンデータを用いるかは、検出されたコードタイプにより決定される。
【００７６】
コードが変化した時の発音処理の動作の概要を図１７に示す。図１７においては、時刻ＴＡでＣメジャーからＣマイナーにコードが変化した場合を示しており、太線で囲まれた部分はパターンデータの読み出しが行われることを示し、その中の斜線部は読み出されたパターンデータに基づいて発音が行われることを示している。
【００７７】
時刻ＴＡ以前では、Ｃメジャーを構成する音（キー１、２、３）がメジャーの演奏パターンで発音されており、Ｃマイナーを構成する音（キー１、４、５）はマイナーの演奏パターンでパターンデータが読み出されているだけである。そして、時刻ＴＡで新たなコードであるＣマイナーが検出されると、それ以後はＣマイナーを構成する音（キー１、４、５）がマイナーの演奏パターンで発音される。なお、図１７は、時刻ＴＡでは、それまで押されていたキー２及びキー３が離され、新たにキー４及びキー５が押され、それまで押されていたキー１は引き続き押されている状態を示している。
【００７８】
時刻ＴＡ直後の一定時間ＴＲにおいては次のように処理される。即ち、コード変化が検出されれば、発音中の音は直ちに停止される（図１７のキー１及びキー２参照）。コード変化後のコード構成音のうち、コード変化が検出されてから一定時間ＴＲ内に発音を終了する音であっても、前のコードで発音されているものは発音が継続される（図１７のキー１参照）。コード変化が検出されてから一定時間ＴＲ内に発音を終了する音であって、前のコードで発音されていないものは新たな発音が開始されない（図１７のキー４参照）。コード変化が検出されてから一定時間ＴＲ内に発音を終了しない音であれば、新たに発音が開始される（図１７のキー５参照）。
【００７９】
かかる処理が行われることにより、例えば図１７のキー４のように、コード変化に応じて発音すべき音であるが短時間で発音が停止されるものには発音が割り当てられない。このように、短時間で消滅する音に発音を割り当てなくても聴感上全く問題はなく、一方、ＣＰＵ１０がチャンネル割り当て処理に要する時間が節約されてＣＰＵ１０の負担が軽減されるという利点がある。
【００８０】
図６の説明に戻る。ステップＳ５４以下のコード変化に対する処理において、上述した機能が実現されている。先ず、パート番号が「ｎ＝２」に初期設定される（ステップＳ５４）。これは、パート１はリズムパートでありコード変化とは無関係であるので、パート２〜４に対してのみ処理を行うためのパート番号の初期化である。
【００８１】
次いで、パートｎの新パターンのキーコードが生成される（ステップＳ５５）。即ち、ステップＳ５２で検出されたコードタイプ及びコードルートからコード構成音のキーコード（以下、「新キーコード」という。）が生成される。図１７に示した例でいえば、キー１、キー４及びキー５に対応した３つの新キーコードが生成される。次いで、パートｎの新パターンの残存ゲートタイムが生成される（ステップＳ５６）。残存ゲートタイムは、新パターンのパターンデータに含まれるステップタイムとゲートタイムとから算出される発音の終了時刻と現在の拍レジスタＢＴＲの内容とから算出される。
【００８２】
次いで、パートｎの新パターンの補正ベロシティの生成が行われる（ステップＳ５７）。この補正ベロシティ生成の詳細については、図８のフローチャートに示されている。補正ベロシティ生成処理では、先ず、補正レートＶＡｎの読み出しが行われる（ステップＳ７０）。即ち、小節レジスタＢＲＲと拍レジスタＢＴＲとの内容をアドレスとしてＲＡＭ１２のベロシティ補正データ中の対応する位置から補正レートＶＡｎが読み出される。次いで、この読み出された補正レートＶＡｎとその時点のベロシティＶＥＬＯ（パターンデータ中のベロシティデータ）とが乗算され、補正ベロシティＶＬＡｎが生成される（ステップＳ７１）。
【００８３】
次いで、上記乗算の結果が１２７より大きいかどうかが調べられ（ステップＳ７２）、１２７より大きければ１２７が新しい補正ベロシティＶＬＡｎとされ（ステップＳ７３）、そうでなければステップＳ７３はスキップされて乗算結果がそのまま新しい補正ベロシティＶＬＡｎとされる。その後、この補正ベロシティ生成ルーチンからリターンしてＭＩＤＩ−ＩＮ処理ルーチンに戻る。以上説明したＭＩＤＩ−ＩＮ処理ルーチンのステップＳ５５〜５７の処理により、新たなパターンのコード構成音（図１７に示した例でいえば、キー１、キー４及びキー５のそれぞれ）に対応するキーコード、残存ゲートタイム及び補正ベロシティの作成が完了する。
【００８４】
次いで、レジスタ群ｎの比較処理及び発音継続／消音処理が行われる（ステップＳ５８、Ｓ５９）。即ち、レジスタ群ｎにキーオン状態で格納されているキーコードと新キーコードとが比較され、レジスタ群ｎ中に一致するキーコードが発見されれば、そのキーコードに対しては何等の処理も行われない。従って、発音が継続されることになる。これは、図１７のキー１のケースに対応する処理である。一方、上記の比較において、コード検出前のコード構成音であったがコード検出後にコード構成音でなくなったキーコードに対しては、レジスタ群ｎ中の対応するキーコードのオン／オフビットが「０」にクリアされ、キーオフ出力が行われる。ここに、「キーオフ出力」とは、楽音発生器１４に所定のデータを送出し、現在のエンベロープよりも格段に高速なリリースエンベロープに置き換えて発音を終了させる一連の処理をいい、以下においても同じである。これは、図１７のキー２及びキー３のケースに対応する処理である。
【００８５】
次いで、新規発生キーコードであるかどうかが調べられる（ステップＳ６０）。即ち、新キーコードは、コード検出前のコード構成音でなくコード検出後に新たにコード構成音となったキーコードであるかどうかが調べられる。ここで、新規発生キーコードであることが判断されると、そのキーコードに対応する残存ゲートタイムは所定値ＴＲ以上であるかどうかが調べられる（ステップＳ６１）。そして、所定値ＴＲ以上であることが判断されると、レジスタ群ｎへの格納処理が行われる（ステップＳ６２）。即ち、オン／オフビットが「１」にセットされた新規発生キーコード、残存ゲートタイム及び補正ベロシティがレジスタ群ｎの中の１つのブロックに格納される。この際、格納に使用されるブロックは、オン／オフビットが「０」になっているブロックである。次いで、キーオン出力が行われる（ステップＳ６３）。ここに、「キーオン出力」とは、楽音発生器１４に所定のデータ（キーコード、ベロシティ等）を送出し、発音を開始させる一連の処理をいい、以下においても同じである。この際、ベロシティとして補正ベロシティが出力されるので、補正後のベロシティでそのキーコードに対応する発音が行われる。これは、図１７のキー５のケースに対応する処理である。その後、ステップＳ６５に進む。
【００８６】
一方、上記ステップＳ６０で新規発生キーコードでないことが判断された場合は、既に発音しているキーコードであるので何等の処理も行わずにステップＳ６５に分岐する。これは、図１７のキー１のケースに対応する処理である。また、上記ステップＳ６１で、残存ゲートタイムは所定値ＴＲ以上でないことが判断されると、残存ゲートタイムとして「１」が設定される（ステップＳ６４）。これにより、次回にタイマ割込が発生した際に、後述するタイマ割込処理ルーチンで残存ゲートタイムがデクリメントされてゼロになると共に、キーオフ出力が行われて発音中の音は消音される。これは、図１７のキー４のケースに対応する処理である。その後、ステップＳ６５に進む。
【００８７】
ステップＳ６５ではパート番号ｎがインクリメントされ、その結果が５以上になったかどうか、つまりパート４までの処理が完了したかどうかが調べられる（ステップＳ６６）。そして、５以上でないことが判断されたならステップＳ５５に戻り、再度上述したと同様の処理が繰り返される。一方、５以上であることが判断されると、つまりパート４までの処理が完了したことが判断されると、このＭＩＤＩ−ＩＮ処理ルーチンからリターンしてメインルーチンに戻る。
【００８８】
（５）パート１〜４読出処理（図９及び図１０）
パート１〜４読出処理は、メインルーチンから周期的にコールされる。このパート１〜４読出処理では、先ず、パート番号が「ｎ＝１」に初期化される（ステップＳ８０）。即ち、このパート１〜４読出処理では、各パート１〜４に対応するパターンデータの読出処理が行われることになる。次いで、ステップ補正値ＳＡｎの読み出しが行われる（ステップＳ８１）。即ち、小節レジスタＢＲＲと拍レジスタＢＴＲとの内容をアドレスとしてＲＡＭ１２のステップタイム補正データ中から対応する補正データＳＡｎが読み出される。なお、ステップタイム補正データは４分音符単位で格納されているので、上記のアドレスとしては小節／拍表示器１３０に表示される値と同じ値が用いられ、拍レジスタＢＴＲの内容の下位の所定ビットは無視される。
【００８９】
次いで、拍レジスタＢＴＲの内容に補正データＳＡｎが加算されてパートｎ用拍レジスタＢＴＲｎに格納される（ステップＳ８２）。次いで、上記加算の結果（パートｎ用拍レジスタＢＴＲｎの内容）が「０」より小さいかどうかが調べられる（ステップＳ８３）。ここで、「０」より小さいことが判断されるとパートｎ用拍レジスタＢＴＲｎの内容に「１９２」が加えられてパートｎ用拍レジスタＢＴＲｎに格納され（ステップＳ８４）、次いで、小節レジスタＢＲＲの内容がデクリメントされてパートｎ用小節レジスタＢＲＲｎに格納される（ステップＳ８５）。上記ステップＳ８４及びＳ８５の処理により、パートｎのステップタイム補正により得られた拍レジスタＢＴＲの内容が正になるように変換されている。その後、ステップＳ９０へ分岐する。
【００９０】
上記ステップＳ８３で加算結果が「０」より小さくないことが判断されると、上記加算の結果（パートｎ用拍レジスタＢＴＲｎの内容）が「１９２」以上かどうかが調べられる（ステップＳ８６）。ここで、「１９２」以上であることが判断されるとパートｎ用拍レジスタＢＴＲｎの内容から「１９２」が減算されてパートｎ用拍レジスタＢＴＲｎに格納され（ステップＳ８７）、次いで、小節レジスタＢＲＲの内容がインクリメントされてパートｎ用小節レジスタＢＲＲｎに格納される（ステップＳ８８）。上記ステップＳ８７及びＳ８８の処理により、パートｎのステップタイム補正により拍レジスタＢＴＲの内容が１小節分（１９２ステップ）を越えた場合に、１小節の範囲内となるように変換されている。その後、ステップＳ９０へ分岐する。
【００９１】
上記ステップＳ８３で加算結果が「１９２」以上でない、つまり「０≦パートｎ用拍レジスタＢＴＲｎの内容＜１９２」であることが判断されると、小節レジスタＢＲＲの内容がパートｎ用小節レジスタＢＲＲｎに格納される（ステップＳ８９）。この場合、パートｎ用拍レジスタＢＴＲｎの内容は、ステップＳ８２でセットしたものがそのまま用いられる。その後、ステップＳ９０に進む。
【００９２】
以上の処理でステップタイム補正が完了すると、次いで、パートｎのパターンデータ中から未発音のデータが検索される（ステップＳ９０）。即ち、パートｎ用小節レジスタＢＲＲｎの内容で示される小節に含まれるパターンデータの中で、ステップタイムがパートｎ用拍レジスタＢＴＲｎの内容よりも小さいか又は同一のものが検索される。次いで、検索されたパターンデータ中のキーコード（ＫＣＯＤ）、ゲートタイム（ＧＴＩＭ）及びベロシティ（ＶＥＬＯ）が読み出される（ステップＳ９１）。
【００９３】
次いで、パートｎの補正ベロシティが生成される（ステップＳ９２）。この処理は、図８を参照して既に説明したものと同じである。次いで、パートｎに対応するレジスタ群ｎの更新が行われる（ステップＳ９３）。即ち、キーコード（ＫＣＯＤ）、ゲートタイム（ＧＴＩＭ）及び補正ベロシティ（ＶＬＡｎ）がレジスタ群ｎの中の１つに格納される。
【００９４】
次いで、当該パートｎがオン、つまりパートｎに対応するパートスイッチ１３９〜１４２の何れかが押されているかどうかが調べられ（ステップＳ９４）、押されていることが判断されると、キーオン出力が行われる（ステップＳ９５）。これにより、ステップタイム及びベロシティが補正された発音が行われることになる。一方、パートスイッチが押されていないことが判断されると、ステップＳ９５はスキップされる。従って、この場合は、パターンデータの読み出しのみが行われることになる。
【００９５】
次いで、パート番号ｎがインクリメントされ（ステップＳ９６）、その結果が５以上でなければステップＳ８１に戻って次のパートに対する読出処理が行われ、５以上であれば全パートに対する処理が終了したことを認識してこのパート１〜４読出処理ルーチンからリターンしてメインルーチンに戻る。
【００９６】
（６）パート１〜４切換処理（図１１）
次に、パネル制御処理ルーチンのステップＳ４３で行われるパートの切換処理について説明する。このパート切換処理は、パートスイッチ１３９〜１４２が押された時に、当該パートの発音を開始し又は停止する処理である。本実施の形態の自動演奏装置では、既に説明したように、パート１〜４のパターンデータは常に読み出されており、読み出されたパターンデータに基づいて発音が行われるかどうかは、パートスイッチ１３９〜１４２がオンにされているかどうかによって決定される。
【００９７】
パートスイッチがオンに変化した時の動作の概要を図１８に示す。図１８においては、時刻ＴＢでパートスイッチｎがオンに変化した場合の動作状態を示しており、太線で囲まれ部分はパターンデータの読み出しが行われることを、その中の斜線部は読み出されたパターンデータに基づいて発音が行われることをそれぞれ示している。
【００９８】
図１８の例では、パートスイッチｎがオンにされた時に、キー１及びキー２はオフ状態であるため発音されない。キー３及びキー４はオン状態であるが、キー３については、パートスイッチｎのオン変化が検出されてから一定時間ＴＲ内に発音が終了するので、換言すれば、残存ゲートタイムが所定時間ＴＲ未満であるので発音は行われない。キー４については残存ゲートタイムが所定時間ＴＲ以上であるので発音が開始される。
【００９９】
このような処理を行うことにより、例えば図１８のキー３のように、パートスイッチｎのオン変化に応じて発音すべき音であるが短時間で発音が終了するものは発音が開始されない。かかる短時間で消滅する音に発音を割り当てなくても聴感上全く問題はなく、一方、ＣＰＵ１０がチャンネル割り当て処理に要する時間が節約されてＣＰＵ１０の負担が軽減されるという利点がある。
【０１００】
以上の機能を実現するために、パート切換処理では、先ず、パート番号が「ｎ＝１」に初期化される（ステップＳ１００）。次いで、パートｎのパートスイッチのイベントがあったかどうかが調べられる（ステップＳ１０１）。これは、パネルイベントマップ中のパートｎのパートスイッチ１３９〜１４２に対応するビットが「１」であるかどうかを調べることにより行われる。ここでイベントがないことが判断されるとステップＳ１０８へ分岐する。一方、パートｎのパートスイッチのイベントがあったことが判断されると、次いで、そのイベントはオンイベントであるかどうかが調べられる（ステップＳ１０２）。これは、新パネルデータ中のパートｎのパートスイッチ１３９〜１４２に対応するビットが「１」であるかどうかを調べることにより行われる。
【０１０１】
ここでオンイベントであることが判断されると、レジスタ群ｎの残存ゲートタイムの読み出しが行われる（ステップＳ１０３）。即ち、レジスタ群ｎにキーオン状態で格納されているキーコードの残存ゲートタイムが読み出される。この際、補正ベロシティも読み出される。次いで、残存ゲートタイムが所定時間ＴＲ以上であるかどうかが調べられ（ステップＳ１０４）、所定時間以上であることが判断されると、キーオン出力が行われる（ステップＳ１０５）。この際、補正ベロシティも出力される。これにより、パートｎのパターンデータに基づく発音が開始される。これは、図１８のキー４のケースに対応する処理である。
【０１０２】
一方、残存ゲートタイムが所定時間ＴＲ以上でないことが判断されると、そのキーコードの残存ゲートタイムが「０」に設定される（ステップＳ１０６）。これにより、発音は開始されない。このステップＳ１０４〜Ｓ１０６の処理により、残存ゲートタイムが所定値ＴＲ以上であれば発音が行われ、所定値ＴＲより小さければ発音が抑止されるという機能が実現されている。
【０１０３】
上記イベント１０２でオフイベントであることが判断されると、パートｎに対するキーオフ出力が行われる（ステップＳ１０７）。即ち、レジスタ群ｎにキーオン状態で格納されている全てのキーコードに対してキーオフ出力が行われる。これにより、パートｎの発音が停止される。その後ステップＳ１０８へ分岐する。
【０１０４】
ステップＳ１０８では、パート番号ｎがインクリメントされ、その結果が５以上でなければステップＳ１０１に戻って次のパートに対する切換処理が行われ、５以上であれば全パートに対する処理が終了したことを認識してこのパート１〜４切換処理ルーチンからリターンしてメインルーチンに戻る。
【０１０５】
（７）タイマ割込処理（図１２）
次にタイマ割込処理ルーチンについて説明する。このタイマ割込処理ルーチンは、タイマ１６から割込信号がＣＰＵ１０の割込信号入力端子ＩＮＴ２に供給されることにより起動される。従って、その時点で設定されているテンポにおける１ステップタイムに対応する時間間隔でこのタイマ割込処理ルーチンが起動されることになる。
【０１０６】
タイマ割込処理では、先ず、自動演奏フラグがオンになっているかどうかが調べられる（ステップＳ１１０）。即ち、本自動演奏装置が自動演奏状態にあるかどうかが調べられる。ここで自動演奏フラグがオンであることが判断されると、拍レジスタＢＴＲの内容がインクリメントされ（ステップＳ１１１）、その結果が「１９２」以上になったかどうかが調べられる（ステップＳ１１２）。そして、「１９２」以上になったことが判断されると、拍レジスタＢＴＲがゼロにクリアされ（ステップＳ１１３）、小節レジスタＢＲＲがインクリメントされる（ステップＳ１１４）。上記ステップＳ１１２で「１９２」以上でないことが判断されると、ステップＳ１１３及びＳ１１４の処理はスキップされる。上記ステップＳ１１１〜Ｓ１１４の処理により、１ステップタイム毎に小節レジスタＢＲＲと拍レジスタＢＴＲとが連結された状態でインクリメントされる機能が実現されている。
【０１０７】
次いで、全パートのゲートタイムの更新が行われる（ステップＳ１１５）。即ち、全パートのレジスタ群に含まれる残存ゲートタイムが「０」以外のものはデクリメントされる。そして、このデクリメントの結果、新たにゼロになった残存ゲートタイムがあれば、その残存ゲートタイムに対応するキーコードに対してキーオフ出力が行われ発音が停止される。
【０１０８】
上記ステップＳ１１０で自動演奏フラグがオンでないことが判断されると、自動演奏中でないことが認識され、全パートのゲートタイムの更新のみが行われる。その後、このタイマ割込処理ルーチンからリターンして割り込まれた位置に戻る。
【０１０９】
以上説明したように、本実施の形態においては、正規化されたパターンデータを数小節程度（例えば２小節）だけＲＡＭ１２に記憶しておく。一方、このパターンデータとは別に、全小節分の揺らぎデータ、即ちステップタイム補正データ及びベロシティ補正データをＲＡＭ１２に記憶しておく。このステップタイム補正データ及びベロシティ補正データは、例えば、上記正規化されたパターンデータに基づく演奏パターンと実際に演奏者が演奏した演奏パターンとの差分から作成することができる。
【０１１０】
そして、小節レジスタＢＲＲ及び拍レジスタＢＴＲの内容に応じてＲＡＭ１２から正規化されたパターンデータを読み出すと共に、ステップタイム補正データ及びベロシティ補正データを読み出し、正規化されたパターンデータをステップタイム補正データ及びベロシティ補正データを用いて補正し、この補正されたパターンデータに基づき発音するようにしている。
【０１１１】
かかる構成により正規化されたパターンデータのみに基づく発音に見られるような機械的な演奏パターンというイメージが払拭でき、しかもステップタイム補正データ及びベロシティ補正データとして、例えば、上記正規化されたパターンデータに基づく演奏パターンと実際に演奏者が演奏した演奏パターンとの差分データを用いれば、人間の感情の周期にマッチした自動演奏パターンを実現することができる。上記ステップタイム補正データ及びベロシティ補正データを、特定の音楽家が演奏した演奏パターンとの差分データで作成すれば、「誰それ風の演奏」という自動演奏パターンを得ることができる。
【０１１２】
また、従来のように、人間の感情の周期にマッチした自動演奏パターンを実現するにあたり１曲の全小節分のパターンデータを作成する必要がないので、少ない容量で例えばノリの良い自動演奏パターンを実現できるという効果がある。
【０１１３】
なお、上記においては、揺らぎのパラメータとして「ステップタイム」と「ベロシティ」を採り上げて説明したが、「ゲートタイム」に関しても上述したと同様の処理を行うことにより、上記同様の効果を得ることができる。
【０１１４】
更に、図３の「その他の処理」（ステップＳ１７）において、「テンポスピード」の揺らぎを再生処理すれば、より生きた自動演奏を実現することができる。この際、テンポスピード補正データは、図１５及び図１６の各補正データと同様に、多くの小節数に関して予め記憶されており、選択された曲又はリズムスタイルによって切換られる。
【０１１５】
また、本実施の形態においては、全パートのパターンデータを小節レジスタＢＲＲ及び拍レジスタＢＴＲの内容に従って順次読み出し、これから演奏データ（キーコード、残存ゲートタイム及びベロシティ）を作成してＲＡＭ１２のレジスタ群ｎに記憶する。このレジスタ群ｎに記憶された演奏データのうち、パートスイッチで指示されたパートに対応する演奏データのみが発音される。このレジスタ群ｎの内容は、発音の有無とは独立に自動演奏の進行に応じてタイマ割込処理により更新される。
【０１１６】
自動演奏の途中で新たなパートの発音指示がなされた場合は、レジスタ群ｎにキーオン状態で記憶されている演奏データが既に発音開始タイミングを過ぎていても、未だ消音タイミングに至らない音については途中からであっても発音を開始する。これにより、演奏者のパートスイッチ１３９〜１４２による指示タイミングが多少ずれる（遅れる）ことにより、本来発音されるべき音が発音されないという事態を回避できるので、演奏者の意図したタイミングで特定パートの自動演奏を完全な形で開始させることができる。
【０１１７】
また、パートスイッチ１３９〜１４２で所定のパートをオフにすべきことが指示された場合は、そのパートスイッチ１３９〜１４２に対応するパートで発音中の音は全て速やかに発音を中止される。これは、例えば、長いサスティンがかかっている音色やピアノ音でダンパーオンされているような場合でも、それらのエンベロープよりも格段に高速なリリースエンベロープに置き換えて発音を終了させることにより実現される。
【０１１８】
このように、特定パートの自動演奏を演奏者の所望のタイミングで開始させ又は終了させることができるということは、パターンデータに基づく発音又は消音のタイミングよりも細かいタイミングで、特定パートの自動演奏を行わせたり停止したりすることができることを意味し、新たな演奏形態が可能になるという効果がある。
【０１１９】
また、新たなパートの発音指示がなされた場合に、未だ消音タイミングに至っていないが、残りの発音時間（残存ゲートタイム）が所定値ＴＲより小さければ発音を行わず、所定値以上の場合にのみ発音を行うようにしている。
【０１２０】
これにより、発音されてもすぐに消音されてしまうような、聴感には何等の影響を与えない音に対しては、最初から発音されないので、ＣＰＵの負荷が軽減される。従って、ＣＰＵは他の処理を実行することが可能となるので、より効率の良い自動演奏装置を実現できる。
【０１２１】
【発明の効果】
以上詳述したように、本発明によれば、少ないメモリ容量で簡単に人間の感情の周期にマッチした自動演奏パターンを実現することのできる自動演奏装置を提供することができる。また、自動演奏の途中からでも特定パートの再生又は停止を行わせることのできる自動演奏装置を提供することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態の自動演奏装置の構成を示すブロック図である。
【図２】本発明の実施の形態に使用される操作パネルの一例を示す図である。
【図３】本発明の実施の形態の動作を示すフローチャート（メインルーチン）である。
【図４】本発明の実施の形態の動作を示すフローチャート（ＭＩＤＩ−ＩＮ割込処理ルーチン）である。
【図５】本発明の実施の形態の動作を示すフローチャート（パネル制御処理ルーチン）である。
【図６】本発明の実施の形態の動作を示すフローチャート（ＭＩＤＩ−ＩＮ処理ルーチン（その１））である。
【図７】本発明の実施の形態の動作を示すフローチャート（ＭＩＤＩ−ＩＮ処理ルーチン（その２））である。
【図８】本発明の実施の形態の動作を示すフローチャート（補正ベロシティ生成ルーチン）である。
【図９】本発明の実施の形態の動作を示すフローチャート（パート１〜４読出処理ルーチン（その１））である。
【図１０】本発明の実施の形態の動作を示すフローチャート（パート１〜４読出処理ルーチン（その２））である。
【図１１】本発明の実施の形態の動作を示すフローチャート（パート１〜４切換処理ルーチン）である。
【図１２】本発明の実施の形態の動作を示すフローチャート（タイマ割込処理ルーチン）である。
【図１３】本発明の実施の形態で使用する受信バッファの構成を示す図である。
【図１４】（Ａ）は本発明の実施の形態で使用するレジスタ群ｎの構成を示す図、（Ｂ）は本発明の実施の形態で使用するパターンデータの構成を示す図である。
【図１５】本発明の実施の形態で使用するステップタイム補正データを説明するための図である。
【図１６】本発明の実施の形態で使用するベロシティ補正データを説明するための図である。
【図１７】本発明の実施の形態においてコードが変化した時の発音処理の動作を説明するための図である。
【図１８】本発明の実施の形態においてパートスイッチがオン変化した時の発音処理の動作を説明するための図である。
【符号の説明】
１０    ＣＰＵ
１１    ＲＯＭ
１２    ＲＡＭ
１３    操作パネル
１４    楽音発生器
１５    スピーカシステム
１６    タイマ
１７    ＭＩＤＩコントローラ
１８    ＦＤコントローラ
１９    フロッピーディスクドライブ装置
３０    システムバス
１３０    小節／拍表示器
１３１    コード表示器
１３２    テンポスピード表示器
１３３    インクリメンタ
１３４    ストップスイッチ
１３５    プレイ／ポーズスイッチ
１３６    ＦＦスイッチ
１３７    ＲＥＷスイッチ
１３８    リピートスイッチ
１３９    パート１スイッチ
１４０    パート２スイッチ
１４１    パート３スイッチ
１４２    パート４スイッチ
１４３〜１５０  ＬＥＤ表示器
【図１】
0003609045.tif 000002
【図２】
0003609045.tif 000003
【図３】
0003609045.tif 000004
【図４】
0003609045.tif 000005
【図５】
0003609045.tif 000006
【図６】
0003609045.tif 000007
【図７】
0003609045.tif 000008
【図８】
0003609045.tif 000009
【図９】
0003609045.tif 000010
【図１０】
0003609045.tif 000011
【図１１】
0003609045.tif 000012
【図１２】
0003609045.tif 000013
【図１３】
0003609045.tif 000014
【図１４】
0003609045.tif 000015
【図１５】
0003609045.tif 000016
【図１６】
0003609045.tif 000017
【図１７】
0003609045.tif 000018
【図１８】
0003609045.tif 000019