"演奏データを入力する入力手段と、演奏曲の調情報を取得する取得手段と、コードの検出タイミングを検知したことに応じて、コードの検出を指示する指示手段と、前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手段によって入力された演奏データに基づいてコードを1つ選出する第1の選出手段と、少なくとも、前記第1の選出手段によって直前に選出されたコードの情報および前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手段によって入力された演奏データに基づいてコードを1つ選出する第2の選出手段と、前記第2の選出手段によって選出されたコードが、前記第1の選出手段によって直前に選出されたコードを始点とするコード進行の最後のコードとなり得るかどうかを判定する判定手段と、第1または第2の情報のいずれかを設定可能な設定手段と、前記指示手段によってコードの検出が指示されたときに、前記設定手段によって前記第1の情報が設定されていた場合には、当該コードの検出を前記第1の選出手段を用いて行うように制御する一方、前記設定手段によって前記第2の情報が設定されていた場合には、当該コードの検出を前記第2の選出手段を用いて行うように制御する制御手段とを有し、前記設定手段は、前記第1の選出手段によって選出されたコードが当該抽出された複数のコード候補のうちの一部のコード候補と所定の関係となるコードである場合には、前記第2の情報を設定する一方、前記第2の選出手段によって選出されたコードが前記判定手段によって前記最後のコードとなり得ると判定された場合には、前記第1の情報を設定することを特徴とするコード検出装置。前記第1の選出手段によって選出されたコードが前記一部のコード候補と前記所定の関係とならないコードであった場合の当該選出されたコードの情報、または、前記第2の選出手段によって選出されたコードが前記判定手段によって前記最後のコードとなり得ると判定された場合の当該選出されたコードの情報を記憶する記憶手段をさらに有し、前記第1の選出手段は、前記記憶手段によって記憶されたコードの情報および前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出することを特徴とする請求項1に記載のコード検出装置。前記第2の選出手段が複数のコード候補を抽出する際に参照する調情報は、前記第1の選出手段を用いたコードの検出から当該第2の選出手段を用いたコードの検出に移る直前に、前記第1の選出手段が参照した調情報であることを特徴とする請求項1または2に記載のコード検出装置。演奏データを入力する入力手順と、演奏曲の調情報を取得する取得手順と、コードの検出タイミングを検知したことに応じて、コードの検出を指示する指示手順と、前記取得手順によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手順によって入力された演奏データに基づいてコードを1つ選出する第1の選出手順と、少なくとも、前記第1の選出手順によって直前に選出されたコードの情報および前記取得手順によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手順によって入力された演奏データに基づいてコードを1つ選出する第2の選出手順と、前記第2の選出手順によって選出されたコードが、前記第1の選出手順によって直前に選出されたコードを始点とするコード進行の最後のコードとなり得るかどうかを判定する判定手順と、第1または第2の情報のいずれかを設定可能な設定手順と、前記指示手順によってコードの検出が指示されたときに、前記設定手順によって前記第1の情報が設定されていた場合には、当該コードの検出を前記第1の選出手順を用いて行うように制御する一方、前記設定手順によって前記第2の情報が設定されていた場合には、当該コードの検出を前記第2の選出手順を用いて行うように制御する制御手順とをコンピュータに実行させるためのプログラムであって、前記設定手順では、前記第1の選出手順によって選出されたコードが当該抽出された複数のコード候補のうちの一部のコード候補と所定の関係となるコードである場合には、前記第2の情報を設定する一方、前記第2の選出手順によって選出されたコードが前記判定手順によって前記最後のコードとなり得ると判定された場合には、前記第1の情報を設定することを特徴とするプログラム。しかし、上記従来のコード検出装置では、演奏者のリアルタイム演奏に応じて入力された演奏データに調和するようなコードを、コード検出タイミング毎に検出できるものの、どのコード検出タイミングにおいても同じコード検出方法アルゴリズムを採っているため、演奏者の演奏状態が同じであれば、同じコードが検出されることになり、その結果、安定感はあるものの単調なコードが検出されることがある。また、コード検出タイミング毎に同じコード検出アルゴリズムを採っているために、独特なコード進行を形成するコードを検出することも困難になる。したがって、独特なコード進行を生成するには、当該コード進行を形成するコードが検出されるような演奏を各コード検出タイミングで確実に行うなど、演奏者に面倒な演奏を強いることになる。本発明は、この点に着目してなされたものであり、独特なコード進行を形成するコードであって、入力された演奏データに対して音楽的なつながりのあるコードを簡単に検出することが可能となるコード検出装置およびコード検出方法を実現するためのプログラムを提供することを目的とする。上記目的を達成するため、請求項1に記載のコード検出装置は、演奏データを入力する入力手段と、演奏曲の調情報を取得する取得手段と、コードの検出タイミングを検知したことに応じて、コードの検出を指示する指示手段と、前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手段によって入力された演奏データに基づいてコードを1つ選出する第1の選出手段と、少なくとも、前記第1の選出手段によって直前に選出されたコードの情報および前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手段によって入力された演奏データに基づいてコードを1つ選出する第2の選出手段と、前記第2の選出手段によって選出されたコードが、前記第1の選出手段によって直前に選出されたコードを始点とするコード進行の最後のコードとなり得るかどうかを判定する判定手段と、第1または第2の情報のいずれかを設定可能な設定手段と、前記指示手段によってコードの検出が指示されたときに、前記設定手段によって前記第1の情報が設定されていた場合には、当該コードの検出を前記第1の選出手段を用いて行うように制御する一方、前記設定手段によって前記第2の情報が設定されていた場合には、当該コードの検出を前記第2の選出手段を用いて行うように制御する制御手段とを有し、前記設定手段は、前記第1の選出手段によって選出されたコードが当該抽出された複数のコード候補のうちの一部のコード候補と所定の関係となるコードである場合には、前記第2の情報を設定する一方、前記第2の選出手段によって選出されたコードが前記判定手段によって前記最後のコードとなり得ると判定された場合には、前記第1の情報を設定することを特徴とする。請求項2に記載のコード検出装置は、請求項1のコード検出装置において、前記第1の選出手段によって選出されたコードが前記一部のコード候補と前記所定の関係とならないコードであった場合の当該選出されたコードの情報、または、前記第2の選出手段によって選出されたコードが前記判定手段によって前記最後のコードとなり得ると判定された場合の当該選出されたコードの情報を記憶する記憶手段をさらに有し、前記第1の選出手段は、前記記憶手段によって記憶されたコードの情報および前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出することを特徴とする。請求項3に記載のコード検出装置は、請求項1または2のコード検出装置において、前記第2の選出手段が複数のコード候補を抽出する際に参照する調情報は、前記第1の選出手段を用いたコードの検出から当該第2の選出手段を用いたコードの検出に移る直前に、前記第1の選出手段が参照した調情報であることを特徴とする。上記目的を達成するため、請求項4に記載のプログラムは、請求項1と同様の技術的思想によって実現できる。請求項1または4に記載の発明によれば、第1の選出手段あるいは第1の選出手順によって選出されたコードが当該抽出された複数のコード候補のうちの一部のコード候補と所定の関係となるコードである場合には、第2の情報が設定される一方、第2の選出手段あるいは第2の選出手順によって選出されたコードが、前記第1の選出手段あるいは第1の選出手順によって直前に選出されたコードを始点とするコード進行の最後のコードとなり得ると判定された場合には、前記第1の情報が設定され、コードの検出が指示されたときに、前記第1の情報が設定されていた場合には、当該コードの検出を前記第1の選出手段あるいは前記第1の選出手順を用いて行うように制御される一方、前記第2の情報が設定されていた場合には、当該コードの検出を前記第2の選出手段あるいは前記第2の選出手順を用いて行うように制御されるので、前記第2の選出手段あるいは前記第2の選出手順を用いて独特なコード進行を形成するコードを簡単に検出することが可能となる。そして、前記第1および第2の選出手段あるいは前記第1および第2の選出手順を用いたコードの検出は、入力された演奏データに基づいてなされているので、その検出結果である、前記独特なコード進行を形成するコードは、当該演奏データに対して音楽的なつながりのあるものとなる。以下、本発明の実施の形態を図面に基づいて詳細に説明する。図1は、本発明の一実施の形態に係るコード検出装置を適用した電子楽器の概略構成を示すブロック図である。同図に示すように、本実施の形態の電子楽器は、ユーザの演奏操作に応じて音高情報を含む演奏データを入力する鍵盤を含む演奏操作子1と、各種情報を入力するための複数のスイッチやロータリエンコーダを含む設定操作子2と、演奏操作子1の操作状態を検出する検出回路3と、設定操作子2の操作状態を検出する検出回路4と、装置全体の制御を司るCPU5と、該CPU5が実行する制御プログラムや各種テーブルデータ等を記憶するROM6と、演奏データ、各種入力情報および演算結果等を一時的に記憶するRAM7と、タイマ割込み処理における割込み時間や各種時間を計時するタイマ8と、後述するようにCPU5が供給するコード情報に基づいて演奏データ伴奏音を発生させるためのものを生成する自動伴奏装置9と、各種情報等を表示する、たとえばLCDliquidcrystaldisplayおよびLEDlightemittingdiode等を備えた表示装置10と、前記制御プログラムを含む各種アプリケーションプログラムや各種楽曲データ、各種データ等を記憶する記憶装置11と、外部MIDImusicalinstrumentdigitalinterface機器等の外部機器100を接続し、この外部機器100とデータの送受信を行う通信インターフェースI/F12と、演奏操作子1から入力された演奏データや、前記自動伴奏装置9によって生成された演奏データ等を楽音信号に変換する音源回路13と、該音源回路13からの楽音信号に各種効果を付与するための効果回路14と、該効果回路14からの楽音信号を音響に変換する、たとえば、DACdigitaltoanalogconverterやアンプ、スピーカ等のサウンドシステム15とにより構成されている。上記構成要素3~14は、バス16を介して相互に接続され、CPU5および自動伴奏装置9にはタイマ8が接続され、通信I/F12には外部機器100が接続され、音源回路13には効果回路14が接続され、効果回路14にはサウンドシステム15が接続されている。自動伴奏装置9は、たとえば、ROM6に予め記憶されたシーケンサソフトウェアをCPU5に実行させることによって実現され、前述のように、供給されたコード情報に基づいて演奏データを生成し、生成した演奏データを音源回路13に供給することで、伴奏音を発生させる。また、自動伴奏装置9は、たとえば、ROM6に予め記憶された各種伴奏スタイルデータからユーザが選択したいずれかの伴奏スタイルデータを再生して、演奏データを生成する機能も備えている。この機能を営むときに、自動伴奏装置9は、タイマ8から供給される時間情報に基づいて伴奏スタイルデータを再生する。なお、本発明の特徴は、自動伴奏装置9の構成や作用にある訳ではないので、自動伴奏装置9の構成や作用についてのこれ以上の説明は行わない。記憶装置11は、たとえば、フレキシブルディスクFD、ハードディスクHD、CD-ROM、DVDdigitalversatiledisc、光磁気ディスクMOおよび半導体メモリなどの記憶媒体とその駆動装置である。記憶媒体は駆動装置から着脱可能であってもよいし、記憶装置11自体が本実施の形態の電子楽器から着脱可能であってもよい。あるいは、記憶媒体も記憶装置11も着脱不可能であってもよい。なお記憶装置11の記憶媒体には、前述のように、CPU5が実行する制御プログラムも記憶でき、ROM6に制御プログラムが記憶されていない場合には、この記憶装置11に制御プログラムを記憶させておき、それをRAM7に読み込むことにより、ROM6に制御プログラムを記憶している場合と同様の動作をCPU5にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。通信I/F12には、図示例では外部機器100が接続されているが、これに限られず、たとえばLANlocalareanetworkやインターネット、電話回線等の通信ネットワークを介して、サーバコンピュータが接続されるようにしてもよい。この場合、記憶装置11に上記各プログラムや各種パラメータが記憶されていなければ、通信I/F12はサーバコンピュータからプログラムやパラメータをダウンロードするために用いられる。クライアントとなる電子楽器は、通信I/F12および通信ネットワークを介してサーバコンピュータへとプログラムやパラメータのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求されたプログラムやパラメータを、通信ネットワークを介して電子楽器へと配信し、電子楽器が通信I/F12を介して、これらプログラムやパラメータを受信して記憶装置11に蓄積することにより、ダウンロードが完了する。なお、本実施の形態の電子楽器は、上述の構成から分かるように電子鍵盤楽器上に構築されたものであるが、これに限らず、鍵盤を外部接続した汎用的なパーソナルコンピュータ上に構築してもよい。以上のように構成された電子楽器が実行する制御処理を、まず図2~図4を参照してその概要を説明し、次に図5~図10を参照して詳細に説明する。図2は、コード検出タイミングの設定例を示す図であり、同図には、演奏曲として4/4拍子の曲を選択し、1拍目と3拍目をコード検出基準位置に設定し、そのコード検出基準位置の250ms前から50ms後までの期間をコード検出タイミングに設定する例が示されている。なお図示例では、1拍目にはコード検出タイミングが描かれていないが、これは、どちらか一方の拍位置にコード検出タイミングを描いておけば、他方の拍位置にも同様にコード検出タイミングが設定されていることが容易に分かるからである。また、詳細は後述するが、コード検出タイミングをどの位置にどれくらいの時間幅で、どれくらいの個数あるいは、どれくらいの頻度で設定するかは、ユーザが自由に選択できるようになっている。本実施の形態の電子楽器は、ユーザが前記鍵盤を用いて演奏することで、リアルタイム入力された演奏データをそのまま前記音源回路13に供給して発音するとともに、リアルタイム入力された演奏データに対して音楽的なつながりのあるコードを検出して前記自動伴奏装置9に供給することにより、伴奏音も発音するようにしている。前記コード検出タイミングの期間時間幅は、コードを検出するために参照する演奏データを入力する期間である。つまり、コード検出タイミングの期間内に入力された演奏データのみが、伴奏音を発音するためのコードを検出する際に参照される。コードの検出は、まず、A基本コード候補抽出処理B追加コード候補抽出処理の2種類の抽出処理によって、検出候補となるコード候補を抽出する。上記Aの抽出処理では、図3Aメジャ調の場合および図3Bマイナ調の場合のコードの機能とディグリーネームの対応表のうち、現在の調に対応する方を参照し、前回検出されたコードの機能から次に進むことのできる機能をすべて抽出する。そして、同対応表を参照して、抽出した機能を持つディグリーネームをダイアトニックスケールコードに属するものも、ダイアトニックスケールコード以外に属するものもすべて抽出する。さらに、抽出した各ディグリーネームにそれぞれ対応するコードネームを現在の調に基づいて検出し、検出した各コードネームと、該各コードネームにそれぞれ対応するディグリーネームとを含むコードデータを生成して、前記RAM7に確保したコードリストCList図示せずに登録する。ただし、所定の条件が満たされた場合、ダイアトニックスケールコードに属するものを抽出しないことがあるが、ここでは、これ以上説明しない。図4は、コードデータのデータフォーマットの一例を示す図であり、図示例では、コードデータは、コードネーム、ディグリーネームおよび情報データによって構成され、情報データは、解決先コード情報、このコード解決先コードに至るまでのディグリー情報以下、ディグリー情報と略して言うおよびフラグ情報によって構成されている。ただし、情報データは常に、上記3種類の情報によって構成されることを意味しない。つまり、コードデータによっては、解決先コード情報はあるが、フラグ情報がないもの、解決先コード情報はないが、フラグ情報があるもの、解決先コード情報およびフラグ情報共にないものがある。しかし、解決先コード情報がある場合には、ディグリー情報も常にあり、解決先コード情報がない場合には、ディグリー情報も常にない。上記Aの抽出処理によってコードリストCListに登録されるコードデータはいずれも、情報データを含んでいない。なお、解決先コード情報、ディグリー情報およびフラグ情報の意味内容については、次の上記Bの抽出処理の説明の中で説明する。上記Bの抽出処理は、B1割り込み型コード進行を形成するためのコード候補の抽出処理B2エクステンデッド型コード進行を形成するためのコード候補の抽出処理によって構成されている。そして、上記割り込み型コード進行とは、本実施の形態では、B1aメジャ系セカンダリードミナント/ツーファイブ→ダイアトニックスケールコードのうちの所定のコードメジャ系解決先コードB1bマイナ系セカンダリードミナント/ツーファイブ→ダイアトニックスケールコードのうちの所定のコードマイナ系解決先コードB1cダブルドミナント→ダイアトニックスケールコードのうちのドミナント7th系のコードドミナント7th系解決先コードであり、上記エクステンデッド型コード進行とは、本実施の形態では、B2aエクステンデッドドミナント→ダイアトニックスケールコードB2bエクステンデッドドミナント→エクステンデッドドミナント→ダイアトニックスケールコードである。上記B1の抽出処理では、まず、前記Aの抽出処理によってコードリストCListに登録されたコードデータから、上記B1aのメジャ系解決先コードとなるもの、上記B1bのマイナ系解決先コードとなるもの、および、上記B1cのドミナント7th系解決先コードとなるものをそれぞれ抽出する。ここで、解決先コードとは、安定的なコード進行、つまり上記Aの抽出処理によって抽出されるコードデータを繋げて行くことによって形成される、骨格となるコード進行以下、骨格コード進行というに異質なコード進行つまり、上記割り込み型コード進行を割り込ませた場合に、この異質なコード進行に調和しながら再度安定化させるコードをいう。次に、抽出された各解決先コードにそれぞれ進行する割り込み型コード進行の始点となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに解決先コード情報、ディグリー情報およびフラグ情報を記憶したものを生成し、コードリストCListに追加する。ここで、解決先コード情報とは、当該コードデータに対する解決先コードの情報であり、解決先コード情報には、本実施の形態では解決先コードのルートの度数が記憶される。ディグリー情報とは、解決先コードに至るまでのディグリーネームの推移コード進行を示す情報であり、ディグリー情報には、本実施の形態では第1のディグリーネームof第2のディグリーネームof解決先コードのルートの度数ただし、第2のディグリーネームがない場合もあるが記憶される。フラグ情報とは、当該コードデータの種類を示すものであり、フラグ情報には、割り込み型コード進行を形成するためのコードであることを示す割り込みが記憶される。前記B2の抽出処理では、前記エクステンデッド型コード進行の始点となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データにフラグ情報を記憶したものを生成し、コードリストCListに追加する。このときフラグ情報には、検出したコードの種類に応じて、エクステンデッドV7/V7sus4またはエクステンデッド♭II7のいずれかが記憶される。なお、Bの抽出処理が実行されると、B1の抽出処理は常に実行されるが、B2の抽出処理は、所定の条件が満たされた場合後述するEPextendedplusフラグがセット状態の場合に実行される。どの場合にEPフラグをセット/リセットするかについては、制御処理の詳細で後述する。このようにしてコードリストCListに登録されたコードデータの中から、入力された演奏データに基づいてコードデータを1つ選出し、選出したコードデータを前記RAM7に確保した検出コードChord図示せずに記憶する。検出コードChordが、前記Aの抽出処理によって抽出された基本コードであれば、次のコード検出タイミングでも、AおよびBの抽出処理が実行されるが、検出コードChordが、前記Bの抽出処理によって抽出された追加コードであれば、次のコード検出タイミングでは、Cコード進行形成用コード検出処理が実行される。このCコード進行形成用コード検出処理では、RAM7に確保したスタートコードSChord図示せずに記憶されている前回検出されたコードデータを始点とし、当該コードデータの種類当該コードデータの情報データ内のフラグ情報が割り込みかエクステンデッドV7/V7sus4あるいはエクステンデッド♭II7かに応じて、割り込み型コード進行またはエクステンデッド型コード進行のいずれか一方を形成するためのコードデータを1つ選出し、選出したコードデータを検出コードChordに記憶する。このCコード進行形成用コード検出処理は、その後、割り込み型コード進行またはエクステンデッド型コード進行の終点となるコードデータが検出されるまで継続して実行され、当該終点となるコードデータが検出されると、検出コードChordの情報データ内のフラグ情報がEndに設定される。これにより、次のコード検出タイミングでは、再度AおよびBの抽出処理が実行されるようになる。なお、割り込み型コード進行を形成するためのコードデータの検出中には、寄り道となるコードデータ情報データ内のフラグ情報に寄り道が記憶されたものも検出可能に構成されている。また、各コード検出タイミングで検出された検出コードChordは、自動伴奏装置9に出力されて発音される。前記AおよびBの抽出処理または前記Cの検出処理を開始してから1つのコードを選出して自動伴奏装置9に出力するまでのコード検出処理後述する制御処理の詳細では、5コードの検出タイミング時処理に相当するは、図2の例では、1拍目と3拍目に実行されるが、より厳密には、当該各拍のコード検出タイミングの期間の末尾、つまり時間T3に実行の開始が指示される。これは、コード検出処理で参照する演奏データの検出期間をコード検出タイミングの全期間、つまり期間T1~T3としているからである。このように本実施の形態の電子楽器では、次に進行するコードとして、音楽的なつながりのあるコード候補を抽出し、抽出したコード候補の中から、リアルタイム入力された演奏データと調和するコードを検出するようにしたので、リアルタイム演奏に対して音楽的なつながりのあるコードを検出することができる。そして、検出されたコードは常に、リアルタイム入力された演奏データと調和している。調性音楽で使用される全コード進行には、トニックからドミナントなどの機能的進行とクリシェなどの非機能的進行に分類される骨格コード進行以外に、骨格コード進行に割り込むコード進行たとえば、セカンダリードミナントやそのツーファイブ、エクステンデッドドミナントがある。この骨格に割り込む形のコード進行は、ある時点のコードに対して次に進むことができるコードという観点では候補を挙げることができない。その理由は、ある解決先コードに至るまでに経過するコードが割り込む形になるからである。本実施の形態では、骨格コード進行を形成するためのコード候補を複数抽出しているときに、その複数のコード候補から解決先コードとなり得るものを抽出し、抽出した各解決先コードに解決するコード候補および当該各解決先コードに解決するまでに経過するコード候補を検出して、コード候補に追加するようにしたので、調性音楽で使用される全コード進行のうち、骨格コード進行に割り込む形のコード進行となるコード候補の追加およびコードの検出が可能になる。あるコード検出タイミングで抽出されたコード候補のいずれかに解決するコード候補が検出された場合、その次のコード検出タイミングでは、直前のコード検出タイミングで検出されたコードが解決するコードかその代理コードが検出される可能性が極めて高い。本実施の形態では、検出される可能性が極めて高いコード候補を余さず挙げるようにしたので、コード進行データベースを用いる従来の方法より柔軟でバラエティに富んだコード進行を生成することができる。また本実施の形態では、解決先のコード検出に至るまでに複数のコードを経過する可能性を持たせているので、一層バラエティに富んだコード進行を生成することができる。さらに本実施の形態では、セカンダリードミナントからの解決やツーファイブ進行、さらにそこからのドミナント7thコードの連続など、演奏途中に現れ、どこまで続くか定まらないようなコード進行を検出することができる。また本実施の形態では、骨格コード進行を形成するためのコードデータの検出処理と、骨格コード進行に割り込む形のコード進行を形成するためのコードデータの検出処理とを独立に行うようにしているので、骨格コード進行に割り込む形のコード進行の始まりになるコードが検出されると、後者の検出処理でのみコードデータの検出を行うことで、その後に当該割り込む形のコード進行が続くようにコードデータの検出を制御することが可能となる。これにより、入力された演奏データが同じであっても、どちらの検出処理を用いてコードデータの検出を行ったかに応じて、検出されるコードデータが変わる可能性がある。その結果、音楽的なつながりを考慮しつつ、単調でないコード進行を得ることができる。さらに上記両検出処理は、演奏の流れに応じて自動的にいずれかの検出処理に切り替えられるので、ユーザはコードを検出させるために意識した演奏をしなくてもよく、自由な演奏に専念することができる。また本実施の形態では、エクステンデッドドミナントV7V7sus4の連続/♭II7の連続に進む可能性も考慮され、さらに、骨格に割り込むコード進行内で次に進む可能性のあるコードの1つ前に寄り道するかもしれないコード候補も抽出されるようになっている。これにより、骨格コード進行に割り込む形のコード進行が発生した際に、その後起こる可能性のあるより多くのコード進行に対応することができるようになっている。次に、この制御処理を詳細に説明する。図5Aおよび図5Bは、本実施の形態の電子楽器、特にCPU5が実行する、自動伴奏を使った演奏処理の手順を示すフローチャートである。本実施の形態の電子楽器では、ユーザが演奏操作子1を用いてリアルタイム演奏する際の演奏モードとして、自動伴奏装置9を作動させずに、演奏操作子1を用いて入力された演奏データに応じた楽音を発音させる第1の演奏モードと、自動伴奏装置9を作動させて、演奏操作子1を用いて入力された演奏データに応じた楽音とともに、自動伴奏装置9によって生成された演奏データに応じた楽音伴奏音も発音させる第2の演奏モードの2種類の演奏モードを備えている。通常の演奏モード、つまり、本実施の形態の電子楽器の電源をオンしたときに最初に選択される演奏モードは、第1の演奏モードであるので、第2の演奏モードに移行するには、ユーザによる所定の移行指示が必要となる。上記自動伴奏を使った演奏処理は、この移行指示がなされたときに起動される処理である。なお本実施の形態では、本発明の特徴を自動伴奏を使った演奏処理内にすべて盛り込み、この自動伴奏を使った演奏処理を用いて本発明の特徴を説明するようにしたので、自動伴奏を使わない演奏処理についての説明は行わない。したがって、以下自動伴奏を使った演奏処理を演奏処理と略して言う。ただし、本発明の特徴を自動伴奏を使わない演奏処理内にすべて盛り込み、この自動伴奏を使わない演奏処理を用いて本発明の特徴を説明することもできるこの場合には、伴奏音は発生しないので、自動伴奏を使った演奏処理を用いて本発明の特徴を説明したのは、便宜上のことに過ぎない。本演奏処理は、主として、1起動時処理ステップS1~S42自動伴奏のスタート時処理ステップS73自動伴奏のストップ時処理ステップS94ノートイベント処理ステップS125コードの検出タイミング時処理図5BのステップS14~S19によって構成されている。本演奏処理が起動されると、前記1の起動時処理が1回実行された後、自動伴奏のスタート指示があるまで待機状態となりステップS6→S5→S6、自動伴奏のスタート指示があると、前記2の自動伴奏のスタート時処理が実行され、これに続いて、前記4および5の各処理が適宜実行される。そして4および5の各処理は、自動伴奏のストップ指示があるまでステップS8、あるいは第1の演奏モードに戻る指示があるまでステップS5、適宜繰り返し実行される。なお、自動伴奏のストップ指示があると、前記3の自動伴奏のストップ時処理が実行された後、伴奏スタイルなどの設定変更があったかどうか判定されステップS10、設定変更があったときには、前記1の起動時処理に戻る一方、設定変更がなかったときには、前記待機状態に戻る。また、第1の演奏モードに戻る指示があると、本演奏処理は終了するステップS5→終了。前記1の起動時処理は、11演奏開始前の設定処理ステップS112コード検出タイミングおよび各種ルールの設定処理ステップS213初期化処理ステップS314コード検出タイミングの始点および終点の算出設定処理ステップS4によって構成されている。この1起動時処理に処理が進むと、まずCPU5は、前記11の演奏開始前の設定処理を実行する。この11演奏開始前の設定処理では、CPU5は、演奏テンポ、拍子、伴奏スタイル、ボリューム値および演奏音色などの各項目の設定を行う。各項目は、ユーザに設定すべき値あるいは種類を問い合わせ、これに応じてユーザが入力あるいは選択した値あるいは種類を設定するようにしてもよいし、デフォルト設定されたもの、あるいは前回設定されたものをそのまま、あるいは一部変更して設定するようにしてもよい。次にCPU5は、処理を前記12のコード検出タイミングおよび各種ルールの設定処理に進める。この12コード検出タイミングおよび各種ルールの設定処理では、CPU5は、コード検出タイミングの設定ルールと、それ以外の各種ルールを設定する。コード検出タイミングの設定ルールとは、具体的には、コードを検出するタイミングとして、時間幅を設けるのか、あるいは時間幅を設けずに時点とするのか、また、時間幅を設けるのであれば、どの時点を基準位置として、その前後にどのくらいの時間幅を設けるのか、あるいは時点とするのであれば、どの時点とするのかということである。時間幅を設ける例としては、前記図2で示したように、2拍毎に4/4拍子が選択された場合には、たとえば1拍目と3拍目拍位置をコード検出基準位置として、250ms前から50ms後までの期間とすることが挙げられる。図示例では、時間幅を設定する単位としてmsを採用したが、もちろんこれに限らず、音符長であってもよい。また、コード検出基準位置は2拍毎の拍位置に限らず、1拍毎の拍位置であってもよいし、テンポが変化したときに、たとえば2拍毎から1拍毎に変動するようにしてもよいし、拍に限らず、小節毎の所定位置たとえば、先頭位置であってもよい。さらに、コード検出基準位置をどこに設定するかは、テンポ値や伴奏スタイルによって決まっていてもよい。一方、時点の例としては、時間幅を設ける場合で例示した各種コード検出基準位置、つまり、所定拍毎の拍位置や小節毎の所定位置、あるいは、ユーザが、たとえば前記設定操作子2に含まれる所定の操作子を操作した時点や、所定の拍内で、ユーザが所定の操作子を操作した時点などが考えられる。なお本実施の形態では、コード検出タイミングの設定ルールとして、前記図2の例で示したルールが選択設定されているものとする。各種ルールとしては、R1調情報の検出ルールやR2コードの選出ルールなどを挙げることができる。上記R1の調情報の検出ルールとしては、たとえば、演奏前にユーザに調情報を問い合わせ、これに応じてユーザが入力した調情報を検出取得するというルールや、ユーザの演奏操作に応じて入力された演奏データを解析して、随時調情報を検出するというルールなどが考えられる。なお本実施の形態では、調情報は、主音名メジャ/マイナによって表現したものを入力あるいは検出するものとする。また、演奏データを解析して調情報を検出する方法は、公知のものを用いればよい。そして、調情報を随時検出する方法を採用した場合には、コードが選出される度に後述する図7のステップS47等を参照、そのとき検出された調情報を当該選出されたコードに対応付けて記憶しておくとよい。前記R2のコードの選出ルールとしては、たとえば、R2a各コードに予め優先順位を付けておきたとえば、ダイアトニックスケールコードのトニックコードを上位にするなど、候補コードのうち、最上位のコードを選出するというルールR2b参照対象の演奏データの全ての音名と候補コードの各コードの構成音との一致度合い完全一致、3音以上が一致、2音が一致などが最も高いコードを選出するというルールなどを挙げることができる。また、候補コードの各コードの根音が参照対象の演奏データに含まれることを追加条件にしてもよい。また、12コード検出タイミングおよび各種ルールの設定処理では、メジャ調でのドミナントD→サブドミナントマイナSM進行インターラプテッドケーデンスを通常時も許可するかどうかも設定できるようになっている。ここで、通常時も許可とは、前記Aの基本コード候補抽出処理時でも、メジャ調においてインターラプテッドケーデンスとなるコード進行を形成するコード機能を有するディグリーネームの抽出を許可することを意味する。そして、通常時も許可が設定された場合には、前記図3Aのメジャ調におけるコードの機能とディグリーネームの対応表中、機能がD:ドミナントである次に進む事の出来る機能にSMが追加されて、次に進む事の出来る機能はT,DおよびSMの3種類となる一方、通常時は不許可が設定された場合には、当該次に進む事の出来る機能にはSMが追加されずに、TおよびDの2種類となる。図3Aの当該次に進む事の出来る機能中、SMがカッコ書きで示されているのは、SMが機能として選択される場合と選択されない場合の両方があり得るからである。本実施の形態では、図3Aの対応表は前記ROM6に予め記憶されており、必要なときに読み出して参照するようにしているが、通常時も許可が設定されたかどうかで、対応表のうちの一部データSMを採用するかどうかを判断するのは面倒なので、通常時も許可が設定された場合の対応表と通常時は不許可が設定された場合の対応表を予め別々に作成して記憶しておき、必要に応じて必要な方を読み出して参照すればよい。なお、12コード検出タイミングおよび各種ルールの設定処理でも、前記11演奏開始前の設定処理と同様に、各ルールは、ユーザに設定すべきルール内容を問い合わせ、これに応じてユーザが入力あるいは選択した内容を設定するようにしてもよいし、デフォルト設定されたものあるいは前回設定されたものをそのまま、あるいは一部変更して設定するようにしてもよい。次にCPU5は、処理を前記13の初期化処理に進める。この13初期化処理では、CPU5は、前記RAM7上に確保した次の各領域および各フラグを初期化する。すなわち、ノートイベントリストNList:コード検出タイミングの期間内に入力されたノートオンイベントに対応するノートイベント情報音高入力タイミングを登録するリストである;コード検出タイミングの始点sTime:コード検出タイミングの始点を記憶しておく領域である;コード検出タイミングの終点eTime:コード検出タイミングの終点を記憶しておく領域である;調情報Key:前記設定された調検出ルールに従って検出された調情報を記憶しておく領域である;コードリストCList:検出対象となるコードデータの候補を登録するリストである;検出コードChord:ノートイベントリストNListに登録されたノートイベント情報に基づいてコードリストCListから選出した1つのコードデータを検出コードとして記憶しておく領域である;スタートコードSChord:前記骨格コード進行の生成中に、当該骨格コード進行に割り込ませる前記割り込み型コード進行またはエクステンデッド型コード進行を生成する場合があり、その場合に、当該割り込み型コード進行またはエクステンデッド型コード進行のスタート始点となるコードデータを記憶しておく領域である;次コードリストNCList:割り込み型コード進行を生成しているときに、現在の検出コードChordから次に進行するコードデータの候補を登録するリストである;出力結果リストRList:調情報Keyおよび検出コードChordを登録するリストである;前回のディグリーネームLDN:前回の検出コードChordが持つディグリーネームを記憶しておく領域である;前回の機能LF:前回の検出コードChordに対応する機能を記憶しておく領域である;の各領域をクリアするとともに、通常コード検出フラグ:通常コード本実施の形態では、骨格コード進行を形成するコードデータが検出されたときにセット1され、通常コード以外のコードが検出されたときにリセット0されるフラグである;EPフラグ:前記Bの追加コード候補抽出処理で、エクステンデッドドミナントとなるコードデータの候補を抽出して、コードリストCListに追加するときにセットされ、当該コードデータの候補を抽出しないときにリセットされるフラグである;の前者のフラグをセットし、後者のフラグをリセットする。次にCPU5は、処理を前記14のコード検出タイミングの始点および終点の算出設定処理に進める。この14コード検出タイミングの始点および終点の算出設定処理では、CPU5は、前記設定されたコード検出タイミングの設定ルールに従って、最初のコード検出タイミングの始点および終点を算出し、算出した始点を前記始点sTimeに記憶設定するとともに、算出した終点を前記終点eTimeに記憶設定する。ただし本実施の形態では、コード検出タイミングとして、曲の先頭拍の拍位置をコード検出基準位置に取るとともに、その拍位置からさらに250ms前をコード検出タイミングの始点に取るのに対して、曲は先頭拍から開始されるので、曲の開始時に、その開始位置より前の位置を算出して、始点sTimeに設定するのは無意味である。したがって、この場合、始点sTimeには先頭拍の拍位置、つまりコード検出基準位置を設定することが好ましい。しかしこの場合に、原則通り、先頭拍の拍位置より250ms前の位置を算出して、始点sTimeに設定したとしても、設定された始点より後の時刻から制御処理が開始されるだけであって、その後の制御処理に問題が生じることはない。このようにして1起動時処理が1回実行されると、CPU5は、ユーザによる自動伴奏のスタート指示を待ち、自動伴奏のスタート指示がなされると、処理を前記2の自動伴奏のスタート時処理に進めるステップS6→S7。この2自動伴奏のスタート時処理では、CPU5は、前記タイマ8を起動して、タイマ8による計時を開始する。タイマ8の計時時間は、前述のように前記自動伴奏装置9にも供給され、さらに本演奏処理では、前述のように自動伴奏装置9は作動状態であるので、伴奏スタイルデータが選択設定されていれば、自動伴奏装置9は、本演奏処理とは独立して、タイマ8から供給された計時時間時間情報に基づいてその伴奏スタイルデータを再生する。そしてCPU5は、ユーザによって自動伴奏のストップ指示がなされるまで、ノートオンイベントが受け付けられたときには、前記4のノートイベント処理を実行しステップS8→S11→S12、タイマ8によって前記コード検出タイミングの終点eTimeが計時されたときには、前記5のコードの検出タイミング時処理を実行する図5BのステップS13→S14。一方、ユーザによって自動伴奏のストップ指示がなされると、CPU5は、処理を前記3の自動伴奏のストップ時処理に進めるステップS8→S9。この3自動伴奏のストップ時処理では、CPU5は、タイマ8を停止する。これにより当然ながら、自動伴奏装置9による前記伴奏スタイルデータの再生は停止する。図6は、前記4のノートイベント処理の詳細な手順を示すフローチャートである。同図に示すように、本ノートイベント処理は、41タイマ8がコード検出タイミング期間内の時間、つまり前記始点sTimeから前記終点eTimeまでの間の時間を計時しているときに41aノートオンイベントが受け付けられた場合の処理ステップS33,S3441bノートオフイベントが受け付けられた場合の処理ステップS35,S3642タイマ8がコード検出タイミング期間外の時間を計時しているときに42aノートオンイベントが受け付けられた場合の処理ステップS3842bノートオフイベントが受け付けられた場合の処理ステップS39によって構成されている。そして、上記41aの処理は、上記42aの処理、つまり、受け付けられたノートオンイベントを前記音源回路13に出力することでなされる発音処理に、当該ノートオンイベントに対応するノートイベント情報音高入力タイミングを前記ノートイベントリストNListに追加する処理を加えて構成され、上記41bの処理は、上記42bの処理、つまり、受け付けられたノートオフイベントを音源回路13に出力することでなされる消音処理に、当該ノートオフイベントに対応するノートイベント情報を前記ノートイベントリストNListから削除する処理を加えて構成されている。前記5のコードの検出タイミング時処理では、まずCPU5は、コード検出処理を実行するステップS14。コード検出処理の詳細は、図7のフローチャートに基づいて後述するが、コード検出処理が実行されると、1つのコードデータが検出選出されて、前記検出コードChordに記憶される。次にCPU5は、検出コードChordからコードネームを読み出して前記自動伴奏装置9に出力するステップS15。さらにCPU5は、通常コード検出フラグがセット状態であれば、調情報Keyと検出コードChordを出力結果リストRListの末尾に追加しステップS16→S17、コード検出タイミングの設定内容設定ルールに基づいて、次のコード検出期間の始点および終点を算出して、それぞれ始点sTimeおよび終点eTimeを更新しステップS18、ノートイベントリストNListを初期化クリアするステップS19。なお、通常コード検出フラグがリセット状態であれば、CPU5は、ステップS17をスキップして次のステップS18に処理を進める。通常コード検出フラグがリセット状態とは、前述のように、割り込み型コード進行またはエクステンデッド型コード進行を生成している状態であることを意味する。そして、割り込み型コード進行またはエクステンデッド型コード進行を形成するためのコードデータおよび調情報は、出力結果リストRListには追加登録しないようにしているので、この場合には、CPU5は当該ステップS17の追加登録処理を実行しないようにしている。図7は、前記ステップS14のコード検出処理の詳細な手順を示すフローチャートである。本コード検出処理は、主として、51通常コード検出処理ステップS42~S4852非通常コード検出処理への移行処理ステップS50~S5253非通常コード検出処理ステップS53,S56~S5854通常コード検出処理への移行処理ステップS55によって構成され、上記51通常コード検出処理には、前記A基本コード候補抽出処理および前記B追加コード候補抽出処理が含まれ、上記53非通常コード検出処理には、前記Cコード進行形成用コード検出処理が含まれている。そして、通常コード検出に関する処理系列、つまり上記51および52の処理系列は、通常コード検出フラグがセット状態のときに実行されステップS41→S42、非通常コード検出に関する処理系列、つまり上記53および54の処理系列は、通常コード検出フラグがリセット状態のときに実行されるステップS41→S53。前記51通常コード検出処理では、まずCPU5は、前記12のコード検出タイミングおよび各種ルールの設定処理によって設定された調検出ルールに従って、調情報を取得しステップS42、取得した調情報を前記調情報Keyに記憶しステップS43、さらに前記コードリストCListを初期化クリアするステップS44。次にCPU5は、前記A基本コード候補抽出処理その詳細は、図8Aおよび図8Bを用いて後述を実行するステップS45とともに、前記B追加コード候補抽出処理その詳細は、図10を用いて後述を実行するステップS46。この両抽出処理が実行されると、コードリストCListには、骨格コード進行を形成するための複数のコード候補および非骨格コード進行割り込み型コード進行およびエクステンデッド型コード進行の始点となる複数のコード候補が登録される。そしてCPU5は、ノートイベントリストNListとコードリストCListに基づいて、より具体的には、ノートイベントリストNListに登録されているノートイベント情報の音高を参照し、コードリストCListに登録されている複数のコード候補コードデータからコードデータを1つ選出しステップS47、選出したコードデータを検出コードChordに記憶するステップS48。なお、上記ステップS47でのコードの選出は、前記12のコード検出タイミングおよび各種ルールの設定処理で設定した前記R2コードの選出ルール、つまり本実施の形態では、前記R2aまたはR2bのいずれかに従って行われる。この事情は、上記ステップS47に限らず、ステップS47と同様の処理を行う他のステップ、たとえば後述する図11AのステップS126,S145およびS150等についても同様である。次にCPU5は、検出コードChordの情報データ内にフラグ情報があるかどうかを判別するステップS49。フラグ情報がある場合、フラグ情報には割り込み、エクステンデッドV7/V7sus4、エクステンデッド♭II7、寄り道およびEndのうちのいずれかが記憶されているが、処理がステップS49に進んだときに、検出コードChordの情報データ内にフラグ情報があった場合、そのフラグ情報は、割り込み、エクステンデッドV7/V7sus4およびエクステンデッド♭II7のうちのいずれかであり、寄り道またはEndであることはない。これは、寄り道およびEndの設定は、前記非通常コード検出に関する処理系列でのみ、より具体的には、前記53非通常コード検出処理に含まれる前記Cコード進行形成用コード検出処理でのみなされ、この処理系列から前記通常コード検出に関する処理系列に移行した後は、寄り道およびEndの設定がなされることはないからである。前記ステップS49の判別の結果、検出コードChordの情報データ内にフラグ情報があったときには、CPU5は、処理を前記52の非通常コード検出処理への移行処理を実行するステップS49→S50一方、検出コードChordの情報データ内にフラグ情報がなかったときには、CPU5は、当該移行処理を実行せずに、本コード検出処理を終了するステップS49→リターン。52非通常コード検出処理への移行処理では、CPU5は、通常コード検出フラグをリセットしステップS50、スタートコードSChordを初期化クリアした上で、検出コードChordの各情報をスタートコードSChordに記憶させステップS51、さらにコードリストCListおよび次コードリストNCListを共に初期化クリアするステップS52。前記53非通常コード検出処理では、まずCPU5は、コード進行形成用コード検出処理を実行するステップS53。コード進行形成用コード検出処理が実行されると、1つのコードデータが選出されて、検出コードChordに記憶される。次にCPU5は、検出コードChordの情報データ内のフラグ情報がEndであるかどうか判別するステップS54。非通常コード検出に関する処理系列では、基本的には、非骨格コード進行を形成するためのコードデータを検出しているが、いつかは骨格コード進行を形成するためのコードデータの検出に戻る必要がある。フラグ情報がEndであるコードデータは、非骨格コード進行の終点となるコードデータである。つまり、ステップS54の判別は、非骨格コード進行を形成するためのコードデータの検出を終了させるかどうかを判別している。この判別の結果、非骨格コード進行を形成するためのコードデータの検出を継続させるときフラグ情報≠Endには、CPU5は、当該フラグ情報がエクステンデッドV7/V7sus4またはエクステンデッド♭II7のいずれかに該当するかを判別するステップS56。このステップS56の判別は、非骨格コード進行として、前記エクステンデッド型コード進行または前記割り込み型コード進行のいずれを生成するかを判別する。この判別の結果、エクステンデッド型コード進行を生成するときには、CPU5は、スタートコードSChordに検出コードChordの各情報を記憶するステップS57とともに、コードリストCListを初期化するステップS58一方、割り込み型コード進行を生成するときには、CPU5は、本コード検出処理を直ちに終了するステップS56→リターン。前記ステップS54の判別の結果、非骨格コード進行を形成するためのコードデータの検出を終了させるときフラグ情報=Endには、CPU5は、処理を前記54の通常コード検出処理への移行処理に進め、通常コード検出フラグをセットするステップS55。図8Aおよび図8Bは、前記ステップS45の基本コード候補抽出処理の詳細な手順を示すフローチャートである。本基本コード候補抽出処理は、主として、61起動時処理ステップS61~S6362次の63の抽出処理の前処理ステップS64~S7263次に進むことのできる機能を持つディグリーネーム候補の抽出処理図8BのステップS75によって構成されている。本基本コード候補抽出処理が起動されると、まずCPU5は、処理を前記61の起動時処理に進める。この61起動時処理では、CPU5は、61aノートイベントリストNListが空である場合、つまり、ノートイベントリストNListにノートイベント情報が1個も記録されていない場合:本基本コード候補抽出処理を直ちに終了するステップS61→リターン;61bノートイベントリストNListが空でない場合:かつ61b1出力結果リストRListが空である場合:ノートイベントリストNListに記録されたノートイベント情報と調情報Keyに基づいて初回コードのディグリーネームとコードネームを検出し、検出したディグリーネームとコードネームを含むコードデータを生成してコードリストCListに登録した後、本基本コード候補抽出処理を終了するステップS61→S62→S63→リターン;61b2出力結果リストRListが空でない場合:前記62の前処理に進むステップS61→S62→S64。なお前記61b1の処理において、初回コードのディグリーネームとコードネームの検出は、従来の方法によって行えばよい。またこの場合、参照する前回のコードがまだ記憶されていないので、たとえば、調の主音をルートとしたメジャ調かマイナ調のトニックコードを参照すべき基準コードとしてもよい。前記62の前処理では、CPU5は、トニック禁止フラグ、サブドミナント禁止フラグおよびドミナント禁止フラグのセット/リセットを行う。具体的には、62a出力結果リストRListに4個以上のコードデータが登録されており、末尾から4個、つまり最新に登録されたものから遡って4個がすべて、ダイアトニックスケールコードのトニックTに該当するかどうか判定しステップS64、当該4個のコードデータがすべて、ダイアトニックスケールコードのトニックに該当する場合:トニック禁止フラグをセット1ステップS65;当該4個のコードデータのうち、少なくとも1個が、ダイアトニックスケールコードのトニックに該当しない場合:トニック禁止フラグをリセット0ステップS66;62b出力結果リストRListに2個以上のコードデータが登録されており、末尾から2個がすべて、ダイアトニックスケールコードのサブドミナントSに該当するかどうか判定しステップS67、当該2個のコードデータがすべて、ダイアトニックスケールコードのサブドミナントに該当する場合:サブドミナント禁止フラグをセットステップS68;当該2個のコードデータのうち、少なくとも1個が、ダイアトニックスケールコードのサブドミナントに該当しない場合:サブドミナント禁止フラグをリセットステップS69;62c出力結果リストRListに2個以上のコードデータが登録されており、末尾から2個がすべて、ダイアトニックスケールコードのドミナントDに該当するかどうか判定しステップS70、当該2個のコードデータがすべて、ダイアトニックスケールコードのドミナントに該当する場合:ドミナント禁止フラグをセットステップS71;当該2個のコードデータのうち、少なくとも1個が、ダイアトニックスケールコードのドミナントに該当しない場合:ドミナント禁止フラグをリセットステップS72。上記3種類の禁止フラグをそれぞれセットする場合は、対応する機能を持つダイアトニックスケールコードが所定個続いて選出されて発音される前記図5BのステップS15およびS17を参照場合に相当する。つまり、各禁止フラグは、対応する機能を持つダイアトニックスケールコードが所定個続いて選出されないように制限する機能を営んでいる後述する図9AのステップS83,S87、および図9BのステップS91を参照。このような禁止フラグを設けたことにより、単調なコード選出およびその発音を抑制することができる。なお、同じ機能を持つダイアトニックスケールコードが何個続いたときに、同じ機能を持つ新たなダイアトニックスケールコードの選出を禁止するかの上記例示した個数は、あくまでも例示に過ぎず、複数個であれば2個と4個に限られない。さらにCPU5は、出力結果リストRListの末尾のコードデータを参照し、前回コードのディグリーネームとその機能を取得し図8BのステップS73、取得したディグリーネームを前回のディグリーネームLDNに記憶するとともに、取得した機能を前回の機能LFに記憶するステップS74。次にCPU5は、処理を前記63の次に進むことのできる機能を持つディグリーネーム候補の抽出処理に進めるステップS75。図9Aおよび図9Bは、この63次に進むことのできる機能を持つディグリーネーム候補の抽出処理の詳細な手順を示すフローチャートである。同図A,Bに示すように本抽出処理では、まずCPU5は、前回の機能LFおよび調情報Keyに基づいて、次に進むことのできる機能を全て抽出するステップS81。このとき、前記図3A調情報Keyがメジャ調の場合または図3B調情報Keyがマイナ調の場合のいずれかのコードの機能とディグリーネームの対応表を参照して、次に進むことのできる機能を全て抽出する。たとえば、前回の機能LFがトニックTであり、調情報Keyがメジャ調である場合には、CPU5は、次に進むことのできる機能として、トニックT、サブドミナントS、ドミナントDおよびサブドミナントマイナSMを抽出する。また、前回の機能LFがドミナントDであり、調情報Keyがメジャ調である場合には、さらに、メジャ調でのドミナントD→サブドミナントマイナSM進行インターラプテッドケーデンスを通常時も許可するかどうかに応じて、CPU5は、次に進むことのできる機能として、トニックT、ドミナントDおよびサブドミナントマイナSM通常時も許可の設定時と、トニックTおよびドミナントD通常時は不許可の設定時のいずれかを抽出する。次にCPU5は、抽出した機能とその機能に対応する禁止フラグのセット状態に応じて、次のように場合分けし、各場合に対応する処理を実行する。すなわち、63a抽出した機能にトニックがあり、かつトニック禁止フラグの値=0リセット状態の場合:ダイアトニックスケールコードのトニックに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録するステップS84とともに、ダイアトニックスケールコード以外のトニックに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録するステップS85;トニック禁止フラグの値=1セット状態の場合:上記ステップS84の処理をスキップして、上記ステップS85の処理のみを行う;63b抽出した機能にサブドミナントがあり、かつサブドミナント禁止フラグの値=0の場合:ダイアトニックスケールコードのサブドミナントに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録するステップS88とともに、ダイアトニックスケールコード以外のサブドミナントに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録するステップS89;サブドミナント禁止フラグの値=1の場合:上記ステップS88の処理をスキップして、上記ステップS89の処理のみを行う;63c抽出した機能にドミナントがあり、かつドミナント禁止フラグの値=0の場合:ダイアトニックスケールコードのドミナントに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録する図9BのステップS92とともに、ダイアトニックスケールコード以外のドミナントに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録するステップS93;ドミナント禁止フラグの値=1の場合:上記ステップS92の処理をスキップして、上記ステップS93の処理のみを行う;63d抽出した機能にサブドミナントマイナがある場合:サブドミナントマイナに該当するディグリーネームの中で、調情報Keyに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストCListに登録するステップS95。なお、抽出した機能にトニック、サブドミナント、ドミナントまたはサブドミナントマイナがない場合には、それぞれ以下の63a~63dの各処理はなされない。また、ステップS84,S85,S88,S89,S92,S93およびS95における各コードネームの検出は、対応するディグリーネームを調情報Keyに基づいてコードネームに展開することによって行う。具体的には、この展開は、調情報の主音をI度としてディグリーネームの度数からルートを算出することによって行う。これにより、たとえば、ディグリーネームIIm7を調情報Fメジャによって展開すると、コードネームGm7が得られる。なお図3Aの対応表中、機能がS:サブドミナントのダイアトニックスケールコード以外に属するIVm7にはSが付けられている。このSは、IVm7をサブドミナントSとして扱うことを意味している。IVm7は、通常トニックTとして扱うが、本実施の形態ではサブドミナントSとしても扱うようにしている。したがって、前記ステップS81の処理によってサブドミナントSが抽出されたときに、調情報Keyがメジャ調であれば、IVm7も抽出される。ただしこの場合、サブドミナントSとともにトニックTも抽出されると、IVm7は、サブドミナントSに属するものと、トニックTに属するものの両方が抽出されることになる。このとき、本実施の形態ではトニックTに属するものを優先的に抽出するようにしているが、もちろんこれに限らず、サブドミナントSに属するものを優先的に抽出するようにしてもよい。そしてこの場合、抽出されたIVm7がサブドミナントSまたはトニックTのいずれに属するかを特定する情報を付けるようにした方が好ましい。図10は、前記ステップS46の追加コード候補抽出処理の詳細な手順を示すフローチャートである。本追加コード候補抽出処理が起動されると、まずCPU5は、調情報Keyを参照し、コードリストCListに登録されているコードデータのうち、ダイアトニックスケールコードのMaj7,6,add9,Maj,sus4に該当するコードデータであって、メジャ調のI度とマイナ調の♭III度を除いたものをメジャ系解決先コードとして抽出するステップS101。この結果、調情報Keyがメジャ調であれば、IVMaj7,IV6,IVadd9,IVの各コードが抽出され、調情報Keyがマイナ調であれば、♭VIMaj7,♭VI6,♭VIadd9,♭VIの各コードが抽出される。次にCPU5は、メジャ系セカンダリードミナントとそのツーファイブ候補の追加処理を実行するステップS102。この追加処理その詳細は図示せずでは、CPU5は、71前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてV7of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加メジャ系に解決するドミナント候補の追加;72上記71で追加した各コードデータの情報データ内の解決先コード情報として記憶されている解決先コードのルートに対してIIm7およびIIm7となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてIIm7/IIm7ofV7/V7sus4of解決先コードのルートの度数IIm7/IIm7は、IV/IVmの代理コードであるを、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加メジャ系に解決するツーファイブ候補の追加;73前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてV7sus4of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加メジャ系に解決するドミナント候補の追加;74前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報として♭II7of解決先コードのルートの度数♭II7は、V7の代理コードであるを、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加メジャ系に解決するセカンダリードミナント候補の追加;75上記74で追加した各コードデータのルートをV度とみなし、それらに対しIIm7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてIIm7of♭II7of解決先コードのルートの度数=解決先コードのルートの度数をI度とみなしたときの♭VIm7を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加メジャ系に解決するツーファイブ候補の追加;の各処理を実行する。たとえば、解決先コードがFMaj7である場合には、前記71の処理によってFMaj7に対するV7としてC7が、前記72の処理によってFMaj7に対するIIm7とIIm7としてGm7とGm7が、前記73の処理によってFMaj7に対するV7sus4としてC7sus4が、前記74の処理によってFMaj7に対する♭II7としてG♭7が、前記75の処理によってFMaj7に対して♭II7となるG♭7のG♭をV度とみなしたときのIIm7としてD♭m7が、それぞれ検出される。次にCPU5は、調情報Keyを参照し、コードリストCListに登録されているコードデータのうち、フラグ情報がなしであり、かつダイアトニックスケールコードのm7,m6,mMaj,madd9に該当するコードデータであって、マイナ調のI度とV度を除いたものをマイナ系解決先コードとして抽出するステップS103。この結果、調情報Keyがメジャ調であれば、IIm7,IIIm7,VIm7の各コードが抽出され、調情報Keyがマイナ調であれば、IIm7,IVm7,IVm6の各コードが抽出される。次にCPU5は、マイナ系セカンダリードミナントとそのツーファイブ候補の追加処理を実行するステップS104。この追加処理その詳細は図示せずでは、CPU5は、81前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてV7of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加マイナ系に解決するドミナント候補の追加;82上記81で追加した各コードデータの情報データ内の解決先コード情報として記憶されている解決先コードのルートに対してIIm7およびIIm7となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてIIm7/IIm7ofV7/V7sus4of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加マイナ系に解決するツーファイブ候補の追加;83前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてV7sus4of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加マイナ系に解決するドミナント候補の追加;84前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報として♭II7of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加マイナ系に解決するセカンダリードミナント候補の追加;85上記84で追加した各コードデータのルートをV度とみなし、それらに対しIIm7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてIIm7of♭II7of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加マイナ系に解決するツーファイブ候補の追加;の各処理を実行する。たとえば、解決先コードがDm7である場合には、前記81の処理によってDm7に対するV7としてA7が、前記82の処理によってDm7に対するIIm7とIIm7としてEm7とEm7が、前記83の処理によってDm7に対するV7sus4としてA7sus4が、前記84の処理によってDm7に対する♭II7としてE♭7が、前記85の処理によってDm7に対して♭II7となるE♭7のE♭をV度とみなしたときのIIm7としてB♭m7が、それぞれ検出される。次にCPU5は、調情報Keyを参照し、コードリストCListに登録されているコードデータのうち、フラグ情報がなしであり、かつダイアトニックスケールコードのドミナント7th系のコードデータをドミナント7th系解決先コードとして抽出するステップS105。この結果、調情報Keyがメジャ調であれば、V7,V7sus4の各コードが抽出され、調情報Keyがマイナ調であれば、V7,V7sus4,♭VII7,♭VII7sus4IV7の各コードが抽出される。次にCPU5は、ダブルドミナント候補の追加処理を実行するステップS106。この追加処理その詳細は図示せずでは、CPU5は、91前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてV7of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加;92前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報としてV7sus4of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加;93前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、解決先コード情報として解決先コードのルートを、ディグリー情報として♭II7of解決先コードのルートの度数を、フラグ情報として割り込みを記憶したものを生成し、コードリストCListに追加;の各処理を実行する。たとえば、解決先コードがG7である場合には、前記91の処理によってG7に対するV7としてD7が、前記92の処理によってG7に対するV7sus4としてD7sus4が、前記93の処理によってG7に対する♭II7としてA♭7が、それぞれ検出される。次にCPU5は、前記EPフラグのセット/リセット状態を判別しステップS107、セット状態であれば、エクステンデッドドミナント候補の追加処理を実行するステップS108とともに、EPフラグをリセットしたステップS109後、ステップS110に進む一方、リセット状態であれば、ステップS108およびS109をスキップしてステップS110に進む。エクステンデッドドミナント候補の追加処理その詳細は図示せずでは、CPU5は、101前回のディグリーネームLDNのルート音名の完全4度上の音名をルートに持つコードタイプが7コードと7sus4コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、フラグ情報としてエクステンデッドV7/V7sus4を記憶したものを生成し、コードリストCListに追加;102前回のディグリーネームLDNのルート音名の1半音下の音名をルートに持つ7コードを検出し、検出したコードに対応するコードネームおよびディグリーネームを含むコードデータであって、その情報データに、フラグ情報としてエクステンデッド♭II7を記憶したものを生成し、コードリストCListに追加;の各処理を実行する。前記ステップS110では、CPU5は、コードリストCListに登録されているコードデータのうち、コードネームディグリーネームが重複したものがあれば、その情報データ内のフラグ情報が割り込み、エクステンデッドV7またはエクステンデッド♭II7のいずれかであるコードデータをコードリストCListから削除する。図11A~図11Cは、前記図7のステップS53のコード進行形成用コード検出処理の詳細な手順を示すフローチャートである。本コード進行形成用コード検出処理では、CPU5は、スタートコードSChordの情報データ内のフラグ情報が割り込みのときに、前記割り込み型コード進行を形成するためのコードデータを検出しステップS121→S122、当該フラグ情報がエクステンデッドV7/V7sus4またはエクステンデッド♭II7のときに、前記エクステンデッド型コード進行を形成するためのコードデータを検出するステップS121→図11BのS153。割り込み型コード進行を形成するためのコードデータの検出処理以下、割り込み型コード進行形成用コード検出処理というでは、まずCPU5は、スタートコードSChordの次に進むコード候補であって、割り込み型コード進行となるもの以下、次の割り込み型コード候補というを抽出して、当該次の割り込み型コード候補に対応するコードデータをコードリストCListに登録するステップS122→S123。図12Aおよび図12Bは、次の割り込み型コード候補の抽出処理の詳細な手順を示すフローチャートである。本次の割り込み型コード候補の抽出処理では、CPU5は、次の処理を実行する。すなわち、111スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7が検出されている場合:111aスタートコードSChordのルート音名に対し完全4度上の音名をルートとする7コードのコードネームおよびディグリーネームを含むコードデータを生成して、コードリストCListに登録しステップS171→S172;111bスタートコードSChordのルート音名に対し完全4度上の音名をルートとする7sus4コードのコードネームおよびディグリーネームを含むコードデータを生成して、コードリストCListに登録しステップS173;111cスタートコードSChordのルート音名に♭を付けたルート音名を変えずに半音下げる音名のコードネームおよびディグリーネームを含むコードデータを生成して、コードリストCListに登録したステップS174後、本抽出処理を終了リターン;112スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のV7またはV7sus4が検出されている場合:112aスタートコードSChordのルート音名に対し完全4度上の音名をルートとするダイアトニックスケールコードを、調情報Keyに応じてすべて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS175→S176;112b上記112aの登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニックスケールコードとダイアトニックスケールコード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS177;112cスタートコードSChordの情報データ内の解決先コード情報のルートの度数がVI度であり、かつ調情報Keyがメジャ調であるときには、VIMaj7,IV6,IVadd9,IVに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS178;112dスタートコードSChordのルート音名に対し完全4度上の音名をルートとする7コードおよび7sus4コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、フラグ情報としてエクステンデッドV7/V7sus4を記憶したものを生成し、コードリストCListに登録しステップS179;112eスタートコードSChordのルート音名に対し半音下の音名をルートとする7コードのコードネームおよびディグリーネームを含むコードデータであって、情報データに、フラグ情報としてエクステンデッド♭II7を記憶したものを生成し、コードリストCListに登録したステップS180後、本抽出処理を終了リターン;113スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定の♭II7が検出されている場合:113aスタートコードSChordのルート音名に対し短2度下の音名をルートとするダイアトニックスケールコードを、調情報Keyに応じてすべて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS181→S182;113b上記113aの登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニックスケールコードとダイアトニックスケールコード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS183;113c前記112dの抽出処理と同様の処理を実行しステップS179;113d前記112eの抽出処理と同様の処理を実行したステップS180後、本抽出処理を終了リターン;114スタートコードSChordとして、V7/V7sus4コードへ解決する予定のV7/V7sus4が検出されている場合:114aスタートコードSChordのルート音名に対し完全4度上の音名をルートとする7コードおよびV7sus4V度のみコードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータを生成し、コードリストCListに登録し図12BのステップS184→S185;114b上記114aの登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニックスケールコードとダイアトニックスケールコード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS186;114cスタートコードSChordのルート音名と同じルートを持つm7IIm7ofV7コードおよびIIm7IIm7ofV7コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、情報データに、フラグ情報として寄り道を記憶したものを生成し、コードリストCListに登録したステップS187後、本抽出処理を終了リターン;115スタートコードSChordとして、V7/V7sus4コードへ解決する予定の♭II7が検出されている場合:115aスタートコードSChordのルート音名に対し短2度下の音名をルートとする7コードおよびV7sus4V度のみコードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータを生成し、コードリストCListに登録しステップS188→S189;115b上記115aの登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニックスケールコードとダイアトニックスケールコード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録しステップS190;115cスタートコードSChordのルート音名に対し短2度下の音名からさらに完全4度下の音名をルートに持つm7IIm7ofV7コードおよびIIm7IIm7ofV7コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、情報データに、フラグ情報として寄り道を記憶したものを生成し、コードリストCListに登録したステップS191後、本抽出処理を終了リターン;の各処理を実行する。なお、コードリストCListに登録するためにコードデータを生成する際に、フラグ情報について言及していないステップ、具体的には、ステップS172~S174,S176~S178,S182,S183では、コードデータにはフラグ情報は設定されないものとする。図11Aに戻り、次にCPU5は、スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7が検出されている場合には、スタートコードSChordの次の次に進むコード候補であって、割り込み型コード進行となるもの以下、次の次の割り込み型コード候補というを抽出して、当該次の次の割り込み型コード候補に対応するコードデータを前記次コードリストNCListに登録するステップS124→S125。次の次の割り込み型コード候補の抽出処理その詳細は図示せずでは、CPU5は、次の処理を実行する。すなわち、121スタートコードSChordの情報データ内の解決先コード情報から解決先コードを検出し検出したコードのルートの度数によっては、複数の異なるタイプのものがある。たとえば、抽出したコードのルートの度数がIV度の場合、解決先コードとしてはIVMaj7,IV,IV6,IVadd9が検出される、検出した各解決先コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、次コードリストNCListに登録し;122上記121の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニックスケールコードとダイアトニックスケールコード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、次コードリストNCListに登録し;123スタートコードSChordのルート音名に対し完全4度上の音名のさらに完全4度上の音名をルートとする7コードおよび7sus4コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、フラグ情報としてエクステンデッドV7/V7sus4を記憶したものを生成し、次コードリストNCListに登録し;124スタートコードSChordのルート音名に♭を付けた音名のさらに1半音下の音名をルートとする7コードのコードネームおよびディグリーネームを含むコードデータであって、情報データに、フラグ情報としてエクステンデッド♭II7を記憶したものを生成し、次コードリストNCListに登録;の各処理を実行する。次にCPU5は、前記ステップS47およびS48と同様にして、ノートイベントリストNListとコードリストCListに基づいて、コードデータを1つ選出しステップS126、選出したコードデータを検出コードChordに記憶するステップS127。そしてCPU5は、検出コードChordに応じて次の処理を実行する。すなわち、131検出コードChordが前記111aまたは111bの登録処理によってコードリストCListに登録されたものである場合:次コードリストNCListから、情報データ内のフラグ情報がエクステンデッド♭II7であるコードデータを削除したステップS128→S132後、ステップS131に移行;132検出コードChordが前記111cの登録処理によってコードリストCListに登録されたものである場合:次コードリストNCListから、情報データ内のフラグ情報がエクステンデッドV7/V7sus4であるコードデータを削除したステップS128→S129→S130後、ステップS131に移行;133上記131および132のいずれの場合にも該当しない場合:何もせずにステップS131に移行;のいずれかの処理を実行する。ステップS131では、CPU5は、コードリストCListを初期化クリアした後、次コードリストNCList内のすべてのコードデータをコードリストCListに記憶させる。そしてCPU5は、本コード進行形成用コード検出処理を終了させるリターン。上記131および132の削除処理では、検出コードChordの次に進むコードデータとして、つながりに無理のあるコード候補を削除するようにしている。次に本コード進行形成用コード検出処理が起動された場合、スタートコードSChordの情報データ内のフラグ情報は割り込みであり、かつコードリストCListには1つ以上のコードデータが登録されているので、処理はステップS144に進む。ステップS144では、検出コードChordの情報データ内のフラグ情報が寄り道であるかどうかを判別し、寄り道でなければ、CPU5は、前記ステップS126およびS127と同様にして、ノートイベントリストNListとコードリストCListに基づいて、コードデータを1つ選出しステップS150、選出したコードデータを検出コードChordに記憶するステップS151。そしてCPU5は、この検出コードChordの情報データ内のフラグ情報がなしであれば、割り込み型コード進行形成用コード検出処理を終了させるために、当該フラグ情報をEndに設定したステップS152→S149後、本コード進行形成用コード検出処理を終了するリターン一方、当該フラグ情報がなしでなければ、割り込み型コード進行形成用コード検出処理を継続させるために、何もせずに本コード進行形成用コード検出処理を終了するステップS152→リターン。一方、ステップS144の判別の結果、検出コードChordの情報データ内のフラグ情報が寄り道であれば、CPU5は、前記ステップS126およびS127と同様にして、ノートイベントリストNListとコードリストCListに基づいて、コードデータを1つ選出しステップS145、選出したコードデータを検出コードChordに記憶するステップS146。そしてCPU5は、この検出コードChordのコードタイプが7コードまたは7sus4コードに該当すれば、前記EPフラグをセットしステップS147→S148、検出コードChordの情報データ内のフラグ情報をEndに設定したステップS149後、本コード進行形成用コード検出処理を終了するリターン一方、この検出コードChordが7コードまたは7sus4コードに該当しなければ、ステップS148をスキップして、処理を前記ステップS149に進める。前記ステップS124で、スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7が検出されていない場合には、CPU5は、前記ステップS126およびS127と同様にして、ノートイベントリストNListとコードリストCListに基づいて、コードデータを1つ選出し図11CのステップS133、選出したコードデータを検出コードChordに記憶するステップS134。そしてCPU5は、次の処理を実行する。すなわち、141スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のV7またはV7sus4または♭II7が検出されている場合:141a検出コードChordの情報データ内のフラグ情報がなしの場合:検出コードChordの情報データ内のフラグ情報をEndに設定ステップS136→S137→S138;141b検出コードChordの情報データ内のフラグ情報がなしでない場合:本コード進行形成用コード検出処理を終了ステップS136→S137→リターン;142スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のV7またはV7sus4または♭II7が検出されていない場合:142a検出コードChordの情報データ内のフラグ情報がなしの場合:142a1検出コードChordが7コードまたは7sus4コードに該当する場合:EPフラグをセットしたステップS136→S139→S140→S141後、検出コードChordの情報データ内のフラグ情報をEndに設定ステップS138;142a2検出コードChordが7コードまたは7sus4コードに該当しない場合:検出コードChordの情報データ内のフラグ情報をEndに設定ステップS136→S139→S140→S138;142b検出コードChordの情報データ内のフラグ情報がなしでない場合:コードリストCListから、情報データ内のフラグ情報が寄り道であるコードデータを削除ステップS136→S139→S142;142b1コードリストCListが空の場合:検出コードChordの情報データ内のフラグ情報をEndに設定ステップS143→S138;142b2コードリストCListが空でない場合:本コード進行形成用コード検出処理を終了ステップS143→リターン;の各処理を実行する。処理が前記ステップS124から前記ステップS133に進む場合は、スタートコードSChordの次に進むコード、つまり検出コードChordとして検出されるものは、割り込み型コード進行の終点となるコードまたは寄り道となるコードまたはエクステンデッド型コード進行を形成するためのコードのいずれかである。そして、検出コードChordが割り込み型コード進行の終点となるコードの場合が、前記141aおよび142aの場合であり、検出コードChordが寄り道となるコードの場合が、前記142bの場合であり、検出コードChordがエクステンデッド型コード進行を形成するためのコードの場合が、前記141bの場合である。前記図11AのステップS121で、スタートコードSChordの情報データ内のフラグ情報がエクステンデッドV7/V7sus4またはエクステンデッド♭II7のときには、CPU5は、前述のようにエクステンデッド型コード進行を形成するためのコードデータを検出する。エクステンデッド型コード進行を形成するためのコードデータの検出処理以下、エクステンデッド型コード進行形成用コード検出処理というでは、まずCPU5は、スタートコードSChordの次に進むコード候補であって、エクステンデッド型コード進行となるもの以下、次のエクステンデッド型コード候補というを抽出して、当該次のエクステンデッド型コード候補に対応するコードデータをコードリストCListに登録する、次のエクステンデッド型コード候補の抽出処理を実行する図11BのステップS153。この次のエクステンデッド型コード候補の抽出処理その詳細は図示せずでは、CPU5は、151スタートコードSChordのルート音名の完全4度上の音名をルートに持つ7コードと7sus4コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、フラグ情報としてエクステンデッドV7/V7sus4を記憶したものを生成し、コードリストCListに追加ただし、コードリストCList中に、同じコードネームディグリーネームのコードデータが既に登録されていれば、追加登録しない;152スタートコードSChordのルート音名の1半音下の音名をルートに持つ7コードを検出し、検出したコードに対応するコードネームおよびディグリーネームを含むコードデータであって、その情報データに、フラグ情報としてエクステンデッド♭II7を記憶したものを生成し、コードリストCListに追加ただし、コードリストCList中に、同じコードネームディグリーネームのコードデータが既に登録されていれば、追加登録しない;の各処理を実行する。次にCPU5は、ステップS154において、161スタートコードSChordの情報データ内のフラグ情報がエクステンデッドV7/V7sus4の場合:スタートコードSChordのルート音名に対し完全4度上の音名をルートとするMaj7,6,add9,m7,m6,mMaj7,madd9のコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録;162スタートコードSChordの情報データ内のフラグ情報がエクステンデッド♭II7の場合:スタートコードSChordのルート音名に対し1半音下の音名をルートとするMaj7,6,add9,m7,m6,mMaj7,madd9のコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録;のいずれかの処理を実行する。次にCPU5は、ノートイベントリストNListとコードリストCListとさらに使用可能なすべてのコードに基づいて、コードデータを1つ選出しステップS155、選出したコードデータを検出コードChordに記憶するステップS156。ここで、使用可能なすべてのコードとは、すべての調のダイアトニックスケールの各構成音名を使用可能なディグリーネームの度数に代入して得られるすべてのコードを意味する。そしてCPU5は、検出コードChordの情報データ内のフラグ情報がなしかどうかを判別するステップS157。この判別では、検出コードChordがエクステンデッド型コード進行の終点となるコードかどうかを判別し、当該フラグ情報がなしでないとき、つまりエクステンデッドV7/V7sus4またはエクステンデッド♭II7のときには、エクステンデッド型コード進行形成用コード検出処理が続くので、エクステンデッドドミナントが続いて検出されることになる。上記ステップS157の判別の結果、当該フラグ情報がなしでないときには、CPU5は、本コード進行形成用コード検出処理を直ちに終了するステップS157→リターン一方、当該フラグ情報がなしのときには、CPU5は、次の処理を実行する。すなわち、171スタートコードSChordの情報データ内のフラグ情報がエクステンデッドV7/V7sus4の場合:171a検出コードChordはスタートコードSChordに対しルートが完全4度上の音名のMaj7/6/add9/m7/m6/mMaj7/madd9のいずれかのコードに該当する場合:171a1検出コードChordとその異名同音コードまで含めたコードネームの中で調情報Keyで扱うことができるコードネームがある場合:調情報Keyで扱うことができると判断されたコードネームとディグリーネームを含むコードデータを生成して、検出コードChordに記憶ステップS161;171a2検出コードChordとその異名同音コードまで含めたコードネームの中で調情報Keyで扱うことができるコードネームがない場合:転調と判断して、前記図7のステップS42と同様にして、新しい調情報を取得しステップS165、前記ステップS43と同様にして、取得した調情報を調情報Keyに記憶しステップS166、検出コードChordに含まれるコードネームとディグリーネームを調情報Keyに合わせた上で、検出コードChordに記憶ステップS167;171b検出コードChordはスタートコードSChordに対しルートが完全4度上の音名のMaj7/6/add9/m7/m6/mMaj7/madd9のいずれかのコードに該当しない場合:171b1検出コードChordは調情報Keyで扱うことができるコードである場合:上記171a1の処理に移行;171b2検出コードChordは調情報Keyで扱うことができるコードでない場合:上記171a2の処理に移行;172スタートコードSChordの情報データ内のフラグ情報がエクステンデッドV7/V7sus4でない場合:172a検出コードChordはスタートコードSChordに対しルートが1半音下の音名のMaj7/6/add9/m7/m6/mMaj7/madd9のいずれかのコードに該当する場合:上記171a1または171a2のいずれかの処理に移行;172b検出コードChordはスタートコードSChordに対しルートが1半音下の音名のMaj7/6/add9/m7/m6/mMaj7/madd9のいずれかのコードに該当しない場合:上記171b1または171b2のいずれかの処理に移行;のいずれかの処理を実行する。上記171a1,171a2,171b1および171b2の各処理における判別の際に使用する調情報Keyは、前記図7のステップS42およびS43で取得されて記憶されたものである。つまり、調情報Keyは基本的に、前記51通常コード検出処理で取得され、前記53非通常コード検出処理では取得されない。上記171a2の処理で調を取得しているのは、検出コードChordが調情報Keyで扱うことができず、転調と判断されるからである。次にCPU5は、検出コードChordの情報データ内のフラグ情報をEndに設定したステップS162後、本コード進行形成用コード検出処理を終了する。なお本実施の形態では、検出コードChordは、発音に用いられた前記図5BのステップS15参照後、通常コード検出フラグがセット状態であれば、調情報Keyとともに出力結果リストRListに追加登録されるステップS17参照が、通常コード検出フラグの状態に拘わらず、調情報Keyとともに出力結果リストRListに追加登録されるようにしてもよい。出力結果リストRListに追加登録される検出コードChordと調情報Keyの個数については言及していないが、本実施の形態では、出力結果リストRListの初期化は、前記図5AのステップS3でのみなされるので、自動伴奏がスタートした以降は、自動伴奏がストップしたときに、設定変更があった場合にのみなされる。つまり、出力結果リストRListの初期化は、自動伴奏を使った演奏処理が起動されている間、特別な場合を除いてなされないので、自動伴奏がスタートした以降に検出されたコードデータのほとんどは、登録されている。このようしたのは、説明を簡略化するために過ぎず、最新に検出されたコードデータを任意の所定個数、記憶するようにし、新たなコードデータが検出される度に更新するようにしてもよい。また、検出されたコードデータを登録する場合、本実施の形態では、検出コードChordをそのまま、調情報Keyと一緒に登録するようにしたが、これに限らず、コードネームのみを登録するようにしてもよいし、その時点での調情報と対応付けたディグリーネームを登録するようにしてもよい。さらに、コードネームとディグリーネームの両方、つまり図4のコードデータから情報データを除いたものを記憶するようにしてもよい。なお、検出したコードがコードネームしか登録されていない場合には、次回以降のコード検出時に参照する際には、その都度、調情報を用いてディグリーネームに展開するようにしてもよい。本実施の形態では、解決先コードとして抽出される条件として、ダイアトニックスケールコードであることを採用したが、ダイアトニックスケールコード以外のコードも解決先コードとして抽出されるようにしてもよい。その場合、解決先コードがさらに多様化し、さらに多様なコード進行が生成されることになる。また解決先コード情報は、本実施の形態では、調の主音に対する解決先コードの根音の度数とし、解決先コードを調から可能な限り全て割り出すようにしたが、これに限らず、解決先コードのディグリーネームを予め全て記憶するようにしておいてもよい。さらに、コードデータの情報データ内のディグリー情報を解決先コードの割り出しに使うようにしてもよい。ディグリー情報は、本実施の形態では、フラグ情報が割り込みのときのみ記憶されているが、コードデータを新規に生成する毎に適切な情報を記憶するようにしてもよい。解決先コード情報やディグリー情報は、本実施の形態では、コードデータ毎に持たせるようにしているが、リストで管理するなどして必要なときに参照する仕組みにしてもよい。入力される演奏データは、本実施の形態では、ユーザがリアルタイム演奏することで発生する演奏データを想定しているが、これに限らず、たとえば、録音された演奏データを先読みせずに順次再生したものを入力してもよい。また本実施の形態では、ユーザがリアルタイム演奏する際に利用する演奏操作子として、鍵盤を採用したが、これに限らず、たとえばギターなどの弦楽器タイプでもよい。入力される演奏データがオーディオ信号の場合、遅くとも各コード検出タイミングにおいて候補コードからコードを1つ選出するために演奏データを参照するまでに、少なくとも発音タイミング情報と音高情報を持つ音符情報に変換できていればよい。コード候補や次のコード候補の情報の持ち方は、本実施の形態で採用したフォーマットのものに限らない。また、コード候補の抽出方法やコード候補からの選出方法についての処理の順番やまとめ方も、本実施の形態で採用したものに限らない。通常コード検出時に抽出されるコード候補群のうち、解決先となり得るコード候補に解決するコード候補や、解決先となり得るコード候補への解決に至るまでに経過するコードに該当するコード候補には、本実施の形態では、フラグを立てて他のコード候補と識別できるようにしているが、これに限らず、たとえばリストを2種類用意するなど、別の方法で識別するようにしてもよい。本実施の形態では、通常コード検出においてフラグ付きのコード候補が検出された場合、独特なコード進行が始まるとみなし、次に続くコード検出タイミングからは独特なコード進行を生成するコード検出方法でコード検出を行うようにしている。独特なコード進行には、セカンダリードミナントからの解決やセカンダリードミナントのツーファイブ進行、さらにドミナント7thコードの連続などがある。コード進行の長さは、本実施の形態では、決まっていないが、制限するようにしてもよい。なお本実施の形態では、入力された演奏データに対して音楽的なつながりのあるコードを検出し、検出したコードに基づいて自動伴奏を行うようにしたが、これに限らず、検出したコードに基づいて、入力された演奏データに対するハーモニー音を生成するようにしてもよい。また本実施の形態では、参照対象の演奏データについて何の処理も施さず、入力されたものをそのまま使うようにしたが、これに限らず、入力された演奏データから装飾音やミスタッチと推測される音符データを取り除いた後、コード検出を行うようにすると、コード検出の精度がさらに向上する。さらに本実施の形態では、図3の各調におけるコードの機能とディグリーネームの対応表に記載のコードの種類は、たとえばROM6内に予め設定されて記憶されているが、任意に追加登録できるかどうかには言及していなかった。任意に追加登録できるようになっていた方が好ましいが、追加登録できないようになっていてもよい。また本実施の形態では、次の次のコード候補群を抽出するケースとして、解決予定先コードへのセカンダリードミナントとそのツーファイブの進行を例に挙げて説明したが、さらにその次のコード候補群を抽出するケースも考えられる。たとえば、上記進行にエクステンデッドドミナントを併用した進行、具体的には、E7エクステンデッドドミナント→A7V7ofII→Dm7解決先IIm7を抽出することも考えられる。このコード進行の場合、エクステンデッドドミナントE7とセカンダリードミナントA7をそれぞれツーファイブ化することができ、Bm7IIm7ofExtended→E7Extended→Em7IIm7ofSecondary→A7V7ofII→Dm7IIm7となる。エクステンデッドドミナントとそのツーファイブを考えて行くと、さらに続く候補群を前もって抽出することができる。なお、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータまたはCPUやMPUが記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。この場合、記憶媒体から読出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードおよび該プログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、たとえば、フレキシブルディスク、ハードディスク、光磁気ディスク、CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVDRW、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。また、通信ネットワークを介してサーバコンピュータからプログラムコードが供給されるようにしてもよい。また、コンピュータが読出したプログラムコードを実行することにより、上述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。"