(57)【特許請求の範囲】
【請求項１】
少なくとも、コード名、および、拍を含む時間情報に基づいたコード構成音の発音タイミング、を含む自動伴奏データを記憶する記憶手段と、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御手段と、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定手段と、を備え、
前記コード判定手段が、
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された前記演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出手段と、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択手段と、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力手段と、
を有する自動伴奏装置。
【請求項２】
前記抽出手段は、前記自動伴奏データの進行の速度に応じて、同時操作された演奏操作子の検出周期を可変する請求項１に記載の自動伴奏装置。
【請求項３】
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、当該音高情報の中で同一音名の音高情報がある場合、高いほうの音高情報を削除する請求項１に記載の自動伴奏装置。
【請求項４】
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、操作のベロシテイの大きい演奏操作子に対応する音高情報４個と操作時間の長い前記演奏操作子に対応する音高情報４個とが同一の場合は、当該４個の音高情報を抽出された音高情報とする請求項１に記載の自動伴奏装置。
【請求項５】
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、低い順から４個の音高情報それぞれが短三度以上の音程を有している場合は、当該４個の音高情報を抽出された音高情報とする請求項１に記載の自動伴奏装置。
【請求項６】
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、低い順から３個の音高情報それぞれが短三度以上の音程を有している場合は、当該３個の音高情報を抽出された音高情報とする請求項１に記載の自動伴奏装置。
【請求項７】
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、当該音高情報の中で前記直前拍でのコードの構成音の音高と３個以上共通する音高情報が存在する場合は、当該３個以上の音高情報を抽出された音高情報とする請求項１に記載の自動伴奏装置。
【請求項８】
前記抽出手段は、抽出された音高情報数が所定数以上の場合、低い順から短三度以上の音程を有している３個の音高情報を抽出された音高情報とする請求項１に記載の自動伴奏装置。
【請求項９】
前記選択手段は、現在の拍が１拍もしくは３拍目でかつ、前記自動伴奏データにより生成されたベース音の発音が現拍より前から維持され、さらに直前の拍のベース音と同一である場合、直前拍及び現拍において抽出された音高情報の種類が同一か否か判定し、同一と判定された場合は直前拍で確定したコードを現拍のコードとし、同一でないと判定された場合は前記抽出された音高情報及びその数を前記コード判定テーブルに入力すべき音高情報及びその数として確定する請求項１に記載の自動伴奏装置。
【請求項１０】
前記選択手段は、現在の拍が２拍もしくは４拍目でかつ、当該拍で抽出された音高情報の中の最高音高情報が直前拍の最高音高情報と異なり、さらに当該現在の拍の最高音高情報が、直前拍で確定したコードのコード音高あるいはスケール音高でかつ直前拍の最高音高情報との差が長２度以内の場合は、直前拍で確定したコードを現拍のコードとする請求項１に記載の自動伴奏装置。
【請求項１１】
少なくとも、コード名、および、拍を含む時間情報に基づいたコード構成音の発音タイミング、を含む自動伴奏データと、入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、を記憶する記憶手段を備えたコンピュータに、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御ステップと、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定ステップと、を実行させ、
前記コード判定ステップが、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出ステップと、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択ステップと、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力ステップと、
を有する自動伴奏プログラム。
【請求項１２】
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、
実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された前記演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出手段と、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択手段と、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力手段と、
を有するコード判定装置。
【請求項１３】
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルを有するコード判定装置に用いられるコード判定方法であって、前記コード判定装置は、
実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された前記演奏操作子に対応する先行音高情報及びその数と、を抽出し、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択し、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる、コード判定方法。
【請求項１４】
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルを有するコード判定装置として用いられるコンピュータに、
実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された前記演奏操作子に対応する先行音高情報及びその数と、を抽出するステップと、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択するステップと、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させるステップと、
を実行させるコード判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自動伴奏装置、自動伴奏プログラム、コード判定装置、コード判定方法及びコード判定プログラムに関する。
【背景技術】
【０００２】
電子ピアノや電子オルガンのような鍵盤を備えた電子楽器では、主として右手でメロディを、左手で伴奏を弾く、あるいはコードを構成する複数の鍵を押鍵するのが一般的である。従ってこのような電子楽器においては、右手と左手をそれぞれ楽譜等にしたがって独立して動かすための練習が必要である。
【０００３】
このようにピアノの奏法およびオルガンの奏法の何れにおいても、右手と左手を同時に異なる形態で動かすことが必要であり、このためには相応の練習が必要である。特に、メロディを奏するために右手を動かすことは可能であるが、同時に左手で異なる演奏を行うことが困難と感じる演奏者が、特に初心者では多い。したがって、演奏者が右手でメロディを演奏することにより、左手で演奏することにより生成されるべき伴奏音を自動的に作成することのできる電子楽器が求められる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３０９９４３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、特許文献１には、楽曲の音符データを複数の区間ごとに記憶しておき、音符データの第２の区間のコード名を付与するにあたり、調データ、第２の区間に対応する音符データ、第１の区間の音符データおよび先に第２の区間に付与されているコード名を参照して、新たなコード名を決定する装置が提案されている。
【０００６】
このようにコードを決定するための要素のひとつとして、楽曲を構成する音符が用いられているが、これら音符それぞれが均等にコード決定に反映されるものではない。例えば音符がいずれの拍に含まれるかによってその重みが異なり、また、その拍内における時間的な位置によっても重みが異なる。したがって、その重みを反映させて、コード名を決定するのが望ましい。また、単一の音符のみを参照するのではなく、複数の音符の遷移に応じてコード名を決定するのが、より望ましい。
【０００７】
本発明は、楽曲を構成する音符の重みおよびその遷移に基づいて、適切にコード名を決定することができる自動伴奏装置、自動伴奏プログラム、コード判定装置、コード判定方法及びコード判定プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一態様の自動伴奏装置は、
少なくとも、コード名、および拍を含む時間情報に基づいたコード構成音の発音タイミングを含む自動伴奏データを記憶する記憶手段と、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御手段と、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定手段と、を備えた自動伴奏装置であって、
前記コード判定手段が、
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出手段と、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択手段と、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力手段と、
を有する。
【発明の効果】
【０００９】
本発明によれば、楽曲を構成する各音符音高の重みおよびその遷移に基づいて、適切にコード名を決定することができる自動伴奏装置、自動伴奏プログラム、コード判定装置、コード判定方法及びコード判定プログラムを提供することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施の形態にかかる電子楽器の外観を示す図である。
【図２】図２は、本発明の実施の形態にかかる電子楽器の構成を示すブロックダイヤグラムである。
【図３】図３は、本実施の形態にかかる電子楽器において実行されるメインフローの例を示すフローチャートである。
【図４】図４は、本実施の形態にかかる鍵盤処理の例をより詳細に示すフローチャートである。
【図５】図５は、本実施の形態にかかるコード名判定処理の例を示すフローチャートである。
【図６】図６は、本実施の形態にかかる前拍区間コード再検証処理の例を示すフローチャートである。
【図７】図７は、本実施の形態にかかるモノｏｒポリ判定処理の例を示すフローチャートである。
【図８】図８は、本実施の形態にかかるコード名判定処理（モノ）の例を示すフローチャートである。
【図９】図９は、本実施の形態にかかる１拍目・３拍目対応ノート決定処理の例を示すフローチャートである。
【図１０】図１０は、本実施の形態にかかる１拍目・３拍目対応ノート決定処理の例を示すフローチャートである。
【図１１】図１１は、本実施の形態にかかる１拍目・３拍目対応ノート決定処理の例を示すフローチャートである。
【図１２】図１２は、本実施の形態にかかる１拍目・３拍目対応ノート決定処理の例を示すフローチャートである。
【図１３】図１３は、本実施の形態にかかる第１のドミナントモーション判定処理の例を示すフローチャートである。
【図１４】図１４は、本実施の形態にかかる２拍目対応ノート決定処理の例を示すフローチャートである。
【図１５】図１５は、本実施の形態にかかる２拍目対応ノート決定処理の例を示すフローチャートである。
【図１６】図１６は、本実施の形態にかかる２拍目対応ノート決定処理の例を示すフローチャートである。
【図１７】図１７は、本実施の形態にかかる２拍目対応ノート決定処理の例を示すフローチャートである。
【図１８】図１８は、本実施の形態にかかる４拍目対応ノート決定処理の例を示すフローチャートである。
【図１９】図１９は、本実施の形態にかかる４拍目対応ノート決定処理の例を示すフローチャートである。
【図２０】図２０は、本実施の形態にかかる第２のドミナントモーション判定処理の例を示すフローチャートである。
【図２１】図２１は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
【図２２】図２２は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
【図２３】図２３は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
【図２４】図２４は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
【図２５】図２５は、本実施の形態にかかるコード名判定処理（ポリ）の例を示すフローチャートである。
【図２６】図２６は、本実施の形態にかかる５音以上処理の例を示すフローチャートである。
【図２７】図２７は、本実施の形態にかかるＰｏｌｙ遷移による拍点ポイントジャッジ振り分け処理の例を示すフローチャートである。
【図２８】図２８は、本実施の形態にかかる拍点ポイントジャッジ４−４処理の例を示すフローチャートである。
【図２９】図２９は、本実施の形態にかかる曲頭処理の例を示すフローチャートである。
【図３０】図３０は、本実施の形態にかかるコード保持（ベース）処理の例を示すフローチャートである。
【図３１】図３１は、本実施の形態にかかるアルペジオ処理の例を示すフローチャートである。
【図３２】図３２は、本実施の形態にかかるシンコペーション処理の例を示すフローチャートである。
【図３３】図３３は、本実施の形態にかかるドミナントモーション処理の例を示すフローチャートである。
【図３４】図３４は、本実施の形態にかかるランニングベース／オルターネートベース処理の例を示すフローチャートである。
【図３５】図３５は、本実施の形態にかかるコード保持（弱拍）処理の例を示すフローチャートである。
【図３６】図３６は、本実施の形態にかかる拍点ポイントジャッジ４−３処理の例を示すフローチャートである。
【図３７】図３７は、本実施の形態にかかる拍点ポイントジャッジ４−２処理の例を示すフローチャートである。
【図３８】図３８は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
【図３９】図３９は、本実施の形態にかかる４音／３音Ｐｏｌｙテーブル参照処理の例を示すフローチャートである。
【図４０】図４０は、本実施の形態にかかる２音Ｐｏｌｙテーブル参照処理の例を示すフローチャートである。
【図４１】図４１は、本実施の形態にかかるメロディシーケンステーブルの例を示す図である。
【図４２】図４２は、本実施の形態にかかる第１のコードテーブルの例を示す図である。
【図４３】図４３は、本実施の形態にかかる第２のコードテーブルの例を示す図である。
【図４４】図４４は、本実施の形態にかかるメロディ機能テーブルの一例の部分を示す図である。
【図４５】図４５は、本実施の形態にかかる無判定コードテーブルの一例の部分を示す図である。
【図４６】図４６は、本実施の形態にかかる４音および３音用テーブルの例を示す図である。
【図４７】図４７は、本実施の形態にかかる２音用テーブルの例を示す図である。
【図４８】図４８は、本実施の形態にかかる自動伴奏処理の例を示すフローチャートである。
【図４９】図４９は、楽譜の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して、本発明の実施の形態について説明する。図１は、本実施の形態にかかる電子楽器の外観を示す図である。図１に示すように、本実施の形態にかかる電子楽器１０は、鍵盤１１を有する。また、鍵盤１１の上部には、音色の指定、自動伴奏の開始・終了、リズムパターンの指定などを行なうためのスイッチ（符号１２、１３参照）や、演奏される楽曲に関する種々の情報、例えば、音色、リズムパターン、コード名などを表示する表示部１５を有する。本実施の形態にかかる電子楽器１０は、例えば、６１個の鍵（Ｃ２〜Ｃ７）を有する。また、電子楽器１０は、自動伴奏をオンする自動伴奏モード、および、自動伴奏をオフにする通常モードの２つの演奏モードのうち、何れかの下での演奏が可能である。
【００１２】
図２は、本発明の実施の形態にかかる電子楽器の構成を示すブロックダイヤグラムである。図２に示すように、本実施の形態にかかる電子楽器１０は、ＣＰＵ２１、ＲＯＭ２２、ＲＡＭ２３、サウンドシステム２４、スイッチ群２５、鍵盤１１および表示部１５を備える。
【００１３】
ＣＰＵ２１は、電子楽器１０全体の制御、鍵盤１１の鍵の押鍵やスイッチ群２５を構成するスイッチ（例えば、図１の符号１２、１３参照）の操作の検出、鍵やスイッチの操作にしたがったサウンドシステム２４の制御、押鍵された楽音の音高にしたがったコード名の決定、自動伴奏パターンおよびコード名にしたがった自動伴奏の演奏など、種々の処理を実行する。
【００１４】
ＲＯＭ２２は、ＣＰＵ２１に実行させる種々の処理、例えば、スイッチの操作、鍵盤の何れかの鍵の押鍵、押鍵に応じた楽音の発音指示、押鍵よりに指定された音高にしたがったコード名の決定、自動伴奏パターンおよびコード名に基づく自動伴奏の演奏などのプログラムを記憶する。また、ＲＯＭ２２は、ピアノ、ギター、バスドラム、スネアドラム、シンバルなどの楽音を生成するための波形データを格納した波形データエリア、および、種々の自動伴奏パターンを示すデータ（自動伴奏データ）を格納した自動伴奏パターンエリアを有する。ＲＡＭ２３は、ＲＯＭ２２から読み出されたプログラムや、処理の過程で生じたデータを記憶する。なお、本実施の形態において、自動伴奏パターンは、コード名ごとの構成音を含むコード自動伴奏パターン、及びドラム音を含むリズムパターンを有する。例えば、コード自動伴奏パターンのデータのレコードは、上記情報に加えて、コード構成音を示すデータを含む。また、リズムパターンのデータは、楽音の音色、発音タイミングを含む。
【００１５】
サウンドシステム２４は、音源部２６、オーディオ回路２７およびスピーカ２８を有する。音源部２６は、例えば、押鍵された鍵についての情報或いは自動伴奏パターンについての情報をＣＰＵ２１から受信すると、ＲＯＭ２２の波形データエリアから所定の波形データを読み出して、所定の音高の楽音データを生成して出力する。また、音源部２６は、波形データ、特に、スネアドラム、バスドラム、シンバルなど打楽器の音色の波形データを、そのまま楽音データとして出力することもできる。オーディオ回路２７は、楽音データをＤ／Ａ変換して増幅する。これによりスピーカ２８から音響信号が出力される。
【００１６】
本実施の形態にかかる電子楽器１０は、通常モードの下においては、鍵盤１１の鍵の押鍵に基づいて楽音を発生する。その一方、電子楽器１０は、自動伴奏スイッチ（図示せず）が操作されることにより、自動伴奏モードとなる。自動伴奏モードの下では、鍵の押鍵により、その鍵の音高の楽音が発生する。また、押鍵された鍵の音高に基づいてコード名が決定され、そのコード名のコード構成音を含む自動伴奏パターンにしたがった楽音が発生する。なお、自動伴奏パターンは、コード自動伴奏パターンと、バスドラム、スネアドラム、シンバルなど音高の変化を伴わないリズムパターンとを含む。以下、電子楽器１０が、自動伴奏モードの下で動作する場合について説明する。
【００１７】
以下、本実施の形態にかかる電子楽器１０において実行される処理についてより詳細に説明する。図３は、本実施の形態にかかる電子楽器において実行されるメインフローの例を示すフローチャートである。なお、図示しないが、メインフローの実行中に、所定の時間間隔で、割込カウンタのカウンタ値をインクリメントするタイマインクリメント処理も実行される。
【００１８】
図３に示すように、電子楽器１０のＣＰＵ２１は、電子楽器１０の電源が投入されると、ＲＡＭ２３中のデータや、表示部１５の画像のクリアを含むイニシャル処理（初期化処理）を実行する（ステップＳ３０１）。イニシャル処理が終了すると、ＣＰＵ２１は、スイッチ群２５を構成するスイッチのそれぞれの操作を検出し、検出された操作にしたがった処理を実行するスイッチ処理を実行する（ステップＳ３０２）。
【００１９】
例えば、スイッチ処理においては、音色指定スイッチや、自動伴奏パターンの種別の指定スイッチ、自動伴奏パターンのオン・オフの指定スイッチなど、種々のスイッチの操作が検出される。自動伴奏パターンがオンとなったときには、ＣＰＵ２１は、演奏モードを、自動伴奏モードに切り換える。演奏モードを示すデータは、ＲＡＭ２３の所定の領域に指定される。音色や自動伴奏パターンの種別を示すデータも、同様に、ＲＡＭ２３の所定の領域に格納される。
【００２０】
次いで、ＣＰＵ２１は、鍵盤処理を実行する（ステップＳ３０３）。図４は、本実施の形態にかかる鍵盤処理の例をより詳細に示すフローチャートである。鍵盤処理において、ＣＰＵ２１は、鍵盤１１の鍵を走査する。鍵の走査結果であるイベント（鍵オン或いはオフ）は、そのイベントが生じた時刻の情報とともに、ＲＡＭ２３に一時的に記憶される。ＣＰＵ２１は、ＲＡＭ２３に記憶された鍵の走査結果を参照して（ステップＳ４０１）、イベントが有るか否かを判断する（ステップＳ４０２）。ステップＳ４０２でＹｅｓと判断された場合には、ＣＰＵ１１は、イベントが鍵オンであるか否かを判断する（ステップＳ４０３）。
【００２１】
ステップＳ４０３でＹｅｓと判断された場合には、ＣＰＵ２１は、当該鍵オンがあった鍵について発音処理を実行する（ステップＳ４０４）。発音処理においては、ＣＰＵ２１は、ＲＡＭ２３に記憶されていたメロディ鍵用の音色データ、および、鍵の音高を示すデータを読み出してＲＡＭ２３に一時的に記憶する。後述する音源発音処理（図３のステップＳ３０６）において、音色や音高を示すデータは音源部２６に与えられる。音源部２６は、音色および音高を示すデータにしたがって、ＲＯＭ２２の波形データを読み出して、所定の音高の楽音データを生成する。これにより、スピーカ２８から所定の楽音が発生する。
【００２２】
その後、ＣＰＵ２１は、鍵オンがあった鍵についての音高情報（例えば鍵番号）および押鍵タイミング（例えば押鍵時刻）をＲＡＭ２３に格納する（ステップＳ４０５）。押鍵タイミングは、割り込みカウンタのカウンタ値に基づいて算出することができる。
【００２３】
ステップＳ４０３でＮｏと判断された場合には、イベントが鍵オフであったことになる。したがって、ＣＰＵ２１は、鍵オフになった鍵についての消音処理を実行する（ステップＳ４０６）。消音処理においては、ＣＰＵ２１は、消音すべき楽音の音高を示すデータを生成し、ＲＡＭ２３に一時的に記憶する。この場合にも、後述する音源発音処理（ステップＳ３０６）において、消音すべき楽音の音色および音高を示すデータが、音源部２６に与えられる。音源部２６は、与えられたデータに基づいて、所定の楽音を消音する。その後、ＣＰＵ２１は、鍵オフがあった鍵について、押鍵されていた時間（押鍵時間）をＲＡＭ２３に格納する（ステップＳ４０７）。
【００２４】
ＣＰＵ２１は、全ての鍵イベントについて処理が終了したかを判断する（ステップＳ４０８）。ステップＳ４０８でＮｏと判断された場合には、ステップＳ４０２に戻る。
【００２５】
鍵盤処理（図３のステップＳ３０３）が終了すると、ＣＰＵ２１は、コード名判定処理を実行する（ステップＳ３０４）。図５は、本実施の形態にかかるコード名判定処理の例を示すフローチャートである。本実施の形態においては、単音（モノ）か複音（ポリ）かでコード名の判定方法を異ならせている。モノの場合には、ＣＰＵ２１は、後述する、コード名判定処理（モノ）を実行する。ポリの場合には、ＣＰＵ２１は、後述するコード名判定処理（ポリ）を実行する。
【００２６】
まず、ＣＰＵ２１は、現在時刻が属する拍の情報および押鍵情報（鍵オンの時刻や鍵オフまでの時間）を特定して、現在の拍において押鍵された鍵を特定し、かつ、現在時刻が属する拍の一つ前の区間（前拍区間）において、押鍵されていた鍵の情報を取得する。また、前拍区間コード名（先行コード：Ｐｒｅｖｉｏｕｓ  ＣＨｏｒｄ  ｎａｍｅ）ＰｒｅＣＨの読み込み、を行う（ステップＳ５０１）。ステップＳ５０１において、現在の拍における押鍵された鍵の情報が、モノの場合の現在メロディ音ＣＭ（後述する）の初期値、前拍区間の先頭で押鍵された鍵の情報が、モノの場合の先行メロディ音ＰＭ（後述する）の初期値となる。次に、ＣＰＵ２１は、前拍区間コード再検証処理を行う（ステップＳ５０２）。
【００２７】
図６は、本実施の形態にかかる前拍区間コード再検証処理の例を示すフローチャートである。この前拍区間コード再検証処理は、前拍区間で決定されたコード名が正しかったかどうかを再検証するための処理である。例えばピアノ曲によくある１６分音符でドソミソという分散和音が弾かれるとき、本実施形態では基本的に拍の頭の音でコードを決めてしまうため、最初のドはジャッジに入れられるが、その後のソミソは入れられない。よって、その次の拍で押鍵があったときに、前拍区間の音によりコード名を再判定し、再判定したコード名が前拍と異なっている場合には、前拍区間のコード名を再判定したコード名に置き換える。このようにすることで、前拍区間のコード名が間違っていたとしても、次の拍で修正することにより、次の拍でのコード判定がより正確になる。
【００２８】
まず、ＣＰＵ２１は、前拍区間の１６分音符刻みのタイミングで、全ての音を拾い、音長の長いものから４音を抽出する。（ステップＳ６０１）。次に、抽出した４音が前拍区間のコードの構成音に含まれているかを判断し（ステップＳ６０２）、含まれていれば（ステップＳ６０２でＹＥＳと判断される場合）ＰｒｅＣＨは正解なので何もせず、含まれていない場合（ステップＳ６０２でＮＯと判断される場合）、コードデータベース（図示せず）を参照して正しいコードを確認し、直前のコードの機能（ＰｒｅＣＨ）をこの正しいコードの機能に変更する（ステップＳ６０３）。要するに、モノのときの、音長加算の考え方と同じであるが、本処理では目的が分散和音をみつけることができるか、ということがその目的である。
【００２９】
図５に戻って、ＣＰＵ２１は、押鍵音が有るか否かを判断する。具体的には、ＣＰＵ２１は、拍の情報および押鍵情報に基づいて、現在時刻が属する拍の先頭に押鍵中の鍵が存在しているかを判断する（ステップＳ５０３）。ステップＳ５０３でＮｏと判断された場合には、コード名判定処理が終了する。ステップＳ５０３でＹｅｓと判断された場合には、ＣＰＵ２１は、現在メロディ機能（Ｃｕｒｒｅｎｔ  Ｍｅｌｏｄｙ  Ｆｕｎｃｔｉｏｎ：ＣＭＦ）を取得する（ステップＳ５０４）。ここに、現在メロディ機能ＣＭＦは、先行コード名ＰｒｅＣＨに対する現在メロディ音ＣＭの機能を示す。本実施の形態において、ＣＭＦは、現在メロディ音ＣＭが、先行コード名ＰｒｅＣＨのコード構成音であることを示すコードトーン（Ｃｈｏｒｄ  Ｔｏｎｅ：ＣＴ）、現在のスケール（調性）の構成音であることを示すスケールノート（ＳｃａｌｅＮｏｔｅ：ＳＮ）、その他の音（非和声音）を示すアザートーン（Ｏｔｈｅｒ  Ｔｏｎｅ：ＯＴ）の何れかとなる。
【００３０】
より具体的には、コード名と音名との間を関連付けたメロディ機能テーブルをＲＯＭ２２に格納し、ＣＰＵ２１が、現在メロディ音ＣＭおよび先行コード名ＰｒｅＣＨの組に対応付けられた値を参照して、現在メロディ機能を判断している。図４４は、本実施の形態にかかるメロディ機能テーブルの一例の部分を示す図である。図４４に示すように、メロディ機能テーブル４４００においては、現在メロディ音ＣＭと先行コード名ＰｒｅＣＨからなる値の組に対応して、所定の値が取得できるようになっている。図４４において、メロディ機能テーブル４４００中、ＣＴはコードトーンを示し（例えば、符号４４０１〜４４０３参照）、ＳＮは、スケールノートを示す（例えば、符号４４１１〜４４１３参照）。また、図４４においては、メロディ機能テーブル４４００中、何も記載されていない欄（例えば、符号４４２１、４４２２参照）は、アザートーンを示す。
【００３１】
図５に戻って、ＣＰＵ２１は、モノｏｒポリ判定処理を行う（ステップＳ５０５）。図７は、本実施の形態にかかるモノｏｒポリ判定処理の例を示すフローチャートである。
ＣＰＵ２１は、鍵盤入力を受け付け（ステップＳ７０１）、テンポが８０以下（一分間に８０拍以下）かどうかを判断する（ステップＳ７０２）。この判断がＹＥＳの場合には、ステップＳ７０３へ、ＮＯの場合には、ステップＳ７０４に処理を移す。ＣＰＵ２１は、ステップＳ７０３で、６４分音符以下の間隔で複数押鍵があるかどうかを判断し、この判断がＹＥＳの場合、ステップＳ７０５に処理を移し、ポリフラグをＯＮにする。ＮＯの場合、ステップＳ７０６に処理を移し、モノフラグをＯＮにする。ＣＰＵ２１は、ステップＳ７０４で、３２分音符以下の間隔で複数押鍵があるかどうかを判断し、この判断がＹＥＳの場合、ステップＳ７０５に処理を移し、ポリフラグをＯＮにする。ＮＯの場合、ステップＳ７０６に処理を移し、モノフラグをＯＮにする。
【００３２】
図５に戻って、ＣＰＵ２１は、受け付けた鍵盤入力が、モノであるか否かを判断する（ステップＳ５０６）。具体的には、モノフラグがＯＮであるか否かを判断する。この判断が、ＹＥＳの場合、ＣＰＵ２１は、処理をステップＳ５０７に移し、ＮＯの場合には、処理をステップＳ５０８に移す。ステップＳ５０７では、モノ用のコード判定であるコード名判定処理（モノ）を行い、ステップＳ５０８では、ポリ用のコード判定であるコード名判定処理（ポリ）を行う。
【００３３】
図８〜図２４を参照して、モノの場合のコード付けについて説明する。図８は、本実施の形態にかかるコード名判定処理（モノ）の例を示すフローチャートである。概略的には、現在発音されているメロディ音を、現在メロディ音（Ｃｕｒｒｅｎｔ  Ｍｅｌｏｄｙ）ＣＭ、それより１つ前に発音されているメロディ音を、先行メロディ音（Ｐｒｅｖｉｏｕｓ  Ｍｅｌｏｄｙ）ＰＭ、現在より一つ前に演奏されていたコード名を、先行コード名（Ｐｒｅｖｉｏｕｓ  ＣＨｏｒｄ  ｎａｍｅ）ＰｒｅＣＨとして、現在メロディ音ＣＭ、先行メロディ音ＰＭおよび先行コード名ＰｒｅＣＨに基づいて、新たに発音すべき現在コード名（Ｃｕｒｒｅｎｔ  ＣＨｏｒｄ  ｎａｍｅ）ＣｕｒＣＨを決定している。なお、本実施の形態においては、楽曲の調性をハ長調（ＣＭａｊ）或いはイ短調（Ａｍｉｎ）として、コード名については、IＭａｊ、IIｍなど、主音に対する度数で表し、そのデータをＲＡＭ２３などに記憶している。他の調性の場合には、当該調性のルート音と、「Ｃ」（或いは「Ａ」）の音との音高差に基づいて、ルート音を伴うコード名を得ることが可能である。
【００３４】
ただし、押鍵が何拍目に行なわれたかなど、押鍵された時間的な位置や、押鍵が拍の頭であるか否か、或いは、複数の押鍵による音型（持続、順次進行、跳躍など）に基づいて、上記現在メロディ音ＣＭおよび先行メロディ音ＰＭを決定すべき場合がある。つまり、現実に現在押鍵されている鍵以外の押鍵について現在メロディ音ＣＭとすべき場合や、現在押鍵された鍵の１つ前に押鍵された鍵以外の押鍵について先行メロディ音ＰＭとすべき場合がある。以下、コード判定処理（モノ）において、ステップＳ８０２〜８０８は、主として、現在メロディ音ＣＭおよび先行メロディ音ＰＭの決定に関する。引き続いて実行されるステップＳ８０９が、現在メロディ音ＣＭ、先行メロディ音ＰＭおよび先行コード名ＰｒｅＣＨに基づいて、具体的に現在コード名ＣｕｒＣＨを決定する処理となる。
【００３５】
まず、ＣＰＵ２１は、現在コード名ＣｕｒＣＨを、先行コード名ＰｒｅＣＨにコピーする（ステップＳ８０１）。次に、ＣＰＵ２１は、後述するコードテーブルを指定するテーブル指定情報を、第２のコードテーブルを指定する情報に設定する（ステップＳ８０２）。コードテーブルには、主として押鍵が１拍目であるときに用いる第１のコードテーブルと、それ以外のときに用いる第２のコードテーブルが含まれ、それぞれＲＯＭ２２に格納されている。テーブル指定情報は、第１のコードテーブル或いは第２のコードテーブルの何れを用いるかを示す情報であり、ＲＡＭ２３に格納される。
【００３６】
次いで、押鍵された鍵の時間的位置、つまり、鍵が何拍目に押鍵されたかを判断する（ステップＳ８０３、８０４、８０５）。押鍵が１拍目である場合（ステップＳ８０３でＹｅｓ）或いは押鍵が３拍目である場合（ステップＳ８０４でＹｅｓ）には、ＣＰＵ２１は、１拍目・３拍目対応ノート決定処理を実行する（ステップＳ８０５）。押鍵が２拍目である場合（ステップＳ８０６でＹｅｓ）には、２拍目対応ノート決定処理を実行する（ステップＳ８０７）。また、ステップＳ８０６でＮｏと判断された場合、つまり、押鍵が４拍目である場合には、４拍目対応ノート決定処理を実行する（ステップＳ８０８）。
【００３７】
本実施の形態においては、楽曲は４分の４拍子であり、１小節が４拍で構成される。押鍵がｎ拍目であることは、押鍵のタイミングが、第ｎ拍の先頭以降で、第（ｎ＋１）拍の先頭よりも時間的に早いことを意味している。
【００３８】
楽曲の構成要素には拍子および拍という概念がある。また、拍子においては拍ごとに重みがあり、上記拍の重みを考慮してメロディは進行する。また、シンコペーションなど、場合によって拍の重みが移動する場合もある。本実施の形態においては、拍の重みを考慮して、最適なメロディの流れを構成する構成音を抽出し、コード判定に用いるのに最適な現在メロディ音ＣＭおよび先行メロディ音ＰＭを特定する。
【００３９】
図９〜図１２は、本実施の形態にかかる１拍目・３拍目対応ノート決定処理の例を示すフローチャートである。図９に示すように、押鍵が１拍目に関するものであるかを判断する（ステップＳ９０１）。ステップＳ９０１でＹｅｓと判断された場合には、ＣＰＵ２１は、テーブル指定情報を、第１のテーブルを示す情報に変更する（ステップＳ９０２）。次いで、ＣＰＵ１２は、第１のドミナントモーション判定処理を実行する（ステップＳ９０３）。
【００４０】
ドミナントモーション判定処理は、メロディの流れからドミナントモーション（つまり、属和音（ドミナント）から主和音（トニック）への進行）を抽出するものである。本実施の形態においては、処理においてコード名を考慮した第１のドミナントモーション判定処理と、コード名を考慮しない第２のドミナントモーション判定処理とが用いられる。図１３は、本実施の形態にかかる第１のドミナントモーション判定処理の例を示すフローチャートである。
【００４１】
図１３に示すように、ＣＰＵ２１は、ＲＡＭ２３に格納された先行コード名ＰｒｅＣＨが、メジャー系のドミナントコードのいずれかに対応するかを判断する（ステップＳ１３０１）。ここで、本実施の形態にかかる第１のドミナントモーション判定処理においては、例えば、メジャー系のドミナントコードは、「ＶＭａｊ」、「Ｖ７」および「VIIｍ７（−５）」としている。ステップＳ１３０１でＹｅｓと判断された場合には、ＣＰＵ２１は、（先行メロディ音ＰＭおよび現在メロディ音ＣＭの値の組である（ＰＭ，ＣＭ）が、（Ｆ，Ｅ）、（Ｂ，Ｃ）、（Ｄ，Ｃ）の何れかであるかを判断する（ステップＳ１３０２）。ステップＳ１３０２では、先行メロディ音ＰＭから現在メロディ音ＣＭへの動きが、長調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。
【００４２】
ステップＳ１３０２でＹｅｓと判断された場合には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨを「ＩＭａｊ」に決定し、その情報をＲＡＭ２３に格納する（ステップＳ１３０３）。その後、ＣＰＵ２１は、ドミナントモーション処理において第１の判定結果であったことを示す情報をＲＡＭ２３に格納する（ステップＳ１３０４）。ステップＳ１３０１でＮｏ或いはステップＳ１３０２でＮｏと判断された場合には、ＣＰＵ２１は、先行コード名ＰｒｅＣＨが、マイナー系のドミナントコードの何れかに対応するかを判断する（ステップＳ１３０５）。ここで、本実施の形態において、例えば、マイナー系のドミナントコードは、「IIIＭａｊ」および「III７」としている。
【００４３】
ステップＳ１３０５でＹｅｓと判断された場合には、ＣＰＵ２１は、（ＰＭ，ＣＭ）が、（Ｇ＃，Ａ）、（Ｂ，Ａ）、（Ｄ，Ｃ）の何れかであるかを判断する（ステップＳ１３０６）。ステップＳ１３０６においては、先行メロディ音ＰＭから現在メロディ音ＣＭへの動きが、短調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。ステップＳ１３０６でＹｅｓと判断された場合には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨを「VIｍｉｎ」に決定し、その情報をＲＡＭ２３に格納する（ステップＳ１３０７）。その後、ステップＳ１３０４に進む。
【００４４】
ステップＳ１３０５でＮｏと判断された場合、或いは、ステップＳ１３０６でＮｏと判断された場合には、ＣＰＵ２１は、ドミナントモーション処理において第２の判定結果であったことを示す情報をＲＡＭ２３に格納する（ステップＳ１３０８）。
【００４５】
ステップＳ９０３の第１のドミナントモーション判定処理が終了すると、ＣＰＵ２１は、第１のドミナントモーション判定処理の結果が、第２の処理結果であったかを判断する（ステップＳ９０４）。ステップＳ９０４でＮｏと判断された場合、つまり、第１のドミナントモーション判定処理の結果が、第１の処理結果であった場合には、先行メロディ音ＰＭおよび現在メロディ音ＣＭを初期値から変更することなく、ＲＡＭ２３に格納して、処理を終了する（ステップＳ９０５）。ステップＳ９０４でＹｅｓと判断された場合には、ＣＰＵ２１は、ＲＡＭ２３に格納された押鍵情報を参照して、現在時刻に対応する拍の直前拍に押鍵があったかを判断する（ステップＳ９０６）。
【００４６】
ステップＳ９０４でＹｅｓと判断された場合には、ＣＰＵ２１は、ＲＡＭ２３の押鍵情報を参照して、直前拍先頭以降にも押鍵があったかを判断する（ステップＳ９０７）。ステップＳ９０７でＮｏと判断されたことは、直前拍および今回の拍でそれぞれ４分音符が押鍵されたことを意味する。この場合の処理については後述する。ステップＳ９０７でＹｅｓと判断された場合には、ＣＰＵ２１は、ＲＡＭ２３に格納された押鍵情報中、直前拍先頭以降に押鍵された鍵の発音時間を参照して、現在まで発音中であるかを判断する（ステップＳ９０９）。ステップＳ９０９では、拍頭の押鍵ではなくても、それが直前拍先頭以降に押鍵されかつ維持されているものであれば、シンコペーションに該当するため、シンコペーションに該当する押鍵があったかを判断している。
【００４７】
ステップＳ９０９でＹｅｓと判断された場合には、先行メロディ音ＰＭは初期値のまま、その一方、直前拍先頭以降に押鍵された鍵を現在メロディ音ＣＭとするとともに、シンコペーションフラグＳＹＮを「１」にセットして、ＲＡＭ２３に格納する（ステップＳ９１０）。先行メロディ音ＰＭおよび現在メロディ音ＣＭは、ＲＡＭ２３に格納される。シンコペーションに該当する押鍵は、拍頭における押鍵と同様の重みを有するため、拍頭と同様に扱われる。
【００４８】
次に、図１０を参照して、ステップＳ９０６でＮｏであった場合について説明する。ステップＳ９０６でＮｏと判断された場合には、ＣＰＵ２１は、現在の拍先頭における押鍵が曲開始音に該当するかを判断する（ステップＳ１００１）。ステップＳ１００１は、ＣＰＵ２１が、ＲＡＭ２３に格納された押鍵情報を参照して、最初の押鍵情報であるかを判断することにより実現できる。ステップＳ１００１でＹｅｓと判断された場合には、先行メロディ音ＰＭとして、現在メロディ音ＣＭを与える。また、現在メロディ音ＣＭを初期値から変更することはないが、ＣＰＵ２１は、テーブル指定情報を第２のコードテーブルを指定する情報に変更する（ステップＳ１００２）。
【００４９】
ステップＳ１００１でＮｏと判断された場合には、８拍以上の時間、押鍵が無いかを判断する（ステップＳ１００３）。ステップＳ１００３でＹｅｓと判断された場合には、ＣＰＵ２１は、現在メロディ音ＣＭは初期値のまま維持し、その一方、先行メロディ音ＰＭとして、現在メロディ音ＣＭを与え、ＲＡＭ２３に情報を格納する（ステップＳ１００４）。ステップＳ１００３でＹｅｓと判断される場合は、２小節以上、新たな押鍵が無いことになる。この場合には、メロディシーケンスの意味が薄くなるため、２小節以上前に押鍵された先行メロディ音ＰＭの初期値は無視することとしている。ステップＳ１００３でＮｏと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭおよび現在メロディ音ＣＭを初期値のまま維持する（ステップＳ１００５）。
【００５０】
次に、図１１を参照して、ステップＳ９０７でＮｏと判断された場合について説明する。ステップＳ９０７でＮｏと判断された場合には、ＣＰＵ２１は、上述したメロディ機能テーブル（図４４）を参照し、現在メロディ機能（Ｃｕｒｒｅｎｔ  Ｍｅｌｏｄｙ  Ｆｕｎｃｔｉｏｎ：ＣＭＦ）が、非和声音（Ｏｔｈｅｒ  Ｔｏｎｅ：ＯＴ）であるかを判断する（ステップＳ１１０１）。ここに、現在メロディ機能ＣＭＦは、先行コード名ＰｒｅＣＨに対する現在メロディ音ＣＭの機能を示す。本実施の形態において、ＣＭＦは、現在メロディ音ＣＭが、先行コード名ＰｒｅＣＨのコード構成音であることを示すコードトーン（Ｃｈｏｒｄ  Ｔｏｎｅ：ＣＴ）、現在のスケール（調性）の構成音であることを示すスケールノート（ＳｃａｌｅＮｏｔｅ：ＳＮ）、その他の音（非和声音）を示すアザートーン（Ｏｔｈｅｒ  Ｔｏｎｅ：ＯＴ）の何れかとなる。
【００５１】
ステップＳ１１０１でＹｅｓと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭおよび現在メロディ音ＣＭを、初期値のまま維持する（ステップＳ１１０２）。その一方、ステップＳ１１０１でＮｏと判断された場合には、ＣＰＵ２１は、現在メロディ機能ＣＭＦがスケールノートＳＮであるかを判断する（ステップＳ１１０３）。ステップＳ１１０３でＹｅｓと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭと現在メロディ音ＣＭとの差が２半音以内であるかを判断する（ステップＳ１１０４）。ステップＳ１１０４では、いわゆる順次進行であるかが判断されている。ステップＳ１１０４でＹｅｓと判断された場合、または、ステップＳ１１０３でＮｏと判断された場合には、第１のドミナントモーション処理を実行する（ステップＳ１１０５）。
【００５２】
次いで、ＣＰＵ２１は、第１のドミナントモーション判定処理（ステップＳ１１０５）において、第２の判定結果であるかを判断する（ステップＳ１１０６）。ステップＳ１１０６でＮｏと判断された場合、つまり、第１の判定結果である場合には、ＣＰＵ２１は、先行メロディ音ＰＭおよび現在メロディ音ＣＭを、初期値のまま維持する（ステップＳ１１０２）。ステップＳ１１０６でＹｅｓと判断された場合には、ＣＰＵ２１は、現在の押鍵、つまり、処理対象となっている押鍵が１拍目のものであるかを判断する（ステップＳ１１０７）。ステップＳ１１０７でＹｅｓと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭおよび現在メロディ音ＣＭを、初期値のまま維持する（ステップＳ１１０８）。
【００５３】
その一方、ステップＳ１１０７でＮｏと判断された場合、つまり、処理対象となっている押鍵が３拍目のものであれば、ＣＰＵ２１は、先行メロディ音ＰＭとして、初期的な先行メロディ音ＰＭよりさらに１つ前に押鍵された音高ＰＰＭを与える（ステップＳ１１０９）。なお、現在メロディ音ＣＭは初期値が維持される。これは、３拍目で順次進行を構成する楽音は、装飾的な音である可能性が高く、メロディラインを支配する本来の楽音は、さらにその一拍前の楽音とすることが適切であると考えられるからである。
【００５４】
次に、ステップＳ９０９でＮｏと判断された場合について説明する。図１２に示すように、ＣＰＵ２１は、直前拍における拍頭以降の押鍵音を特定し（ステップＳ１２０１）、特定された押鍵音の音高が、初期的なＣＭと同一であるかを判断する（ステップＳ１２０２）。ステップＳ１２０２でＹｅｓと判断された場合には、ＣＰＵ２１は、現在メロディ音ＣＭを初期的な状態で維持し、その一方、先行メロディ音ＰＭとして、現在メロディ音ＣＭの値を与える（ステップＳ１２０３）。例えば、直前拍において、８分音符で「Ｄ」、「Ｃ」という順でメロディが進行し、現在の拍での押鍵が「Ｃ」であった場合を考える。この場合には、直前拍の最初の「Ｄ」の音は装飾音であると考えて、「Ｄ」から「Ｃ」というシーケンスではなく、「Ｃ」から「Ｃ」というシーケンスが適当であると考えている。このため、先行メロディ音を、現在メロディ音と同じにして、同じ音の連続としている。
【００５５】
ステップＳ１２０２でＮｏと判断された場合には、ＣＰＵ２１は、特定された拍頭以降の押鍵音が、全て、先行メロディ音ＰＭと等しいかを判断する（ステップＳ１２０４）。ステップＳ１２０４でＹｅｓと判断された場合には、ステップＳ１１０３に進む。例えば、直前拍において、１６分音符で、「Ｄ」、「Ｃ」、「Ｃ」、「Ｃ」という４つの押鍵がなされたと考える。この場合には、拍頭であるからといって「Ｄ」は、装飾的な音であることも考えられるため、拍頭の押鍵である「Ｄ」を、先行メロディ音ＰＭとすべきではない場合もある。そこで、ステップＳ１１０３以降の処理を実行している。
【００５６】
その一方、ステップＳ１２０４でＮｏと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭおよび現在メロディ音ＣＭを、初期値のまま維持する（ステップＳ１２０５）。
【００５７】
次に、２拍目対応ノート決定処理（ステップＳ８０７）について説明する。図１４〜図１７は、本実施の形態にかかる２拍目対応ノート決定処理の例を示すフローチャートである。図１４に示すように、ＣＰＵ２１は、１拍目に押鍵が無かったかを判断する（ステップＳ１４０１）。ステップＳ１４０１でＹｅｓと判断された場合、つまり、押鍵が無かった場合には、ＣＰＵ２１は、テーブル指定情報を第１のコードテーブルを指定する情報に変更する（ステップＳ１４０１）。例えば、曲の途中で、前の小節の音が延び、１拍目が休符で、２拍目から次のフレーズが開始されるときには、本実施の形態では、２拍目で押鍵された音が１拍目と同様の重みがあると考え、１拍目用のコードテーブルである第１のコードテーブルを使用するようにしている。
【００５８】
２拍目対応ノート処理では、１拍目・３拍目対応ノート決定処理の第１のドミナントモーション判定処理（ステップＳ９０３）およびその判定結果に基づく処理（ステップＳ９０４、９０５）が省略されている。ステップＳ１４０３〜ステップＳ１４０７は、それぞれ、図９のステップＳ９０６〜９１０と同様である。
【００５９】
また、図１５は、ステップＳ１４０３でＮｏと判断された場合に実行される処理である。ステップＳ１５０１、ステップＳ１５０３〜１５０５は、それぞれ、図１０のステップＳ１００１、ステップＳ１００３〜１００５と同様である。また、ステップＳ１５０２では、テーブル指定情報の変更が伴わないことを除き、図１０のステップＳ１００２と同様である。
【００６０】
次に、ステップＳ１４０４でＮｏと判断された場合について説明する。図１６に示すように、ＣＰＵ２１は、現在メロディ機能ＣＭＦが、非和声音ＯＴであるかを判断する（ステップＳ１６０１）。ステップＳ１６０１およびステップＳ１６０１でＹｅｓの場合に進むステップＳ１６０２は、図１１のステップＳ１１０１、１１０２と同様である。
【００６１】
ステップＳ１６０１でＮｏと判断された場合には、ＣＰＵ２１は、先行コード名ＰｒｅＣＨが無判定コード以外のコードであるかを判断する（ステップＳ１６０３）。図２４（特にステップＳ２４０５）において説明するように、無判定コードについては、先の処理で転調フラグが「１」以上の値となっている。そこで、ステップＳ１６０３では、ＲＡＭ２３に格納された転調フラグが「１」以上であるかを判断すれば良い。
【００６２】
ステップＳ１６０３でＮｏ、つまり、先行コード名ＰｒｅＣＨが無判定コードである場合には、ＣＰＵ２１は、先行メロディ音ＰＭとして、現在メロディ音ＣＭを与える（ステップＳ１６０４）。その一方、ステップＳ１６０３でＹｅｓと判断された場合、つまり、先行コード名ＰｒｅＣＨが無判定コード以外である場合には、現在メロディ機能ＣＭＦがスケールノートＳＮであるかを判断する（ステップＳ１６０５）。ステップＳ１１０３でＹｅｓと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭと現在メロディ音ＣＭとの差が２半音以内であるかを判断する（ステップＳ１６０６）。ステップＳ１６０５およびステップＳ１６０６は、図１１のステップＳ１１０３および１１０４と同様である。ステップＳ１６０５でＮｏと判断された場合、或いは、ステップＳ１６０６でＹｅｓと判断された場合には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨとして、先行コード名ＰｒｅＣＨを与える（ステップＳ１６０７）。つまり、先行コード名ＰｒｅＣＨが保持されることになる。
【００６３】
２拍目や４拍目においては、先行コード名が維持されるコードホールドが行なわれる場合があるため、適切なコードホールドを実現している。本実施の形態では、現在メロディ機能ＣＭＦがコードトーン（ＣＴ）である場合、或いは、現在メロディ機能ＣＭＦがスケールノート（ＳＮ）であり、かつ、順次進行である場合には、コードホールドを行なっている。４拍子の楽曲では、２拍目および４拍目は弱拍である。したがって、メロディが弱拍を強調するものでない限り、基本的に、２拍目および４拍目のコードは、１拍目および３拍目のコードを維持している。
【００６４】
例えば、図４９に示す楽曲では、拍頭に「Ｃ」、「Ｄ」、「Ｅ」、「Ｆ」、「Ｅ」、「Ｄ」、「Ｃ」という音があり、この音のシーケンスは順次進行となっている。実際には、このシーケンスに適切なコード名は、ＩＭａｊ（ＣＭａｊ）である。しかしながら、ステップＳ１６０５〜ステップＳ１６０７に示す処理を実行しないと、２拍目や４拍目では、コード名がＩＭａｊ（ＣＭａｊ）以外になってしまう。そこで、ステップＳ１６０５〜１６０６に示すように一定の条件の下では、コードホールドを行なって、適切なコード名を得られるようにしている。
【００６５】
ステップＳ１６０７の後、ＣＰＵ２１は、ＲＡＭ２３中のコード決定フラグを「１」にセットする（ステップＳ１６０８）。この場合には、ステップＳ１６０７で既に現在コード名ＣｕｒＣＨが決定されるため、後続するコード決定の処理を要さないからである。
【００６６】
また、ステップＳ１６０６でＮｏと判断された場合には、ステップＳ１６０２に進み、先行メロディ音ＰＭおよび現在メロディ音ＣＭが維持される。
【００６７】
ステップＳ１４０６でＮｏと判断された場合の処理は、図１７に示される。図１７のステップＳ１７０１〜ステップＳ１７０５は、図１２のステップＳ１２０１〜１２０５と同様である。ステップＳ１７０４でＹｅｓと判断された場合には、図１６のステップＳ１６０５に進み、コードホールドが判断される。
【００６８】
次に、４拍目対応ノート決定処理（ステップＳ８０８）について説明する。図１８〜図１９は、本実施の形態にかかる４拍目対応ノート決定処理の例を示すフローチャートである。４拍目対応ノート決定処理は、２拍目対応ノート決定処理と類似する。
【００６９】
図１８に示すように、４拍目対応ノート決定処理においては、１拍目の押鍵の有無およびそれに伴う処理（図１４のステップＳ１４０１〜１４０２）は省略されている。図１８において、ステップＳ１８０１〜１８０５は、図１４のステップＳ１４０３〜１４０７と同様である。また、ステップＳ１８０１でＮＯと判断された場合には、図１５の処理が実行される。
【００７０】
ステップＳ１８０２でＮｏと判断された場合には、図１９に示す処理が実行される。図１９において、ステップＳ１９０１〜１９０６は、図１６のステップＳ１６０１〜１６０６と同様である。４拍目対応ノート処理においては、ステップＳ１９０５でＮｏ或いはステップＳ１９０６でＹｅｓと判断されたときに、さらに、第２のドミナントモーション判定処理（ステップＳ１９０７）を実行し、その結果に基づいて、コードホールドと行なうべきかを判断している。
【００７１】
図２０は、本実施の形態にかかる第２のドミナントモーション判定処理の例を示すフローチャートである。第２のドミナントモーション判定処理では、メロディ音の遷移のみが判断され、先行コード名ＰｒｅＣＨのコード種別は考慮されない。図２０に示すように、ＣＰＵ２１は、（ＰＭ，ＣＭ）が、（Ｆ，Ｅ）、（Ｂ，Ｃ）、（Ｄ，Ｃ）の何れかであるかを判断する（ステップＳ２００１）。これは、図１３のステップＳ１３０２と同様である。ステップＳ２００１でＮｏと判断された場合には、ＣＰＵ２１は、（ＰＭ，ＣＭ）が、（Ｇ＃，Ａ）、（Ｂ，Ａ）、（Ｄ，Ｃ）の何れかであるかを判断する（ステップＳ２００３）。これは、図１３のステップＳ１３０６と同様である。
【００７２】
ステップＳ２００１でＹｅｓと判断された場合、或いは、ステップＳ２００３でＹｅｓと判断された場合には、ＣＰＵ２１は、ドミナントモーション処理において第１の判定結果であったことを示す情報をＲＡＭ２３に格納する（ステップＳ２００２）。その一方、ステップＳ２００３でＮｏと判断された場合には、ＣＰＵ２１は、ドミナントモーション処理において第１の判定結果であったことを示す情報をＲＡＭ２３に格納する（ステップＳ２００４）。
【００７３】
第２のドミナントモーション判定処理により第２の判定結果となった場合（ステップＳ１９０８でＹｅｓ）には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨとして、先行コード名ＰｒｅＣＨを与える（ステップＳ１９０９）。つまり、先行コード名ＰｒｅＣＨが保持されることになる。次いで、ＣＰＵ２１は、ＲＡＭ２３中のコード決定フラグを「１」にセットする（ステップＳ１９１０）。その一方、ステップＳ１９０８でＹｅｓと判断された場合には、ステップＳ１９０２に進み、先行メロディ音ＰＭおよび現在メロディ音ＣＭが維持される。
【００７４】
ステップＳ１８０４でＮｏと判断された場合には、図１７に示す処理が実行される。
【００７５】
ステップＳ８０５、８０７、８０８に示す、拍のそれぞれに対応したノート決定処理が終了すると、処理により修正された先行メロディ音ＰＭおよび現在メロディ音ＣＭに基づいて、コード決定処理が実行される（ステップＳ８０９）。図２１〜図２４は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
【００７６】
図２１に示すように、ＣＰＵ２１は、コードホールドにより既に現在コード名ＣｕｒＣＨが決定され、コード決定フラグが「１」ではないかを判断する（ステップＳ２１０１）。ステップＳ２１０１でＮｏと判断された場合、つまり、コード決定フラグが「１」である場合には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨおよびその発音時刻をＲＡＭ２３の所定の領域に格納する（ステップＳ２１０５）。
【００７７】
ステップＳ２１０１でＹｅｓと判断された場合、つまり、コード決定フラグが「１」ではない場合には、ＣＰＵ２１は、ＲＡＭ２３から先行メロディ音ＰＭおよび現在メロディ音ＣＭを取得する（ステップＳ２１０２）。ＣＰＵ２１は、先行メロディ音ＰＭが曲開始音であるかを判断する（ステップＳ２１０３）。ステップＳ２１０３においては、例えば、先行メロディ音ＰＭよりさらに前の時刻に押鍵された音が存在しないことを判断すれば良い。ステップＳ２１０３でＮｏと判断された場合には、ＣＰＵ２１は、先行コード音ＰｒｅＣＨが無判定コードであるかを判断する（ステップＳ２１０４）。
【００７８】
ステップＳ２１０３でＹｅｓと判断された場合、或いは、ステップＳ２１０４でＹｅｓと判断された場合には、ＣＰＵ２１は、先行メロディ音ＰＭとして、現在メロディ音ＣＭを与える（ステップＳ２１０５）。ステップＳ２１０４でＹｅｓと判断された場合には、先行コード名ＰｒｅＣＨが無判定コードであるため、新たにメロディシーケンスが開始する方が妥当であるからである。
【００７９】
次いで、ＣＰＵ２１は、メロディシーケンステーブルを参照して（ＰＭ，ＣＭ）に対応する値の組を取得する（ステップＳ２１０６）。図４１は、本実施の形態にかかるメロディシーケンステーブルの例を示す図である。図４１に示すように、メロディシーケンステーブル２２００には、所定の先行メロディ音ＰＭおよび現在メロディ音ＣＭについて値の組が格納されている。（ＰＭ，ＣＭ）に対応する値の組がメロディシーケンステーブル２２００中に存在すれば、その値の組を一時的にＲＡＭ２３に格納すれば良い。その一方、（ＰＭ，ＣＭ）に対応する値の組が、メロディシーケンステーブル２２００中に存在しなければ、値の組が存在しないことを示す情報をＲＡＭ２３に格納すれば良い。
【００８０】
次に、ＣＰＵ２１は、現在メロディ音ＣＭの直前に押鍵された音（ＣＭ直前音）を特定する（ステップＳ２１０７）。ここにいう直前に押鍵された音は、実際に直前に押鍵された音であり、先行メロディ音ＰＭと同一ではない場合もある。ＣＰＵ２１は、ステップＳ２１０７で特定されたＣＭ直前音と、現在メロディ音ＣＭとを比較して、これらの音高差が５半音以上であるかを判断する（ステップＳ２１０８）。ステップＳ２１０８でＹｅｓと判断された場合には、ＣＰＵ２１は、現在メロディ音ＣＭが１拍目の押鍵に関するものであるかを判断する（ステップＳ２１０９）。
【００８１】
メロディシーケンスにおいては、核となるべきメロディ音が含まれ、その前後には、核となるメロディ音を装飾するメロディ音が存在する場合がる。装飾するメロディ音は、核となるメロディ音からそれほど音高差が無いのが通常である。その一方、音高差が一定範囲（例えば４度程度）以上となるように跳躍する場合には、跳躍した後の音に比較的重みが大きくなる場合が多い。そこで、ステップＳ２１０８で、音高差を判断して、その差に基づいて異なる処理を行なっている。
【００８２】
ステップＳ２１０９でＹｅｓと判断された場合には、ＣＰＵ２１は、先行コード名ＰｒｅＣＨが２小節以上継続しているかを判断する（ステップＳ２２０１）。ステップＳ２２０１でＹｅｓと判断された場合には、ＣＰＵ２１は、第１のコードテーブルのうち、種別として「ｊｕｍｐ２」の欄を参照することを決定し、第１のコードテーブル中の所定のコード名を取得する（ステップＳ２２０２）。その一方、ステップＳ２２０２でＮｏと判断された場合には、ＣＰＵ２１は、第１のコードテーブルのうち、種別として「ｊｕｍｐ１」の欄を参照することを決定し、第１のコードテーブル中の所定のコード名を取得する（ステップＳ２２０３）。
【００８３】
図４２は、本実施の形態にかかる第１のコードテーブルの例を示す図である。図４２においては、第１のコードテーブルの一部を示している。図４２に示すように、コードテーブル４２００では、少なくとも、先行コード名の機能（先行コード機能（Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ  Ｆｕｎｃｔｉｏｎ）：符号４２１０参照）および（先行メロディ音ＰＭ，現在メロディ音ＣＭ）の組（例えば、符号４２０１、４２０２参照）に基づいて、コード名が決められるようになっている。
【００８４】
さらに、本実施の形態においては、「ジャンプなし」、「ｊｕｍｐ１」および「ｊｕｍｐ２」という３つの種別（符号４２１１参照）を設け、先行コード機能、（先行メロディ音ＰＭ，現在メロディ音ＣＭ）の組および種別に基づいて、コード名が決定されるようになっている。
【００８５】
先行コード機能は、トニック（Ｔｏｎｉｃ）、サブドミナント（Ｓｕｂｄｏｍｉｎａｎｔ）およびドミナント（Ｄｏｍｉｎａｎｔ）の３つがある。トニックに該当するコード名として、「IＭａｊ」、「IＭ７」、「IIIｍｉｎ」、「IIIｍ７」、「VIｍｉｎ」、「VIｍ７」がある。サブドミナントに該当するコード名として、「IIｍｉｎ」、「IIｍ７」、「IIｍ７（−５）」、「IVＭａｊ」、「IVＭ７」、「IVｍｉｎ」、「IVｍＭ７」がある。また、ドミナントに該当するコード名として、「IIIＭａｊ」、「III７」、「III７ｓｕｓ４」、「ＶＭａｊ」、「Ｖ７」、「Ｖ７ｓｕｓ４」、「VIIｍ７（−５）」がある。先行コード機能ごとの該当するコード名は、例えば、ＲＡＭ２３に予め格納されている。
【００８６】
また、種別において「ｊｕｍｐ２」は、メロディシーケンスにおける跳躍および先行コード名の継続を考慮して、コードの変化の程度を大きくしている。その一方、「ｊｕｍｐ１」では、「ｊｕｍｐ２」の場合よりも、コード変化の度合いが小さい。また、「ジャンプなし」という種別は、後述するように、第１のコードテーブルを使用する場合でも、「ｊｕｍｐ１」或いは「ｊｕｍｐ２」の種別が無い場合に使用されるものである。
【００８７】
例えば、先行コード名ＰｒｅＣＨの先行コード機能が「トニック」であり、かつ、（先行メロディ音ＰＭ，現在メロディ音ＣＭ）＝（Ｃ，Ｇ）であり、種別が「ｊｕｍｐ２」であれば、第１のコードテーブルから「ＶＭａｊ」（符号４２２１参照）が取得される。また、先行コード名ＰｒｅＣＨの先行コード機能が「トニック」であり、かつ、（先行メロディ音ＰＭ，現在メロディ音ＣＭ）＝（Ｃ，Ｇ）であり、種別が「ｊｕｍｐ１」であれば、第１のコードテーブルから「IＭａｊ」（符号４２２２参照）が取得される。
【００８８】
ＣＰＵ２１は、現在コード名ＣｕｒＣＨとして、第１のコードテーブルから特定されたコード名をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納する（ステップＳ２２０４、２２０５）。
【００８９】
次に、ステップＳ２２０８でＮｏ或いはステップＳ２２０９でＮｏと判断された場合について説明する。ＣＰＵ２１は、現在メロディ音ＣＭが、先行コード名ＰｒｅＣＨのコードトーン（ＣＴ）であるかを判断する（ステップＳ２３０１）。ステップＳ２３０１でＹｅｓと判断された場合には、ＣＰＵ２１は、先行コード名ＰｒｅＣＨの楽音の発音時刻および現在時刻に基づき、先行コード名ＰｒｅＣＨの発音時間が２拍以内であるかを判断する（ステップＳ２３０２）。ステップＳ２３０２でＹｅｓと判断された場合には、ＣＰＵ２１は、さらに、シンコペーションフラグが「１」であるかを判断する（ステップＳ２３０３）。
【００９０】
ステップＳ２３０３でＮｏと判断された場合には、ＣＰＵ２１は、第２のドミナントモーション処理を実行して（ステップＳ２３０５）、先行メロディ音ＰＭから現在メロディ音ＣＭへの移行がドミナントモーションであるかを判断する。第２のドミナントモーション処理の結果が第２の判定結果である場合（ステップＳ２３０５でＹｅｓ）には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨとして、先行コード名ＰｒｅＣＨを与える（ステップＳ２３０６）。つまり、先行コード名ＰｒｅＣＨが保持されることになる。
【００９１】
ステップＳ２３０１でＮｏ、ステップＳ２３０２でＮｏ、或いは、ステップＳ２３０５でＮｏと判断された場合には、ＣＰＵ２１は、（先行メロディ音ＰＭ，現在メロディ音ＣＭ）に対応する値の組が、メロディシーケンステーブル中に存在していたかを判断する（ステップＳ２３０７）。図２１のステップＳ２１０６において、値の組或いは値の組が存在しないことを示す情報がＲＡＭ２３に格納されているため、その情報を参照することにより、ステップＳ２３０７の判断が可能である。
【００９２】
ステップＳ２３０７でＹｅｓと判断された場合には、現在メロディ音ＣＭが、１拍目或いは２拍目に関するものであり、かつ、テーブル指定情報は第１のテーブルを示しているかを判断する（ステップＳ２３０８）。ステップＳ２３０８でＹｅｓと判断された場合には、ＣＰＵ２１は、第１のコードテーブルのうち、種別として「ジャンプなし」の欄を参照することを決定し、第１のコードテーブルにおいて、所定のコード名を取得する（ステップＳ２３０９）。これに対して、ステップＳ２３０８でＮｏと判断された場合には、ＣＰＵ２１は、第２のコードテーブルを参照することを決定し、第２のコードテーブルにおいて、所定のコード名を取得する（ステップＳ２３１０）。
【００９３】
図４３は、本実施の形態にかかる第２のコードテーブルの例を示す図である。図４３においては、第２のコードテーブルの一部を示している。図４３に示すように、コードテーブル４３００では、先行コード名の機能（先行コード機能（Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ  Ｆｕｎｃｔｉｏｎ）：符号４３１０参照）および（先行メロディ音ＰＭ，現在メロディ音ＣＭ）の組（例えば、符号４３０１、４３０２参照）に基づいて、コード名が決められるようになっている。例えば、先行コード名ＰｒｅＣＨの先行コード機能が「サブドミナント」であり、かつ、（先行メロディ音ＰＭ，現在メロディ音ＣＭ）＝（Ｃ，Ｇ）であれば、第２のコードテーブルから「ＶＭａｊ」（符号４３２１参照）が取得される。
【００９４】
その後、ＣＰＵ２１は、現在コード名ＣｕｒＣＨとして、第１のコードテーブル或いは第２のコードテーブルから特定されたコード名をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納する（ステップＳ２３１１、２２０５）。
【００９５】
ステップＳ２３０７においてＹｅｓと判断される場合は、メロディシーケンステーブルに、（先行メロディ音ＰＭ，現在メロディ音ＣＭ）の組が存在したため、コードテーブルを参照することで適切なコード名が取得されている。その一方、ステップＳ２３０７でＮｏと判断された場合には、転調或いは一時的な無判定コードの決定などが行なわれる。ステップＳ２３０７でＮｏと判断された場合には、ＣＰＵ２１は、現在メロディ音ＣＭの発音時間（押鍵時間）が４分音符より大きいか、つまり、１拍より長く発音されているかを判断する（ステップＳ２４０１）。
【００９６】
ステップＳ２４０１でＮｏと判断された場合には、ＣＰＵ２１は、先行コード名ＰｒｅＣＨを変更せず、そのまま現在コードＣｕｒＣＨとする（ステップＳ２４０７）。ステップＳ２４０１でＮｏとなる場合は、演奏者が意図して押鍵したのではなく、ミスタッチによって誤った鍵を押鍵してしまった可能性が高い。そこで、この場合は、コード名を変更することなく、先行コード名ＰｒｅＣＨをそのまま現在コード名ＣｕｒＣＨとする。
【００９７】
ステップＳ２４０１でＹｅｓと判断された場合には、ＣＰＵ２１は、現在メロディ音の発音時間（押鍵時間）が、３拍以下であるかを判断する（ステップＳ２４０２）。ステップＳ２４０２でＹｅｓと判断された場合には、転調フラグが「２」以下であるかを判断する。ステップＳ２４０３でＹｅｓと判断された場合には、ＣＰＵ２１は、ＲＡＭ２３に格納される転調フラグの値をインクリメントする（ステップＳ２４０５）。ステップＳ２４０２でＮｏ或いはステップＳ２４０３でＮｏと判断された場合には、ＣＰＵ２１は、転調処理を実行する（ステップＳ２４０４）。
【００９８】
本実施の形態においては、基本的には、現在メロディ音ＣＭ、先行メロディ音ＰＭを含むメロディ音は、「Ｃ」のスケール（調性）で処理される。したがって、転調処理では、転調後の調性と「Ｃ」との音高差が算出され、その音高差をオフセットとしてＲＡＭ２３に格納すれば良い。転調処理以後は、実際に押鍵された鍵番号により特定される音名をオフセットだけ減じることで、「Ｃ」の調性で処理を続行することが可能となる。
【００９９】
ステップＳ２４０５の後、ＣＰＵ２１は、現在メロディ音ＣＭが、先行コード名ＰｒｅＣＨのコードトーン（ＣＴ）或いはスケールノート（ＳＮ）であるかを判断する（ステップＳ２４０６）。ステップＳ２４０６においては、ステップＳ１１０１と同様に、ＣＰＵ２１は、メロディ機能テーブルを参照して、現在メロディ音ＣＭおよび先行コード名ＰｒｅＣＨの組に対応付けられた値が、コードトーン或いはスケールノートであるかを判断すれば良い。ステップＳ２４０６でＹｅｓと判断された場合には、ＣＰＵ２１は、コードを保持すべく現在コード名ＣｕｒＣＨに、先行コード名ＰｒｅＣＨを与える（ステップＳ２４０７）。
【０１００】
ステップＳ２４０７でＮｏと判断された場合には、ＣＰＵ２１は、無判定コードテーブルを参照して、ディミニシュ（ｄｉｍ）或いはオーギュメント（ａｕｇ）のコードを、現在コード名ＣｕｒＣＨに与える（ステップＳ２４０８）。図４５は、本実施の形態にかかる無判定コードテーブルの一例の部分を示す図である。図４５に示す無判定コードテーブル４５００においては、現在メロディ音ＣＭと先行コード名ＰｒｅＣＨからなる値の組に対応して、所定の値が取得できるようになっている。
【０１０１】
無判定コードテーブル４５００において、空欄（例えば、符号４５０１参照）は、現在メロディ音ＣＭと先行コード名ＰｒｅＣＨからなる値の組に対応付けられた現在メロディ機能（ＣＭＦ）が、コードトーン（ＣＴ）或いはスケールノート（ＳＮ）であることを意味している（図４４参照）。したがって、無判定コードテーブル４５００において空欄となる現在メロディ音ＣＭと先行コード名ＰｒｅＣＨからなる値の組については、現在コード名ＣｕｒＣＨが無判定コードとなることが無いため、値が格納されていない。したがって無判定コードテーブル４５００では、現在メロディ機能（ＣＭＦ）が、アザートーン（ＯＴ）である場合について、ディミニシュ（ｄｉｍ）或いはオーギュメント（ａｕｇ）の何れかを指定する情報が格納されている。
【０１０２】
ＣＰＵ２１は、無判定コードテーブル４５００から、現在メロディ音ＣＭと先行コード名ＰｒｅＣＨからなる値の組に対応付けられた、ディミニシュ（ｄｉｍ）或いはオーギュメント（ａｕｇ）の何れかを指定する情報を取得して、現在メロディ音ＣＭを根音とするコード名を得る。例えば、現在メロディ音が「Ｃ＃」、先行コード名が「IＭａｊ」であれば、コード名は、「I＃ｄｉｍ」となる（符号４５１１参照）。また、現在メロディ音が「Ａ♭」、先行コード名が「IＭ７」であれば、コード名は、「VI♭ａｕｇ」となる。ＣＰＵ２１は、このようにして、現在メロディ音ＣＭを根音とするディミニッシュ（ｄｉｍ）或いはオーギュメント（ａｕｇ）のコード名を、現在コード名ＣｕｒＣＨとして決定し、ＲＡＭ２３に格納する。
【０１０３】
上述したように、本実施の形態においては、まず、現在の拍の拍頭の押鍵に関する現在メロディ音ＣＭと、前拍の拍頭の押鍵に関する先行メロディ音ＰＭとが、何拍目かを示す情報、先行コード名ＰｒｅＣＨや、押鍵タミングなどにしたがって修正される（図８のステップＳ８０１〜８０８）。その上で、現在メロディ音ＣＭ、先行メロディ音ＰＭおよび先行コード名ＰｒｅＣＨに基づいて、現在コード名ＣｕｒＣＨが決定される（ステップＳ８０９）。
【０１０４】
図２５〜図４０を参照して、ポリの場合のコード付けについて説明する。図２５は、本実施の形態にかかるコード名判定処理（ポリ）の例を示すフローチャートである。概略的には、現在発音されている複数の楽音を、現在音高（Ｃｕｒｒｅｎｔ  Ｍｕｓｉｃａｌ  Ｓｏｕｎｄ  Ｎｏｔｅｓ）ＣＭ、それより１つ前に発音されている一以上のメロディ音を、先行音高（Ｐｒｅｖｉｏｕｓ  Ｍｕｓｉｃａｌ  Ｓｏｕｎｄ  Ｎｏｔｅｓ）ＰＭ、現在より一つ前に演奏されていたコード名を、先行コード名（Ｐｒｅｖｉｏｕｓ  ＣＨｏｒｄ  ｎａｍｅ）ＰｒｅＣＨとして、現在音高ＣＭ、先行音高ＰＭおよび先行コード名ＰｒｅＣＨに基づいて、新たに発音すべき現在コード名（Ｃｕｒｒｅｎｔ  ＣＨｏｒｄ  ｎａｍｅ）ＣｕｒＣＨを決定している。なお、本実施の形態においては、モノの場合と同様に、楽曲の調性をハ長調（ＣＭａｊ）或いはイ短調（Ａｍｉｎ）として、コード名については、IＭａｊ、IIｍなど、主音に対する度数で表し、そのデータをＲＡＭ２３などに記憶している。他の調性の場合には、当該調性のルート音と、「Ｃ」（或いは「Ａ」）の音との音高差に基づいて、ルート音を伴うコード名を得ることが可能である。
【０１０５】
まず、ＣＰＵ２１は、拍頭の時点で前拍から延びた音・ペダル音の場合に発音している全ての音を読み込む（ステップＳ２５０１）。ピアノ曲ではペダルオンで延びている音も忘れず判断材料にしないといけないからである。次に、ＣＰＵ２１は、ポリ状態を検出する（ステップＳ２５０２）。具体的には、ステップＳ２５０１で読み込んだ音の数を変数Ｐｏｌｙに格納する。変数Ｐｏｌｙに格納された数によって、コード判定に使用されるテーブル（図４６〜４８参照）が決定される。次に、ＣＰＵ２１は、Ｐｏｌｙ≧５であるか判断する。この判断がＹＥＳの場合、処理をステップＳ２５０４に移し、ＮＯの場合、処理をステップＳ２５０５に移す。
【０１０６】
ステップＳ２５０４では、ＣＰＵ２１は、５音以上処理を行う。図２６は、本実施形態にかかる５音以上処理の例を示すフローチャートである。
５音以上処理は、５音以上の音が読み込まれたときに、４音以内にまとめる方法を示した処理である。ＣＰＵ２１は、ステップＳ２５０１で、同一音名は１個のみ残すようにする。例えば「ドソドミシ」という５音があるとき、同一音名「ド」が二つあるので、これを１個にすれば、「ドミソシ」という４音になる。ピアノ曲では左手と右手で同じ音を弾くことが多いので、これでコード判断用のポリ数を減らすことができる。同一音名を減らすときには、高い音のほうを削除する。
【０１０７】
ステップＳ２６０２において、ＣＰＵ２１は、同一音名を一つにしたあとでもまだ５音以上であるか判断する。５音以下なら、ステップＳ２６０３に処理を移し、４音かどうか判断して、そうであればステップＳ２６０７で４音であると決定する。４音でない場合には、ステップＳ２６０４に処理を移し、３音であるかどうかを判断して、そうであればステップＳ２６０８で３音であると決定する。３音でもない場合には、ステップＳ２６０５に処理を移して、２音であるかを判断し、そうであればステップＳ２６０９に進んで２音であると決定され、２音でもない場合には音種としてはひとつしかないということになるので、ステップＳ２５１０に処理を写し、モノであると決定される。音数が決定したら、ＣＰＵ２１は、５音以上処理を終了する。
【０１０８】
ここで、ステップＳ２６０２で、まだ５音以上であると判断された場合には、ＣＰＵ２１は、処理をステップＳ２６０６に移し、Ｄｕｒａｔｉｏｎ（発音時間の長さ）の長い順に上位４音をＤ−Ｂｏｘに格納し、ステップＳ２６１１で、Ｖｅｌｏｃｉｔｙ（発音の強さ）の大きい順に上位４音をＶ−Ｂｏｘに格納する。ＣＰＵ２１は、ステップＳ２６１２でＤ−ＢｏｘとＶ−Ｂｏｘの上位４種が、順番にかかわらず種類が同じであるかを判断して、同じであれば、ステップＳ２６１３に処理を移し、Ｄ−ＢｏｘとＶ−Ｂｏｘの上位４種で４音を決定する。
【０１０９】
ステップＳ２６１２で、種類が同じでないと判断された場合には、まだ４音以内に決定されないので、ＣＰＵ２１は、ステップＳ２６１４で、入力された音をステップＳ２６０１において同一音名で抜けた音を除いて、低い方から順に並べる。例えば「ドソミシレ」などのように並べる。ステップＳ２６１５で、ＣＰＵ２１は、下４音のそれぞれが短三度以上の間隔かを判断し、そうであればステップＳ２６１６で下４音である「ドソミシ」を４音として決定する。ステップＳ２６１５で、下４音が短三度以上開いていないと判断された場合には、ＣＰＵ２１は、ステップＳ２６１７で下３音が短三度以上開いているかを判断する。そうであれば、ステップＳ２６１８で下３音を決定する。例えば「ドソミファレ」であれば、下三音の「ドソミ」に決まることになる。
【０１１０】
ステップＳ２６１７で、下３音が短三度以上開いていない場合、例えば「ドレミファソ」のような場合には、ＣＰＵ２１は、ステップＳ２６１９で前のコードとの共通音が３個以上あるか判断し、例えば前のコードＰｒｅＣＨがドミソ（ＣＭａｊ）であれば、この共通する３音があるので、共通音が３個以上あると判断して、処理をステップＳ２６２０に移し、共通の３音である「ドミソ」に決定する。
【０１１１】
ステップＳ２６１９で、前のコードとの共通音が３個以上あると判断されない場合には、ＣＰＵ２１は、処理をステップＳ２６２１に移し、下から短三度以上の間隔がある音３音に決定する。
例えば、前のコードＰｒｅＣＨが「ラドミ」（Ａｍｉｎ）で、処理対象の音が「ドレミファソ」の５音であるときには、ＣＰＵ２１は、下から短三度以上の間隔がある音３音である「ドミソ」と決定し、５音以上処理を終了する。
【０１１２】
ほとんどの場合、５音以上音があるときに、ステップＳ２６１２の判断で決定することが多いが、万一決定されなかった場合には、伴奏として下の音を基本とするのがふさわしいという考えでこのようなステップＳ２６１４〜２６２１の処理を実行している。最近の音楽では、メロディが必ずしもコードに含まれないことも多く、その場合には伴奏としては低音を基本に考えるのがよいと考えられるからである。
【０１１３】
図２５に戻って、ステップＳ２５０５では、ＣＰＵ２１は、Ｐｏｌｙ遷移による拍点ポイントジャッジ振り分け処理を行う。図２７は、本実施形態にかかるＰｏｌｙ遷移による拍点ポイントジャッジ振り分け処理の例を示すフローチャートである。ここで、図２７に示す、ＰＭ＝Ｐｏｌｙ４？は、先行音高ＰＭの音数が４であるか否かを意味し、ＣＭ＝Ｐｏｌｙ４？は、現在音高ＣＭの音数が４であるか否かを意味する。その他ＰＭ＝Ｐｏｌｙ３？、ＣＭ＝Ｐｏｌｙ３？なども同様である。
【０１１４】
モノ用の拍点ポイントジャッジは、図８ステップＳ８０３〜８０８にあるとおりであるが、ポリ用の拍点ポイントジャッジは、図２７に示した通りの種類がある。既に、５音以上処理（図２６）により、５音以上を４音以内にまとめているので、振り分ける種類としては、先行音高ＰＭ→現在音高ＣＭとすると、４音→４音、４音→３音、４音→２音、４音→１音、３音→４音、３音→３音、３音→２音、３音→１音、２音→４音、２音→３音、２音→２音、２音→１音、１音→４音、１音→３音、１音→２音、１音→１音がある。
【０１１５】
４音→１音、３音→１音、２音→１音、１音→１音については、現在音高ＣＭが１音であるので、モノ用の拍点ポイントジャッジ（図８ステップＳ８０３〜８０８）を行う。ポリ用の拍点ポイントジャッジにおいてＣＭが１音になる場合というのは、上述した５音以上処理（図２６参照）において、同一音名の音が５音以上入力された場合、例えば「ソソソソソソ」などの場合が該当する。
【０１１６】
図２７を参照して、Ｐｏｌｙ遷移による拍点ポイントジャッジ振り分け処理を説明する。ＣＰＵ２１は、ＰＭが４音であるか否かを判断する（ステップＳ２７０１）。ＰＭが４音である場合、ＣＭが４音であるか否かを判断する（ステップＳ２７０２）。ＣＭが４音である場合、拍点ポイントジャッジ４−４処理（図２８参照）を実行する（ステップＳ２７０３）。ＣＭが４音でない場合、ＣＭが３音であるか否かを判断する（ステップＳ２７０４）。ＣＭが３音である場合、拍点ポイントジャッジ４−３処理（図３６参照）を実行する（ステップＳ２７０５）。ＣＭが３音でない場合、ＣＭが２音であるか否かを判断する（ステップＳ２７０６）。ＣＭが２音である場合、拍点ポイントジャッジ４−２処理（図３７参照）を実行する（ステップＳ２７０７）。ＣＭが２音でない場合、拍点ポイントジャッジ４−１処理を実行する（ステップＳ２７０７）。
【０１１７】
ステップＳ２７０１でＰＭが４音でないと判断された場合、ＣＰＵ２１は、ＰＭが３音であるか否かを判断する（ステップＳ２７０９）。ＰＭが３音である場合、ＣＭが４音であるか否かを判断する（ステップＳ２７１０）。ＣＭが４音である場合、拍点ポイントジャッジ３−４処理を実行する（ステップＳ２７１１）。ＣＭが４音でない場合、ＣＭが３音であるか否かを判断する（ステップＳ２７１２）。ＣＭが３音である場合、拍点ポイントジャッジ３−３処理を実行する（ステップＳ２７１３）。ＣＭが３音でない場合、ＣＭが２音であるか否かを判断する（ステップＳ２７１４）。ＣＭが２音である場合、拍点ポイントジャッジ３−２処理を実行する（ステップＳ２７１５）。ＣＭが２音でない場合、拍点ポイントジャッジ３−１処理を実行する（ステップＳ２７１６）。
【０１１８】
ステップＳ２７０９でＰＭが３音でないと判断された場合、ＣＰＵ２１は、ＰＭが２音であるか否かを判断する（ステップＳ２７１７）。ＰＭが２音である場合、ＣＭが４音であるか否かを判断する（ステップＳ２７１８）。ＣＭが４音である場合、拍点ポイントジャッジ２−４処理を実行する（ステップＳ２７１９）。ＣＭが４音でない場合、ＣＭが３音であるか否かを判断する（ステップＳ２７２０）。ＣＭが３音である場合、拍点ポイントジャッジ２−３処理を実行する（ステップＳ２７２１）。ＣＭが３音でない場合、ＣＭが２音であるか否かを判断する（ステップＳ２７２２）。ＣＭが２音である場合、拍点ポイントジャッジ２−２処理を実行する（ステップＳ２７２３）。ＣＭが２音でない場合、拍点ポイントジャッジ２−１処理を実行する（ステップＳ２７２４）。
【０１１９】
ステップＳ２７１７でＰＭが２音でないと判断された場合（ＰＭはモノとなる）、ＣＰＵ２１は、ＣＭが４音であるか否かを判断する（ステップＳ２７２５）。ＣＭが４音である場合、拍点ポイントジャッジ１−４処理を実行する（ステップＳ２７２６）。ＣＭが４音でない場合、ＣＭが３音であるか否かを判断する（ステップＳ２７２７）。ＣＭが３音である場合、拍点ポイントジャッジ１−３処理を実行する（ステップＳ２７２８）。ＣＭが３音でない場合、ＣＭが２音であるか否かを判断する（ステップＳ２７２９）。ＣＭが２音である場合、拍点ポイントジャッジ１−２処理を実行する（ステップＳ２７３０）。ＣＭが２音でない場合、拍点ポイントジャッジ１−１処理を実行する（ステップＳ２７３１）。
【０１２０】
図２８を参照して、拍点ポイントジャッジ４−４処理について説明する。ＣＰＵ２１は、押鍵された鍵の時間的位置、つまり、鍵が何拍目に押鍵されたかを判断する（ステップＳ２８０１、２８０７、２８１３）。
【０１２１】
本実施の形態においては、楽曲は４分の４拍子であり、１小節が４拍で構成される。押鍵がｎ拍目であることは、押鍵のタイミングが、第ｎ拍の先頭以降で、第（ｎ＋１）拍の先頭よりも時間的に早いことを意味している。
【０１２２】
楽曲の構成要素には拍子および拍という概念がある。また、拍子においては拍ごとに重みがあり、上記拍の重みを考慮して音高は進行する。また、シンコペーションなど、場合によって拍の重みが移動する場合もある。
【０１２３】
ステップＳ２８０１で、１拍目と判断されれば、ＣＰＵ２１は、曲頭処理（図２９参照）（ステップＳ２８０２）、コード保持（ベース）処理（図３０参照）（ステップＳ２８０３）、アルペジオ処理（図３１参照）（ステップＳ２８０４）、シンコペーション処理（図３２参照）（ステップＳ２８０５）、ドミナントモーション処理（図３３参照）（ステップＳ２８０６）、を行い、４音フラグをＯＮにする（ステップＳ２８１９）。
【０１２４】
ステップＳ２８０７で、２拍目または４拍目と判断されれば、ＣＰＵ２１は、ランニングベース処理（図３４参照）（ステップＳ２８０８）、コード保持（弱拍）処理（図３５参照）（ステップＳ２８０９）、アルペジオ処理（図３１参照）（ステップＳ２８１０）、シンコペーション処理（図３２参照）（ステップＳ２８１１）、ドミナントモーション処理（図３３参照）（ステップＳ２８１２）、を行い、４音フラグをＯＮにする（ステップＳ２８１９）。
【０１２５】
ステップＳ２８１３で、３拍目と判断されれば、ＣＰＵ２１は、オルタネイトベース処理（図３４参照）（ステップＳ２８１４）、コード保持（ベース）処理（図３０参照）（ステップＳ２８１５）、アルペジオ処理（図３１参照）（ステップＳ２８１６）、シンコペーション処理（図３２参照）（ステップＳ２８１７）、ドミナントモーション処理（図３３参照）（ステップＳ２８１８）、を行い、４音フラグをＯＮにする（ステップＳ２８１９）。
【０１２６】
このように、現拍が何拍目かに応じて処理するアルゴリズムを変更している。すなわち、アルゴリズムを部品化して、それぞれの拍で必要なものを必要な順番に並べるようにした。このようにすると、不足しているアルゴリズムがあればすぐに追加でき、また、不要なアルゴリズムはすぐに外せる。またアルゴリズムの順番に問題があるときには、すぐに修正することが可能なので、デバックしやすい。
【０１２７】
図２９を参照して、曲頭処理について説明する。ステップＳ２９０１で、ＣＰＵ２１は、曲開始音かどうか判断する。曲開始音である判断されないと、ＣＰＵ２１は、ステップＳ２９０２で直前の８拍に押鍵がないかどうかを判断する。曲開始音である、または直前の８拍に押鍵がないと判断されると、ＣＰＵ２１は、ステップＳ２９０３で、現拍の区間内で発音されている音高でコード判定を行い、コード確定フラグをオンする。これは、曲開始音である、または直前の８拍に押鍵がないということは、それ以前にコードが存在しない、存在していたとしても今回のコード判定に影響しない、という理由による。
逆に曲開始音でもなく、直前の８拍に押鍵がある場合には、直前に判定されたコードが影響するため、ＣＰＵ２１は、ステップＳ２９０４において、図４６に示す４音および３音コード用Ａｖａｉｌａｂｌｅ  Ｃｈｏｒｄ  Ｔａｂｌｅ＆無判定コードテーブル（以下、「４音および３音用テーブル」という）、言い換えれば前機能なしのテーブル参照フラグをＯＮにする。
この曲頭処理は、４音ポリ及び３音ポリの場合に適用可能であるが、２音ポリ以下の場合は処理が異なる。２音ポリ以下の場合、ステップＳ２９０３においては、基本的に現拍の区間内で発音されている音高のみに基づいてコード判定の処理を行い、ステップＳ２９０４においては、図４２〜図４５のいずれかに示すコードテーブル、言い換えれば前機能ありのテーブル参照フラグをオンにする。
【０１２８】
図３０を参照して、コード保持（ベース）処理について説明する。このコード保持（ベース）処理は、ベース区間がコード区間であることが多いため、ベースが延びている間は所定の条件の下で前のコードと同一であるとする処理である。
ステップＳ３００１で、ＣＰＵ２１は、ベースが現拍頭より前から延びているか否かを判断する。ベースが現拍頭より前から延びていない場合には、ＣＰＵ２１は、コード保持（ベース）処理を終了する。ベースが現拍頭より前から延びている場合には、直前のベース音と同じ音か否かを判断する（ステップＳ３００２）。直前のベース音と同じ音ではない場合には、ＳＹＮ（シンコペーションフラグ）をＯＮにし（ステップＳ３００３）、コード保持（ベース）処理を終了する。ステップＳ３００１でＹｅｓ、ステップＳ３００２でＮｏの場合は直前拍のあとでベースが変わり現拍でも延びているということであるので、シンコペーションであるということがわかる。
【０１２９】
ステップＳ３００２で直前拍のベースと同じであると判断されると、ステップＳ３００４に進み、現在音高ＣＭが直前拍同じであるかどうかを判断する。同じであると判断されると、ＣＰＵ２１は、ステップＳ３００５で、Ｃｕｒｒｅｎｔ  Ｃｈｏｒｄ（ＣｕｒＣＨ）＝Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）とし、コード確定フラグをＯＮにし、ＣｕｒＣＨをＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、コード保持（ベース）処理を終了する。ステップＳ３００４で、直前拍と同じでないと判断されると、ＣＰＵ２１は、ステップＳ３００６で、前機能ありテーブル参照フラグをＯＮにし、コード保持（ベース）処理を終了する。
【０１３０】
図３１を参照して、アルペジオ処理について説明する。ＣＰＵ２１は、ステップＳ３１０１で、前拍拍頭以降に入力音があるかどうかを判断する。前拍拍頭以降に入力音があると判断されなければ、アルペジオ処理を終了する。前拍拍頭以降に入力音があると判断されれば、ＣＰＵ２１は、ステップＳ３１０２で、Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）に含まれる音であるかどうかを判断する。Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）に含まれる音であると判断されると、ＣＰＵ２１は、ＡＲＰフラグをＯＮにし（ステップＳ３１０３）、アルペジオ処理を終了する。ステップＳ３１０２で、Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）に含まれる音であると判断されると、ＣＰＵ２１は、ステップＳ３１０４で、前機能ありテーブル参照フラグをＯＮにし、アルペジオ処理を終了する。
【０１３１】
図３２を参照して、シンコペーション処理について説明する。ＣＰＵ２１は、ステップＳ３２０１で、ＳＹＮ（シンコペーションフラグ）がＯＮであるかどうかを判断する。図３０ステップＳ３００３において、コード保持（ベース）処理で見つかったベースのシンコペーションフラグがＯＮであるか否かを判断するのが、ステップＳ３２０１であり、ベース以外のシンコペーションがあるか否かを判断するのが、ステップＳ３２０２である。
ステップＳ３２０１でＳＹＮ（シンコペーションフラグ）がＯＮである場合、ＣＰＵ２１は、ステップＳ３２０７へ処理を移す。ステップＳ３２０１でＳＹＮ（シンコペーションフラグ）がＯＮでない場合、ＣＰＵ２１は、ステップＳ３２０２へ処理を移し、ベース以外のシンコペーションがあるか否かを判断する。ベース以外のシンコペーションがあると判断されれば、ＣＰＵ２１は、ステップＳ３２０３へ処理を移し、ＳＹＮ（シンコペーションフラグ）をＯＮにし、ステップＳ３２０７へ処理を移す。ステップＳ３２０７では、延びている音を優先として、ステップＳ３２０６へ処理を移す。これは、コードが判定できないときなどに、押鍵している音を無判定コードとして出す場合があるが、その際に優先される音として用いる。
ステップＳ３２０２で、ベース以外のシンコペーションがあると判断されなければ、ＣＰＵ２１は、ステップＳ３２０４で、現在音高ＣＭが直前拍と同じであるかどうかを判断する。同じであると判断されると、ＣＰＵ２１は、Ｃｕｒｒｅｎｔ  Ｃｈｏｒｄ（ＣｕｒＣＨ）＝Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）とし、コード確定フラグをＯＮにし、ＣｕｒＣＨをＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、シンコペーション処理を終了する。ステップＳ３２０４で、直前拍と同じでないと判断されると、ＣＰＵ２１は、ステップＳ３２０６で、前機能ありテーブル参照フラグをＯＮにし、シンコペーション処理を終了する。
【０１３２】
図３３を参照して、ドミナントモーション処理について説明する。ＣＰＵ２１は、ステップＳ３３０１で、ＲＡＭ２３に格納されたＰｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）が、メジャー系のドミナントコードのいずれかに対応するかを判断する。ここで、本実施の形態では、メジャー系のドミナントコードは、「ＶＭａｊ」、「Ｖ７」および「VIIｍ７（−５）」としている。ステップＳ３３０１でＹｅｓと判断された場合には、ＣＰＵ２１は、現在音高ＣＭがIＭａｊであるかを判断する（ステップＳ３３０２）。ステップＳ３３０２では、先行コードＰｒｅＣＨから現在音高ＣＭへの動きが、長調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。
【０１３３】
ステップＳ３３０２でＹｅｓと判断された場合には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨを「ＩＭａｊ」に決定し、その情報および発音時刻をＲＡＭ２３に格納し、コード確定フラグをＯＮにする（ステップＳ３３０６）。その後、ＣＰＵ２１は、ドミナントモーション処理を終了する。ステップＳ３３０１でＮｏと判断された場合には、ＣＰＵ２１は、先行コード名ＰｒｅＣＨが、マイナー系のドミナントコードの何れかに対応するかを判断する（ステップＳ３３０２）。ここで、本実施の形態において、例えば、マイナー系のドミナントコードは、「IIIＭａｊ」および「III７」としている。
【０１３４】
ステップＳ３３０２でＹｅｓと判断された場合には、ＣＰＵ２１は、現在音高ＣＭがVIＭｉｎであるかを判断する（ステップＳ３３０４）。ステップＳ３３０４においては、先行コードＰｒｅＣＨから現在音高ＣＭへの動きが、短調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。ステップＳ３３０４でＹｅｓと判断された場合には、ＣＰＵ２１は、現在コード名ＣｕｒＣＨを「VIｍｉｎ」に決定し、その情報および発音時刻をＲＡＭ２３に格納し、コード確定フラグをＯＮにする（ステップＳ３３０６）。その後、ＣＰＵ２１は、ドミナントモーション処理を終了する。ステップＳ３３０３またはステップＳ３３０４でＮＯと判断された場合、ＣＰＵ２１は、前機能ありテーブル参照フラグをＯＮにする（ステップＳ３３０５）。その後、ＣＰＵ２１は、ドミナントモーション処理を終了する。
【０１３５】
図３４を参照して、ランニングベース／オルターネートベース処理について説明する。ステップＳ３４０１で、ＣＰＵ２１は、ベース（最低音）以外が前拍同様かどうかを判断する。ＹＥＳと判断されれば、ＣＰＵ２１は、処理をステップＳ３４０２に移し、ＮＯと判断されれば、ＣＰＵ２１は、ランニングベース／オルターネートベース処理を終了する。ＣＰＵ２１は、ステップＳ３４０２で、ベースがコード構成音（ＣＴ）またはスケールノート（ＳＮ）であるかどうかを判断する。ＹＥＳと判断されれば、ＣＰＵ２１は、処理をステップＳ３４０３に移し、ＮＯと判断されれば、ＣＰＵ２１は、ランニングベース／オルターネートベース処理を終了する。
ＣＰＵ２１は、ステップＳ３４０３で、ベースがＰｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）の第５音にあたるかどうかを判断する。ＹＥＳと判断されれば、ＣＰＵ２１は、処理をステップＳ３４０５に移し、ＮＯと判断されれば、ＣＰＵ２１は、処理をステップＳ３４０４に移す。ＣＰＵ２１は、ステップＳ３４０５でＡｌｔＢ（オルターネートベースフラグ）をＯＮとし、オルターネートベースだと判断し、処理をステップＳ３４０６に移す。ＣＰＵ２１は、ステップＳ３４０４でＲｕｎＢ（ランニングベースフラグ）をＯＮとし、ランニングベースであると判断し、処理をステップＳ３４０６に移す。ランニングベースもオルターネートベースも、ベース音だけの動きでありコード自体は変わらないので、ステップＳ３４０６にてＣｕｒｒｅｎｔ  Ｃｈｏｒｄ（ＣｕｒＣＨ）＝Ｐｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）として、コード確定フラグをＯＮし、ＣｕｒＣＨをＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納する。
【０１３６】
図３５を参照して、コード保持（弱拍）処理について説明する。コード保持（弱拍）処理は、モノ処理と同様に、弱拍時かつ最高音が跳躍しないことを条件に、コード保持をする処理である。ＣＰＵ２１は、ステップＳ３５０１で最高音が前拍と異なるかを判断する。ＹＥＳと判断されれば、ステップＳ３５０２に処理と移し、ＮＯと判断されれば、ＣＰＵ２１は、コード保持（弱拍）処理を終了する。ＣＰＵ２１は、ステップＳ３５０２で、メロディ（音高のうちの再高音）が、先行コード名ＰｒｅＣＨのコード構成音（ＣＴ）またはスケールノート（ＳＮ）であり、かつ順次進行（前拍最高音と現拍最高音との差が２半音以内である）する音であるかを判断する。ＹＥＳと判断されれば、ＣＰＵ２１は、処理をステップＳ３５０４に写し、ＮＯと判断されれば、ＣＰＵ２１は、処理をステップＳ３５０３に移す。ＣＰＵ２１は、ステップＳ３５０３で、ランニングベースもしくはオルターネートベースであるかを判断する。ＹＥＳと判断されれば処理をステップＳ３５０４に移し、ＮＯと判断されれば、ＣＰＵ２１は、コード保持（弱拍）処理を終了する。ＣＰＵ２１は、ステップＳ３５０４では、Ｃｕｒｒｅｎｔ  Ｃｈｏｒｄ（ＣｕｒＣＨ）をＰｒｅｖｉｏｕｓ  Ｃｈｏｒｄ（ＰｒｅＣＨ）と同一にして、コード確定フラグをＯＮにすし、ＣｕｒＣＨをＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納する。その後、ＣＰＵ２１は、コード保持（弱拍）処理を終了する。
【０１３７】
図３６を参照して、拍点ポイントジャッジ４−３処理について説明する。拍点ポイントジャッジ４−３処理は、ステップＳ３６１９で、３音フラグをＯＮにする以外の処理は、拍点ポイントジャッジ４−４処理と同様である。
【０１３８】
図３７を参照して、拍点ポイントジャッジ４−２処理について説明する。拍点ポイントジャッジ４−２処理は、ステップＳ３７１９で、２音フラグをＯＮにする以外の処理は、拍点ポイントジャッジ４−４処理と同様である。
【０１３９】
図２７を参照して、拍点ポイントジャッジ３−４処理（ステップＳ２７１１）、拍点ポイントジャッジ２−４処理（ステップＳ２７１９）、拍点ポイントジャッジ１−４処理（ステップＳ２７２６）は、上述した拍点ポイントジャッジ４−４処理（図２８参照）と同様である。また、拍点ポイントジャッジ３−３処理（ステップＳ２７１３）、拍点ポイントジャッジ２−３処理（ステップＳ２７２１）、拍点ポイントジャッジ１−３処理（ステップＳ２７２８）は、上述した拍点ポイントジャッジ４−３処理（図３６参照）と同様である。また、拍点ポイントジャッジ３−２処理（ステップＳ２７１５）、拍点ポイントジャッジ２−２処理（ステップＳ２７２３）、拍点ポイントジャッジ１−２処理（ステップＳ２７３０）は、上述した拍点ポイントジャッジ４−２処理（図３７参照）と同様である。
【０１４０】
なお、ＣＰＵ２１は、拍点ポイントジャッジ４−１処理（ステップＳ２７０８）、拍点ポイントジャッジ３−１処理（ステップＳ２７１６）、拍点ポイントジャッジ２−１処理（ステップＳ２７２４）、モノの拍点ポイントジャッジ処理（ステップＳ２７３１）を実行する場合には、処理を図８ステップＳ８０３に移し、モノ用の拍点ポイントジャッジを行う。
【０１４１】
図２５に戻って、ステップＳ２５０６では、ＣＰＵ２１は、コード確定フラグがＯＮであるか否かを判断する。この判断がＹＥＳならば、ＣＰＵ２１は、コード名判定処理（ポリ）を終了する。ＮＯならば、ＣＰＵ２１は、コード決定処理（図３８参照）を行い、コード名判定処理（ポリ）を終了する。
【０１４２】
図３８を参照して、コード決定処理について説明する。ＣＰＵ２１は、３音フラグまたは４音フラグはＯＮであるか否かを判断する（ステップＳ３８０１）。この判断がＹＥＳの場合、ＣＰＵ２１は、処理をステップＳ３８０２に移し、４音／３音Ｐｏｌｙテーブル参照処理を行い、コード決定処理を終了する。ステップＳ３８０１での判断がＮＯの場合には、処理をステップＳ３８０３に移し、２音Ｐｏｌｙテーブル参照処理を行い、コード決定処理を終了する。
【０１４３】
図３９を参照して、４音／３音Ｐｏｌｙテーブル参照処理について説明する。ＣＰＵ２１は、ステップＳ３９０１で現在音高ＣＭが４音であるかどうかを判断し、４音であればステップＳ３９０２へ、４音でない場合には３音なのでステップＳ３９０３に処理を移す。ステップＳ３９０２とステップＳ３９０３では、Ｐｏｌｙ状態（ＣＭが４音であるか３音であるか）に応じて図４６に示す４音および３音用テーブルの該当部分を参照する。
例えば、現在音高ＣＭが４音であって、その構成音が、「Ｃ、Ｅ、Ｇ、Ｂ」の場合、図４６の４音および３音用テーブルの「３音ｏｒ４音」欄から４であるコードを検索し、コード構成音（ＣＴ）が「Ｃ、Ｅ、Ｇ、Ｂ」であるコードは、４音および３音用テーブルより、IＭ７であると決定され、コードの機能はトニックと決定される。同様に、現在音高ＣＭが３音であって、その構成音が、「Ｅ、Ｇ♯（Ａ♭）、Ｂ」の場合、図４６の４音および３音用テーブルの「３音ｏｒ４音」欄から３であるコードを検索し、コード構成音（ＣＴ）が「Ｅ、Ｇ♯（Ａ♭）、Ｂ」であるコードは、４音および３音用テーブルより、IIIＭａｊであると決定され、コードの機能はドミナントと決定される。
【０１４４】
ステップＳ３９０４では、ＣＰＵ２１は、ステップＳ３９０２または３９０３でマッチしたか（コードが決定されたか）否かを判断し、マッチした場合、処理をステップＳ３９０５に移し、決定したコード名をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、４音／３音Ｐｏｌｙテーブル参照処理を終了する。マッチしない場合、処理をステップＳ３９０６に移す。
ステップＳ３９０６では、ＣＰＵ２１は、他の調でコードジャッジが成立するか否かを判断する。具体的には、調性外コードジャッジテーブル（図示せず）を参照し、ハ長調またはイ短調以外の調で、コードジャッジが成立するか否かを判断する。この判断がＹＥＳの場合、ＣＰＵ２１は、ステップＳ３９０７に処理を移し、成立したコード名をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、Ｍｏｄｕｌａｔｉｏｎ（転調）フラグをインクリメントし、４音／３音Ｐｏｌｙテーブル参照処理を終了する。Ｍｏｄｕｌａｔｉｏｎ（転調）フラグをインクリメントしたのは、ステップＳ３９０４で最初にマッチしなかったため、調性が異なる可能性があるからである。この調性が異なる和音が、経過的な偶成和音であるのか、転調した結果の和音であるのかの区別がつかないので、Ｍｏｄｕｌａｔｉｏｎ（転調）フラグなどによって判断するようにしている。ステップＳ３９０６での判断がＮＯの場合、ＣＰＵ２１は、ステップＳ３９０８において、無判定コードとして現在音高ＣＭをＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、４音／３音Ｐｏｌｙテーブル参照処理を終了する。ステップＳ３９０８では、具体的には、押鍵された音でとりあえず伴奏パターンの音に割り振って発音するが、このとき、シンコペーション処理（図３２参照）のステップＳ３２０７で処理した、シンコペーションで延びている音を優先して発音する。
【０１４５】
図４０を参照して、２音Ｐｏｌｙテーブル参照処理について説明する。ＣＰＵ２１は、ステップＳ４００１で、コード判定のために必要な情報を読み込む。例えば、直前のコード機能を読み込み、現在音高ＣＭの２音のうちの低い音をベース音と決定し、直前拍の最高音（ＰＭＡＸ）と現在拍の最高音（ＣＭＡＸ）を決定する。ステップＳ４００２では、ＣＰＵ２１は、図４７に示す２音コード用Ａｖａｉｌａｂｌｅ  Ｃｈｏｒｄ  Ｔａｂｌｅ＆無判定コードテーブル（以下、「２音用テーブル」とする）の該当部分を参照する。
２音用テーブルでは、現在音高ＣＭの２音を、ベース音と現在拍の最高音（ＣＭＡＸ）とに分類し、ベース音、直前拍の最高音（ＰＭＡＸ）と現在拍の最高音（ＣＭＡＸ）とのシーケンス、および、直前のコードの機能によって、コードを決定できるようにしている。例えば、ベース音がＣ、ＰＭＡＸがＣ、ＣＭＡＸがＤ、直前のコード機能がサブドミナント（ＳＵ）の場合、IIｍ７と決定される。
【０１４６】
ステップＳ４００３で、ＣＰＵ２１は、ステップＳ４００２においてマッチしたかどうかを判断して、マッチしたと判断されれば、ステップＳ４００４に処理を移し、決定したコード名をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、２音Ｐｏｌｙテーブル参照処理を終了する。マッチしたと判断されない場合には、ＣＰＵ２１は、ステップＳ４００５に処理を移し、直前のコード（ＰｒｅＣＨ）に対して現在音高ＣＭの２音のいずれかがＯｔｈｅｒ  Ｔｏｎｅ（ＯＴ）である場合には、ステップＳ４００６に処理を移し、Ｍｏｄｕｌａｔｉｏｎ（転調）フラグをインクリメントし、現在音高ＣＭの２音をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、２音Ｐｏｌｙテーブル参照処理を終了する。ステップＳ４００５でＯＴでない場合には、ＣＰＵ２１は、処理をステップＳ４００７に移し、転調しない無判定コードとして現在音高ＣＭの２音をＲＡＭ２３の所定の領域に格納するとともに、その発音時刻をＲＡＭ２３の所定の領域に格納して、２音Ｐｏｌｙテーブル参照処理を終了する。
【０１４７】
コード名判定処理（図３のステップＳ３０４）が終了すると、ＣＰＵ２１は、自動伴奏処理を実行する（ステップＳ３０５）。図４８は、本実施の形態にかかる自動伴奏処理の例を示すフローチャートである。まず、ＣＰＵ２１は、電子楽器１０が自動伴奏モードの下で動作しているかを判断する（ステップＳ４８０１）。ステップＳ４８０１でＹｅｓと判断された場合には、ＣＰＵ２１のタイマ（図示せず）を参照して、現在時刻が、自動伴奏データ中、メロディ音のデータについてのイベントの実行タイミングに達しているかを判断する（ステップＳ４８０２）。
【０１４８】
本実施形態においては、自動伴奏データには、３つの種類の楽音、すなわち、メロディ音（オブリガート音を含む）、コード音、リズム音のデータが含まれる。メロディ音のデータおよびコード音のデータは、発音すべき楽音ごとに、その音高、発音タイミングおよび発音時間を含む。また、リズム音のデータは、発音すべき楽音（リズム音）ごとに、その発音タイミングを含む。
【０１４９】
ステップＳ４８０２でＹｅｓと判断された場合には、ＣＰＵ２１は、メロディ発音・消音処理を実行する（ステップＳ４８０３）。メロディ発音・消音処理においては、処理にかかるイベントがノートオンイベントであるかを判断する。ノートオンイベントであることは、現在時刻が、上記メロディ音のデータにおける所定の楽音の発音タイミングとほぼ一致することで判断できる。その一方、ノートオフイベントであることは、現在時刻が、当該楽音の発音タイミングに発音時間を加えた時刻とほぼ一致することで判断できる。
【０１５０】
処理にかかるイベントがノートオフイベントである場合には、ＣＰＵ２１は、消音処理を実行する。その一方、処理にかかるイベントがノートオンイベントであれば、メロディ音のデータにしたがった発音処理を実行する。
【０１５１】
次いで、ＣＰＵ２１は、ＣＰＵ２１のタイマ（図示せず）を参照して、現在時刻が、自動伴奏データ中、コード音のデータについてのイベントの実行タイミングに達しているかを判断する（ステップＳ４８０４）。ステップＳ４８０４においてＹｅｓと判断された場合には、ＣＰＵ２１は、コード発音・消音処理を実行する（ステップＳ４８０５）。コード音発音・消音処理においては、発音タイミングに達したコード音について発音処理を実行し、その一方、消音タイミングに達したコード音については消音処理を実行する。
【０１５２】
その後ＣＰＵ２１は、現在時刻が、自動伴奏データ中、リズムのデータについてのイベントの実行タイミングに達しているかを判断する（ステップＳ４８０６）。ステップＳ４８０６においてＹｅｓと判断された場合には、ＣＰＵ２１は、リズム音発音処理を実行する（ステップＳ４８０７）。リズム音発音処理においては、発音タイミングに達したリズム音についてノートオンイベントを生成する。
【０１５３】
自動伴奏処理（図３のステップＳ３０５）が終了すると、ＣＰＵ２１は、音源発音処理を実行する（ステップＳ３０６）。音源発音処理において、ＣＰＵ２１は、生成されたノートオンイベントに基づいて、発音すべき楽音の音色および音高を示すデータを音源部２６に与え、或いは、消音すべき楽音の音色および音高を示すデータを音源部２６に与える。音源部２６は、音色、音高、音長等を示すデータにしたがって、ＲＯＭ２２の波形データを読み出して、所定の楽音データを生成する。これにより、スピーカ２８から所定の楽音が発生する。また、ＣＰＵ２１は、ノートオフイベントに基づいて、音源２６にノートオフイベントが示す音高の消音を指示する。
【０１５４】
音源発音処理（ステップＳ３０６）が終了すると、ＣＰＵ２１は、その他の処理（例えば、表示部１５への画像表示、ＬＥＤ（図示せず）の点灯、消灯など：ステップＳ３０７）を実行して、ステップＳ３０２に戻る。
【０１５５】
本実施の形態においては、入力可能な楽音数毎に設けられ、入力される音高に基づいたコードデータを出力する、複数のコード判定テーブル（４音および３音用テーブル、および、２音用テーブル）を備えており、コード名判定処理（ポリ）（図５のステップＳ５０８）において、ＣＰＵ２１は、鍵盤１１の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報、特に拍の情報に基づいて、現在の拍の拍頭において同時操作された鍵盤１１に対応する現在音高ＣＭ及びその数と、１つ前の拍である直前拍の拍頭において同時操作された鍵盤１１に対応する先行音高ＰＭ及びその数と、を抽出する。また、ＣＰＵ２１は、抽出された現在音高ＣＭ及び先行音高ＰＭ、当該先行音高ＰＭの数から現在音高ＣＭの数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応するコード判定テーブルを選択し、選択されたコード判定テーブルから確定された音高情報に基づくコードデータを出力させる。
【０１５６】
したがって、音高群の現在の拍およびその遷移に基づいて、適切にコード名を決定することができる。
【０１５７】
また、本実施の形態においては、ＣＰＵ２１は、自動伴奏データのテンポに応じて、同時（ポリ）操作された鍵盤１１の検出周期を可変する。
したがって、テンポが速い（例えば一分間に８０拍以上）場合には、３２分音符以下の音符が複数あることでポリと判定し、テンポが遅い（例えば一分間に８０拍以下）場合には、６４分音符以下の音符が複数あることでポリと判定することができるので、自動伴奏データのテンポが変わっても、モノかポリの判定を適切に行うことができる。
【０１５８】
また、本実施の形態においては、ＣＰＵ２１は、ステップＳ２６０２で抽出された楽音数が所定数（５）以上でかつ、当該音高の中で同一音名の楽音がある場合、高いほうの楽音を削除する。
したがって、コードの決定に寄与する度合いの高い低音高を残すことができるので、適切にコードを決定できる。
【０１５９】
また、本実施の形態においては、ＣＰＵ２１は、ステップＳ２６０２で抽出された楽音数が所定数（５）以上でかつ、操作のベロシテイの大きい鍵盤１１に対応する楽音４個と操作時間の長い鍵盤１１に対応する楽音４個とが同一の場合は、当該４個の楽音を抽出された音高とする。
したがって、コードの決定に寄与する度合いの高い音高でコードを決定することができる。
【０１６０】
また、本実施の形態においては、ＣＰＵ２１は、ステップＳ２６０２で抽出された楽音数が所定数（５）以上でかつ、低い順から４個の楽音それぞれが短三度以上の音程を有している場合は、当該４個の楽音を抽出された音高とする。
したがって、コードの決定に寄与する度合いの高い低音音高でコードを決定することができる。
【０１６１】
また、本実施の形態においては、ＣＰＵ２１は、ステップＳ２６０２で抽出された楽音数が所定数（５）以上でかつ、低い順から３個の楽音それぞれが短三度以上の音程を有している場合は、当該３個の楽音を抽出された音高とする。
したがって、低い順から３個目と４個目との音程が短三度未満である場合であっても、コードの決定に寄与する度合いの高い低音音高でコードを決定することができる。
【０１６２】
また、本実施の形態においては、ＣＰＵ２１は、ステップＳ２６０２で抽出された楽音数が所定数（５）以上でかつ、当該楽音の中で前拍でのコードの構成音と３個以上共通する楽音が存在する場合は、当該３個の楽音を抽出された音高とする。
したがって、低い順から３個の楽音それぞれが短三度以上の音程を有していない場合であっても、より適切な音高でコードを決定することができる。
【０１６３】
また、本実施の形態においては、ＣＰＵ２１は、ステップＳ２６０２で抽出された楽音数が所定数（５）以上の場合、低い順から短三度以上の音程を有している３個の楽音を抽出された楽音とする。
したがって、コードの決定に寄与する度合いの高い低音音高に基づいて、コードを決定することができる。
【０１６４】
また、本実施の形態においては、ＣＰＵ２１は、拍点ポイントジャッジ４−４処理などにおいて、現在の拍が１拍もしくは３拍目でかつ、自動伴奏データにより生成されたベース音の発音が現拍より前から維持され、さらに直前の拍のベース音と同一である場合、直前拍及び現拍において抽出された音高の種類が同一か否か判定し、同一と判定された場合は直前拍で確定したコードを現拍のコードとする。
したがって、弱拍でのベース音が同一音で強拍まで延びた場合に、ベース以外の音群も現拍と前拍とで同一であれば、前拍のコードを変化させないで維持することができる。
【０１６５】
また、本実施の形態においては、ＣＰＵ２１は、拍点ポイントジャッジ４−４処理などにおいて、現在の拍が２拍もしくは４拍目でかつ、当該拍で抽出された音高の中の最高音が直前拍の最高音と異なり、さらに当該現在の拍の最高音が、直前拍で確定したコードのコード音高あるいはスケール音高でかつ直前拍の最高音との差が長２度以内の場合は、直前拍で確定したコードを現拍のコードとする。
したがって、弱拍で順次進行をした場合に、直前拍で確定したコードを維持することができるので、適切にコードを決定できる。
【０１６６】
さらに、本実施の形態においては、コード名判定処理（モノ）（図５のステップＳ５０７）において、ＣＰＵ２１は、鍵盤１１の一連の操作において進行するメロディシーケンスにおいて、実行中の自動伴奏データの進行を規定する時間情報、特に拍の情報に基づいて、現在の拍の拍頭において押鍵された鍵に関連する現在メロディ音ＣＭと、１つ前の拍である前拍の拍頭において押鍵された鍵に関する先行メロディ音ＰＭとを決定する。また、ＣＰＵ２１は、決定された現在メロディ音情報と、先行メロディ音情報と、前拍におけるコード名である先行コード名ＰｒｅＣＨとに基づき、現在コード名ＣｕｒＣＨを決定するコード名決定処理（図８のステップＳ８０９）を実行する。また、メロディ音の決定に際して、ＣＰＵ２１は、現在の拍が、小節において何番目の拍であるかに基づいて、現在メロディ音ＣＭおよび先行メロディ音ＰＭを決定する。
【０１６７】
すなわち、本実施の形態によれば、押鍵された拍の位置（時間的な位置）を考慮して現在メロディ音ＣＭおよび先行メロディ音ＰＭが決定され、決定されたメロディ音のシーケンスと、先行コード名ＰｒｅＣＨに基づいて現在コード名ＣｕｒＣＨが決定される。
【０１６８】
また、本実施の形態においては、ＣＰＵ２１は、拍子が４拍子である場合に、現在の拍が、１拍目或いは３拍目であるか、或いは、他の拍であるかに基づいて、現在メロディ音情報および先行メロディ音情報を決定する。すなわち、強拍（１拍目、３拍目）と、弱拍（２拍目、４拍目）に基づいて、現在メロディ音ＣＭおよび先行メロディ音ＰＭを決定することで、拍の重みを考慮することが可能となる。
【０１６９】
また、本実施の形態において、ＣＰＵ２１は、前拍の先頭以降の押鍵が、現在の拍まで延びている場合に、シンコペーションであると判断し、現在メロディ音ＣＭを、現在の拍まで延びている押鍵に関するものに決定する。すなわち、拍頭の押鍵でなくとも、シンコペーションを構成する場合には、これを拍頭の押鍵と同様に取り扱うことができる。
【０１７０】
また、ＣＰＵ２１は、第１のドミナントモーション判定処理（図１３）において、先行コード名ＰｒｅＣＨがドミナントコードを示し、かつ、先行メロディ音ＰＭから現在メロディ音ＣＭが、予め定められた、ドミナントコードの構成音からトニックコードの構成音への移行を示す場合に、現在コード名ＣｕｒＣＨとして、トニックに相当するコード名を与える。このように、メロディシーケンスからドミナントモーションが明確に示される場合には、現在コード名ＣｕｒＣＨをトニックとして、コード進行における終止を形成させる。
【０１７１】
また、ＣＰＵ２１は、第２のドミナントモーション判定処理（図２０）において、先行メロディ音ＰＭから現在メロディ音ＣＭが、予め定められた、ドミナントコードの構成音からトニックコードの構成音への移行を示す場合に、現在コード名ＣｕｒＣＨとして、トニックに相当するコード名を与える。ここでは、先行コード名ＰｒｅＣＨがドミナントコードではない場合でも、メロディシーケンスからドミナントモーションが明確に示される場合には、現在コード名ＣｕｒＣＨをトニックとして、コード進行における終止を形成させる。
【０１７２】
さらに、ＣＰＵ２１は、第１のドミナントモーション判定処理或いは第２のドミナントモーション判定処理により、現在コード名ＣｕｒＣＨとしてトニックに相当するコード名が付与されなかった場合に、現在コード名ＣｕｒＣＨとして、先行コード名ＰｒｅＣＨを与える。これにより、コード保持を実現することができる。
【０１７３】
また、本実施の形態においては、現在メロディ音ＣＭが１拍目の押鍵に関する場合に、先行メロディ音ＰＭ、現在メロディ音ＣＭおよび先行コード名情報ＰｒｅＣＨに対応付けられたコード名を格納した第１のコードテーブルと、現在メロディ音ＣＭが、１拍目以外の押鍵に関する場合に、先行メロディ音ＰＭ、現在メロディ音ＣＭおよび先行コード名ＰｒＣＨに対応付けられたコード名を格納した第２のコードテーブルとを備え、ＣＰＵ２１は、押鍵タイミングにしたがって、第１のコードテーブル或いは第２のコードテーブルを参照する。これにより、拍にしたがって異なるコード名を取得することが可能となる。また、テーブルを参照することで、リアルタイムにコード名を決定することが可能となる。
【０１７４】
さらに、本実施の形態においては、決定された先行メロディ音ＰＭおよび現在メロディ音ＣＭに基づき、第１のコードテーブル或いは第２のコードテーブルにおいて、対応するコード名が存在しない場合に、現在コード名ＣｕｒＣＨとしてオーギュメント（ａｕｇ）或いはディミニッシュ（ｄｉｍ）という無判定コードを付与する。これにより、先行メロディ音ＰＭや現在メロディ音が、コード構成音或いはスケールノートでない場合であっても、楽曲においてそれほど違和感のない何らかのコード名を付与することが可能となる。
【０１７５】
さらに、本実施の形態においては、ＣＰＵ２１は、無判定コードテーブルを参照して、現在メロディ音ＣＭ、先行メロディ音ＰＭおよび先行コード名ＰｒｅＣＨから、オーギュメント（ａｕｇ）或いはディミニッシュ（ｄｉｍ）の何れのコードにすべきかを判断することが可能となる。
【０１７６】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【０１７７】
例えば、前記実施の形態においては、拍子を４拍子としているが、３拍子或いは６拍子でも本発明を適用可能である。例えば、３拍子の場合には、上記処理のうち、１拍目〜３拍目についての処理を使用すれば良い。また、６拍子は、３拍子が２つあると考え、上記１拍目〜３拍目の処理を使用する。また、４拍目〜６拍目は、１拍目〜３拍目と同様に扱って同一の処理を実行すれば良い。
【０１７８】
また、前記実施の形態では、ハ長調（ＣＭａｊ）或いはイ短調（Ａｍｉｎ）という調性において、主音（根音）に対する度数を用いたコード名が得られるがこれに限定されるものではなく、他の調性についても本発明を適用可能である。この場合には、例えば、楽曲が長調であれば、「Ｃ」と、その楽曲の調性の根音との音高差が算出され、その音高差をオフセットとして、オフセット値をＲＡＭ２３に格納すれば良い。処理においては、実際に押鍵された鍵番号により特定される音名をオフセットだけ減じることで、「Ｃ」のスケールにて処理を実行することが可能となる。
【０１７９】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的或いは個別に実行される処理をも含むものである。
また、本明細書において、システムの用語は、複数の装置や複数の手段などより構成される全体的な装置を意味するものとする。
【０１８０】
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１８１】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［付記１］
少なくとも、コード名、および、拍を含む時間情報に基づいたコード構成音の発音タイミング、を含む自動伴奏データを記憶する記憶手段と、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御手段と、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定手段と、を備えた自動伴奏装置であって、
前記コード判定手段が、
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出手段と、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択手段と、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力手段と、
を有する自動伴奏装置。
［付記２］
前記抽出手段は、前記自動伴奏データの進行の速度に応じて、同時操作された演奏操作子の検出周期を可変する付記１に記載の自動伴奏装置。
［付記３］
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、当該音高情報の中で同一音名の音高情報がある場合、高いほうの音高情報を削除する付記１に記載の自動伴奏装置。
［付記４］
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、操作のベロシテイの大きい演奏操作子に対応する音高情報４個と操作時間の長い前記演奏操作子に対応する音高情報４個とが同一の場合は、当該４個の音高情報を抽出された音高情報とする付記１に記載の自動伴奏装置。
［付記５］
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、低い順から４個の音高情報それぞれが短三度以上の音程を有している場合は、当該４個の音高情報を抽出された音高情報とする付記１に記載の自動伴奏装置。
［付記６］
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、低い順から３個の音高情報それぞれが短三度以上の音程を有している場合は、当該３個の音高情報を抽出された音高情報とする付記１に記載の自動伴奏装置。
［付記７］
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、当該音高情報の中で前記直前拍でのコードの構成音の音高と３個以上共通する音高情報が存在する場合は、当該３個の音高情報を抽出された音高情報とする付記１に記載の自動伴奏装置。
［付記８］
前記抽出手段は、抽出された音高情報数が所定数以上の場合、低い順から短三度以上の音程を有している３個の音高情報を抽出された音高情報とする付記１に記載の自動伴奏装置。
［付記９］
前記選択手段は、現在の拍が１拍もしくは３拍目でかつ、前記自動伴奏データにより生成されたベース音の発音が現拍より前から維持され、さらに直前の拍のベース音と同一である場合、直前拍及び現拍において抽出された音高情報の種類が同一か否か判定し、同一と判定された場合は直前拍で確定したコードを現拍のコードとし、同一でないと判定された場合は前記抽出された音高情報及びその数を前記コード判定テーブルに入力すべき音高情報及びその数として確定する付記１に記載の自動伴奏装置。
［付記１０］
前記選択手段は、現在の拍が２拍もしくは４拍目でかつ、当該拍で抽出された音高情報の中の最高音高情報が直前拍の最高音高情報と異なり、さらに当該現在の拍の最高音高情報が、直前拍で確定したコードのコード音高あるいはスケール音高でかつ直前拍の最高音高情報との差が長２度以内の場合は、直前拍で確定したコードを現拍のコードとする付記１に記載の自動伴奏装置。
［付記１１］
少なくとも、コード名、および、拍を含む時間情報に基づいたコード構成音の発音タイミング、を含む自動伴奏データと、入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、を記憶する記憶手段を備えたコンピュータに、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御ステップと、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定ステップと、を実行させ、
前記コード判定ステップが、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、１つ前の拍である直前拍の拍頭において同時操作された演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出ステップと、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択ステップと、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力ステップと、
を有する自動伴奏プログラム。
【符号の説明】
【０１８２】
１０        電子楽器  １１        鍵盤  １２、１３  スイッチ  １５        表示部  ２１        ＣＰＵ  ２２        ＲＯＭ  ２３        ＲＡＭ  ２４        サウンドシステム  ２５        スイッチ群  ２６        音源部  ２７        オーディオ回路  ２８        スピーカ
【図１】
0005884328.tif 000002
【図２】
0005884328.tif 000003
【図３】
0005884328.tif 000004
【図４】
0005884328.tif 000005
【図５】
0005884328.tif 000006
【図６】
0005884328.tif 000007
【図７】
0005884328.tif 000008
【図８】
0005884328.tif 000009
【図９】
0005884328.tif 000010
【図１０】
0005884328.tif 000011
【図１１】
0005884328.tif 000012
【図１２】
0005884328.tif 000013
【図１３】
0005884328.tif 000014
【図１４】
0005884328.tif 000015
【図１５】
0005884328.tif 000016
【図１６】
0005884328.tif 000017
【図１７】
0005884328.tif 000018
【図１８】
0005884328.tif 000019
【図１９】
0005884328.tif 000020
【図２０】
0005884328.tif 000021
【図２１】
0005884328.tif 000022
【図２２】
0005884328.tif 000023
【図２３】
0005884328.tif 000024
【図２４】
0005884328.tif 000025
【図２５】
0005884328.tif 000026
【図２６】
0005884328.tif 000027
【図２７】
0005884328.tif 000028
【図２８】
0005884328.tif 000029
【図２９】
0005884328.tif 000030
【図３０】
0005884328.tif 000031
【図３１】
0005884328.tif 000032
【図３２】
0005884328.tif 000033
【図３３】
0005884328.tif 000034
【図３４】
0005884328.tif 000035
【図３５】
0005884328.tif 000036
【図３６】
0005884328.tif 000037
【図３７】
0005884328.tif 000038
【図３８】
0005884328.tif 000039
【図３９】
0005884328.tif 000040
【図４０】
0005884328.tif 000041
【図４１】
0005884328.tif 000042
【図４２】
0005884328.tif 000043
【図４３】
0005884328.tif 000044
【図４４】
0005884328.tif 000045
【図４５】
0005884328.tif 000046
【図４６】
0005884328.tif 000047
【図４７】
0005884328.tif 000048
【図４８】
0005884328.tif 000049
【図４９】
0005884328.tif 000050