以下、添付図面を参照して、本発明の実施の形態について説明する。図1は、本実施の形態にかかる電子楽器の外観を示す図である。図1に示すように、本実施の形態にかかる電子楽器10は、鍵盤11を有する。また、鍵盤11の上部には、音色の指定、自動伴奏の開始・終了、リズムパターンの指定などを行なうためのスイッチ(符号12、13参照)や、演奏される楽曲に関する種々の情報、例えば、音色、リズムパターン、コード名などを表示する表示部15を有する。本実施の形態にかかる電子楽器10は、例えば、61個の鍵(C2〜C7)を有する。また、電子楽器10は、自動伴奏をオンする自動伴奏モード、および、自動伴奏をオフにする通常モードの2つの演奏モードのうち、何れかの下での演奏が可能である。
図2は、本発明の実施の形態にかかる電子楽器の構成を示すブロックダイヤグラムである。図2に示すように、本実施の形態にかかる電子楽器10は、CPU21、ROM22、RAM23、サウンドシステム24、スイッチ群25、鍵盤11および表示部15を備える。
CPU21は、電子楽器10全体の制御、鍵盤11の鍵の押鍵やスイッチ群25を構成するスイッチ(例えば、図1の符号12、13参照)の操作の検出、鍵やスイッチの操作にしたがったサウンドシステム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は、電子楽器10の電源が投入されると、RAM23中のデータや、表示部15の画像のクリアを含むイニシャル処理(初期化処理)を実行する(ステップS301)。イニシャル処理が終了すると、CPU21は、スイッチ群25を構成するスイッチのそれぞれの操作を検出し、検出された操作にしたがった処理を実行するスイッチ処理を実行する(ステップS302)。
例えば、スイッチ処理においては、音色指定スイッチや、自動伴奏パターンの種別の指定スイッチ、自動伴奏パターンのオン・オフの指定スイッチなど、種々のスイッチの操作が検出される。自動伴奏パターンがオンとなったときには、CPU21は、演奏モードを、自動伴奏モードに切り換える。演奏モードを示すデータは、RAM23の所定の領域に指定される。音色や自動伴奏パターンの種別を示すデータも、同様に、RAM23の所定の領域に格納される。
次いで、CPU21は、鍵盤処理を実行する(ステップS303)。図4は、本実施の形態にかかる鍵盤処理の例をより詳細に示すフローチャートである。鍵盤処理において、CPU21は、鍵盤11の鍵を走査する。鍵の走査結果であるイベント(鍵オン或いはオフ)は、そのイベントが生じた時刻の情報とともに、RAM23に一時的に記憶される。CPU21は、RAM23に記憶された鍵の走査結果を参照して(ステップS401)、イベントが有るか否かを判断する(ステップS402)。ステップS402でYesと判断された場合には、CPU11は、イベントが鍵オンであるか否かを判断する(ステップS403)。
ステップS403でYesと判断された場合には、CPU21は、当該鍵オンがあった鍵について発音処理を実行する(ステップS404)。発音処理においては、CPU21は、RAM23に記憶されていたメロディ鍵用の音色データ、および、鍵の音高を示すデータを読み出してRAM23に一時的に記憶する。後述する音源発音処理(図3のステップS306)において、音色や音高を示すデータは音源部26に与えられる。音源部26は、音色および音高を示すデータにしたがって、ROM22の波形データを読み出して、所定の音高の楽音データを生成する。これにより、スピーカ28から所定の楽音が発生する。
その後、CPU21は、鍵オンがあった鍵についての音高情報(例えば鍵番号)および押鍵タイミング(例えば押鍵時刻)をRAM23に格納する(ステップS405)。押鍵タイミングは、割り込みカウンタのカウンタ値に基づいて算出することができる。
ステップS403でNoと判断された場合には、イベントが鍵オフであったことになる。したがって、CPU21は、鍵オフになった鍵についての消音処理を実行する(ステップS406)。消音処理においては、CPU21は、消音すべき楽音の音高を示すデータを生成し、RAM23に一時的に記憶する。この場合にも、後述する音源発音処理(ステップS306)において、消音すべき楽音の音色および音高を示すデータが、音源部26に与えられる。音源部26は、与えられたデータに基づいて、所定の楽音を消音する。その後、CPU21は、鍵オフがあった鍵について、押鍵されていた時間(押鍵時間)をRAM23に格納する(ステップS407)。
CPU21は、全ての鍵イベントについて処理が終了したかを判断する(ステップS408)。ステップS408でNoと判断された場合には、ステップS402に戻る。
鍵盤処理(図3のステップS303)が終了すると、CPU21は、コード名判定処理を実行する(ステップS304)。図5は、本実施の形態にかかるコード名判定処理の例を示すフローチャートである。本実施の形態においては、単音(モノ)か複音(ポリ)かでコード名の判定方法を異ならせている。モノの場合には、CPU21は、後述する、コード名判定処理(モノ)を実行する。ポリの場合には、CPU21は、後述するコード名判定処理(ポリ)を実行する。
まず、CPU21は、現在時刻が属する拍の情報および押鍵情報(鍵オンの時刻や鍵オフまでの時間)を特定して、現在の拍において押鍵された鍵を特定し、かつ、現在時刻が属する拍の一つ前の区間(前拍区間)において、押鍵されていた鍵の情報を取得する。また、前拍区間コード名(先行コード:Previous CHord name)PreCHの読み込み、を行う(ステップS501)。ステップS501において、現在の拍における押鍵された鍵の情報が、モノの場合の現在メロディ音CM(後述する)の初期値、前拍区間の先頭で押鍵された鍵の情報が、モノの場合の先行メロディ音PM(後述する)の初期値となる。次に、CPU21は、前拍区間コード再検証処理を行う(ステップS502)。
図6は、本実施の形態にかかる前拍区間コード再検証処理の例を示すフローチャートである。この前拍区間コード再検証処理は、前拍区間で決定されたコード名が正しかったかどうかを再検証するための処理である。例えばピアノ曲によくある16分音符でドソミソという分散和音が弾かれるとき、本実施形態では基本的に拍の頭の音でコードを決めてしまうため、最初のドはジャッジに入れられるが、その後のソミソは入れられない。よって、その次の拍で押鍵があったときに、前拍区間の音によりコード名を再判定し、再判定したコード名が前拍と異なっている場合には、前拍区間のコード名を再判定したコード名に置き換える。このようにすることで、前拍区間のコード名が間違っていたとしても、次の拍で修正することにより、次の拍でのコード判定がより正確になる。
まず、CPU21は、前拍区間の16分音符刻みのタイミングで、全ての音を拾い、音長の長いものから4音を抽出する。(ステップS601)。次に、抽出した4音が前拍区間のコードの構成音に含まれているかを判断し(ステップS602)、含まれていれば(ステップS602でYESと判断される場合)PreCHは正解なので何もせず、含まれていない場合(ステップS602でNOと判断される場合)、コードデータベース(図示せず)を参照して正しいコードを確認し、直前のコードの機能(PreCH)をこの正しいコードの機能に変更する(ステップS603)。要するに、モノのときの、音長加算の考え方と同じであるが、本処理では目的が分散和音をみつけることができるか、ということがその目的である。
図5に戻って、CPU21は、押鍵音が有るか否かを判断する。具体的には、CPU21は、拍の情報および押鍵情報に基づいて、現在時刻が属する拍の先頭に押鍵中の鍵が存在しているかを判断する(ステップS503)。ステップS503でNoと判断された場合には、コード名判定処理が終了する。ステップS503でYesと判断された場合には、CPU21は、現在メロディ機能(Current Melody Function:CMF)を取得する(ステップS504)。ここに、現在メロディ機能CMFは、先行コード名PreCHに対する現在メロディ音CMの機能を示す。本実施の形態において、CMFは、現在メロディ音CMが、先行コード名PreCHのコード構成音であることを示すコードトーン(Chord Tone:CT)、現在のスケール(調性)の構成音であることを示すスケールノート(ScaleNote:SN)、その他の音(非和声音)を示すアザートーン(Other Tone:OT)の何れかとなる。
より具体的には、コード名と音名との間を関連付けたメロディ機能テーブルをROM22に格納し、CPU21が、現在メロディ音CMおよび先行コード名PreCHの組に対応付けられた値を参照して、現在メロディ機能を判断している。図44は、本実施の形態にかかるメロディ機能テーブルの一例の部分を示す図である。図44に示すように、メロディ機能テーブル4400においては、現在メロディ音CMと先行コード名PreCHからなる値の組に対応して、所定の値が取得できるようになっている。図44において、メロディ機能テーブル4400中、CTはコードトーンを示し(例えば、符号4401〜4403参照)、SNは、スケールノートを示す(例えば、符号4411〜4413参照)。また、図44においては、メロディ機能テーブル4400中、何も記載されていない欄(例えば、符号4421、4422参照)は、アザートーンを示す。
図5に戻って、CPU21は、モノorポリ判定処理を行う(ステップS505)。図7は、本実施の形態にかかるモノorポリ判定処理の例を示すフローチャートである。
CPU21は、鍵盤入力を受け付け(ステップS701)、テンポが80以下(一分間に80拍以下)かどうかを判断する(ステップS702)。この判断がYESの場合には、ステップS703へ、NOの場合には、ステップS704に処理を移す。CPU21は、ステップS703で、64分音符以下の間隔で複数押鍵があるかどうかを判断し、この判断がYESの場合、ステップS705に処理を移し、ポリフラグをONにする。NOの場合、ステップS706に処理を移し、モノフラグをONにする。CPU21は、ステップS704で、32分音符以下の間隔で複数押鍵があるかどうかを判断し、この判断がYESの場合、ステップS705に処理を移し、ポリフラグをONにする。NOの場合、ステップS706に処理を移し、モノフラグをONにする。
図5に戻って、CPU21は、受け付けた鍵盤入力が、モノであるか否かを判断する(ステップS506)。具体的には、モノフラグがONであるか否かを判断する。この判断が、YESの場合、CPU21は、処理をステップS507に移し、NOの場合には、処理をステップS508に移す。ステップS507では、モノ用のコード判定であるコード名判定処理(モノ)を行い、ステップS508では、ポリ用のコード判定であるコード名判定処理(ポリ)を行う。
図8〜図24を参照して、モノの場合のコード付けについて説明する。図8は、本実施の形態にかかるコード名判定処理(モノ)の例を示すフローチャートである。概略的には、現在発音されているメロディ音を、現在メロディ音(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」)の音との音高差に基づいて、ルート音を伴うコード名を得ることが可能である。
ただし、押鍵が何拍目に行なわれたかなど、押鍵された時間的な位置や、押鍵が拍の頭であるか否か、或いは、複数の押鍵による音型(持続、順次進行、跳躍など)に基づいて、上記現在メロディ音CMおよび先行メロディ音PMを決定すべき場合がある。つまり、現実に現在押鍵されている鍵以外の押鍵について現在メロディ音CMとすべき場合や、現在押鍵された鍵の1つ前に押鍵された鍵以外の押鍵について先行メロディ音PMとすべき場合がある。以下、コード判定処理(モノ)において、ステップS802〜808は、主として、現在メロディ音CMおよび先行メロディ音PMの決定に関する。引き続いて実行されるステップS809が、現在メロディ音CM、先行メロディ音PMおよび先行コード名PreCHに基づいて、具体的に現在コード名CurCHを決定する処理となる。
まず、CPU21は、現在コード名CurCHを、先行コード名PreCHにコピーする(ステップS801)。次に、CPU21は、後述するコードテーブルを指定するテーブル指定情報を、第2のコードテーブルを指定する情報に設定する(ステップS802)。コードテーブルには、主として押鍵が1拍目であるときに用いる第1のコードテーブルと、それ以外のときに用いる第2のコードテーブルが含まれ、それぞれROM22に格納されている。テーブル指定情報は、第1のコードテーブル或いは第2のコードテーブルの何れを用いるかを示す情報であり、RAM23に格納される。
次いで、押鍵された鍵の時間的位置、つまり、鍵が何拍目に押鍵されたかを判断する(ステップS803、804、805)。押鍵が1拍目である場合(ステップS803でYes)或いは押鍵が3拍目である場合(ステップS804でYes)には、CPU21は、1拍目・3拍目対応ノート決定処理を実行する(ステップS805)。押鍵が2拍目である場合(ステップS806でYes)には、2拍目対応ノート決定処理を実行する(ステップS807)。また、ステップS806でNoと判断された場合、つまり、押鍵が4拍目である場合には、4拍目対応ノート決定処理を実行する(ステップS808)。
本実施の形態においては、楽曲は4分の4拍子であり、1小節が4拍で構成される。押鍵がn拍目であることは、押鍵のタイミングが、第n拍の先頭以降で、第(n+1)拍の先頭よりも時間的に早いことを意味している。
楽曲の構成要素には拍子および拍という概念がある。また、拍子においては拍ごとに重みがあり、上記拍の重みを考慮してメロディは進行する。また、シンコペーションなど、場合によって拍の重みが移動する場合もある。本実施の形態においては、拍の重みを考慮して、最適なメロディの流れを構成する構成音を抽出し、コード判定に用いるのに最適な現在メロディ音CMおよび先行メロディ音PMを特定する。
図9〜図12は、本実施の形態にかかる1拍目・3拍目対応ノート決定処理の例を示すフローチャートである。図9に示すように、押鍵が1拍目に関するものであるかを判断する(ステップS901)。ステップS901でYesと判断された場合には、CPU21は、テーブル指定情報を、第1のテーブルを示す情報に変更する(ステップS902)。次いで、CPU12は、第1のドミナントモーション判定処理を実行する(ステップS903)。
ドミナントモーション判定処理は、メロディの流れからドミナントモーション(つまり、属和音(ドミナント)から主和音(トニック)への進行)を抽出するものである。本実施の形態においては、処理においてコード名を考慮した第1のドミナントモーション判定処理と、コード名を考慮しない第2のドミナントモーション判定処理とが用いられる。図13は、本実施の形態にかかる第1のドミナントモーション判定処理の例を示すフローチャートである。
図13に示すように、CPU21は、RAM23に格納された先行コード名PreCHが、メジャー系のドミナントコードのいずれかに対応するかを判断する(ステップS1301)。ここで、本実施の形態にかかる第1のドミナントモーション判定処理においては、例えば、メジャー系のドミナントコードは、「VMaj」、「V7」および「VIIm7 (−5)」としている。ステップS1301でYesと判断された場合には、CPU21は、(先行メロディ音PMおよび現在メロディ音CMの値の組である(PM,CM)が、(F,E)、(B,C)、(D,C)の何れかであるかを判断する(ステップS1302)。ステップS1302では、先行メロディ音PMから現在メロディ音CMへの動きが、長調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。
ステップS1302でYesと判断された場合には、CPU21は、現在コード名CurCHを「IMaj」に決定し、その情報をRAM23に格納する(ステップS1303)。その後、CPU21は、ドミナントモーション処理において第1の判定結果であったことを示す情報をRAM23に格納する(ステップS1304)。ステップS1301でNo或いはステップS1302でNoと判断された場合には、CPU21は、先行コード名PreCHが、マイナー系のドミナントコードの何れかに対応するかを判断する(ステップS1305)。ここで、本実施の形態において、例えば、マイナー系のドミナントコードは、「IIIMaj」および「III7」としている。
ステップS1305でYesと判断された場合には、CPU21は、(PM,CM)が、(G#,A)、(B,A)、(D,C)の何れかであるかを判断する(ステップS1306)。ステップS1306においては、先行メロディ音PMから現在メロディ音CMへの動きが、短調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。ステップS1306でYesと判断された場合には、CPU21は、現在コード名CurCHを「VImin」に決定し、その情報をRAM23に格納する(ステップS1307)。その後、ステップS1304に進む。
ステップS1305でNoと判断された場合、或いは、ステップS1306でNoと判断された場合には、CPU21は、ドミナントモーション処理において第2の判定結果であったことを示す情報をRAM23に格納する(ステップS1308)。
ステップS903の第1のドミナントモーション判定処理が終了すると、CPU21は、第1のドミナントモーション判定処理の結果が、第2の処理結果であったかを判断する(ステップS904)。ステップS904でNoと判断された場合、つまり、第1のドミナントモーション判定処理の結果が、第1の処理結果であった場合には、先行メロディ音PMおよび現在メロディ音CMを初期値から変更することなく、RAM23に格納して、処理を終了する(ステップS905)。ステップS904でYesと判断された場合には、CPU21は、RAM23に格納された押鍵情報を参照して、現在時刻に対応する拍の直前拍に押鍵があったかを判断する(ステップS906)。
ステップS904でYesと判断された場合には、CPU21は、RAM23の押鍵情報を参照して、直前拍先頭以降にも押鍵があったかを判断する(ステップS907)。ステップS907でNoと判断されたことは、直前拍および今回の拍でそれぞれ4分音符が押鍵されたことを意味する。この場合の処理については後述する。ステップS907でYesと判断された場合には、CPU21は、RAM23に格納された押鍵情報中、直前拍先頭以降に押鍵された鍵の発音時間を参照して、現在まで発音中であるかを判断する(ステップS909)。ステップS909では、拍頭の押鍵ではなくても、それが直前拍先頭以降に押鍵されかつ維持されているものであれば、シンコペーションに該当するため、シンコペーションに該当する押鍵があったかを判断している。
ステップS909でYesと判断された場合には、先行メロディ音PMは初期値のまま、その一方、直前拍先頭以降に押鍵された鍵を現在メロディ音CMとするとともに、シンコペーションフラグSYNを「1」にセットして、RAM23に格納する(ステップS910)。先行メロディ音PMおよび現在メロディ音CMは、RAM23に格納される。シンコペーションに該当する押鍵は、拍頭における押鍵と同様の重みを有するため、拍頭と同様に扱われる。
次に、図10を参照して、ステップS906でNoであった場合について説明する。ステップS906でNoと判断された場合には、CPU21は、現在の拍先頭における押鍵が曲開始音に該当するかを判断する(ステップS1001)。ステップS1001は、CPU21が、RAM23に格納された押鍵情報を参照して、最初の押鍵情報であるかを判断することにより実現できる。ステップS1001でYesと判断された場合には、先行メロディ音PMとして、現在メロディ音CMを与える。また、現在メロディ音CMを初期値から変更することはないが、CPU21は、テーブル指定情報を第2のコードテーブルを指定する情報に変更する(ステップS1002)。
ステップS1001でNoと判断された場合には、8拍以上の時間、押鍵が無いかを判断する(ステップS1003)。ステップS1003でYesと判断された場合には、CPU21は、現在メロディ音CMは初期値のまま維持し、その一方、先行メロディ音PMとして、現在メロディ音CMを与え、RAM23に情報を格納する(ステップS1004)。ステップS1003でYesと判断される場合は、2小節以上、新たな押鍵が無いことになる。この場合には、メロディシーケンスの意味が薄くなるため、2小節以上前に押鍵された先行メロディ音PMの初期値は無視することとしている。ステップS1003でNoと判断された場合には、CPU21は、先行メロディ音PMおよび現在メロディ音CMを初期値のまま維持する(ステップS1005)。
次に、図11を参照して、ステップS907でNoと判断された場合について説明する。ステップS907でNoと判断された場合には、CPU21は、上述したメロディ機能テーブル(図44)を参照し、現在メロディ機能(Current Melody Function:CMF)が、非和声音(Other Tone:OT)であるかを判断する(ステップS1101)。ここに、現在メロディ機能CMFは、先行コード名PreCHに対する現在メロディ音CMの機能を示す。本実施の形態において、CMFは、現在メロディ音CMが、先行コード名PreCHのコード構成音であることを示すコードトーン(Chord Tone:CT)、現在のスケール(調性)の構成音であることを示すスケールノート(ScaleNote:SN)、その他の音(非和声音)を示すアザートーン(Other Tone:OT)の何れかとなる。
ステップS1101でYesと判断された場合には、CPU21は、先行メロディ音PMおよび現在メロディ音CMを、初期値のまま維持する(ステップS1102)。その一方、ステップS1101でNoと判断された場合には、CPU21は、現在メロディ機能CMFがスケールノートSNであるかを判断する(ステップS1103)。ステップS1103でYesと判断された場合には、CPU21は、先行メロディ音PMと現在メロディ音CMとの差が2半音以内であるかを判断する(ステップS1104)。ステップS1104では、いわゆる順次進行であるかが判断されている。ステップS1104でYesと判断された場合、または、ステップS1103でNoと判断された場合には、第1のドミナントモーション処理を実行する(ステップS1105)。
次いで、CPU21は、第1のドミナントモーション判定処理(ステップS1105)において、第2の判定結果であるかを判断する(ステップS1106)。ステップS1106でNoと判断された場合、つまり、第1の判定結果である場合には、CPU21は、先行メロディ音PMおよび現在メロディ音CMを、初期値のまま維持する(ステップS1102)。ステップS1106でYesと判断された場合には、CPU21は、現在の押鍵、つまり、処理対象となっている押鍵が1拍目のものであるかを判断する(ステップS1107)。ステップS1107でYesと判断された場合には、CPU21は、先行メロディ音PMおよび現在メロディ音CMを、初期値のまま維持する(ステップS1108)。
その一方、ステップS1107でNoと判断された場合、つまり、処理対象となっている押鍵が3拍目のものであれば、CPU21は、先行メロディ音PMとして、初期的な先行メロディ音PMよりさらに1つ前に押鍵された音高PPMを与える(ステップS1109)。なお、現在メロディ音CMは初期値が維持される。これは、3拍目で順次進行を構成する楽音は、装飾的な音である可能性が高く、メロディラインを支配する本来の楽音は、さらにその一拍前の楽音とすることが適切であると考えられるからである。
次に、ステップS909でNoと判断された場合について説明する。図12に示すように、CPU21は、直前拍における拍頭以降の押鍵音を特定し(ステップS1201)、特定された押鍵音の音高が、初期的なCMと同一であるかを判断する(ステップS1202)。ステップS1202でYesと判断された場合には、CPU21は、現在メロディ音CMを初期的な状態で維持し、その一方、先行メロディ音PMとして、現在メロディ音CMの値を与える(ステップS1203)。例えば、直前拍において、8分音符で「D」、「C」という順でメロディが進行し、現在の拍での押鍵が「C」であった場合を考える。この場合には、直前拍の最初の「D」の音は装飾音であると考えて、「D」から「C」というシーケンスではなく、「C」から「C」というシーケンスが適当であると考えている。このため、先行メロディ音を、現在メロディ音と同じにして、同じ音の連続としている。
ステップS1202でNoと判断された場合には、CPU21は、特定された拍頭以降の押鍵音が、全て、先行メロディ音PMと等しいかを判断する(ステップS1204)。ステップS1204でYesと判断された場合には、ステップS1103に進む。例えば、直前拍において、16分音符で、「D」、「C」、「C」、「C」という4つの押鍵がなされたと考える。この場合には、拍頭であるからといって「D」は、装飾的な音であることも考えられるため、拍頭の押鍵である「D」を、先行メロディ音PMとすべきではない場合もある。そこで、ステップS1103以降の処理を実行している。
その一方、ステップS1204でNoと判断された場合には、CPU21は、先行メロディ音PMおよび現在メロディ音CMを、初期値のまま維持する(ステップS1205)。
次に、2拍目対応ノート決定処理(ステップS807)について説明する。図14〜図17は、本実施の形態にかかる2拍目対応ノート決定処理の例を示すフローチャートである。図14に示すように、CPU21は、1拍目に押鍵が無かったかを判断する(ステップS1401)。ステップS1401でYesと判断された場合、つまり、押鍵が無かった場合には、CPU21は、テーブル指定情報を第1のコードテーブルを指定する情報に変更する(ステップS1401)。例えば、曲の途中で、前の小節の音が延び、1拍目が休符で、2拍目から次のフレーズが開始されるときには、本実施の形態では、2拍目で押鍵された音が1拍目と同様の重みがあると考え、1拍目用のコードテーブルである第1のコードテーブルを使用するようにしている。
2拍目対応ノート処理では、1拍目・3拍目対応ノート決定処理の第1のドミナントモーション判定処理(ステップS903)およびその判定結果に基づく処理(ステップS904、905)が省略されている。ステップS1403〜ステップS1407は、それぞれ、図9のステップS906〜910と同様である。
また、図15は、ステップS1403でNoと判断された場合に実行される処理である。ステップS1501、ステップS1503〜1505は、それぞれ、図10のステップS1001、ステップS1003〜1005と同様である。また、ステップS1502では、テーブル指定情報の変更が伴わないことを除き、図10のステップS1002と同様である。
次に、ステップS1404でNoと判断された場合について説明する。図16に示すように、CPU21は、現在メロディ機能CMFが、非和声音OTであるかを判断する(ステップS1601)。ステップS1601およびステップS1601でYesの場合に進むステップS1602は、図11のステップS1101、1102と同様である。
ステップS1601でNoと判断された場合には、CPU21は、先行コード名PreCHが無判定コード以外のコードであるかを判断する(ステップS1603)。図24(特にステップS2405)において説明するように、無判定コードについては、先の処理で転調フラグが「1」以上の値となっている。そこで、ステップS1603では、RAM23に格納された転調フラグが「1」以上であるかを判断すれば良い。
ステップS1603でNo、つまり、先行コード名PreCHが無判定コードである場合には、CPU21は、先行メロディ音PMとして、現在メロディ音CMを与える(ステップS1604)。その一方、ステップS1603でYesと判断された場合、つまり、先行コード名PreCHが無判定コード以外である場合には、現在メロディ機能CMFがスケールノートSNであるかを判断する(ステップS1605)。ステップS1103でYesと判断された場合には、CPU21は、先行メロディ音PMと現在メロディ音CMとの差が2半音以内であるかを判断する(ステップS1606)。ステップS1605およびステップS1606は、図11のステップS1103および1104と同様である。ステップS1605でNoと判断された場合、或いは、ステップS1606でYesと判断された場合には、CPU21は、現在コード名CurCHとして、先行コード名PreCHを与える(ステップS1607)。つまり、先行コード名PreCHが保持されることになる。
2拍目や4拍目においては、先行コード名が維持されるコードホールドが行なわれる場合があるため、適切なコードホールドを実現している。本実施の形態では、現在メロディ機能CMFがコードトーン(CT)である場合、或いは、現在メロディ機能CMFがスケールノート(SN)であり、かつ、順次進行である場合には、コードホールドを行なっている。4拍子の楽曲では、2拍目および4拍目は弱拍である。したがって、メロディが弱拍を強調するものでない限り、基本的に、2拍目および4拍目のコードは、1拍目および3拍目のコードを維持している。
例えば、図49に示す楽曲では、拍頭に「C」、「D」、「E」、「F」、「E」、「D」、「C」という音があり、この音のシーケンスは順次進行となっている。実際には、このシーケンスに適切なコード名は、IMaj(CMaj)である。しかしながら、ステップS1605〜ステップS1607に示す処理を実行しないと、2拍目や4拍目では、コード名がIMaj(CMaj)以外になってしまう。そこで、ステップS1605〜1606に示すように一定の条件の下では、コードホールドを行なって、適切なコード名を得られるようにしている。
ステップS1607の後、CPU21は、RAM23中のコード決定フラグを「1」にセットする(ステップS1608)。この場合には、ステップS1607で既に現在コード名CurCHが決定されるため、後続するコード決定の処理を要さないからである。
また、ステップS1606でNoと判断された場合には、ステップS1602に進み、先行メロディ音PMおよび現在メロディ音CMが維持される。
ステップS1406でNoと判断された場合の処理は、図17に示される。図17のステップS1701〜ステップS1705は、図12のステップS1201〜1205と同様である。ステップS1704でYesと判断された場合には、図16のステップS1605に進み、コードホールドが判断される。
次に、4拍目対応ノート決定処理(ステップS808)について説明する。図18〜図19は、本実施の形態にかかる4拍目対応ノート決定処理の例を示すフローチャートである。4拍目対応ノート決定処理は、2拍目対応ノート決定処理と類似する。
図18に示すように、4拍目対応ノート決定処理においては、1拍目の押鍵の有無およびそれに伴う処理(図14のステップS1401〜1402)は省略されている。図18において、ステップS1801〜1805は、図14のステップS1403〜1407と同様である。また、ステップS1801でNOと判断された場合には、図15の処理が実行される。
ステップS1802でNoと判断された場合には、図19に示す処理が実行される。図19において、ステップS1901〜1906は、図16のステップS1601〜1606と同様である。4拍目対応ノート処理においては、ステップS1905でNo或いはステップS1906でYesと判断されたときに、さらに、第2のドミナントモーション判定処理(ステップS1907)を実行し、その結果に基づいて、コードホールドと行なうべきかを判断している。
図20は、本実施の形態にかかる第2のドミナントモーション判定処理の例を示すフローチャートである。第2のドミナントモーション判定処理では、メロディ音の遷移のみが判断され、先行コード名PreCHのコード種別は考慮されない。図20に示すように、CPU21は、(PM,CM)が、(F,E)、(B,C)、(D,C)の何れかであるかを判断する(ステップS2001)。これは、図13のステップS1302と同様である。ステップS2001でNoと判断された場合には、CPU21は、(PM,CM)が、(G#,A)、(B,A)、(D,C)の何れかであるかを判断する(ステップS2003)。これは、図13のステップS1306と同様である。
ステップS2001でYesと判断された場合、或いは、ステップS2003でYesと判断された場合には、CPU21は、ドミナントモーション処理において第1の判定結果であったことを示す情報をRAM23に格納する(ステップS2002)。その一方、ステップS2003でNoと判断された場合には、CPU21は、ドミナントモーション処理において第1の判定結果であったことを示す情報をRAM23に格納する(ステップS2004)。
第2のドミナントモーション判定処理により第2の判定結果となった場合(ステップS1908でYes)には、CPU21は、現在コード名CurCHとして、先行コード名PreCHを与える(ステップS1909)。つまり、先行コード名PreCHが保持されることになる。次いで、CPU21は、RAM23中のコード決定フラグを「1」にセットする。その一方、ステップS1908でYesと判断された場合には、ステップS1902に進み、先行メロディ音PMおよび現在メロディ音CMが維持される。
ステップS1804でNoと判断された場合には、図17に示す処理が実行される。
ステップS805、807、808に示す、拍のそれぞれに対応したノート決定処理が終了すると、処理により修正された先行メロディ音PMおよび現在メロディ音CMに基づいて、コード決定処理が実行される(ステップS809)。図21〜図24は、本実施の形態にかかるコード決定処理の例を示すフローチャートである。
図21に示すように、CPU21は、コードホールドにより既に現在コード名CurCHが決定され、コード決定フラグが「1」ではないかを判断する(ステップS2101)。ステップS2101でNoと判断された場合、つまり、コード決定フラグが「1」である場合には、CPU21は、現在コード名CurCHおよびその発音時刻をRAM23の所定の領域に格納する(ステップS2105)。
ステップS2101でYesと判断された場合、つまり、コード決定フラグが「1」ではない場合には、CPU21は、RAM23から先行メロディ音PMおよび現在メロディ音CMを取得する(ステップS2102)。CPU21は、先行メロディ音PMが曲開始音であるかを判断する(ステップS2103)。ステップS2103においては、例えば、先行メロディ音PMよりさらに前の時刻に押鍵された音が存在しないことを判断すれば良い。ステップS2103でNoと判断された場合には、CPU21は、先行コード音PreCHが無判定コードであるかを判断する(ステップS2104)。
ステップS2103でYesと判断された場合、或いは、ステップS2104でYesと判断された場合には、CPU21は、先行メロディ音PMとして、現在メロディ音CMを与える(ステップS2105)。ステップS2104でYesと判断された場合には、先行コード名PreCHが無判定コードであるため、新たにメロディシーケンスが開始する方が妥当であるからである。
次いで、CPU21は、メロディシーケンステーブルを参照して(PM,CM)に対応する値の組を取得する(ステップS2106)。図41は、本実施の形態にかかるメロディシーケンステーブルの例を示す図である。図41に示すように、メロディシーケンステーブル2200には、所定の先行メロディ音PMおよび現在メロディ音CMについて値の組が格納されている。(PM,CM)に対応する値の組がメロディシーケンステーブル2200中に存在すれば、その値の組を一時的にRAM23に格納すれば良い。その一方、(PM,CM)に対応する値の組が、メロディシーケンステーブル2200中に存在しなければ、値の組が存在しないことを示す情報をRAM23に格納すれば良い。
次に、CPU21は、現在メロディ音CMの直前に押鍵された音(CM直前音)を特定する(ステップS2107)。ここにいう直前に押鍵された音は、実際に直前に押鍵された音であり、先行メロディ音PMと同一ではない場合もある。CPU21は、ステップS2107で特定されたCM直前音と、現在メロディ音CMとを比較して、これらの音高差が5半音以上であるかを判断する(ステップS2108)。ステップS2108でYesと判断された場合には、CPU21は、現在メロディ音CMが1拍目の押鍵に関するものであるかを判断する(ステップS2109)。
メロディシーケンスにおいては、核となるべきメロディ音が含まれ、その前後には、核となるメロディ音を装飾するメロディ音が存在する場合がる。装飾するメロディ音は、核となるメロディ音からそれほど音高差が無いのが通常である。その一方、音高差が一定範囲(例えば4度程度)以上となるように跳躍する場合には、跳躍した後の音に比較的重みが大きくなる場合が多い。そこで、ステップS2108で、音高差を判断して、その差に基づいて異なる処理を行なっている。
ステップS2109でYesと判断された場合には、CPU21は、先行コード名PreCHが2小節以上継続しているかを判断する(ステップS2201)。ステップS2201でYesと判断された場合には、CPU21は、第1のコードテーブルのうち、種別として「jump2」の欄を参照することを決定し、第1のコードテーブル中の所定のコード名を取得する(ステップS2202)。その一方、ステップS2202でNoと判断された場合には、CPU21は、第1のコードテーブルのうち、種別として「jump1」の欄を参照することを決定し、第1のコードテーブル中の所定のコード名を取得する(ステップS2203)。
図42は、本実施の形態にかかる第1のコードテーブルの例を示す図である。図42においては、第1のコードテーブルの一部を示している。図42に示すように、コードテーブル4200では、少なくとも、先行コード名の機能(先行コード機能(Previous Chord Function):符号4210参照)および(先行メロディ音PM,現在メロディ音CM)の組(例えば、符号4201、4202参照)に基づいて、コード名が決められるようになっている。
さらに、本実施の形態においては、「ジャンプなし」、「jump1」および「jump2」という3つの種別(符号4211参照)を設け、先行コード機能、(先行メロディ音PM,現在メロディ音CM)の組および種別に基づいて、コード名が決定されるようになっている。
先行コード機能は、トニック(Tonic)、サブドミナント(Subdominant)およびドミナント(Dominant)の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」(符号4221参照)が取得される。また、先行コード名PreCHの先行コード機能が「トニック」であり、かつ、(先行メロディ音PM,現在メロディ音CM)=(C,G)であり、種別が「jump1」であれば、第1のコードテーブルから「IMaj」(符号4222参照)が取得される。
CPU21は、現在コード名CurCHとして、第1のコードテーブルから特定されたコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納する(ステップS2204、2205)。
次に、ステップS2208でNo或いはステップS2209でNoと判断された場合について説明する。CPU21は、現在メロディ音CMが、先行コード名PreCHのコードトーン(CT)であるかを判断する(ステップS2301)。ステップS2301でYesと判断された場合には、CPU21は、先行コード名PreCHの楽音の発音時刻および現在時刻に基づき、先行コード名PreCHの発音時間が2拍以内であるかを判断する(ステップS2302)。ステップS2302でYesと判断された場合には、CPU21は、さらに、シンコペーションフラグが「1」であるかを判断する(ステップS2303)。
ステップS2303でNoと判断された場合には、CPU21は、第2のドミナントモーション処理を実行して(ステップS2305)、先行メロディ音PMから現在メロディ音CMへの移行がドミナントモーションであるかを判断する。第2のドミナントモーション処理の結果が第2の判定結果である場合(ステップS2305でYes)には、CPU21は、現在コード名CurCHとして、先行コード名PreCHを与える(ステップS2306)。つまり、先行コード名PreCHが保持されることになる。
ステップS2301でNo、ステップS2302でNo、或いは、ステップS2305でNoと判断された場合には、CPU21は、(先行メロディ音PM,現在メロディ音CM)に対応する値の組が、メロディシーケンステーブル中に存在していたかを判断する(ステップS2307)。図21のステップS2106において、値の組或いは値の組が存在しないことを示す情報がRAM23に格納されているため、その情報を参照することにより、ステップS2307の判断が可能である。
ステップS2307でYesと判断された場合には、現在メロディ音CMが、1拍目或いは2拍目に関するものであり、かつ、テーブル指定情報は第1のテーブルを示しているかを判断する(ステップS2308)。ステップS2308でYesと判断された場合には、CPU21は、第1のコードテーブルのうち、種別として「ジャンプなし」の欄を参照することを決定し、第1のコードテーブルにおいて、所定のコード名を取得する(ステップS2309)。これに対して、ステップS2308でNoと判断された場合には、CPU21は、第2のコードテーブルを参照することを決定し、第2のコードテーブルにおいて、所定のコード名を取得する(ステップS2310)。
図43は、本実施の形態にかかる第2のコードテーブルの例を示す図である。図43においては、第2のコードテーブルの一部を示している。図43に示すように、コードテーブル4300では、先行コード名の機能(先行コード機能(Previous Chord Function):符号4310参照)および(先行メロディ音PM,現在メロディ音CM)の組(例えば、符号4301、4302参照)に基づいて、コード名が決められるようになっている。例えば、先行コード名PreCHの先行コード機能が「サブドミナント」であり、かつ、(先行メロディ音PM,現在メロディ音CM)=(C,G)であれば、第2のコードテーブルから「VMaj」(符号4321参照)が取得される。
その後、CPU21は、現在コード名CurCHとして、第1のコードテーブル或いは第2のコードテーブルから特定されたコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納する(ステップS2311、2205)。
ステップS2307においてYesと判断される場合は、メロディシーケンステーブルに、(先行メロディ音PM,現在メロディ音CM)の組が存在したため、コードテーブルを参照することで適切なコード名が取得されている。その一方、ステップS2307でNoと判断された場合には、転調或いは一時的な無判定コードの決定などが行なわれる。ステップS2307でNoと判断された場合には、CPU21は、現在メロディ音CMの発音時間(押鍵時間)が4分音符より大きいか、つまり、1拍より長く発音されているかを判断する(ステップS2401)。
ステップS2401でNoと判断された場合には、CPU21は、先行コード名PreCHを変更せず、そのまま現在コードCurCHとする(ステップS2407)。ステップS2401でNoとなる場合は、演奏者が意図して押鍵したのではなく、ミスタッチによって誤った鍵を押鍵してしまった可能性が高い。そこで、この場合は、コード名を変更することなく、先行コード名PreCHをそのまま現在コード名CurCHとする。
ステップS2401でYesと判断された場合には、CPU21は、現在メロディ音の発音時間(押鍵時間)が、3拍以下であるかを判断する(ステップS2402)。ステップS2402でYesと判断された場合には、転調フラグが「2」以下であるかを判断する。ステップS2403でYesと判断された場合には、CPU21は、RAM23に格納される転調フラグの値をインクリメントする(ステップS2405)。ステップS2402でNo或いはステップS2403でNoと判断された場合には、CPU21は、転調処理を実行する(ステップS2404)。
本実施の形態においては、基本的には、現在メロディ音CM、先行メロディ音PMを含むメロディ音は、「C」のスケール(調性)で処理される。したがって、転調処理では、転調後の調性と「C」との音高差が算出され、その音高差をオフセットとしてRAM23に格納すれば良い。転調処理以後は、実際に押鍵された鍵番号により特定される音名をオフセットだけ減じることで、「C」の調性で処理を続行することが可能となる。
ステップS2405の後、CPU21は、現在メロディ音CMが、先行コード名PreCHのコードトーン(CT)或いはスケールノート(SN)であるかを判断する(ステップS2406)。ステップS2406においては、ステップS1101と同様に、CPU21は、メロディ機能テーブルを参照して、現在メロディ音CMおよび先行コード名PreCHの組に対応付けられた値が、コードトーン或いはスケールノートであるかを判断すれば良い。ステップS2406でYesと判断された場合には、CPU21は、コードを保持すべく現在コード名CurCHに、先行コード名PreCHを与える(ステップS2407)。
ステップS2407でNoと判断された場合には、CPU21は、無判定コードテーブルを参照して、ディミニシュ(dim)或いはオーギュメント(aug)のコードを、現在コード名CurCHに与える(ステップS2408)。図45は、本実施の形態にかかる無判定コードテーブルの一例の部分を示す図である。図45に示す無判定コードテーブル4500においては、現在メロディ音CMと先行コード名PreCHからなる値の組に対応して、所定の値が取得できるようになっている。
無判定コードテーブル4500において、空欄(例えば、符号4501参照)は、現在メロディ音CMと先行コード名PreCHからなる値の組に対応付けられた現在メロディ機能(CMF)が、コードトーン(CT)或いはスケールノート(SN)であることを意味している(図44参照)。したがって、無判定コードテーブル4500において空欄となる現在メロディ音CMと先行コード名PreCHからなる値の組については、現在コード名CurCHが無判定コードとなることが無いため、値が格納されていない。したがって無判定コードテーブル4500では、現在メロディ機能(CMF)が、アザートーン(OT)である場合について、ディミニシュ(dim)或いはオーギュメント(aug)の何れかを指定する情報が格納されている。
CPU21は、無判定コードテーブル4500から、現在メロディ音CMと先行コード名PreCHからなる値の組に対応付けられた、ディミニシュ(dim)或いはオーギュメント(aug)の何れかを指定する情報を取得して、現在メロディ音CMを根音とするコード名を得る。例えば、現在メロディ音が「C#」、先行コード名が「IMaj」であれば、コード名は、「I#dim」となる(符号4511参照)。また、現在メロディ音が「A♭」、先行コード名が「IM7」であれば、コード名は、「VI♭aug」となる。CPU21は、このようにして、現在メロディ音CMを根音とするディミニッシュ(dim)或いはオーギュメント(aug)のコード名を、現在コード名CurCHとして決定し、RAM23に格納する。
上述したように、本実施の形態においては、まず、現在の拍の拍頭の押鍵に関する現在メロディ音CMと、前拍の拍頭の押鍵に関する先行メロディ音PMとが、何拍目かを示す情報、先行コード名PreCHや、押鍵タミングなどにしたがって修正される(図8のステップS801〜808)。その上で、現在メロディ音CM、先行メロディ音PMおよび先行コード名PreCHに基づいて、現在コード名CurCHが決定される(ステップS809)。
図25〜図40を参照して、ポリの場合のコード付けについて説明する。図25は、本実施の形態にかかるコード名判定処理(ポリ)の例を示すフローチャートである。概略的には、現在発音されている複数の楽音を、現在音高(Current Musical Sound Notes)CM、それより1つ前に発音されている一以上のメロディ音を、先行音高(Previous Musical Sound Notes)PM、現在より一つ前に演奏されていたコード名を、先行コード名(Previous CHord name)PreCHとして、現在音高CM、先行音高PMおよび先行コード名PreCHに基づいて、新たに発音すべき現在コード名(Current CHord name)CurCHを決定している。なお、本実施の形態においては、モノの場合と同様に、楽曲の調性をハ長調(CMaj)或いはイ短調(Amin)として、コード名については、IMaj、IImなど、主音に対する度数で表し、そのデータをRAM23などに記憶している。他の調性の場合には、当該調性のルート音と、「C」(或いは「A」)の音との音高差に基づいて、ルート音を伴うコード名を得ることが可能である。
まず、CPU21は、拍頭の時点で前拍から延びた音・ペダル音の場合に発音している全ての音を読み込む(ステップS2501)。ピアノ曲ではペダルオンで延びている音も忘れず判断材料にしないといけないからである。次に、CPU21は、ポリ状態を検出する(ステップS2502)。具体的には、ステップS2501で読み込んだ音の数を変数Polyに格納する。変数Polyに格納された数によって、コード判定に使用されるテーブル(図46〜48参照)が決定される。次に、CPU21は、Poly≧5であるか判断する。この判断がYESの場合、処理をステップS2504に移し、NOの場合、処理をステップS2505に移す。
ステップS2504では、CPU21は、5音以上処理を行う。図26は、本実施形態にかかる5音以上処理の例を示すフローチャートである。
5音以上処理は、5音以上の音が読み込まれたときに、4音以内にまとめる方法を示した処理である。CPU21は、ステップS2501で、同一音名は1個のみ残すようにする。例えば「ドソドミシ」という5音があるとき、同一音名「ド」が二つあるので、これを1個にすれば、「ドミソシ」という4音になる。ピアノ曲では左手と右手で同じ音を弾くことが多いので、これでコード判断用のポリ数を減らすことができる。同一音名を減らすときには、高い音のほうを削除する。
ステップS2602において、CPU21は、同一音名を一つにしたあとでもまだ5音以上であるか判断する。5音以下なら、ステップS2603に処理を移し、4音かどうか判断して、そうであればステップS2607で4音であると決定する。4音でない場合には、ステップS2604に処理を移し、3音であるかどうかを判断して、そうであればステップS2608で3音であると決定する。3音でもない場合には、ステップS2605に処理を移して、2音であるかを判断し、そうであればステップS2609に進んで2音であると決定され、2音でもない場合には音種としてはひとつしかないということになるので、ステップS2510に処理を写し、モノであると決定される。音数が決定したら、CPU21は、5音以上処理を終了する。
ここで、ステップS2602で、まだ5音以上であると判断された場合には、CPU21は、処理をステップS2606に移し、Duration(発音時間の長さ)の長い順に上位4音をD−Boxに格納し、ステップS2611で、Velocity(発音の強さ)の大きい順に上位4音をV−Boxに格納する。CPU21は、ステップS2612でD−BoxとV−Boxの上位4種が、順番にかかわらず種類が同じであるかを判断して、同じであれば、ステップS2613に処理を移し、D−BoxとV−Boxの上位4種で4音を決定する。
ステップS2612で、種類が同じでないと判断された場合には、まだ4音以内に決定されないので、CPU21は、ステップS2614で、入力された音をステップS2601において同一音名で抜けた音を除いて、低い方から順に並べる。例えば「ドソミシレ」などのように並べる。ステップS2615で、CPU21は、下4音のそれぞれが短三度以上の間隔かを判断し、そうであればステップS2616で下4音である「ドソミシ」を4音として決定する。ステップS2615で、下4音が短三度以上開いていないと判断された場合には、CPU21は、ステップS2617で下3音が短三度以上開いているかを判断する。そうであれば、ステップS2618で下3音を決定する。例えば「ドソミファレ」であれば、下三音の「ドソミ」に決まることになる。
ステップS2617で、下3音が短三度以上開いていない場合、例えば「ドレミファソ」のような場合には、CPU21は、ステップS2619で前のコードとの共通音が3個以上あるか判断し、例えば前のコードPreCHがドミソ(CMaj)であれば、この共通する3音があるので、共通音が3個以上あると判断して、処理をステップS2620に移し、共通の3音である「ドミソ」に決定する。
ステップS2619で、前のコードとの共通音が3個以上あると判断されない場合には、CPU21は、処理をステップS2621に移し、下から短三度以上の間隔がある音3音に決定する。
例えば、前のコードPreCHが「ラドミ」(Amin)で、処理対象の音が「ドレミファソ」の5音であるときには、CPU21は、下から短三度以上の間隔がある音3音である「ドミソ」と決定し、5音以上処理を終了する。
ほとんどの場合、5音以上音があるときに、ステップS2612の判断で決定することが多いが、万一決定されなかった場合には、伴奏として下の音を基本とするのがふさわしいという考えでこのようなステップS2614〜2621の処理を実行している。最近の音楽では、メロディが必ずしもコードに含まれないことも多く、その場合には伴奏としては低音を基本に考えるのがよいと考えられるからである。
図25に戻って、ステップS2505では、CPU21は、Poly遷移による拍点ポイントジャッジ振り分け処理を行う。図27は、本実施形態にかかるPoly遷移による拍点ポイントジャッジ振り分け処理の例を示すフローチャートである。ここで、図27に示す、PM=Poly4?は、先行音高PMの音数が4であるか否かを意味し、CM=Poly4?は、現在音高CMの音数が4であるか否かを意味する。その他PM=Poly3?、CM=Poly3?なども同様である。
モノ用の拍点ポイントジャッジは、図8ステップS803〜808にあるとおりであるが、ポリ用の拍点ポイントジャッジは、図27に示した通りの種類がある。既に、5音以上処理(図26)により、5音以上を4音以内にまとめているので、振り分ける種類としては、先行音高PM→現在音高CMとすると、4音→4音、4音→3音、4音→2音、4音→1音、3音→4音、3音→3音、3音→2音、3音→1音、2音→4音、2音→3音、2音→2音、2音→1音、1音→4音、1音→3音、1音→2音、1音→1音がある。
4音→1音、3音→1音、2音→1音、1音→1音については、現在音高CMが1音であるので、モノ用の拍点ポイントジャッジ(図8ステップS803〜808)を行う。ポリ用の拍点ポイントジャッジにおいてCMが1音になる場合というのは、上述した5音以上処理(図26参照)において、同一音名の音が5音以上入力された場合、例えば「ソソソソソソ」などの場合が該当する。
図27を参照して、Poly遷移による拍点ポイントジャッジ振り分け処理を説明する。CPU21は、PMが4音であるか否かを判断する(ステップS2701)。PMが4音である場合、CMが4音であるか否かを判断する(ステップS2702)。CMが4音である場合、拍点ポイントジャッジ4−4処理(図28参照)を実行する(ステップS2703)。CMが4音でない場合、CMが3音であるか否かを判断する(ステップS2704)。CMが3音である場合、拍点ポイントジャッジ4−3処理(図36参照)を実行する(ステップS2705)。CMが3音でない場合、CMが2音であるか否かを判断する(ステップS2706)。CMが2音である場合、拍点ポイントジャッジ4−2処理(図37参照)を実行する(ステップS2707)。CMが2音でない場合、拍点ポイントジャッジ4−1処理を実行する(ステップS2707)。
ステップS2701でPMが4音でないと判断された場合、CPU21は、PMが3音であるか否かを判断する(ステップS2709)。PMが3音である場合、CMが4音であるか否かを判断する(ステップS2710)。CMが4音である場合、拍点ポイントジャッジ3−4処理を実行する(ステップS2711)。CMが4音でない場合、CMが3音であるか否かを判断する(ステップS2712)。CMが3音である場合、拍点ポイントジャッジ3−3処理を実行する(ステップS2713)。CMが3音でない場合、CMが2音であるか否かを判断する(ステップS2714)。CMが2音である場合、拍点ポイントジャッジ3−2処理を実行する(ステップS2715)。CMが2音でない場合、拍点ポイントジャッジ3−1処理を実行する(ステップS2716)。
ステップS2709でPMが3音でないと判断された場合、CPU21は、PMが2音であるか否かを判断する(ステップS2717)。PMが2音である場合、CMが4音であるか否かを判断する(ステップS2718)。CMが4音である場合、拍点ポイントジャッジ2−4処理を実行する(ステップS2719)。CMが4音でない場合、CMが3音であるか否かを判断する(ステップS2720)。CMが3音である場合、拍点ポイントジャッジ2−3処理を実行する(ステップS2721)。CMが3音でない場合、CMが2音であるか否かを判断する(ステップS2722)。CMが2音である場合、拍点ポイントジャッジ2−2処理を実行する(ステップS2723)。CMが2音でない場合、拍点ポイントジャッジ2−1処理を実行する(ステップS2724)。
ステップS2717でPMが2音でないと判断された場合(PMはモノとなる)、CPU21は、CMが4音であるか否かを判断する(ステップS2725)。CMが4音である場合、拍点ポイントジャッジ1−4処理を実行する(ステップS2726)。CMが4音でない場合、CMが3音であるか否かを判断する(ステップS2727)。CMが3音である場合、拍点ポイントジャッジ1−3処理を実行する(ステップS2728)。CMが3音でない場合、CMが2音であるか否かを判断する(ステップS2729)。CMが2音である場合、拍点ポイントジャッジ1−2処理を実行する(ステップS2730)。CMが2音でない場合、拍点ポイントジャッジ1−1処理を実行する(ステップS2731)。
図28を参照して、拍点ポイントジャッジ4−4処理について説明する。CPU21は、押鍵された鍵の時間的位置、つまり、鍵が何拍目に押鍵されたかを判断する(ステップS2801、2807、2813)。
本実施の形態においては、楽曲は4分の4拍子であり、1小節が4拍で構成される。押鍵がn拍目であることは、押鍵のタイミングが、第n拍の先頭以降で、第(n+1)拍の先頭よりも時間的に早いことを意味している。
楽曲の構成要素には拍子および拍という概念がある。また、拍子においては拍ごとに重みがあり、上記拍の重みを考慮して音高は進行する。また、シンコペーションなど、場合によって拍の重みが移動する場合もある。
ステップS2801で、1拍目と判断されれば、CPU21は、曲頭処理(図29参照)(ステップS2802)、コード保持(ベース)処理(図30参照)(ステップS2803)、アルペジオ処理(図31参照)(ステップS2804)、シンコペーション処理(図32参照)(ステップS2805)、ドミナントモーション処理(図33参照)(ステップS2806)、を行い、4音フラグをONにする(ステップS2819)。
ステップS2807で、2拍目または4拍目と判断されれば、CPU21は、ランニングベース処理(図34参照)(ステップS2808)、コード保持(弱拍)処理(図35参照)(ステップS2809)、アルペジオ処理(図31参照)(ステップS2810)、シンコペーション処理(図32参照)(ステップS2811)、ドミナントモーション処理(図33参照)(ステップS2812)、を行い、4音フラグをONにする(ステップS2819)。
ステップS2813で、3拍目と判断されれば、CPU21は、オルタネイトベース処理(図34参照)(ステップS2814)、コード保持(ベース)処理(図30参照)(ステップS2815)、アルペジオ処理(図31参照)(ステップS2816)、シンコペーション処理(図32参照)(ステップS2817)、ドミナントモーション処理(図33参照)(ステップS2818)、を行い、4音フラグをONにする(ステップS2819)。
このように、現拍が何拍目かに応じて処理するアルゴリズムを変更している。すなわち、アルゴリズムを部品化して、それぞれの拍で必要なものを必要な順番に並べるようにした。このようにすると、不足しているアルゴリズムがあればすぐに追加でき、また、不要なアルゴリズムはすぐに外せる。またアルゴリズムの順番に問題があるときには、すぐに修正することが可能なので、デバックしやすい。
図29を参照して、曲頭処理について説明する。ステップS2901で、CPU21は、曲開始音かどうか判断する。曲開始音である判断されないと、CPU21は、ステップS2902で直前の8拍に押鍵がないかどうかを判断する。曲開始音である、または直前の8拍に押鍵がないと判断されると、CPU21は、ステップS2903で、現拍の区間内で発音されている音高でコード判定を行い、コード確定フラグをオンする。これは、曲開始音である、または直前の8拍に押鍵がないということは、それ以前にコードが存在しない、存在していたとしても今回のコード判定に影響しない、という理由による。
逆に曲開始音でもなく、直前の8拍に押鍵がある場合には、直前に判定されたコードが影響するため、CPU21は、ステップS2904において、図46に示す4音および3音コード用Available Chord Table&無判定コードテーブル(以下、「4音および3音用テーブル」という)、言い換えれば前機能なしのテーブル参照フラグをONにする。
この曲頭処理は、4音ポリ及び3音ポリの場合に適用可能であるが、2音ポリ以下の場合は処理が異なる。2音ポリ以下の場合、ステップS2903においては、基本的に現拍の区間内で発音されている音高のみに基づいてコード判定の処理を行い、ステップS2904においては、図42〜図45のいずれかに示すコードテーブル、言い換えれば前機能ありのテーブル参照フラグをオンにする。
図30を参照して、コード保持(ベース)処理について説明する。このコード保持(ベース)処理は、ベース区間がコード区間であることが多いため、ベースが延びている間は所定の条件の下で前のコードと同一であるとする処理である。
ステップS3001で、CPU21は、ベースが現拍頭より前から延びているか否かを判断する。ベースが現拍頭より前から延びていない場合には、CPU21は、コード保持(ベース)処理を終了する。ベースが現拍頭より前から延びている場合には、直前のベース音と同じ音か否かを判断する(ステップS3002)。直前のベース音と同じ音ではない場合には、SYN(シンコペーションフラグ)をONにし(ステップS3003)、コード保持(ベース)処理を終了する。ステップS3001でYes、ステップS3002でNoの場合は直前拍のあとでベースが変わり現拍でも延びているということであるので、シンコペーションであるということがわかる。
ステップS3002で直前拍のベースと同じであると判断されると、ステップS3004に進み、現在音高CMが直前拍同じであるかどうかを判断する。同じであると判断されると、CPU21は、ステップS3005で、Current Chord(CurCH)=Previous Chord(PreCH)とし、コード確定フラグをONにし、CurCHをRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、コード保持(ベース)処理を終了する。ステップS3004で、直前拍と同じでないと判断されると、CPU21は、ステップS3006で、前機能ありテーブル参照フラグをONにし、コード保持(ベース)処理を終了する。
図31を参照して、アルペジオ処理について説明する。CPU21は、ステップS3101で、前拍拍頭以降に入力音があるかどうかを判断する。前拍拍頭以降に入力音があると判断されなければ、アルペジオ処理を終了する。前拍拍頭以降に入力音があると判断されれば、CPU21は、ステップS3102で、Previous Chord(PreCH)に含まれる音であるかどうかを判断する。Previous Chord(PreCH)に含まれる音であると判断されると、CPU21は、ARPフラグをONにし(ステップS3103)、アルペジオ処理を終了する。ステップS3102で、Previous Chord(PreCH)に含まれる音であると判断されると、CPU21は、ステップS3104で、前機能ありテーブル参照フラグをONにし、アルペジオ処理を終了する。
図32を参照して、シンコペーション処理について説明する。CPU21は、ステップS3201で、SYN(シンコペーションフラグ)がONであるかどうかを判断する。図30ステップS3003において、コード保持(ベース)処理で見つかったベースのシンコペーションフラグがONであるか否かを判断するのが、ステップS3201であり、ベース以外のシンコペーションがあるか否かを判断するのが、ステップS3202である。
ステップS3201でSYN(シンコペーションフラグ)がONである場合、CPU21は、ステップS3207へ処理を移す。ステップS3201でSYN(シンコペーションフラグ)がONでない場合、CPU21は、ステップS3202へ処理を移し、ベース以外のシンコペーションがあるか否かを判断する。ベース以外のシンコペーションがあると判断されれば、CPU21は、ステップS3203へ処理を移し、SYN(シンコペーションフラグ)をONにし、ステップS3207へ処理を移す。ステップS3207では、延びている音を優先として、ステップS3206へ処理を移す。これは、コードが判定できないときなどに、押鍵している音を無判定コードとして出す場合があるが、その際に優先される音として用いる。
ステップS3202で、ベース以外のシンコペーションがあると判断されなければ、CPU21は、ステップS3204で、現在音高CMが直前拍と同じであるかどうかを判断する。同じであると判断されると、CPU21は、Current Chord(CurCH)=Previous Chord(PreCH)とし、コード確定フラグをONにし、CurCHをRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、シンコペーション処理を終了する。ステップS3204で、直前拍と同じでないと判断されると、CPU21は、ステップS3206で、前機能ありテーブル参照フラグをONにし、シンコペーション処理を終了する。
図33を参照して、ドミナントモーション処理について説明する。CPU21は、ステップS3301で、RAM23に格納されたPrevious Chord(PreCH)が、メジャー系のドミナントコードのいずれかに対応するかを判断する。ここで、本実施の形態では、メジャー系のドミナントコードは、「VMaj」、「V7」および「VIIm7 (−5)」としている。ステップS3301でYesと判断された場合には、CPU21は、現在音高CMがIMajであるかを判断する(ステップS3302)。ステップS3302では、先行コードPreCHから現在音高CMへの動きが、長調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。
ステップS3302でYesと判断された場合には、CPU21は、現在コード名CurCHを「IMaj」に決定し、その情報および発音時刻をRAM23に格納し、コード確定フラグをONにする(ステップS3306)。その後、CPU21は、ドミナントモーション処理を終了する。ステップS3301でNoと判断された場合には、CPU21は、先行コード名PreCHが、マイナー系のドミナントコードの何れかに対応するかを判断する(ステップS3302)。ここで、本実施の形態において、例えば、マイナー系のドミナントコードは、「IIIMaj」および「III7」としている。
ステップS3302でYesと判断された場合には、CPU21は、現在音高CMがVIMinであるかを判断する(ステップS3304)。ステップS3304においては、先行コードPreCHから現在音高CMへの動きが、短調の和音進行でドミナントからトニックに解決するときの動きであるか否かを判断している。ステップS3304でYesと判断された場合には、CPU21は、現在コード名CurCHを「VImin」に決定し、その情報および発音時刻をRAM23に格納し、コード確定フラグをONにする(ステップS3306)。その後、CPU21は、ドミナントモーション処理を終了する。ステップS3303またはステップS3304でNOと判断された場合、CPU21は、前機能ありテーブル参照フラグをONにする(ステップS3305)。その後、CPU21は、ドミナントモーション処理を終了する。
図34を参照して、ランニングベース/オルターネートベース処理について説明する。ステップS3401で、CPU21は、ベース(最低音)以外が前拍同様かどうかを判断する。YESと判断されれば、CPU21は、処理をステップS3402に移し、NOと判断されれば、CPU21は、ランニングベース/オルターネートベース処理を終了する。CPU21は、ステップS3402で、ベースがコード構成音(CT)またはスケールノート(SN)であるかどうかを判断する。YESと判断されれば、CPU21は、処理をステップS3403に移し、NOと判断されれば、CPU21は、ランニングベース/オルターネートベース処理を終了する。
CPU21は、ステップS3403で、ベースがPrevious Chord(PreCH)の第5音にあたるかどうかを判断する。YESと判断されれば、CPU21は、処理をステップS3405に移し、NOと判断されれば、CPU21は、処理をステップS3404に移す。CPU21は、ステップS3405でAltB(オルターネートベースフラグ)をONとし、オルターネートベースだと判断し、処理をステップS3406に移す。CPU21は、ステップS3404でRunB(ランニングベースフラグ)をONとし、ランニングベースであると判断し、処理をステップS3406に移す。ランニングベースもオルターネートベースも、ベース音だけの動きでありコード自体は変わらないので、ステップS3406にてCurrent Chord(CurCH)=Previous Chord(PreCH)として、コード確定フラグをONし、CurCHをRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納する。
図35を参照して、コード保持(弱拍)処理について説明する。コード保持(弱拍)処理は、モノ処理と同様に、弱拍時かつ最高音が跳躍しないことを条件に、コード保持をする処理である。CPU21は、ステップS3501で最高音が前拍と異なるかを判断する。YESと判断されれば、ステップS3502に処理と移し、NOと判断されれば、CPU21は、コード保持(弱拍)処理を終了する。CPU21は、ステップS3502で、メロディ(音高のうちの再高音)が、先行コード名PreCHのコード構成音(CT)またはスケールノート(SN)であり、かつ順次進行(前拍最高音と現拍最高音との差が2半音以内である)する音であるかを判断する。YESと判断されれば、CPU21は、処理をステップS3504に写し、NOと判断されれば、CPU21は、処理をステップS3503に移す。CPU21は、ステップS3503で、ランニングベースもしくはオルターネートベースであるかを判断する。YESと判断されれば処理をステップS3504に移し、NOと判断されれば、CPU21は、コード保持(弱拍)処理を終了する。CPU21は、ステップS3504では、Current Chord(CurCH)をPrevious Chord(PreCH)と同一にして、コード確定フラグをONにすし、CurCHをRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納する。その後、CPU21は、コード保持(弱拍)処理を終了する。
図36を参照して、拍点ポイントジャッジ4−3処理について説明する。拍点ポイントジャッジ4−3処理は、ステップS3619で、3音フラグをONにする以外の処理は、拍点ポイントジャッジ4−4処理と同様である。
図37を参照して、拍点ポイントジャッジ4−2処理について説明する。拍点ポイントジャッジ4−2処理は、ステップS3719で、2音フラグをONにする以外の処理は、拍点ポイントジャッジ4−4処理と同様である。
図27を参照して、拍点ポイントジャッジ3−4処理(ステップS2711)、拍点ポイントジャッジ2−4処理(ステップS2719)、拍点ポイントジャッジ1−4処理(ステップS2726)は、上述した拍点ポイントジャッジ4−4処理(図28参照)と同様である。また、拍点ポイントジャッジ3−3処理(ステップS2713)、拍点ポイントジャッジ2−3処理(ステップS2721)、拍点ポイントジャッジ1−3処理(ステップS2728)は、上述した拍点ポイントジャッジ4−3処理(図36参照)と同様である。また、拍点ポイントジャッジ3−2処理(ステップS2715)、拍点ポイントジャッジ2−2処理(ステップS2723)、拍点ポイントジャッジ1−2処理(ステップS2730)は、上述した拍点ポイントジャッジ4−2処理(図37参照)と同様である。
なお、CPU21は、拍点ポイントジャッジ4−1処理(ステップS2708)、拍点ポイントジャッジ3−1処理(ステップS2716)、拍点ポイントジャッジ2−1処理(ステップS2724)、モノの拍点ポイントジャッジ処理(ステップS2731)を実行する場合には、処理を図8ステップS803に移し、モノ用の拍点ポイントジャッジを行う。
図25に戻って、ステップS2506では、CPU21は、コード確定フラグがONであるか否かを判断する。この判断がYESならば、CPU21は、コード名判定処理(ポリ)を終了する。NOならば、CPU21は、コード決定処理(図38参照)を行い、コード名判定処理(ポリ)を終了する。
図38を参照して、コード決定処理について説明する。CPU21は、3音フラグまたは4音フラグはONであるか否かを判断する(ステップS3801)。この判断がYESの場合、CPU21は、処理をステップS3802に移し、4音/3音Polyテーブル参照処理を行い、コード決定処理を終了する。ステップS3801での判断がNOの場合には、処理をステップS3803に移し、2音Polyテーブル参照処理を行い、コード決定処理を終了する。
図39を参照して、4音/3音Polyテーブル参照処理について説明する。CPU21は、ステップS3901で現在音高CMが4音であるかどうかを判断し、4音であればステップS3902へ、4音でない場合には3音なのでステップS3903に処理を移す。ステップS3902とステップS3903では、Poly状態(CMが4音であるか3音であるか)に応じて図46に示す4音および3音用テーブルの該当部分を参照する。
例えば、現在音高CMが4音であって、その構成音が、「C、E、G、B」の場合、図46の4音および3音用テーブルの「3音or4音」欄から4であるコードを検索し、コード構成音(CT)が「C、E、G、B」であるコードは、4音および3音用テーブルより、IM7であると決定され、コードの機能はトニックと決定される。同様に、現在音高CMが3音であって、その構成音が、「E、G♯(A♭)、B」の場合、図46の4音および3音用テーブルの「3音or4音」欄から3であるコードを検索し、コード構成音(CT)が「E、G♯(A♭)、B」であるコードは、4音および3音用テーブルより、IIIMajであると決定され、コードの機能はドミナントと決定される。
ステップS3904では、CPU21は、ステップS3902または3903でマッチしたか(コードが決定されたか)否かを判断し、マッチした場合、処理をステップS3905に移し、決定したコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、4音/3音Polyテーブル参照処理を終了する。マッチしない場合、処理をステップS3906に移す。
ステップS3906では、CPU21は、他の調でコードジャッジが成立するか否かを判断する。具体的には、調性外コードジャッジテーブル(図示せず)を参照し、ハ長調またはイ短調以外の調で、コードジャッジが成立するか否かを判断する。この判断がYESの場合、CPU21は、ステップS3907に処理を移し、成立したコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、Modulation(転調)フラグをインクリメントし、4音/3音Polyテーブル参照処理を終了する。Modulation(転調)フラグをインクリメントしたのは、ステップS3904で最初にマッチしなかったため、調性が異なる可能性があるからである。この調性が異なる和音が、経過的な偶成和音であるのか、転調した結果の和音であるのかの区別がつかないので、Modulation(転調)フラグなどによって判断するようにしている。ステップS3906での判断がNOの場合、CPU21は、ステップS3908において、無判定コードとして現在音高CMをRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、4音/3音Polyテーブル参照処理を終了する。ステップS3908では、具体的には、押鍵された音でとりあえず伴奏パターンの音に割り振って発音するが、このとき、シンコペーション処理(図32参照)のステップS3207で処理した、シンコペーションで延びている音を優先して発音する。
図40を参照して、2音Polyテーブル参照処理について説明する。CPU21は、ステップS4001で、コード判定のために必要な情報を読み込む。例えば、直前のコード機能を読み込み、現在音高CMの2音のうちの低い音をベース音と決定し、直前拍の最高音(PMAX)と現在拍の最高音(CMAX)を決定する。ステップS4002では、CPU21は、図47に示す2音コード用Available Chord Table&無判定コードテーブル(以下、「2音用テーブル」とする)の該当部分を参照する。
2音用テーブルでは、現在音高CMの2音を、ベース音と現在拍の最高音(CMAX)とに分類し、ベース音、直前拍の最高音(PMAX)と現在拍の最高音(CMAX)とのシーケンス、および、直前のコードの機能によって、コードを決定できるようにしている。例えば、ベース音がC、PMAXがC、CMAXがD、直前のコード機能がサブドミナント(SU)の場合、IIm7と決定される。
ステップS4003で、CPU21は、ステップS4002においてマッチしたかどうかを判断して、マッチしたと判断されれば、ステップS4004に処理を移し、決定したコード名をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、2音Polyテーブル参照処理を終了する。マッチしたと判断されない場合には、CPU21は、ステップS4005に処理を移し、直前のコード(PreCH)に対して現在音高CMの2音のいずれかがOther Tone(OT)である場合には、ステップS4006に処理を移し、Modulation(転調)フラグをインクリメントし、現在音高CMの2音をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、2音Polyテーブル参照処理を終了する。ステップS4005でOTでない場合には、CPU21は、処理をステップS4007に移し、転調しない無判定コードとして現在音高CMの2音をRAM23の所定の領域に格納するとともに、その発音時刻をRAM23の所定の領域に格納して、2音Polyテーブル参照処理を終了する。
コード名判定処理(図3のステップS304)が終了すると、CPU21は、自動伴奏処理を実行する(ステップS305)。図48は、本実施の形態にかかる自動伴奏処理の例を示すフローチャートである。まず、CPU21は、電子楽器10が自動伴奏モードの下で動作しているかを判断する(ステップS4801)。ステップS4801でYesと判断された場合には、CPU21のタイマ(図示せず)を参照して、現在時刻が、自動伴奏データ中、メロディ音のデータについてのイベントの実行タイミングに達しているかを判断する(ステップS4802)。
本実施形態においては、自動伴奏データには、3つの種類の楽音、すなわち、メロディ音(オブリガート音を含む)、コード音、リズム音のデータが含まれる。メロディ音のデータおよびコード音のデータは、発音すべき楽音ごとに、その音高、発音タイミングおよび発音時間を含む。また、リズム音のデータは、発音すべき楽音(リズム音)ごとに、その発音タイミングを含む。
ステップS4802でYesと判断された場合には、CPU21は、メロディ発音・消音処理を実行する(ステップS4803)。メロディ発音・消音処理においては、処理にかかるイベントがノートオンイベントであるかを判断する。ノートオンイベントであることは、現在時刻が、上記メロディ音のデータにおける所定の楽音の発音タイミングとほぼ一致することで判断できる。その一方、ノートオフイベントであることは、現在時刻が、当該楽音の発音タイミングに発音時間を加えた時刻とほぼ一致することで判断できる。
処理にかかるイベントがノートオフイベントである場合には、CPU21は、消音処理を実行する。その一方、処理にかかるイベントがノートオンイベントであれば、メロディ音のデータにしたがった発音処理を実行する。
次いで、CPU21は、CPU21のタイマ(図示せず)を参照して、現在時刻が、自動伴奏データ中、コード音のデータについてのイベントの実行タイミングに達しているかを判断する(ステップS4804)。ステップS4804においてYesと判断された場合には、CPU21は、コード発音・消音処理を実行する(ステップS4805)。コード音発音・消音処理においては、発音タイミングに達したコード音について発音処理を実行し、その一方、消音タイミングに達したコード音については消音処理を実行する。
その後CPU21は、現在時刻が、自動伴奏データ中、リズムのデータについてのイベントの実行タイミングに達しているかを判断する(ステップS4806)。ステップS4806においてYesと判断された場合には、CPU21は、リズム音発音処理を実行する(ステップS4807)。リズム音発音処理においては、発音タイミングに達したリズム音についてノートオンイベントを生成する。
自動伴奏処理(図3のステップS305)が終了すると、CPU21は、音源発音処理を実行する(ステップS306)。音源発音処理において、CPU21は、生成されたノートオンイベントに基づいて、発音すべき楽音の音色および音高を示すデータを音源部26に与え、或いは、消音すべき楽音の音色および音高を示すデータを音源部26に与える。音源部26は、音色、音高、音長等を示すデータにしたがって、ROM22の波形データを読み出して、所定の楽音データを生成する。これにより、スピーカ28から所定の楽音が発生する。また、CPU21は、ノートオフイベントに基づいて、音源26にノートオフイベントが示す音高の消音を指示する。
音源発音処理(ステップS306)が終了すると、CPU21は、その他の処理(例えば、表示部15への画像表示、LED(図示せず)の点灯、消灯など:ステップS307)を実行して、ステップS302に戻る。
本実施の形態においては、入力可能な楽音数毎に設けられ、入力される音高に基づいたコードデータを出力する、複数のコード判定テーブル(4音および3音用テーブル、および、2音用テーブル)を備えており、コード名判定処理(ポリ)(図5のステップS508)において、CPU21は、鍵盤11の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報、特に拍の情報に基づいて、現在の拍の拍頭において同時操作された鍵盤11に対応する現在音高CM及びその数と、1つ前の拍である直前拍の拍頭において同時操作された鍵盤11に対応する先行音高PM及びその数と、を抽出する。また、CPU21は、抽出された現在音高CM及び先行音高PM、当該先行音高PMの数から現在音高CMの数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応するコード判定テーブルを選択し、選択されたコード判定テーブルから確定された音高情報に基づくコードデータを出力させる。
したがって、音高群の現在の拍およびその遷移に基づいて、適切にコード名を決定することができる。
また、本実施の形態においては、CPU21は、自動伴奏データのテンポに応じて、同時(ポリ)操作された鍵盤11の検出周期を可変する。
したがって、テンポが速い(例えば一分間に80拍以上)場合には、32分音符以下の音符が複数あることでポリと判定し、テンポが遅い(例えば一分間に80拍以下)場合には、64分音符以下の音符が複数あることでポリと判定することができるので、自動伴奏データのテンポが変わっても、モノかポリの判定を適切に行うことができる。
また、本実施の形態においては、CPU21は、ステップS2602で抽出された楽音数が所定数(5)以上でかつ、当該音高の中で同一音名の楽音がある場合、高いほうの楽音を削除する。
したがって、コードの決定に寄与する度合いの高い低音高を残すことができるので、適切にコードを決定できる。
また、本実施の形態においては、CPU21は、ステップS2602で抽出された楽音数が所定数(5)以上でかつ、操作のベロシテイの大きい鍵盤11に対応する楽音4個と操作時間の長い鍵盤11に対応する楽音4個とが同一の場合は、当該4個の楽音を抽出された音高とする。
したがって、コードの決定に寄与する度合いの高い音高でコードを決定することができる。
また、本実施の形態においては、CPU21は、ステップS2602で抽出された楽音数が所定数(5)以上でかつ、低い順から4個の楽音それぞれが短三度以上の音程を有している場合は、当該4個の楽音を抽出された音高とする。
したがって、コードの決定に寄与する度合いの高い低音音高でコードを決定することができる。
また、本実施の形態においては、CPU21は、ステップS2602で抽出された楽音数が所定数(5)以上でかつ、低い順から3個の楽音それぞれが短三度以上の音程を有している場合は、当該3個の楽音を抽出された音高とする。
したがって、低い順から3個目と4個目との音程が短三度未満である場合であっても、コードの決定に寄与する度合いの高い低音音高でコードを決定することができる。
また、本実施の形態においては、CPU21は、ステップS2602で抽出された楽音数が所定数(5)以上でかつ、当該楽音の中で前拍でのコードの構成音と3個以上共通する楽音が存在する場合は、当該3個の楽音を抽出された音高とする。
したがって、低い順から3個の楽音それぞれが短三度以上の音程を有していない場合であっても、より適切な音高でコードを決定することができる。
また、本実施の形態においては、CPU21は、ステップS2602で抽出された楽音数が所定数(5)以上の場合、低い順から短三度以上の音程を有している3個の楽音を抽出された楽音とする。
したがって、コードの決定に寄与する度合いの高い低音音高に基づいて、コードを決定することができる。
また、本実施の形態においては、CPU21は、拍点ポイントジャッジ4−4処理などにおいて、現在の拍が1拍もしくは3拍目でかつ、自動伴奏データにより生成されたベース音の発音が現拍より前から維持され、さらに直前の拍のベース音と同一である場合、直前拍及び現拍において抽出された音高の種類が同一か否か判定し、同一と判定された場合は直前拍で確定したコードを現拍のコードとする。
したがって、弱拍でのベース音が同一音で強拍まで延びた場合に、ベース以外の音群も現拍と前拍とで同一であれば、前拍のコードを変化させないで維持することができる。
また、本実施の形態においては、CPU21は、拍点ポイントジャッジ4−4処理などにおいて、現在の拍が2拍もしくは4拍目でかつ、当該拍で抽出された音高の中の最高音が直前拍の最高音と異なり、さらに当該現在の拍の最高音が、直前拍で確定したコードのコード音高あるいはスケール音高でかつ直前拍の最高音との差が長2度以内の場合は、直前拍で確定したコードを現拍のコードとする。
したがって、弱拍で順次進行をした場合に、直前拍で確定したコードを維持することができるので、適切にコードを決定できる。
さらに、本実施の形態においては、コード名判定処理(モノ)(図5のステップS507)において、CPU21は、鍵盤11の一連の操作において進行するメロディシーケンスにおいて、実行中の自動伴奏データの進行を規定する時間情報、特に拍の情報に基づいて、現在の拍の拍頭において押鍵された鍵に関連する現在メロディ音CMと、1つ前の拍である前拍の拍頭において押鍵された鍵に関する先行メロディ音PMとを決定する。また、CPU21は、決定された現在メロディ音情報と、先行メロディ音情報と、前拍におけるコード名である先行コード名PreCHとに基づき、現在コード名CurCHを決定するコード名決定処理(図8のステップS809)を実行する。また、メロディ音の決定に際して、CPU21は、現在の拍が、小節において何番目の拍であるかに基づいて、現在メロディ音CMおよび先行メロディ音PMを決定する。
すなわち、本実施の形態によれば、押鍵された拍の位置(時間的な位置)を考慮して現在メロディ音CMおよび先行メロディ音PMが決定され、決定されたメロディ音のシーケンスと、先行コード名PreCHに基づいて現在コード名CurCHが決定される。
また、本実施の形態においては、CPU21は、拍子が4拍子である場合に、現在の拍が、1拍目或いは3拍目であるか、或いは、他の拍であるかに基づいて、現在メロディ音情報および先行メロディ音情報を決定する。すなわち、強拍(1拍目、3拍目)と、弱拍(2拍目、4拍目)に基づいて、現在メロディ音CMおよび先行メロディ音PMを決定することで、拍の重みを考慮することが可能となる。
また、本実施の形態において、CPU21は、前拍の先頭以降の押鍵が、現在の拍まで延びている場合に、シンコペーションであると判断し、現在メロディ音CMを、現在の拍まで延びている押鍵に関するものに決定する。すなわち、拍頭の押鍵でなくとも、シンコペーションを構成する場合には、これを拍頭の押鍵と同様に取り扱うことができる。
また、CPU21は、第1のドミナントモーション判定処理(図13)において、先行コード名PreCHがドミナントコードを示し、かつ、先行メロディ音PMから現在メロディ音CMが、予め定められた、ドミナントコードの構成音からトニックコードの構成音への移行を示す場合に、現在コード名CurCHとして、トニックに相当するコード名を与える。このように、メロディシーケンスからドミナントモーションが明確に示される場合には、現在コード名CurCHをトニックとして、コード進行における終止を形成させる。
また、CPU21は、第2のドミナントモーション判定処理(図20)において、先行メロディ音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]
少なくとも、コード名、および、拍を含む時間情報に基づいたコード構成音の発音タイミング、を含む自動伴奏データを記憶する記憶手段と、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御手段と、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定手段と、を備えた自動伴奏装置であって、
前記コード判定手段が、
入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、1つ前の拍である直前拍の拍頭において同時操作された演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出手段と、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択手段と、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力手段と、
を有する自動伴奏装置。
[付記2]
前記抽出手段は、前記自動伴奏データの進行の速度に応じて、同時操作された演奏操作子の検出周期を可変する付記1に記載の自動伴奏装置。
[付記3]
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、当該音高情報の中で同一音名の音高情報がある場合、高いほうの音高情報を削除する付記1に記載の自動伴奏装置。
[付記4]
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、操作のベロシテイの大きい演奏操作子に対応する音高情報4個と操作時間の長い前記演奏操作子に対応する音高情報4個とが同一の場合は、当該4個の音高情報を抽出された音高情報とする付記1に記載の自動伴奏装置。
[付記5]
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、低い順から4個の音高情報それぞれが短三度以上の音程を有している場合は、当該4個の音高情報を抽出された音高情報とする付記1に記載の自動伴奏装置。
[付記6]
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、低い順から3個の音高情報それぞれが短三度以上の音程を有している場合は、当該3個の音高情報を抽出された音高情報とする付記1に記載の自動伴奏装置。
[付記7]
前記抽出手段は、抽出された音高情報数が所定数以上でかつ、当該音高情報の中で前記直前拍でのコードの構成音の音高と3個以上共通する音高情報が存在する場合は、当該3個の音高情報を抽出された音高情報とする付記1に記載の自動伴奏装置。
[付記8]
前記抽出手段は、抽出された音高情報数が所定数以上の場合、低い順から短三度以上の音程を有している3個の音高情報を抽出された音高情報とする付記1に記載の自動伴奏装置。
[付記9]
前記選択手段は、現在の拍が1拍もしくは3拍目でかつ、前記自動伴奏データにより生成されたベース音の発音が現拍より前から維持され、さらに直前の拍のベース音と同一である場合、直前拍及び現拍において抽出された音高情報の種類が同一か否か判定し、同一と判定された場合は直前拍で確定したコードを現拍のコードとし、同一でないと判定された場合は前記抽出された音高情報及びその数を前記コード判定テーブルに入力すべき音高情報及びその数として確定する付記1に記載の自動伴奏装置。
[付記10]
前記選択手段は、現在の拍が2拍もしくは4拍目でかつ、当該拍で抽出された音高情報の中の最高音高情報が直前拍の最高音高情報と異なり、さらに当該現在の拍の最高音高情報が、直前拍で確定したコードのコード音高あるいはスケール音高でかつ直前拍の最高音高情報との差が長2度以内の場合は、直前拍で確定したコードを現拍のコードとする付記1に記載の自動伴奏装置。
[付記11]
少なくとも、コード名、および、拍を含む時間情報に基づいたコード構成音の発音タイミング、を含む自動伴奏データと、入力可能な音高情報数毎に設けられ、入力される音高情報に基づいたコードデータを出力する、複数のコード判定テーブルと、を記憶する記憶手段を備えたコンピュータに、
演奏操作子の操作に基づいて、所定の楽音の楽音データを生成する楽音データ生成手段を制御する楽音データ制御ステップと、
前記演奏操作子の操作に基づいた、前記自動伴奏データによる楽音を生成するためのコードを判定するコード判定ステップと、を実行させ、
前記コード判定ステップが、
前記演奏操作子の一連の操作に基づき、実行中の自動伴奏データの進行を規定する時間情報に基づいて、現在の拍の拍頭において同時操作された演奏操作子に対応する現在音高情報及びその数と、1つ前の拍である直前拍の拍頭において同時操作された演奏操作子に対応する先行音高情報及びその数と、を抽出する抽出ステップと、
前記抽出された現在音高情報及び先行音高情報、当該先行音高情報の数から現在音高情報の数への変移、及び前記現在の拍が小節において何番目の拍であるかに基づいて、前記コード判定テーブルに入力すべき音高情報及びその数を確定するとともに、当該数に対応する前記コード判定テーブルを選択する選択ステップと、
当該選択されたコード判定テーブルから前記確定された音高情報に基づくコードデータを出力させる出力ステップと、
を有する自動伴奏プログラム。