(58)【調査した分野】(Int.Cl.,DB名)
前記生成手段がコード候補群を生成する際に、該コード候補群を構成する複数のコード候補の1つ前に寄り道可能なコード候補を1乃至複数抽出して当該コード候補群に追加する寄り道コード候補追加手段をさらに有することを特徴とする請求項1または2に記載のコード検出装置。
前記第2の選出手段によって選出されたコードが前記解決先コードである場合にはさらに、当該選出されたコードがエクステンデッド・ドミナントの始点となり得るかどうかを判定し、その判定の結果、当該選出されたコードがエクステンデッド・ドミナントの始点となり得るときには、前記検知手段が次のコードの検出タイミングを検知したことに応じて、前記第1の選出手段が抽出する複数のコード候補に、エクステンデッド・ドミナントとなるコード候補も1乃至複数抽出して追加するエクステンデッド・ドミナント候補追加手段をさらに有することを特徴とする請求項1〜3のいずれかに記載のコード検出装置。
前記第2の選出手段によって選出されたコードが前記解決先コードではなく、エクステンデッド・ドミナントのコードである場合には、前記生成手段は、当該コードの検出タイミングの次の検出タイミングに対応するコード候補群には、少なくとも、前記選出されたエクステンデッド・ドミナントのコードに続くエクステンデッド・ドミナントのコード候補1乃至複数と、当該選出されたコードが解決するコード候補1乃至複数を抽出して含ませることを特徴とする請求項4に記載のコード検出装置。
【発明を実施するための形態】
【0020】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【0021】
図1は、本発明の一実施の形態に係るコード検出装置を適用した電子楽器の概略構成を示すブロック図である。
【0022】
同図に示すように、本実施の形態の電子楽器は、ユーザの演奏操作に応じて音高情報を含む演奏データを入力する鍵盤を含む演奏操作子1と、各種情報を入力するための複数のスイッチやロータリエンコーダを含む設定操作子2と、演奏操作子1の操作状態を検出する検出回路3と、設定操作子2の操作状態を検出する検出回路4と、装置全体の制御を司るCPU5と、該CPU5が実行する制御プログラムや各種テーブルデータ等を記憶するROM6と、演奏データ、各種入力情報および演算結果等を一時的に記憶するRAM7と、タイマ割込み処理における割込み時間や各種時間を計時するタイマ8と、後述するようにCPU5が供給するコード情報に基づいて演奏データ(伴奏音を発生させるためのもの)を生成する自動伴奏装置9と、各種情報等を表示する、たとえばLCD(liquid crystal display)およびLED(light emitting diode)等を備えた表示装置10と、前記制御プログラムを含む各種アプリケーションプログラムや各種楽曲データ、各種データ等を記憶する記憶装置11と、外部MIDI(musical instrument digital interface)機器等の外部機器100を接続し、この外部機器100とデータの送受信を行う通信インターフェース(I/F)12と、演奏操作子1から入力された演奏データや、前記自動伴奏装置9によって生成された演奏データ等を楽音信号に変換する音源回路13と、該音源回路13からの楽音信号に各種効果を付与するための効果回路14と、該効果回路14からの楽音信号を音響に変換する、たとえば、DAC(digital-to-analog converter)やアンプ、スピーカ等のサウンドシステム15とにより構成されている。
【0023】
上記構成要素3〜14は、バス16を介して相互に接続され、CPU5および自動伴奏装置9にはタイマ8が接続され、通信I/F12には外部機器100が接続され、音源回路13には効果回路14が接続され、効果回路14にはサウンドシステム15が接続されている。
【0024】
自動伴奏装置9は、たとえば、ROM6に予め記憶されたシーケンサソフトウェアをCPU5に実行させることによって実現され、前述のように、供給されたコード情報に基づいて演奏データを生成し、生成した演奏データを音源回路13に供給することで、伴奏音を発生させる。また、自動伴奏装置9は、たとえば、ROM6に予め記憶された各種伴奏スタイルデータからユーザが選択したいずれかの伴奏スタイルデータを再生して、演奏データを生成する機能も備えている。この機能を営むときに、自動伴奏装置9は、タイマ8から供給される時間情報に基づいて伴奏スタイルデータを再生する。なお、本発明の特徴は、自動伴奏装置9の構成や作用にある訳ではないので、自動伴奏装置9の構成や作用についてのこれ以上の説明は行わない。
【0025】
記憶装置11は、たとえば、フレキシブルディスク(FD)、ハードディスク(HD)、CD−ROM、DVD(digital versatile disc)、光磁気ディスク(MO)および半導体メモリなどの記憶媒体とその駆動装置である。記憶媒体は駆動装置から着脱可能であってもよいし、記憶装置11自体が本実施の形態の電子楽器から着脱可能であってもよい。あるいは、記憶媒体も記憶装置11も着脱不可能であってもよい。なお記憶装置11(の記憶媒体)には、前述のように、CPU5が実行する制御プログラムも記憶でき、ROM6に制御プログラムが記憶されていない場合には、この記憶装置11に制御プログラムを記憶させておき、それをRAM7に読み込むことにより、ROM6に制御プログラムを記憶している場合と同様の動作をCPU5にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。
【0026】
通信I/F12には、図示例では外部機器100が接続されているが、これに限られず、たとえばLAN(local area network)やインターネット、電話回線等の通信ネットワークを介して、サーバコンピュータが接続されるようにしてもよい。この場合、記憶装置11に上記各プログラムや各種パラメータが記憶されていなければ、通信I/F12はサーバコンピュータからプログラムやパラメータをダウンロードするために用いられる。クライアントとなる電子楽器は、通信I/F12および通信ネットワークを介してサーバコンピュータへとプログラムやパラメータのダウンロードを要求するコマンドを送信する。サーバコンピュータは、このコマンドを受け、要求されたプログラムやパラメータを、通信ネットワークを介して電子楽器へと配信し、電子楽器が通信I/F12を介して、これらプログラムやパラメータを受信して記憶装置11に蓄積することにより、ダウンロードが完了する。
【0027】
なお、本実施の形態の電子楽器は、上述の構成から分かるように電子鍵盤楽器上に構築されたものであるが、これに限らず、鍵盤を外部接続した汎用的なパーソナルコンピュータ上に構築してもよい。
【0028】
以上のように構成された電子楽器が実行する制御処理を、まず
図2〜
図4を参照してその概要を説明し、次に
図5〜
図10を参照して詳細に説明する。
【0029】
図2は、コード検出タイミングの設定例を示す図であり、同図には、演奏曲として4/4拍子の曲を選択し、1拍目と3拍目をコード検出基準位置に設定し、そのコード検出基準位置の250ms前から50ms後までの期間をコード検出タイミングに設定する例が示されている。なお図示例では、1拍目にはコード検出タイミングが描かれていないが、これは、どちらか一方の拍位置にコード検出タイミングを描いておけば、他方の拍位置にも同様にコード検出タイミングが設定されていることが容易に分かるからである。また、詳細は後述するが、コード検出タイミングをどの位置にどれくらいの時間幅で、どれくらいの個数(あるいは、どれくらいの頻度で)設定するかは、ユーザが自由に選択できるようになっている。
【0030】
本実施の形態の電子楽器は、ユーザが前記鍵盤を用いて演奏することで、リアルタイム入力された演奏データをそのまま前記音源回路13に供給して発音するとともに、リアルタイム入力された演奏データに対して音楽的なつながりのあるコードを検出して前記自動伴奏装置9に供給することにより、伴奏音も発音するようにしている。前記コード検出タイミングの期間(時間幅)は、コードを検出するために参照する演奏データを入力する期間である。つまり、コード検出タイミングの期間内に入力された演奏データのみが、伴奏音を発音するためのコードを検出する際に参照される。コードの検出は、まず、
(A)基本コード候補抽出処理
(B)追加コード候補抽出処理
の2種類の抽出処理によって、検出候補となるコード候補を抽出する。
【0031】
上記(A)の抽出処理では、
図3A(メジャ調の場合)および
図3B(マイナ調の場合)のコードの機能とディグリーネームの対応表のうち、現在の調に対応する方を参照し、前回検出されたコードの機能から次に進むことのできる機能をすべて抽出する。そして、同対応表を参照して、抽出した機能を持つディグリーネームをダイアトニック・スケール・コードに属するものも、ダイアトニック・スケール・コード以外に属するものもすべて抽出する。さらに、抽出した各ディグリーネームにそれぞれ対応するコードネームを現在の調に基づいて検出し、検出した各コードネームと、該各コードネームにそれぞれ対応するディグリーネームとを含むコードデータを生成して、前記RAM7に確保したコードリストCList(図示せず)に登録する。ただし、所定の条件が満たされた場合、ダイアトニック・スケール・コードに属するものを抽出しないことがあるが、ここでは、これ以上説明しない。
【0032】
図4は、コードデータのデータフォーマットの一例を示す図であり、図示例では、コードデータは、コードネーム、ディグリーネームおよび情報データによって構成され、情報データは、解決先コード情報、このコード(解決先コード)に至るまでのディグリー情報(以下、「ディグリー情報」と略して言う)およびフラグ情報によって構成されている。ただし、情報データは常に、上記3種類の情報によって構成されることを意味しない。つまり、コードデータによっては、解決先コード情報はあるが、フラグ情報がないもの、解決先コード情報はないが、フラグ情報があるもの、解決先コード情報およびフラグ情報共にないものがある。しかし、解決先コード情報がある場合には、ディグリー情報も常にあり、解決先コード情報がない場合には、ディグリー情報も常にない。上記(A)の抽出処理によってコードリストCListに登録されるコードデータはいずれも、情報データを含んでいない。なお、解決先コード情報、ディグリー情報およびフラグ情報の意味内容については、次の上記(B)の抽出処理の説明の中で説明する。
【0033】
上記(B)の抽出処理は、
(B1)割り込み型コード進行を形成するためのコード候補の抽出処理
(B2)エクステンデッド型コード進行を形成するためのコード候補の抽出処理
によって構成されている。そして、上記割り込み型コード進行とは、本実施の形態では、
(B1a)メジャ系セカンダリードミナント/ツーファイブ → ダイアトニック・スケール・コードのうちの所定のコード(メジャ系解決先コード)
(B1b)マイナ系セカンダリードミナント/ツーファイブ → ダイアトニック・スケール・コードのうちの所定のコード(マイナ系解決先コード)
(B1c)ダブルドミナント → ダイアトニック・スケール・コードのうちのドミナント7th系のコード(ドミナント7th系解決先コード)
であり、上記エクステンデッド型コード進行とは、本実施の形態では、
(B2a)エクステンデッド・ドミナント → ダイアトニック・スケール・コード
(B2b)エクステンデッド・ドミナント → エクステンデッド・ドミナント →ダイアトニック・スケール・コード
である。
【0034】
上記(B1)の抽出処理では、まず、前記(A)の抽出処理によってコードリストCListに登録されたコードデータから、上記(B1a)のメジャ系解決先コードとなるもの、上記(B1b)のマイナ系解決先コードとなるもの、および、上記(B1c)のドミナント7th系解決先コードとなるものをそれぞれ抽出する。ここで、解決先コードとは、安定的なコード進行、つまり上記(A)の抽出処理によって抽出されるコードデータを繋げて行くことによって形成される、骨格となるコード進行(以下、「骨格コード進行」という)に異質なコード進行(つまり、上記割り込み型コード進行)を割り込ませた場合に、この異質なコード進行に調和しながら再度安定化させるコードをいう。
【0035】
次に、抽出された各解決先コードにそれぞれ進行する割り込み型コード進行の始点となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに「解決先コード情報」、「ディグリー情報」および「フラグ情報」を記憶したものを生成し、コードリストCListに追加する。ここで、「解決先コード情報」とは、当該コードデータに対する解決先コードの情報であり、「解決先コード情報」には、本実施の形態では「解決先コードのルートの度数」が記憶される。「ディグリー情報」とは、解決先コードに至るまでのディグリーネームの推移(コード進行)を示す情報であり、「ディグリー情報」には、本実施の形態では「第1のディグリーネーム of 第2のディグリーネーム of 解決先コードのルートの度数」(ただし、「第2のディグリーネーム」がない場合もある)が記憶される。「フラグ情報」とは、当該コードデータの種類を示すものであり、「フラグ情報」には、割り込み型コード進行を形成するためのコードであることを示す「割り込み」が記憶される。
【0036】
前記(B2)の抽出処理では、前記エクステンデッド型コード進行の始点となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに「フラグ情報」を記憶したものを生成し、コードリストCListに追加する。このとき「フラグ情報」には、検出したコードの種類に応じて、「エクステンデッドV7/V7sus4」または「エクステンデッド♭II7」のいずれかが記憶される。
【0037】
なお、(B)の抽出処理が実行されると、(B1)の抽出処理は常に実行されるが、(B2)の抽出処理は、所定の条件が満たされた場合(後述するEP(extended plus)フラグがセット状態の場合)に実行される。どの場合にEPフラグをセット/リセットするかについては、制御処理の詳細で後述する。
【0038】
このようにしてコードリストCListに登録されたコードデータの中から、入力された演奏データに基づいてコードデータを1つ選出し、選出したコードデータを前記RAM7に確保した検出コードChord(図示せず)に記憶する。
【0039】
検出コードChordが、前記(A)の抽出処理によって抽出された基本コードであれば、次のコード検出タイミングでも、(A)および(B)の抽出処理が実行されるが、検出コードChordが、前記(B)の抽出処理によって抽出された追加コードであれば、次のコード検出タイミングでは、
(C)コード進行形成用コード検出処理
が実行される。
【0040】
この(C)コード進行形成用コード検出処理では、RAM7に確保したスタートコードSChord(図示せず)に記憶されている前回検出されたコードデータを始点とし、当該コードデータの種類(当該コードデータの情報データ内のフラグ情報が「割り込み」か「エクステンデッドV7/V7sus4」あるいは「エクステンデッド♭II7」か)に応じて、割り込み型コード進行またはエクステンデッド型コード進行のいずれか一方を形成するためのコードデータを1つ選出し、選出したコードデータを検出コードChordに記憶する。
【0041】
この(C)コード進行形成用コード検出処理は、その後、割り込み型コード進行またはエクステンデッド型コード進行の終点となるコードデータが検出されるまで継続して実行され、当該終点となるコードデータが検出されると、検出コードChordの情報データ内のフラグ情報が「End」に設定される。これにより、次のコード検出タイミングでは、再度(A)および(B)の抽出処理が実行されるようになる。
【0042】
なお、割り込み型コード進行を形成するためのコードデータの検出中には、「寄り道」となるコードデータ(情報データ内のフラグ情報に「寄り道」が記憶されたもの)も検出可能に構成されている。
【0043】
また、各コード検出タイミングで検出された検出コードChordは、自動伴奏装置9に出力されて発音される。
【0044】
前記(A)および(B)の抽出処理または前記(C)の検出処理を開始してから1つのコードを選出して自動伴奏装置9に出力するまでのコード検出処理(後述する「制御処理の詳細」では、「(5)コードの検出タイミング時処理」に相当する)は、
図2の例では、1拍目と3拍目に実行されるが、より厳密には、当該各拍のコード検出タイミングの期間の末尾、つまり時間T3に実行の開始が指示される。これは、コード検出処理で参照する演奏データの検出期間をコード検出タイミングの全期間、つまり期間T1〜T3としているからである。
【0045】
このように本実施の形態の電子楽器では、次に進行するコードとして、音楽的なつながりのあるコード候補を抽出し、抽出したコード候補の中から、リアルタイム入力された演奏データと調和するコードを検出するようにしたので、リアルタイム演奏に対して音楽的なつながりのあるコードを検出することができる。そして、検出されたコードは常に、リアルタイム入力された演奏データと調和している。
【0046】
調性音楽で使用される全コード進行には、トニックからドミナントなどの機能的進行とクリシェなどの非機能的進行に分類される骨格コード進行以外に、骨格コード進行に割り込むコード進行(たとえば、セカンダリードミナントやそのツーファイブ、エクステンデッド・ドミナント)がある。この骨格に割り込む形のコード進行は、ある時点のコードに対して次に進むことができるコードという観点では候補を挙げることができない。その理由は、ある解決先コードに至るまでに経過するコードが割り込む形になるからである。本実施の形態では、骨格コード進行を形成するためのコード候補を複数抽出しているときに、その複数のコード候補から解決先コードとなり得るものを抽出し、抽出した各解決先コードに解決するコード候補および当該各解決先コードに解決するまでに経過するコード候補を検出して、コード候補に追加するようにしたので、調性音楽で使用される全コード進行のうち、骨格コード進行に割り込む形のコード進行となるコード候補の追加およびコードの検出が可能になる。
【0047】
あるコード検出タイミングで抽出されたコード候補のいずれかに解決するコード(候補)が検出された場合、その次のコード検出タイミングでは、直前のコード検出タイミングで検出されたコードが解決するコードかその代理コードが検出される可能性が極めて高い。本実施の形態では、検出される可能性が極めて高いコード候補を余さず挙げるようにしたので、コード進行データベースを用いる従来の方法より柔軟でバラエティに富んだコード進行を生成することができる。また本実施の形態では、解決先のコード検出に至るまでに複数のコードを経過する可能性を持たせているので、一層バラエティに富んだコード進行を生成することができる。
【0048】
さらに本実施の形態では、セカンダリードミナントからの解決やツーファイブ進行、さらにそこからのドミナント7thコードの連続など、演奏途中に現れ、どこまで続くか定まらないようなコード進行を検出することができる。
【0049】
また本実施の形態では、骨格コード進行を形成するためのコードデータの検出処理と、骨格コード進行に割り込む形のコード進行を形成するためのコードデータの検出処理とを独立に行うようにしているので、骨格コード進行に割り込む形のコード進行の始まりになるコードが検出されると、後者の検出処理でのみコードデータの検出を行うことで、その後に当該割り込む形のコード進行が続くようにコードデータの検出を制御することが可能となる。これにより、入力された演奏データが同じであっても、どちらの検出処理を用いてコードデータの検出を行ったかに応じて、検出されるコードデータが変わる可能性がある。その結果、音楽的なつながりを考慮しつつ、単調でないコード進行を得ることができる。
【0050】
さらに上記両検出処理は、演奏の流れに応じて自動的にいずれかの検出処理に切り替えられるので、ユーザはコードを検出させるために意識した演奏をしなくてもよく、自由な演奏に専念することができる。
【0051】
また本実施の形態では、エクステンデッド・ドミナント(V7/V7sus4の連続/♭II7の連続)に進む可能性も考慮され、さらに、骨格に割り込むコード進行内で次に進む可能性のあるコードの1つ前に寄り道するかもしれないコード候補も抽出されるようになっている。これにより、骨格コード進行に割り込む形のコード進行が発生した際に、その後起こる可能性のあるより多くのコード進行に対応することができるようになっている。
【0052】
次に、この制御処理を詳細に説明する。
【0053】
図5Aおよび
図5Bは、本実施の形態の電子楽器、特にCPU5が実行する、自動伴奏を使った演奏処理の手順を示すフローチャートである。本実施の形態の電子楽器では、ユーザが演奏操作子1を用いてリアルタイム演奏する際の演奏モードとして、自動伴奏装置9を作動させずに、演奏操作子1を用いて入力された演奏データに応じた楽音を発音させる第1の演奏モードと、自動伴奏装置9を作動させて、演奏操作子1を用いて入力された演奏データに応じた楽音とともに、自動伴奏装置9によって生成された演奏データに応じた楽音(伴奏音)も発音させる第2の演奏モードの2種類の演奏モードを備えている。通常の演奏モード、つまり、本実施の形態の電子楽器の電源をオンしたときに最初に選択される演奏モードは、第1の演奏モードであるので、第2の演奏モードに移行するには、ユーザによる所定の移行指示が必要となる。上記「自動伴奏を使った演奏処理」は、この移行指示がなされたときに起動される処理である。なお本実施の形態では、本発明の特徴を「自動伴奏を使った演奏処理」内にすべて盛り込み、この「自動伴奏を使った演奏処理」を用いて本発明の特徴を説明するようにしたので、「自動伴奏を使わない演奏処理」についての説明は行わない。したがって、以下「自動伴奏を使った演奏処理」を「演奏処理」と略して言う。ただし、本発明の特徴を「自動伴奏を使わない演奏処理」内にすべて盛り込み、この「自動伴奏を使わない演奏処理」を用いて本発明の特徴を説明することもできる(この場合には、伴奏音は発生しない)ので、「自動伴奏を使った演奏処理」を用いて本発明の特徴を説明したのは、便宜上のことに過ぎない。
【0054】
本演奏処理は、主として、
(1)起動時処理(ステップS1〜S4)
(2)自動伴奏のスタート時処理(ステップS7)
(3)自動伴奏のストップ時処理(ステップS9)
(4)ノートイベント処理(ステップS12)
(5)コードの検出タイミング時処理(
図5BのステップS14〜S19)
によって構成されている。
【0055】
本演奏処理が起動されると、前記(1)の起動時処理が1回実行された後、自動伴奏のスタート指示があるまで待機状態となり(ステップS6→S5→S6)、自動伴奏のスタート指示があると、前記(2)の自動伴奏のスタート時処理が実行され、これに続いて、前記(4)および(5)の各処理が適宜実行される。そして(4)および(5)の各処理は、自動伴奏のストップ指示があるまで(ステップS8)、あるいは第1の演奏モードに戻る指示があるまで(ステップS5)、適宜繰り返し実行される。なお、自動伴奏のストップ指示があると、前記(3)の自動伴奏のストップ時処理が実行された後、伴奏スタイルなどの設定変更があったかどうか判定され(ステップS10)、設定変更があったときには、前記(1)の起動時処理に戻る一方、設定変更がなかったときには、前記待機状態に戻る。また、第1の演奏モードに戻る指示があると、本演奏処理は終了する(ステップS5→終了)。
【0056】
前記(1)の起動時処理は、
(11)演奏開始前の設定処理(ステップS1)
(12)コード検出タイミングおよび各種ルールの設定処理(ステップS2)
(13)初期化処理(ステップS3)
(14)コード検出タイミングの始点および終点の算出設定処理(ステップS4)
によって構成されている。
【0057】
この(1)起動時処理に処理が進むと、まずCPU5は、前記(11)の演奏開始前の設定処理を実行する。この(11)演奏開始前の設定処理では、CPU5は、演奏テンポ、拍子、伴奏スタイル、ボリューム値および演奏音色などの各項目の設定を行う。各項目は、ユーザに設定すべき値あるいは種類を問い合わせ、これに応じてユーザが入力あるいは選択した値あるいは種類を設定するようにしてもよいし、デフォルト設定されたもの、あるいは前回設定されたものをそのまま、あるいは一部変更して設定するようにしてもよい。
【0058】
次にCPU5は、処理を前記(12)のコード検出タイミングおよび各種ルールの設定処理に進める。この(12)コード検出タイミングおよび各種ルールの設定処理では、CPU5は、コード検出タイミングの設定ルールと、それ以外の各種ルールを設定する。
【0059】
コード検出タイミングの設定ルールとは、具体的には、コードを検出するタイミングとして、時間幅を設けるのか、あるいは時間幅を設けずに時点とするのか、また、時間幅を設けるのであれば、どの時点を基準位置として、その前後にどのくらいの時間幅を設けるのか、あるいは時点とするのであれば、どの時点とするのかということである。時間幅を設ける例としては、前記
図2で示したように、2拍毎に(4/4拍子が選択された場合には、たとえば1拍目と3拍目)拍位置をコード検出基準位置として、250ms前から50ms後までの期間とすることが挙げられる。図示例では、時間幅を設定する単位として“ms”を採用したが、もちろんこれに限らず、音符長であってもよい。また、コード検出基準位置は2拍毎の拍位置に限らず、1拍毎の拍位置であってもよいし、テンポが変化したときに、たとえば2拍毎から1拍毎に変動するようにしてもよいし、拍に限らず、小節毎の所定位置(たとえば、先頭位置)であってもよい。さらに、コード検出基準位置をどこに設定するかは、テンポ値や伴奏スタイルによって決まっていてもよい。一方、時点の例としては、時間幅を設ける場合で例示した各種コード検出基準位置、つまり、所定拍毎の拍位置や小節毎の所定位置、あるいは、ユーザが、たとえば前記設定操作子2に含まれる所定の操作子を操作した時点や、所定の拍内で、ユーザが所定の操作子を操作した時点などが考えられる。なお本実施の形態では、コード検出タイミングの設定ルールとして、前記
図2の例で示したルールが選択設定されているものとする。
【0060】
各種ルールとしては、(R1)調情報の検出ルールや(R2)コードの選出ルールなどを挙げることができる。
【0061】
上記(R1)の調情報の検出ルールとしては、たとえば、演奏前にユーザに調情報を問い合わせ、これに応じてユーザが入力した調情報を検出(取得)するというルールや、ユーザの演奏操作に応じて入力された演奏データを解析して、随時調情報を検出するというルールなどが考えられる。なお本実施の形態では、調情報は、主音名+メジャ/マイナによって表現したものを入力あるいは検出するものとする。また、演奏データを解析して調情報を検出する方法は、公知のものを用いればよい。そして、調情報を随時検出する方法を採用した場合には、コードが選出される度に(後述する
図7のステップS47等を参照)、そのとき検出された調情報を当該選出されたコードに対応付けて記憶しておくとよい。
【0062】
前記(R2)のコードの選出ルールとしては、たとえば、
(R2a)各コードに予め優先順位を付けておき(たとえば、ダイアトニック・スケール・コードのトニックコードを上位にするなど)、候補コードのうち、最上位のコードを選出するというルール
(R2b)参照対象の演奏データの全ての音名と候補コードの各コードの構成音との一致度合い(完全一致、3音以上が一致、2音が一致など)が最も高いコードを選出するというルール
などを挙げることができる。また、候補コードの各コードの根音が参照対象の演奏データに含まれることを追加条件にしてもよい。
【0063】
また、(12)コード検出タイミングおよび各種ルールの設定処理では、メジャ調でのドミナント(D)→サブドミナント・マイナ(SM)進行(インターラプテッド・ケーデンス)を通常時も許可するかどうかも設定できるようになっている。ここで、「通常時も許可」とは、前記(A)の基本コード候補抽出処理時でも、メジャ調においてインターラプテッド・ケーデンスとなるコード進行(を形成するコード機能を有するディグリーネーム)の抽出を許可することを意味する。そして、「通常時も許可」が設定された場合には、前記
図3Aのメジャ調におけるコードの機能とディグリーネームの対応表中、機能が「D:ドミナント」である「次に進む事の出来る機能」に“SM”が追加されて、「次に進む事の出来る機能」は“T”,“D”および“SM”の3種類となる一方、「通常時は不許可」が設定された場合には、当該「次に進む事の出来る機能」には“SM”が追加されずに、“T”および“D”の2種類となる。
図3Aの当該「次に進む事の出来る機能」中、“SM”がカッコ書きで示されているのは、“SM”が機能として選択される場合と選択されない場合の両方があり得るからである。本実施の形態では、
図3Aの対応表は前記ROM6に予め記憶されており、必要なときに読み出して参照するようにしているが、「通常時も許可」が設定されたかどうかで、対応表のうちの一部データ(“SM”)を採用するかどうかを判断するのは面倒なので、「通常時も許可」が設定された場合の対応表と「通常時は不許可」が設定された場合の対応表を予め別々に作成して記憶しておき、必要に応じて必要な方を読み出して参照すればよい。
【0064】
なお、(12)コード検出タイミングおよび各種ルールの設定処理でも、前記(11)演奏開始前の設定処理と同様に、各ルールは、ユーザに設定すべきルール内容を問い合わせ、これに応じてユーザが入力あるいは選択した内容を設定するようにしてもよいし、デフォルト設定されたものあるいは前回設定されたものをそのまま、あるいは一部変更して設定するようにしてもよい。
【0065】
次に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に追加するときにセットされ、当該コードデータの候補を抽出しないときにリセットされるフラグである;
の前者のフラグをセットし、後者のフラグをリセットする。
【0066】
次にCPU5は、処理を前記(14)のコード検出タイミングの始点および終点の算出設定処理に進める。この(14)コード検出タイミングの始点および終点の算出設定処理では、CPU5は、前記設定されたコード検出タイミングの設定ルールに従って、最初のコード検出タイミングの始点および終点を算出し、算出した始点を前記始点sTimeに記憶(設定)するとともに、算出した終点を前記終点eTimeに記憶(設定)する。ただし本実施の形態では、コード検出タイミングとして、曲の先頭拍の拍位置をコード検出基準位置に取るとともに、その拍位置からさらに250ms前をコード検出タイミングの始点に取るのに対して、曲は先頭拍から開始されるので、曲の開始時に、その開始位置より前の位置を算出して、始点sTimeに設定するのは無意味である。したがって、この場合、始点sTimeには先頭拍の拍位置、つまりコード検出基準位置を設定することが好ましい。しかしこの場合に、原則通り、先頭拍の拍位置より250ms前の位置を算出して、始点sTimeに設定したとしても、設定された始点より後の時刻から制御処理が開始されるだけであって、その後の制御処理に問題が生じることはない。
【0067】
このようにして(1)起動時処理が1回実行されると、CPU5は、ユーザによる自動伴奏のスタート指示を待ち、自動伴奏のスタート指示がなされると、処理を前記(2)の自動伴奏のスタート時処理に進める(ステップS6→S7)。この(2)自動伴奏のスタート時処理では、CPU5は、前記タイマ8を起動して、タイマ8による計時を開始する。タイマ8の計時時間は、前述のように前記自動伴奏装置9にも供給され、さらに本演奏処理では、前述のように自動伴奏装置9は作動状態であるので、伴奏スタイルデータが選択設定されていれば、自動伴奏装置9は、本演奏処理とは独立して、タイマ8から供給された計時時間(時間情報)に基づいてその伴奏スタイルデータを再生する。
【0068】
そしてCPU5は、ユーザによって自動伴奏のストップ指示がなされるまで、ノートオンイベントが受け付けられたときには、前記(4)のノートイベント処理を実行し(ステップS8→S11→S12)、タイマ8によって前記コード検出タイミング(の終点eTime)が計時されたときには、前記(5)のコードの検出タイミング時処理を実行する(
図5BのステップS13→S14)。
【0069】
一方、ユーザによって自動伴奏のストップ指示がなされると、CPU5は、処理を前記(3)の自動伴奏のストップ時処理に進める(ステップS8→S9)。この(3)自動伴奏のストップ時処理では、CPU5は、タイマ8を停止する。これにより当然ながら、自動伴奏装置9による前記伴奏スタイルデータの再生は停止する。
【0070】
図6は、前記(4)のノートイベント処理の詳細な手順を示すフローチャートである。
【0071】
同図に示すように、本ノートイベント処理は、
(41)タイマ8がコード検出タイミング期間内の時間、つまり前記始点sTimeから前記終点eTimeまでの間の時間を計時しているときに
(41a)ノートオンイベントが受け付けられた場合の処理(ステップS33,S34)
(41b)ノートオフイベントが受け付けられた場合の処理(ステップS35,S36)
(42)タイマ8がコード検出タイミング期間外の時間を計時しているときに
(42a)ノートオンイベントが受け付けられた場合の処理(ステップS38)
(42b)ノートオフイベントが受け付けられた場合の処理(ステップS39)
によって構成されている。
【0072】
そして、上記(41a)の処理は、上記(42a)の処理、つまり、受け付けられたノートオンイベントを前記音源回路13に出力することでなされる発音処理に、当該ノートオンイベントに対応するノートイベント情報(音高+入力タイミング)を前記ノートイベントリストNListに追加する処理を加えて構成され、上記(41b)の処理は、上記(42b)の処理、つまり、受け付けられたノートオフイベントを音源回路13に出力することでなされる消音処理に、当該ノートオフイベントに対応するノートイベント情報を前記ノートイベントリストNListから削除する処理を加えて構成されている。
【0073】
前記(5)のコードの検出タイミング時処理では、まずCPU5は、コード検出処理を実行する(ステップS14)。コード検出処理の詳細は、
図7のフローチャートに基づいて後述するが、コード検出処理が実行されると、1つのコードデータが検出(選出)されて、前記検出コードChordに記憶される。次にCPU5は、検出コードChordからコードネームを読み出して前記自動伴奏装置9に出力する(ステップS15)。
【0074】
さらにCPU5は、通常コード検出フラグがセット状態であれば、調情報Keyと検出コードChordを出力結果リストRListの末尾に追加し(ステップS16→S17)、コード検出タイミングの設定内容(設定ルール)に基づいて、次のコード検出期間の始点および終点を算出して、それぞれ始点sTimeおよび終点eTimeを更新し(ステップS18)、ノートイベントリストNListを初期化(クリア)する(ステップS19)。なお、通常コード検出フラグがリセット状態であれば、CPU5は、ステップS17をスキップして次のステップS18に処理を進める。通常コード検出フラグがリセット状態とは、前述のように、割り込み型コード進行またはエクステンデッド型コード進行を生成している状態であることを意味する。そして、割り込み型コード進行またはエクステンデッド型コード進行を形成するためのコードデータ(および調情報)は、出力結果リストRListには追加登録しないようにしているので、この場合には、CPU5は当該ステップS17の追加登録処理を実行しないようにしている。
【0075】
図7は、前記ステップS14のコード検出処理の詳細な手順を示すフローチャートである。
【0076】
本コード検出処理は、主として、
(51)通常コード検出処理(ステップS42〜S48)
(52)非通常コード検出処理への移行処理(ステップS50〜S52)
(53)非通常コード検出処理(ステップS53,S56〜S58)
(54)通常コード検出処理への移行処理(ステップS55)
によって構成され、上記(51)通常コード検出処理には、前記(A)基本コード候補抽出処理および前記(B)追加コード候補抽出処理が含まれ、上記(53)非通常コード検出処理には、前記(C)コード進行形成用コード検出処理が含まれている。
【0077】
そして、通常コード検出に関する処理系列、つまり上記(51)および(52)の処理系列は、通常コード検出フラグがセット状態のときに実行され(ステップS41→S42)、非通常コード検出に関する処理系列、つまり上記(53)および(54)の処理系列は、通常コード検出フラグがリセット状態のときに実行される(ステップS41→S53)。
【0078】
前記(51)通常コード検出処理では、まずCPU5は、前記(12)のコード検出タイミングおよび各種ルールの設定処理によって設定された調検出ルールに従って、調情報を取得し(ステップS42)、取得した調情報を前記調情報Keyに記憶し(ステップS43)、さらに前記コードリストCListを初期化(クリア)する(ステップS44)。
【0079】
次にCPU5は、前記(A)基本コード候補抽出処理(その詳細は、
図8Aおよび
図8Bを用いて後述)を実行する(ステップS45)とともに、前記(B)追加コード候補抽出処理(その詳細は、
図10を用いて後述)を実行する(ステップS46)。この両抽出処理が実行されると、コードリストCListには、骨格コード進行を形成するための複数のコード候補および非骨格コード進行(割り込み型コード進行およびエクステンデッド型コード進行)の始点となる複数のコード候補が登録される。
【0080】
そしてCPU5は、ノートイベントリストNListとコードリストCListに基づいて、より具体的には、ノートイベントリストNListに登録されているノートイベント情報(の音高)を参照し、コードリストCListに登録されている複数のコード候補(コードデータ)からコードデータを1つ選出し(ステップS47)、選出したコードデータを検出コードChordに記憶する(ステップS48)。なお、上記ステップS47での「コードの選出」は、前記(12)のコード検出タイミングおよび各種ルールの設定処理で設定した前記(R2)コードの選出ルール、つまり本実施の形態では、前記(R2a)または(R2b)のいずれかに従って行われる。この事情は、上記ステップS47に限らず、ステップS47と同様の処理を行う他のステップ、たとえば後述する
図11AのステップS126,S145およびS150等についても同様である。
【0081】
次にCPU5は、検出コードChordの情報データ内にフラグ情報があるかどうかを判別する(ステップS49)。フラグ情報がある場合、フラグ情報には「割り込み」、「エクステンデッドV7/V7sus4」、「エクステンデッド♭II7」、「寄り道」および「End」のうちのいずれかが記憶されているが、処理がステップS49に進んだときに、検出コードChordの情報データ内にフラグ情報があった場合、そのフラグ情報は、「割り込み」、「エクステンデッドV7/V7sus4」および「エクステンデッド♭II7」のうちのいずれかであり、「寄り道」または「End」であることはない。これは、「寄り道」および「End」の設定は、前記非通常コード検出に関する処理系列でのみ、より具体的には、前記(53)非通常コード検出処理に含まれる前記(C)コード進行形成用コード検出処理でのみなされ、この処理系列から前記通常コード検出に関する処理系列に移行した後は、「寄り道」および「End」の設定がなされることはないからである。
【0082】
前記ステップS49の判別の結果、検出コードChordの情報データ内にフラグ情報があったときには、CPU5は、処理を前記(52)の非通常コード検出処理への移行処理を実行する(ステップS49→S50)一方、検出コードChordの情報データ内にフラグ情報がなかったときには、CPU5は、当該移行処理を実行せずに、本コード検出処理を終了する(ステップS49→リターン)。
【0083】
(52)非通常コード検出処理への移行処理では、CPU5は、通常コード検出フラグをリセットし(ステップS50)、スタートコードSChordを初期化(クリア)した上で、検出コードChordの各情報をスタートコードSChordに記憶させ(ステップS51)、さらにコードリストCListおよび次コードリストNCListを共に初期化(クリア)する(ステップS52)。
【0084】
前記(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→リターン)。
【0085】
前記ステップS54の判別の結果、非骨格コード進行を形成するためのコードデータの検出を終了させるとき(フラグ情報=「End」)には、CPU5は、処理を前記(54)の通常コード検出処理への移行処理に進め、通常コード検出フラグをセットする(ステップS55)。
【0086】
図8Aおよび
図8Bは、前記ステップS45の基本コード候補抽出処理の詳細な手順を示すフローチャートである。
【0087】
本基本コード候補抽出処理は、主として、
(61)起動時処理(ステップS61〜S63)
(62)次の(63)の抽出処理の前処理(ステップS64〜S72)
(63)次に進むことのできる機能を持つディグリーネーム候補の抽出処理(
図8BのステップS75)
によって構成されている。
【0088】
本基本コード候補抽出処理が起動されると、まず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)。
【0089】
なお前記(61b1)の処理において、初回コードのディグリーネームとコードネームの検出は、従来の方法によって行えばよい。またこの場合、参照する前回のコードがまだ記憶されていないので、たとえば、調の主音をルートとしたメジャ調かマイナ調のトニックコードを参照すべき基準コードとしてもよい。
【0090】
前記(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)。
【0091】
上記3種類の禁止フラグをそれぞれセットする場合は、対応する機能を持つダイアトニック・スケール・コードが所定個続いて選出されて発音される(前記
図5BのステップS15およびS17を参照)場合に相当する。つまり、各禁止フラグは、対応する機能を持つダイアトニック・スケール・コードが所定個続いて選出されないように制限する機能を営んでいる(後述する
図9AのステップS83,S87、および
図9BのステップS91を参照)。このような禁止フラグを設けたことにより、単調なコード選出およびその発音を抑制することができる。なお、同じ機能を持つダイアトニック・スケール・コードが何個続いたときに、同じ機能を持つ新たなダイアトニック・スケール・コードの選出を禁止するかの上記例示した個数は、あくまでも例示に過ぎず、複数個であれば2個と4個に限られない。
【0092】
さらにCPU5は、出力結果リストRListの末尾のコードデータを参照し、前回コードのディグリーネームとその機能を取得し(
図8BのステップS73)、取得したディグリーネームを前回のディグリーネームLDNに記憶するとともに、取得した機能を前回の機能LFに記憶する(ステップS74)。
【0093】
次にCPU5は、処理を前記(63)の次に進むことのできる機能を持つディグリーネーム候補の抽出処理に進める(ステップS75)。
【0094】
図9Aおよび
図9Bは、この(63)次に進むことのできる機能を持つディグリーネーム候補の抽出処理の詳細な手順を示すフローチャートである。
【0095】
同
図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)(「通常時は不許可」の設定時)のいずれかを抽出する。
【0096】
次に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)。
【0097】
なお、抽出した機能にトニック、サブドミナント、ドミナントまたはサブドミナント・マイナがない場合には、それぞれ以下の(63a)〜(63d)の各処理はなされない。
【0098】
また、ステップS84,S85,S88,S89,S92,S93およびS95における各コードネームの検出は、対応するディグリーネームを調情報Keyに基づいてコードネームに展開することによって行う。具体的には、この展開は、調情報の主音をI度としてディグリーネームの度数からルートを算出することによって行う。これにより、たとえば、ディグリーネーム“IIm7”を調情報「Fメジャ」によって展開すると、コードネーム“Gm7”が得られる。
【0099】
なお
図3Aの対応表中、「機能」が“S:サブドミナント”の「ダイアトニック・スケール・コード以外」に属する“#IVm7(♭5)”には“-S”が付けられている。この“-S”は、“#IVm7(♭5)”を「サブドミナント(S)」として扱うことを意味している。“#IVm7(♭5)”は、通常「トニック(T)」として扱うが、本実施の形態では「サブドミナント(S)」としても扱うようにしている。したがって、前記ステップS81の処理によって「サブドミナント(S)」が抽出されたときに、調情報Keyが「メジャ調」であれば、“#IVm7(♭5)”も抽出される。ただしこの場合、「サブドミナント(S)」とともに「トニック(T)」も抽出されると、“#IVm7(♭5)”は、「サブドミナント(S)」に属するものと、「トニック(T)」に属するものの両方が抽出されることになる。このとき、本実施の形態では「トニック(T)」に属するものを優先的に抽出するようにしているが、もちろんこれに限らず、「サブドミナント(S)」に属するものを優先的に抽出するようにしてもよい。そしてこの場合、抽出された“#IVm7(♭5)”が「サブドミナント(S)」または「トニック(T)」のいずれに属するかを特定する情報を付けるようにした方が好ましい。
【0100】
図10は、前記ステップS46の追加コード候補抽出処理の詳細な手順を示すフローチャートである。
【0101】
本追加コード候補抽出処理が起動されると、まずCPU5は、調情報Keyを参照し、コードリストCListに登録されているコードデータのうち、ダイアトニック・スケール・コードのMaj7,6,add9,Maj,sus4に該当するコードデータであって、メジャ調のI度とマイナ調の♭III度を除いたものをメジャ系解決先コードとして抽出する(ステップS101)。この結果、調情報Keyがメジャ調であれば、IVMaj7,IV6,IVadd9,IVの各コードが抽出され、調情報Keyがマイナ調であれば、♭VIMaj7,♭VI6,♭VIadd9,♭VIの各コードが抽出される。
【0102】
次にCPU5は、メジャ系セカンダリードミナントとそのツーファイブ候補の追加処理を実行する(ステップS102)。この追加処理(その詳細は図示せず)では、CPU5は、
(71)前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(メジャ系に解決するドミナント候補の追加);
(72)上記(71)で追加した各コードデータの情報データ内の解決先コード情報として記憶されている解決先コードのルートに対してIIm7およびIIm7(♭5)となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7/IIm7(♭5) of V7/V7sus4 of 解決先コードのルートの度数」(“IIm7/IIm7(♭5)”は、“IV/IVm”の代理コードである)を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(メジャ系に解決するツーファイブ候補の追加);
(73)前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(メジャ系に解決するドミナント候補の追加);
(74)前記抽出した全メジャ系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「♭II7 of 解決先コードのルートの度数」(“♭II7”は、“V7”の代理コードである)を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(メジャ系に解決するセカンダリードミナント候補の追加);
(75)上記(74)で追加した各コードデータのルートをV度とみなし、それらに対しIIm7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7 of ♭II7 of 解決先コードのルートの度数」(=解決先コードのルートの度数をI度とみなしたときの♭VIm7)を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(メジャ系に解決するツーファイブ候補の追加);
の各処理を実行する。
【0103】
たとえば、解決先コードが“FMaj7”である場合には、前記(71)の処理によって“FMaj7”に対するV7として“C7”が、前記(72)の処理によって“FMaj7”に対するIIm7とIIm7(♭5)として“Gm7”と“Gm7(♭5)”が、前記(73)の処理によって“FMaj7”に対するV7sus4として“C7sus4”が、前記(74)の処理によって“FMaj7”に対する♭II7として“G♭7”が、前記(75)の処理によって“FMaj7”に対して♭II7となる“G♭7”の“G♭”をV度とみなしたときのIIm7として“D♭m7”が、それぞれ検出される。
【0104】
次にCPU5は、調情報Keyを参照し、コードリストCListに登録されているコードデータのうち、フラグ情報が「なし」であり、かつダイアトニック・スケール・コードのm7,m6,mMaj,madd9に該当するコードデータであって、マイナ調のI度とV度を除いたものをマイナ系解決先コードとして抽出する(ステップS103)。この結果、調情報Keyがメジャ調であれば、IIm7,IIIm7,VIm7の各コードが抽出され、調情報Keyがマイナ調であれば、IIm7,IVm7,IVm6の各コードが抽出される。
【0105】
次にCPU5は、マイナ系セカンダリードミナントとそのツーファイブ候補の追加処理を実行する(ステップS104)。この追加処理(その詳細は図示せず)では、CPU5は、
(81)前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(マイナ系に解決するドミナント候補の追加);
(82)上記(81)で追加した各コードデータの情報データ内の解決先コード情報として記憶されている解決先コードのルートに対してIIm7およびIIm7(♭5)となる各コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7/IIm7(♭5) of V7/V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(マイナ系に解決するツーファイブ候補の追加);
(83)前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(マイナ系に解決するドミナント候補の追加);
(84)前記抽出した全マイナ系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「♭II7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(マイナ系に解決するセカンダリードミナント候補の追加);
(85)上記(84)で追加した各コードデータのルートをV度とみなし、それらに対しIIm7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「IIm7 of ♭II7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加(マイナ系に解決するツーファイブ候補の追加);
の各処理を実行する。
【0106】
たとえば、解決先コードが“Dm7”である場合には、前記(81)の処理によって“Dm7”に対するV7として“A7”が、前記(82)の処理によって“Dm7”に対するIIm7とIIm7(♭5)として“Em7”と“Em7(♭5)”が、前記(83)の処理によって“Dm7”に対するV7sus4として“A7sus4”が、前記(84)の処理によって“Dm7”に対する♭II7として“E♭7”が、前記(85)の処理によって“Dm7”に対して♭II7となる“E♭7”の“E♭”をV度とみなしたときのIIm7として“B♭m7”が、それぞれ検出される。
【0107】
次にCPU5は、調情報Keyを参照し、コードリストCListに登録されているコードデータのうち、フラグ情報が「なし」であり、かつダイアトニック・スケール・コードのドミナント7th系のコードデータをドミナント7th系解決先コードとして抽出する(ステップS105)。この結果、調情報Keyがメジャ調であれば、V7,V7sus4の各コードが抽出され、調情報Keyがマイナ調であれば、V7,V7sus4,♭VII7,♭VII7sus4(IV7)の各コードが抽出される。
【0108】
次にCPU5は、ダブルドミナント候補の追加処理を実行する(ステップS106)。この追加処理(その詳細は図示せず)では、CPU5は、
(91)前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対しV7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加;
(92)前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対しV7sus4となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「V7sus4 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加;
(93)前記抽出した全ドミナント7th系解決先コードの各ルートをI度とみなし、それらに対し♭II7となるコードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「解決先コード情報」として「解決先コードのルート」を、「ディグリー情報」として「♭II7 of 解決先コードのルートの度数」を、「フラグ情報」として「割り込み」を記憶したものを生成し、コードリストCListに追加;
の各処理を実行する。
【0109】
たとえば、解決先コードが“G7”である場合には、前記(91)の処理によって“G7”に対するV7として“D7”が、前記(92)の処理によって“G7”に対するV7sus4として“D7sus4”が、前記(93)の処理によって“G7”に対する♭II7として“A♭7”が、それぞれ検出される。
【0110】
次にCPU5は、前記EPフラグのセット/リセット状態を判別し(ステップS107)、セット状態であれば、エクステンデッド・ドミナント候補の追加処理を実行する(ステップS108)とともに、EPフラグをリセットした(ステップS109)後、ステップS110に進む一方、リセット状態であれば、ステップS108およびS109をスキップしてステップS110に進む。
【0111】
エクステンデッド・ドミナント候補の追加処理(その詳細は図示せず)では、CPU5は、
(101)前回のディグリーネームLDNのルート音名の完全4度上の音名をルートに持つ(コードタイプが)7コードと7sus4コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「フラグ情報」として「エクステンデッドV7/V7sus4」を記憶したものを生成し、コードリストCListに追加;
(102)前回のディグリーネームLDNのルート音名の1半音下の音名をルートに持つ7コードを検出し、検出したコードに対応するコードネームおよびディグリーネームを含むコードデータであって、その情報データに、「フラグ情報」として「エクステンデッド♭II7」を記憶したものを生成し、コードリストCListに追加;
の各処理を実行する。
【0112】
前記ステップS110では、CPU5は、コードリストCListに登録されているコードデータのうち、コードネーム(ディグリーネーム)が重複したものがあれば、その情報データ内のフラグ情報が「割り込み」、「エクステンデッドV7」または「エクステンデッド♭II7」のいずれかであるコードデータをコードリストCListから削除する。
【0113】
図11A〜
図11Cは、前記
図7のステップS53のコード進行形成用コード検出処理の詳細な手順を示すフローチャートである。
【0114】
本コード進行形成用コード検出処理では、CPU5は、スタートコードSChordの情報データ内のフラグ情報が「割り込み」のときに、前記割り込み型コード進行を形成するためのコードデータを検出し(ステップS121→S122)、当該フラグ情報が「エクステンデッドV7/V7sus4」または「エクステンデッド♭II7」のときに、前記エクステンデッド型コード進行を形成するためのコードデータを検出する(ステップS121→
図11BのS153)。
【0115】
割り込み型コード進行を形成するためのコードデータの検出処理(以下、「割り込み型コード進行形成用コード検出処理」という)では、まずCPU5は、スタートコードSChordの次に進むコード候補であって、割り込み型コード進行となるもの(以下、「次の割り込み型コード候補」という)を抽出して、当該次の割り込み型コード候補に対応するコードデータをコードリストCListに登録する(ステップS122→S123)。
【0116】
図12Aおよび
図12Bは、次の割り込み型コード候補の抽出処理の詳細な手順を示すフローチャートである。
【0117】
本次の割り込み型コード候補の抽出処理では、CPU5は、次の処理を実行する。すなわち、
(111)スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7(♭5)が検出されている場合:
(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コードおよびV7sus4(V度のみ)コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータを生成し、コードリストCListに登録し(
図12BのステップS184→S185);
(114b)上記(114a)の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録し(ステップS186);
(114c)スタートコードSChordのルート音名と同じルートを持つm7(=IIm7 of V7)コードおよびIIm7(♭5)(=IIm7(♭5) of V7)コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、情報データに、「フラグ情報」として「寄り道」を記憶したものを生成し、コードリストCListに登録した(ステップS187)後、本抽出処理を終了(リターン);
(115)スタートコードSChordとして、V7/V7sus4コードへ解決する予定の♭II7が検出されている場合:
(115a)スタートコードSChordのルート音名に対し短2度下の音名をルートとする7コードおよびV7sus4(V度のみ)コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータを生成し、コードリストCListに登録し(ステップS188→S189);
(115b)上記(115a)の登録処理によって登録されたコードデータの機能と同じ機能を持つコードを、ダイアトニック・スケール・コードとダイアトニック・スケール・コード以外のコードから調情報Keyに応じて検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータを生成して、コードリストCListに登録し(ステップS190);
(115c)スタートコードSChordのルート音名に対し短2度下の音名からさらに完全4度下の音名をルートに持つm7(=IIm7 of V7)コードおよびIIm7(♭5)(=IIm7(♭5) of V7)コードの各コードネームおよび各ディグリーネームをそれぞれ含むコードデータであって、情報データに、「フラグ情報」として「寄り道」を記憶したものを生成し、コードリストCListに登録した(ステップS191)後、本抽出処理を終了(リターン);
の各処理を実行する。なお、コードリストCListに登録するためにコードデータを生成する際に、フラグ情報について言及していないステップ、具体的には、ステップS172〜S174,S176〜S178,S182,S183では、コードデータにはフラグ情報は設定されないものとする。
【0118】
図11Aに戻り、次にCPU5は、スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7(♭5)が検出されている場合には、スタートコードSChordの次の次に進むコード候補であって、割り込み型コード進行となるもの(以下、「次の次の割り込み型コード候補」という)を抽出して、当該次の次の割り込み型コード候補に対応するコードデータを前記次コードリストNCListに登録する(ステップS124→S125)。
【0119】
次の次の割り込み型コード候補の抽出処理(その詳細は図示せず)では、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に登録;
の各処理を実行する。
【0120】
次にCPU5は、前記ステップS47およびS48と同様にして、ノートイベントリストNListとコードリストCListに基づいて、コードデータを1つ選出し(ステップS126)、選出したコードデータを検出コードChordに記憶する(ステップS127)。
【0121】
そして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に移行;
のいずれかの処理を実行する。
【0122】
ステップS131では、CPU5は、コードリストCListを初期化(クリア)した後、次コードリストNCList内のすべてのコードデータをコードリストCListに記憶させる。そしてCPU5は、本コード進行形成用コード検出処理を終了させる(リターン)。
【0123】
上記(131)および(132)の削除処理では、検出コードChordの次に進むコードデータとして、つながりに無理のあるコード候補を削除するようにしている。
【0124】
次に本コード進行形成用コード検出処理が起動された場合、スタートコードSChordの情報データ内のフラグ情報は「割り込み」であり、かつコードリストCListには1つ以上のコードデータが登録されているので、処理はステップS144に進む。
【0125】
ステップS144では、検出コードChordの情報データ内のフラグ情報が「寄り道」であるかどうかを判別し、「寄り道」でなければ、CPU5は、前記ステップS126およびS127と同様にして、ノートイベントリストNListとコードリストCListに基づいて、コードデータを1つ選出し(ステップS150)、選出したコードデータを検出コードChordに記憶する(ステップS151)。そしてCPU5は、この検出コードChordの情報データ内のフラグ情報が「なし」であれば、割り込み型コード進行形成用コード検出処理を終了させるために、当該フラグ情報を「End」に設定した(ステップS152→S149)後、本コード進行形成用コード検出処理を終了する(リターン)一方、当該フラグ情報が「なし」でなければ、割り込み型コード進行形成用コード検出処理を継続させるために、何もせずに本コード進行形成用コード検出処理を終了する(ステップS152→リターン)。
【0126】
一方、ステップ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に進める。
【0127】
前記ステップS124で、スタートコードSChordとして、メジャ系解決先コードまたはマイナ系解決先コードへ解決する予定のIIm7またはIIm7(♭5)が検出されていない場合には、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→リターン);
の各処理を実行する。
【0128】
処理が前記ステップS124から前記ステップS133に進む場合は、スタートコードSChordの次に進むコード、つまり検出コードChordとして検出されるものは、割り込み型コード進行の終点となるコードまたは「寄り道」となるコードまたはエクステンデッド型コード進行を形成するためのコードのいずれかである。そして、検出コードChordが割り込み型コード進行の終点となるコードの場合が、前記(141a)および(142a)の場合であり、検出コードChordが「寄り道」となるコードの場合が、前記(142b)の場合であり、検出コードChordがエクステンデッド型コード進行を形成するためのコードの場合が、前記(141b)の場合である。
【0129】
前記
図11AのステップS121で、スタートコードSChordの情報データ内のフラグ情報が「エクステンデッドV7/V7sus4」または「エクステンデッド♭II7」のときには、CPU5は、前述のようにエクステンデッド型コード進行を形成するためのコードデータを検出する。
【0130】
エクステンデッド型コード進行を形成するためのコードデータの検出処理(以下、「エクステンデッド型コード進行形成用コード検出処理」という)では、まずCPU5は、スタートコードSChordの次に進むコード候補であって、エクステンデッド型コード進行となるもの(以下、「次のエクステンデッド型コード候補」という)を抽出して、当該次のエクステンデッド型コード候補に対応するコードデータをコードリストCListに登録する、次のエクステンデッド型コード候補の抽出処理を実行する(
図11BのステップS153)。
【0131】
この次のエクステンデッド型コード候補の抽出処理(その詳細は図示せず)では、CPU5は、
(151)スタートコードSChordのルート音名の完全4度上の音名をルートに持つ7コードと7sus4コードを検出し、検出した各コードに対応するコードネームおよびディグリーネームをそれぞれ含むコードデータであって、各コードデータの情報データに、「フラグ情報」として「エクステンデッドV7/V7sus4」を記憶したものを生成し、コードリストCListに追加(ただし、コードリストCList中に、同じコードネーム(ディグリーネーム)のコードデータが既に登録されていれば、追加登録しない);
(152)スタートコードSChordのルート音名の1半音下の音名をルートに持つ7コードを検出し、検出したコードに対応するコードネームおよびディグリーネームを含むコードデータであって、その情報データに、「フラグ情報」として「エクステンデッド♭II7」を記憶したものを生成し、コードリストCListに追加(ただし、コードリストCList中に、同じコードネーム(ディグリーネーム)のコードデータが既に登録されていれば、追加登録しない);
の各処理を実行する。
【0132】
次に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に登録;
のいずれかの処理を実行する。
【0133】
次にCPU5は、ノートイベントリストNListとコードリストCListとさらに使用可能なすべてのコードに基づいて、コードデータを1つ選出し(ステップS155)、選出したコードデータを検出コードChordに記憶する(ステップS156)。ここで、使用可能なすべてのコードとは、すべての調のダイアトニック・スケールの各構成音名を(使用可能な)ディグリーネームの度数に代入して得られるすべてのコードを意味する。
【0134】
そして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)のいずれかの処理に移行;
のいずれかの処理を実行する。
【0135】
上記(171a1),(171a2),(171b1)および(171b2)の各処理における判別の際に使用する調情報Keyは、前記
図7のステップS42およびS43で取得されて記憶されたものである。つまり、調情報Keyは基本的に、前記(51)通常コード検出処理で取得され、前記(53)非通常コード検出処理では取得されない。上記(171a2)の処理で調を取得しているのは、検出コードChordが調情報Keyで扱うことができず、転調と判断されるからである。
【0136】
次にCPU5は、検出コードChordの情報データ内のフラグ情報を「End」に設定した(ステップS162)後、本コード進行形成用コード検出処理を終了する。
【0137】
なお本実施の形態では、検出コードChordは、発音に用いられた(前記
図5BのステップS15参照)後、通常コード検出フラグがセット状態であれば、調情報Keyとともに出力結果リストRListに追加登録される(ステップS17参照)が、通常コード検出フラグの状態に拘わらず、調情報Keyとともに出力結果リストRListに追加登録されるようにしてもよい。出力結果リストRListに追加登録される検出コードChord(と調情報Key)の個数については言及していないが、本実施の形態では、出力結果リストRListの初期化は、前記
図5AのステップS3でのみなされるので、自動伴奏がスタートした以降は、自動伴奏がストップしたときに、設定変更があった場合にのみなされる。つまり、出力結果リストRListの初期化は、自動伴奏を使った演奏処理が起動されている間、特別な場合を除いてなされないので、自動伴奏がスタートした以降に検出されたコードデータのほとんどは、登録されている。このようしたのは、説明を簡略化するために過ぎず、最新に検出されたコードデータを任意の所定個数、記憶するようにし、新たなコードデータが検出される度に更新するようにしてもよい。また、検出されたコードデータを登録する場合、本実施の形態では、検出コードChordをそのまま、調情報Keyと一緒に登録するようにしたが、これに限らず、コードネームのみを登録するようにしてもよいし、その時点での調情報と対応付けたディグリーネームを登録するようにしてもよい。さらに、コードネームとディグリーネームの両方、つまり
図4のコードデータから情報データを除いたものを記憶するようにしてもよい。なお、検出したコードがコードネームしか登録されていない場合には、次回以降のコード検出時に参照する際には、その都度、調情報を用いてディグリーネームに展開するようにしてもよい。
【0138】
本実施の形態では、解決先コードとして抽出される条件として、ダイアトニック・スケール・コードであることを採用したが、ダイアトニック・スケール・コード以外のコードも解決先コードとして抽出されるようにしてもよい。その場合、解決先コードがさらに多様化し、さらに多様なコード進行が生成されることになる。
【0139】
また解決先コード情報は、本実施の形態では、調の主音に対する解決先コードの根音の度数とし、解決先コードを調から可能な限り全て割り出すようにしたが、これに限らず、解決先コードのディグリーネームを予め全て記憶するようにしておいてもよい。さらに、コードデータの情報データ内の「ディグリー情報」を解決先コードの割り出しに使うようにしてもよい。「ディグリー情報」は、本実施の形態では、フラグ情報が「割り込み」のときのみ記憶されているが、コードデータを新規に生成する毎に適切な情報を記憶するようにしてもよい。「解決先コード情報」や「ディグリー情報」は、本実施の形態では、コードデータ毎に持たせるようにしているが、リストで管理するなどして必要なときに参照する仕組みにしてもよい。
【0140】
入力される演奏データは、本実施の形態では、ユーザがリアルタイム演奏することで発生する演奏データを想定しているが、これに限らず、たとえば、録音された演奏データを先読みせずに順次再生したものを入力してもよい。また本実施の形態では、ユーザがリアルタイム演奏する際に利用する演奏操作子として、鍵盤を採用したが、これに限らず、たとえばギターなどの弦楽器タイプでもよい。入力される演奏データがオーディオ信号の場合、遅くとも各コード検出タイミングにおいて候補コードからコードを1つ選出するために演奏データを参照するまでに、少なくとも発音タイミング情報と音高情報を持つ音符情報に変換できていればよい。
【0141】
コード候補や次のコード候補の情報の持ち方は、本実施の形態で採用したフォーマットのものに限らない。また、コード候補の抽出方法やコード候補からの選出方法についての処理の順番やまとめ方も、本実施の形態で採用したものに限らない。
【0142】
通常コード検出時に抽出されるコード候補群のうち、解決先となり得るコード候補に解決するコード候補や、解決先となり得るコード候補への解決に至るまでに経過するコードに該当するコード候補には、本実施の形態では、フラグを立てて他のコード候補と識別できるようにしているが、これに限らず、たとえばリストを2種類用意するなど、別の方法で識別するようにしてもよい。本実施の形態では、通常コード検出においてフラグ付きのコード候補が検出された場合、独特なコード進行が始まるとみなし、次に続くコード検出タイミングからは独特なコード進行を生成するコード検出方法でコード検出を行うようにしている。独特なコード進行には、セカンダリードミナントからの解決やセカンダリードミナントのツーファイブ進行、さらにドミナント7thコードの連続などがある。コード進行の長さは、本実施の形態では、決まっていないが、制限するようにしてもよい。
【0143】
なお本実施の形態では、入力された演奏データに対して音楽的なつながりのあるコードを検出し、検出したコードに基づいて自動伴奏を行うようにしたが、これに限らず、検出したコードに基づいて、入力された演奏データに対するハーモニー音を生成するようにしてもよい。
【0144】
また本実施の形態では、参照対象の演奏データについて何の処理も施さず、入力されたものをそのまま使うようにしたが、これに限らず、入力された演奏データから装飾音やミスタッチと推測される音符データを取り除いた後、コード検出を行うようにすると、コード検出の精度がさらに向上する。
【0145】
さらに本実施の形態では、
図3の各調におけるコードの機能とディグリーネームの対応表に記載のコードの種類は、たとえばROM6内に予め設定されて記憶されているが、任意に追加登録できるかどうかには言及していなかった。任意に追加登録できるようになっていた方が好ましいが、追加登録できないようになっていてもよい。
【0146】
また本実施の形態では、次の次のコード候補群を抽出するケースとして、解決予定先コードへのセカンダリードミナントとそのツーファイブの進行を例に挙げて説明したが、さらにその次のコード候補群を抽出するケースも考えられる。たとえば、上記進行にエクステンデッド・ドミナントを併用した進行、具体的には、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)
となる。エクステンデッド・ドミナントとそのツーファイブを考えて行くと、さらに続く候補群を前もって抽出することができる。
【0147】
なお、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【0148】
この場合、記憶媒体から読出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードおよび該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【0149】
プログラムコードを供給するための記憶媒体としては、たとえば、フレキシブルディスク、ハードディスク、光磁気ディスク、CD−ROM、CD−R、CD−RW、DVD−ROM、DVD−RAM、DVD−RW、DVD+RW、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。また、通信ネットワークを介してサーバコンピュータからプログラムコードが供給されるようにしてもよい。
【0150】
また、コンピュータが読出したプログラムコードを実行することにより、上述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【0151】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。