(57)【要約】【課題】演奏のタイミングだけで自動演奏を行う場合であっても、演奏者の和音演奏やアルペジオ演奏が反映できるとともに、自然な感じの演奏が実現できるようにする。【解決手段】ＣＰＵ１は、和音の楽音データを有する特定のパート、および他のパートからなる複数のパートで構成された自動演奏曲を曲メモリ５から読み出して、特定のパートにおける複数の音高を発音の候補音高として設定し、鍵盤６において少なくとも１つの鍵の演奏結果に基づいて、候補音高の中から選択した音高又は選択した音高をオクターブ単位で修正した音高を発音すべき音高として指定して、音源８に転送する。【選択図】        図１
2004177893.tif 000002
【特許請求の範囲】
【請求項１】
演奏を行うための複数の操作子と、
和音の楽音データを有する特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において前記特定のパートにおける複数の音高を発音の候補音高として設定する候補音高設定手段と、
少なくとも１つの操作子の演奏結果に基づいて前記候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する発音音高指定手段と、
を備えた楽音演奏装置。
【請求項２】
前記候補音高設定手段は、前記特定のパートにおけるコードデータに基づいて変換した複数の音高を前記候補音高として設定することを特徴とする請求項１記載の楽音演奏装置。
【請求項３】
前記発音音高指定手段は、前記候補音高の中から未発音の音高を選択することを特徴とする請求項１記載の楽音演奏装置。
【請求項４】
前記発音音高指定手段は、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、前回指定した音高よりも高い未発音の音高又は低い未発音の音高を前記候補音高の中から選択することを特徴とする請求項３記載の楽音演奏装置。
【請求項５】
前記発音音高指定手段は、前記候補音高の中に未発音の音高がない場合には、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、すでに選択した音高を１オクターブアップ又は１オクターブダウンする修正を行なって発音すべき音高として指定することを特徴とする請求項４記載の楽音演奏装置。
【請求項６】
前記発音音高指定手段は、予め設定された基準のオクターブと操作子の演奏位置のオクターブとが異なる場合には、前記基準のオクターブと前記演奏位置のオクターブとのオクターブ差に応じて、前記候補音高の中から選択した音高のオクターブを修正して発音すべき音高として指定することを特徴とする請求項１記載の楽音演奏装置。
【請求項７】
前記候補音高設定手段は、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートにおいて、予め設定されている和音認定のための所定時間が経過するごとにその所定時間内における最初のノートオンのイベントから最後のノートオンのイベントまでの音高を候補音高として設定することを特徴とする請求項１記載の楽音演奏装置。
【請求項８】
前記発音音高指定手段によって指定された音高の発音開始時間まで他のパートの音高の発音開始時間を遅延させる発音遅延手段をさらに備えたことを特徴とする請求項７記載の楽音演奏装置。
【請求項９】
前記候補音高設定手段は、前記和音認定のための所定時間が経過した後にさらに所定時間が経過したときは設定中のすべての候補音高を消去することを特徴とする請求項７記載の楽音演奏装置。
【請求項１０】
コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において前記コードデータに基づいて変換した複数の音高を候補音高として設定する第１のステップと、
複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて前記候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第２のステップと、
を有する楽音演奏処理のプログラム。
【請求項１１】
コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定する第１のステップと、
複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて前記候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第２のステップと、
を有する楽音演奏処理のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、楽音演奏装置および楽音演奏処理のプログラムに関する。
【０００２】
【従来の技術】
従来の楽音演奏装置の中には、押鍵に応じて分散和音であるアルペジオをアルペジオパターンに基づいて生成する機能を持つものがある。このような楽音演奏装置はアルペジエータと称される。この種のアルペジエータは、アルペジオパターンとして、複数のキー番号とその発音タイミングが記憶されている。一方、同時に押鍵された複数のノート番号に所定のルールにしたがって番号を割り振り、アルペジオパターン中のキー番号に対応した番号が割り振られているノート番号を、その発音タイミングにおいて発生させるようにして、押鍵音を元にアルペジオを発生している。
【０００３】
しかし、アルペジオパターンを作成した意図の通りに発音させるには、演奏者が特定の複数キーを正確に押鍵する必要がある。そこで、どのアルペジオパターンを選んだ場合であっても、そのアルペジオパターンの意図を再現することができ、かつ押鍵数を増加させることにより新しい音を随時付加することができ、更に、押鍵数が不足しているときの代理発音を所望の音で安定して行うような提案がなされている。
【０００４】
この提案のアルペジオ生成装置によれば、第１の数のアルペジオノート情報および第２の数のノートについてのアルペジオ発音タイミング情報から成るアルペジオデータを記憶する記憶手段と、演奏進行に伴い第３の演奏ノート情報を入力する手段と、演奏ノート情報の入力に応じて、記憶手段からアルペジオノート情報およびアルペジオ発音タイミング情報を読み出す手段と、読み出されたアルペジオノート情報、入力された演奏ノート情報、および、読み出されたアルペジオ発音タイミング情報に基づいて第２の数のノート情報から成るアルペジオを生成する手段であって、第３の数が第１の数以下の場合、該アルペジオノート情報および該アルペジオ発音タイミング情報に基づいてアルペジオを生成し、第３の数が第１の数よりも大きい場合、該アルペジオノート情報、該演奏ノート情報および該アルペジオ発音タイミング情報に基づいてアルペジオを生成する（特許文献１参照）。
【０００５】
【特許文献１】
特開平２００１−２２３５４号公報（段落番号「０００２」〜「０００７」）
【０００６】
【発明が解決しようとする課題】
しかしながら従来の楽音演奏装置においては、予め決められている固定のアルペジオ発音タイミング情報のアルペジオパターンで発音されるので、演奏のタイミングだけで自動演奏を行う場合に、自然な感じの演奏にならない上、演奏者の和音演奏やアルペジオ演奏が反映されないという問題があった。
また、従来の楽音演奏装置においては、スタンダードＭＩＤＩファイル（ＳＭＦ）のように、イベントデータの中にコードデータを持たず、ノートデータとタイムデータとで和音を構成しているものについては、演奏のタイミングだけで自動演奏を行う場合に、和音を認識することができないという問題があった。
【０００７】
本発明の課題は、演奏のタイミングだけで自動演奏を行う場合であっても、自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できるようにすることである。
また、本発明の課題は、スタンダードＭＩＤＩファイルのように、イベントデータの中にコードデータを持たない場合であっても、発音開始時間とイベントとで構成されている和音を容易に認識して自動演奏ができるようにすることである。
【０００８】
【課題を解決するための手段】
本発明の楽音演奏装置は、演奏を行うための複数の操作子（実施形態においては、図１の鍵盤６に相当する）と、和音の楽音データを有する特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において特定のパートにおける複数の音高を発音の候補音高として設定する候補音高設定手段（実施形態においては、図１のＣＰＵ１に相当する）と、少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する発音音高指定手段（実施形態においては、図１のＣＰＵ１に相当する）とを備えた構成になっている。
【０００９】
本発明において、候補音高設定手段は、特定のパートにおけるコードデータに基づいて変換した複数の音高を候補音高として設定するような構成にしてもよい。
【００１０】
本発明において、発音音高指定手段は、候補音高の中から未発音の音高を選択する構成にしてもよい。
さらにこの場合において、発音音高指定手段は、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、前回指定した音高よりも高い未発音の音高又は低い未発音の音高を候補音高の中から選択する構成にしてもよい。
さらにこの場合において、発音音高指定手段は、候補音高の中に未発音の音高がない場合には、今回操作された操作子に対応する音高が前回操作された操作子に対応する音高より高い場合又は低い場合に応じて、すでに選択した音高を１オクターブアップ又は１オクターブダウンする修正を行なって発音すべき音高として指定する構成にしてもよい。
【００１１】
本発明において、発音音高指定手段は、予め設定された基準のオクターブと操作子の演奏位置のオクターブとが異なる場合には、基準のオクターブと演奏位置のオクターブとのオクターブ差に応じて、候補音高の中から選択した音高のオクターブを修正して発音すべき音高として指定する構成にしてもよい。
【００１２】
本発明において、候補音高設定手段は、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートにおいて、予め設定されている和音認定のための所定時間（実施形態においては、窓時間に相当する）が経過するごとにその所定時間内における最初のノートオンのイベントから最後のノートオンのイベントまでの音高を候補音高として設定する構成にしてもよい。
この場合において、発音音高指定手段によって指定された音高の発音開始時間まで他のパートの音高の発音開始時間を遅延させる発音遅延手段（実施形態においては、図１のＣＰＵ１に相当する）をさらに備えた構成にしてもよい。
あるいは、候補音高設定手段は、和音認定のための所定時間が経過した後にさらに所定時間が経過したときは設定中のすべての候補音高を消去する構成にしてもよい。
【００１３】
本発明の楽音演奏処理のプログラムは、コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲においてコードデータに基づいて変換した複数の音高を候補音高として設定する第１のステップと、複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第２のステップとを有する。この場合において、第１及び第２のステップは、実施形態においては、図１のＣＰＵ１によって実行されるフローチャートの処理機能に相当する。
【００１４】
また、本発明の楽音演奏処理のプログラムは、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定する第１のステップと、複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第２のステップとを有する。この場合において、第１及び第２のステップは、実施形態においては、図１のＣＰＵ１によって実行されるフローチャートの処理機能に相当する。
【００１５】
【発明の実施の形態】
以下、本発明による楽音演奏装置の第１の実施形態ないし第４の実施形態について、電子鍵盤楽器を例に採って、図を参照して説明する。
図１は、各実施形態における楽音演奏装置のシステム構成を示すブロック図である。この図において、ＣＰＵ１は、システムバス２を介して、ＲＯＭ３、ＲＡＭ４、曲メモリ５、鍵盤６、スイッチ部７、および音源８に接続され、これら各部との間で、コマンドおよびデータを授受しながら、この装置全体を制御する。
【００１６】
ＲＯＭ３は、ＣＰＵ１によって実行される楽音発生処理のプログラムを含む制御プログラムや、この装置の起動時のイニシャライズにおける初期データなどをあらかじめ記憶している。ＲＡＭ４は、ＣＰＵ１のワークエリアであり、各種のレジスタやフラグ、鍵番号や音高のデータ、音源８に出力する発音および消音のコマンドを記憶するバッファが設けられている。曲メモリ５は、予め入力された自動演奏曲の楽音データを記憶している。鍵盤６は、押鍵をガイドする機能を具備し、演奏結果である鍵番号およびベロシティのデータをＣＰＵ１のキー検出走査により入力する。
スイッチ部７は、自動演奏を開始又は停止するスタート／ストップスイッチ（ＳＴＡＲＴ／ＳＴＯＰ・ＳＷ）、音色設定スイッチ、メロディパートを自動演奏するか、又は、コードパートを自動演奏するかを設定したり、１本の指でもコード演奏が可能なエニキー（Ａｎｙ  Ｋｅｙ）モードに設定するためのいくつかのモード設定スイッチなどで構成されている。ＣＰＵ１は、これら各パートを音源８の複数のチャンネルにおいて少なくとも１つのチャンネルに割り当てる。１つのパートを２つ以上のチャンネルに割り当てることもあるが、各実施形態において、コードパートを１つのチャンネル（これを「特定のチャンネル」という）に割り当てるものとする。
音源８は、ＣＰＵ１によるコマンドに基づいて楽音波形を生成し、接続されている発音回路９に送出する。発音回路９は、Ｄ／Ａ変換回路、増幅回路、スピーカなどで構成され、音源６からの楽音波形に応じて楽音を発生する。
【００１７】
次に、図２ないし図２４に基づいて第１の実施形態における楽音演奏装置について説明する。
図２は、エニキーモードに設定されている場合のＲＡＭ４のメモリマップを示している。
図２（１）は、発音する和音の候補となる候補音高を最大６個まで記憶するエリアであるＫｏｎｋｏ（０）〜（５）と、各エリアの候補音高が発音中か否かを示すフラグＯＮＦ（０）〜（５）のエリアとで構成された候補音高バッファ（ｋｏｈｏ  Ｂｕｆｆｅｒ）であり、各候補音高およびフラグはポインタＡ又はＡＰによって指定される。
図２（２）は、押鍵された鍵番号を最大１０個まで記憶するエリアであるＫｅｙ（０）〜（９）と、各鍵番号の発音のために指定される音高のエリアであるＳｏｎｋｏ（０）〜（９）とで構成されたエニキーバッファ（Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ）であり、各鍵番号および音高はポインタＷＰによって指定される。図２（３）は、最後すなわち前回に押鍵された鍵番号のエリアであるＬＫｅｙと、その鍵番号の発音のために指定された前回の音高のエリアであるＬｏｎｋｏとで構成されたラストバッファ（Ｌａｓｔ  Ｂｕｆｆｅｒ）である。
【００１８】
次に、第１実施形態における楽音演奏装置の動作について、ＣＰＵ１によって実行されるフローチャートに基づいて説明する。なお、この第１実施形態および他の実施形態においては、モード設定スイッチが和音のパートを自動演奏するモードに設定されている。さらに、１本の指の演奏によっても曲の自動演奏が可能なエニキーモードモードに設定されている。
【００１９】
図３はメインフローチャートであり、所定のイニシャライズ（ステップＡ１）の後、自動演奏処理（ステップＡ２）、鍵盤処理（ステップＡ３）、発音処理（ステップＡ４）、その他の処理（ステップＡ５）を繰り返し実行する。
図４は、タイマインタラプトのフローチャートであり、一定時間ごとのタイマインタラプトに応じて、レジスタＴの値をデクリメントする（ステップＡ６）。
【００２０】
図５ないし図８は、メインフローにおけるステップＡ２の自動演奏処理のフローチャートである。
図５において、スタート／ストップスイッチがオンされたか否かを判別し（ステップＢ１）、このスイッチがオンされたときは、自動演奏のフラグＳＴＦの値を反転する（ステップＢ２）。そして、ＳＴＦが「１」に反転したか否かを判別する（ステップＢ３）。すなわち、自動演奏開始になったか否かを判別する。ＳＴＦが「１」に反転した場合には、自動演奏データのスタートアドレスに読み出しのポインタを移動して（ステップＢ４）、曲メモリの自動演奏データの読み出しを行う（ステップＢ５）。
【００２１】
そして、読み出したデータが何か判別する（ステップＢ６）。データがタイムである場合には、そのデータをレジスタＴにストアして（ステップＢ７）、タイマインタラプトの禁止状態を解除する（ステップＢ８）。そして、メインフローに戻る。したがって、この後は一定時間経過ごとに図１のタイマインタラプト処理を実行する。
ステップＢ３において、ＳＴＦが「０」に反転した場合、すなわち、自動演奏停止の場合には、すべての発音を停止するためにオールノートオフ処理を行い（ステップＢ９）、タイマインタラプトを禁止状態にする（ステップＢ１０）。そして、メインフローに戻る。
【００２２】
ステップＢ６における判別結果で、読み出したデータがイベントである場合には、図６のフローにおいて、イベントのチャンネルが和音パート用の特定のチャンネルであるか否かを判別する（ステップＢ１１）。特定のチャンネルである場合には、さらにそのイベントがコードイベントであるか否かを判別する（ステップＢ１２）。コードイベントである場合には、そのコードデータに基づきコード和音構成の音高を生成する（ステップＢ１３）。そして、各和音構成の音高を図２（１）に示したｋｏｈｏ  ＢｕｆｆｅｒのＫｏｎｋｏ（０）〜（５）のエリアに順次ストアする（ステップＢ１４）。また、ストアした候補音高は未発音状態であるので、ＯＮＦ（０）〜（５）を「０（消音）」にリセットしておく（ステップＢ１６）。次に、Ｋｏｎｋｏ（０）〜（５）のエリアを指定するポインタを「０」にセットする（ステップＢ１６）。この後、アドレスポインタを進める（ステップＢ１７）。
ステップＢ１１においてイベントのチャンネルが特定のチャンネルでない場合、又はステップＢ１２において特定のチャンネルのイベントがコードイベントでない場合には、イベントを出力バッファに転送し（ステップＢ１８）、ステップＢ１６に移行して、アドレスポインタを進める。
【００２３】
図５のステップＢ１において、スタート／ストップスイッチがオンでない場合には、図７において、ＳＴＦが「１（自動演奏）」であるか否かを判別する（ステップＢ１９）。ＳＴＦが「１」である場合には、レジスタＴの値が「０」に達したか否かを判別する（ステップＢ２０）。ＳＴＦが「０（自動演奏停止）」である場合、又はＴが「０」に達していない場合には、メインフローに戻る。
Ｔが「０」に達したときは曲メモリ５の自動演奏データのアドレスを進める（ステップＢ２１）。そして、データがあるか否かを判別する（ステップＢ２２）。データがない場合には、ＳＴＦを「０」にリセットして（ステップＢ２３）、メインフローに戻る。一方、データがある場合には、そのデータを読み出し（ステップＢ２４）、読み出したデータは何か判別する（ステップＢ２５）。データがタイムである場合には、そのデータをＴにストアする（ステップＢ２６）。そして、メインフローに戻る。
【００２４】
ステップＢ２５において、読み出したデータがイベントである場合には、図８において、イベントのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する（ステップＢ２７）。特定のチャンネルである場合には、さらにそのイベントがコードイベントであるか否かを判別する（ステップＢ２８）。コードイベントであると判別したときは、そのコードデータに基づきコード和音構成の音高を生成する（ステップＢ２９）。そして、ｋｏｈｏ  Ｂｕｆｆｅｒをクリアして（ステップＢ３０）、各和音構成の音高を図２（１）に示したｋｏｈｏＢｕｆｆｅｒのＫｏｎｋｏ（０）〜（５）のエリアに順次ストアする（ステップＢ３１）。また、ストアした候補音高は未発音状態であるので、ＯＮＦ（０）〜（５）を「０」にリセットする（ステップＢ３２）。次に、Ｋｏｎｋｏ（０）〜（５）のエリアを指定するポインタＰを「０」にセットする（ステップＢ３３）。この後、図７のステップＢ２１に移行して、アドレスポインタを進める。
ステップＢ２７においてイベントのチャンネルが特定のチャンネルでない場合、又はステップＢ２８において特定のチャンネルのイベントがコードイベントでない場合には、イベントを出力バッファに転送し（ステップＢ３４）、図７のステップＢ２１に移行して、アドレスポインタを進める。
【００２５】
図９ないし図２３は、メインフローにおけるステップＡ３の鍵盤処理のフローチャートである。
図９において、鍵走査を行って（ステップＣ１）、鍵変化があるか否かを判別する（ステップＣ２）。鍵変化がない場合にはメインフローに戻るが、鍵変化があったときは、キー検出処理を行う（ステップＣ３）。キー検出処理は、図１３に示すように、オン（押鍵）された鍵番号をレジスタＫＥＹにストアする（ステップＣ１０１）。この鍵走査は鍵番号が小さい鍵すなわち低い音高の鍵の側から行う。したがって、和音パートの自動演奏のモードにおいては、例えば、発光ダイオードなどで押鍵する複数の鍵をガイドするが、１本の指でもコード演奏が可能なエニキーモードに設定されている場合には、演奏者が同時に複数の鍵を押鍵した場合でも、最も小さい鍵番号がＫＥＹにストアされる。
【００２６】
図９のステップＣ３におけるキー検出処理の後は、押鍵の強さを示すベロシティをレジスタＶＥＬＯＣＩＴＹにストアする（ステップＣ４）。次に、図２（２）のＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒのエリアを指定するポインタＷＰを「０」にセットして、ＷＰをインクリメントしながらＮＯＤＡＴＡ（空き）エリアを捜す。すなわち、Ｋｅｙ（ＷＰ）がＮＯＤＡＴＡであるか否かを判別し（ステップＣ６）、ＮＯＤＡＴＡでなく既にデータがストアされている場合には、ＷＰをインクリメントして次のエリアを指定する（ステップＣ７）。このとき、ＷＰの値が「１０」に達したか否かを判別する（ステップＣ８）。すなわち、すべてのエリアが空きでないか否かを判別する。ＷＰの値が「１０」未満である場合には、ステップＣ６においてＮＯＤＡＴＡのエリアを捜す。
【００２７】
Ｋｅｙ（ＷＰ）がＮＯＤＡＴＡである場合には、自動演奏処理における図６のステップＢ１６又は図８のステップＢ３３においてセットしたポインタＰの値をポインタＡＰにセットする（ステップＣ９）。Ｐはｋｏｈｏ  Ｂｕｆｆｅｒのエリアを指定するポインタであるので、その値の範囲は「０」から「５」までである。次に、ＡＰで指定するフラグＯＮＦ（ＡＰ）が「０（未発音）」であるか否かを判別する（ステップＣ１０）。ＯＮＦ（ＡＰ）が「１（発音中）」である場合には、ＡＰの値をインクリメントする（ステップＣ１１）。
【００２８】
そして、ＡＰの値が「６」に達したか否かを判別する（ステップＣ１２）。ＡＰの値が「６」に達したときは、ＡＰの値を「０」に戻す（ステップＣ１３）。次に、ＡＰの値がＰの値に一致したか否かを判別する（ステップＣ１４）。すなわち、ｋｏｈｏ  Ｂｕｆｆｅｒのすべての候補音高が発音中であるか否かを判別する。ＡＰの値がＰの値に一致しない場合には、ステップＣ１０においてＯＮＦ（ＡＰ）が「０」で未発音の候補音高を捜す。ＯＮＦ（ＡＰ）が「０」のエリアが存在する場合には、ＡＰ＋１の値をＰの値にセットする（ステップＣ１５）。すなわち、今回指定した未発音の候補音高は発音すべき音高として指定するので、次の押鍵に応じて発音すべき候補音高を予定する。
ステップＣ１４においてＡＰの値とＰの値とが一致して、すべての候補音高が既に発音中である場合には、ＡＰ＋１の値をＰに値としてセットする（ステップＣ１６）。すなわち、今回指定した候補音高が発音中であるので、次のエリアにある候補音高を指定する。
【００２９】
ステップＣ１５において、ＡＰ＋１の値をＰの値にセットした後は、図１０において、前回の鍵番号をストアするレジスタＬＫｅｙがＮＯＤＡＴＡ（空き）でないか否かを判別する（ステップＣ１７）。ＬＫｅｙがＮＯＤＡＴＡでなく、前回の音高がストアされている場合には、ＫＥＹにストアした音高がＬＫｅｙにストアされている音高より高いか又は同じであるか、すなわちＫＥＹの音高がＬＫｅｙの音高以上であるか、又は、ＫＥＹの音高がＬＫｅｙの音高より低いかを判別する（ステップＣ１８）。
【００３０】
ＫＥＹの音高がＬＫｅｙの音高以上である場合には、ポインタＡＰを「０」にセットして（ステップＣ１９）、ＡＰの値をインクリメントしながら、候補音高バッファにおける未発音の音高候補を検出する。すなわち、ＡＰで指定するエリアの発音フラグＯＮＦ（ＡＰ）が「０」であるか否かを判別する（ステップＣ２０）。ＯＮＦ（ＡＰ）が「０」である候補音高を検出したときは、そのＫｏｎｋｏ（ＡＰ）の音高が、前回発音した音高であるＬｏｎｋｏ以上であるか否かを判別する（ステップＣ２１）。
【００３１】
ステップＣ２０において、ＯＮＦ（ＡＰ）が「１（発音中）」である場合、又は、ステップＣ２１において、Ｋｏｎｋｏ（ＡＰ）の音高がＬｏｎｋｏの音高より低い場合には、ＡＰの値をインクリメントする（ステップＣ２２）。この後、ＡＰの値が「６」に達したか否かを判別する（ステップＣ２３）。ＡＰの値が「６」未満で、まだ検出するエリアが残っている場合には、ステップＣ２０に移行する。ステップＣ２１において、Ｋｏｎｋｏ（ＡＰ）の音高がＬｏｎｋｏの音高以上である場合には、ノート生成処理（１）を実行する（ステップＣ２４）。ノート生成処理（１）は、図１４のフローチャートに示すように、レジスタＮＯＴＥにＫｏｎｋｏ（ＡＰ）の音高を発音すべき指定の音高としてストアする（ステップＣ１０２）。
【００３２】
図１０において、ステップＣ２４のノート生成処理（１）の後は、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（１）を実行する（ステップＣ２５）。Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（１）は、図１６に示すように、ノート生成処理（１）でＮＯＴＥにストアしたＫｏｎｋｏ（ＡＰ）の音高を、図２（２）に示したＡｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるエリアであるＳｏｎｋｏ（ＷＰ）に、発音すべき指定の音高としてストアする（ステップＣ１０８）。次に、ステップＣ３のキー検出処理でＫＥＹにストアした鍵番号を、図２（２）に示したＡｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるエリアであるＫｅｙ（ＷＰ）にストアする（ステップＣ１０９）。そして、図１０のフローのステップＣ２６ａに移行する。
【００３３】
ステップＣ２６ａでは、Ｌａｓｔ  Ｂｕｆｆｅｒ入力処理（１）を実行する。Ｌａｓｔ  Ｂｕｆｆｅｒ入力処理（１）は、図２０に示すように、ＫＥＹにストアした鍵番号を、図２（３）に示したＬａｓｔ  ＢｕｆｆｅｒのＬＫｅｙのエリアにストアする（ステップＣ１１２）。次に、現在ポインタＡＰで指定しているＫｏｎｋｏ（ＡＰ）の候補音高を、図２（３）に示したＬａｓｔ  ＢｕｆｆｅｒのＬｏｎｋｏのエリアにストアする（ステップＣ１１３）。そして、図１０のフローのステップＣ２６ｂに移行する。
【００３４】
ステップＣ２６ｂでは、発音フラグＯＮＦ（ＡＰ）を「１」にセットする。次に、特定したチャンネルＣＨ、レジスタＮＯＴＥおよびＶＥＬＯＣＩＴＹにより、ノートオンコマンドを作成して（ステップＣ２７）、ＭＩＤＩの出力バッファに転送する（ステップＣ２８）。そして、メインフローに戻る。
【００３５】
図１０のステップＣ２３において、ＡＰの値が「６」以上で、図２（１）に示したｋｏｈｏ  Ｂｕｆｆｅｒのすべての候補音高が発音中である場合には、オクターブアップ処理を実行する（ステップＣ２９）。オクターブアップ処理は、図１９に示すように、まず図１５に示したノート生成処理（２）を実行する（ステップＣ１０４）。すなわち、ポインタＰで指定するＫｏｎｋｏ（Ｐ）の音高をレジスタＮＯＴＥにストアする。次に、ＮＯＴＥの音高を１オクターブアップする（ステップＣ１０５）。そして、図１０のステップＣ３０に移行する。
【００３６】
ステップＣ３０では、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（２）を実行する。Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（２）は、図１７に示すように、ポインタＰで指定する発音中のＫｏｎｋｏ（Ｐ）の音高を、図２（２）に示したＡｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるエリアであるＳｏｎｋｏ（ＷＰ）に、発音すべき指定の音高としてストアする（ステップＣ１１０）。次に、ステップＣ３のキー検出処理でＫＥＹにストアした鍵番号を、図２（２）に示したＡｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるエリアであるＫｅｙ（ＷＰ）にストアする（ステップＣ１１１）。そして、図１０のフローのステップＣ３１ａに移行する。
【００３７】
ステップＣ３１ａでは、Ｌａｓｔ  Ｂｕｆｆｅｒ入力処理（２）を実行する。Ｌａｓｔ  Ｂｕｆｆｅｒ入力処理（２）は、図２１に示すように、ＫＥＹにストアした鍵番号を、図２（３）に示したＬａｓｔ  ＢｕｆｆｅｒのＬＫｅｙのエリアにストアする（ステップＣ１１４）。次に、現在ポインタＰで指定しているＫｏｎｋｏ（Ｐ）の音高を、図２（３）に示したＬａｓｔ  ＢｕｆｆｅｒのＬｏｎｋｏのエリアにストアする（ステップＣ１１５）。そして、図１０のフローのステップＣ３１ｂに移行する。
【００３８】
ステップＣ３１ｂでは、発音フラグＯＮＦ（Ｐ）を「１」にセットする。次に、特定したパートＣＨ、レジスタＮＯＴＥおよびＶＥＬＯＣＩＴＹにより、ノートオンコマンドを作成して（ステップＣ２７）、ＭＩＤＩの出力バッファに転送する（ステップＣ２８）。そして、メインフローに戻る。すなわち、図２（１）に示したｋｏｈｏ  Ｂｕｆｆｅｒのすべての候補音高が発音中で、かつ、今回の押鍵の鍵番号が前回の押鍵の鍵番号以上である場合には、発音中の１つの候補音高を用いて、その音高を１オクターブアップしてノートオンコマンドを作成する。
【００３９】
ステップＣ１７において、ＬｋｅｙがＮＯＤＡＴＡでそのエリアに音高がストアされていない場合には、押鍵に応じて最初に発音する音高を作成するために、ノート生成処理（２）を実行する（ステップＣ３２）。ノート生成処理（２）は、図１５に示すように、自動演奏処理で最初に指定したＫｏｎｋｏ（Ｐ）の音高をＮＯＴＥにストアする（ステップＣ１０３）。そして、図１０のステップＣ３０に移行して、ステップＣ３１ａ、ステップＣ３１ｂを経て、ステップＣ２７においてＮＯＴＥの音高に基づいてノートオンコマンドを作成し、そのノートオンコマンドをステップＣ２８においてＭＩＤＩの出力バッファに転送する。
【００４０】
図１０のステップＣ１８において、ＫＥＹにストアした鍵番号がＬＫｅｙにストアした前回の鍵番号よりも小さい場合には、図１１のフローにおいて、ポインタＡＰを「０」にセットして（ステップＣ３３）、ＡＰの値をインクリメントしながら、図２（１）のｋｏｈｏ  Ｂｕｆｆｅｒのエリアを検索する。すなわち、発音フラグＯＮＦ（ＡＰ）が「０（未発音）」であるか否かを判別し（ステップＣ３４）、このフラグが「０」である場合には、そのＫｏｎｋｏ（ＡＰ）の音高がＬｏｎｋｏにストアした前回の音高よりも低いか否かを判別する（ステップＣ３５）。
【００４１】
ステップＣ３４において、ＯＮＦ（ＡＰ）が「１（発音中）」である場合、又は、ステップＣ３５において、Ｋｏｎｋｏ（ＡＰ）の音高がＬｏｎｋｏにストアした前回の音高以上である場合には、ＡＰの値をインクリメントする（ステップＣ３６）。このとき、インクリメントしたＡＰの値が「６」に達したか否かを判別する（ステップＣ３７）。ＡＰの値が「５」以下である場合には、ステップＣ３４に移行して、未発音でかつＬｏｎｋｏの音高より低い候補音高を捜す。ステップＣ３７において、ＡＰの値が「６」に達した場合には、オクターブダウン処理を実行する（ステップＣ３８）。
【００４２】
オクターブダウン処理は、図１９に示すように、まず図１５に示したノート生成処理（２）を実行する（ステップＣ１０６）。すなわち、ポインタＰで指定するＫｏｎｋｏ（Ｐ）の音高をレジスタＮＯＴＥにストアする。次に、ＮＯＴＥの音高を１オクターブダウンする（ステップＣ１０７）。そして、図１０のステップＣ３０に移行して、ステップＣ３１ａ、ステップＣ３１ｂを経て、ステップＣ２７においてＮＯＴＥの音高に基づいてノートオンコマンドを作成し、そのノートオンコマンドをステップＣ２８においてＭＩＤＩの出力バッファに転送する。
【００４３】
図９のステップＣ１０の発音フラグＯＮＦの判別結果において、図２（１）のｋｏｈｏ  Ｂｕｆｆｅｒのすべての候補音高が発音中で、ステップＣ１６において、一巡したポインタＡＰの値に「１」を加算した値をポインタＰにセットした後は、図１１のフローにおいて、ＫＥＹにストアした鍵番号がＬｏｎｋｏにストアした前回の鍵番号以上であるか否かを判別する（ステップＣ３９）。
【００４４】
ＫＥＹの鍵番号がＬｏｎｋｏの鍵番号より小さい場合には、オクターブダウン処理を実行する（ステップＣ３８）。ＫＥＹの鍵番号がＬｏｎｋｏの鍵番号以上である場合には、図１０のステップＣ２９に移行して、オクターブアップ処理を実行する。オクターブダウン処理又はオクターブアップ処理の後は、図１０のステップＣ３０に移行して、ＮＯＴＥの音高を１オクターブダウンした音高、又は、１オクターブアップした音高に基づいて、ノートオンコマンドを作成するステップＣ２７、ＭＩＤＩの出力バッファに転送するステップＣ２８に至る各ステップを実行する。
【００４５】
図９のステップＣ２において、鍵変化がオフである場合、すなわち離鍵がされた場合には、図１２のフローにおいて、オフされた鍵番号をレジスタＫＥＹにストアし（ステップＣ４０）、レジスタＶＥＬＯＣＩＴＹに「０」をストアする（ステップＣ４１）。次に、図２（２）に示したＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒの各エリアを検索する。すなわち、ポインタＷＰを「０」にセットして（ステップＣ４２）、ＷＰの値をインクリメントしながら、ＫＥＹの鍵番号と一致する鍵番号のＫｅｙ（ＷＰ）を捜す（ステップＣ４３）。
【００４６】
鍵番号が一致しない場合には、ＷＰの値をインクリメントして次のエリアを指定する（ステップＣ４４）。このとき、ＷＰの値が「１０」に達したか否かを判別する（ステップＣ４５）。ＷＰの値が「９」以下である場合には、ステップＣ４３に移行してＫＥＹの鍵番号と一致する鍵番号のＫｅｙ（ＷＰ）を捜す。ＷＰの値が「１０」に達した場合には、メインフローに戻る。
【００４７】
ステップＣ４３において、ＫＥＹの鍵番号と一致する鍵番号のＫｅｙ（ＷＰ）があったときは、図２（２）のＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒにおいてその鍵番号に対応する音高と一致する候補音高を、図２（１）のｏｎｋｏ  Ｂｕｆｆｅｒの中から捜す。すなわち、ポインタＡＰを「０」にセットして（ステップＣ４６）、ＡＰの値をインクリメントしながら、消音すべきＳｏｎｋｏ（ＷＰ）の音高とＫｏｎｋｏ（ＡＰ）の音高が一致するか否かを判別する（ステップＣ４７）。音高が一致しない場合には、ＡＰの値をインクリメントして次の候補音高のエリアを指定する（ステップＣ４８）。このとき、ＡＰの値が「６」に達したか否かを判別する（ステップＣ４９）。ＡＰの値が「５」以下である場合には、ステップＣ４７に移行して、Ｓｏｎｋｏ（ＷＰ）の音高とＫｏｎｋｏ（ＡＰ）の音高が一致するか否かを判別する。ＡＰの値が「６」に達したときは、メインフローに戻る。
【００４８】
ステップＣ４７において、Ｓｏｎｋｏ（ＷＰ）の音高とＫｏｎｋｏ（ＡＰ）の音高とが一致する場合、すなわち発音中の音高に消音すべき音高があった場合には、発音フラグＯＮＦ（ＡＰ）を「０（消音）」にセットし（ステップＣ５０）、Ｋｅｙ（ＷＰ）にＮＯＤＡＴＡ（空き）をストアする（ステップＣ５１）。次に、ノート生成処理（３）を実行し（ステップＣ５２）、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ消去処理を実行する（ステップＣ５３）。
【００４９】
ノート生成処理（３）は、図２２に示すように、消音すべきＳｏｎｋｏ（ＷＰ）の指定音高をＮＯＴＥにストアする（ステップＣ１１６）。Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ消去処理は、図２３に示すように、Ｋｅｙ（ＷＰ）にＮＯＤＡＴＡをストアし（ステップＣ１１７）、Ｓｏｎｋｏ（ＷＰ）にＮＯＤＡＴＡをストアする（ステップＣ１１８）。すなわち、オフされた鍵番号に対応するＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒのエリアをクリアにする。この後は、図１０のステップＣ２７に移行して、ステップＣ２７においてノートオフコマンドを作成し、ステップＣ２８においてＭＩＤＩの出力バッファにそのノートオフコマンドを転送する。そして、メインフローに戻る。
【００５０】
図２４は、メインフローにおけるステップＡ４の発音処理のフローチャートである。このフローに入ると、イベントの出力タイミングになったか否かを判別し（ステップＤ１）、出力タイミングになったときは、ＭＩＤＩの出力バッファ内のイベントを音源に送出する（ステップＤ２）。そして、出力バッファをクリアにして（ステップＤ３）、メインフローに戻る。
【００５１】
以上のように、この第１の実施形態によれば、ＣＰＵ１は、和音の楽音データを有する特定のパート、および他のパートからなる複数のパートで構成された自動演奏曲において、特定のパートにおける複数の音高を発音の候補音高として設定し、鍵盤６において少なくとも１つの鍵の演奏結果に基づいて、候補音高の中から選択した音高又は選択した音高をオクターブ単位で修正した音高を発音すべき音高として指定する。したがって、演奏のタイミングだけで自動演奏を行う場合であっても、自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できる。
【００５２】
また、第１の実施形態によれば、ＣＰＵ１は、特定のパートにおけるコードデータに基づいて変換した複数の音高を候補音高として設定する。したがって、装置のメーカで指定された専用の自動演奏曲に応じて演奏する際に、演奏のタイミングだけで、自然な感じで和音演奏やアルペジオ演奏ができる。
また、第１の実施形態によれば、ＣＰＵ１は、候補音高の中から未発音の音高を選択する。したがって、発音中の音高を重複して発音しないので、和音演奏やアルペジオ演奏が単調にならず、自然な感じの演奏が実現できる。
さらに、この場合において、ＣＰＵ１は、今回の押鍵に対応する音高が前回の押鍵に対応する音高より高い場合又は低い場合に応じて、前回指定した音高よりも高い未発音の音高又は低い未発音の音高を候補音高の中から選択する。したがって、押鍵の位置関係に応じて発音する音高が指定され、演奏の鍵と発音の音高との関係に違和感がなく、自然な感じの演奏が実現できる。
さらにまた、この場合において、ＣＰＵ１は、候補音高の中に未発音の音高がない場合には、今回の押鍵に対応する音高が前回の押鍵に対応する音高より高い場合又は低い場合に応じて、すでに選択した音高を１オクターブアップ又は１オクターブダウンする修正して発音すべき音高として指定する。したがって、発音中の音高を重複して発音しないので、和音演奏やアルペジオ演奏が単調にならず、さらに、バリエーションに富んだ演奏が実現できる。
【００５３】
次に、第２の実施形態における楽音演奏装置について、図２５ないし図３２に基づいて説明する。
図２５は、エニキーモードに設定されている場合に、ＲＡＭ４のメモリマップのうち、エニキーバッファ（Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ）を示している。候補音高バッファ（ｋｏｈｏ  Ｂｕｆｆｅｒ）およびラストバッファ（Ｌａｓｔ  Ｂｕｆｆｅｒ）については、図２に示した第１の実施形態と同じであるので、図面および説明は省略する。
Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒには、押鍵された鍵番号を最大１０個まで記憶するエリアであるＫｅｙ（０）〜（９）、各鍵番号の発音のために指定される音高のエリアであるＳｏｎｋｏ（０）〜（９）、およびオクターブのデータを記憶するエリアであるＯｃｔ（０）〜（９）とで構成されている。各鍵番号、音高、およびオクターブのエリアはポインタＷＰによって指定される。
【００５４】
次に、第２の実施形態における楽音演奏処理の動作について、ＣＰＵ１によって実行されるフローチャートに基づいて説明する。第２の実施形態におけるＣＰＵ１のメインフローチャートの動作、およびメインフローチャートにおける自動演奏処理、発音処理については、第１の実施形態と同じである。また、鍵盤処理においても、大部分は第１の実施形態と同じである。したがって、第１の実施形態と異なる部分の動作について説明する。
【００５５】
図２６は、押鍵演奏がされたときのキー検出処理のフローチャートである。オンされた鍵番号をレジスタＫＥＹにストアして（ステップＣ２０１）、そのストアした鍵番号の値を１オクターブの鍵数である「１２」で除算し、除算結果の余りの値をＫＥＹに再ストアして更新する（ステップＣ２０２）。次に、除算結果の整数部すなわち商の値をレジスタＯＣＴＡＶＥにストアして（ステップＣ２０３）、さらにそのストアした値からオクターブ基準値を減算する（ステップＣ２０４）。
【００５６】
図２７は、ノート生成処理（１）のフローチャートである。候補音高Ｋｏｎｋｏ（ＡＰ）をＮＯＴＥにストアし（ステップＣ２１７）、さらに、図２６のステップＣ２０４において、ＯＣＴＡＶＥにストアされている値に「１２」を乗算してレジスタＳＩＦＴにストアし（ステップＣ２１８ａ）、ＳＩＦＴの値をＮＯＴＥに加算する（ステップＣ２１８ｂ）。
図２８は、ノート生成処理（２）のフローチャートである。候補音高Ｋｏｎｋｏ（Ｐ）をＮＯＴＥにストアし（ステップＣ２１９）、さらに、図２６のステップＣ２０４において、ＯＣＴＡＶＥにストアされている値に「１２」を乗算してレジスタＳＩＦＴにストアし（ステップＣ２２０ａ）、ＳＩＦＴの値をＮＯＴＥに加算する（ステップＣ２２０ｂ）。
【００５７】
図２９は、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（１）のフローチャートである。ＮＯＴＥにストアしたＫｏｎｋｏ（ＡＰ）の音高を、図２５に示したＡｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＳｏｎｋｏ（ＷＰ）にストアする（ステップＣ２０５）。次に、図２６のキー検出処理のステップＣ２０１でＫＥＹにストアした鍵番号を、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＫｅｙ（ＷＰ）にストアする（ステップＣ２０６）。次に、図２６のキー検出処理のステップＣ２０４でＯＣＴＡＶＥにストアした値を、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＯｃｔ（ＷＰ）にストアする（ステップＣ２０７）。
【００５８】
図３０は、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（２）のフローチャートである。ＮＯＴＥにストアしたＫｏｎｋｏ（Ｐ）の音高を、図２５に示したＡｎｙＫｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＳｏｎｋｏ（ＷＰ）にストアする（ステップＣ２０８）。次に、図２６のキー検出処理のステップＣ２０１でＫＥＹにストアした鍵番号を、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＫｅｙ（ＷＰ）にストアする（ステップＣ２０９）。次に、図２６のキー検出処理のステップＣ２０４でＯＣＴＡＶＥにストアした値を、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＯｃｔ（ＷＰ）にストアする（ステップＣ２１０）。
【００５９】
図３１は、ノート生成処理（３）のフローチャートである。このフローでは、図２５に示したＡｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＳｏｎｋｏ（ＷＰ）をＮＯＴＥにストアする（ステップＣ２１１）。次に、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＯｃｔ（ＷＰ）をＯＣＴＡＶＥにストアする（ステップＣ２１２）。次に、ＯＣＴＡＶＥの値に「１２」を乗算してレジスタＳＩＦＴにストアし（ステップＣ２１３ａ）、ＮＯＴＥにストアした音高にＳＩＦＴの値を加算する（ステップＣ２１３ｂ）。
【００６０】
図３２は、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ消去処理のフローチャートである。このフローでは、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＫｅｙ（ＷＰ）にＮＯＤＡＴＡをストアする（ステップＣ２１４）。次に、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＳｏｎｋｏ（ＷＰ）にＮＯＤＡＴＡをストアする（ステップＣ２１５）。次に、Ａｎｙ  Ｋｅｙ  ＢｕｆｆｅｒにおいてポインタＷＰで指定されるＯｃｔ（ＷＰ）にＮＯＤＡＴＡをストアする（ステップＣ２１６）。
【００６１】
以上のように、この第２の実施形態によれば、ＣＰＵ１は、予め設定された基準のオクターブと鍵の演奏位置のオクターブとが異なる場合には、基準のオクターブと鍵の演奏位置のオクターブ差に応じて、候補音高の中から選択した音高のオクターブを修正して発音すべき音高として指定する。したがって、バリエーションに富んだ和音演奏やアルペジオ演奏が実現できる。
【００６２】
次に、本発明の楽音演奏装置の第３の実施形態について、図３３ないし図４０に基づいて説明する。
この第３の実施形態においては、図１に示した曲メモリ５には、外部から取り込んだスタンダードＭＩＤＩファイル（ＳＭＦ）としての自動演奏曲の楽音データが記憶されている。したがって、この場合の楽音データにはコードデータが含まれていない。スタンダードＭＩＤＩファイルにおいては、和音は発音開始時間とノートオンのイベントとで構成されている。
【００６３】
次に、第３実施形態における楽音演奏装置の動作について、ＣＰＵ１のフローチャートに基づいて説明する。
図３３はメインフローチャートであり、所定のイニシャライズ（ステップＥ１）の後、和音窓時間設定処理（ステップＥ２）、自動演奏処理（ステップＥ３）、鍵盤処理（ステップＥ４）、発音処理（ステップＥ５）、その他の処理（ステップＥ６）を繰り返し実行する。
図３４は、タイマインタラプトのフローチャートであり、一定時間ごとのタイマインタラプトに応じて、レジスタＴの値をデクリメントする（ステップＥ７）。そして、フラグＷＦが「１」であるか否かを判別する（ステップＥ８）。ＷＦが「１」である場合には、待ち時間のレジスタＷＴの値をインクリメントする（ステップＥ９）。ＷＦの機能については後述する。
【００６４】
図３５は、メインフローにおけるステップＥ２の和音窓時間設定処理のフローチャートである。まず、ＳＴＦが「０（自動演奏停止）」であるか否かを判別し（ステップＦ）、ＳＴＦが「０」である場合には、和音窓時間（和音認定のための所定時間）が設定値として入力されたか否かを判別する（ステップＦ２）。設定値が入力されたときは、その設定値をレジスタＳＴにストアする（ステップＦ３）。そして、メインフローに戻る。
【００６５】
図３６ないし図３９は、メインフローにおけるステップＥ３の自動演奏処理のフローチャートである。なお、この自動演奏処理においては、第１の実施形態において、図２（１）に示した候補音高および発音フラグの値をストアするｋｏｈｏ  Ｂｕｆｆｅｒのエリアを使用する。
図３６において、スタート／ストップスイッチがオンされたか否かを判別し（ステップＧ１）、このスイッチがオンされたときは、自動演奏のフラグＳＴＦの値を反転する（ステップＧ２）。そして、ＳＴＦが「１（自動演奏）」に反転したか、又は「０（自動演奏停止）」に反転したか判別する（ステップＧ３）。ＳＴＦが「０」に反転した場合には、すべての発音を停止するためにオールノートオフ処理を行い（ステップＧ４）、フラグＷＦを「０」にリセットし（ステップＧ５）、タイマインタラプトを禁止状態にする（ステップＧ６）。そして、メインフローに戻る。
なお、ＷＦは、特定のチャンネルにおける和音パートの発音が開始するまで、他のチャンネルにおけるパートの発音開始を待たせるか否かを決定するためのフラグである。待たせる場合は「１（待ち状態）」にセットされ、待たせない場合は「０」にリセットされる。
【００６６】
ステップＧ３において、ＳＴＦが「１」に反転した場合には、自動演奏データのスタートアドレスに読み出しのポインタを移動する（ステップＧ７）。次に、待ち時間をストアするレジスタＷＴに「０」をストアしてクリアし（ステップＧ８）、曲メモリの自動演奏データの読み出しを行う（ステップＧ９）。そして、読み出したデータが何か判別する（ステップＧ１０）。データがタイムである場合には、そのタイムデータをレジスタＴにストアして（ステップＧ１１）、タイマインタラプトの禁止状態を解除する（ステップＧ１２）。この後は一定時間経過ごとに図３４のタイマインタラプト処理を実行する。そして、メインフローに戻る。タイマインタラプトに応じてＷＴの値がインクリメントされる。
【００６７】
ステップＧ１０における判別結果で、読み出したデータがイベントである場合には、イベントのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する（ステップＧ１３）。特定のチャンネルである場合には、さらにそのイベントがノートイベントであるか否かを判別する（ステップＧ１４）。ステップＧ１３においてイベントのチャンネルが特定のチャンネルでない場合、又は、ステップＧ１４においてイベントがノートイベントでない場合には、そのイベントは和音でないのでＭＩＤＩの出力バッファに転送する（ステップＧ１５）。
【００６８】
ステップＧ１４においてイベントがノートイベントである場合には、そのイベントがノートオンであるか否かを判別する（ステップＧ１６）。ノートオンである場合には、図３７のフローにおいて、フラグＷＴに「１（待ち状態）」をセットし（ステップＧ１７）、ポインタＡＰを「０」にセットする（ステップＧ１８）。そして、和音の候補音高をストアするｋｏｈｏ  Ｂｕｆｆｅｒにおいて、ＡＰで指定するＫｏｎｋｏ（ＡＰ）に、ノートオンイベントの音高をストアし（ステップＧ１９）、発音フラグＯＮＦ（ＡＰ）に「０（未発音）」をセットする（ステップＧ２０）。そして、ＡＰの値をインクリメントして、ｋｏｈｏ  Ｂｕｆｆｅｒの次のエリアを指定する（ステップＧ２１）。次に、曲メモリのアドレスを進める（ステップＧ２２）。
図３６のステップＧ１５において、和音以外のイベントをＭＩＤＩの出力バッファに転送した後、又は、図３６のステップＧ１６において、イベントがノートオンでない場合には、図３７のステップＧ２２に移行して、曲メモリのアドレスを進める。
【００６９】
図３６のステップＧ１において、スタート／ストップスイッチがオンでない場合には、図３８のフローにおいて、フラグＳＴＦが「１（自動演奏）」であるか否かを判別する（ステップＧ２３）。ＳＴＦが「０（自動演奏停止）」である場合にはこのフローを終了するが、ＳＴＦが「１」である場合には、タイマインタラプタに応じて増加するレジスタＷＴの待ち時間が、レジスタＳＴの設定時間に達したか否かを判別する（ステップＧ２４）。すなわち、和音検出の窓時間として設定した所定時間が経過したか否かを判別する。ＷＴの待ち時間がＳＴの設定時間に達したときは、フラグＷＴを「０」にリセットする（ステップＧ２５）。ＷＴをリセットした後、又は、ＷＴの待ち時間がＳＴの設定時間に達しない場合には、Ｔの値が「０」になったか否かを判別する（ステップＧ２６）。Ｔの値がまだ「０」でないときは、メインフローに戻るが、Ｔの値が「０」になったときは、曲メモリのアドレスを進める（ステップＧ２７）。そして、そのアドレスのエリアにデータがあるかないか否かを判別する（ステップＧ２８）。データがない場合には、ＳＴＦを「０（自動演奏停止）」にリセットする（ステップＧ２９）。そして、図３６のステップＧ４に移行してオールノートオフの処理を行い、ＷＦを「０」にリセットし（ステップＧ５）、タイマインタラプトを禁止して（ステップＧ６）、メインフローに戻る。
【００７０】
図３８のステップＧ２８の判別結果、指定したアドレスのエリアにデータがある場合には、図３９のフローにおいて、データを読み出し（ステップＧ３０）、そのデータは何か判別する（ステップＧ３１）。データがタイムである場合には、レジスタＴにそのタイムデータをストアして（ステップＧ３２）、メインフローに戻る。
データがイベントである場合には、そのデータのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する（ステップＧ３３）。特定のチャンネルである場合には、そのイベントがノートイベントであるか否かを判別する（ステップＧ３４）。
ステップＧ３３において、データのチャンネルが特定のチャンネルでない場合、又は、ステップＧ３４において、イベントがノートイベントでない場合には、和音以外のそのイベントをＭＩＤＩの出力バッファに転送する（ステップＧ３５）。イベントがノートイベントである場合には、そのノートイベントがノートオンであるか否かを判別する（ステップＧ３６）。
【００７１】
ノートイベントがノートオンである場合には、フラグＷＦが「０」であるか否かを判別する（ステップＧ３７）。ＷＦが「０」である場合は、前回の和音処理が終了し、新たなノートオンによって次の和音処理が開始するので、ＷＦを「１」にセットして（ステップＧ３８）、ｋｏｈｏ  Ｂｕｆｆｅｒをクリアする（ステップＧ３９）。そして、ポインタＡＰを「０」のセットして（ステップＧ４０）、候補音高のエリアＫｏｎｋｏ（ＡＰ）にノートオンイベントの音高をストアして（ステップＧ４１）、発音フラグＯＮＦ（ＡＰ）を「０（未発音）」にセットする（ステップＧ４２）。次に、ポインタＰを「０」にセットし（ステップＧ４３）、レジスタＷＴに「０」をストアしてクリアする（ステップＧ４４）。
【００７２】
ステップＧ３７において、ＷＦがすでに「１」である場合には、現在の和音処理が継続している待ち状態であるので、ポインタＡＰをインクリメントして、ｋｏｈｏ  Ｂｕｆｆｅｒの次のエリアを指定する（ステップＧ４５）。このときＡＰの値が「６」未満であるか否かを判別する（ステップＧ４６）。すなわち、ｋｏｈｏ  Ｂｕｆｆｅｒに空きエリアがあるか否かを判別する。ＡＰの値が「６」未満である場合には、Ｋｏｎｋｏ（ＡＰ）にノートオンイベントの音高をストアして（ステップＧ４７）、発音フラグＯＮＦ（ＡＰ）を「０（未発音）」にセットする（ステップＧ４８）。
【００７３】
ステップＧ３５において和音以外のイベントを出力バッファに転送した後、ステップＧ３６においてノートイベントがノートオンでない場合、ステップＧ４４においてＷＴに「０」をストアした後、ステップＧ４６においてＡＰの値が「６」以上でｋｏｈｏ  Ｂｕｆｆｅｒに空きエリアがない場合、又は、ステップＧにおいてＯＮＦ（ＡＰ）を「０」にセットした後は、図３８のフローのステップＧ２７に移行して、曲メモリのアドレスを進める。
【００７４】
図４０は、メインフローにおけるステップＥ５の発音処理のフローチャートである。このフローに入ると、イベントの出力タイミングになったか否かを判別し（ステップＨ１）、出力タイミングになったときは、ＭＩＤＩの出力バッファ内にイベントがあるか否かを判別する（ステップＨ２）。まだ出力タイミングになっていない場合、又は、出力バッファにイベントがない場合には、メインフローに戻る。
【００７５】
出力バッファにイベントがある場合には、そのイベントを指定する（ステップＨ３）。次に、指定したイベントのチャンネルがコードパート用の特定のチャンネルでないか否かを判別する（ステップＨ４）。すなわち、指定したイベントが和音の音高でないか否かを判別する。指定イベントが特定のチャンネルでない場合には、出力バッファ内でＳＴに設定した時間が経過したか否かを判別する（ステップＨ５）。ＳＴに設定した時間が経過したときは、和音以外のそのイベントを音源に転送する（ステップＨ６）。ステップＨ４において、指定イベントのチャンネルが特定のチャンネルである場合にも、その指定イベントを音源に転送する（ステップＨ６）。特定のチャンネルの指定イベント又は他のチャンネルの指定イベントを音源に転送した後は、その指定イベントを消去する（ステップＨ７）。
【００７６】
イベントを消去した後、又は、ステップＨ５において、出力バッファ内でＳＴに設定した時間が経過していないときは、出力バッファのイベントをすべて指定したか否かを判別する（ステップＨ８）。まだ指定していないイベントが残っている場合には、ステップＨ３に移行して、次のイベントを指定する。
ステップＨ８において、出力バッファのイベントをすべて指定した場合には、メインフローに戻る。
【００７７】
以上のように、この第３の実施形態によれば、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートにおいて、予め設定されている窓時間が経過するごとに、その窓時間内における最初のノートオンのイベントから最後のノートオンのイベントまでの音高を候補音高として設定する。したがって、スタンダードＭＩＤＩファイルのように、イベントデータの中にコードデータを持たない場合であっても、演奏のタイミングだけで自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できる。
【００７８】
また、この場合において、特定のパートにおいて指定された音高の発音開始時間まで、他のパートの音高の発音開始時間を遅延させる。したがって、メロディパートなどの他のパートの発音タイミングと、和音のパートの発音タイミングにずれが生じるのを防止できる。
【００７９】
次に、第４の実施形態における楽音演奏装置の動作について、図４１ないし図４３に基づいて説明する。この第４の実施形態においては、自動演奏処理の一部の動作が第３の実施形態と異なる。したがって、重複する動作の説明は省略して、第３の実施形態のフローチャートを援用しながら、異なる部分の動作のみを説明する。
【００８０】
図３６の自動演奏処理のステップＧ１において、スタート／ストップスイッチがオンでない場合には、第３の実施形態では、図４１ないし図４３のフローを実行する。
図４１のフローにおいて、フラグＳＴＦが「１（自動演奏）」であるか否かを判別する（ステップＧ５１）。ＳＴＦが「０（自動演奏停止）」である場合にはこのフローを終了するが、ＳＴＦが「１」である場合には、レジスタＷＴの待ち時間がレジスタＳＴの設定時間に達したか否かを判別する（ステップＧ５２）。すなわち、和音検出の窓時間として設定した所定時間が経過したか否かを判別する。ＷＴの待ち時間がＳＴの設定時間に達したときは、フラグＷＴを「０」にリセットする（ステップＧ５３）。次に、ＷＴの待ち時間が、ＳＴの設定時間からさらに４拍分の時間を加算した時間に達したか否かを判別する（ステップＧ５４）。４拍分の時間は休符の時間である。ＷＴの待ち時間がこの加算した時間に達したときは、ｋｏｈｏ  Ｂｕｆｆｅｒをクリアする（ステップＧ５５）。すなわち、ノートオンによって候補音高に設定した音高がこの加算した時間に達したときも、ノートオフに変化しない場合には、すべての候補音高を削除する。
【００８１】
ｋｏｈｏ  Ｂｕｆｆｅｒをクリアした後、又は、ＷＴの待ち時間がＳＴの設定時間に達しない場合、若しくは、ＷＴの待ち時間が加算した時間に達しない場合には、Ｔの値が「０」になったか否かを判別する（ステップＧ５６）。Ｔの値がまだ「０」でないときは、メインフローに戻るが、Ｔの値が「０」になったときは、曲メモリのアドレスを進める（ステップＧ５７）。そして、そのアドレスのエリアにデータがあるかないかを判別する（ステップＧ５８）。データがない場合には、ＳＴＦを「０（自動演奏停止）」にリセットする（ステップＧ５９）。
【００８２】
そのアドレスのエリアにデータがある場合には、図４２のフローにおいて、データを読出し（ステップＧ６０）、そのデータは何か判別する（ステップＧ６１）。データがタイムである場合には、レジスタＴにそのタイムデータをストアして（ステップＧ６２）、メインフローに戻る。
データがイベントである場合には、そのデータのチャンネルがコードパート用の特定のチャンネルであるか否かを判別する（ステップＧ６３）。特定のチャンネルである場合には、そのイベントがノートイベントであるか否かを判別する（ステップＧ６４）。
【００８３】
ステップＧ６３において、データのチャンネルが特定のチャンネルでない場合、又は、ステップＧ６４において、イベントがノートイベントでない場合には、そのイベントをＭＩＤＩの出力バッファに転送する（ステップＧ６５）。イベントがノートイベントである場合には、そのノートイベントがノートオンであるか否かを判別する（ステップＧ６６）。
ノートオンである場合には、フラグＷＦが「０」であるか否かを判別する（ステップＧ６７）。ＷＦが「０」である場合は、前回の窓時間における和音処理が終了しているので、次の窓時間における和音処理のために、ＷＦを「１」にセットする（ステップＧ６８）。
【００８４】
次に、ポインタＡＰを「０」にセットして（ステップＧ６９）、候補音高であるＫｏｎｋｏ（ＡＰ）が、Ａｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒの指定音高Ｓｏｎｋｏ（０）〜（９）に存在するか又はしないかを判別する（ステップＧ７０）。Ｋｏｎｋｏ（ＡＰ）がＳｏｎｋｏ（０）〜（９）に存在する場合、すなわち、Ｋｏｎｋｏ（ＡＰ）の音高が発音中である場合には、ＡＰをインクリメントして次のＳｏｎｋｏ（ＡＰ）を指定する（ステップＧ７２）。このとき、ＡＰの値が「６」に達したか否かを判別する（ステップＧ７３）。ＡＰの値が「５」以下である場合には、ステップＧ７０において、Ｋｏｎｋｏ（ＡＰ）がＳｏｎｋｏ（０）〜（９）に存在するか又は存在しないかを判別する。
【００８５】
ステップＧ７３において、ＡＰの値が「６」に達したときは、図４３のフローにおいて、ポインタＡＰを「０」にセットして（ステップＧ７４）、Ｋｏｎｋｏ（ＡＰ）がＮＯＤＡＴＡ（空き）であるか否かを判別する（ステップＧ７５）。Ｋｏｎｋｏ（ＡＰ）がＮＯＤＡＴＡでなくデータがある場合には、ＡＰの値をインクリメントして、次のＫｏｎｋｏ（ＡＰ）を指定する（ステップＧ７６）。このとき、ＡＰの値が「６」に達したか否かを判別する（ステップＧ７７）。
ＡＰの値が「５」以下である場合、又は、図４２のステップＧ６７においてＷＦが「１」である場合には、ステップＧ７５において、Ｋｏｎｋｏ（ＡＰ）がＮＯＤＡＴＡであるか否かを判別する。
Ｋｏｎｋｏ（ＡＰ）がＮＯＤＡＴＡである場合には、発音フラグＯＮＦ（ＡＰ）を「０」にリセットして（ステップＧ７９）、ＡＰの値をインクリメントする（ステップＧ８０）。
【００８６】
ステップＧ６５において和音以外のイベントを出力バッファに転送した後は、図４１のフローのステップＧ５７に移行して、曲メモリのアドレスを進める。また、ステップＧ６６においてノートイベントがノートオンでない場合、ステップＧ７７においてＡＰの値が「６」以上でｋｏｈｏ  Ｂｕｆｆｅｒに空きエリアがない場合、又は、ステップＧ８０においてＡＰをインクリメントした後も、図４１のフローのステップＧ５７に移行して、曲メモリのアドレスを進める。
【００８７】
以上のように、この第４の実施形態によれば、窓時間が経過した後にさらに４拍の時間が経過したときは、設定中のすべての候補音高を消去する。したがって、自動演奏曲の途中に長い休符が入る場合でも、休符の前に設定された和音のイベントが休符の後にある別の和音のイベントに混入するのを防止できる。
【００８８】
なお、この第４の実施形態において、窓時間内に発音した音高が、窓時間が経過した後でも継続する場合があるが、窓時間の経過に応じてその音高が消去されるのを防ぐために、ＲＡＭ４のＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒに、ノートオフのイベントが入力されたか否かを判別する消音フラグのエリアを設けて、窓時間の経過後にノートオフのイベントが入力されたときに、そのノートオフの音高を消去する構成にしてもよい。
【００８９】
また、上記各実施形態においては、図１のＲＯＭ３に記憶されている楽音演奏処理のプログラムをＣＰＵ１によって実行する楽音演奏装置について説明したが、ＦＤ（フレキシブルディスク）、ＣＤ−ＲＯＭなどの外部記憶媒体に記憶されている楽音演奏処理のプログラムや、インターネットなどの通信網を介してダウンロードされる楽音演奏処理のプログラムを、パソコンなどの汎用の情報処理装置にインストールして実行することも可能である。この場合には、下記に記載するように、楽音演奏処理のプログラムの発明を構成する。
【００９０】
すなわち、本発明の楽音演奏処理のプログラムは、コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲においてコードデータに基づいて変換した複数の音高を候補音高として設定する第１のステップと、複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第２のステップとを有する。したがって、演奏のタイミングだけで自動演奏を行う場合であっても、自然な感じの演奏が実現できるとともに、演奏者の和音演奏やアルペジオ演奏が反映できる。
【００９１】
また、本発明の楽音演奏処理のプログラムは、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定する第１のステップと、複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する第２のステップとを有する。したがって、スタンダードＭＩＤＩファイルのように、イベントデータの中にコードデータを持たない場合であっても、発音開始時間とイベントとで構成されている和音を容易に認識して自動演奏ができる。
【００９２】
また、上記各実施形態においては、操作子としての鍵盤を有する電子鍵盤楽器を例に採って本発明の楽音演奏装置を説明したが、操作子としては鍵盤に限定するものではない。例えば、弦を操作子とする電子弦楽器やその他和音を発生する電子楽器などの楽音演奏装置にも本発明を適用することができる。
【００９３】
【発明の効果】
本発明によれば、コードデータによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲においてコードデータに基づいて変換した複数の音高を候補音高として設定して、複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する。したがって、演奏のタイミングだけで自動演奏を行う場合であっても、演奏者の和音演奏やアルペジオ演奏が反映できるとともに、自然な感じの演奏が実現できる。
【００９４】
また、本発明によれば、コードデータを持たず発音開始時間およびイベントによって和音の楽音データを表す特定のパートおよび他のパートからなる複数のパートで構成された自動演奏曲において予め設定されている和音認定のための所定時間が経過するごとにその所定時間内の特定のパートにおける最初のノートオンのイベントから最後のノートオンのイベントまでを候補音高として設定して、複数の操作子の中で少なくとも１つの操作子の演奏結果に基づいて候補音高の中から選択した音高又は選択した音高を修正した音高を発音すべき音高として指定する。したがって、スタンダードＭＩＤＩファイルのように、イベントデータの中にコードデータを持たない場合であっても、発音開始時間とイベントとで構成されている和音を容易に認識して自動演奏ができる。
【図面の簡単な説明】
【図１】各実施形態における楽音演奏装置のシステム構成を示すブロック図。
【図２】第１の実施形態におけるＲＡＭのメモリマップを示す図。
【図３】第１および第２の実施形態におけるＣＰＵのメインフローチャート。
【図４】第１および第２の実施形態におけるタイマインタラプトのフローチャート。
【図５】第１および第２の実施形態における自動演奏処理のフローチャート。
【図６】図５に続く自動演奏処理のフローチャート。
【図７】図５に続く自動演奏処理のフローチャート。
【図８】図７に続く自動演奏処理のフローチャート。
【図９】第１および第２の実施形態における鍵盤処理のフローチャート。
【図１０】図９に続く鍵盤処理のフローチャート。
【図１１】図１０に続く鍵盤処理のフローチャート。
【図１２】図９に続く鍵盤処理のフローチャート。
【図１３】第１の実施形態におけるキー検出処理のフローチャート。
【図１４】第１の実施形態におけるノート生成処理（１）のフローチャート。
【図１５】第１の実施形態におけるノート生成処理（２）のフローチャート。
【図１６】第１の実施形態におけるＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（１）のフローチャート。
【図１７】第１の実施形態におけるＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（２）のフローチャート。
【図１８】第１および第２の実施形態におけるオクターブアップ処理のフローチャート。
【図１９】第１および第２の実施形態におけるオクターブダウン処理のフローチャート。
【図２０】第１および第２の実施形態におけるＬａｓｔ  Ｂｕｆｆｅｒ入力処理（１）のフローチャート。
【図２１】第１および第２の実施形態におけるＬａｓｔ  Ｂｕｆｆｅｒ入力処理（２）のフローチャート。
【図２２】第１の実施形態におけるノート生成処理（３）のフローチャート。
【図２３】第１の実施形態におけるＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ消去処理のフローチャート。
【図２４】図３のメインフローチャートにおける発音処理のフローチャート。
【図２５】第２の実施形態におけるＲＡＭのメモリマップを示す図。
【図２６】第２の実施形態におけるキー検出処理のフローチャート。
【図２７】第２の実施形態におけるノート生成処理（１）のフローチャート。
【図２８】第２の実施形態におけるノート生成処理（２）のフローチャート。
【図２９】第２の実施形態におけるＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（１）のフローチャート。
【図３０】第２の実施形態におけるＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ入力処理（２）のフローチャート。
【図３１】第２の実施形態におけるノート生成処理（３）のフローチャート。
【図３２】第２の実施形態におけるＡｎｙ  Ｋｅｙ  Ｂｕｆｆｅｒ消去処理のフローチャート。
【図３３】第３および第４の実施形態におけるＣＰＵ１のメインフローチャート。
【図３４】第３および第４の実施形態におけるタイマインタラプトのフローチャート。
【図３５】第３および第４の実施形態における和音窓時間設定処理のフローチャート。
【図３６】第３の実施形態における自動演奏処理のフローチャート。
【図３７】図３６に続く自動演奏処理のフローチャート。
【図３８】図３６に続く自動演奏処理のフローチャート。
【図３９】図３８に続く自動演奏処理のフローチャート。
【図４０】第３および第４の実施形態における発音処理のフローチャート。
【図４１】第４の実施形態における自動演奏処理の一部のフローチャート。
【図４２】第４の実施形態における自動演奏処理の一部のフローチャート。
【図４３】第４の実施形態における自動演奏処理の一部のフローチャート。
【符号の説明】
１  ＣＰＵ
３  ＲＯＭ
４  ＲＡＭ
５  曲メモリ
６  鍵盤
７  スイッチ部
８  音源
９  発音回路
【図１】
2004177893.tif 000003
【図２】
2004177893.tif 000004
【図３】
2004177893.tif 000005
【図４】
2004177893.tif 000006
【図５】
2004177893.tif 000007
【図６】
2004177893.tif 000008
【図７】
2004177893.tif 000009
【図８】
2004177893.tif 000010
【図９】
2004177893.tif 000011
【図１０】
2004177893.tif 000012
【図１１】
2004177893.tif 000013
【図１２】
2004177893.tif 000014
【図１３】
2004177893.tif 000015
【図１４】
2004177893.tif 000016
【図１５】
2004177893.tif 000017
【図１６】
2004177893.tif 000018
【図１７】
2004177893.tif 000019
【図１８】
2004177893.tif 000020
【図１９】
2004177893.tif 000021
【図２０】
2004177893.tif 000022
【図２１】
2004177893.tif 000023
【図２２】
2004177893.tif 000024
【図２３】
2004177893.tif 000025
【図２４】
2004177893.tif 000026
【図２５】
2004177893.tif 000027
【図２６】
2004177893.tif 000028
【図２７】
2004177893.tif 000029
【図２８】
2004177893.tif 000030
【図２９】
2004177893.tif 000031
【図３０】
2004177893.tif 000032
【図３１】
2004177893.tif 000033
【図３２】
2004177893.tif 000034
【図３３】
2004177893.tif 000035
【図３４】
2004177893.tif 000036
【図３５】
2004177893.tif 000037
【図３６】
2004177893.tif 000038
【図３７】
2004177893.tif 000039
【図３８】
2004177893.tif 000040
【図３９】
2004177893.tif 000041
【図４０】
2004177893.tif 000042
【図４１】
2004177893.tif 000043
【図４２】
2004177893.tif 000044
【図４３】
2004177893.tif 000045