(57)【特許請求の範囲】
【請求項１】
操作者の操作によりトリガー信号を発生するトリガー信号発生手段と、
前記トリガー信号でコントロールするパートと前記トリガー信号でコントロールしないパートとを有する複数のパート分の自動演奏データを記憶する記憶手段と、
前記トリガー信号でコントロールするパートの自動演奏データについて、前記トリガー信号が発生したときに所定の限られた自動演奏データ単位で読み出されるべき自動演奏データの読出し開始位置を楽曲の進行に従って移動させておく読出し開始位置移動手段と、
前記トリガー信号が発生したことに基づいて、前記トリガー信号でコントロールするパートについて、前記読出し開始位置移動手段で移動された読出し開始位置から前記所定の限られた自動演奏データを読み出すように制御する読出し制御手段と、
前記トリガー信号でコントロールしないパートの自動演奏データを楽曲の進行に従って順次読み出して楽音を発生すると共に、前記読出し制御手段によって前記トリガー信号でコントロールするパートの自動演奏データが読み出されたときは当該自動演奏データによる楽音を発生する自動演奏手段と、
ディスプレイと
を備え、
前記ディスプレイには、自動演奏の進行状況と併せて、トリガーをかけるべきタイミングを表示するようにした
ことを特徴とする自動演奏装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、あらかじめ記憶させておいた演奏データを順次読み出し、この演奏データに基づいて楽音を発生させて自動演奏を行う自動演奏装置に関する。
【０００２】
【従来の技術】
従来より、さまざまな自動演奏装置が開発されている。そのなかで、ある種の自動演奏装置においては、あらかじめ発生すべき楽音に基づく演奏データをあらかじめメモリ等に記憶しており、これらのデータをトリガーによって順次読み出して、楽音を発生するものがある。この際に、メモリに記憶されているデータの読み出アドレスは、トリガーがかかる毎に、１つずつ順次後方へ移動する。
【０００３】
ここでトリガーは、例えば、鍵盤の中の、ある特定のキーに割り当てておき、このキーが押下されることによって、発生するようになっている。また、楽音の発生する長さは、このキーが押下されている期間に等しくなっている。
【０００４】
これによって、演奏者は、正確な音高を指定しなくても、特定のキーを押下するだけで、演奏することが可能となる。このとき、テンポや各一音一音の発音長さは、演奏者の嗜好によって自由に調節される。
【０００５】
【発明が解決しようとする課題】
しかしながら、上述した従来の自動演奏装置にあっては、、一旦、トリガーをかけるタイミングを失うと、演奏が中断して完結しない、という問題とともに、曲の途中から演奏することができない、という問題があった。
【０００６】
また、演奏者が、音符の一つ一つの長さを覚えていない場合、すなわち、曲を知らない場合には、正確な演奏ができないという問題があった。
また、速いフレーズを演奏するときは、トリガーをタイミングよく速く発生させる必要がある。しかしながら、初心者や曲を知らない者にとっては演奏できず、楽しめないという問題がある。
さらに、従来の自動演奏装置にあっては、トリガーによる発音が、単音にしか対応していないため、和音を含むものやアルペジオ、レガート奏法を含むものなどは弾くことができない。
【０００７】
これらの問題を解決するためには、１回のトリガーの発生に対してフレーズ単位で自動演奏行うことが望ましい。複雑な奏法を用いるものはその奏法を含んだフレーズとして演奏データを用意することで解決する。そこでこの発明の目的とするところは、簡単な操作で、フレーズ単位の自動演奏を行うことができるとともに、演奏タイミングを逸しても、容易に演奏を再開することができ、曲の途中からでも演奏することが可能な自動演奏装置を提供することにある。
【０００８】
【課題を解決するための手段】
これらの課題を解決するために、この発明による自動演奏装置は、操作者の操作によりトリガー信号を発生するトリガー信号発生手段と、前記トリガー信号でコントロールするパートと前記トリガー信号でコントロールしないパートとを有する複数のパート分の自動演奏データを記憶する記憶手段と、前記トリガー信号でコントロールするパートの自動演奏データについて、前記トリガー信号が発生したときに所定の限られた自動演奏データ単位で読み出されるべき自動演奏データの読出し開始位置を楽曲の進行に従って移動させておく読出し開始位置移動手段と、前記トリガー信号が発生したことに基づいて、前記トリガー信号でコントロールするパートについて、前記読出し開始位置移動手段で移動された読出し開始位置から前記所定の限られた自動演奏データを読み出すように制御する読出し制御手段と、前記トリガー信号でコントロールしないパートの自動演奏データを楽曲の進行に従って順次読み出して楽音を発生すると共に、前記読出し制御手段によって前記トリガー信号でコントロールするパートの自動演奏データが読み出されたときは当該自動演奏データによる楽音を発生する自動演奏手段と、ディスプレイとを備え、前記ディスプレイには、自動演奏の進行状況と併せて、トリガーをかけるべきタイミングを表示するようにしたことを特徴としている。
【０００９】
〔発明の作用〕
この発明の構成について、理解の便のために、以下の実施態様で使用される記号、用語乃至箇所を括弧書きで付記して、この発明の作用を説明すると、次のとおりである。この発明による自動演奏装置においては、操作者の操作によりトリガー信号を発生するトリガー信号発生手段（１）と、トリガー信号でコントロールするパート（トリガー駆動専用トラック）とトリガー信号でコントロールしないパート（ノーマルトラック）とを有する複数のパート分の自動演奏データを記憶する記憶手段（ＲＯＭ５）と、トリガー信号でコントロールするパートの自動演奏データについて、トリガー信号が発生したときに所定の限られた自動演奏データ（フレーズ）単位で読み出されるべき自動演奏データの読出し開始位置を楽曲の進行に従って移動させておく（Ｓｔ７→Ｓｖ３→Ｓｖ７）読出し開始位置移動手段（Ｓｓ４，Ｓｍ５）と、トリガー信号が発生したことに基づいて、トリガー信号でコントロールするパートについて、読出し開始位置移動手段で移動された読出し開始位置から所定の限られた自動演奏データを読み出す（Ｓｖ１→Ｓｖ５→Ｓｕ１→Ｓｕ５）ように制御する読出し制御手段（Ｓｍ５→Ｓｓ５）と、トリガー信号でコントロールしないパートの自動演奏データを楽曲の進行に従って順次読み出して楽音を発生する（Ｓｓ３）と共に、読出し制御手段によってトリガー信号でコントロールするパートの自動演奏データが読み出されたときは当該自動演奏データによる楽音を発生する（Ｓｕ７）自動演奏手段（Ｓｓ３，Ｓｓ５）と、ディスプレイ（１１）とが備えられ、ディスプレイ（１１）には、自動演奏の進行状況と併せて、トリガーをかけるべきタイミングが表示される（段落［０１２１］）。従って、操作者は、トリガー信号でコントロールしないパートの演奏を聴きながら、初心者でも簡単に演奏を楽しむことができる。
【００１０】
〔種々の特徴〕
なお、この発明に備えられる種々の特徴により、以下の（１）〜（８）のように構成することができる：
（１）トリガーを発生するトリガー発生手段と、トリガーによって読み出すべきフレーズに対応した複数の識別データを記憶するフレーズ識別データ記憶手段と、前記識別データに対応したフレーズを複数記憶したフレーズ記憶手段と、自動演奏の開始を指示する指示手段と、前記指示手段の指示に応じて前記フレーズ識別データ記憶手段の読出しに必要なアドレスの進行を開始し、時間の経過によって該アドレスの進行を制御する制御手段とを備え、前記トリガー発生手段によって発生したトリガーの発生したタイミングで、前記アドレスに応じてフレーズ識別データ記憶手段からフレーズ識別データを読出し、該フレーズ識別データに対応するフレーズを自動演奏することを特徴とする自動演奏装置。
【００１１】
（２）自動演奏装置（１）において、前記フレーズ識別データ記憶手段には、さらにフレーズ識別データと交互に記憶される時間間隔データが記憶され、前記フレーズ記憶手段からフレーズを読出すべき期間を表すことを特徴とする自動演奏装置。
【００１２】
（３）自動演奏装置（２）において、前記フレーズ識別データ記憶手段には、さらにフレーズの読出しを禁止することを表すフレーズ読出禁止データが記憶され、前記時間間隔データとの組み合わせによってフレーズ読出しを禁止する期間を設定することを特徴とする自動演奏装置。
【００１３】
（４）自動演奏装置（２）において、前記フレーズ記憶手段からフレーズを読出す期間中に少なくとも２回、前記トリガー発生手段からトリガーを受け付けた時には、２回目以降のトリガーに関してはフレーズ読出しを行わないことを特徴とする自動演奏装置。
【００１４】
（５）自動演奏装置（１）において、前記フレーズ記憶手段に記憶される複数のフレーズはそれぞれすくなくとも発音指示データと時間間隔データから構成され、トリガー受け付け期間内に前記トリガー発生手段によってトリガーが発生しなかった場合には、該トリガー受け付け期間にトリガーが発生したときに自動演奏されるフレーズの少なくとも発音指示データと時間間隔データを無視して実行することを特徴とする自動演奏装置。
【００１５】
（６）自動演奏装置（１）において、第１のフレーズの自動演奏中に第２のフレーズの自動演奏指示があった場合には、第１のフレーズの自動演奏を少なくとも発音指示データ、時間間隔データを無視して実行することを特徴とする自動演奏装置。
【００１６】
（７）自動演奏装置（１）において、トリガーを受け付ける期間を操作者に表示するための表示手段を備える自動演奏装置。
【００１７】
（８）自動演奏装置（１）において、さらに、通常の自動演奏を行うための自動演奏データを記憶する自動演奏データ記憶手段を備え、前記制御手段は、前記指示手段の指示に応じて前記フレーズ識別データ記憶手段の読出しに必要なアドレスの進行を開始し、時間の経過によって該アドレスの進行を制御するとともに、前記自動演奏データ記憶手段から自動演奏データを読み出し、通常の自動演奏を行うことを特徴とする自動演奏装置。
【００１８】
上記自動演奏装置（１）では、指示手段によって自動演奏の開始が指示されると、制御手段によってフレーズ識別データ記憶手段の読出しに必要なアドレスの進行が開始し、時間の経過によって該アドレスの進行が制御される。そのためトリガー発生手段によって発生するトリガーによって読み出されるフレーズが、時間経過、すなわち曲の進行に応じた適切なフレーズで自動演奏される。また、トリガーが発生しないときも、曲の進行に応じた適切なフレーズを再生すべくアドレスを移動させておくので、演奏が中断して途中から復帰しても、トリガーによる自動演奏は曲の進行に合った適切な自動演奏をするので演奏者は曲を終わりまで演奏する事ができる。
【００１９】
上記自動演奏装置（２）では、前記フレーズ識別データ記憶手段に、さらにフレーズ識別データと交互に記憶される時間間隔データが記憶され、前記フレーズ記憶手段からフレーズを読出すべき期間を設定することができるので、本来のタイミングに対して前後にある程度ずれた範囲でのトリガーの受け付けができることになる。このため演奏者が意図的に本来のタイミングをずらして、いわゆる前ノリ、後ノリを表現したりして演奏に変化をつけることも可能である。また、本来のタイミングを逸することがあってもずれたタイミングを保持したまま演奏されるので、演奏者の失敗が反映され、失敗を認識して演奏技量を向上させることができる。
上記自動演奏装置（３）では、自動演奏装置（２）の構成に加えさらに、前記フレーズ識別データ記憶手段にフレーズの読出しを禁止することを表すフレーズ読出禁止データを記憶しているので、前記時間間隔データと組み合わせることでフレーズ読出禁止期間が設定され、この期間中に発生したトリガーは受け付けられない。このように、フレーズ読出しを禁止する期間を設定することができるので、トリガーを発生するタイミングが本来のタイミングに対して大幅にずれた場合は、フレーズが読み出されないので曲の進行に自動演奏されるフレーズが合わないという不都合を回避できる。
上記自動演奏装置（４）では、自動演奏装置（２）の構成に加えて、前記フレーズ記憶手段からフレーズを読出す期間中に少なくとも２回、前記トリガー発生手段からトリガーを受け付けた時には、２回目以降のトリガーに関してはフレーズ読出しを行わない。このように、２回目以降のトリガーに関してはフレーズ読出しを行わないので、同じフレーズが重複して演奏されることがないので違和感のない演奏が楽しめる。
【００２０】
上記自動演奏装置（５）では、自動演奏装置（１）の構成に加えて、前記フレーズ記憶手段に記憶される複数のフレーズは、それぞれ少なくとも発音指示データと時間間隔データから構成され、トリガー受け付け期間内に前記トリガー発生手段によってトリガーが発生しなかった場合には、該トリガー受け付け期間にトリガーが発生したときに自動演奏されるフレーズの少なくとも発音指示データと時間間隔データを無視して実行するので、音色変更や操作子の情報などの情報を無視されることがない。そのためこれらの情報に応じた処理をしないために後の自動演奏に影響がでるという不都合を回避できる。
【００２１】
上記自動演奏装置（６）では、自動演奏装置（１）の構成に加えて、第１のフレーズの自動演奏中に第２のフレーズの自動演奏指示があった場合には、第１のフレーズの自動演奏を少なくとも発音指示データ、時間間隔データを無視して実行するので、後の演奏の影響がでるような処理は行いつつ、第１のフレーズの残りの自動演奏データを発音せずに迅速に実行する。聴感上は、トリガーを発生させた瞬間に第１のフレーズの演奏が中断し、第２のフレーズの演奏が開始されたように聞こえる。このためトリガーの発生とフレーズの演奏と応答が悪くなることはない。
【００２２】
上記自動演奏装置（７）では、自動演奏装置（１）の構成に加えて、トリガーを受け付ける期間を操作者に表示するための表示手段を備えているので、演奏者はトリガーを発生させるタイミングを視覚的に認識することができる。
【００２３】
上記自動演奏装置（８）では、自動演奏装置（１）の構成に加えて、さらに通常の自動演奏を行うための自動演奏データを記憶する自動演奏データ記憶手段を備え、前記制御手段は、前記指示手段の指示に応じて前記フレーズ識別データ記憶手段の読出しに必要なアドレスの進行を開始し、時間の経過によって該アドレスの進行を制御するとともに、前記自動演奏データ記憶手段から自動演奏データを読み出し、通常の自動演奏を行う。従って、通常の自動演奏データも自動演奏するので演奏者は他のパートの演奏を聞きながら合奏に参加できる。
【００２４】
【発明の実施の形態】
以下、図面を参照して、この発明の各実施例を説明する。実施例は３つあるが、まず共通する部分を説明する。この発明による実施例は、自動演奏の複数のトラックのうちの少なくとも一つのトラック（「トリガー駆動トラック」と呼ぶ。）をトリガーによってコントロールする一方、トリガーでコントロールしない他のトラック（「ノーマルトラック」と呼ぶ。）を周知の自動演奏の処理を用いて再生する。
【００２５】
演奏者は、ノーマルトラックによる演奏を聞きながら、演奏曲におけるトリガーをかけるべきタイミングでトリガーをかける。トリガーが出力されると、直ちにトリガー駆動トラックから所定の限られた自動演奏演奏データの読み出しを開始し、読み出されたデータに従って、自動演奏を行う。
【００２６】
この際に、必要とされるトリガーのタイミングと、演奏者による実際のトリガーのタイミングとはズレる場合がほとんどであるが、これにかまわずノーマルトラックのテンポと同一のテンポで再生される。そのため、演奏者は、演奏に慣れていない、あるいはリズム感が悪いほどズレ量を大きくしてしまい、ノーマルトラックによる演奏とトリガー駆動トラックによる演奏とがズレて再生されて、いわゆる下手な演奏になる。
【００２７】
一方、演奏者がトリガーをかけずにいても、ノーマルトラックの進行に応じて、トリガーが発生したときの再生開始位置（アドレス）を移動させておくので、演奏者が演奏に慣れていなくて、演奏が中断しても、トリガーによる自動演奏はノーマルトラックの進行に応じた、適切な自動演奏をするので、演奏者は、途中から復帰できる。
【００２８】
さらに、演奏者は、演奏に慣れるにしたがってズレ量を小さくすることができるので、本来の演奏に近くなり、いわゆる上手な演奏になる。従って、演奏者は、練習効果を演奏に反映することができる。
【００２９】
第１の実施例では、１小節単位でトリガーによる自動演奏を行う。演奏者は、ノーマルトラックの演奏を聞きながら、各小節の先頭付近でトリガーをかける。トリガーが発生したことを装置が認識すると、トリガー駆動トラックの読み出しを開始し、トリガーのタイミングによって読み出しを開始してから一小節分のデータを読み出したところで停止する。
【００３０】
トリガーが各小節の頭で規則的に発生する場合は、以上の動作を繰り返すので、演奏が途切れることがない。ところが、演奏者がトリガーを発生させることを途中でやめた場合は、ノーマルトラックの進行に応じて、読み出し位置を移動する。そして演奏者がトリガーの発生を再開した場合は、ノーマルトラックの進行に応じた読み出し位置から読み出しを開始して、自動演奏を行う。これによって、途中から演奏に参加する場合や、演奏が途中で中断しても、復帰することができる。この第１の実施例は、複音楽器をトリガー駆動する場合に適している。
【００３１】
次に、この第１実施例の構成について図面を参照して説明する。図１は、この発明の実施例による自動演奏装置を示す、ブロック図である。
この図において、１はトリガー発生器であり、読み出し動作を開始させる“きっかけ”を発生するものである。なお、トリガー発生器１の詳細については後述する。トリガー発生器１によって発生したトリガーはトリガーＩ／Ｆ（インターフェース）２によって検出され、その検出信号がアドレス・データバス１３を介してＣＰＵ３に供給される。
【００３２】
４はタイマであり、割り込み信号ＩＮＴをＣＰＵ３に供給する。この割り込み信号ＩＮＴが供給されると、ＣＰＵ３は後述するタイマ割込処理を実行する。この実施例では、割込信号ＩＮＴの発生する時間間隔は曲のテンポに応じて変化し、発生する回数は、４分音符について９６回の割合であり、例えば４／４拍子の場合には、１小節について３８４回となる。
【００３３】
５はＲＯＭであり、ＣＰＵにおいて用いられるプログラムや自動演奏に用いられる演奏データ等が記憶されている。６はＲＡＭであり、後述する種々のレジスタ等に使用する。７は音源回路であり、ＣＰＵ３の制御によって楽音信号を発生させ、サウンドシステム８に供給する。サウンドシステム８は、ＤＡコンバータ、アンプ、スピーカから構成されていて、音源回路７からのデジタル楽音信号をアナログ信号に変換した後、増幅されて、音響信号として放音される。
【００３４】
９は、パネル操作子であり、曲のテンポ設定やトリガー駆動トラックの選択等を行うための、種々の操作子より構成される。各操作子の操作状態は、パネルＩ／Ｆ１０によって検出され、その検出信号が、アドレス・データバス１３を介してＣＰＵ３に供給される。１１はディスプレイであり、ディスプレイＩ／Ｆ１２およびアドレス・データバス１３を介したＣＰＵ３の制御によって種々の表示を行う。
【００３５】
ＲＯＭ５には図１８に示すような、自動演奏データが格納されている。この実施例では、ピアノ、ベース、ドラム、トランペットの４つのパートの自動演奏データが別々のトラックに記憶されている。自動演奏データは、イベントデータＥＤと、イベントデータとイベントデータの時間間隔を表す、デュレーションデータＤＤからなる。イベントデータＥＤはキーオンデータ、キーオフデータ、プログラムチェンジ、コントロールチェンジなどの種類があり、デュレーションデータの時間が経過する毎に、イベントデータＥＤを読出し、データの種類に応じた処理を行うことで、自動演奏が行われる。
【００３６】
トリガー発生器１は単なるスイッチでもよいが、実際に楽器を演奏している気にさせるため、本物の楽器を使うことが好ましい。図２（ａ）の１０１はアナログ信号を出力するアナログ楽器であり、エレクトリックギターや、エレクトリックベースギター、電子ドラム等がよい。自然楽器にマイクロホンをとりつけてもよいが、生音が大きいものはふさわしくない。アナログ楽器１０１からのアナログ信号（ＡＤコンバーターを通してデジタル信号にしてもよい）はレベル比較器１０２でしきい値と比較され、しきい値レベルを越えるとパルス発生器１０３にてトリガー信号を発生し、トリガーＩ／Ｆ２を介してＣＰＵ３に伝えられる。
【００３７】
また、トリガー発生源としてＭＩＤＩ信号を出力する電子楽器を用いてもよく、図２（ｂ）にはＭＩＤＩキーボードを使用した例が示されている。キーボード１０４は複数の鍵からなるキーボードであり、様々なＭＩＤＩ信号を出力するが、キーオンイベント検出器１０５にてキーオンイベントしか検出せず、キーオンイベントがあったときだけ、それをトリガーとしてトリガーＩ／Ｆ２を介してＣＰＵ３に伝える。これによって演奏者は、何らかの音高の音を演奏するだけで、トリガーを発生することができる。
【００３８】
図１のＲＯＭ５に記憶されているプログラムに従って、第１の実施例に係る自動演奏装置が動作する。以下、その動作を図３〜１１を参照して説明する。
演奏者が、この装置の電源を投入すると、図３に示すメインルーチンが起動される。まず、Ｓａ１において、ＲＡＭ６に記憶する、各種レジスタや各種フラグを初期設定値にする処理や、その他の初期設定に必要な処理を行う。次にパネル処理（Ｓａ２）が行われるが、ＣＰＵ３がパネル処理（Ｓａ２）を実行するときは、図５に示すサブルーチンを起動する。
【００３９】
Ｓｃ１ではテンポ設定処理が行われる。これは、演奏者が、パネル操作子９のテンポ設定操作子にてテンポ設定操作を行ったときに、設定されたテンポに応じた時間間隔で割込信号ＩＮＴが発生するように設定する処理である。しかし、この実施例では、自動演奏を行うのであるから、あらかじめテンポは、その自動演奏する曲にあわせて、あらかじめ設定されているので、割込信号ＩＮＴが発生する時間間隔も設定されているものとする。ただし、演奏者が、変更したいときは変更できる。ここでは、あらかじめ決められたテンポのままにしておき、Ｓｃ２に進む。
【００４０】
Ｓｃ２ではトリガーによってコントロールする自動演奏トラックが演奏者によって選択された時、選択された自動演奏トラックを識別するデータをＲＡＭ６に記憶する。この実施例では、演奏者は、ピアノ、ベース、ドラム、トランペットのなかから選択する。ここでは、ピアノをトリガー駆動トラックとして選択したとして説明を進める。その結果、他のベース、ドラム、トランペットのパートはノーマルトラックとなる。
【００４１】
演奏者が、図示しないパネル９上の自動演奏スタートスイッチを押すと、自動演奏スタートイベントがあったとみなされるので、Ｓｃ３の判断が「ｙｅｓ」となり、タイマ割込を許可し（Ｓｃ４）、自動演奏を開始していることを示す、スタートフラグＳＴＡＲＴを１にする（Ｓｃ５）。もし、演奏者が自動演奏スタートスイッチを押さない場合は、Ｓｃ３での判断が、「ｎｏ」となるので、Ｓｃ４〜Ｓｃ５の処理を行わない。
【００４２】
演奏者が、図示しないパネル９上の自動演奏ストップスイッチを押すと、ストップイベントがあったとみなされるので、Ｓｃ６の判断が「ｙｅｓ」となり、タイマ割込を禁止し（Ｓｃ７）、オールノートオフを音源回路７に指示して、自動演奏によって発音中の全ての楽音を強制的にキーオフし（Ｓｃ８）、ＳＴＡＲＴを０にする（Ｓｃ９）。演奏者が自動演奏ストップスイッチを押さない場合は、Ｓｃ６の判断が「ｎｏ」となるので、Ｓｃ７〜Ｓｃ９の処理を行わない。その後メインルーチンにリターンする。
【００４３】
このようにパネル処理では、演奏者がテンポ設定した場合のテンポ設定処理、トリガー駆動トラックの選択操作をした場合の処理、自動演奏のスタート／ストップの指示をしたときに、タイマ割込許可／禁止、ＳＴＡＲＴの設定が行われる。
【００４４】
演奏者が、スタートスイッチを押すと、Ｓｃ４でタイマ割込が許可されるので、設定されているテンポに応じた時間間隔で割込信号ＩＮＴが発生する。割り込み信号ＩＮＴが発生すると、ＣＰＵ３は、発生した時点で実行していた処理を中断し、図４に示す処理を行う。すなわちタイマインタラプトフラグＴＭＩＦを１に設定し（Ｓｂ１）、すぐに中断していた処理に戻る。この実施例では、タイマ割込の処理はフラグＴＭＩＦを１に設定するという最小のプログラムで終了している。これは、もしタイマ割込処理に時間がかかると、他の優先度の高い割込があった場合に、その処理を優先できないことがあるからである。このタイマ割込に関する具体的処理は、メインルーチンの自動演奏処理（Ｓａ６）で行う。メインルーチンはＳａ２〜Ｓａ７を高速で実行しているため、タイマ割込があってから、自動演奏処理（Ｓａ６）を実行するまでの時間差は自動演奏のテンポ遅れとして認識できるほどはない。
【００４５】
メインルーチンに戻って、Ｓａ３でスタートフラグＳＴＡＲＴが１かどうか判断するが、演奏者がスタートスイッチを押した場合は、ＳＴＡＲＴ＝１なので、読出し許可処理（Ｓａ４）、トリガー処理（Ｓａ５）、自動演奏処理（Ｓａ６）を行う。ＳＴＡＲＴ＝０のときは、これらの処理（Ｓａ４〜Ｓａ６）を行わない。その後、本実施例に関係のない、その他の処理（Ｓａ７）を行い、パネル処理（Ｓａ２）の処理に戻る。以後Ｓａ２〜Ｓａ７の処理を繰り返す。
【００４６】
さて、第１の実施例では、演奏者によるトリガーを受け付ける期間と、受け付けない期間を自動演奏の進行に応じて設定する。演奏者が、トリガーを受け付ける期間内で自動演奏が進行しているときに、トリガーをかけると、それに対応して、トリガー駆動トラックとして選択したトラックの１小節分の自動演奏データが読み出され、演奏されるが、トリガーを受け付けない期間では、トリガーをかけても無視される。
【００４７】
図１２を参照して説明すると、トリガーの受け付け期間は、ノーマルトラックの進行とともに設定され、小節線をはさむＳ１〜Ｓ２の間をノーマルトラックが演奏しているときが、受け付け期間になる。Ｓ２を越えて次のＳ１まではトリガーを受け付けない期間である。ノーマルトラックのある時点での進行位置は、レジスタＮＴＣＴ（ノーマルトラックカウンタ）の数値で表す。
【００４８】
ＮＴＣＴ＝０のときは、ちょうど小節線の位置がノーマルトラックの進行位置である。ＮＴＣＴはタイマ割込があるたびに、１インクリメントされる（図１０のＳｇ１）。時間が経過して、次の小節線に達すると０になる。この実施例では４分音符＝９６クロックであるので、１小節の大きさは４拍子の場合、３８４クロックである（１クロックはタイマ割込があってから次のタイマ割込までの周期を表す）。
【００４９】
Ｓ１とＳ２の位置はデフォルトではあらかじめ決められた設定値になっているが、パネル操作子９（図１参照）によって、演奏者が変更するようにしてもよい。Ｓ１は小節線から左方向のクロック数、Ｓ２は同じ小節線の右方向のクロック数に対応する進行位置で定義される。
【００５０】
Ｓ１は自動演奏が演奏している時点の小節サイズに左右されるので、小節サイズが変動するような曲であると、Ｓ１の位置も変動する。小節サイズは図１９に示すように、ＲＯＭ５に小節サイズテーブルとして記憶されているので、これを読み出してＳ１の位置を決定する。例えば、小節線から左に４８クロックの位置にＳ１があるとすると、小節サイズが３８３の場合は、３８３―４８＝３３５がＳ１の位置である。また小節サイズが１９１のときは、１９１―４８＝１４３がＳ１の位置である。またＳ２の位置は小節サイズに左右されず、小節線から右に９６クロックとすると、Ｓ２の位置も９６である。
【００５１】
ＣＰＵ３がメインルーチン中の読出し許可処理（Ｓａ４）を実行するときは、図６に示すサブルーチンを呼び出し、実行する。このサブルーチンは、ノーマルトラックによる自動演奏がトリガーを受け付ける期間に達したとき、トリガー駆動トラックの自動演奏データの読出しを許可することを示す読出し許可フラグＲＥＦを１にし、受け付け期間を過ぎるとＲＥＦを０にする。またトリガーが、トリガー受け付け期間内に発生しなかったとき、トリガー駆動トラックの読出し開始のアドレス（ポインタ）を移動させる処理を行う。
【００５２】
Ｓｄ１でノーマルトラックカウンタＮＴＣＴがＳ１〜Ｓ２のトリガー受け付け期間内であるか判断し、期間内である時は（「ｙｅｓ」と判断される）、ＲＥＦが０のときは１にし、すでに１のときはそのままにする（Ｓｄ２、Ｓｄ３）。一方、トリガー受け付け期間を過ぎた時は（Ｓｄ１で「ｎｏ」と判断されたとき）、ＲＥＦが０以外のときは０にするとともに、トリガー駆動トラックの読出し準備が完了したことを示す、読出し準備完了フラグＲＹＦも０に設定し、ＲＥＦがすでに０のときはそのままにする（Ｓｄ７、Ｓｄ８）。その後、メインルーチンに戻る。
【００５３】
トリガーの発生によってトリガー駆動トラックが演奏中であることを示す実行フラグＥＸＥＦが１であるときは（Ｓｄ４で「ｙｅｓ」）、メインルーチンに戻る。Ｓｄ４で「ｎｏ」と判断されたときは、Ｓｄ５でＲＹＦが０かどうか判断する。ＲＹＦが１のときは（Ｓｄ５で「ｎｏ」）、読出しの準備が完了しているので、メインルーチンに戻る。ＲＹＦが０のときは（Ｓｄ５で「ｙｅｓ」）、トリガー駆動トラックの読出しの準備が完了していないので、ポインタ移動処理（Ｓｄ９）を行う。ポインタ移動処理を行うことによって読出し準備が完了するので、前もってＲＹＦを１にしておく（Ｓｄ６）。Ｓｄ６はＳｄ９の後で実行してもよい。
【００５４】
ポインタ移動処理（Ｓｄ９）はトリガーが受け付け期間中にトリガーが無かったとき、次のトリガー受け付け期間に入ってトリガーを受けたときに、読み出される自動演奏データが古く無いように、常にノーマルトラックの進行位置に応じた自動演奏データが読み出されるように、ポインタ（アドレス）を次の小節の先頭に移動させる処理である。ＣＰＵ３がこの処理を行うときは、図８に示すサブルーチンを実行する。
【００５５】
ここで、小節の先頭の概念が難しいので、詳細に説明する。もし、あらたな小節の始まり（小節線のある位置）が、イベントデータであるならば、そのイベントデータが格納されているアドレスが小節の開始位置となるが、演奏者が演奏した演奏データを記憶した自動演奏データは多くの場合、小節線の位置にイベントデータはなく、ずれている。したがって小節線はあるイベントデータとあるイベントデータの間にあると考えられるので、正確な小節の先頭位置を求めるため、その小節線から最初のイベントデータまでのデュレーションを算出する処理を行う。そして、トリガーが発生して、その小節の再生を開始するときは、算出されたデュレーションデータを減算することから始まる。
【００５６】
図８にて、Ｓｉ１はトリガーに応じてトリガー駆動演奏が行われた時間を計測するトリガー駆動トラックカウンタＴＴＣＴとトリガー駆動トラックの各デュレーションデータＤＤがセットされ、トリガー駆動演奏の進行とともにその数値ＤＴｔが低減される（図１１のＳｈ４参照）。デュレーションレジスタＤＴｔに格納された値ＤＴｔの和が、現在演奏中のトリガー駆動トラックの小節サイズＭＳｔより小さいかを比較する。和が小さいときは、次の小節線までに、何らかのイベントデータがあるので、Ｓｉ２〜Ｓｉ８の処理を行う。
【００５７】
すなわち、ＴＴＣＴにＤＴｔを加算して、カウンタ値を進め（Ｓｉ２）、さらにポインタＰＴｔを１進めて（Ｓｉ３）、自動演奏データを読み（Ｓｉ４）、そのデータがイベントデータのときは（Ｓｉ５で「ｎｏ」）、キーオン以外のイベントデータを対応処理し（Ｓｉ７、Ｓｉ８）、Ｓｉ３に戻る。イベントデータがキーオンの場合はキーオン処理せず、Ｓｉ３に戻る。この処理はキーオンを処理しないことによって、発音させず、キーオフやプログラムチェンジなど、キーオン以外のイベントは処理することによって、楽音の鳴りっぱなしを防止し、音色などの変更を行うことによって、トリガーによる次の小節の演奏が始まっても、本来の演奏と異なる状態になることを防ぐものである。
【００５８】
Ｓｉ４にて読み出したデータがデュレーションデータならば（Ｓｉ５で「ｙｅｓ」）、レジスタＤＴｔに格納し（Ｓｉ６）、Ｓｉ１に戻り、判断が「ｎｏ」になるまでＳｉ２〜Ｓｉ８の動作を繰り返す。これによって、まだ実行していない現在の小節のイベントデータをキーオンを除いて、迅速に実行する事ができる。なお、場合によってはキーオンも処理した方がよい場合があるので、キーオンも処理するようにしてもよい。
【００５９】
Ｓｉ１にて、ＴＴＣＴとＤＴｔの和がＭＳｔ以上のときは、デュレーションレジスタＤＴｔに格納されているデュレーションデータが小節線をまたいでいることになるので、その和からＭＳｔを減算すると、小節線から次のイベントデータまでのデュレーションが求められることになる。ここで求められたデュレーションデータはＤＴｔに格納される（Ｓｉ９）。
【００６０】
この時点で次の小節の先頭から自動演奏データを読出す準備ができたので、トリガー駆動トラックの小節番号を表すレジスタＴＴＭＮを１進め（Ｓｉ１０）、トリガー駆動トラックカウンタＴＴＣＴを０にし（Ｓｉ１１）、次の小節のサイズを図１９に示す、小節サイズテーブルから、ＴＴＭＮを参照して読み、ＭＳｔレジスタに格納する（Ｓｉ１２）。その後、読出し許可処理（図６）にもどり、さらにメインルーチンにもどる。
【００６１】
ＣＰＵ３がメインルーチン中のトリガー処理（Ｓａ５）を実行するときは、図７に示す、サブルーチンを呼び出し、実行する。
読出し許可フラグＲＥＦが１の状態で、演奏者がトリガー発生器１にてトリガーを発生させると、Ｓｅ１、Ｓｅ２にて判断が「ｙｅｓ」となり、ＲＥＦを２にする（Ｓｅ３）。ＲＥＦを２に設定するのは、同じトリガー受け付け期間でトリガーが２回以上発生しても、２回目からは、Ｓｅ２で「ｎｏ」となるので、Ｓｅ３〜Ｓｅ１３の処理は行われない。トリガーイベント（トリガーの発生）がない場合（Ｓｅ１で「ｎｏ」）や、読出し許可フラグＲＥＦが１以外のとき（Ｓｅ２で「ｎｏ」）はすぐにメインルーチンに戻る。
【００６２】
Ｓｅ４での判断が「ｎｏ」のときは、Ｓｅ５にてＥＸＥＦを１にし、読出し準備完了フラグＲＹＦを０にする（Ｓｅ６）。ＲＹＦを０にするのは、トリガーによってトリガー駆動トラックの読出しを開始することで、読出し準備の完了状態が解除されるからである。
【００６３】
Ｓｅ４での判断が「ｙｅｓ」のときは、ポインタ移動処理（Ｓｅ１３）を実行する。この処理が行われるときは、トリガー駆動トラックの前の小節の自動演奏が終了していないうちに、読出し許可期間となり、トリガーが発生した場合である。具体的には演奏者のトリガーをかけるタイミングが小節線よりも前、すなわち早すぎた場合や、前の小節のトリガータイミングが遅すぎた場合であり、自動演奏が一部オーバーラップしてしまう場合である。この場合は、トリガーをかけたタイミングでトリガー駆動トラックだけは次の小節の演奏を開始しなければならないので、現在の小節の演奏を中止し、速やかにトリガー駆動トラックのポインタＰＴｔを次の小節の先頭に移動するという処理を行う。この処理は図８のサブルーチンを呼び出すが、詳細説明はすでに述べているので省略する。
【００６４】
その後、Ｓｅ７に進むが、ポインタ移動処理（Ｓｅ１３）でポインタＰＴｔを移動させた結果、新たな小節の先頭がイベントデータの場合は、ＤＴｔが０になっているので、Ｓｅ８〜Ｓｅ１２の処理を行う。また、デュレーションデータが小節線をまたいでいる場合は、ＤＴｔ＞０なので、メインルーチンに戻る。
【００６５】
Ｓｅ７〜Ｓｅ１２の処理は、トリガー駆動トラックのデュレーションレジスタＤＴｔが０のときに（Ｓｅ７で「ｙｅｓ」）、ポインタＰＴｔを１進めて（Ｓｅ８）、ＰＴｔをアドレスとしてトリガー駆動トラックの自動演奏データを読み（Ｓｅ９）、そのデータがイベントデータの場合には（Ｓｅ１０で「ｎｏ」）、そのイベントに対応する処理を行い（Ｓｅ１１）、Ｓｅ８に戻る。Ｓｅ８〜Ｓｅ１１の処理は、Ｓｅ９で読み込まれたデータがデュレーションデータだと判断されるまでつづけられ、デュレーションデータと判断されたときは（Ｓｅ１０で「ｙｅｓ］）、ＤＴｔにそのデュレーションデータを格納し（Ｓｅ１２）、メインルーチンに戻る。
【００６６】
このようにトリガー処理（図７）は、トリガーが発生した場合のトリガー駆動トラックの自動演奏処理であり、１つのトリガー受け付け期間のうちの１つのトリガーに対してだけ実行されるプログラムである。
【００６７】
ＣＰＵ３がメインルーチン中の自動演奏処理（Ｓａ６）を実行するときは、図９に示すサブルーチンを呼び出し、実行する。Ｓｆ１では、タイマインタラプトフラグＴＭＩＦをみて、１のときは（「ｙｅｓ」）、タイマインタラプトがあったことを意味するので、Ｓｆ２〜Ｓｆ４の処理を行うが、０のときは（「ｎｏ」）、その処理のタイミングでないので、メインルーチンにもどる。Ｓｆ２では、ＴＭＩＦを０にして次のタイマ割込まで、Ｓｆ３、Ｓｆ４の処理を行えないようにする。
【００６８】
Ｓｆ３のノーマルトラック処理は、図１０に示すようなサブルーチンになっていて、ノーマルトラックの自動演奏処理を行う。Ｓｇ１ではノーマルトラックカウンタＮＴＣＴを１進めて、その結果、小節の終わりに来たかどうか判断する（Ｓｇ２）。これは、現在演奏中の小節のサイズＭＳと比較する事で行われる。ＮＴＣＴがＭＳに等しいときは（Ｓｇ２で「ｙｅｓ」）、ノーマルトラックの演奏進行位置が小節の終わりに達したことになるので、ノーマルトラック小節番号ＮＴＭＮを１進め（Ｓｇ３）、ＮＴＣＴを０にし（Ｓｇ４）、新たなＮＴＭＮに基づいて、図１９に示す小節サイズテーブルから小節サイズを読出し、ＭＳレジスタに格納する（Ｓｇ５）。Ｓｇ２にて、まだ小節の終わりに達していないと判断されたときは（「ｎｏ」）、Ｓｇ３〜Ｓｇ５の処理をスキップしてＳｇ６に進む。
【００６９】
Ｓｇ６〜Ｓｇ１２の処理は複数あるノーマルトラックの処理をトラック毎に個別に行う。これらの処理において使用される、デュレーションデータレジスタＤＴｎ、ポインタＰＴｎのｎは処理するトラック番号を表している。この実施例では、ピアノ、ベース、ドラム、トランペットの４つのトラックがあり、順番にトラック番号をつけられているとする。いま、ピアノはトリガー駆動トラックとして選択されているので、ノーマルトラックであるベース、ドラム、トランペットの処理を行う。
【００７０】
すなわち、Ｓｇ６〜Ｓｇ１２では複数あるノーマルトラックのうち一つのトラックの自動演奏処理を行い、未処理のノーマルトラックがある場合は（Ｓｇ１３）、次に処理するトラック番号ｎを入れて（Ｓｇ１４）、Ｓｇ６に戻り、トラック毎に自動演奏処理を行う。ここでは、ノーマルトラックのベース、ドラム、トランペットのトラック番号ｎを２、３、４として処理する。
【００７１】
Ｓｇ６〜Ｓｇ１２の処理自体は、図７のＳｅ７〜Ｓｅ１２と全く同じであるので説明を省略する。トランペットのパートが終わると処理すべきノーマルトラックはもうないので、図９の自動演奏処理に戻る（Ｓｇ１３）。
【００７２】
トリガー駆動トラック処理Ｓｆ４を実行するときは、図１１に示すサブルーチンを実行する。この処理は、トリガーによるトリガー駆動トラックの自動演奏処理を行うプログラムである。
【００７３】
演奏者が、読出し許可期間中（ＲＥＦ＝１のとき）に、トリガー発生器１にてトリガーを発生させると、実行フラグＥＸＥＦは１になるので（図７のＳｅ５）、Ｓｈ１での判断は「ｙｅｓ」となって、トリガー駆動トラックカウンタＴＴＣＴを１進めて（Ｓｈ２）、トリガー駆動トラックが実行中の小節における小節サイズＭＳｔと比較する（Ｓｈ３）。トリガー駆動トラックの演奏進行位置が小節の最後でないときは（Ｓｈ３で「ｎｏ」）、Ｓｈ４でデュレーションレジスタＤＴｔの数値を１デクリメントし、次に、Ｓｈ５〜Ｓｈ１０にてトリガー駆動トラックの自動演奏処理を行う。処理の内容自体は図７のＳｅ７〜Ｓｅ１２と全く同じであるので説明を省略する。Ｓｈ４〜Ｓｈ１０の処理が終了すると、自動演奏処理（図９）に戻り、さらにメインルーチン（図３）に戻る。
【００７４】
実行フラグＥＸＥＦが１でないときは（Ｓｈ１で［ｎｏ」）、自動演奏処理（図９）に戻り、さらにメインルーチン（図３）に戻る。
【００７５】
また、Ｓｈ３でトリガー駆動トラックの自動演奏位置が小節の最後であると判断されたときは（Ｓｈ３で「ｙｅｓ」）、トリガー駆動トラックの小節番号ＴＴＭＮを１進め（Ｓｈ１１）、ＴＴＣＴを０にし（Ｓｈ１２）、新たなＴＴＭＮに基づいて、小節サイズテーブル（図１９）から小節サイズを読出し、ＭＳｔレジスタに格納する（Ｓｈ１３）。
【００７６】
トリガー駆動トラックの演奏位置が小節の最後に達したときは、トリガー駆動トラックの自動演奏を止めるため、実行フラグＥＸＥＦを０にする（Ｓｈ１４）。また小節の最後まで演奏位置が進んだということは、次の小節の読出しの準備が完了していることになるので、読出し準備完了フラグＲＹＦを１にする（Ｓｈ１５）。その後、自動演奏処理（図９）に戻り、さらにメインルーチン（図３）に戻る。
【００７７】
トリガー駆動トラックの自動演奏処理自体（Ｓｈ４〜Ｓｈ１０）はノーマルトラックのそれと何ら変わるところはない。割込信号ＩＮＴは１つしかないので、必然的にテンポも同一である。ただし、トリガー駆動トラックの自動演奏は開始するタイミングが小節ごとに異なるので、本来の自動演奏（トリガー駆動トラックをノーマルトラックとして処理した場合）に比べて、小節単位で前にずれたり、後ろにずれたりするのである。これが演奏者がトリガー駆動トラックを制御していると感じるところであり、演奏に参加していると実感するところである。
【００７８】
次に、図１３〜図１９に基づいて第２実施例の説明をする。なお説明を簡潔にするため第１の実施例と共通の部分は説明を省略し、異なる部分を詳細に説明する。
【００７９】
この発明による第２実施例は、トリガーの発生によって単音楽器のパートの演奏を行う。第１実施例と第２実施例との相違は、第１実施例では演奏曲を一定期間（１小節）に区切ってトリガーを受け付けていたのに対し、第２実施例ではトリガーを受け付ける毎に１つの音符を再生する、という点である。
【００８０】
具体的にはこの第２実施例では、トリガー駆動トラックからキーオンデータが検索されてイベントバッファに記憶される。トリガーが発生すると、このイベントバッファからキーオンデータが読み出されて発音が行われる。トリガー駆動トラックから音符を探す検索ポインタは、ノーマルトラックにおける読出しポインタに比べて所定時間（実施例では先行クロックサイズに対応する時間）だけ先行させておくことによって、トリガーのタイミングが本来の演奏すべき音符のタイミングよりも早くても、再生できるようにした。
【００８１】
イベントバッファはトリガーの発生の有無にかかわらず、検索ポインタがキーオンデータをサーチした場合に書き換えられる。トリガーの受け付ける期間は、時間的には発音すべき音符の有する長さと等しいが、タイミング的には検索ポインタを先行させる所定時間だけ発音すべき音符よりずれている。
【００８２】
この第２実施例は、単音楽器のパートをトリガーによって演奏する場合に適している。第１の実施例は、小節線付近でのトリガー発生によって、その小節の自動演奏を行うものであったが、この第２の実施例は、発音タイミング付近でのトリガー発生によって、そのタイミングで発生すべき音（単音）を発生するものである。
【００８３】
第２の実施例に関する自動演奏装置のハード的な構成は図１に示す、第１の実施例と同一であるので説明を省略する。
【００８４】
次に、この実施例の動作について図１３〜図１７を参照して説明する。
図１３はメインルーチンであり、演奏者によって電源が投入されると、ＲＡＭ６内の各種レジスタやフラグに初期設定値が書き込まれる等の初期設定処理（Ｓｍ１）が行なわれる。特に、フラグＳＴＥを０、レジスタＯＦＣＴを０に設定し、レジスタＤＴｋ、ＤＴｔに１が設定される。
【００８５】
次に、Ｓｍ２のパネル処理を行う。このパネル処理は図５に示すサブルーチンを読出す。このサブルーチンは第１の実施例と共通なので、説明を省略する。第２の実施例は単音楽器の自動演奏をトリガー駆動する場合に適しているので、Ｓｃ２（図５）のトリガートラック選択では、第１の実施例ではピアノを選択したが、ここでは、ベースまたはトランペットを選択するのがよい。
【００８６】
Ｓｍ３では、スタートフラグＳＴＡＲＴが１かどうか判断する。ＣＰＵ３はＳＴＡＲＴが１のときはＳｍ４の自動演奏処理、Ｓｍ５のトリガー処理を行い、ＳＴＡＲＴが１でないときはＳｍ４、Ｓｍ５の処理を行わない。
その後、その他の処理（Ｓｍ６）を行い、Ｓｍ２にもどる。以後、Ｓｍ２〜Ｓｍ６の処理を繰り返し行う。
【００８７】
演奏者が自動演奏スタートスイッチを押すと、タイマ割込が許可されるので（図５のＳｃ４）、設定されているテンポに応じた時間間隔で割込信号ＩＮＴが発生する。割り込み信号ＩＮＴが発生すると、ＣＰＵ３は、発生した時点で実行していた処理を中断し、図１４に示す処理を行う。
【００８８】
すなわちタイマインタラプトフラグＴＭＩＦを１に設定し（Ｓｎ１）、スタート許可フラグＳＴＥが０かどうか判断する（Ｓｎ２）。ＳＴＥが０のときは、自動演奏は行われず、１になったことを確認して、自動演奏が行われる。ＳＴＥが０である期間は、自動演奏スタートスイッチが押されてから、タイマ割込がある毎にカウントするカウンタ値が、あらかじめ設定されている先行クロックサイズに等しくなるまでの期間に一致する。タイマ割込の間隔は、テンポ設定値によって変化するので、ＳＴＥが０である期間も変化する。ＳＴＥは自動演奏がストップしているときは０でなくてはいけないので、初期設定（Ｓｍ１）や、自動演奏ストップスイッチが押されたときに、０に設定される。従って、自動演奏スタートスイッチが押された直後はＳＴＥは０のままである。
【００８９】
ＳＴＥが０のときは（Ｓｎ２で「ｙｅｓ」）、レジスタＯＦＣＴを１進め（Ｓｎ３）、先行クロックサイズに等しくなったとき（Ｓｎ４で「ｙｅｓ」）、ＳＴＥを１にする（Ｓｎ５）。Ｓｎ２でＳＴＥが１のとき（判断が「ｎｏ」）、Ｓｎ４でＯＦＣＴが先行クロックサイズに達していないとき（判断が「ｎｏ」）、Ｓｎ５の処理が終了したときは、タイマ割込が起こった時点の処理にもどる。レジスタＯＦＴＣは初期設定（Ｓｍ１）のときの他、自動演奏ストップスイッチが押されたときも０にリセットされる。
【００９０】
なお先行クロックサイズは、トリガー駆動トラックに記憶されている自動演奏データ内の最小の音符の半分のサイズ以下に設定されることが望ましい。もし先行クロックサイズが大きい場合は、最適な位置でトリガーが発生しても、イベントバッファがすでに書き変わっていて本来の自動演奏ができないこともあり得る。また、演奏者が上達するにつれて先行クロックサイズを変更して、条件を厳しくすることもできる。
【００９１】
メインルーチン（図１３）の自動演奏処理（Ｓｍ４）をＣＰＵ３が実行するときは、図１５に示すサブルーチンを実行する。この処理はトリガー駆動トラックのキーオンデータを検索してイベントバッファに格納する処理と、ノーマルトラック処理、トリガートラックのキーオン処理を除いた処理を行うプログラムである。
【００９２】
Ｓｐ１ではタイマ割込があったことを示すタイマインタラプトフラグＴＭＩＦが１かどうか判断し、１でないときはすぐにメインルーチンにもどる（Ｓｐ１で「ｎｏ」）が、１のときは（Ｓｐ１で「ｙｅｓ」）Ｓｐ２〜Ｓｐ１４の処理を行う。すなわち、ＴＭＩＦを０に設定し（Ｓｐ２）、キーオンデータ検索用のデュレーションレジスタＤＴｋを１減じて（ＳＰ３）、０になったかどうか判断する（Ｓｐ４）。この判断が「ｙｅｓ」となったときには、キーオンデータ検索用のポインタＰＴｋを１進め（Ｓｐ５）、ＰＴｋをアドレスとしてトリガー駆動トラックの自動演奏データを読み（Ｓｐ６）、そのデータがデュレーションデータかどうか判断し（Ｓｐ７）、判断が「ｙｅｓ」のときはデュレーションデータをキーオンデータ検索用のデュレーションレジスタＤＴｋに格納し（Ｓｐ１１）、Ｓｐ１２に進む。
【００９３】
Ｓｐ７にて判断が「ｎｏ」の場合、そのデータがキーオンデータかどうか判断し（Ｓｐ８）、キーオンデータの場合はＲＡＭ６に設定されているイベントバッファに記憶し（Ｓｐ９）、イベントバッファからの読出しを許可するフラグＲＥを１に設定する（Ｓｐ１０）。その後、Ｓｐ５にもどる。Ｓｐ８にて、読み出されたデータがキーオンデータでないと判断されたときは（「ｎｏ」）、Ｓｐ５にもどる。Ｓｐ４にて、ＤＴｋが０でないと判断したときは（「ｎｏ」）、Ｓｐ１２に進む。Ｓｐ１２ではＳＴＥが１かどうか判断し、１のときは（「ｙｅｓ」）、ノーマルトラック処理（Ｓｐ１３）、トリガートラック処理（Ｓｐ１４）を行って、メインルーチンに戻る。
【００９４】
Ｓｐ１２でＳＴＥが１でないときは、Ｓｐ１３、Ｓｐ１４の処理を行わず、メインルーチンに戻る。したがってＳＴＥ＝０のあいだは、通常のノーマルトラックの自動演奏は行われず、Ｓｐ５〜Ｓｐ１１の処理によって、トリガー駆動トラックのキーオンデータ検索が先行して行われる。
【００９５】
なお、ノーマルトラック処理（Ｓｐ１３）については、第１の実施例（図１０）と同様であるので説明を省略する。トリガートラック処理（Ｓｐ１４）を実行するときには、図１６に示すサブルーチンを実行する。この処理はキーオンデータを処理しないということを除いては、ノーマルトラックの処理と同じである。すなわち、キーオンを除いた、キーオフ、プログラムチェンジ、コントロールチェンジなどのデータは、本来の自動演奏（トリガー駆動トラックをノーマルトラックとして自動演奏した場合）で処理するタイミングと同じである。
【００９６】
Ｓｑ１では、トリガー駆動トラックのデュレーションレジスタＤＴｔを１減じて、０になったかどうか判断し（Ｓｑ２）、０の場合は（「ｙｅｓ」）、Ｓｑ３〜Ｓｑ８の処理を行い、０でない場合は（「ｎｏ」）、これらの処理を行わず、リターンする。
【００９７】
Ｓｑ３ではトリガー駆動トラックの自動演奏データ読出しのためのポインタＰＴｔを１進め、ＰＴｔをアドレスとしてトリガー駆動トラックの自動演奏データを読み（Ｓｑ４）、そのデータがデュレーションデータの場合は（Ｓｑ５で「ｙｅｓ」）、ＤＴｔにそのデュレーションデータを格納し（Ｓｑ８）、リターンする。またＳｑ５で「ｎｏ」と判断されたときは、読み込まれたデータがキーオン以外のイベントデータの場合は（Ｓｑ６で「ｙｅｓ」）、そのイベントデータに対応する処理を行い（Ｓｑ７）、Ｓｑ３にもどる。Ｓｑ６での判断が「ｎｏ」のときは、読み込まれたデータはキーオンデータなので、対応する処理を行わず、Ｓｑ３にもどる。
【００９８】
メインルーチンのトリガー処理（Ｓｍ５）を行うときは、図１７に示すサブルーチンを実行する。この処理にて、演奏者によって発生されたトリガーに応じて、イベントバッファに格納されているキーオンデータを読出し、キーオン処理する。
【００９９】
演奏者によってトリガーが発生されると、Ｓｒ１の判断が「ｙｅｓ」となり、Ｓｒ２にてフラグＲＥが１かどうか判断する。トリガーが発生しないとき（Ｓｒ１で「ｎｏ」）やＲＥが１でないとき（Ｓｒ２で「ｎｏ」）はメインルーチンに戻る。Ｓｒ２でＲＥが１と判断されるときは（「ｙｅｓ」）、イベントバッファにキーオンデータが格納されていることをしめしているので、Ｓｒ３にてそのデータを読出し、トリガーの発生とともに発生するタッチ情報にて、キーオンデータに含まれているタッチデータを変更し（Ｓｒ４）、それらのデータを用いてキーオン処理（Ｓｒ５）を行い、音源回路７に発音指示する。
【０１００】
その後、Ｓｒ６にてＲＥを１にして、あらたなキーオンデータがイベントバッファに格納されるまで、Ｓｒ３〜Ｓｒ５の処理を行わないようにして、メインルーチンに戻る。Ｓｒ６の処理はトリガー発生器１でチャタリングや、演奏者が誤って、短い時間内に何回かトリガーを発生したばあいでも、同じキーオンデータを読出すことを防ぐ。
【０１０１】
第２の実施例によれば、キーオンデータのみ先行して検索し、イベントバッファを書き換えていくので、演奏者がトリガーを発生を中断し、途中から再開した場合でも、ノーマルトラックの進行位置に応じたキーオンデータがイベントバッファから読み出されるので、いつでも最適な合奏を楽しむことができる。またキーオン以外のイベントデータは、ノーマルトラックと同様に処理されるので、トリガーの発生の有無に関わらず、キーオフ、音色変更等が行われるので、音が消音されなかったり、音色が変更されない等の不都合を回避することができる。
【０１０２】
次に第３の実施例について、説明する。第３の実施例は、トリガーの発生によって自動演奏を行う自動演奏データを複数のフレーズに分けて、１回のトリガーの発生について１つのフレーズを再生するようにする。第１、第２の実施例では、トリガー駆動トラックはノーマルトラックと同じものを利用したが、第３の実施例ではトリガー駆動専用のトラックを持っている。トリガー駆動専用トラックのデータフォーマットは図２０に示すように、フレーズ番号データＰｈ１、デュレーションデータＤ１、読出し禁止データＮＲ、デュレーションデータＤ２、フレーズ番号データＰｈ２・・・というデータのならびになっている。
【０１０３】
この実施例では、フレーズ番号データが読み出されてから、読出し禁止データＮＲが読み出されるまでのデュレーションデータに対応する期間がトリガー受け付け期間に相当し、読出し禁止データＮＲが読み出されてから、次のフレーズ番号データが読み出されるまでのデュレーションデータに対応する期間がトリガー受け付け禁止期間である。
【０１０４】
具体的には、図２１に示すように、自動演奏がスタートしてから最初のデュレーションデータＤ１に相当する期間がトリガー受け付け期間に相当し、この期間内に、演奏者によってトリガーが発生すると、フレーズ１（Ｐｈ１）の自動演奏データの読出しを開始するように指示される。
図２１のデュレーションデータＤ２の期間はトリガー受け付け禁止期間であり、ノーマルトラックの自動演奏位置が、この期間内にあるときは、トリガーは受け付けられない。この期間中イベントバッファにはＮＲというデータが格納されている。
【０１０５】
次に、デュレーションデータＤ３の期間に入り、この期間中にトリガーが発生するとフレーズ２（Ｐｈ２）の自動演奏の開始が指示される。このように、自動演奏のスタートが指示されてから交互にトリガーの受け付け期間と受け付け禁止期間がデュレーションデータＤ１、Ｄ２、Ｄ３、Ｄ４の時間間隔で繰り返される。
【０１０６】
各フレーズの自動演奏データは、ノーマルトラックの自動演奏データを複数に分割したものと考えてよく、図２２に示すように、ＲＯＭ５に記憶されている。それぞれのフレーズは区切りのよいところで分割されているため、各フレーズの演奏時間は同一でなくてよい。フレーズの自動演奏処理自体はノーマルトラックにおける自動演奏処理と同じである。フレーズの自動演奏は、そのフレーズの最後を表すＥＯＦデータを読み込んだところで停止する。
【０１０７】
第３の実施例の動作をフローチャートにて説明する。なお、メインルーチンは第２の実施例の図１３と共用する。またタイマ割込処理は第１の実施例の図４と共用し、説明は省略する。すなわちメインルーチンの自動演奏処理（Ｓｍ４）、トリガー処理（Ｓｍ５）のみ第１、第２の実施例と異なるので、図２３〜図２６を用いて説明する。
【０１０８】
メインルーチンの自動演奏処理（Ｓｍ４）を実行するときは、図２３のサブルーチンを呼び出す。このサブルーチンではノーマルトラック処理、フレーズ番号データやＮＲデータをイベントバッファに格納する処理やフレーズ自動演奏処理を行う。
【０１０９】
Ｓｓ１でＴＭＩＦが１かどうか判断し、「ｙｅｓ」と判断されたときは、ＴＭＩＦを０に設定し（Ｓｓ２）、ノーマルトラック処理（Ｓｓ３）を行う。ノーマルトラック処理はトリガーで制御しないトラックの自動演奏を行う。トリガー駆動専用トラック処理（Ｓｓ４）を実行するときは、図２４に示すサブルーチンを実行する。このサブルーチンはトリガー受け付け期間になったときにフレーズ番号データをイベントバッファに格納する処理や、トリガー受け付け禁止期間になったときにＮＲデータをイベントバッファに格納するなどの処理を行う。またトリガーの受け付けや禁止期間になったことを演奏者に伝えるために表示処理等を行う。
【０１１０】
Ｓｔ１では、デュレーションデータＤＴｔを１減算し、Ｓｔ２で０になったかどうか判断し、判断が「ｙｅｓ」のときは、Ｓｔ３にてポインタＰＴｔを１進め、ＰＴｔをアドレスとしてデータを読む（Ｓｔ４）。そのデータがＮＲかどうか判断し（Ｓｔ５）、判断が「ｙｅｓ」のときは、Ｓｔ１０に進む。Ｓｔ１０では、イベントバッファにフレーズ番号データが格納されているときは、対応するフレーズの自動演奏データのうち、キーオン、キーオフ、デュレーションデータを無視して実行し、音色変更などの指示だけを実行する。その後、ＮＲをイベントバッファに格納し（Ｓｔ１１）、トリガー受け付け禁止になったことを識別する表示を行う（Ｓｔ１２）。その後、自動演奏処理ルーチン（図２３）に戻る。
Ｓｔ２での判断が「ｎｏ」の場合は、リターンする。
【０１１１】
Ｓｔ５で、Ｓｔ４で読んだデータがＮＲでないと判断されたときは、Ｓｔ６にて、さらにフレーズ番号データかどうか判断される。そのデータがフレーズ番号データの場合には、「ｙｅｓ」となるので、Ｓｔ７にて、そのフレーズ番号データをイベントバッファに格納する。そして、トリガー受け付け期間を表す表示をディスプレイに指示する（Ｓｔ８）。その後、リターンする。
【０１１２】
Ｓｔ７の判断が「ｎｏ」となったときには、そのデータはデュレーションデータなので、レジスタＤＴｔにそのデュレーション値を格納する（Ｓｔ９）。その後、リターンする。
【０１１３】
自動演奏処理（図２３）のフレーズ自動演奏処理（Ｓｓ５）を実行するときは、図２５に示すサブルーチンを実行する。このサブルーチンはフレーズの自動演奏処理を行うもので、処理自体はノーマルトラックの自動演奏処理と変わらない。Ｓｕ１では、トリガーによってフレーズの再生が行われているかどうかを示すフラグＰＥＦが１かどうか判断し、１でないときは、すぐに自動演奏処理（図２３）にもどる。また１のときは、デュレーションレジスタＤＴｐを１減じて（Ｓｕ２）、０になったかどうか判断し（Ｓｕ３）、０でないときは、リターンし、０のときは、ポインタＰＴｐを１進めて（Ｓｕ４）、そのＰＴｐをアドレスとしてデータを読む（Ｓｕ５）。
【０１１４】
Ｓｕ６ではそのデータがイベントデータ、デュレーションデータ、ファイルエンドを示すＥＯＦデータかどうか判断し、その結果によって処理を振り分ける。そのデータがイベントデータの場合は、そのイベントデータに対応した処理を行い（Ｓｕ７）、Ｓｕ４に戻る。そのデータがデュレーションデータの場合は、ＤＴｐにそのデュレーションデータを格納し（Ｓｕ８）、リターンする。また、そのデータがＥＯＦの場合は、フラグＰＥＦを０にして（Ｓｕ９）、リターンする。
【０１１５】
メインルーチン（図１３）にて、トリガー処理（Ｓｍ５）を実行するときは、図２６に示す、サブルーチンを実行する。このサブルーチンはトリガーがあったときに、イベントバッファからフレーズ番号データを読出し、そのフレーズに対応するアドレスを設定する処理等を行う。
【０１１６】
Ｓｖ１では、トリガーが発生したかどうか判断し、「ｎｏ」のときは、メインルーチンにリターンする。判断が「ｙｅｓ」の場合は、イベントバッファからデータを読出し（Ｓｖ２）、そのデータがフレーズ番号データかどうか判断する（Ｓｖ３）。判断が「ｎｏ」の場合は、リターンする。判断が「ｙｅｓ」の場合は、フラグＰＥＦが１かどうか判断し（Ｓｖ４）、「ｙｅｓ」のときは、フレーズの再生中にトリガーが発生したことになるので、現在実行中のフレーズをすぐに終了させるため、キーオン、デュレーションデータを無視して実行し（Ｓｖ６）、Ｓｖ７に進む。
【０１１７】
Ｓｖ４での判断が「ｎｏ」のときはＰＥＦを１にして（Ｓｖ５）、Ｓｖ７に進む。Ｓｖ７では、ポインタＰＴｐをＳｖ２で読み出した、フレーズ番号データに対応したフレーズの先頭アドレスに設定し、デュレーションレジスタＤＴｐを初期値である１に設定する（ＳＶ８）。そして、ＮＲをイベントバッファに格納し（Ｓｖ９）同じトリガー受け付け期間内に２回以上トリガーが発生した場合に、Ｓｖ４〜Ｓｖ９の処理が複数回行われることのないようにする。その後、メインルーチンに戻る。
【０１１８】
第３の実施例は、トリガー受け付け期間をあらかじめ決められているため、第１、第２の実施例に比べて処理が簡単になるという利点がある。
ディスプレイにトリガー受け付け期間を表示するので、演奏者は、トリガー受け付け期間に入ってからの大きな拍のタイミングでトリガーを発生させればよいので、演奏しやすくなる。
【０１１９】
上述した実施例は次のような変形が可能である。
各実施例では、複数の演奏パート（トラック）のうちの１つをトリガー駆動トラックとしたが、複数の演奏者が演奏できるように、複数のトリガー発生器を用意し、これに対応して複数のトリガー駆動トラックを駆動するようにすれば、合奏が楽しめる。
【０１２０】
また、各実施例にトリガーイベントの発生タイミングを記憶・再生する装置を付加することにより、自分の演奏が、ノーマルトラックの演奏ととどれだけズレていたかを聴感的に確認することができる。さらにディスプレイに楽譜を表示させ、そこにトリガーを発生させたタイミングを表示させるようにすれば、演奏者はトリガーを発生させたタイミングが本来のタイミングとどれだけズレているかを視覚的に確認できる。
【０１２１】
第３の実施例では、トリガーの受け付け期間だけを表示したが、さらにディスプレイに楽譜を表示させ、自動演奏の進行状況とあわせて、トリガーをかけるべきタイミングを表示するようにすれば、初心者でも簡単に演奏が可能となる。
【０１２２】
第３の実施例では、トリガー駆動専用トラックのデータをイベントバッファに記憶させるようにしたが、イベントバッファを備えず、トリガーの発生する毎に、トリガー駆動専用トラックのトリガーが発生した時点のアドレスのデータを読み、読み出されたデータによってフレーズ再生処理を行うようにしてもよい。
【０１２３】
第１の実施例ではトリガーをかけた場合の再生単位が小節単位だったが、１／２小節、１／３小節、あるいは２小節等の単位でもよい。またそれらを選択できるようにしてもよい。
【０１２４】
第２実施例ではキーオンデータのみをイベントバッファに格納したが、キーオンとキーオフ、そのデュレーションデータを一組としてイベントバッファに格納してもよい。
【０１２５】
第３の実施例では、トリガー専用トラックにフレーズ番号を記憶して、これをもとに演奏すべきフレーズのアドレスを求めていたが、これに限らず、演奏すべきフレーズのアドレスをそのまま記憶してもよい。
【０１２６】
【発明の効果】
この発明による自動演奏装置によれば、操作者の操作によりトリガー信号を発生するトリガー信号発生手段と、トリガー信号でコントロールするパートとトリガー信号でコントロールしないパートとを有する複数のパート分の自動演奏データを記憶する記憶手段と、トリガー信号でコントロールするパートの自動演奏データについて、トリガー信号が発生したときに所定の限られた自動演奏データ単位で読み出されるべき自動演奏データの読出し開始位置を楽曲の進行に従って移動させておく読出し開始位置移動手段とを設け、トリガー信号でコントロールしないパートについては、自動演奏手段により、楽曲の進行に従って順次自動演奏データを読み出して楽音を発生する。一方、トリガー信号でコントロールするパートについては、読出し制御手段により、トリガー信号が発生したことに基づいて、読出し開始位置移動手段で移動された読出し開始位置から所定の限られた自動演奏データを読み出すように制御し、トリガー信号でコントロールするパートの自動演奏データが読出し制御手段によって読み出されたときは、自動演奏手段により、当該自動演奏データによる楽音を発生する。また、ディスプレイには、自動演奏の進行状況と併せて、トリガーをかけるべきタイミングが表示される。従って、操作者は、トリガー信号でコントロールしないパートの演奏を聴きながら、初心者でも簡単に演奏を楽しむことができる。
【図面の簡単な説明】
【図１】本発明による第１〜第３実施例の構成を示すブロック図である。
【図２】（ａ）は、図１のトリガー発生器１の構成例を示すブロック図であり、（ｂ）は、図１のトリガー発生器１の別の構成例を示すブロック図である。
【図３】第１実施例のメインルーチンを示すフローチャートである。
【図４】第１実施例のタイマ割込処理サブルーチンを示すフローチャートである。
【図５】第１実施例のパネル処理サブルーチンを示すフローチャートである。
【図６】第１実施例の読み出し許可処理サブルーチンを示すフローチャートである。
【図７】第１実施例のトリガー処理サブルーチンを示すフローチャートである。
【図８】第１実施例のポインタ移動処理サブルーチンを示すフローチャートである。
【図９】第１実施例の自動演奏処理サブルーチンを示すフローチャートである。
【図１０】第１実施例のノーマルトラック処理サブルーチンを示すフローチャートである。
【図１１】第１実施例のトリガー駆動トラック処理サブルーチンを示すフローチャートである。
【図１２】第１実施例において設定されるトリガー受け付け期間を説明するためのタイムチャートである。
【図１３】第２実施例及び第３実施例共通のメインルーチンを示すフローチャートである。
【図１４】第２実施例におけるタイマ割込処理サブルーチンを示すフローチャートである。
【図１５】第２実施例における自動演奏処理サブルーチンを示すフローチャートである。
【図１６】第２実施例におけるトリガートラック処理サブルーチンを示すフローチャートである。
【図１７】第２実施例におけるトリガー処理サブルーチンを示すフローチャートである。
【図１８】第１及び第２実施例におけるＲＯＭ５に記憶される演奏データの内容を示すメモリマップである。
【図１９】第１及び第２実施例におけるＲＯＭ５に記憶される小節番号とクロック数の関係を示す小節サイズテーブルである。
【図２０】第３の実施例のトリガー駆動専用トラックのデータフォーマットを示す図である。
【図２１】第３実施例におけるトリガー受け付け期間と受け付け禁止期間の交互の生起を示す図である。
【図２２】第３実施例におけるトリガー駆動トラック用のフレーズデータのフォーマットを示す図である。
【図２３】第３実施例の自動演奏処理サブルーチンを示すフローチャートである。
【図２４】第３実施例のトリガー駆動専用トラック処理サブルーチンを示すフローチャートである。
【図２５】第３実施例のフレーズ自動演奏処理サブルーチンを示すフローチャートである。
【図２６】第３実施例のトリガー処理サブルーチンを示すフローチャートである。
【符号の説明】
１：トリガー発生器、２：トリガーＩ／Ｆ（インターフェース）、３：ＣＰＵ（中央処理装置）、４：タイマ、５：ＲＯＭ（読出専用メモリ）、６：ＲＡＭ（ランダム−アクセス−メモリ）、７：音源回路、８：サウンドシステム、９：パネル操作子、１０：パネルＩ／Ｆ（インターフェース）、１１：ディスプレイ、１２：ディスプレイＩ／Ｆ（インターフェース）、１３：アドレス・データバス。
【図１】
0003632606.tif 000002
【図２】
0003632606.tif 000003
【図３】
0003632606.tif 000004
【図４】
0003632606.tif 000005
【図５】
0003632606.tif 000006
【図６】
0003632606.tif 000007
【図７】
0003632606.tif 000008
【図８】
0003632606.tif 000009
【図９】
0003632606.tif 000010
【図１０】
0003632606.tif 000011
【図１１】
0003632606.tif 000012
【図１２】
0003632606.tif 000013
【図１３】
0003632606.tif 000014
【図１４】
0003632606.tif 000015
【図１５】
0003632606.tif 000016
【図１６】
0003632606.tif 000017
【図１７】
0003632606.tif 000018
【図１８】
0003632606.tif 000019
【図１９】
0003632606.tif 000020
【図２０】
0003632606.tif 000021
【図２１】
0003632606.tif 000022
【図２２】
0003632606.tif 000023
【図２３】
0003632606.tif 000024
【図２４】
0003632606.tif 000025
【図２５】
0003632606.tif 000026
【図２６】
0003632606.tif 000027