以下、添付図面を参照して、本発明の実施の形態について説明する。図1は、本実施の形態にかかる自動調判定装置を適用した電子楽器の外観を示す図である。図1に示すように、本実施の形態にかかる電子楽器10は、鍵盤11を有する。また、鍵盤11の上部には、音色の指定、自動伴奏の開始・終了、リズムパターンの指定などを行なうためのスイッチ(符号12、13参照)や、リアルタイムでのコード付けが終了した後にノンリアルタイムでのコード修正を開始するためのノンリアルタイムコード付け修正スイッチ14、演奏される楽曲に関する種々の情報、たとえば、音色、リズムパターン、コード名などを表示する表示部15を有する。本実施の形態にかかる電子楽器10は、たとえば、61個の鍵(C2〜C7)を有する。また、電子楽器10は、自動伴奏をオンする自動伴奏モード、及び、自動伴奏をオフにする通常モードの2つの演奏モードのうち、何れかの下での演奏が可能である。
図2は、本発明の実施の形態にかかる自動調判定装置の構成を示すブロックダイヤグラムである。図2に示すように、本実施の形態にかかる電子楽器10は、CPU21、ROM22、RAM23、サウンドシステム24、スイッチ群25、鍵盤11及び表示部15を備える。
CPU21は、電子楽器10全体の制御、鍵盤11の鍵の押鍵やスイッチ群25を構成するスイッチ(たとえば、図1の符号12、13、14参照)の操作の検出、鍵やスイッチの操作にしたがったサウンドシステム24の制御、押鍵された楽音の音高にしたがったコード名の決定、自動伴奏パターン及びコード名にしたがった自動伴奏の演奏など、種々の処理を実行する。
ROM22は、CPU21に実行させる種々の処理、たとえば、スイッチの操作、鍵盤の何れかの鍵の押鍵、押鍵に応じた楽音の発音、押鍵された楽音の音高にしたがったコード名の決定、自動伴奏パターン及びコード名にしたがった自動伴奏の演奏などのプログラムを記憶する。また、ROM22は、ピアノ、ギター、バスドラム、スネアドラム、シンバルなどの楽音を生成するための波形データを格納した波形データエリア、及び、種々の自動伴奏パターンを示すデータ(自動伴奏データ)を格納した自動伴奏パターンエリアを有する。RAM23は、ROM22から読み出されたプログラムや、処理の過程で生じたデータを記憶する。なお、本実施の形態において、自動伴奏パターンは、コード名ごとの構成音を含むコードパターン、ベース音を含むベースパターン、及びドラム音を含むリズムパターンを有する。たとえば、コードパターン及びベースパターンのデータのレコードは、楽音の音高、発音タイミング(発音時刻)、音長を含む。また、リズムパターンのデータは、楽音の音色、発音タイミングを含む。
サウンドシステム24は、音源部26、オーディオ回路27及びスピーカ28を有する。音源部26は、たとえば、押鍵された鍵についての情報或いは自動伴奏パターンについての情報をCPU21から受信すると、ROM22の波形データエリアから所定の波形データを読み出して、所定の音高の楽音データを生成して出力する。また、音源部26は、波形データ、特に、スネアドラム、バスドラム、シンバルなど打楽器の音色の波形データを、そのまま楽音データとして出力することもできる。オーディオ回路27は、楽音データをD/A変換して増幅する。これによりスピーカ28から音響信号が出力される。
本実施の形態にかかる電子楽器10は、通常モードの下においては、鍵盤11の鍵の押鍵に基づいて楽音を発生する。その一方、電子楽器10は、自動伴奏スイッチ(図示せず)が操作されることにより、自動伴奏モードとなる。自動伴奏モードの下では、鍵の押鍵により、その鍵の音高の楽音が発生する。また、押鍵された鍵の音高に基づいてコード名が決定され、そのコード名のコード構成音を含む自動伴奏パターンにしたがった楽音が発生する。以下、電子楽器10が、自動伴奏モードの下で動作する場合について説明する。
以下、本実施の形態にかかる電子楽器10において実行される処理についてより詳細に説明する。図3は、本実施の形態にかかる自動調修正装置において実行されるメインフローの例を示すフローチャートである。なお、図示しないが、メインフローの実行中に、所定の時間間隔で、割込カウンタのカウンタ値をインクリメントするタイマインクリメント処理も実行される。
図3に示すように、電子楽器10のCPU21は、電源が投入されると、RAM23中のデータや、表示部15の画像のクリアを含むイニシャル処理(初期化処理)を実行する(ステップS1)。イニシャル処理(ステップS1)が終了すると、CPU21は、スイッチ群25を構成するスイッチのそれぞれの操作を検出し、検出された操作にしたがった処理を実行するスイッチ処理を実行する(ステップS2)。
たとえば、スイッチ処理(ステップS2)においては、音色指定スイッチや、自動伴奏パターンの種別の指定スイッチ、自動伴奏パターンのオン・オフの指定スイッチなど、種々のスイッチの操作が検出される。自動伴奏パターンがオンとなったときには、CPU21は、演奏モードを、自動伴奏モードに切り換える。演奏モードを示すデータは、RAM23の所定の領域に指定される。音色や自動伴奏パターンの種別を示すデータも、同様に、RAM23の所定の領域に格納される。
次いで、CPU21は、鍵盤処理を実行する(ステップS3)。図4は、本実施の形態にかかる鍵盤処理の例をより詳細に示すフローチャートである。鍵盤処理において、CPU21は、鍵盤11の鍵を順次走査する(ステップS11)。CPU21は、その走査結果を参照して、ある鍵についてイベントが発生しているか否かを判断する(ステップS12)。ステップS12でYesと判断された場合には、CPU11は、その発生したイベントが鍵オン(押鍵)であるか否かを判断する(ステップS13)。
ステップS13でYesと判断された場合には、CPU21は、当該鍵オンがなされた鍵に対応する発音処理を実行する(ステップS14)。この発音処理において、CPU21は、RAM23に記憶されていたメロディ鍵用の音色データ、及び、その鍵に対応する音高を示すデータを読み出してRAM23に一時的に記憶する。後述する音源発音処理(図3のステップS6)において、これら一時的に記憶された音色及び音高を示すデータを音源部26に与える。音源部26は、音色及び音高を示すデータにしたがって、ROM22から波形データを読み出すことにより楽音データを生成する。これにより、スピーカ28から所定の楽音が発生する。
その後、CPU21は、鍵オンがあった鍵についての音高情報(たとえば鍵番号)及び押鍵タイミング(たとえば押鍵時刻)をRAM23に格納する(ステップS15)。押鍵タイミングは、割り込みカウンタのカウンタ値に基づいて算出することができる。
ステップS13でNoと判断された場合には、発生イベントが鍵オフ(離鍵)であったことになる。したがって、CPU21は、鍵オフとなった鍵についての消音処理を実行する(ステップS16)。消音処理においては、CPU21は、この発生されたイベントに含まれる音高を示すデータを取り出す。この場合にも、後述する音源発音処理(ステップS6)において、この取り出された音高を示すデータが、音源部26に与えられる。音源部26は、与えられたデータに基づいて、この音高の楽音を消音する。その後、CPU21は、鍵オフがあった鍵について、離鍵された時間(離鍵時刻)をRAM23に格納する(ステップS17)。
CPU21は、全ての鍵イベントについて処理が終了したかを判断する(ステップS18)。ステップS18でNoと判断された場合には、ステップS12に戻る。
鍵盤処理(図3のステップS3)が終了すると、CPU21は、コード判定処理を実行する(ステップS4)。図5は、本実施の形態にかかるコード判定処理の例を示すフローチャートである。本実施の形態においては、概略的には、現在発音されているメロディ音を、現在メロディ音(Current Melody)CM、それより1つ前に発音されているメロディ音を、先行メロディ音(Previous Melody)PM、現在より一つ前に演奏されていたコード名を、先行コード名(Previous CHord name)PreCHとして、現在メロディ音CM、先行メロディ音PM及び先行コード名PreCHに基づいて、新たに発音すべき現在コード名(Current CHord name)CurCHを決定している。なお、本実施の形態においては、楽曲の調性をハ長調(CMaj)或いはイ短調(Amin)として、コード名については、IMaj、IImなど、主音に対する度数で表し、そのデータをRAM23などに記憶している。他の調性の場合には、当該調性のルート音と、「C」(或いは「A」)の音との音高差に基づいて、ルート音を伴うコード名を得ることが可能である。
なお、楽曲の調性は、ハ長調(CMaj)或いはイ短調(Amin)として予め定められている場合に限られず、他の長調、短調を含めてリアルタイムに決定してもよい。この場合、決定される調の種類は、1つ以上となる。さらに、決定された調は、RAM23に記憶される。
ただし、押鍵が何拍目に行なわれたかなど、押鍵された時間的な位置や、押鍵が拍の頭であるか否か、或いは、複数の押鍵による音型(持続、順次進行、跳躍など)に基づいて、上記現在メロディ音CM及び先行メロディ音PMを決定すべき場合がある。つまり、現実に現在押鍵されている鍵以外の押鍵について現在メロディ音CMとすべき場合や、現在押鍵された鍵の1つ前に押鍵された鍵以外の押鍵について先行メロディ音PMとすべき場合がある。以下、コード判定処理において、ステップS24〜30は、主として、現在メロディ音CM及び先行メロディ音PMの決定に関する。引き続いて実行されるステップS31が、現在メロディ音CM、先行メロディ音PM及び先行コード名PreCHに基づいて、具体的に現在コード名CurCHを決定する処理となる。
まず、CPU21は、現在時刻が属する拍の情報及び押鍵情報(鍵オンの時刻や鍵オフまでの時間)を特定して、現在の拍において押鍵された鍵を特定し、かつ、現在時刻が属する拍の一つ前の区間(前拍区間)において、押鍵されていた鍵の情報を取得する(ステップS21)。ステップS21において、現在の拍における押鍵された鍵の情報が、現在メロディ音CMの初期値、前拍区間の先頭で押鍵された鍵の情報が、先行メロディ音PMの初期値となる。
次いで、CPU21は、拍の情報及び押鍵情報に基づいて、現在時刻が属する拍の先頭に押鍵中の鍵が存在しているかを判断する(ステップS22)。ステップS23でNoと判断された場合には、コード名判定処理が終了する。ステップS22でYesと判断された場合には、CPU21は、現在コード名CurCHを、先行コード名PreCHにコピーする(ステップS23)。
CPU21は、後述するコードテーブルを指定するテーブル指定情報を、第2のコードテーブルを指定する情報に設定する(ステップS24)。コードテーブルには、主として押鍵が1拍目であるときに用いる第1のコードテーブルと、それ以外のときに用いる第2のコードテーブルが含まれ、それぞれROM22に格納されている。テーブル指定情報は、第1のコードテーブル或いは第2のコードテーブルの何れを用いるかを示す情報であり、RAM23に格納される。
次いで、押鍵された鍵の時間的位置、つまり、鍵が何拍目に押鍵されたかを判断する(ステップS25、26、28)。押鍵が1拍目である場合(ステップS25でYes)或いは押鍵が3拍目である場合(ステップS26でYes)には、CPU21は、1拍目・3拍目対応ノート決定処理を実行する(ステップS27)。押鍵が2拍目である場合(ステップS28でYes)には、2拍目対応ノート決定処理を実行する(ステップS29)。また、ステップS508でNoと判断された場合、つまり、押鍵が4拍目である場合には、4拍目対応ノート決定処理を実行する(ステップS30)。
本実施の形態においては、楽曲は4分の4拍子であり、1小節が4拍で構成される。押鍵がn拍目であることは、押鍵のタイミングが、第n拍の先頭以降で、第(n+1)拍の先頭よりも時間的に早いことを意味している。
楽曲の構成要素には拍子及び拍という概念がある。また、拍子においては拍ごとに重みがあり、上記拍の重みを考慮してメロディは進行する。また、シンコペーションなど、場合によって拍の重みが移動する場合もある。本実施の形態においては、拍の重みを考慮して、最適なメロディの流れを構成する構成音を抽出し、コード判定に用いるのに最適な現在メロディ音CM及び先行メロディ音PMを特定する。
図6〜図9は、本実施の形態にかかる1拍目・3拍目対応ノート決定処理の例を示すフローチャートである。図6に示すように、押鍵が1拍目に関するものであるかを判断する(ステップS41)。ステップS24でYesと判断された場合には、CPU21は、テーブル指定情報を、第1のテーブルを示す情報に変更する(ステップS42)。次いで、CPU12は、第1のドミナントモーション判定処理を実行する(ステップS43)。
ドミナントモーション判定処理は、メロディの流れからドミナントモーション(つまり、属和音(ドミナント)から主和音(トニック)への進行)を抽出するものである。本実施の形態においては、処理においてコード名を考慮した第1のドミナントモーション判定処理と、コード名を考慮しない第2のドミナントモーション判定処理とが用いられる。図10は、本実施の形態にかかる第1のドミナントモーション判定処理の例を示すフローチャートである。
図10に示すように、CPU21は、RAM23に格納された先行コード名PreCHが、メジャー系のドミナントコードのいずれかに対応するかを判断する(ステップS81)。ここで、本実施の形態にかかる第1のドミナントモーション判定処理においては、たとえば、メジャー系のドミナントコードは、「VMaj」、「V7」及び「VIIm7(−5)」としている。ステップS81でYesと判断された場合には、CPU21は、(先行メロディ音PM及び現在メロディ音CMの値の組である(PM,CM)が、(F,E)、(B,C)、(D,C)の何れかであるかを判断する(ステップS82)。ステップS82では、先行メロディ音PMから現在メロディ音CMへの動きが、長調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。
ステップS82でYesと判断された場合には、CPU21は、現在コード名CurCHを「IMaj」に決定し、その情報をRAM23に格納する(ステップS83)。その後、CPU21は、ドミナントモーション処理において第1の判定結果であったことを示す情報をRAM23に格納する(ステップS84)。ステップS81でNo或いはステップS82でNoと判断された場合には、CPU21は、先行コード名PreCHが、マイナー系のドミナントコードの何れかに対応するかを判断する(ステップS85)。ここで、本実施の形態において、たとえば、マイナー系のドミナントコードは、「IIIMaj」及び「III7」としている。
ステップS85でYesと判断された場合には、CPU21は、(PM,CM)が、(G#,A)、(B,A)、(D,C)の何れかであるかを判断する(ステップS86)。ステップS86においては、先行メロディ音PMから現在メロディ音CMへの動きが、短調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。ステップS86でYesと判断された場合には、CPU21は、現在コード名CurCHを「VImin」に決定し、その情報をRAM23に格納する(ステップS87)。その後、ステップS84に進む。
ステップS85でNoと判断された場合、或いは、ステップS86でNoと判断された場合には、CPU21は、ドミナントモーション処理において第2の判定結果であったことを示す情報をRAM23に格納する(ステップS88)。
ステップS43の第1のドミナントモーション判定処理が終了すると、CPU21は、第1のドミナントモーション判定処理の結果が、第2の処理結果であったかを判断する(ステップS44)。ステップS44でNoと判断された場合、つまり、第1のドミナントモーション判定処理の結果が、第1の処理結果であった場合には、先行メロディ音PM及び現在メロディ音CMを初期値から変更することなく、RAM23に格納して、処理を終了する(ステップS45)。ステップS44でYesと判断された場合には、CPU21は、RAM23に格納された押鍵情報を参照して、現在時刻に対応する拍の直前拍に押鍵があったかを判断する(ステップS46)。
ステップS44でYesと判断された場合には、CPU21は、RAM23の押鍵情報を参照して、直前拍先頭以降にも押鍵があったかを判断する(ステップS47)。ステップS47でNoと判断されたことは、直前拍及び今回の拍でそれぞれ4分音符が押鍵されたことを意味する。この場合の処理については後述する。ステップS47でYesと判断された場合には、CPU21は、RAM23に格納された押鍵情報中、直前拍先頭以降に押鍵された鍵の発音時間を参照して、現在まで発音中であるかを判断する(ステップS49)。ステップS49では、拍頭の押鍵ではなくても、それが直前拍先頭以降に押鍵されかつ維持されているものであれば、シンコペーションに該当するため、シンコペーションに該当する押鍵があったかを判断している。
ステップS49でYesと判断された場合には、先行メロディ音PMは初期値のまま、その一方、直前拍先頭以降に押鍵された鍵を現在メロディ音CMとするとともに、シンコペーションフラグSYNを「1」にセットして、RAM23に格納する(ステップS50)。先行メロディ音PM及び現在メロディ音CMは、RAM23に格納される。シンコペーションに該当する押鍵は、拍頭における押鍵と同様の重みを有するため、拍頭と同様に扱われる。
次に、図7を参照して、ステップS46でNoであった場合について説明する。ステップS46でNoと判断された場合には、CPU21は、現在の拍先頭における押鍵が曲開始音に該当するかを判断する(ステップS51)。ステップS51は、CPU21が、AM23に格納された押鍵情報を参照して、最初の押鍵情報であるかを判断することにより実現できる。ステップS51でYesと判断された場合には、先行メロディ音PMとして、現在メロディ音CMを与える。また、現在メロディ音CMを初期値から変更することはないが、CPU21は、テーブル指定情報を第2のコードテーブルを指定する情報に変更する(ステップS52)。
ステップS51でNoと判断された場合には、8拍以上の時間、押鍵が無いかを判断する(ステップS53)。ステップS53でYesと判断された場合には、CPU21は、現在メロディ音CMは初期値のまま維持し、その一方、先行メロディ音PMとして、現在メロディ音CMを与え、RAM23に情報を格納する(ステップS54)。ステップS53でYesと判断される場合は、2小節以上、新たな押鍵が無いことになる。この場合には、メロディシーケンスの意味が薄くなるため、2小節以上前に押鍵された先行メロディ音PMの初期値は無視することとしている。ステップS53でNoと判断された場合には、CPU21は、先行メロディ音PM及び現在メロディ音CMを初期値のまま維持する(ステップS55)。
次に、図8を参照して、ステップS47でNoと判断された場合について説明する。ステップS47でNoと判断された場合には、CPU21は、現在メロディ機能(CurrentMelodyFunction:CMF)が、非和声音(OtherTone:OT)であるかを判断する(ステップS61)。ここに、現在メロディ機能CMFは、先行コード名PreCHに対する現在メロディ音CMの機能を示す。本実施の形態において、CMFは、現在メロディ音CMが、先行コード名PreCHのコード構成音であることを示すコードトーン(ChordTone:CT)、現在のスケール(調性)の構成音であることを示すスケールノート(ScaleNote:CN)、その他の音(非和声音)を示すアザートーン(OtherTone)の何れかとなる。
より具体的には、コード名と音名との間を関連付けたメロディ機能テーブルをROM22に格納し、CPU21が、現在メロディ音CM及び先行コード名PreCHの組に対応付けられた値を参照して、現在メロディ機能を判断している。図25は、本実施の形態にかかるメロディ機能テーブルの一例の部分を示す図である。図25に示すように、メロディ機能テーブル2500においては、現在メロディ音CMと先行コード名PreCHからなる値の組に対応して、所定の値が取得できるようになっている。図25において、メロディ機能テーブル2500中、CTはコードトーンを示し(たとえば、符号2501〜2503参照)、SNは、スケールノートを示す(たとえば、符号2511〜2513参照)。また、図25においては、メロディ機能テーブル2500中、何も記載されていない欄(たとえば、符号2521、2522参照)は、アザートーンを示す。
ステップS61でYesと判断された場合には、CPU21は、先行メロディ音PM及び現在メロディ音CMを、初期値のまま維持する(ステップS62)。その一方、ステップS61でNoと判断された場合には、CPU21は、現在メロディ機能CMFがスケールノートSNであるかを判断する(ステップS63)。ステップS63でYesと判断された場合には、CPU21は、先行メロディ音PMと現在メロディ音CMとの差が2半音以内であるかを判断する(ステップS64)。ステップS64では、いわゆる順次進行であるかが判断されている。ステップS64でYesと判断された場合、又は、ステップS63でNoと判断された場合には、第1のドミナントモーション処理を実行する(ステップS65)。
次いで、CPU21は、第1のドミナントモーション判定処理(ステップS65)において、第2の判定結果であるかを判断する(ステップS66)。ステップS66でNoと判断された場合、つまり、第1の判定結果である場合には、CPU21は、先行メロディ音PM及び現在メロディ音CMを、初期値のまま維持する(ステップS62)。ステップS66でYesと判断された場合には、CPU21は、現在の押鍵、つまり、処理対象となっている押鍵が1拍目のものであるかを判断する(ステップS63)。ステップS63でYesと判断された場合には、CPU21は、先行メロディ音PM及び現在メロディ音CMを、初期値のまま維持する(ステップS68)。
その一方、ステップS67でNoと判断された場合、つまり、処理対象となっている押鍵が3拍目のものであれば、CPU21は、先行メロディ音PMとして、初期的な先行メロディ音PMよりさらに1つ前に押鍵された音高PPMを与える(ステップS69)。なお、現在メロディ音CMは初期値が維持される。これは、3拍目で順次進行を構成する楽音は、装飾的な音である可能性が高く、メロディラインを支配する本来の楽音は、さらにその一拍前の楽音とすることが適切であると考えられるからである。
次に、ステップS49でNoと判断された場合について説明する。図9に示すように、CPU21は、直前拍における拍頭以降の押鍵音を特定し(ステップS71)、特定された押鍵音の音高が、初期的なCMと同一であるかを判断する(ステップS72)。ステップS72でYesと判断された場合には、CPU21は、現在メロディ音CMを初期的な状態で維持し、その一方、先行メロディ音PMとして、現在メロディ音CMの値を与える(ステップS73)。たとえば、直前拍において、8分音符で「D」、「C」という順でメロディが進行し、現在の拍での押鍵が「C」であった場合を考える。この場合には、直前拍の最初の「D」の音は装飾音であると考えて、「D」から「C」というシーケンスではなく、「C」から「C」というシーケンスが適当であると考えている。このため、先行メロディ音を、現在メロディ音と同じにして、同じ音の連続としている。
ステップS72でNoと判断された場合には、CPU21は、特定された拍頭以降の押鍵音が、全て、先行メロディ音PMと等しいかを判断する(ステップS74)。ステップS74でYesと判断された場合には、ステップS63に進む。たとえば、直前拍において、16分音符で、「D」、「C」、「C」、「C」という4つの押鍵がなされたと考える。この場合には、拍頭であるからといって「D」は、装飾的な音であることも考えられるため、拍頭の押鍵である「D」を、先行メロディ音PMとすべきではない場合もある。そこで、ステップS63以降の処理を実行している。
その一方、ステップS74でNoと判断された場合には、CPU21は、先行メロディ音PM及び現在メロディ音CMを、初期値のまま維持する(ステップS75)。
次に、2拍目対応ノート決定処理(ステップS29)について説明する。図11〜図14は、本実施の形態にかかる2拍目対応ノート決定処理の例を示すフローチャートである。図11に示すように、CPU21は、1拍目に押鍵が無かったかを判断する(ステップS91)。ステップS91でYesと判断された場合、つまり、押鍵が゛無かった場合には、CPU21は、テーブル指定情報を第1のコードテーブルを指定する情報に変更する(ステップS91)。たとえば、曲の途中で、前の小節の音が延び、1拍目が休符で、2拍目から次のフレーズが開始されるときには、本実施の形態では、2拍目で押鍵された音が1拍目と同様の重みがあると考え、1拍目用のコードテーブルである第1のコードテーブルを使用するようにしている。
2拍目対応ノート処理では、1拍目・3拍目対応ノート決定処理の第1のドミナントモーション判定処理(ステップS43)及びその判定結果に基づく処理(ステップS44、45)が省略されている。ステップS93〜ステップS97は、それぞれ、図6のステップS46〜50と同様である。
また、図12は、ステップS93でNoと判断された場合に実行される処理である。ステップS101、ステップS103〜105は、それぞれ、図7のステップS51、ステップS53〜55と同様である。また、ステップS102では、テーブル指定情報の変更が伴わないことを除き、図7のステップS52と同様である。
次に、ステップS94でNoと判断された場合について説明する。図13に示すように、CPU21は、現在メロディ機能CMFが、非和声音OTであるかを判断する(ステップS111)。ステップS111及びステップS111でYesの場合に進むステップS112は、図8のステップS61、62と同様である。
ステップS111でNoと判断された場合には、CPU21は、先行コード名PreCHが無判定コード以外のコードであるかを判断する(ステップS113)。図21(特にステップS205)において説明するように、無判定コードについては、先の処理で転調フラグが「1」以上の値となっている。そこで、ステップS113では、RAM23に格納された転調フラグが「1」以上であるかを判断すれば良い。
ステップS113でNo、つまり、先行コード名PreCHが無判定コードである場合には、CPU21は、先行メロディン音PMとして、現在メロディ音CMを与える(ステップS114)。その一方、ステップS113でYesと判断された場合、つまり、先行コード名PreCHが無判定コード以外である場合には、現在メロディ機能CMFがスケールノートSNであるかを判断する(ステップS115)。ステップS63でYesと判断された場合には、CPU21は、先行メロディ音PMと現在メロディ音CMとの差が2半音以内であるかを判断する(ステップS116)。ステップS115及びステップS116は、図8のステップS63及び64と同様である。ステップS115でNoと判断された場合、或いは、ステップS116でYesと判断された場合には、CPU21は、現在コード名CurCHとして、先行コード名PreCHを与える(ステップS117)。つまり、先行コード名PreCHが保持されることになる。
2拍目や4拍目においては、先行コード名が維持されるコードホールドが行なわれる場合があるため、適切なコードホールドを実現している。本実施の形態では、現在メロディ機能CMFがコードトーン(CT)である場合、或いは、現在メロディ機能CMFがスケールノート(SN)であり、かつ、順次進行である場合には、コードホールドを行なっている。4拍子の楽曲では、2拍目及び4拍目は弱拍である。したがって、メロディが弱拍を強調するものでない限り、基本的に、2拍目及び4拍目のコードは、1拍目及び3拍目のコードを維持している。
たとえば、図46に示す楽曲では、拍頭に「C」、「D」、「E」、「F」、「E」、「D」、「C」という音があり、この音のシーケンスは順次進行となっている。実際には、このシーケンスに適切なコード名は、IMaj(CMaj)である。しかしながら、ステップS115〜ステップS117に示す処理を実行しないと、2拍目や4拍目では、コード名がIMaj(CMaj)以外になってしまう。そこで、ステップS115〜116に示すように一定の条件の下では、コードホールドを行なって、適切なコード名を得られるようにしている。
ステップS117の後、CPU21は、RAM23中のコード決定フラグを「1」にセットする(ステップS118)。この場合には、ステップS117で既に現在コード名CurCHが決定されるため、後続するコード決定の処理を要さないからである。
また、ステップS116でNoと判断された場合には、ステップS112に進み、先行メロディ音PM及び現在メロディ音CMが維持される。
ステップS96でNoと判断された場合の処理は、図14に示される。図14のステップS121〜ステップS125は、図9のステップS71〜75と同様である。ステップS124でYesと判断された場合には、図10のステップS115に進み、コードホールドが判断される。
次に、4拍目対応ノート決定処理(ステップS30)について説明する。図15〜図16は、本実施の形態にかかる4拍目対応ノート決定処理の例を示すフローチャートである。4拍目対応ノート決定処理は、2拍目対応ノート決定処理と類似する。
図15に示すように、4拍目対応ノート決定処理においては、1拍目の押鍵の有無及びそれに伴う処理(図11のステップS91〜92)は省略されている。図15において、ステップS131〜135は、図11のステップS93〜97と同様である。また、ステップS131でYesと判断された場合には、図12の処理が実行される。
ステップS132でNoと判断された場合には、図16に示す処理が実行される。図16において、ステップS141〜146は、図13のステップS111〜116と同様である。4拍目対応ノート処理においては、ステップS145でNo或いはステップS146でYesと判断されたときに、さらに、第2のドミナントモーション判定処理(ステップS147)を実行し、その結果に基づいて、コードホールドと行なうべきかを判断している。
図17は、本実施の形態にかかる第2のドミナントモーション判定処理の例を示すフローチャートである。第2のドミナントモーション判定処理では、メロディ音の遷移のみが判断され、先行コード名PreCHのコード種別は考慮されない。図17に示すように、CPU21は、(PM,CM)が、(F,E)、(B,C)、(D,C)の何れかであるかを判断する(ステップS151)。これは、図10のステップS82と同様である。ステップS151でNoと判断された場合には、CPU21は、(PM,CM)が、(G#,A)、(B,A)、(D,C)の何れかであるかを判断する(ステップS153)。これは、図10のステップS86と同様である。
ステップS151でYesと判断された場合、或いは、ステップS153でYesと判断された場合には、CPU21は、ドミナントモーション処理において第1の判定結果であったことを示す情報をRAM23に格納する(ステップS152)。その一方、ステップS153でNoと判断された場合には、CPU21は、ドミナントモーション処理において第1の判定結果であったことを示す情報をRAM23に格納する(ステップS154)。
第2のドミナントモーション判定処理により第2の判定結果となった場合(ステップS148でYes)には、CPU21は、現在コード名CurCHとして、先行コード名PreCHを与える(ステップS149)。つまり、先行コード名PreCHが保持されることになる。次いで、CPU21は、RAM23中のコード決定フラグを「1」にセットする。その一方、ステップS148でYesと判断された場合には、ステップS142に進み、先行メロディ音PM及び現在メロディ音CMが維持される。
ステップS134でNoと判断された場合には、図14に示す処理が実行される。
ステップS27、29、30に示す、拍のそれぞれに対応したノート決定処理が終了すると、処理により修正された先行メロディ音PM及び現在メロディ音CMに基づいて、コード決定処理が実行される(ステップS31)。図18〜図21は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
図18に示すように、CPU21は、コードホールドにより既に現在コード名CurCHが決定され、コード決定フラグが「1」ではないかを判断する(ステップS161)。ステップS161でNoと判断された場合、つまり、コード決定フラグが「1」である場合には、CPU21は、現在コード名CurCH及びその発音時刻をRAM23の所定の領域に格納する(ステップS175)。
ステップS161でYesと判断された場合、つまり、コード決定フラグが「1」ではない場合には、CPU21は、RAM23から先行メロディ音PM及び現在メロディ音CMを取得する(ステップS162)。CPU21は、先行メロディ音PMが曲開始音であるかを判断する(ステップS163)。ステップS163においては、たとえば、先行メロディ音PMよりさらに前の時刻に押鍵された音が存在しないことを判断すれば良い。ステップS163でNoと判断された場合には、CPU21は、先行コード音PreCHが無判定コードであるかを判断する(ステップS164)。
ステップS163でYesと判断された場合、或いは、ステップS164でYesと判断された場合には、CPU21は、先行メロディ音PMとして、現在メロディ音CMを与える(ステップS165)。ステップS164でYesと判断された場合には、先行コード名PreCHが無判定コードであるため、新たにメロディシーケンスが開始する方が妥当であるからである。
次いで、CPU21は、メロディシーケンステーブルを参照して(PM,CM)に対応する値の組を取得する(ステップS166)。図22は、本実施の形態にかかるメロディシーケンステーブルの例を示す図である。図22に示すように、メロディシーケンステーブル2200には、所定の先行メロディ音PM及び現在メロディ音CMについて値の組が格納されている。(PM,CM)に対応する値の組がメロディシーケンステーブル2200中に存在すれば、その値の組を一時的にRAM23に格納すれば良い。その一方、(PM,CM)に対応する値の組が、メロディシーケンステーブル2200中に存在しなければ、値の組が存在しないことを示す情報をRAM23に格納すれば良い。
次に、CPU21は、現在メロディ音CMの直前に押鍵された音(CM直前音)を特定する(ステップS167)。ここにいう直前に押鍵された音は、実際に直前に押鍵された音であり、先行メロディ音PMと同一ではない場合もある。CPU21は、ステップS167で特定されたCM直前音と、現在メロディ音CMとを比較して、これらの音高差が5半音以上であるかを判断する(ステップS168)。ステップS168でYesと判断された場合には、CPU21は、現在メロディ音CMが1拍目の押鍵に関するものであるかを判断する(ステップS169)。
メロディシーケンスにおいては、核となるべきメロディ音が含まれ、その前後には、核となるメロディ音を装飾するメロディ音が存在する場合がる。装飾するメロディ音は、核となるメロディ音からそれほど音高差が無いのが通常である。その一方、音高差が一定範囲(たとえば4度程度)以上となるように跳躍する場合には、跳躍した後の音に比較的重みが大きくなる場合が多い。そこで、ステップS168で、音高差を判断して、その差に基づいて異なる処理を行なっている。
ステップS169でYesと判断された場合には、CPU21は、先行コード名PreCHが2小節以上継続しているかを判断する(ステップS171)。ステップS171でYesと判断された場合には、CPU21は、第1のコードテーブルのうち、種別として「jump2」の欄を参照することを決定し、第1のコードテーブル中の所定のコード名を取得する(ステップS172)。その一方、ステップS172でNoと判断された場合には、CPU21は、第1のコードテーブルのうち、種別として「jump1」の欄を参照することを決定し、第1のコードテーブル中の所定のコード名を取得する(ステップS173)。
図23は、本実施の形態にかかる第1のコードテーブルの例を示す図である。図23においては、第1のコードテーブルの一部を示している。図23に示すように、コードテーブル2300では、少なくとも、先行コード名の機能(先行コード機能(PreviousChordFunction):符号2310参照)及び(先行メロディ音PM,現在メロディ音CM)の組(たとえば、符号2301、2302参照)に基づいて、コード名が決められるようになっている。
さらに、本実施の形態においては、「ジャンプなし」、「jump1」及び「jump2」という3つの種別(符号2311参照)を設け、先行コード機能、(先行メロディ音PM,現在メロディ音CM)の組及び種別に基づいて、コード名が決定されるようになっている。
先行コード機能は、トニック(TO)、サブドミナント(SU)及びドミナント(DO)の3つがある。トニックに該当するコード名として、「IMaj」、「IM7」、「IIImin」、「IIIm7」、「VImin」、「VIm7」がある。サブドミナントに該当するコード名として、「IImin」、「IIm7」、「IIm7(−5)」、「IVMaj」、「IVM7」、「IVmin」、[IVmM7]がある。また、ドミナントに該当するコード名として、「IIIMaj」、「III7」、「III7sus4」、「VMaj」、「V7」、「V7sus4」、「VIIm7(−5)」がある。先行コード機能ごとの該当するコード名は、たとえば、RAM23に予め格納されている。
また、種別において「jump2」は、メロディシーケンスにおける跳躍及び先行コード名の継続を考慮して、コードの変化の程度を大きくしている。その一方、「jump1」では、「jump2」の場合よりも、コード変化の度合いが小さい。また、「ジャンプなし」という種別は、後述するように、第1のコードテーブルを使用する場合でも、「jump1」或いは「jump2」の種別が無い場合に使用されるものである。
たとえば、先行コード名PreCHの先行コード機能が「トニック」であり、かつ、(先行メロディ音PM,現在メロディ音CM)=(C,G)であり、種別が「jump2」であれば、第1のコードテーブルから「VMaj」(符号2321参照)が取得される。また、先行コード名PreCHの先行コード機能が「トニック」であり、かつ、(先行メロディ音PM,現在メロディ音CM)=(C,G)であり、種別が「jump1」であれば、第1のコードテーブルから「IMaj」(符号2322参照)が取得される。
CPU21は、現在コード名CurCHとして、第1のコードテーブルから特定されたコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納する(ステップS174、175)。
次に、ステップS168でNo或いはステップS169でNoと判断された場合について説明する。CPU21は、現在メロディ音CMが、先行コード名PreCHのコードトーン(CT)であるかを判断する(ステップS181)。ステップS181でYesと判断された場合には、CPU21は、先行コード名PreCHの楽音の発音時刻及び現在時刻に基づき、先行コード名PreCHの発音時間が2拍以内であるかを判断する(ステップS182)。ステップS182でYesと判断された場合には、CPU21は、さらに、シンコペーションフラグが「1」であるかを判断する(ステップS183)。
ステップS183でNoと判断された場合には、CPU21は、第2のドミナントモーション処理を実行して(ステップS185)、先行メロディ音PMから現在メロディ音CMへの移行がドミナントモーションであるかを判断する。第2のドミナントモーション処理の結果が第2の判定結果である場合(ステップS185でYes)には、CPU21は、現在コード名CurCHとして、先行コード名PreCHを与える(ステップS186)。つまり、先行コード名PreCHが保持されることになる。
ステップS181でNo、ステップS182でNo、或いは、ステップS185でNoと判断された場合には、CPU21は、(先行メロディ音PM,現在メロディ音CM)に対応する値の組が、メロディシーケンステーブル中に存在していたかを判断する(ステップS187)。図18のステップS166において、値の組或いは値の組が存在しないことを示す情報がRAM23に格納されているため、その情報を参照することにより、ステップS187の判断が可能である。
ステップS187でYesと判断された場合には、現在メロディ音CMが、1拍目或いは2拍目に関するものであり、かつ、テーブル指定情報は第1のテーブルを示しているかを判断する(ステップS188)。ステップS188でYesと判断された場合には、CPU21は、第1のコードテーブルのうち、種別として「ジャンプなし」の欄を参照することを決定し、第1のコードテーブルにおいて、所定のコード名を取得する(ステップS189)。これに対して、ステップS188でNoと判断された場合には、CPU21は、第2のコードテーブルを参照することを決定し、第2のコードテーブルにおいて、所定のコード名を取得する(ステップS190)。
図24は、本実施の形態にかかる第2のコードテーブルの例を示す図である。図24においては、第2のコードテーブルの一部を示している。図24に示すように、コードテーブル2300では、先行コード名の機能(先行コード機能(PreviousChordFunction):符号2410参照)及び(先行メロディ音PM,現在メロディ音CM)の組(たとえば、符号2401、2402参照)に基づいて、コード名が決められるようになっている。たとえば、先行コード名PreCHの先行コード機能が「サブドミナント」であり、かつ、(先行メロディ音PM,現在メロディ音CM)=(C,G)であれば、第2のコードテーブルから「VMaj」(符号2421参照)が取得される。
その後、CPU21は、現在コード名CurCHとして、第1のコードテーブル或いは第2のコードテーブルから特定されたコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納する(ステップS191、175)。
ステップS187においてYesと判断される場合は、メロディシーケンステーブルに、(先行メロディ音PM,現在メロディ音CM)の組が存在したため、コードテーブルを参照することで適切なコード名が取得されている。その一方、ステップS187でNoと判断された場合には、転調或いは一時的な無判定コードの決定などが行なわれる。ステップS187でNoと判断された場合には、CPU21は、現在メロディ音CMの発音時間(押鍵時間)が4分音符より大きいか、つまり、1拍より長く発音されているかを判断する(ステップS201)。
ステップS201でNoと判断された場合には、CPU21は、先行コード名PreCHを変更せず、そのまま現在コードCurCHとする(ステップS207)。ステップS201でNoとなる場合は、演奏者が意図して押鍵したのではなく、ミスタッチによって誤った鍵を押鍵してしまった可能性が高い。そこで、この場合は、コード名を変更することなく、先行コード名PreCHをそのまま現在コード名CurCHとする。
ステップS201でYesと判断された場合には、CPU21は、現在メロディ音の発音時間(押鍵時間)が、3拍以下であるかを判断する(ステップS202)。ステップS202でYesと判断された場合には、転調フラグが「2」以下であるかを判断する。ステップS203でYesと判断された場合には、CPU21は、RAM23に格納される転調フラグの値をインクリメントする(ステップS205)。ステップS202でNo或いはステップS203でNoと判断された場合には、CPU21は、転調処理を実行する(ステップS204)。
本実施の形態においては、基本的には、現在メロディ音CM、先行メロディ音PMを含むメロディ音は、「C」のスケール(調性)で処理される。したがって、転調処理では、転調後の調性と「C」との音高差が算出され、その音高差をオフセットとしてRAM23に格納すれば良い。転調処理以後は、実際に押鍵された鍵番号により特定される音名をオフセットだけ減じることで、「C」の調性で処理を続行することが可能となる。
ステップS205の後、CPU21は、現在メロディ音CMが、先行コード名PreCHのコードトーン(CT)或いはスケールノート(SN)であるかを判断する(ステップS206)。ステップS206においては、ステップS61と同様に、CPU21は、メロディ機能テーブルを参照して、現在メロディ音CM及び先行コード名PreCHの組に対応付けられた値が、コードトーン或いはスケールノートであるかを判断すれば良い。ステップS206でYesと判断された場合には、CPU21は、コードを保持すべく現在コード名CurCHに、先行コード名PreCHを与える(ステップS207)。
ステップS207でNoと判断された場合には、CPU21は、無判定コードテーブルを参照して、ディミニシュ(dim)或いはオーギュメント(aug)のコードを、現在コード名CurCHに与える(ステップS208)。図26は、本実施の形態にかかる無判定コードテーブルの一例の部分を示す図である。図26に示す無判定コードテーブル2600においては、現在メロディ音CMと先行コード名PreCHからなる値の組に対応して、所定の値が取得できるようになっている。
無判定コードテーブルにおいて2600において、空欄(たとえば、符号2601参照)は、現在メロディ音CMと先行コード名PreCHからなる値の組に対応付けられた現在メロディ機能(CMF)が、コードトーン(CT)或いはスケールノート(SN)であることを意味している(図25参照)。したがって、無判定コードテーブル2600において空欄となる現在メロディ音CMと先行コード名PreCHからなる値の組については、現在コード名CurCHが無判定コードとなることが無いため、値が格納されていない。したがって無判定コードテーブル2600では、現在メロディ機能(CMF)が、アザートーン(OT)である場合について、ディミニシュ(dim)或いはオーギュメント(aug)の何れかを指定する情報が格納されている。
CPU21は、無判定コードテーブル2600から、現在メロディ音CMと先行コード名PreCHからなる値の組に対応付けられた、ディミニシュ(dim)或いはオーギュメント(aug)の何れかを指定する情報を取得して、現在メロディ音CMを根音とするコード名を得る。たとえば、現在メロディ音が「C#」、先行コード名が「IMaj」であれば、コード名は、「I#dim」となる(符号2611参照)。また、現在メロディ音が「A♭」、先行コード名が「IM7」であれば、コード名は、「IV♭aug」となる。CPU21は、このようにして、現在メロディ音CMを根音とするディミニッシュ(dim)或いはオーギュメント(aug)のコード名を、現在コード名CurCHとして決定し、RAM23に格納する。
上述したように、本実施の形態においては、まず、現在の拍の拍頭の押鍵に関する現在メロディ音CMと、前拍の拍頭の押鍵に関する先行メロディ音PMとが、何拍目かを示す情報、先行コード名PreCHや、押鍵タミングなどにしたがって修正される(図5のステップS21〜30)。その上で、現在メロディ音CM、先行メロディ音PM及び先行コード名PreCHに基づいて、現在コード名CurCHが決定される(ステップS31)。
コード名判定処理(図3のステップS4)が終了すると、CPU21は、自動伴奏処理を実行する(ステップS5)。図45は、本実施の形態にかかる自動伴奏処理の例を示すフローチャートである。まず、CPU21は、自動調修正装置10が自動伴奏モードの下で動作しているかを判断する(ステップS411)。ステップS411でYesと判断された場合には、CPU21のタイマ(図示せず)を参照して、現在時刻が、自動伴奏データ中、メロディ音のデータについてのイベントの実行タイミングに達しているかを判断する(ステップS412)。
自動伴奏データには、3つの種類の楽音、すなわち、コード音、ベース音、リズム音のデータが含まれる。ベース音のデータ及びコード音のデータは、発音すべき楽音ごとに、その音高、発音タイミング及び発音時間を含む。また、リズム音のデータは、発音すべき楽音(リズム音)ごとに、その発音タイミングを含む。
ステップS412でYesと判断された場合には、CPU21は、ベース発音・消音処理を実行する(ステップS413)。メロディ発音・消音処理においては、処理にかかるイベントがノートオンイベントであるかを判断する。ノートオンイベントであることは、現在時刻が、上記ベース音のデータにおける所定の楽音の発音タイミングとほぼ一致することで判断できる。その一方、ノートオフイベントであることは、現在時刻が、当該楽音の発音タイミングに発音時間を加えた時刻とほぼ一致することで判断できる。
処理にかかるイベントがノートオフイベントである場合には、CPU21は、消音処理を実行する。その一方、処理にかかるイベントがノートオンイベントであれば、ベース音のデータにしたがった発音処理を実行する。
次いで、CPU21は、CPU21のタイマ(図示せず)を参照して、現在時刻が、自動伴奏データ中、コード音のデータについてのイベントの実行タイミングに達しているかを判断する(ステップS414)。ステップS414においてYesと判断された場合には、CPU21は、コード発音・消音処理を実行する(ステップS415)。コード音発音・消音処理においては、発音タイミングに達したコード音について発音処理を実行し、その一方、消音タイミングに達したコード音については消音処理を実行する。
その後CPU21は、現在時刻が、自動伴奏データ中、リズムのデータについてのイベントの実行タイミングに達しているかを判断する(ステップS416)。ステップS416においてYesと判断された場合には、CPU21は、リズム音発音処理を実行する(ステップS417)。リズム音発音処理においては、発音タイミングに達したリズム音についてノートオンイベントを生成する。
自動伴奏処理(図3のステップS5)が終了すると、CPU21は、音源発音処理を実行する(ステップS6)。音源発音処理において、CPU21は、生成されたノートオンイベントに基づいて、発音すべき楽音の音色及び音高を示すデータを音源部26に与え、或いは、消音すべき楽音の音色及び音高を示すデータを音源部26に与える。音源部26は、音色、音高、音長等を示すデータにしたがって、ROM22の波形データを読み出して、所定の楽音データを生成する。これにより、スピーカ28から所定の楽音が発生する。また、CPU21は、ノートオフイベントに基づいて、音源26にノートオフイベントが示す音高の消音を指示する。
音源発音処理(ステップS6)が終了すると、CPU21は、その他の処理(たとえば現在コード名CurCH及び現在メロディ音CMのRAM23への格納、表示部15への画像表示、LED(図示せず)の点灯、消灯など:ステップS7)を実行して、ステップS8に処理を移す。
ステップS8で、CPU21は、演奏終了か否かを判断する。具体的には、ノンリアルタイムコード付け修正スイッチ14が押下されたか否かを判断する。この判断がYESのとき、CPU21は、処理をステップS9に移し、NOのとき、ステップS2に処理を移す。演奏終了と判断されれば、RAM23には、ステップS7の処理により、一連の演奏によるリアルタイムコード付けの結果としてのコードデータとメロディデータとが格納されることになる。
ステップS9で、CPU21は、図27を参照して後述するノンリアルタイムコード修正処理を行う。ノンリアルタイムコード修正処理が終了すると、CPU21は、メインフローの処理を終了する。
図27は、本実施の形態にかかるノンリアルタイムコード修正処理の例を示すフローチャートである。
ステップS211で、CPU21は、図28及び図29を参照して後述する調修正検証処理を行う。
ステップS212で、CPU21は、図30を参照して後述するコード構成音検証処理を行う。
ステップS213で、CPU21は、図31乃至図34を参照して後述するフレーズ区切り検証処理を行う。
ステップS214で、CPU21は、図35及び図36を参照して後述するコード付け修正処理を行う。
ステップS215で、CPU21は、図37を参照して後述するメロディとコードスケールの比較処理を行う。
ステップS216で、CPU21は、図38を参照して後述するユーザーによる修正処理を行う。
その後、CPU21は、ノンリアルタイムコード修正処理を終了する。
図28及び図29は、本実施の形態にかかる調修正検証処理の例を示すフローチャートである。
ステップS221で、CPU21は、曲中キーは1個であるか否かを判断する。具体的には、CPU21は、RAM23に格納された調(曲中キー)の種類の数が1個であるか否かを判断する。この曲中キーは、鍵盤11により演奏入力されたメロディの音高の履歴に基づいて決定されたキーである。これは例えば、この音高の履歴に対応する音名群を抽出し、この音名群がダイアトニックスケールに全て含まれるキー(調)を検索することにより、求められる。検索には、キー毎のダイアトニックスケールノートを格納したテーブル等を用いることが考えられる。
ステップS221の判断がYESの場合、CPU21は、処理をステップS222に移し、NOの場合、処理をステップS234に移す。
ステップS222で、CPU21は、最終メロディ音によるキー確定表と曲中キーとを比較する。具体的には、CPU21は、最終メロディ音によるキー確定テーブル(図39)を参照し、曲中キーと最終メロディ音を比較する。例えば、図39によれば、曲中キーが「C」であり、最終メロディ音が「C、E、G」のいずれかであれば、曲中キーと最終メロディ音とが対応する部分に「C(1)」が格納されているので、後述するステップS223でマッチすることになる。
一方、曲中キーが「C」であり、最終メロディ音が「A」であれば、曲中キーと最終メロディ音とが対応する部分にデータが格納されていないので、後述するステップS223でマッチしないことになる。
ステップS223で、CPU21は、ステップS222での結果がマッチするか否かを判断する。この判断がYESの場合、キー判定に問題ないので、CPU21は、キー判定検証処理を終了し、NOの場合、キーを修正するために処理をステップS224に移す。
ステップS224で、CPU21は、最終メロディ音によるキー確定表に載っている最終音のあるキーを優先順位に従って候補キーとする。具体的には、CPU21は、最終メロディ音によるキー確定テーブル(図39)を参照し、候補キーを決定する。例えば、キー確定テーブル(図39)によれば、最終メロディ音が「A」の場合、「A」の列には、F(1)、D(2)、A(3)が格納されている。このF、D、Aは、メロディがAで終わったときに可能性の高いキーを示すものであり、数字は優先順位を示す。したがって、リアルタイムキー判定で曲中キーが「C」と判定されていて、かつ最終メロディ音がAであるこの場合は、優先順位の高いFキーが曲の最終部分の候補キーとなる。
なお、図39では、長調用のキー確定テーブルのみ開示しているが、短調用のキー確定テーブル(図示せず)も存在する。
ステップS225で、CPU21は、最終4小節を候補キーでコード付けし、ステップS226で、CPU21は、最後の4小節がカデンツ判定表とあっているか否かを判断する。これらの処理は、曲の最終部分が候補キーで問題ないか検証するための処理である。
例えば、候補キーが「F」の場合、最終4小節をキー「F」でコード付けして、コード付けした最初の4小節のコード機能が、カデンツ判定テーブル(図40)の曲エンド部のコード機能と一致するか否か判断する。この判断がYESの場合、CPU21は、処理をステップS227に移し、NOの場合、処理をステップS231に移す。
図40のカデンツ判定テーブルは、曲エンド部と曲中の部分とに分けて、可能性のあるカデンツ(終止形)の形を示したテーブルである。なお、イントロ部分やサビの部分などを追加してさらに細分化してもよい。図40の「T」は、トニック、「D」は、ドミナント、「S」は、サブドミナントを表している。
ステップS227で、CPU21は、曲頭から候補キーで問題ないか検証する。この処理は、候補キーの最後の4小節が、カデンツ判定テーブルの曲エンド部のコード機能と一致した場合に行われる。例えば、候補キーが「F」であった場合は、曲の最後の4小節はキー「F」で確定しているが、CPU21は、曲頭からキー「F」が成立するか否かを、リアルタイム(図4の鍵盤処理)で入力された曲頭からのメロディ音データをRAM23から読み出して検証する。
ステップS228で、CPU21は、候補キーで問題ないか否かを判断する。具体的には、CPU21は、ステップS227で曲頭から候補キーが成立したか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS230に移し、NOの場合、処理をステップS229に移す。
ステップS229で、CPU21は、矛盾したところでキーを2個に修正する。具体的には、CPU21は、曲頭からどの部分までが候補キーとして成立しないかをステップS227の検証結果から判断して、曲頭から候補キーとして成立しない箇所までと、侯補キーが成立し始める箇所から曲の最後までと、でキーを2つに分ける。例えば、リアルタイムキー判定で曲中キーが「C」と判定されており、かつ、候補キーが「F」の場合、「C」と「F」との2つのキーに分ける。その後、処理をステップS221に移す。
ステップS230では、曲頭から候補キーが成立しているので、CPU21は、キーを確定し、キー判定検証処理を終了する。
ステップS231で、CPU21は、キー確定表の次候補があるか否かを判断する。具体的には、キー確定テーブル(図39)を検索して判断する。例えば、最終メロディ音が「A」で、候補キーが「F」である場合、次候補キーとして、第2の優先順位のキーである「D」が存在する。一方、最終メロディ音が「A」で、候補キーが「A」である場合、次候補のキーは存在しない。この判断がYESの場合、CPU21は、処理をステップS232に移し、NOの場合、処理をステップS233に移す。
ステップS232で、CPU21は、候補キーをステップS231で判断した次候補のキーに置換し、ステップS225に処理を移す。
ステップS233で、CPU21は、キーを修正せず、キー判定検証処理を終了する。
ステップS234で、CPU21は、曲中のキーは2個である否かを判断する。この判断がYESの場合、CPU21は、処理をステップS235に移し、NOの場合、処理をステップS237に移す。
ステップS235で、CPU21は、冒頭キーと曲中キーの差が+1半音、+2半音、+3半音のいずれかであるか否かを判断する。この処理は、所謂盛り上がり転調をしているかどうかを判断する処理である。この判断がYESの場合、CPU21は、処理をステップS236に移し、NOの場合、処理をステップS240に移す。
ステップS236で、CPU21は、キーを確定し、キー判定検証処理を終了する。
ステップS237で、CPU21は、冒頭キーと最終キーとは同一であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS238に移し、NOの場合、処理をステップS240に移す。
ステップS238で、CPU21は、最後の4小節がカデンツ判定表とあっているか否かを判断する。具体的には、CPU21は、冒頭キーについては、カデンツ判定テーブル(図40)の曲中を参照して、冒頭キーの最後の4小節のコード機能が、カデンツ判定テーブル(図40)の曲中のコード機能と一致するか否かを判断する。一方、最終キーについては、カデンツ判定テーブル(図40)の曲エンド部を参照して、最終キーの最後の4小節のコード機能が、カデンツ判定テーブル(図40)の曲エンド部のコード機能と一致するか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS239に移し、NOの場合、処理をステップS240に移す。
ステップS239で、CPU21は、冒頭キーと最終のキーを確定する。例えば、ステップS238で、冒頭キーのみ一致すると判断されれば、冒頭キーのみ確定する。また、最終キーのみ一致すると判断されれば、最終キーのみ確定する。さらに、冒頭キーと最終キーの両方が一致すると判断されれば、冒頭キー及び最終キーが確定する。
ステップS240で、CPU21は、未検証キーがあるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS241に移し、NOの場合、キー判定検証処理を終了する。
ステップS241で、CPU21は、関係調借用判定表を参照し、キー確定後4小節以内にこの表にあるコードがあるか判断する。具体的には、CPU21は、関係調借用判定テーブル(図41)を参照して、キー確定後4小節以内に当該テーブルの主調独自コードがあるか判断する。
例えば、キーが3つある場合で、冒頭キーが「C」であり、冒頭キーと最終キーとの間のキーが属調(冒頭キーである主調Cの属調はG)である場合に、属調の最初の4小節以内に主調独自コードである、V7(G7)又はIIm(Dm)が存在するか否かが判断される。
ここで、主調独自コードについて説明する。例えば、主調がCの場合、属調Gは、主調の第4音(ファ)のみが半音上がった調であり、主調C(ド、レ、ミ、ファ、ソ、ラ、シ、で構成)と属調G(ソ、ラ、シ、ド、レ、ミ、ファ#、で構成)とを比較すると、属調Gには、ファは含まれない。よって、ファを含むコードであるG7又はDmは、属調Gのコードではなく、主調Cのコードである。本実施形態では、この意味で、主調独自コードという名称を用いている。
ステップS242で、CPU21は、ステップS241でマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS243に移し、NOの場合、処理をステップS248に移す。
ステップS243で、CPU21は、マッチしたところから元キーに修正する。例えば、主調独自コードが存在した箇所から、主調(冒頭キー)に修正する。
ステップS244で、CPU21は、最後の4小節がカデンツ判定表とあっているか否かを判断する。この処理では、ステップS243で修正後のキーでカデンツ判定テーブル(図40)の曲中を参照して、修正後のキーの最後の4小節のコード機能が、カデンツ判定テーブル(図40)の曲中のコード機能と一致するか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS245に移し、NOの場合、処理をステップS246に移す。
ステップS245で、CPU21は、その部分のキー(修正後のキー)を確定し、処理をステップS247に移す。
ステップS246で、CPU21は、残りキーは1個であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS222に移し、NOの場合、処理をステップS247に移す。
ステップS247で、CPU21は、未検証キーがあるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS241に移し、NOの場合、キー判定検証処理を終了する。
ステップS248で、CPU21は、最後の4小節がカデンツ判定表とあっているか否かを判断する。この処理では、未検証キーでカデンツ判定テーブル(図40)の曲中を参照して、未検証キーの最後の4小節のコード機能が、カデンツ判定テーブル(図40)の曲中のコード機能と一致するか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS245に移し、NOの場合、処理をステップS249に移す。
ステップS249で、CPU21は、同主調をチェックしたか否かを判断する。すなわち、CPU21は、関係調借用判定テーブル(図41)の最下段である同主調について主調独自コードの存在の有無をチェックしたか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS246に移し、NOの場合、処理をステップS250に移す。
ステップS250で、CPU21は、次の関係調を確認対象としてステップS241に処理を移す。例えば、属調についてチェックしたのであれば、次(その下段)の関係調である下属調を次の確認対象とする。
図30は、本実施の形態にかかるコード構成音検証処理の例を示すフローチャートである。ところで、リアルタイム自動コード付けで倚音や経過音などの装飾音が強拍に存在する場合に、当該装飾音がコード付けに影響を与えるためにコード付けが間違ってしまうことがある。そこで、この支配音検証処理は、このようなコード付けの間違いを修正するために、本実施形態においては、小節毎にメロディ音から装飾音を除いたコード構成音を抽出し、このコード構成音によって成立するコードがリアルタイムコード付けのコードと同一かどうか検証している。
まず、ステップS261で、CPU21は、その小節に1拍以上ある音について音長が長い順に3音抽出する。具体的には、RAM23に格納された一連の演奏によるリアルタイムコード付けの結果としてのコードデータとメロディデータを読み出して、その小節に1拍以上ある音について音長が長い順に3音抽出する。ここで、その小節とは、CPU21の処理対象となる小節であり、最初は1小節目を処理対象とする。
ステップS262で、CPU21は、抽出した3音がリアルタイムコード付けのコード構成音に含まれるか否かを判断する。具体的には、CPU21は、図43のコードスケールテーブルを参照して判断する。例えば、リアルタイムコード付けのコードがIMajorである場合に、ステップS261又はS263で抽出された3音が、コード構成音(CT)である「C、E、G」であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS264に移し、NOの場合、処理をステップS263に移す。
ここで、抽出した3音がコード構成音(CT)であれば、これら3音は支配的な音となる。
ステップS263で、CPU21は、小節を半分にして音長の長い順に3音抽出する。その後、ステップS262に処理を移す。
ステップS264で、CPU21は、小節内にコード以外のメロディ音があるか否かを判断する。具体的には、CPU21の処理対象となる小節内にステップS261又はステップS263で抽出した3音以外の音が存在し、かつ、図43のコードスケールテーブルを参照して当該音がコード構成音(CT)ではない場合に、当該音はコード以外のメロディ音となる。この判断がYESの場合、CPU21は、処理をステップS265に移し、NOの場合、処理をステップS270に移す。
ステップS265で、CPU21は、それらの音は装飾音を含むか否かを判断する。具体的には、CPU21は、装飾音データベース(図42)を参照して判断する。この判断がYESの場合、CPU21は、処理をステップS266に移し、NOの場合、処理をステップS267に移す。
ここで、図42を参照して装飾音データベースについて説明する。この装飾音データベースは、強拍(4拍子の場合は、1拍と3拍)に装飾音(コード構成音以外の音)があるか否かを判断するためのデータベースである。
例えば、図42の例によれば、4拍子の場合で、1拍目(強拍)にコード構成音以外の装飾音(例えば、倚音)があり、2拍目(弱拍)にコード構成音があり、かつ、2拍目のコード構成音は、1拍目の音より、全音(又は半音)高いか低いかの関係にある場合に、1拍目の音が装飾音と判断される。3拍目、4拍目についても同様である。
なお、図42では図示していないが、2拍子、3拍子等、4拍子以外の装飾音の有無を判定することもできる。
ステップS266で、CPU21は、装飾音を省いて、リアルタイムコード付け結果のコードと比較する。具体的には、CPU21は、RAM23に格納されたリアルタイムコード付けされたコードを読み出して、装飾音を省いた処理対象の小節の音が、図43のコードスケールテーブルの各コードに対応するコード構成音(CT)であるか否かを判断する。
ステップS267で、CPU21は、リアルタイムコード付け結果のコードと比較する。具体的には、CPU21は、RAM23に格納されたリアルタイムコード付けされたコードを読み出して、処理対象の小節の音が、図43のコードスケールテーブルの各コードに対応するコード構成音(CT)であるか否かを判断する。
ステップS268で、CPU21は、ステップS266及びS267での比較の結果が、マッチするか否か(ステップS266又はS267の判断がYES(マッチ)かNO(アンマッチ)か)を判断する。この判断がYESの場合、CPU21は、処理をステップS270に移し、NOの場合、処理をステップS269に移す。
ステップS269で、CPU21は、この支配的な音はコードとして成立するか否かを判断する。具体的には、CPU21は、図43のコードスケールテーブルを参照して、ステップS266又はS267で比較した音が、コード構成音(CT)であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS272に移し、NOの場合、処理をステップS270に移す。
ステップS272で、CPU21は、コード修正フラグをONにする。具体的には、CPU21は、処理対象となった小節に対応づけてコード修正フラグをONにする。なお、コード修正フラグはRAM23の所定領域に存在する。これにより、後述するコード修正処理(図35)において、対象小節のコードを修正できる。
ステップS270で、CPU21は、最後の小節か否かを判断する。この判断がYESの場合、CPU21は、コード構成音検証処理を終了し、NOの場合、処理をステップS271に移す。
ステップS271で、CPU21は、次の小節をコード構成音検証の対象とし、ステップS261に処理を移す。
図31乃至図34は、本実施の形態にかかるフレーズ区切り検証処理の例を示すフローチャートである。
ステップS281で、CPU21は、1小節目と(8N+1)小節目のコード進行を比較する。具体的には、RAM23に格納された一連の演奏によるリアルタイムコード付けの結果としてのコードデータとメロディデータを読み出して比較する。Nの初期値は1である。
ステップS282で、CPU21は、1小節目と(8N+1)小節目のコード進行が同一か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS296に移し、NOの場合、処理をステップS283に移す。
ステップS283で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディリズムを比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS284で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディリズムがマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS285に移し、NOの場合、処理をステップS290に移す。
ステップS285で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS286で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS287に移し、NOの場合、処理をステップS288に移す。
ステップS287で、CPU21は、該当する小節をフレーズ8型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS288で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディ音高が70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS289に移し、NOの場合、処理をステップS296に移す。
ステップS289で、CPU21は、該当する小節をフレーズ8β型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS290で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディリズムが70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS291に移し、NOの場合、処理をステップS296に移す。
ステップS291で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS292で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS293に移し、NOの場合、処理をステップS294に移す。
ステップS293で、CPU21は、該当する小節をフレーズ8Rα型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS294で、CPU21は、8小節単位の(1〜8小節目と(8N+1)〜(8N+8)小節目との)メロディ音高が70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS295に移し、NOの場合、処理をステップS296に移す。
ステップS295で、CPU21は、該当する小節をフレーズ8Rβ型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS296で、CPU21は、曲終了か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS298に移し、NOの場合、処理をステップS297に移す。
ステップS297で、CPU21は、Nを1増加させて、ステップS281に処理を移す。
ステップS298で、CPU21は、1小節目と(4N+1)小節目のコード進行を比較する。具体的には、RAM23に格納されたリアルタイムコード付けによるコードデータを読み出して比較する。ここで、Nの初期値は1である。
ステップS299で、CPU21は、1小節目と(4N+1)小節目のコード進行が同一か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS313に移し、NOの場合、処理をステップS300に移す。
ステップS300で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディリズムを比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS301で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディリズムがマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS302に移し、NOの場合、処理をステップS307に移す。
ステップS302で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS303で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS304に移し、NOの場合、処理をステップS305に移す。
ステップS304で、CPU21は、該当する小節をフレーズ4型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS305で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディ音高が70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS306に移し、NOの場合、処理をステップS313に移す。
ステップS306で、CPU21は、該当する小節をフレーズ4β型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS307で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディリズムが70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS308に移し、NOの場合、処理をステップS313に移す。
ステップS308で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS309で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS310に移し、NOの場合、処理をステップS311に移す。
ステップS310で、CPU21は、該当する小節をフレーズ4Rα型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS311で、CPU21は、4小節単位の(1〜4小節目と(4N+1)〜(4N+4)小節目との)メロディ音高が70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS312に移し、NOの場合、処理をステップS313に移す。
ステップS312で、CPU21は、該当する小節をフレーズ4Rβ型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS313で、CPU21は、曲終了か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS315に移し、NOの場合、処理をステップS314に移す。
ステップS314で、CPU21は、Nを1増加させて、ステップS281に処理を移す。
ステップS315で、CPU21は、1小節目と(2N+1)小節目のコード進行を比較する。具体的には、RAM23に格納されたリアルタイムコード付けによるコードデータを読み出して比較する。ここで、Nの初期値は1である。
ステップS316で、CPU21は、1小節目と(2N+1)小節目のコード進行が同一か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS330に移し、NOの場合、処理をステップS317に移す。
ステップS317で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディリズムを比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS318で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディリズムがマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS319に移し、NOの場合、処理をステップS324に移す。
ステップS319で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS320で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS321に移し、NOの場合、処理をステップS322に移す。
ステップS321で、CPU21は、該当する小節をフレーズ2型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS322で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディ音高が70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS323に移し、NOの場合、処理をステップS330に移す。
ステップS323で、CPU21は、該当する小節をフレーズ2β型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS324で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディリズムが70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS325に移し、NOの場合、処理をステップS330に移す。
ステップS325で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。
ステップS326で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS327に移し、NOの場合、処理をステップS328に移す。
ステップS327で、CPU21は、該当する小節をフレーズ2Rα型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS328で、CPU21は、2小節単位の(1〜2小節目と(2N+1)〜(2N+2)小節目との)メロディ音高が70%以上マッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS329に移し、NOの場合、処理をステップS330に移す。
ステップS329で、CPU21は、該当する小節をフレーズ2Rβ型とする。具体的には、CPU21は、RAM23のフレーズ型領域に小節データと型データを格納する。
ステップS330で、CPU21は、曲終了か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS332に移し、NOの場合、処理をステップS331に移す。
ステップS331で、CPU21は、Nを1増加させて、ステップS315に処理を移す。
ステップS332で、CPU21は、フレーズ型がひとつもないか否かを判断する。具体的には、CPU21は、RAM23のフレーズ型領域に型データの記録が全くないか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS333に移し、NOの場合、フレーズ区切り検証処理を終了する。
ステップS333で、CPU21は、1小節目と(N+1)小節目のメロディ音高を比較する。具体的には、RAM23に格納されたリアルタイムコード付けに利用されたメロディデータを使用して比較する。ここで、Nの初期値は1である。
ステップS334で、CPU21は、1小節目と(N+1)小節目のメロディ音高がマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS335に移し、NOの場合、処理をステップS336に移す。
ステップS335で、CPU21は、該当する小節をフレーズX型とする。また、Xまでの小節数を記憶する。具体的には、CPU21は、RAM23のフレーズ型領域に小節数のデータと型データを格納する。
ステップS336で、CPU21は、最後の小節であるか否かを判断する。この判断がYESの場合、CPU21は、フレーズ区切り検証処理を終了し、NOの場合、処理をステップS337に移す。
ステップS337で、CPU21は、Nを1増加させて、処理をステップS333に移す。
図35及び図36は、本実施の形態にかかるコード付け修正処理の例を示すフローチャートである。
ステップS341で、CPU21は、リアルタイムコード付けのキーとキー判定検証処理(図28及び図29)で修正されたキーとを比較する。
ステップS342で、CPU21は、キー変更箇所が有るか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS343に移し、NOの場合、処理をステップS346に移す。
ステップS343で、CPU21は、キーの変更箇所を新キー(キー判定検証処理(図28及び図29)で修正されたキー)でコード付けする。
ステップS344で、CPU21は、キー確定保留箇所が有るか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS345に移し、NOの場合、処理をステップS346に移す。
ステップS346で、CPU21は、支配的な音によるコード修正指定箇所が有るか否かを判断する。具体的には、CPU21は、ステップS272(図30)で、コード修正フラグがONされた小節があるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS347に移し、NOの場合、処理をステップS350に移す。
ステップS347で、CPU21は、指定部分の最後の4小節がカデンツ判定表とあっているか否かを判断する。具体的には、CPU21は、コード修正フラグがONされた小節を含む4小節について、当該4小節が曲中か曲エンド部かに応じて、カデンツ判定テーブル(図40)の曲中又は曲エンド部を参照して、4小節のコード機能が、カデンツ判定テーブル(図40)のコード機能と一致するか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS377に移し、NOの場合、処理をステップS348に移す。
ステップS348で、CPU21は、キー確定保留範囲を特定し、その部分のメロディをキー判定し、キーを確定する。
ステップS349で、CPU21は、キーの変更箇所を新キーでコード付けする。その後、ステップS347に処理を移す。
ステップS377で、CPU21は、コード修正をする。具体的には、CPU21は、ステップS269で決定した、支配的な音に応じたコード構成音に対応したコードで、コード修正フラグがONにされた小節のコードを修正する。
ステップS269で、CPU21は、支配的な音はコードとして成立するか否かを判断する。具体的には、CPU21は、図43のコードスケールテーブルを参照して、ステップS266又はS267で比較した音が、コード構成音(CT)であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS272に移し、NOの場合、処理をステップS270に移す。
ステップS350で、CPU21は、該当箇所のフレーズ区切りは、4(*)型(4型、4β型、4Rα型、又は4Rβ型)か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS351に移し、NOの場合、処理をステップS357に移す。
ステップS351で、CPU21は、フレーズ区切りが4型か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS352に移し、NOの場合、処理をステップS353に移す。
ステップS352で、CPU21は、その部分のコードを比較元と同一とする。4型の場合、メロディのリズムも音高も比較元と同一なので、コードも同一とする。例えば、5〜8小節目が4型である場合、CPU21は、5〜8小節目のコードを1〜4小節目のコードと同一にする。また、後述するように9〜12小節目が4β型、4Rα型、4Rβ型のいずれかであれば、9〜12小節目のコードと1〜4小節目のコードとで異なる部分のコードの機能が同一であれば、当該異なる部分のコードを1〜4小節目のコードと同一にする。
ステップS353で、CPU21は、違う部分のコードを比較する。この場合、4β型、4Rα型、4Rβ型のいずれかであるが、これらは、メロディ音高とメロディリズムのいずれか一方か両方が、比較元とそれぞれ30%未満異なるということなので、当該異なる部分のコードを比較する。例えば、9〜12小節目が、4β型、4Rα型、4Rβ型のいずれかであれば、9〜12小節目のコードと1〜4小節目のコードとを比較する。
ステップS354で、CPU21は、機能は同一であるか否かを判断する。具体的には、CPU21は、当該異なる部分のコードの機能が同一であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS352に移し、NOの場合、処理をステップS355に移す。
ステップS355で、CPU21は、最後の小節か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS357に移し、NOの場合、処理をステップS356に移す。
ステップS356で、CPU21は、次の4小節へ進めて、ステップS351に処理を移す。
ステップS357で、CPU21は、該当箇所のフレーズ区切りは、8(*)型(8型、8β型、8Rα型、又は8Rβ型)か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS358に移し、NOの場合、処理をステップS364に移す。
ステップS358で、CPU21は、フレーズ区切りが8型か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS359に移し、NOの場合、処理をステップS360に移す。
ステップS359で、CPU21は、その部分のコードを比較元と同一とする。8型の場合、メロディのリズムも音高も比較元と同一なので、コードも同一とする。例えば、9〜16小節目が8型である場合、CPU21は、9〜16小節目のコードを1〜8小節目のコードと同一にする。また、後述するように17〜24小節目が8β型、8Rα型、8Rβ型のいずれかの場合、17〜24小節目のコードと1〜8小節目のコードとで異なる部分のコードの機能が同一であれば、当該異なる部分のコードを1〜8小節目のコードと同一にする。
ステップS360で、CPU21は、違う部分のコードを比較する。この場合、8β型、8Rα型、8Rβ型のいずれかであるが、これらは、メロディ音高とメロディリズムのいずれか一方か両方が、比較元とそれぞれ30%未満異なるということなので、当該異なる部分のコードを比較する。例えば、17〜24小節目が、8β型、8Rα型、8Rβ型のいずれかであれば、17〜24小節目のコードと1〜8小節目のコードとを比較する。
ステップS361で、CPU21は、機能は同一であるか否かを判断する。具体的には、CPU21は、当該異なる部分のコードの機能が同一であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS359に移し、NOの場合、処理をステップS362に移す。
ステップS362で、CPU21は、最後の小節か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS364に移し、NOの場合、処理をステップS363に移す。
ステップS363で、CPU21は、次の8小節へ進めて、ステップS358に処理を移す。
ステップS364で、CPU21は、該当箇所のフレーズ区切りは、2(*)型(2型、2β型、2Rα型、又は2Rβ型)か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS365に移し、NOの場合、処理をステップS371に移す。
ステップS365で、CPU21は、フレーズ区切りが2型か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS366に移し、NOの場合、処理をステップS367に移す。
ステップS366で、CPU21は、その部分のコードを比較元と同一とする。2型の場合、メロディのリズムも音高も比較元と同一なので、コードも同一とする。例えば、3〜4小節目が2型である場合、CPU21は、3〜4小節目のコードを1〜2小節目のコードと同一にする。また、後述するように5〜6小節目が2β型、2Rα型、2Rβ型のいずれかであれば、5〜6小節目のコードと1〜2小節目のコードとで異なる部分のコードの機能が同一であれば、当該異なる部分のコードを1〜2小節目のコードと同一にする。
ステップS367で、CPU21は、違う部分のコードを比較する。この場合、2β型、2Rα型、2Rβ型のいずれかであるが、これらは、メロディ音高とメロディリズムのいずれか一方か両方が、比較元とそれぞれ30%未満異なるということなので、当該異なる部分のコードを比較する。例えば、3〜4小節目が、2β型、2Rα型、2Rβ型のいずれかであれば、3〜4小節目のコードと1〜2小節目のコードとを比較する。
ステップS368で、CPU21は、機能は同一であるか否かを判断する。具体的には、CPU21は、当該異なる部分のコードの機能が同一であるか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS366に移し、NOの場合、処理をステップS369に移す。
ステップS369で、CPU21は、最後の小節か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS371に移し、NOの場合、処理をステップS370に移す。
ステップS370で、CPU21は、次の2小節へ進めて、ステップS365に処理を移す。
ステップS371で、CPU21は、該当箇所のフレーズ区切りはX型か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS372に移し、NOの場合、処理をステップS376に移す。
ステップS372で、CPU21は、開始位置を確認する。
ステップS373で、CPU21は、その部分のコードを比較元と同一とする。
ステップS374で、CPU21は、最後の小節か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS376に移し、NOの場合、処理をステップS375に移す。
ステップS375で、CPU21は、次のX型へ進めて、ステップS372に処理を移す。
ステップS376で、CPU21は、他にもフレーズ型記憶箇所が有るか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS350に移し、NOの場合、コード付け修正処理を終了する。
図37は、本実施の形態にかかるメロディとコードスケールの比較処理の例を示すフローチャートである。
ステップS381で、CPU21は、修正されたコードのスケールをコードスケールテーブル(図43)で確認し、修正されたコード区間に対応するメロディ(リアルタイムコード付けの際に入力されたメロディ)と、修正されたコードのコードスケールと、が一致するか否かを確認する。ここで、コードスケールとは、図43のコードスケールテーブルでいうところの、スケールノート(SN)とコード構成音(CT)とを合わせた音群である。
例えば、修正されたコードが、キーがCにおけるIMajor(CMajor)である場合、修正されたコードのコードスケールは、図43によれば、「C,D,E,F,G,A,B」である。
したがって、修正されたコードが、キーがCにおけるIMajor(CMajor)である場合、修正されたコード区間に対応するメロディが、「C,D,E,F,G,A,B」のいずれかであれば、当該メロディと当該コードスケールとが一致する。
ステップS382で、CPU21は、ステップS381で一致するか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS388に移し、NOの場合、処理をステップS383に移す。
ステップS383で、CPU21は、スケール外音は装飾音か否かを判断する。具体的には、CPU21は、ステップS265(図30)と同様に装飾音データベース(図42)を参照して判断する。この判断がYESの場合、CPU21は、処理をステップS388に移し、NOの場合、処理をステップS384に移す。
ステップS384で、CPU21は、リハモデータベース(図示せず)を参照する。例えば、キーがAm(Amの構成音は、「A、B、C、D、E、F、G」)で、メロディがメロディックマイナーの上向型(A、B、C、D、E、F#、G#)であった場合、「F#、G#」は、キーAmの構成音ではないので、F#の音に対して、Bm7にコードを変更することができる。
このように、リハモデータベース(図示せず)には、コードを変更することのできるパターンがデータベースとして登録されている。
ステップS385で、CPU21は、リハモデータベースにおいてマッチするか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS386に移し、NOの場合、処理をステップS387に移す。
ステップS386で、CPU21は、コード修正をする。具体的には、CPU21は、リハモデータベースに登録されているコードに修正する。
ステップS387で、CPU21は、不適合箇所を記録する。すなわち、マッチしなかった箇所をRAM23に記録する。
ステップS388で、CPU21は、最後のコードか否かを判断する。この判断がYESの場合、CPU21は、メロディとコードスケールの比較処理を終了し、NOの場合、処理をステップS389に移す。
ステップS389で、CPU21は、次のコードへ進み、処理をステップS381へ移す。
図38は、本実施の形態にかかるユーザーによる修正処理の例を示すフローチャートである。
ノンリアルタイムで修正しても、耳の肥えたユーザーにとっては、不満がある場合がる。そのときに、ユーザーによる修正機能があると便利である。ユーザーによる修正処理は、そのための処理である。
ステップS401で、CPU21は、Anyキーによるデータ再生中か否かを判断する。この判断がYESの場合、CPU21は、処理をステップS402に移し、NOの場合、ユーザーによる修正処理を修正する。
ステップS402で、CPU21は、Editスイッチ(図示せず)がオンか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS404に移し、NOの場合、処理をステップS403に移す。
ステップS403で、CPU21は、コード優先データベース順にコード候補を出力する。具体的には、CPU21は、コード優先データベース(図44)に格納された順番で、コード候補を出力する。例えば、修正前のコードがIImであれば、1番目のコード候補として、「IIm7」を出力する。
ステップS404で、CPU21は、OKスイッチ(図示せず)が押下されたか否かを判断する。この判断がYESの場合、CPU21は、処理をステップS405に移し、NOの場合、処理をステップS406に移す。
ステップS405で、CPU21は、コードを修正し、処理をステップS407に移す。具体的には、CPU21は、ステップS403で出力されたコードでコード修正する。
ステップS406で、CPU21は、次候補を出力し、処理をステップS404に移す。例えば、現在出力されたコードが「IIm7」であれば、CPU21は、2番目のコード候補である「IV」を出力する。
ステップS407で、CPU21は、曲終了か否かを判断する。この判断がYESの場合、CPU21は、ユーザーによる修正処理を終了し、NOの場合、処理をステップS401に移す。
本実施の形態の電子楽器10は、曲のメロディを演奏する鍵盤11を有しており、CPU21は、演奏されているメロディの音高の履歴により、当該メロディに対してリアルタイムでコード付与を行い、メロディ演奏終了後、リアルタイムでコード付与されたコードをノンリアルタイムで修正する。
したがって、入力されたメロディに対してリアルタイムでコード付けを行った後、ノンリアルタイムでコードを修正することで、コード付けの精度をより高めることができる。
また、本実施の形態において、CPU21は、曲の所定区間ごとに、そこに含まれるメロディ音の中で付与されたコード以外の他のコードが成立する音が存在するか否か検証し、成立する場合に当該所定区間を修正箇所として指定し、 曲のメロディを所定の長さの複数のフレーズに区切り、当該フレーズ同士の楽式の一致度を検証し、当該検証結果に基づいて、前記付与されたコードを修正する。
したがって、例えば、所定の長さとして4小節のフレーズに区切った場合に、4小節ごとの楽式の一致度に基づいてコード修正が行われるので、フレーズの楽式の一致度が高ければ、フレーズ同士のコード付けの一致度を高くすることができる。
また、本実施の形態において、CPU21は、曲の所定の区間に付与されているキーが、当該所定の区間のメロディの最終音に基づいて定められるキーと一致するか否かを検証する。
したがって、曲の所定の区間に付与されているキーが正確であるか否かをメロディの最終音に基づいて検証することができる。
また、本実施の形態において、CPU21は、修正された各コードのスケールと、対応する区間のメロディのスケールとが一致するか否か判定し、一致していない場合は当該修正されたコードをさらに訂正する。
したがって、修正されたコードの正確性を検証し、正確でない場合はさらにコードを訂正できるので、コード付けの精度をより高めることができる。
また、本実施の形態において、CPU21は、リアルタイムでのコード付けにおいて、曲データ中の所定の拍に属する音高、当該拍の直前の拍に属する音高及び当該直前の拍に付与されたコードに基づいて所定の拍に付与すべきコードを決定する。
したがって、リアルタイムでのコード付けを迅速かつ正確に行うことができる。
また、本実施の形態において、CPU21は、曲の小節ごとに、当該小節に含まれるメロディ音のうち、付与されたコードの構成音以外の他の音が存在するか否かを判別し、 他の音が存在すると判別された場合に、当該他の音が装飾音であるか否かを判別し、 装飾音と判別された場合にはこの装飾音を除いた音に基づくコードと前記小節に付与されたコードとを比較するとともに、装飾音と判別されない場合には前記他の音に基づくコードと前記小節に付与されたコードとを比較し、 両者のコードが一致しないと判断された場合に、前記小節の区間を修正箇所と指定する。
したがって、リアルタイムでコード付けの誤りの原因であった装飾音を除いて、支配的な音により確実にコードを修正することができる。
また、本実施の形態において、CPU21は、曲の小節ごとに、当該小節に含まれるメロディ音のうち、支配的な音以外の他の音が存在するか否かを判別する際に、曲の小節毎に、当該小節に含まれるメロディ音のうち音長の長い3つの音を抽出するとともに、これら3つの音が前記小節に付与されているコードの構成音か判別し、コード構成音と判別した場合は、これら3つの音を支配的な音とする。
したがって、支配的な音をコード構成音とすることができる。
また、本実施の形態において、CPU21は、曲のメロディを所定の長さの複数のフレーズに区切る際に、曲を4小節毎、8小節毎及び2小節毎に区切る。
したがって、4小節単位、8小節単位、2小節単位等、音楽的に繰り返しの多い小節数を単位として、楽式の一致度を検証できる。
また、本実施の形態において、曲データは、さらにリズム音を含み、CPU21は、楽式としてフレーズ同士のメロディ音の音高及びリズム音を比較し、各フレーズを、音高及びリズム音の両方が一致する場合、音高及びリズム音の一方が一致しかつ他方が所定値以上一致する場合、音高及びリズム音の両方が所定値以上一致する場合のいずれかに分類する。
したがって、楽式の一致度の検証方法のバリエーションを多くできる。
また、本実施の形態において、CPU21は、コード修正する際に、コード構成音検証により修正箇所と判断された曲の区間がある場合に、当該区間における他のコードを付与することにより、前記区間の最終部分がカデンツに沿う形で終結しているか否か判別し、 終結していると判別された場合は、付与されたコードを当該他のコードに訂正する。
したがって、より適切なコード付けを行うことができる。
また、本実施の形態において、CPU21は、コード修正する際に、コード構成音検証により修正箇所と判断された曲の区間がある場合に、当該区間における他のコードを付与することにより、前記区間の最終部分がカデンツに沿う形で終結しているか否か判別し、終結していないと判別された場合は、当該区間に含まれるメロディ音によりキーを確定し、当該確定されたキーに基づいて新たに付与されたコードで再度カデンツに沿う形で終結しているか否か判別する。
したがって、より適切なコード付けを行うことができる。
また、本実施の形態において、CPU21は、曲のメロディを所定の長さの複数のフレーズに区切ってから、音高及びリズム音の両方が一致する場合に分類されたフレーズ夫々に付与されたコードを同一のコードに訂正し、 音高及びリズム音の一方が一致しかつ他方が所定値以上一致する場合、音高及びリズム音の両方が所定値以上一致する場合のいずれかに分類されたフレーズ夫々に付与されたコードの中で異なる部分のコード同士の機能が同一の場合は、当該異なる部分のコードを同一とする。
したがって、コード付けの精度をより高めることができる。
本実施の形態においては、コード名判定処理(図3のステップS4)において、CPU21は、鍵盤11の一連の操作において進行するメロディシーケンスにおいて、実行中の自動伴奏データの進行を規定する時間情報、特に拍の情報に基づいて、現在の拍の拍頭において押鍵された鍵に関連する現在メロディ音CMと、1つ前の拍である前拍の拍頭において押鍵された鍵に関する先行メロディ音PMとを決定する。また、CPU21は、決定された現在メロディ音情報と、先行メロディ音情報と、前拍におけるコード名である先行コード名PreCHとに基づき、現在コード名CurCHを決定するコード名決定処理(図5のステップS31)を実行する。また、メロディ音の決定に際して、CPU21は、現在の拍が、小節において何番目の拍であるかに基づいて、現在メロディ音CM及び先行メロディ音PMを決定する。
すなわち、本実施の形態によれば、押鍵された拍の位置(時間的な位置)を考慮して現在メロディ音CM及び先行メロディ音PMが決定され、決定されたメロディ音のシーケンスと、先行コード名PreCHに基づいて現在コード名CurCHが決定される。
また、本実施の形態においては、CPU21は、拍子が4拍子である場合に、現在の拍が、1拍目或いは3拍目であるか、或いは、他の拍であるかに基づいて、現在メロディ音情報及び先行メロディ音情報を決定する。すなわち、強拍(1拍目、3拍目)と、弱拍(2拍目、4拍目)に基づいて、現在メロディ音CM及び先行メロディ音PMを決定することで、拍の重みを考慮することが可能となる。
また、本実施の形態において、CPU21は、前拍の先頭以降の押鍵が、現在の拍まで延びている場合に、シンコペーションであると判断し、現在メロディ音CMを、現在の拍まで延びている押鍵に関するものに決定する。すなわち、拍頭の押鍵でなくとも、シンコペーションを構成する場合には、これを拍頭の押鍵と同様に取り扱うことができる。
また、CPU21は、第1のドミナントモーション判定処理(図10)において、先行コード名PreCHがドミナントコードを示し、かつ、先行メロディ音PMから現在メロディ音CMが、予め定められた、ドミナントコードの構成音からトニックコードの構成音への移行を示す場合に、現在コード名CurCHとして、トニックに相当するコード名を与える。このように、メロディシーケンスからドミナントモーションが明確に示される場合には、現在コード名CurCHをトニックとして、コード進行における終止を形成させる。
また、CPU21は、第2のドミナントモーション判定処理(図17)において、先行メロディ音PMから現在メロディ音CMが、予め定められた、ドミナントコードの構成音からトニックコードの構成音への移行を示す場合に、現在コード名CurCHとして、トニックに相当するコード名を与える。ここでは、先行コード名PreCHがドミナントコードではない場合でも、メロディシーケンスからドミナントモーションが明確に示される場合には、現在コード名CurCHをトニックとして、コード進行における終止を形成させる。
さらに、CPU21は、第1のドミナントモーション判定処理或いは第2のドミナントモーション判定処理により、現在コード名CurCHとしてトニックに相当するコード名が付与されなかった場合に、現在コード名CurCHとして、先行コード名PreCHを与える。これにより、コード保持を実現することができる。
また、本実施の形態においては、現在メロディ音CMが1拍目の押鍵に関する場合に、先行メロディ音PM、現在メロディ音CM及び先行コード名情報PreCHに対応付けられたコード名を格納した第1のコードテーブルと、現在メロディ音CMが、1拍目以外の押鍵に関する場合に、先行メロディ音PM、現在メロディ音CM及び先行コード名PrCHに対応付けられたコード名を格納した第2のコードテーブルとを備え、CPU21は、押鍵タイミングにしたがって、第1のコードテーブル或いは第2のコードテーブルを参照する。これにより、拍にしたがって異なるコード名を取得することが可能となる。また、テーブルを参照することで、リアルタイムにコード名を決定することが可能となる。
さらに、本実施の形態においては、決定された先行メロディ音PM及び現在メロディ音CMに基づき、第1のコードテーブル或いは第2のコードテーブルにおいて、対応するコード名が存在しない場合に、現在コード名CurCHとしてオーギュメント(aug)或いはディミニッシュ(dim)という無判定コードを付与する。これにより、先行メロディ音PMや現在メロディ音が、コード構成音或いはスケールノートでない場合であっても、楽曲においてそれほど違和感のない何らかのコード名を付与することが可能となる。
さらに、本実施の形態においては、CPU21は、無判定コードテーブルを参照して、現在メロディ音CM、先行メロディ音PM及び先行コード名PreCHから、オーギュメント(aug)或いはディミニッシュ(dim)の何れのコードにすべきかを判断することが可能となる。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
たとえば、前記実施の形態においては、拍子を4拍子としているが、3拍子或いは6拍子でも本発明を適用可能である。たとえば、3拍子の場合には、上記処理のうち、1拍目〜3拍目についての処理を使用すれば良い。また、6拍子は、3拍子が2つあると考え、上記1拍目〜3拍目の処理を使用する。また、4拍目〜6拍目は、1拍目〜3拍目と同様に扱って同一の処理を実行すれば良い。
また、前記実施の形態では、ハ長調(CMaj)或いはイ短調(Amin)という調性において、主音(根音)に対する度数を用いたコード名が得られるがこれに限定されるものではなく、他の調性についても本発明を適用可能である。この場合には、たとえば、楽曲が長調であれば、「C」と、その楽曲の調性の根音との音高差が算出され、その音高差をオフセットとして、オフセット値をRAM23に格納すれば良い。処理においては、実際に押鍵された鍵番号により特定される音名をオフセットだけ減じることで、「C」のスケールにて処理を実行することが可能となる。
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
[付記1]
曲メロディを演奏する演奏手段と、
演奏されている曲メロディの音高の履歴に基づき、当該曲メロディに対してリアルタイムで調を判定するリアルタイム調判定手段と、
前記演奏手段によるメロディ演奏終了後、前記リアルタイム調判定手段にて判定された調をノンリアルタイムで修正するノンリアルタイム調修正手段と、
を有する自動調修正装置。
[付記2]
前記ノンリアルタイム調修正手段は、
曲メロディの最終音高と当該最終音高と調との関係を表わす確定キーDBと、
当該確定キーDBから前記最終音高により読み出された調が、前記リアルタイム調判定手段にて判定された調とマッチするか判定し、マッチする場合は当該判定された調を確定調とするノンリアルタイム調判定手段と、
を有する請求項1記載の自動調修正装置。
[付記3]
前記自動調修正装置はさらに、
前記ノンリアルタイム調判定手段にてマッチしていない判断された場合、前記確定キーDBより、前記曲のメロディの最終音高と関係が深い調候補を読み出すとともに当該調候補に基づいて曲の最後の区間にコードを仮付与した場合、当該仮付与されたコードが、カデンツに沿う形で終結しているか否か判定するカデンツ判定手段と、
このカデンツ判定手段により終結していると判断された場合、前記調候補で曲頭から矛盾がないか検証するとともに、矛盾がないと検証された場合、前記調候補を確定調と判別する検証手段と、を有する請求項2記載の自動調修正装置。
[付記4]
前記自動調修正装置はさらに、
前記検証手段にて矛盾があると判定された場合に、曲の矛盾のない区間に前記調候補を、それ以外の区間に前記判定された調を割り当てる割当手段と、
曲頭の区間に割り当てられた調とそれ以外の区間に割り当てられた調との関係が盛り上り転調であるか判定するとともに、盛り上がり転調と判定された場合は、前記割り当てられた両方の調夫々を確定調とする盛り上り転調判定手段と、
を有する請求項3記載の自動調修正装置。
[付記5]
前記自動調修正装置はさらに、
関係調と借用和音との関係を示す関係調と借用和音DBを有し、
前記曲中に複数の調が割り当てられ、かつその中に未検証の調が割り当てられている区間が存在する場合、当該区間に前記未検証調の関係調にないコードが存在する場合、当該未検証調を確定調とする請求項1記載の自動調修正装置。
[付記6]
演奏されている曲メロディの音高の履歴により、当該曲メロディに対してリアルタイムで調判定するステップと、
前記メロディ演奏終了後、前記判定された調をノンリアルタイムで修正するステップと、
を有する自動調修正方法。
[付記7]
演奏されている曲メロディの音高の履歴により、当該曲メロディに対してリアルタイムで調を判定するステップと、
前記曲メロディ演奏終了後、前記判定された調をノンリアルタイムで修正するステップと、
をコンピユータに実行させるプログラム。