(57)【特許請求の範囲】
【請求項１】
演奏データを入力する入力手段と、
演奏曲の調情報を取得する取得手段と、
コードの検出タイミングを検知する検知手段と、
前記検知手段によってコードの検出タイミングが検知されたときに、前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手段によって入力された演奏データに基づいてコードを１つ選出する第１の選出手段と、
前記第１の選出手段によって選出されたコードを含むコード進行の解決先となり得る解決先コードを抽出する抽出手段と、
前記抽出手段によって抽出された解決先コードに至るまでに前記検知手段によって検知される１乃至複数のコードの検出タイミングのそれぞれについて、前記取得された調情報に基づいて、前記選出されたコードに続くコード候補を複数抽出し、該抽出した複数のコード候補から１乃至複数のコード候補群を生成する生成手段と、
前記検知手段によってコードの検出タイミングが検知されたときには、前記生成手段によって生成されたコード候補群のうち、当該検出タイミングに対応するコード候補群から、前記入力された演奏データに基づいてコードを１つ選出する第２の選出手段と
を有することを特徴とするコード検出装置。
【請求項２】
前記生成手段によって複数のコード候補群が生成された場合において、前記第２の選出手段によって選出されたコードの次に進むコードとしてつながりに無理のあるコード候補が、当該選出されたコードの検出タイミングより後の検出タイミングに対応するコード候補群内にあるときに、当該無理のあるコード候補を削除する削除手段をさらに有することを特徴とする請求項１に記載のコード検出装置。
【請求項３】
前記生成手段がコード候補群を生成する際に、該コード候補群を構成する複数のコード候補の１つ前に寄り道可能なコード候補を１乃至複数抽出して当該コード候補群に追加する寄り道コード候補追加手段をさらに有することを特徴とする請求項１または２に記載のコード検出装置。
【請求項４】
前記第２の選出手段によって選出されたコードが前記解決先コードである場合にはさらに、当該選出されたコードがエクステンデッド・ドミナントの始点となり得るかどうかを判定し、その判定の結果、当該選出されたコードがエクステンデッド・ドミナントの始点となり得るときには、前記検知手段が次のコードの検出タイミングを検知したことに応じて、前記第１の選出手段が抽出する複数のコード候補に、エクステンデッド・ドミナントとなるコード候補も１乃至複数抽出して追加するエクステンデッド・ドミナント候補追加手段をさらに有することを特徴とする請求項１〜３のいずれかに記載のコード検出装置。
【請求項５】
前記第２の選出手段によって選出されたコードが前記解決先コードではなく、エクステンデッド・ドミナントのコードである場合には、前記生成手段は、当該コードの検出タイミングの次の検出タイミングに対応するコード候補群には、少なくとも、前記選出されたエクステンデッド・ドミナントのコードに続くエクステンデッド・ドミナントのコード候補１乃至複数と、当該選出されたコードが解決するコード候補１乃至複数を抽出して含ませることを特徴とする請求項４に記載のコード検出装置。
【請求項６】
演奏データを入力する入力手順と、
演奏曲の調情報を取得する取得手順と、
コードの検出タイミングを検知する検知手順と、
前記検知手順によってコードの検出タイミングが検知されたときに、前記取得手順によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手順によって入力された演奏データに基づいてコードを１つ選出する第１の選出手順と、
前記第１の選出手順によって選出されたコードを含むコード進行の解決先となり得る解決先コードを抽出する抽出手順と、
前記抽出手順によって抽出された解決先コードに至るまでに前記検知手順によって検知される１乃至複数のコードの検出タイミングのそれぞれについて、前記取得された調情報に基づいて、前記選出されたコードに続くコード候補を複数抽出し、該抽出した複数のコード候補から１乃至複数のコード候補群を生成する生成手順と、
前記検知手順によってコードの検出タイミングが検知されたときには、前記生成手順によって生成されたコード候補群のうち、当該検出タイミングに対応するコード候補群から、前記入力された演奏データに基づいてコードを１つ選出する第２の選出手順と
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力された演奏データに対して音楽的なつながりのあるコード（和音）を検出するコード検出装置およびコード検出方法を実現するためのプログラムに関する。
【背景技術】
【０００２】
入力された演奏データに対して音楽的なつながりのあるコードを検出するコード検出装置は、従来から知られている。
【０００３】
このようなコード検出装置として、音符のシーケンスを示す演奏データを入力して記憶した後、当該演奏データを所定の区間に分割し、予め多数のコード進行を記憶したコード進行データベースから、上記分割された所定区間の演奏データに適合するコード進行を抽出するようにしたものがある（たとえば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１４２４６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記従来のコード検出装置では、コード進行を抽出するために参照する演奏データは予め入力されたものであるので、演奏データ中の音符の流れをその前後あるいは広い範囲で見ることで、当該演奏データ（を構成する音符）と音楽的につながりのよいコード進行を抽出することができるものの、コード進行を抽出するための参照対象として、たとえばリアルタイム演奏によって入力中の演奏データを採用し、この入力中の演奏データと音楽的につながりのよいコード進行を抽出しようとすると、次に入力される演奏音がどの音か分からないため、前記コード進行データベースから抽出したコード進行が入力中の演奏データと適合しないことがある。
【０００６】
また、入力中の演奏データを参照して、コード進行データベースからいずれかのコード進行を抽出する場合、あるタイミングで検出したコード、つまり、あるタイミングで入力された演奏データから検出したコードから始まるコード進行をコード進行データベースから抽出することになるが、コードの出力タイミングが来る度に、このようにして抽出されたコード進行の（を形成する）コードを順次出力して行くことで、コードを検出する場合、検出されたコードは、コード進行としては成立するとしても、入力中の演奏データとは調和しないことがある。さらにこの場合、コード進行データベースに記憶されている、あるコードから始まるコード進行をそのまま使用することになるので、検出されたコードによって生成されるコード進行のパターンの種類が少なくなって、同じコード進行が出現し易くなり、その結果、ユーザが飽きてしまう可能性がある。
【０００７】
本発明は、この点に着目してなされたものであり、入力された演奏データ、特にリアルタイム入力された演奏データに対して音楽的なつながりのある、バラエティに富んだコードを検出することが可能となるコード検出装置およびコード検出方法を実現するためのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、請求項１に記載のコード検出装置は、演奏データを入力する入力手段と、演奏曲の調情報を取得する取得手段と、コードの検出タイミングを検知する検知手段と、前記検知手段によってコードの検出タイミングが検知されたときに、前記取得手段によって取得された調情報に基づいて複数のコード候補を抽出し、該抽出した複数のコード候補から、前記入力手段によって入力された演奏データに基づいてコードを１つ選出する第１の選出手段と、前記第１の選出手段によって選出されたコードを含むコード進行の解決先となり得る解決先コードを抽出する抽出手段と、前記抽出手段によって抽出された解決先コードに至るまでに前記検知手段によって検知される１乃至複数のコードの検出タイミングのそれぞれについて、前記取得された調情報に基づいて、前記選出されたコードに続くコード候補を複数抽出し、該抽出した複数のコード候補から１乃至複数のコード候補群を生成する生成手段と、前記検知手段によってコードの検出タイミングが検知されたときには、前記生成手段によって生成されたコード候補群のうち、当該検出タイミングに対応するコード候補群から、前記入力された演奏データに基づいてコードを１つ選出する第２の選出手段とを有することを特徴とする。
【０００９】
請求項２に記載のコード検出装置は、請求項１のコード検出装置において、前記生成手段によって複数のコード候補群が生成された場合において、前記第２の選出手段によって選出されたコードの次に進むコードとしてつながりに無理のあるコード候補が、当該選出されたコードの検出タイミングより後の検出タイミングに対応するコード候補群内にあるときに、当該無理のあるコード候補を削除する削除手段をさらに有することを特徴とする。
【００１０】
請求項３に記載のコード検出装置は、請求項１または２のコード検出装置において、前記生成手段がコード候補群を生成する際に、該コード候補群を構成する複数のコード候補の１つ前に寄り道可能なコード候補を１乃至複数抽出して当該コード候補群に追加する寄り道コード候補追加手段をさらに有することを特徴とする。
【００１１】
請求項４に記載のコード検出装置は、請求項１〜３のコード検出装置において、前記第２の選出手段によって選出されたコードが前記解決先コードである場合にはさらに、当該選出されたコードがエクステンデッド・ドミナントの始点となり得るかどうかを判定し、その判定の結果、当該選出されたコードがエクステンデッド・ドミナントの始点となり得るときには、前記検知手段が次のコードの検出タイミングを検知したことに応じて、前記第１の選出手段が抽出する複数のコード候補に、エクステンデッド・ドミナントとなるコード候補も１乃至複数抽出して追加するエクステンデッド・ドミナント候補追加手段をさらに有することを特徴とする。
【００１２】
請求項５に記載のコード検出装置は、請求項４のコード検出装置において、前記第２の選出手段によって選出されたコードが前記解決先コードではなく、エクステンデッド・ドミナントのコードである場合には、前記生成手段は、当該コードの検出タイミングの次の検出タイミングに対応するコード候補群には、少なくとも、前記選出されたエクステンデッド・ドミナントのコードに続くエクステンデッド・ドミナントのコード候補１乃至複数と、当該選出されたコードが解決するコード候補１乃至複数を抽出して含ませることを特徴とする。
【００１３】
上記目的を達成するため、請求項６に記載のプログラムは、請求項１と同様の技術的思想によって実現できる。
【発明の効果】
【００１４】
請求項１または６に記載の発明によれば、コードの検出タイミングが検知されると、取得された調情報に基づいて複数のコード候補が抽出され、該抽出された複数のコード候補から、入力された演奏データに基づいてコードが１つ選出され、該選出されたコードを含むコード進行の解決先となり得る解決先コードが抽出され、該抽出された解決先コードに至るまでに前記検知される１乃至複数のコードの検出タイミングのそれぞれについて、前記取得された調情報に基づいて、前記選出されたコードに続くコード候補が複数抽出され、該抽出された複数のコード候補から１乃至複数のコード候補群が生成され、コードの検出タイミングが検知されたときには、前記生成されたコード候補群のうち、当該検出タイミングに対応するコード候補群から、前記入力された演奏データに基づいてコードが１つ選出されるので、つまり、選出されたコードから解決先コードに至るまでの経過コードも選出（検出）されるので、バラエティに富んだコードを検出することが可能となる。そしてコードの検出は、入力された演奏データに基づいてなされているので、検出されたコードは、当該演奏データに対して音楽的なつながりのあるものとなる。
【００１５】
請求項２に記載の発明によれば、前記生成手段によって複数のコード候補群が生成された場合において、前記選出されたコードの次に進むコードとしてつながりに無理のあるコード候補が、当該選出されたコードの検出タイミングより後の検出タイミングに対応するコード候補群内にあるときに、当該無理のあるコード候補が削除されるので、当該選出されたコードに続くコードとして、つながりに無理のないコードを検出することができる。
【００１６】
請求項３に記載の発明によれば、コード候補群を構成する複数のコード候補の１つ前に寄り道可能なコード候補が１乃至複数抽出されて当該コード候補群に追加されるので、さらにバラエティに富んだコードを検出することが可能となる。
【００１７】
請求項４に記載の発明によれば、前記選出されたコードが前記解決先コードであり、かつエクステンデッド・ドミナントの始点となり得るものであるときには、エクステンデッド・ドミナントとなるコード候補も１乃至複数抽出されて追加されるので、さらにバラエティに富んだコードを検出することが可能となる。
【００１８】
請求項５に記載の発明によれば、前記選出されたコードが前記解決先コードではなく、エクステンデッド・ドミナントのコードである場合には、当該コードの検出タイミングの次の検出タイミングに対応するコード候補群には、少なくとも、前記選出されたエクステンデッド・ドミナントのコードに続くエクステンデッド・ドミナントのコード候補１乃至複数と、当該選出されたコードが解決するコード候補１乃至複数が抽出されて含まれるので、さらにバラエティに富んだコードを検出することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の一実施の形態に係るコード検出装置を適用した電子楽器の概略構成を示すブロック図である。
【図２】コード検出タイミングの設定例を示す図である。
【図３Ａ】メジャ調におけるコードの機能とディグリーネームの対応表の一例を示す図である。
【図３Ｂ】マイナ調におけるコードの機能とディグリーネームの対応表の一例を示す図である。
【図４】コードデータのデータフォーマットの一例を示す図である。
【図５Ａ】図１の電子楽器、特にＣＰＵが実行する、自動伴奏を使った演奏処理の手順を示すフローチャートである。
【図５Ｂ】図５Ａの自動伴奏を使った演奏処理の続きの手順を示すフローチャートである。
【図６】図５Ａ中のノートイベント処理の詳細な手順を示すフローチャートである。
【図７】図５Ｂ中のコード検出処理の詳細な手順を示すフローチャートである。
【図８Ａ】図７中の基本コード候補抽出処理の詳細な手順を示すフローチャートである。
【図８Ｂ】図８Ａの基本コード候補抽出処理の続きの手順を示すフローチャートである。
【図９Ａ】図８Ｂ中の次に進むことのできる機能を持つディグリーネーム候補の抽出処理の詳細な手順を示すフローチャートである。
【図９Ｂ】図９Ａの抽出処理の続きの手順を示すフローチャートである。
【図１０】図７中の追加コード候補抽出処理の詳細な手順を示すフローチャートである。
【図１１Ａ】図７中のコード進行形成用コード検出処理の詳細な手順を示すフローチャートである。
【図１１Ｂ】図１１Ａのコード進行形成用コード検出処理の続きの手順を示すフローチャートである。
【図１１Ｃ】図１１Ａのコード進行形成用コード検出処理の続きの手順を示すフローチャートである。
【図１２Ａ】図１１Ａ中の割り込み型の次に進むコード候補の抽出処理の詳細な手順を示すフローチャートである。
【図１２Ｂ】図１２Ａの抽出処理の続きの手順を示すフローチャートである。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００２１】
図１は、本発明の一実施の形態に係るコード検出装置を適用した電子楽器の概略構成を示すブロック図である。
【００２２】
同図に示すように、本実施の形態の電子楽器は、ユーザの演奏操作に応じて音高情報を含む演奏データを入力する鍵盤を含む演奏操作子１と、各種情報を入力するための複数のスイッチやロータリエンコーダを含む設定操作子２と、演奏操作子１の操作状態を検出する検出回路３と、設定操作子２の操作状態を検出する検出回路４と、装置全体の制御を司るＣＰＵ５と、該ＣＰＵ５が実行する制御プログラムや各種テーブルデータ等を記憶するＲＯＭ６と、演奏データ、各種入力情報および演算結果等を一時的に記憶するＲＡＭ７と、タイマ割込み処理における割込み時間や各種時間を計時するタイマ８と、後述するようにＣＰＵ５が供給するコード情報に基づいて演奏データ（伴奏音を発生させるためのもの）を生成する自動伴奏装置９と、各種情報等を表示する、たとえばＬＣＤ（liquid crystal display）およびＬＥＤ（light emitting diode）等を備えた表示装置１０と、前記制御プログラムを含む各種アプリケーションプログラムや各種楽曲データ、各種データ等を記憶する記憶装置１１と、外部ＭＩＤＩ（musical instrument digital interface）機器等の外部機器１００を接続し、この外部機器１００とデータの送受信を行う通信インターフェース（Ｉ／Ｆ）１２と、演奏操作子１から入力された演奏データや、前記自動伴奏装置９によって生成された演奏データ等を楽音信号に変換する音源回路１３と、該音源回路１３からの楽音信号に各種効果を付与するための効果回路１４と、該効果回路１４からの楽音信号を音響に変換する、たとえば、ＤＡＣ（digital-to-analog converter）やアンプ、スピーカ等のサウンドシステム１５とにより構成されている。
【００２３】
上記構成要素３〜１４は、バス１６を介して相互に接続され、ＣＰＵ５および自動伴奏装置９にはタイマ８が接続され、通信Ｉ／Ｆ１２には外部機器１００が接続され、音源回路１３には効果回路１４が接続され、効果回路１４にはサウンドシステム１５が接続されている。
【００２４】
自動伴奏装置９は、たとえば、ＲＯＭ６に予め記憶されたシーケンサソフトウェアをＣＰＵ５に実行させることによって実現され、前述のように、供給されたコード情報に基づいて演奏データを生成し、生成した演奏データを音源回路１３に供給することで、伴奏音を発生させる。また、自動伴奏装置９は、たとえば、ＲＯＭ６に予め記憶された各種伴奏スタイルデータからユーザが選択したいずれかの伴奏スタイルデータを再生して、演奏データを生成する機能も備えている。この機能を営むときに、自動伴奏装置９は、タイマ８から供給される時間情報に基づいて伴奏スタイルデータを再生する。なお、本発明の特徴は、自動伴奏装置９の構成や作用にある訳ではないので、自動伴奏装置９の構成や作用についてのこれ以上の説明は行わない。
【００２５】
記憶装置１１は、たとえば、フレキシブルディスク（ＦＤ）、ハードディスク（ＨＤ）、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disc）、光磁気ディスク（ＭＯ）および半導体メモリなどの記憶媒体とその駆動装置である。記憶媒体は駆動装置から着脱可能であってもよいし、記憶装置１１自体が本実施の形態の電子楽器から着脱可能であってもよい。あるいは、記憶媒体も記憶装置１１も着脱不可能であってもよい。なお記憶装置１１（の記憶媒体）には、前述のように、ＣＰＵ５が実行する制御プログラムも記憶でき、ＲＯＭ６に制御プログラムが記憶されていない場合には、この記憶装置１１に制御プログラムを記憶させておき、それをＲＡＭ７に読み込むことにより、ＲＯＭ６に制御プログラムを記憶している場合と同様の動作をＣＰＵ５にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。
【００２６】
通信Ｉ／Ｆ１２には、図示例では外部機器１００が接続されているが、これに限られず、たとえばＬＡＮ（local area network）やインターネット、電話回線等の通信ネットワークを介して、サーバコンピュータが接続されるようにしてもよい。この場合、記憶装置１１に上記各プログラムや各種パラメータが記憶されていなければ、通信Ｉ／Ｆ１２はサーバコンピュータからプログラムやパラメータをダウンロードするために用いられる。クライアントとなる電子楽器は、通信Ｉ／Ｆ１２および通信ネットワークを介してサーバコンピュータへとプログラムやパラメータのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求されたプログラムやパラメータを、通信ネットワークを介して電子楽器へと配信し、電子楽器が通信Ｉ／Ｆ１２を介して、これらプログラムやパラメータを受信して記憶装置１１に蓄積することにより、ダウンロードが完了する。
【００２７】
なお、本実施の形態の電子楽器は、上述の構成から分かるように電子鍵盤楽器上に構築されたものであるが、これに限らず、鍵盤を外部接続した汎用的なパーソナルコンピュータ上に構築してもよい。
【００２８】
以上のように構成された電子楽器が実行する制御処理を、まず図２〜図４を参照してその概要を説明し、次に図５〜図１０を参照して詳細に説明する。
【００２９】
図２は、コード検出タイミングの設定例を示す図であり、同図には、演奏曲として４／４拍子の曲を選択し、１拍目と３拍目をコード検出基準位置に設定し、そのコード検出基準位置の２５０ｍｓ前から５０ｍｓ後までの期間をコード検出タイミングに設定する例が示されている。なお図示例では、１拍目にはコード検出タイミングが描かれていないが、これは、どちらか一方の拍位置にコード検出タイミングを描いておけば、他方の拍位置にも同様にコード検出タイミングが設定されていることが容易に分かるからである。また、詳細は後述するが、コード検出タイミングをどの位置にどれくらいの時間幅で、どれくらいの個数（あるいは、どれくらいの頻度で）設定するかは、ユーザが自由に選択できるようになっている。
【００３０】
本実施の形態の電子楽器は、ユーザが前記鍵盤を用いて演奏することで、リアルタイム入力された演奏データをそのまま前記音源回路１３に供給して発音するとともに、リアルタイム入力された演奏データに対して音楽的なつながりのあるコードを検出して前記自動伴奏装置９に供給することにより、伴奏音も発音するようにしている。前記コード検出タイミングの期間（時間幅）は、コードを検出するために参照する演奏データを入力する期間である。つまり、コード検出タイミングの期間内に入力された演奏データのみが、伴奏音を発音するためのコードを検出する際に参照される。コードの検出は、まず、
（Ａ）基本コード候補抽出処理
（Ｂ）追加コード候補抽出処理
の２種類の抽出処理によって、検出候補となるコード候補を抽出する。
【００３１】
上記（Ａ）の抽出処理では、図３Ａ（メジャ調の場合）および図３Ｂ（マイナ調の場合）のコードの機能とディグリーネームの対応表のうち、現在の調に対応する方を参照し、前回検出されたコードの機能から次に進むことのできる機能をすべて抽出する。そして、同対応表を参照して、抽出した機能を持つディグリーネームをダイアトニック・スケール・コードに属するものも、ダイアトニック・スケール・コード以外に属するものもすべて抽出する。さらに、抽出した各ディグリーネームにそれぞれ対応するコードネームを現在の調に基づいて検出し、検出した各コードネームと、該各コードネームにそれぞれ対応するディグリーネームとを含むコードデータを生成して、前記ＲＡＭ７に確保したコードリストＣＬｉｓｔ（図示せず）に登録する。ただし、所定の条件が満たされた場合、ダイアトニック・スケール・コードに属するものを抽出しないことがあるが、ここでは、これ以上説明しない。
【００３２】
図４は、コードデータのデータフォーマットの一例を示す図であり、図示例では、コードデータは、コードネーム、ディグリーネームおよび情報データによって構成され、情報データは、解決先コード情報、このコード（解決先コード）に至るまでのディグリー情報（以下、「ディグリー情報」と略して言う）およびフラグ情報によって構成されている。ただし、情報データは常に、上記３種類の情報によって構成されることを意味しない。つまり、コードデータによっては、解決先コード情報はあるが、フラグ情報がないもの、解決先コード情報はないが、フラグ情報があるもの、解決先コード情報およびフラグ情報共にないものがある。しかし、解決先コード情報がある場合には、ディグリー情報も常にあり、解決先コード情報がない場合には、ディグリー情報も常にない。上記（Ａ）の抽出処理によってコードリストＣＬｉｓｔに登録されるコードデータはいずれも、情報データを含んでいない。なお、解決先コード情報、ディグリー情報およびフラグ情報の意味内容については、次の上記（Ｂ）の抽出処理の説明の中で説明する。
【００３３】
上記（Ｂ）の抽出処理は、
（Ｂ１）割り込み型コード進行を形成するためのコード候補の抽出処理
（Ｂ２）エクステンデッド型コード進行を形成するためのコード候補の抽出処理
によって構成されている。そして、上記割り込み型コード進行とは、本実施の形態では、
（Ｂ１ａ）メジャ系セカンダリードミナント／ツーファイブ → ダイアトニック・スケール・コードのうちの所定のコード（メジャ系解決先コード）
（Ｂ１ｂ）マイナ系セカンダリードミナント／ツーファイブ → ダイアトニック・スケール・コードのうちの所定のコード（マイナ系解決先コード）
（Ｂ１ｃ）ダブルドミナント → ダイアトニック・スケール・コードのうちのドミナント7th系のコード（ドミナント7th系解決先コード）
であり、上記エクステンデッド型コード進行とは、本実施の形態では、
（Ｂ２ａ）エクステンデッド・ドミナント → ダイアトニック・スケール・コード
（Ｂ２ｂ）エクステンデッド・ドミナント → エクステンデッド・ドミナント →ダイアトニック・スケール・コード
である。
【００３４】
上記（Ｂ１）の抽出処理では、まず、前記（Ａ）の抽出処理によってコードリストＣＬｉｓｔに登録されたコードデータから、上記（Ｂ１ａ）のメジャ系解決先コードとなるもの、上記（Ｂ１ｂ）のマイナ系解決先コードとなるもの、および、上記（Ｂ１ｃ）のドミナント7th系解決先コードとなるものをそれぞれ抽出する。ここで、解決先コードとは、安定的なコード進行、つまり上記（Ａ）の抽出処理によって抽出されるコードデータを繋げて行くことによって形成される、骨格となるコード進行（以下、「骨格コード進行」という）に異質なコード進行（つまり、上記割り込み型コード進行）を割り込ませた場合に、この異質なコード進行に調和しながら再度安定化させるコードをいう。
【００３５】
次に、抽出された各解決先コードにそれぞれ進行する割り込み型コード進行の始点となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに「解決先コード情報」、「ディグリー情報」および「フラグ情報」を記憶したものを生成し、コードリストＣＬｉｓｔに追加する。ここで、「解決先コード情報」とは、当該コードデータに対する解決先コードの情報であり、「解決先コード情報」には、本実施の形態では「解決先コードのルートの度数」が記憶される。「ディグリー情報」とは、解決先コードに至るまでのディグリーネームの推移（コード進行）を示す情報であり、「ディグリー情報」には、本実施の形態では「第１のディグリーネーム of 第２のディグリーネーム of 解決先コードのルートの度数」（ただし、「第２のディグリーネーム」がない場合もある）が記憶される。「フラグ情報」とは、当該コードデータの種類を示すものであり、「フラグ情報」には、割り込み型コード進行を形成するためのコードであることを示す「割り込み」が記憶される。
【００３６】
前記（Ｂ２）の抽出処理では、前記エクステンデッド型コード進行の始点となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに「フラグ情報」を記憶したものを生成し、コードリストＣＬｉｓｔに追加する。このとき「フラグ情報」には、検出したコードの種類に応じて、「エクステンデッドV7／V7sus4」または「エクステンデッド♭II7」のいずれかが記憶される。
【００３７】
なお、（Ｂ）の抽出処理が実行されると、（Ｂ１）の抽出処理は常に実行されるが、（Ｂ２）の抽出処理は、所定の条件が満たされた場合（後述するＥＰ（extended plus）フラグがセット状態の場合）に実行される。どの場合にＥＰフラグをセット／リセットするかについては、制御処理の詳細で後述する。
【００３８】
このようにしてコードリストＣＬｉｓｔに登録されたコードデータの中から、入力された演奏データに基づいてコードデータを１つ選出し、選出したコードデータを前記ＲＡＭ７に確保した検出コードＣｈｏｒｄ（図示せず）に記憶する。
【００３９】
検出コードＣｈｏｒｄが、前記（Ａ）の抽出処理によって抽出された基本コードであれば、次のコード検出タイミングでも、（Ａ）および（Ｂ）の抽出処理が実行されるが、検出コードＣｈｏｒｄが、前記（Ｂ）の抽出処理によって抽出された追加コードであれば、次のコード検出タイミングでは、
（Ｃ）コード進行形成用コード検出処理
が実行される。
【００４０】
この（Ｃ）コード進行形成用コード検出処理では、ＲＡＭ７に確保したスタートコードＳＣｈｏｒｄ（図示せず）に記憶されている前回検出されたコードデータを始点とし、当該コードデータの種類（当該コードデータの情報データ内のフラグ情報が「割り込み」か「エクステンデッドV7／V7sus4」あるいは「エクステンデッド♭II7」か）に応じて、割り込み型コード進行またはエクステンデッド型コード進行のいずれか一方を形成するためのコードデータを１つ選出し、選出したコードデータを検出コードＣｈｏｒｄに記憶する。
【００４１】
この（Ｃ）コード進行形成用コード検出処理は、その後、割り込み型コード進行またはエクステンデッド型コード進行の終点となるコードデータが検出されるまで継続して実行され、当該終点となるコードデータが検出されると、検出コードＣｈｏｒｄの情報データ内のフラグ情報が「Ｅｎｄ」に設定される。これにより、次のコード検出タイミングでは、再度（Ａ）および（Ｂ）の抽出処理が実行されるようになる。
【００４２】
なお、割り込み型コード進行を形成するためのコードデータの検出中には、「寄り道」となるコードデータ（情報データ内のフラグ情報に「寄り道」が記憶されたもの）も検出可能に構成されている。
【００４３】
また、各コード検出タイミングで検出された検出コードＣｈｏｒｄは、自動伴奏装置９に出力されて発音される。
【００４４】
前記（Ａ）および（Ｂ）の抽出処理または前記（Ｃ）の検出処理を開始してから１つのコードを選出して自動伴奏装置９に出力するまでのコード検出処理（後述する「制御処理の詳細」では、「（５）コードの検出タイミング時処理」に相当する）は、図２の例では、１拍目と３拍目に実行されるが、より厳密には、当該各拍のコード検出タイミングの期間の末尾、つまり時間Ｔ３に実行の開始が指示される。これは、コード検出処理で参照する演奏データの検出期間をコード検出タイミングの全期間、つまり期間Ｔ１〜Ｔ３としているからである。
【００４５】
このように本実施の形態の電子楽器では、次に進行するコードとして、音楽的なつながりのあるコード候補を抽出し、抽出したコード候補の中から、リアルタイム入力された演奏データと調和するコードを検出するようにしたので、リアルタイム演奏に対して音楽的なつながりのあるコードを検出することができる。そして、検出されたコードは常に、リアルタイム入力された演奏データと調和している。
【００４６】
調性音楽で使用される全コード進行には、トニックからドミナントなどの機能的進行とクリシェなどの非機能的進行に分類される骨格コード進行以外に、骨格コード進行に割り込むコード進行（たとえば、セカンダリードミナントやそのツーファイブ、エクステンデッド・ドミナント）がある。この骨格に割り込む形のコード進行は、ある時点のコードに対して次に進むことができるコードという観点では候補を挙げることができない。その理由は、ある解決先コードに至るまでに経過するコードが割り込む形になるからである。本実施の形態では、骨格コード進行を形成するためのコード候補を複数抽出しているときに、その複数のコード候補から解決先コードとなり得るものを抽出し、抽出した各解決先コードに解決するコード候補および当該各解決先コードに解決するまでに経過するコード候補を検出して、コード候補に追加するようにしたので、調性音楽で使用される全コード進行のうち、骨格コード進行に割り込む形のコード進行となるコード候補の追加およびコードの検出が可能になる。
【００４７】
あるコード検出タイミングで抽出されたコード候補のいずれかに解決するコード（候補）が検出された場合、その次のコード検出タイミングでは、直前のコード検出タイミングで検出されたコードが解決するコードかその代理コードが検出される可能性が極めて高い。本実施の形態では、検出される可能性が極めて高いコード候補を余さず挙げるようにしたので、コード進行データベースを用いる従来の方法より柔軟でバラエティに富んだコード進行を生成することができる。また本実施の形態では、解決先のコード検出に至るまでに複数のコードを経過する可能性を持たせているので、一層バラエティに富んだコード進行を生成することができる。
【００４８】
さらに本実施の形態では、セカンダリードミナントからの解決やツーファイブ進行、さらにそこからのドミナント7thコードの連続など、演奏途中に現れ、どこまで続くか定まらないようなコード進行を検出することができる。
【００４９】
また本実施の形態では、骨格コード進行を形成するためのコードデータの検出処理と、骨格コード進行に割り込む形のコード進行を形成するためのコードデータの検出処理とを独立に行うようにしているので、骨格コード進行に割り込む形のコード進行の始まりになるコードが検出されると、後者の検出処理でのみコードデータの検出を行うことで、その後に当該割り込む形のコード進行が続くようにコードデータの検出を制御することが可能となる。これにより、入力された演奏データが同じであっても、どちらの検出処理を用いてコードデータの検出を行ったかに応じて、検出されるコードデータが変わる可能性がある。その結果、音楽的なつながりを考慮しつつ、単調でないコード進行を得ることができる。
【００５０】
さらに上記両検出処理は、演奏の流れに応じて自動的にいずれかの検出処理に切り替えられるので、ユーザはコードを検出させるために意識した演奏をしなくてもよく、自由な演奏に専念することができる。
【００５１】
また本実施の形態では、エクステンデッド・ドミナント（V7/V7sus4の連続／♭II7の連続）に進む可能性も考慮され、さらに、骨格に割り込むコード進行内で次に進む可能性のあるコードの１つ前に寄り道するかもしれないコード候補も抽出されるようになっている。これにより、骨格コード進行に割り込む形のコード進行が発生した際に、その後起こる可能性のあるより多くのコード進行に対応することができるようになっている。
【００５２】
次に、この制御処理を詳細に説明する。
【００５３】
図５Ａおよび図５Ｂは、本実施の形態の電子楽器、特にＣＰＵ５が実行する、自動伴奏を使った演奏処理の手順を示すフローチャートである。本実施の形態の電子楽器では、ユーザが演奏操作子１を用いてリアルタイム演奏する際の演奏モードとして、自動伴奏装置９を作動させずに、演奏操作子１を用いて入力された演奏データに応じた楽音を発音させる第１の演奏モードと、自動伴奏装置９を作動させて、演奏操作子１を用いて入力された演奏データに応じた楽音とともに、自動伴奏装置９によって生成された演奏データに応じた楽音（伴奏音）も発音させる第２の演奏モードの２種類の演奏モードを備えている。通常の演奏モード、つまり、本実施の形態の電子楽器の電源をオンしたときに最初に選択される演奏モードは、第１の演奏モードであるので、第２の演奏モードに移行するには、ユーザによる所定の移行指示が必要となる。上記「自動伴奏を使った演奏処理」は、この移行指示がなされたときに起動される処理である。なお本実施の形態では、本発明の特徴を「自動伴奏を使った演奏処理」内にすべて盛り込み、この「自動伴奏を使った演奏処理」を用いて本発明の特徴を説明するようにしたので、「自動伴奏を使わない演奏処理」についての説明は行わない。したがって、以下「自動伴奏を使った演奏処理」を「演奏処理」と略して言う。ただし、本発明の特徴を「自動伴奏を使わない演奏処理」内にすべて盛り込み、この「自動伴奏を使わない演奏処理」を用いて本発明の特徴を説明することもできる（この場合には、伴奏音は発生しない）ので、「自動伴奏を使った演奏処理」を用いて本発明の特徴を説明したのは、便宜上のことに過ぎない。
【００５４】
本演奏処理は、主として、
（１）起動時処理（ステップＳ１〜Ｓ４）
（２）自動伴奏のスタート時処理（ステップＳ７）
（３）自動伴奏のストップ時処理（ステップＳ９）
（４）ノートイベント処理（ステップＳ１２）
（５）コードの検出タイミング時処理（図５ＢのステップＳ１４〜Ｓ１９）
によって構成されている。
【００５５】
本演奏処理が起動されると、前記（１）の起動時処理が１回実行された後、自動伴奏のスタート指示があるまで待機状態となり（ステップＳ６→Ｓ５→Ｓ６）、自動伴奏のスタート指示があると、前記（２）の自動伴奏のスタート時処理が実行され、これに続いて、前記（４）および（５）の各処理が適宜実行される。そして（４）および（５）の各処理は、自動伴奏のストップ指示があるまで（ステップＳ８）、あるいは第１の演奏モードに戻る指示があるまで（ステップＳ５）、適宜繰り返し実行される。なお、自動伴奏のストップ指示があると、前記（３）の自動伴奏のストップ時処理が実行された後、伴奏スタイルなどの設定変更があったかどうか判定され（ステップＳ１０）、設定変更があったときには、前記（１）の起動時処理に戻る一方、設定変更がなかったときには、前記待機状態に戻る。また、第１の演奏モードに戻る指示があると、本演奏処理は終了する（ステップＳ５→終了）。
【００５６】
前記（１）の起動時処理は、
（１１）演奏開始前の設定処理（ステップＳ１）
（１２）コード検出タイミングおよび各種ルールの設定処理（ステップＳ２）
（１３）初期化処理（ステップＳ３）
（１４）コード検出タイミングの始点および終点の算出設定処理（ステップＳ４）
によって構成されている。
【００５７】
この（１）起動時処理に処理が進むと、まずＣＰＵ５は、前記（１１）の演奏開始前の設定処理を実行する。この（１１）演奏開始前の設定処理では、ＣＰＵ５は、演奏テンポ、拍子、伴奏スタイル、ボリューム値および演奏音色などの各項目の設定を行う。各項目は、ユーザに設定すべき値あるいは種類を問い合わせ、これに応じてユーザが入力あるいは選択した値あるいは種類を設定するようにしてもよいし、デフォルト設定されたもの、あるいは前回設定されたものをそのまま、あるいは一部変更して設定するようにしてもよい。
【００５８】
次にＣＰＵ５は、処理を前記（１２）のコード検出タイミングおよび各種ルールの設定処理に進める。この（１２）コード検出タイミングおよび各種ルールの設定処理では、ＣＰＵ５は、コード検出タイミングの設定ルールと、それ以外の各種ルールを設定する。
【００５９】
コード検出タイミングの設定ルールとは、具体的には、コードを検出するタイミングとして、時間幅を設けるのか、あるいは時間幅を設けずに時点とするのか、また、時間幅を設けるのであれば、どの時点を基準位置として、その前後にどのくらいの時間幅を設けるのか、あるいは時点とするのであれば、どの時点とするのかということである。時間幅を設ける例としては、前記図２で示したように、２拍毎に（４／４拍子が選択された場合には、たとえば１拍目と３拍目）拍位置をコード検出基準位置として、２５０ｍｓ前から５０ｍｓ後までの期間とすることが挙げられる。図示例では、時間幅を設定する単位として“ｍｓ”を採用したが、もちろんこれに限らず、音符長であってもよい。また、コード検出基準位置は２拍毎の拍位置に限らず、１拍毎の拍位置であってもよいし、テンポが変化したときに、たとえば２拍毎から１拍毎に変動するようにしてもよいし、拍に限らず、小節毎の所定位置（たとえば、先頭位置）であってもよい。さらに、コード検出基準位置をどこに設定するかは、テンポ値や伴奏スタイルによって決まっていてもよい。一方、時点の例としては、時間幅を設ける場合で例示した各種コード検出基準位置、つまり、所定拍毎の拍位置や小節毎の所定位置、あるいは、ユーザが、たとえば前記設定操作子２に含まれる所定の操作子を操作した時点や、所定の拍内で、ユーザが所定の操作子を操作した時点などが考えられる。なお本実施の形態では、コード検出タイミングの設定ルールとして、前記図２の例で示したルールが選択設定されているものとする。
【００６０】
各種ルールとしては、（Ｒ１）調情報の検出ルールや（Ｒ２）コードの選出ルールなどを挙げることができる。
【００６１】
上記（Ｒ１）の調情報の検出ルールとしては、たとえば、演奏前にユーザに調情報を問い合わせ、これに応じてユーザが入力した調情報を検出（取得）するというルールや、ユーザの演奏操作に応じて入力された演奏データを解析して、随時調情報を検出するというルールなどが考えられる。なお本実施の形態では、調情報は、主音名＋メジャ／マイナによって表現したものを入力あるいは検出するものとする。また、演奏データを解析して調情報を検出する方法は、公知のものを用いればよい。そして、調情報を随時検出する方法を採用した場合には、コードが選出される度に（後述する図７のステップＳ４７等を参照）、そのとき検出された調情報を当該選出されたコードに対応付けて記憶しておくとよい。
【００６２】
前記（Ｒ２）のコードの選出ルールとしては、たとえば、
（Ｒ２ａ）各コードに予め優先順位を付けておき（たとえば、ダイアトニック・スケール・コードのトニックコードを上位にするなど）、候補コードのうち、最上位のコードを選出するというルール
（Ｒ２ｂ）参照対象の演奏データの全ての音名と候補コードの各コードの構成音との一致度合い（完全一致、３音以上が一致、２音が一致など）が最も高いコードを選出するというルール
などを挙げることができる。また、候補コードの各コードの根音が参照対象の演奏データに含まれることを追加条件にしてもよい。
【００６３】
また、（１２）コード検出タイミングおよび各種ルールの設定処理では、メジャ調でのドミナント（Ｄ）→サブドミナント・マイナ（ＳＭ）進行（インターラプテッド・ケーデンス）を通常時も許可するかどうかも設定できるようになっている。ここで、「通常時も許可」とは、前記（Ａ）の基本コード候補抽出処理時でも、メジャ調においてインターラプテッド・ケーデンスとなるコード進行（を形成するコード機能を有するディグリーネーム）の抽出を許可することを意味する。そして、「通常時も許可」が設定された場合には、前記図３Ａのメジャ調におけるコードの機能とディグリーネームの対応表中、機能が「Ｄ：ドミナント」である「次に進む事の出来る機能」に“ＳＭ”が追加されて、「次に進む事の出来る機能」は“Ｔ”，“Ｄ”および“ＳＭ”の３種類となる一方、「通常時は不許可」が設定された場合には、当該「次に進む事の出来る機能」には“ＳＭ”が追加されずに、“Ｔ”および“Ｄ”の２種類となる。図３Ａの当該「次に進む事の出来る機能」中、“ＳＭ”がカッコ書きで示されているのは、“ＳＭ”が機能として選択される場合と選択されない場合の両方があり得るからである。本実施の形態では、図３Ａの対応表は前記ＲＯＭ６に予め記憶されており、必要なときに読み出して参照するようにしているが、「通常時も許可」が設定されたかどうかで、対応表のうちの一部データ（“ＳＭ”）を採用するかどうかを判断するのは面倒なので、「通常時も許可」が設定された場合の対応表と「通常時は不許可」が設定された場合の対応表を予め別々に作成して記憶しておき、必要に応じて必要な方を読み出して参照すればよい。
【００６４】
なお、（１２）コード検出タイミングおよび各種ルールの設定処理でも、前記（１１）演奏開始前の設定処理と同様に、各ルールは、ユーザに設定すべきルール内容を問い合わせ、これに応じてユーザが入力あるいは選択した内容を設定するようにしてもよいし、デフォルト設定されたものあるいは前回設定されたものをそのまま、あるいは一部変更して設定するようにしてもよい。
【００６５】
次にＣＰＵ５は、処理を前記（１３）の初期化処理に進める。この（１３）初期化処理では、ＣＰＵ５は、前記ＲＡＭ７上に確保した次の各領域および各フラグを初期化する。すなわち、
ノートイベントリストＮＬｉｓｔ：コード検出タイミングの期間内に入力されたノートオンイベントに対応するノートイベント情報（音高＋入力タイミング）を登録するリストである；
コード検出タイミングの始点ｓＴｉｍｅ：コード検出タイミングの始点を記憶しておく領域である；
コード検出タイミングの終点ｅＴｉｍｅ：コード検出タイミングの終点を記憶しておく領域である；
調情報Ｋｅｙ：前記設定された調検出ルールに従って検出された調情報を記憶しておく領域である；
コードリストＣＬｉｓｔ：検出対象となるコードデータの候補を登録するリストである；
検出コードＣｈｏｒｄ：ノートイベントリストＮＬｉｓｔに登録されたノートイベント情報に基づいてコードリストＣＬｉｓｔから選出した１つのコードデータを検出コードとして記憶しておく領域である；
スタートコードＳＣｈｏｒｄ：前記骨格コード進行の生成中に、当該骨格コード進行に割り込ませる前記割り込み型コード進行またはエクステンデッド型コード進行を生成する場合があり、その場合に、当該割り込み型コード進行またはエクステンデッド型コード進行のスタート（始点）となるコードデータを記憶しておく領域である；
次コードリストＮＣＬｉｓｔ：割り込み型コード進行を生成しているときに、現在の検出コードＣｈｏｒｄから次に進行するコードデータの候補を登録するリストである；
出力結果リストＲＬｉｓｔ：調情報Ｋｅｙおよび検出コードＣｈｏｒｄを登録するリストである；
前回のディグリーネームＬＤＮ：前回の検出コードＣｈｏｒｄが持つディグリーネームを記憶しておく領域である；
前回の機能ＬＦ：前回の検出コードＣｈｏｒｄに対応する機能を記憶しておく領域である；
の各領域をクリアするとともに、
通常コード検出フラグ：通常コード（本実施の形態では、骨格コード進行を形成するコードデータ）が検出されたときにセット（“１”）され、通常コード以外のコードが検出されたときにリセット（“０”）されるフラグである；
ＥＰフラグ：前記（Ｂ）の追加コード候補抽出処理で、エクステンデッド・ドミナントとなるコードデータの候補を抽出して、コードリストＣＬｉｓｔに追加するときにセットされ、当該コードデータの候補を抽出しないときにリセットされるフラグである；
の前者のフラグをセットし、後者のフラグをリセットする。
【００６６】
次にＣＰＵ５は、処理を前記（１４）のコード検出タイミングの始点および終点の算出設定処理に進める。この（１４）コード検出タイミングの始点および終点の算出設定処理では、ＣＰＵ５は、前記設定されたコード検出タイミングの設定ルールに従って、最初のコード検出タイミングの始点および終点を算出し、算出した始点を前記始点ｓＴｉｍｅに記憶（設定）するとともに、算出した終点を前記終点ｅＴｉｍｅに記憶（設定）する。ただし本実施の形態では、コード検出タイミングとして、曲の先頭拍の拍位置をコード検出基準位置に取るとともに、その拍位置からさらに２５０ｍｓ前をコード検出タイミングの始点に取るのに対して、曲は先頭拍から開始されるので、曲の開始時に、その開始位置より前の位置を算出して、始点ｓＴｉｍｅに設定するのは無意味である。したがって、この場合、始点ｓＴｉｍｅには先頭拍の拍位置、つまりコード検出基準位置を設定することが好ましい。しかしこの場合に、原則通り、先頭拍の拍位置より２５０ｍｓ前の位置を算出して、始点ｓＴｉｍｅに設定したとしても、設定された始点より後の時刻から制御処理が開始されるだけであって、その後の制御処理に問題が生じることはない。
【００６７】
このようにして（１）起動時処理が１回実行されると、ＣＰＵ５は、ユーザによる自動伴奏のスタート指示を待ち、自動伴奏のスタート指示がなされると、処理を前記（２）の自動伴奏のスタート時処理に進める（ステップＳ６→Ｓ７）。この（２）自動伴奏のスタート時処理では、ＣＰＵ５は、前記タイマ８を起動して、タイマ８による計時を開始する。タイマ８の計時時間は、前述のように前記自動伴奏装置９にも供給され、さらに本演奏処理では、前述のように自動伴奏装置９は作動状態であるので、伴奏スタイルデータが選択設定されていれば、自動伴奏装置９は、本演奏処理とは独立して、タイマ８から供給された計時時間（時間情報）に基づいてその伴奏スタイルデータを再生する。
【００６８】
そしてＣＰＵ５は、ユーザによって自動伴奏のストップ指示がなされるまで、ノートオンイベントが受け付けられたときには、前記（４）のノートイベント処理を実行し（ステップＳ８→Ｓ１１→Ｓ１２）、タイマ８によって前記コード検出タイミング（の終点ｅＴｉｍｅ）が計時されたときには、前記（５）のコードの検出タイミング時処理を実行する（図５ＢのステップＳ１３→Ｓ１４）。
【００６９】
一方、ユーザによって自動伴奏のストップ指示がなされると、ＣＰＵ５は、処理を前記（３）の自動伴奏のストップ時処理に進める（ステップＳ８→Ｓ９）。この（３）自動伴奏のストップ時処理では、ＣＰＵ５は、タイマ８を停止する。これにより当然ながら、自動伴奏装置９による前記伴奏スタイルデータの再生は停止する。
【００７０】
図６は、前記（４）のノートイベント処理の詳細な手順を示すフローチャートである。
【００７１】
同図に示すように、本ノートイベント処理は、
（４１）タイマ８がコード検出タイミング期間内の時間、つまり前記始点ｓＴｉｍｅから前記終点ｅＴｉｍｅまでの間の時間を計時しているときに
（４１ａ）ノートオンイベントが受け付けられた場合の処理（ステップＳ３３，Ｓ３４）
（４１ｂ）ノートオフイベントが受け付けられた場合の処理（ステップＳ３５，Ｓ３６）
（４２）タイマ８がコード検出タイミング期間外の時間を計時しているときに
（４２ａ）ノートオンイベントが受け付けられた場合の処理（ステップＳ３８）
（４２ｂ）ノートオフイベントが受け付けられた場合の処理（ステップＳ３９）
によって構成されている。
【００７２】
そして、上記（４１ａ）の処理は、上記（４２ａ）の処理、つまり、受け付けられたノートオンイベントを前記音源回路１３に出力することでなされる発音処理に、当該ノートオンイベントに対応するノートイベント情報（音高＋入力タイミング）を前記ノートイベントリストＮＬｉｓｔに追加する処理を加えて構成され、上記（４１ｂ）の処理は、上記（４２ｂ）の処理、つまり、受け付けられたノートオフイベントを音源回路１３に出力することでなされる消音処理に、当該ノートオフイベントに対応するノートイベント情報を前記ノートイベントリストＮＬｉｓｔから削除する処理を加えて構成されている。
【００７３】
前記（５）のコードの検出タイミング時処理では、まずＣＰＵ５は、コード検出処理を実行する（ステップＳ１４）。コード検出処理の詳細は、図７のフローチャートに基づいて後述するが、コード検出処理が実行されると、１つのコードデータが検出（選出）されて、前記検出コードＣｈｏｒｄに記憶される。次にＣＰＵ５は、検出コードＣｈｏｒｄからコードネームを読み出して前記自動伴奏装置９に出力する（ステップＳ１５）。
【００７４】
さらにＣＰＵ５は、通常コード検出フラグがセット状態であれば、調情報Ｋｅｙと検出コードＣｈｏｒｄを出力結果リストＲＬｉｓｔの末尾に追加し（ステップＳ１６→Ｓ１７）、コード検出タイミングの設定内容（設定ルール）に基づいて、次のコード検出期間の始点および終点を算出して、それぞれ始点ｓＴｉｍｅおよび終点ｅＴｉｍｅを更新し（ステップＳ１８）、ノートイベントリストＮＬｉｓｔを初期化（クリア）する（ステップＳ１９）。なお、通常コード検出フラグがリセット状態であれば、ＣＰＵ５は、ステップＳ１７をスキップして次のステップＳ１８に処理を進める。通常コード検出フラグがリセット状態とは、前述のように、割り込み型コード進行またはエクステンデッド型コード進行を生成している状態であることを意味する。そして、割り込み型コード進行またはエクステンデッド型コード進行を形成するためのコードデータ（および調情報）は、出力結果リストＲＬｉｓｔには追加登録しないようにしているので、この場合には、ＣＰＵ５は当該ステップＳ１７の追加登録処理を実行しないようにしている。
【００７５】
図７は、前記ステップＳ１４のコード検出処理の詳細な手順を示すフローチャートである。
【００７６】
本コード検出処理は、主として、
（５１）通常コード検出処理（ステップＳ４２〜Ｓ４８）
（５２）非通常コード検出処理への移行処理（ステップＳ５０〜Ｓ５２）
（５３）非通常コード検出処理（ステップＳ５３，Ｓ５６〜Ｓ５８）
（５４）通常コード検出処理への移行処理（ステップＳ５５）
によって構成され、上記（５１）通常コード検出処理には、前記（Ａ）基本コード候補抽出処理および前記（Ｂ）追加コード候補抽出処理が含まれ、上記（５３）非通常コード検出処理には、前記（Ｃ）コード進行形成用コード検出処理が含まれている。
【００７７】
そして、通常コード検出に関する処理系列、つまり上記（５１）および（５２）の処理系列は、通常コード検出フラグがセット状態のときに実行され（ステップＳ４１→Ｓ４２）、非通常コード検出に関する処理系列、つまり上記（５３）および（５４）の処理系列は、通常コード検出フラグがリセット状態のときに実行される（ステップＳ４１→Ｓ５３）。
【００７８】
前記（５１）通常コード検出処理では、まずＣＰＵ５は、前記（１２）のコード検出タイミングおよび各種ルールの設定処理によって設定された調検出ルールに従って、調情報を取得し（ステップＳ４２）、取得した調情報を前記調情報Ｋｅｙに記憶し（ステップＳ４３）、さらに前記コードリストＣＬｉｓｔを初期化（クリア）する（ステップＳ４４）。
【００７９】
次にＣＰＵ５は、前記（Ａ）基本コード候補抽出処理（その詳細は、図８Ａおよび図８Ｂを用いて後述）を実行する（ステップＳ４５）とともに、前記（Ｂ）追加コード候補抽出処理（その詳細は、図１０を用いて後述）を実行する（ステップＳ４６）。この両抽出処理が実行されると、コードリストＣＬｉｓｔには、骨格コード進行を形成するための複数のコード候補および非骨格コード進行（割り込み型コード進行およびエクステンデッド型コード進行）の始点となる複数のコード候補が登録される。
【００８０】
そしてＣＰＵ５は、ノートイベントリストＮＬｉｓｔとコードリストＣＬｉｓｔに基づいて、より具体的には、ノートイベントリストＮＬｉｓｔに登録されているノートイベント情報（の音高）を参照し、コードリストＣＬｉｓｔに登録されている複数のコード候補（コードデータ）からコードデータを１つ選出し（ステップＳ４７）、選出したコードデータを検出コードＣｈｏｒｄに記憶する（ステップＳ４８）。なお、上記ステップＳ４７での「コードの選出」は、前記（１２）のコード検出タイミングおよび各種ルールの設定処理で設定した前記（Ｒ２）コードの選出ルール、つまり本実施の形態では、前記（Ｒ２ａ）または（Ｒ２ｂ）のいずれかに従って行われる。この事情は、上記ステップＳ４７に限らず、ステップＳ４７と同様の処理を行う他のステップ、たとえば後述する図１１ＡのステップＳ１２６，Ｓ１４５およびＳ１５０等についても同様である。
【００８１】
次にＣＰＵ５は、検出コードＣｈｏｒｄの情報データ内にフラグ情報があるかどうかを判別する（ステップＳ４９）。フラグ情報がある場合、フラグ情報には「割り込み」、「エクステンデッドV7／V7sus4」、「エクステンデッド♭II7」、「寄り道」および「Ｅｎｄ」のうちのいずれかが記憶されているが、処理がステップＳ４９に進んだときに、検出コードＣｈｏｒｄの情報データ内にフラグ情報があった場合、そのフラグ情報は、「割り込み」、「エクステンデッドV7／V7sus4」および「エクステンデッド♭II7」のうちのいずれかであり、「寄り道」または「Ｅｎｄ」であることはない。これは、「寄り道」および「Ｅｎｄ」の設定は、前記非通常コード検出に関する処理系列でのみ、より具体的には、前記（５３）非通常コード検出処理に含まれる前記（Ｃ）コード進行形成用コード検出処理でのみなされ、この処理系列から前記通常コード検出に関する処理系列に移行した後は、「寄り道」および「Ｅｎｄ」の設定がなされることはないからである。
【００８２】
前記ステップＳ４９の判別の結果、検出コードＣｈｏｒｄの情報データ内にフラグ情報があったときには、ＣＰＵ５は、処理を前記（５２）の非通常コード検出処理への移行処理を実行する（ステップＳ４９→Ｓ５０）一方、検出コードＣｈｏｒｄの情報データ内にフラグ情報がなかったときには、ＣＰＵ５は、当該移行処理を実行せずに、本コード検出処理を終了する（ステップＳ４９→リターン）。
【００８３】
（５２）非通常コード検出処理への移行処理では、ＣＰＵ５は、通常コード検出フラグをリセットし（ステップＳ５０）、スタートコードＳＣｈｏｒｄを初期化（クリア）した上で、検出コードＣｈｏｒｄの各情報をスタートコードＳＣｈｏｒｄに記憶させ（ステップＳ５１）、さらにコードリストＣＬｉｓｔおよび次コードリストＮＣＬｉｓｔを共に初期化（クリア）する（ステップＳ５２）。
【００８４】
前記（５３）非通常コード検出処理では、まずＣＰＵ５は、コード進行形成用コード検出処理を実行する（ステップＳ５３）。コード進行形成用コード検出処理が実行されると、１つのコードデータが選出されて、検出コードＣｈｏｒｄに記憶される。次にＣＰＵ５は、検出コードＣｈｏｒｄの情報データ内のフラグ情報が「Ｅｎｄ」であるかどうか判別する（ステップＳ５４）。非通常コード検出に関する処理系列では、基本的には、非骨格コード進行を形成するためのコードデータを検出しているが、いつかは骨格コード進行を形成するためのコードデータの検出に戻る必要がある。フラグ情報が「Ｅｎｄ」であるコードデータは、非骨格コード進行の終点となるコードデータである。つまり、ステップＳ５４の判別は、非骨格コード進行を形成するためのコードデータの検出を終了させるかどうかを判別している。この判別の結果、非骨格コード進行を形成するためのコードデータの検出を継続させるとき（フラグ情報≠「Ｅｎｄ」）には、ＣＰＵ５は、当該フラグ情報が「エクステンデッドV7／V7sus4」または「エクステンデッド♭II7」のいずれかに該当するかを判別する（ステップＳ５６）。このステップＳ５６の判別は、非骨格コード進行として、前記エクステンデッド型コード進行または前記割り込み型コード進行のいずれを生成するかを判別する。この判別の結果、エクステンデッド型コード進行を生成するときには、ＣＰＵ５は、スタートコードＳＣｈｏｒｄに検出コードＣｈｏｒｄの各情報を記憶する（ステップＳ５７）とともに、コードリストＣＬｉｓｔを初期化する（ステップＳ５８）一方、割り込み型コード進行を生成するときには、ＣＰＵ５は、本コード検出処理を直ちに終了する（ステップＳ５６→リターン）。
【００８５】
前記ステップＳ５４の判別の結果、非骨格コード進行を形成するためのコードデータの検出を終了させるとき（フラグ情報＝「Ｅｎｄ」）には、ＣＰＵ５は、処理を前記（５４）の通常コード検出処理への移行処理に進め、通常コード検出フラグをセットする（ステップＳ５５）。
【００８６】
図８Ａおよび図８Ｂは、前記ステップＳ４５の基本コード候補抽出処理の詳細な手順を示すフローチャートである。
【００８７】
本基本コード候補抽出処理は、主として、
（６１）起動時処理（ステップＳ６１〜Ｓ６３）
（６２）次の（６３）の抽出処理の前処理（ステップＳ６４〜Ｓ７２）
（６３）次に進むことのできる機能を持つディグリーネーム候補の抽出処理（図８ＢのステップＳ７５）
によって構成されている。
【００８８】
本基本コード候補抽出処理が起動されると、まずＣＰＵ５は、処理を前記（６１）の起動時処理に進める。この（６１）起動時処理では、ＣＰＵ５は、
（６１ａ）ノートイベントリストＮＬｉｓｔが空である場合、つまり、ノートイベントリストＮＬｉｓｔにノートイベント情報が１個も記録されていない場合：本基本コード候補抽出処理を直ちに終了する（ステップＳ６１→リターン）；
（６１ｂ）ノートイベントリストＮＬｉｓｔが空でない場合：かつ
（６１ｂ１）出力結果リストＲＬｉｓｔが空である場合：ノートイベントリストＮＬｉｓｔに記録されたノートイベント情報と調情報Ｋｅｙに基づいて初回コードのディグリーネームとコードネームを検出し、検出したディグリーネームとコードネームを含むコードデータを生成してコードリストＣＬｉｓｔに登録した後、本基本コード候補抽出処理を終了する（ステップＳ６１→Ｓ６２→Ｓ６３→リターン）；
（６１ｂ２）出力結果リストＲＬｉｓｔが空でない場合：前記（６２）の前処理に進む（ステップＳ６１→Ｓ６２→Ｓ６４）。
【００８９】
なお前記（６１ｂ１）の処理において、初回コードのディグリーネームとコードネームの検出は、従来の方法によって行えばよい。またこの場合、参照する前回のコードがまだ記憶されていないので、たとえば、調の主音をルートとしたメジャ調かマイナ調のトニックコードを参照すべき基準コードとしてもよい。
【００９０】
前記（６２）の前処理では、ＣＰＵ５は、トニック禁止フラグ、サブドミナント禁止フラグおよびドミナント禁止フラグのセット／リセットを行う。具体的には、
（６２ａ）出力結果リストＲＬｉｓｔに４個以上のコードデータが登録されており、末尾から４個、つまり最新に登録されたものから遡って４個がすべて、ダイアトニック・スケール・コードのトニック（Ｔ）に該当するかどうか判定し（ステップＳ６４）、
当該４個のコードデータがすべて、ダイアトニック・スケール・コードのトニックに該当する場合：トニック禁止フラグをセット（“１”）（ステップＳ６５）；
当該４個のコードデータのうち、少なくとも１個が、ダイアトニック・スケール・コードのトニックに該当しない場合：トニック禁止フラグをリセット（“０”）（ステップＳ６６）；
（６２ｂ）出力結果リストＲＬｉｓｔに２個以上のコードデータが登録されており、末尾から２個がすべて、ダイアトニック・スケール・コードのサブドミナント（Ｓ）に該当するかどうか判定し（ステップＳ６７）、
当該２個のコードデータがすべて、ダイアトニック・スケール・コードのサブドミナントに該当する場合：サブドミナント禁止フラグをセット（ステップＳ６８）；
当該２個のコードデータのうち、少なくとも１個が、ダイアトニック・スケール・コードのサブドミナントに該当しない場合：サブドミナント禁止フラグをリセット（ステップＳ６９）；
（６２ｃ）出力結果リストＲＬｉｓｔに２個以上のコードデータが登録されており、末尾から２個がすべて、ダイアトニック・スケール・コードのドミナント（Ｄ）に該当するかどうか判定し（ステップＳ７０）、
当該２個のコードデータがすべて、ダイアトニック・スケール・コードのドミナントに該当する場合：ドミナント禁止フラグをセット（ステップＳ７１）；
当該２個のコードデータのうち、少なくとも１個が、ダイアトニック・スケール・コードのドミナントに該当しない場合：ドミナント禁止フラグをリセット（ステップＳ７２）。
【００９１】
上記３種類の禁止フラグをそれぞれセットする場合は、対応する機能を持つダイアトニック・スケール・コードが所定個続いて選出されて発音される（前記図５ＢのステップＳ１５およびＳ１７を参照）場合に相当する。つまり、各禁止フラグは、対応する機能を持つダイアトニック・スケール・コードが所定個続いて選出されないように制限する機能を営んでいる（後述する図９ＡのステップＳ８３，Ｓ８７、および図９ＢのステップＳ９１を参照）。このような禁止フラグを設けたことにより、単調なコード選出およびその発音を抑制することができる。なお、同じ機能を持つダイアトニック・スケール・コードが何個続いたときに、同じ機能を持つ新たなダイアトニック・スケール・コードの選出を禁止するかの上記例示した個数は、あくまでも例示に過ぎず、複数個であれば２個と４個に限られない。
【００９２】
さらにＣＰＵ５は、出力結果リストＲＬｉｓｔの末尾のコードデータを参照し、前回コードのディグリーネームとその機能を取得し（図８ＢのステップＳ７３）、取得したディグリーネームを前回のディグリーネームＬＤＮに記憶するとともに、取得した機能を前回の機能ＬＦに記憶する（ステップＳ７４）。
【００９３】
次にＣＰＵ５は、処理を前記（６３）の次に進むことのできる機能を持つディグリーネーム候補の抽出処理に進める（ステップＳ７５）。
【００９４】
図９Ａおよび図９Ｂは、この（６３）次に進むことのできる機能を持つディグリーネーム候補の抽出処理の詳細な手順を示すフローチャートである。
【００９５】
同図Ａ，Ｂに示すように本抽出処理では、まずＣＰＵ５は、前回の機能ＬＦおよび調情報Ｋｅｙに基づいて、次に進むことのできる機能を全て抽出する（ステップＳ８１）。このとき、前記図３Ａ（調情報Ｋｅｙがメジャ調の場合）または図３Ｂ（調情報Ｋｅｙがマイナ調の場合）のいずれかのコードの機能とディグリーネームの対応表を参照して、次に進むことのできる機能を全て抽出する。たとえば、前回の機能ＬＦがトニック（Ｔ）であり、調情報Ｋｅｙがメジャ調である場合には、ＣＰＵ５は、次に進むことのできる機能として、トニック（Ｔ）、サブドミナント（Ｓ）、ドミナント（Ｄ）およびサブドミナント・マイナ（ＳＭ）を抽出する。また、前回の機能ＬＦがドミナント（Ｄ）であり、調情報Ｋｅｙがメジャ調である場合には、さらに、メジャ調でのドミナント（Ｄ）→サブドミナント・マイナ（ＳＭ）進行（インターラプテッド・ケーデンス）を通常時も許可するかどうかに応じて、ＣＰＵ５は、次に進むことのできる機能として、トニック（Ｔ）、ドミナント（Ｄ）およびサブドミナント・マイナ（ＳＭ）（「通常時も許可」の設定時）と、トニック（Ｔ）およびドミナント（Ｄ）（「通常時は不許可」の設定時）のいずれかを抽出する。
【００９６】
次にＣＰＵ５は、抽出した機能とその機能に対応する禁止フラグのセット状態に応じて、次のように場合分けし、各場合に対応する処理を実行する。すなわち、
（６３ａ）抽出した機能にトニックがあり、かつ
トニック禁止フラグの値＝０（リセット状態）の場合：ダイアトニック・スケール・コードのトニックに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（ステップＳ８４）とともに、ダイアトニック・スケール・コード以外のトニックに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（ステップＳ８５）；
トニック禁止フラグの値＝１（セット状態）の場合：上記ステップＳ８４の処理をスキップして、上記ステップＳ８５の処理のみを行う；
（６３ｂ）抽出した機能にサブドミナントがあり、かつ
サブドミナント禁止フラグの値＝０の場合：ダイアトニック・スケール・コードのサブドミナントに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（ステップＳ８８）とともに、ダイアトニック・スケール・コード以外のサブドミナントに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（ステップＳ８９）；
サブドミナント禁止フラグの値＝１の場合：上記ステップＳ８８の処理をスキップして、上記ステップＳ８９の処理のみを行う；
（６３ｃ）抽出した機能にドミナントがあり、かつ
ドミナント禁止フラグの値＝０の場合：ダイアトニック・スケール・コードのドミナントに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（図９ＢのステップＳ９２）とともに、ダイアトニック・スケール・コード以外のドミナントに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（ステップＳ９３）；
ドミナント禁止フラグの値＝１の場合：上記ステップＳ９２の処理をスキップして、上記ステップＳ９３の処理のみを行う；
（６３ｄ）抽出した機能にサブドミナント・マイナがある場合：サブドミナント・マイナに該当するディグリーネームの中で、調情報Ｋｅｙに合うものをすべて抽出し、そのすべてのディグリーネームのそれぞれについて各コードネームを検出し、前記抽出した各ディグリーネームと前記検出した各コードネームをそれぞれ含む各コードデータを生成して、コードリストＣＬｉｓｔに登録する（ステップＳ９５）。
【００９７】
なお、抽出した機能にトニック、サブドミナント、ドミナントまたはサブドミナント・マイナがない場合には、それぞれ以下の（６３ａ）〜（６３ｄ）の各処理はなされない。
【００９８】
また、ステップＳ８４，Ｓ８５，Ｓ８８，Ｓ８９，Ｓ９２，Ｓ９３およびＳ９５における各コードネームの検出は、対応するディグリーネームを調情報Ｋｅｙに基づいてコードネームに展開することによって行う。具体的には、この展開は、調情報の主音をＩ度としてディグリーネームの度数からルートを算出することによって行う。これにより、たとえば、ディグリーネーム“IIm7”を調情報「Ｆメジャ」によって展開すると、コードネーム“Gm7”が得られる。
【００９９】
なお図３Ａの対応表中、「機能」が“Ｓ：サブドミナント”の「ダイアトニック・スケール・コード以外」に属する“#IVm7(♭5)”には“-S”が付けられている。この“-S”は、“#IVm7(♭5)”を「サブドミナント（Ｓ）」として扱うことを意味している。“#IVm7(♭5)”は、通常「トニック（Ｔ）」として扱うが、本実施の形態では「サブドミナント（Ｓ）」としても扱うようにしている。したがって、前記ステップＳ８１の処理によって「サブドミナント（Ｓ）」が抽出されたときに、調情報Ｋｅｙが「メジャ調」であれば、“#IVm7(♭5)”も抽出される。ただしこの場合、「サブドミナント（Ｓ）」とともに「トニック（Ｔ）」も抽出されると、“#IVm7(♭5)”は、「サブドミナント（Ｓ）」に属するものと、「トニック（Ｔ）」に属するものの両方が抽出されることになる。このとき、本実施の形態では「トニック（Ｔ）」に属するものを優先的に抽出するようにしているが、もちろんこれに限らず、「サブドミナント（Ｓ）」に属するものを優先的に抽出するようにしてもよい。そしてこの場合、抽出された“#IVm7(♭5)”が「サブドミナント（Ｓ）」または「トニック（Ｔ）」のいずれに属するかを特定する情報を付けるようにした方が好ましい。
【０１００】
図１０は、前記ステップＳ４６の追加コード候補抽出処理の詳細な手順を示すフローチャートである。
【０１０１】
本追加コード候補抽出処理が起動されると、まずＣＰＵ５は、調情報Ｋｅｙを参照し、コードリストＣＬｉｓｔに登録されているコードデータのうち、ダイアトニック・スケール・コードのMaj7，6，add9，Maj，sus4に該当するコードデータであって、メジャ調のI度とマイナ調の♭III度を除いたものをメジャ系解決先コードとして抽出する（ステップＳ１０１）。この結果、調情報Ｋｅｙがメジャ調であれば、IVMaj7，IV6，IVadd9，IVの各コードが抽出され、調情報Ｋｅｙがマイナ調であれば、♭VIMaj7，♭VI6，♭VIadd9，♭VIの各コードが抽出される。
【０１０２】
次にＣＰＵ５は、メジャ系セカンダリードミナントとそのツーファイブ候補の追加処理を実行する（ステップＳ１０２）。この追加処理（その詳細は図示せず）では、ＣＰＵ５は、
（７１）前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（メジャ系に解決するドミナント候補の追加）；
（７２）上記（７１）で追加した各コードデータの情報データ内の解決先コード情報として記憶されている解決先コードのルートに対してIIm7およびIIm7(♭5)となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7／IIm7(♭5) of V7／V7sus4 of 解決先コードのルートの度数」（“IIm7／IIm7(♭5)”は、“IV／IVm”の代理コードである）を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（メジャ系に解決するツーファイブ候補の追加）；
（７３）前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（メジャ系に解決するドミナント候補の追加）；
（７４）前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「♭II7 of 解決先コードのルートの度数」（“♭II7”は、“V7”の代理コードである）を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（メジャ系に解決するセカンダリードミナント候補の追加）；
（７５）上記（７４）で追加した各コードデータのルートをV度とみなし、それらに対しIIm7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7 of ♭II7 of 解決先コードのルートの度数」（＝解決先コードのルートの度数をI度とみなしたときの♭VIm7）を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（メジャ系に解決するツーファイブ候補の追加）；
の各処理を実行する。
【０１０３】
たとえば、解決先コードが“FMaj7”である場合には、前記（７１）の処理によって“FMaj7”に対するV7として“C7”が、前記（７２）の処理によって“FMaj7”に対するIIm7とIIm7(♭5)として“Gm7”と“Gm7(♭5)”が、前記（７３）の処理によって“FMaj7”に対するV7sus4として“C7sus4”が、前記（７４）の処理によって“FMaj7”に対する♭II7として“G♭7”が、前記（７５）の処理によって“FMaj7”に対して♭II7となる“G♭7”の“G♭”をV度とみなしたときのIIm7として“D♭m7”が、それぞれ検出される。
【０１０４】
次にＣＰＵ５は、調情報Ｋｅｙを参照し、コードリストＣＬｉｓｔに登録されているコードデータのうち、フラグ情報が「なし」であり、かつダイアトニック・スケール・コードのm7，m6，mMaj，madd9に該当するコードデータであって、マイナ調のI度とV度を除いたものをマイナ系解決先コードとして抽出する（ステップＳ１０３）。この結果、調情報Ｋｅｙがメジャ調であれば、IIm7，IIIm7，VIm7の各コードが抽出され、調情報Ｋｅｙがマイナ調であれば、IIm7，IVm7，IVm6の各コードが抽出される。
【０１０５】
次にＣＰＵ５は、マイナ系セカンダリードミナントとそのツーファイブ候補の追加処理を実行する（ステップＳ１０４）。この追加処理（その詳細は図示せず）では、ＣＰＵ５は、
（８１）前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（マイナ系に解決するドミナント候補の追加）；
（８２）上記（８１）で追加した各コードデータの情報データ内の解決先コード情報として記憶されている解決先コードのルートに対してIIm7およびIIm7(♭5)となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7／IIm7(♭5) of V7／V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（マイナ系に解決するツーファイブ候補の追加）；
（８３）前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（マイナ系に解決するドミナント候補の追加）；
（８４）前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「♭II7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（マイナ系に解決するセカンダリードミナント候補の追加）；
（８５）上記（８４）で追加した各コードデータのルートをV度とみなし、それらに対しIIm7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7 of ♭II7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（マイナ系に解決するツーファイブ候補の追加）；
の各処理を実行する。
【０１０６】
たとえば、解決先コードが“Dm7”である場合には、前記（８１）の処理によって“Dm7”に対するV7として“A7”が、前記（８２）の処理によって“Dm7”に対するIIm7とIIm7(♭5)として“Em7”と“Em7(♭5)”が、前記（８３）の処理によって“Dm7”に対するV7sus4として“A7sus4”が、前記（８４）の処理によって“Dm7”に対する♭II7として“E♭7”が、前記（８５）の処理によって“Dm7”に対して♭II7となる“E♭7”の“E♭”をV度とみなしたときのIIm7として“B♭m7”が、それぞれ検出される。
【０１０７】
次にＣＰＵ５は、調情報Ｋｅｙを参照し、コードリストＣＬｉｓｔに登録されているコードデータのうち、フラグ情報が「なし」であり、かつダイアトニック・スケール・コードのドミナント7th系のコードデータをドミナント7th系解決先コードとして抽出する（ステップＳ１０５）。この結果、調情報Ｋｅｙがメジャ調であれば、V7，V7sus4の各コードが抽出され、調情報Ｋｅｙがマイナ調であれば、V7，V7sus4，♭VII7，♭VII7sus4（IV7）の各コードが抽出される。
【０１０８】
次にＣＰＵ５は、ダブルドミナント候補の追加処理を実行する（ステップＳ１０６）。この追加処理（その詳細は図示せず）では、ＣＰＵ５は、
（９１）前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加；
（９２）前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加；
（９３）前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「♭II7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストＣＬｉｓｔに追加；
の各処理を実行する。
【０１０９】
たとえば、解決先コードが“G7”である場合には、前記（９１）の処理によって“G7”に対するV7として“D7”が、前記（９２）の処理によって“G7”に対するV7sus4として“D7sus4”が、前記（９３）の処理によって“G7”に対する♭II7として“A♭7”が、それぞれ検出される。
【０１１０】
次にＣＰＵ５は、前記ＥＰフラグのセット／リセット状態を判別し（ステップＳ１０７）、セット状態であれば、エクステンデッド・ドミナント候補の追加処理を実行する（ステップＳ１０８）とともに、ＥＰフラグをリセットした（ステップＳ１０９）後、ステップＳ１１０に進む一方、リセット状態であれば、ステップＳ１０８およびＳ１０９をスキップしてステップＳ１１０に進む。
【０１１１】
エクステンデッド・ドミナント候補の追加処理（その詳細は図示せず）では、ＣＰＵ５は、
（１０１）前回のディグリーネームＬＤＮのルート音名の完全４度上の音名をルートに持つ（コードタイプが）7コードと7sus4コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「フラグ情報」として「エクステンデッドV7／V7sus4」を記憶したものを生成し、コードリストＣＬｉｓｔに追加；
（１０２）前回のディグリーネームＬＤＮのルート音名の１半音下の音名をルートに持つ7コードを検出し、検出したコードに対応するコードネームおよびディグリーネームを含むコードデータであって、その情報データに、「フラグ情報」として「エクステンデッド♭II7」を記憶したものを生成し、コードリストＣＬｉｓｔに追加；
の各処理を実行する。
【０１１２】
前記ステップＳ１１０では、ＣＰＵ５は、コードリストＣＬｉｓｔに登録されているコードデータのうち、コードネーム（ディグリーネーム）が重複したものがあれば、その情報データ内のフラグ情報が「割り込み」、「エクステンデッドV7」または「エクステンデッド♭II7」のいずれかであるコードデータをコードリストＣＬｉｓｔから削除する。
【０１１３】
図１１Ａ〜図１１Ｃは、前記図７のステップＳ５３のコード進行形成用コード検出処理の詳細な手順を示すフローチャートである。
【０１１４】
本コード進行形成用コード検出処理では、ＣＰＵ５は、スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報が「割り込み」のときに、前記割り込み型コード進行を形成するためのコードデータを検出し（ステップＳ１２１→Ｓ１２２）、当該フラグ情報が「エクステンデッドV7／V7sus4」または「エクステンデッド♭II7」のときに、前記エクステンデッド型コード進行を形成するためのコードデータを検出する（ステップＳ１２１→図１１ＢのＳ１５３）。
【０１１５】
割り込み型コード進行を形成するためのコードデータの検出処理（以下、「割り込み型コード進行形成用コード検出処理」という）では、まずＣＰＵ５は、スタートコードＳＣｈｏｒｄの次に進むコード候補であって、割り込み型コード進行となるもの（以下、「次の割り込み型コード候補」という）を抽出して、当該次の割り込み型コード候補に対応するコードデータをコードリストＣＬｉｓｔに登録する（ステップＳ１２２→Ｓ１２３）。
【０１１６】
図１２Ａおよび図１２Ｂは、次の割り込み型コード候補の抽出処理の詳細な手順を示すフローチャートである。
【０１１７】
本次の割り込み型コード候補の抽出処理では、ＣＰＵ５は、次の処理を実行する。すなわち、
（１１１）スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7(♭5)が検出されている場合：
（１１１ａ）スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名をルートとする7コードのコードネームおよびディグリーネームを含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１７１→Ｓ１７２）；
（１１１ｂ）スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名をルートとする7sus4コードのコードネームおよびディグリーネームを含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１７３）；
（１１１ｃ）スタートコードＳＣｈｏｒｄのルート音名に♭を付けた（ルート音名を変えずに半音下げる）音名のコードネームおよびディグリーネームを含むコードデータを生成して、コードリストＣＬｉｓｔに登録した（ステップＳ１７４）後、本抽出処理を終了（リターン）；
（１１２）スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のV7またはV7sus4が検出されている場合：
（１１２ａ）スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名をルートとするダイアトニック・スケール・コードを、調情報Ｋｅｙに応じてすべて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１７５→Ｓ１７６）；
（１１２ｂ）上記（１１２ａ）の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Ｋｅｙに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１７７）；
（１１２ｃ）スタートコードＳＣｈｏｒｄの情報データ内の解決先コード情報（のルートの度数）がVI度であり、かつ調情報Ｋｅｙがメジャ調であるときには、VIMaj7，IV6，IVadd9，IVに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１７８）；
（１１２ｄ）スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名をルートとする7コードおよび7sus4コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「フラグ情報」として「エクステンデッドV7／V7sus4」を記憶したものを生成し、コードリストＣＬｉｓｔに登録し（ステップＳ１７９）；
（１１２ｅ）スタートコードＳＣｈｏｒｄのルート音名に対し半音下の音名をルートとする7コードのコードネームおよびディグリーネームを含むコードデータであって、情報データに、「フラグ情報」として「エクステンデッド♭II7」を記憶したものを生成し、コードリストＣＬｉｓｔに登録した（ステップＳ１８０）後、本抽出処理を終了（リターン）；
（１１３）スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定の♭II7が検出されている場合：
（１１３ａ）スタートコードＳＣｈｏｒｄのルート音名に対し短２度下の音名をルートとするダイアトニック・スケール・コードを、調情報Ｋｅｙに応じてすべて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１８１→Ｓ１８２）；
（１１３ｂ）上記（１１３ａ）の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Ｋｅｙに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１８３）；
（１１３ｃ）前記（１１２ｄ）の抽出処理と同様の処理を実行し（ステップＳ１７９）；
（１１３ｄ）前記（１１２ｅ）の抽出処理と同様の処理を実行した（ステップＳ１８０）後、本抽出処理を終了（リターン）；
（１１４）スタートコードＳＣｈｏｒｄとして、V7／V7sus4コードへ解決する予定のV7／V7sus4が検出されている場合：
（１１４ａ）スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名をルートとする7コードおよびV7sus4（V度のみ）コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータを生成し、コードリストＣＬｉｓｔに登録し（図１２ＢのステップＳ１８４→Ｓ１８５）；
（１１４ｂ）上記（１１４ａ）の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Ｋｅｙに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１８６）；
（１１４ｃ）スタートコードＳＣｈｏｒｄのルート音名と同じルートを持つm7（=IIm7 of V7）コードおよびIIm7(♭5)（=IIm7(♭5) of V7）コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、情報データに、「フラグ情報」として「寄り道」を記憶したものを生成し、コードリストＣＬｉｓｔに登録した（ステップＳ１８７）後、本抽出処理を終了（リターン）；
（１１５）スタートコードＳＣｈｏｒｄとして、V7／V7sus4コードへ解決する予定の♭II7が検出されている場合：
（１１５ａ）スタートコードＳＣｈｏｒｄのルート音名に対し短２度下の音名をルートとする7コードおよびV7sus4（V度のみ）コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータを生成し、コードリストＣＬｉｓｔに登録し（ステップＳ１８８→Ｓ１８９）；
（１１５ｂ）上記（１１５ａ）の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Ｋｅｙに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録し（ステップＳ１９０）；
（１１５ｃ）スタートコードＳＣｈｏｒｄのルート音名に対し短２度下の音名からさらに完全４度下の音名をルートに持つm7（=IIm7 of V7）コードおよびIIm7(♭5)（=IIm7(♭5) of V7）コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、情報データに、「フラグ情報」として「寄り道」を記憶したものを生成し、コードリストＣＬｉｓｔに登録した（ステップＳ１９１）後、本抽出処理を終了（リターン）；
の各処理を実行する。なお、コードリストＣＬｉｓｔに登録するためにコードデータを生成する際に、フラグ情報について言及していないステップ、具体的には、ステップＳ１７２〜Ｓ１７４，Ｓ１７６〜Ｓ１７８，Ｓ１８２，Ｓ１８３では、コードデータにはフラグ情報は設定されないものとする。
【０１１８】
図１１Ａに戻り、次にＣＰＵ５は、スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7(♭5)が検出されている場合には、スタートコードＳＣｈｏｒｄの次の次に進むコード候補であって、割り込み型コード進行となるもの（以下、「次の次の割り込み型コード候補」という）を抽出して、当該次の次の割り込み型コード候補に対応するコードデータを前記次コードリストＮＣＬｉｓｔに登録する（ステップＳ１２４→Ｓ１２５）。
【０１１９】
次の次の割り込み型コード候補の抽出処理（その詳細は図示せず）では、ＣＰＵ５は、次の処理を実行する。すなわち、
（１２１）スタートコードＳＣｈｏｒｄの情報データ内の解決先コード情報から解決先コードを検出し（検出したコードのルートの度数によっては、複数の異なるタイプのものがある。たとえば、抽出したコードのルートの度数がIV度の場合、解決先コードとしてはIVMaj7，IV，IV6，IVadd9が検出される）、検出した各解決先コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、次コードリストＮＣＬｉｓｔに登録し；
（１２２）上記（１２１）の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Ｋｅｙに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、次コードリストＮＣＬｉｓｔに登録し；
（１２３）スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名のさらに完全４度上の音名をルートとする7コードおよび7sus4コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「フラグ情報」として「エクステンデッドV7／V7sus4」を記憶したものを生成し、次コードリストＮＣＬｉｓｔに登録し；
（１２４）スタートコードＳＣｈｏｒｄのルート音名に♭を付けた音名のさらに１半音下の音名をルートとする7コードのコードネームおよびディグリーネームを含むコードデータであって、情報データに、「フラグ情報」として「エクステンデッド♭II7」を記憶したものを生成し、次コードリストＮＣＬｉｓｔに登録；
の各処理を実行する。
【０１２０】
次にＣＰＵ５は、前記ステップＳ４７およびＳ４８と同様にして、ノートイベントリストＮＬｉｓｔとコードリストＣＬｉｓｔに基づいて、コードデータを１つ選出し（ステップＳ１２６）、選出したコードデータを検出コードＣｈｏｒｄに記憶する（ステップＳ１２７）。
【０１２１】
そしてＣＰＵ５は、検出コードＣｈｏｒｄに応じて次の処理を実行する。すなわち、
（１３１）検出コードＣｈｏｒｄが前記（１１１ａ）または（１１１ｂ）の登録処理によってコードリストＣＬｉｓｔに登録されたものである場合：次コードリストＮＣＬｉｓｔから、情報データ内のフラグ情報が「エクステンデッド♭II7」であるコードデータを削除した（ステップＳ１２８→Ｓ１３２）後、ステップＳ１３１に移行；
（１３２）検出コードＣｈｏｒｄが前記（１１１ｃ）の登録処理によってコードリストＣＬｉｓｔに登録されたものである場合：次コードリストＮＣＬｉｓｔから、情報データ内のフラグ情報が「エクステンデッドV7／V7sus4」であるコードデータを削除した（ステップＳ１２８→Ｓ１２９→Ｓ１３０）後、ステップＳ１３１に移行；
（１３３）上記（１３１）および（１３２）のいずれの場合にも該当しない場合：何もせずにステップＳ１３１に移行；
のいずれかの処理を実行する。
【０１２２】
ステップＳ１３１では、ＣＰＵ５は、コードリストＣＬｉｓｔを初期化（クリア）した後、次コードリストＮＣＬｉｓｔ内のすべてのコードデータをコードリストＣＬｉｓｔに記憶させる。そしてＣＰＵ５は、本コード進行形成用コード検出処理を終了させる（リターン）。
【０１２３】
上記（１３１）および（１３２）の削除処理では、検出コードＣｈｏｒｄの次に進むコードデータとして、つながりに無理のあるコード候補を削除するようにしている。
【０１２４】
次に本コード進行形成用コード検出処理が起動された場合、スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報は「割り込み」であり、かつコードリストＣＬｉｓｔには１つ以上のコードデータが登録されているので、処理はステップＳ１４４に進む。
【０１２５】
ステップＳ１４４では、検出コードＣｈｏｒｄの情報データ内のフラグ情報が「寄り道」であるかどうかを判別し、「寄り道」でなければ、ＣＰＵ５は、前記ステップＳ１２６およびＳ１２７と同様にして、ノートイベントリストＮＬｉｓｔとコードリストＣＬｉｓｔに基づいて、コードデータを１つ選出し（ステップＳ１５０）、選出したコードデータを検出コードＣｈｏｒｄに記憶する（ステップＳ１５１）。そしてＣＰＵ５は、この検出コードＣｈｏｒｄの情報データ内のフラグ情報が「なし」であれば、割り込み型コード進行形成用コード検出処理を終了させるために、当該フラグ情報を「Ｅｎｄ」に設定した（ステップＳ１５２→Ｓ１４９）後、本コード進行形成用コード検出処理を終了する（リターン）一方、当該フラグ情報が「なし」でなければ、割り込み型コード進行形成用コード検出処理を継続させるために、何もせずに本コード進行形成用コード検出処理を終了する（ステップＳ１５２→リターン）。
【０１２６】
一方、ステップＳ１４４の判別の結果、検出コードＣｈｏｒｄの情報データ内のフラグ情報が「寄り道」であれば、ＣＰＵ５は、前記ステップＳ１２６およびＳ１２７と同様にして、ノートイベントリストＮＬｉｓｔとコードリストＣＬｉｓｔに基づいて、コードデータを１つ選出し（ステップＳ１４５）、選出したコードデータを検出コードＣｈｏｒｄに記憶する（ステップＳ１４６）。そしてＣＰＵ５は、この検出コードＣｈｏｒｄ（のコードタイプ）が7コードまたは7sus4コードに該当すれば、前記ＥＰフラグをセットし（ステップＳ１４７→Ｓ１４８）、検出コードＣｈｏｒｄの情報データ内のフラグ情報を「Ｅｎｄ」に設定した（ステップＳ１４９）後、本コード進行形成用コード検出処理を終了する（リターン）一方、この検出コードＣｈｏｒｄが7コードまたは7sus4コードに該当しなければ、ステップＳ１４８をスキップして、処理を前記ステップＳ１４９に進める。
【０１２７】
前記ステップＳ１２４で、スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7(♭5)が検出されていない場合には、ＣＰＵ５は、前記ステップＳ１２６およびＳ１２７と同様にして、ノートイベントリストＮＬｉｓｔとコードリストＣＬｉｓｔに基づいて、コードデータを１つ選出し（図１１ＣのステップＳ１３３）、選出したコードデータを検出コードＣｈｏｒｄに記憶する（ステップＳ１３４）。そしてＣＰＵ５は、次の処理を実行する。すなわち、
（１４１）スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のV7またはV7sus4または♭II7が検出されている場合：
（１４１ａ）検出コードＣｈｏｒｄの情報データ内のフラグ情報が「なし」の場合：検出コードＣｈｏｒｄの情報データ内のフラグ情報を「Ｅｎｄ」に設定（ステップＳ１３６→Ｓ１３７→Ｓ１３８）；
（１４１ｂ）検出コードＣｈｏｒｄの情報データ内のフラグ情報が「なし」でない場合：本コード進行形成用コード検出処理を終了（ステップＳ１３６→Ｓ１３７→リターン）；
（１４２）スタートコードＳＣｈｏｒｄとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のV7またはV7sus4または♭II7が検出されていない場合：
（１４２ａ）検出コードＣｈｏｒｄの情報データ内のフラグ情報が「なし」の場合：
（１４２ａ１）検出コードＣｈｏｒｄが7コードまたは7sus4コードに該当する場合：ＥＰフラグをセットした（ステップＳ１３６→Ｓ１３９→Ｓ１４０→Ｓ１４１）後、検出コードＣｈｏｒｄの情報データ内のフラグ情報を「Ｅｎｄ」に設定（ステップＳ１３８）；
（１４２ａ２）検出コードＣｈｏｒｄが7コードまたは7sus4コードに該当しない場合：検出コードＣｈｏｒｄの情報データ内のフラグ情報を「Ｅｎｄ」に設定（ステップＳ１３６→Ｓ１３９→Ｓ１４０→Ｓ１３８）；
（１４２ｂ）検出コードＣｈｏｒｄの情報データ内のフラグ情報が「なし」でない場合：コードリストＣＬｉｓｔから、情報データ内のフラグ情報が「寄り道」であるコードデータを削除（ステップＳ１３６→Ｓ１３９→Ｓ１４２）；
（１４２ｂ１）コードリストＣＬｉｓｔが空の場合：検出コードＣｈｏｒｄの情報データ内のフラグ情報を「Ｅｎｄ」に設定（ステップＳ１４３→Ｓ１３８）；
（１４２ｂ２）コードリストＣＬｉｓｔが空でない場合：本コード進行形成用コード検出処理を終了（ステップＳ１４３→リターン）；
の各処理を実行する。
【０１２８】
処理が前記ステップＳ１２４から前記ステップＳ１３３に進む場合は、スタートコードＳＣｈｏｒｄの次に進むコード、つまり検出コードＣｈｏｒｄとして検出されるものは、割り込み型コード進行の終点となるコードまたは「寄り道」となるコードまたはエクステンデッド型コード進行を形成するためのコードのいずれかである。そして、検出コードＣｈｏｒｄが割り込み型コード進行の終点となるコードの場合が、前記（１４１ａ）および（１４２ａ）の場合であり、検出コードＣｈｏｒｄが「寄り道」となるコードの場合が、前記（１４２ｂ）の場合であり、検出コードＣｈｏｒｄがエクステンデッド型コード進行を形成するためのコードの場合が、前記（１４１ｂ）の場合である。
【０１２９】
前記図１１ＡのステップＳ１２１で、スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報が「エクステンデッドV7／V7sus4」または「エクステンデッド♭II7」のときには、ＣＰＵ５は、前述のようにエクステンデッド型コード進行を形成するためのコードデータを検出する。
【０１３０】
エクステンデッド型コード進行を形成するためのコードデータの検出処理（以下、「エクステンデッド型コード進行形成用コード検出処理」という）では、まずＣＰＵ５は、スタートコードＳＣｈｏｒｄの次に進むコード候補であって、エクステンデッド型コード進行となるもの（以下、「次のエクステンデッド型コード候補」という）を抽出して、当該次のエクステンデッド型コード候補に対応するコードデータをコードリストＣＬｉｓｔに登録する、次のエクステンデッド型コード候補の抽出処理を実行する（図１１ＢのステップＳ１５３）。
【０１３１】
この次のエクステンデッド型コード候補の抽出処理（その詳細は図示せず）では、ＣＰＵ５は、
（１５１）スタートコードＳＣｈｏｒｄのルート音名の完全４度上の音名をルートに持つ7コードと7sus4コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「フラグ情報」として「エクステンデッドV7／V7sus4」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（ただし、コードリストＣＬｉｓｔ中に、同じコードネーム（ディグリーネーム）のコードデータが既に登録されていれば、追加登録しない）；
（１５２）スタートコードＳＣｈｏｒｄのルート音名の１半音下の音名をルートに持つ7コードを検出し、検出したコードに対応するコードネームおよびディグリーネームを含むコードデータであって、その情報データに、「フラグ情報」として「エクステンデッド♭II7」を記憶したものを生成し、コードリストＣＬｉｓｔに追加（ただし、コードリストＣＬｉｓｔ中に、同じコードネーム（ディグリーネーム）のコードデータが既に登録されていれば、追加登録しない）；
の各処理を実行する。
【０１３２】
次にＣＰＵ５は、ステップＳ１５４において、
（１６１）スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報が「エクステンデッドV7／V7sus4」の場合：スタートコードＳＣｈｏｒｄのルート音名に対し完全４度上の音名をルートとするMaj7，6，add9，m7，m6，mMaj7，madd9のコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録；
（１６２）スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報が「エクステンデッド♭II7」の場合：スタートコードＳＣｈｏｒｄのルート音名に対し１半音下の音名をルートとするMaj7，6，add9，m7，m6，mMaj7，madd9のコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストＣＬｉｓｔに登録；
のいずれかの処理を実行する。
【０１３３】
次にＣＰＵ５は、ノートイベントリストＮＬｉｓｔとコードリストＣＬｉｓｔとさらに使用可能なすべてのコードに基づいて、コードデータを１つ選出し（ステップＳ１５５）、選出したコードデータを検出コードＣｈｏｒｄに記憶する（ステップＳ１５６）。ここで、使用可能なすべてのコードとは、すべての調のダイアトニック・スケールの各構成音名を（使用可能な）ディグリーネームの度数に代入して得られるすべてのコードを意味する。
【０１３４】
そしてＣＰＵ５は、検出コードＣｈｏｒｄの情報データ内のフラグ情報が「なし」かどうかを判別する（ステップＳ１５７）。この判別では、検出コードＣｈｏｒｄがエクステンデッド型コード進行の終点となるコードかどうかを判別し、当該フラグ情報が「なし」でないとき、つまり「エクステンデッドV7／V7sus4」または「エクステンデッド♭II7」のときには、エクステンデッド型コード進行形成用コード検出処理が続くので、エクステンデッド・ドミナントが続いて検出されることになる。上記ステップＳ１５７の判別の結果、当該フラグ情報が「なし」でないときには、ＣＰＵ５は、本コード進行形成用コード検出処理を直ちに終了する（ステップＳ１５７→リターン）一方、当該フラグ情報が「なし」のときには、ＣＰＵ５は、次の処理を実行する。すなわち、
（１７１）スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報が「エクステンデッドV7／V7sus4」の場合：
（１７１ａ）検出コードＣｈｏｒｄはスタートコードＳＣｈｏｒｄに対しルートが完全４度上の音名のMaj7／6／add9／m7／m6／mMaj7／madd9のいずれかのコードに該当する場合：
（１７１ａ１）検出コードＣｈｏｒｄとその異名同音コードまで含めたコードネームの中で調情報Ｋｅｙで扱うことができるコードネームがある場合：調情報Ｋｅｙで扱うことができると判断されたコードネームとディグリーネームを含むコードデータを生成して、検出コードＣｈｏｒｄに記憶（ステップＳ１６１）；
（１７１ａ２）検出コードＣｈｏｒｄとその異名同音コードまで含めたコードネームの中で調情報Ｋｅｙで扱うことができるコードネームがない場合：転調と判断して、前記図７のステップＳ４２と同様にして、新しい調情報を取得し（ステップＳ１６５）、前記ステップＳ４３と同様にして、取得した調情報を調情報Ｋｅｙに記憶し（ステップＳ１６６）、検出コードＣｈｏｒｄに含まれるコードネームとディグリーネームを調情報Ｋｅｙに合わせた上で、検出コードＣｈｏｒｄに記憶（ステップＳ１６７）；
（１７１ｂ）検出コードＣｈｏｒｄはスタートコードＳＣｈｏｒｄに対しルートが完全４度上の音名のMaj7／6／add9／m7／m6／mMaj7／madd9のいずれかのコードに該当しない場合：
（１７１ｂ１）検出コードＣｈｏｒｄは調情報Ｋｅｙで扱うことができるコードである場合：上記（１７１ａ１）の処理に移行；
（１７１ｂ２）検出コードＣｈｏｒｄは調情報Ｋｅｙで扱うことができるコードでない場合：上記（１７１ａ２）の処理に移行；
（１７２）スタートコードＳＣｈｏｒｄの情報データ内のフラグ情報が「エクステンデッドV7／V7sus4」でない場合：
（１７２ａ）検出コードＣｈｏｒｄはスタートコードＳＣｈｏｒｄに対しルートが１半音下の音名のMaj7／6／add9／m7／m6／mMaj7／madd9のいずれかのコードに該当する場合：上記（１７１ａ１）または（１７１ａ２）のいずれかの処理に移行；
（１７２ｂ）検出コードＣｈｏｒｄはスタートコードＳＣｈｏｒｄに対しルートが１半音下の音名のMaj7／6／add9／m7／m6／mMaj7／madd9のいずれかのコードに該当しない場合：上記（１７１ｂ１）または（１７１ｂ２）のいずれかの処理に移行；
のいずれかの処理を実行する。
【０１３５】
上記（１７１ａ１），（１７１ａ２），（１７１ｂ１）および（１７１ｂ２）の各処理における判別の際に使用する調情報Ｋｅｙは、前記図７のステップＳ４２およびＳ４３で取得されて記憶されたものである。つまり、調情報Ｋｅｙは基本的に、前記（５１）通常コード検出処理で取得され、前記（５３）非通常コード検出処理では取得されない。上記（１７１ａ２）の処理で調を取得しているのは、検出コードＣｈｏｒｄが調情報Ｋｅｙで扱うことができず、転調と判断されるからである。
【０１３６】
次にＣＰＵ５は、検出コードＣｈｏｒｄの情報データ内のフラグ情報を「Ｅｎｄ」に設定した（ステップＳ１６２）後、本コード進行形成用コード検出処理を終了する。
【０１３７】
なお本実施の形態では、検出コードＣｈｏｒｄは、発音に用いられた（前記図５ＢのステップＳ１５参照）後、通常コード検出フラグがセット状態であれば、調情報Ｋｅｙとともに出力結果リストＲＬｉｓｔに追加登録される（ステップＳ１７参照）が、通常コード検出フラグの状態に拘わらず、調情報Ｋｅｙとともに出力結果リストＲＬｉｓｔに追加登録されるようにしてもよい。出力結果リストＲＬｉｓｔに追加登録される検出コードＣｈｏｒｄ（と調情報Ｋｅｙ）の個数については言及していないが、本実施の形態では、出力結果リストＲＬｉｓｔの初期化は、前記図５ＡのステップＳ３でのみなされるので、自動伴奏がスタートした以降は、自動伴奏がストップしたときに、設定変更があった場合にのみなされる。つまり、出力結果リストＲＬｉｓｔの初期化は、自動伴奏を使った演奏処理が起動されている間、特別な場合を除いてなされないので、自動伴奏がスタートした以降に検出されたコードデータのほとんどは、登録されている。このようしたのは、説明を簡略化するために過ぎず、最新に検出されたコードデータを任意の所定個数、記憶するようにし、新たなコードデータが検出される度に更新するようにしてもよい。また、検出されたコードデータを登録する場合、本実施の形態では、検出コードＣｈｏｒｄをそのまま、調情報Ｋｅｙと一緒に登録するようにしたが、これに限らず、コードネームのみを登録するようにしてもよいし、その時点での調情報と対応付けたディグリーネームを登録するようにしてもよい。さらに、コードネームとディグリーネームの両方、つまり図４のコードデータから情報データを除いたものを記憶するようにしてもよい。なお、検出したコードがコードネームしか登録されていない場合には、次回以降のコード検出時に参照する際には、その都度、調情報を用いてディグリーネームに展開するようにしてもよい。
【０１３８】
本実施の形態では、解決先コードとして抽出される条件として、ダイアトニック・スケール・コードであることを採用したが、ダイアトニック・スケール・コード以外のコードも解決先コードとして抽出されるようにしてもよい。その場合、解決先コードがさらに多様化し、さらに多様なコード進行が生成されることになる。
【０１３９】
また解決先コード情報は、本実施の形態では、調の主音に対する解決先コードの根音の度数とし、解決先コードを調から可能な限り全て割り出すようにしたが、これに限らず、解決先コードのディグリーネームを予め全て記憶するようにしておいてもよい。さらに、コードデータの情報データ内の「ディグリー情報」を解決先コードの割り出しに使うようにしてもよい。「ディグリー情報」は、本実施の形態では、フラグ情報が「割り込み」のときのみ記憶されているが、コードデータを新規に生成する毎に適切な情報を記憶するようにしてもよい。「解決先コード情報」や「ディグリー情報」は、本実施の形態では、コードデータ毎に持たせるようにしているが、リストで管理するなどして必要なときに参照する仕組みにしてもよい。
【０１４０】
入力される演奏データは、本実施の形態では、ユーザがリアルタイム演奏することで発生する演奏データを想定しているが、これに限らず、たとえば、録音された演奏データを先読みせずに順次再生したものを入力してもよい。また本実施の形態では、ユーザがリアルタイム演奏する際に利用する演奏操作子として、鍵盤を採用したが、これに限らず、たとえばギターなどの弦楽器タイプでもよい。入力される演奏データがオーディオ信号の場合、遅くとも各コード検出タイミングにおいて候補コードからコードを１つ選出するために演奏データを参照するまでに、少なくとも発音タイミング情報と音高情報を持つ音符情報に変換できていればよい。
【０１４１】
コード候補や次のコード候補の情報の持ち方は、本実施の形態で採用したフォーマットのものに限らない。また、コード候補の抽出方法やコード候補からの選出方法についての処理の順番やまとめ方も、本実施の形態で採用したものに限らない。
【０１４２】
通常コード検出時に抽出されるコード候補群のうち、解決先となり得るコード候補に解決するコード候補や、解決先となり得るコード候補への解決に至るまでに経過するコードに該当するコード候補には、本実施の形態では、フラグを立てて他のコード候補と識別できるようにしているが、これに限らず、たとえばリストを２種類用意するなど、別の方法で識別するようにしてもよい。本実施の形態では、通常コード検出においてフラグ付きのコード候補が検出された場合、独特なコード進行が始まるとみなし、次に続くコード検出タイミングからは独特なコード進行を生成するコード検出方法でコード検出を行うようにしている。独特なコード進行には、セカンダリードミナントからの解決やセカンダリードミナントのツーファイブ進行、さらにドミナント7thコードの連続などがある。コード進行の長さは、本実施の形態では、決まっていないが、制限するようにしてもよい。
【０１４３】
なお本実施の形態では、入力された演奏データに対して音楽的なつながりのあるコードを検出し、検出したコードに基づいて自動伴奏を行うようにしたが、これに限らず、検出したコードに基づいて、入力された演奏データに対するハーモニー音を生成するようにしてもよい。
【０１４４】
また本実施の形態では、参照対象の演奏データについて何の処理も施さず、入力されたものをそのまま使うようにしたが、これに限らず、入力された演奏データから装飾音やミスタッチと推測される音符データを取り除いた後、コード検出を行うようにすると、コード検出の精度がさらに向上する。
【０１４５】
さらに本実施の形態では、図３の各調におけるコードの機能とディグリーネームの対応表に記載のコードの種類は、たとえばＲＯＭ６内に予め設定されて記憶されているが、任意に追加登録できるかどうかには言及していなかった。任意に追加登録できるようになっていた方が好ましいが、追加登録できないようになっていてもよい。
【０１４６】
また本実施の形態では、次の次のコード候補群を抽出するケースとして、解決予定先コードへのセカンダリードミナントとそのツーファイブの進行を例に挙げて説明したが、さらにその次のコード候補群を抽出するケースも考えられる。たとえば、上記進行にエクステンデッド・ドミナントを併用した進行、具体的には、E7（エクステンデッド・ドミナント）→ A7（V7 of II）→ Dm7（解決先IIm7）を抽出することも考えられる。このコード進行の場合、エクステンデッド・ドミナント（E7）とセカンダリードミナント（A7）をそれぞれツーファイブ化することができ、
Bm7(♭5)（= IIm7(♭5) of Extended）→ E7（= Extended）→ Em7(♭5)（= IIm7(♭5) of Secondary）→ A7（= V7 of II）→ Dm7（= IIm7）
となる。エクステンデッド・ドミナントとそのツーファイブを考えて行くと、さらに続く候補群を前もって抽出することができる。
【０１４７】
なお、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【０１４８】
この場合、記憶媒体から読出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードおよび該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１４９】
プログラムコードを供給するための記憶媒体としては、たとえば、フレキシブルディスク、ハードディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。また、通信ネットワークを介してサーバコンピュータからプログラムコードが供給されるようにしてもよい。
【０１５０】
また、コンピュータが読出したプログラムコードを実行することにより、上述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【０１５１】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【符号の説明】
【０１５２】
１…演奏操作子（入力手段），５…ＣＰＵ（取得手段、検知手段、第１の選出手段、第２の選出手段、抽出手段、生成手段、削除手段、寄り道コード候補追加手段、エクステンデッド・ドミナント候補追加手段）
【図１】
0005712702.tif 000002
【図２】
0005712702.tif 000003
【図３Ａ】
0005712702.tif 000004
【図３Ｂ】
0005712702.tif 000005
【図４】
0005712702.tif 000006
【図５Ａ】
0005712702.tif 000007
【図５Ｂ】
0005712702.tif 000008
【図６】
0005712702.tif 000009
【図７】
0005712702.tif 000010
【図８Ａ】
0005712702.tif 000011
【図８Ｂ】
0005712702.tif 000012
【図９Ａ】
0005712702.tif 000013
【図９Ｂ】
0005712702.tif 000014
【図１０】
0005712702.tif 000015
【図１１Ａ】
0005712702.tif 000016
【図１１Ｂ】
0005712702.tif 000017
【図１１Ｃ】
0005712702.tif 000018
【図１２Ａ】
0005712702.tif 000019
【図１２Ｂ】
0005712702.tif 000020