以下、添付図面を参照して、本発明の実施の形態について説明する。図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から読み出されたプログラムや、処理の過程で生じたデータを記憶する。さらにRAM23は、鍵盤11の鍵の押鍵・離鍵に伴いCPU21によって生成される、メロディ履歴データを記憶する。なお、本実施の形態において、自動伴奏パターンは、メロディ音およびオブリガート音を含むメロディ自動伴奏パターン、コード名ごとの構成音を含むコード自動伴奏パターン、並びに、ドラム音を含むリズムパターンを有する。たとえば、メロディ自動伴奏パターンのデータのレコードは、楽音の音色、音高、発音タイミング(発音時刻)、音長などを含む。コード自動伴奏パターンのデータのレコードは、上記情報に加えて、コード構成音を示すデータを含む。また、リズムパターンのデータは、楽音の音色、発音タイミングを含む。
サウンドシステム24は、音源部26、オーディオ回路27およびスピーカ28を有する。音源部26は、たとえば、押鍵された鍵についての情報或いは自動伴奏パターンについての情報をCPU21から受信すると、ROM22の波形データエリアから所定の波形データを読み出して、所定の音高の楽音データを生成して出力する。また、音源部26は、波形データ、特に、スネアドラム、バスドラム、シンバルなど打楽器の音色の波形データを、そのまま楽音データとして出力することもできる。オーディオ回路27は、楽音データをD/A変換して増幅する。これによりスピーカ28から音響信号が出力される。
さらに、本発明の実施の形態にかかる電子楽器10は、楽曲データベース30を備えている。この楽曲データベース30は、後述するように、入力されたメロディの履歴とデータベースの各楽曲との比較を行い、適合する曲のコード(和音)を参照するための辞書として用いられるデータベースである。図12は、この楽曲データベース30の実際のデータ構造の一例を示す図である。
図12は、種々の楽曲のデータベースのうち「C−D−E」すなわち、「ド−レ−ミ」で始まる曲のうちのいくつかの曲の冒頭部分を例示したものである。また、図12に例示した各楽曲のデータに対応する実際の曲の楽譜を図13に示してある。なお、実際にCPU21が読み込んで各種処理に使用する楽曲データベースとしては、例えばXML(Extensible Markup Language)ファイル形式などで、必要に応じたタグやヘッダなどを付して構成することにより、CPU21に認識可能なものとなっているものとする。
図12に示すとおり、楽曲データベースではまず、各楽曲ごとに、曲番号と曲のタイトルが記録されている(図12の曲番号の欄、タイトルの欄)。また、各楽曲の「Key/Beat」欄の一番上の行に示すように、その曲が何調で記録されているか(Key)、および、何拍子であるか(Beat)が記録されている。例えば、曲番号1の「こぎつね」では「C/4」と記録されており、この曲がハ長調−4拍子で記録されていることを表している。同様に、曲番号6の「みなと」では「C/3」と記録されており、この曲がハ長調−3拍子で記録されていることを表している。
なお、本図12においては、すべての楽曲がハ長調で記録されている場合の例を示しているが、ハ長調以外で統一されていても、また、曲ごとに別々の調でデータベースを持つように構成しても勿論差し支えない。すべての曲を同じ調でデータベース化してある場合には、後述するコード付けアルゴリズムや調判定アルゴリズムによって調性の判別ができた場合に、その判別された、ユーザが弾いているメロディの推定調性と、データベースで用いられている調性(図12ではハ調)との音程(半音数)等に基づいて、楽曲データベースに登録されているすべての楽曲を一様に当該判別された調性に移調すれば処理を行うことができ、処理を簡潔にすることができる。一方、曲ごとに別々の調、例えばそれぞれの曲の原曲の調でデータベース登録をしておくことも可能である。
さらに、図12の各楽曲ごとのKey/Beat欄の右(以下、「Note欄」という)には、各楽曲のメロディの音高、前の音との音程、開始音とのST(Step Time)比率、そのメロディに対するコード(和音)が記録されている。
再度、曲番号1の「こぎつね」を例にとって説明すると、この曲のメロディは「ドレミファソソソ」となっているので、図12の曲番号1のNote欄の最上行には、メロディの音高として順に「CDEFGGG」のデータが記録されている。
また、図12の各楽曲のNote欄の2行目には、開始音/直前音との音程が記録されている。すなわち、メロディの最初の音については、開始音(図12の例では全てC)の音高がそのまま記録され、メロディの2音目以降は、直前の音との音程(半音数)が記録されている。例えば、曲番号1の「こぎつね」の場合では、メロディの第1音については「C」がそのまま記録され、つづくメロディの第2音目の「D」については、直前のメロディ音(第1音)である「C」から半音2個上の音であるので、「2」と記録されている。同様に、メロディ音第3音目の「E」については、第2音「D」との音程(半音数)「2」が記録され、また、メロディ音第4音目の「F」については、第3音「E」との音程(半音数)「1」が記録されている。
なお、曲番号2以降の一部で表わされているように、メロディ音が直前の音より下降した場合には、この直前音との音程はマイナスの値で記録されている(例えば、曲番号2の「すずめのうた」の4音目や、曲番号7の「はと」の5音目、6音目など)。
さらに、図12の各楽曲のNote欄の3行目には、「開始音とのST比率」が記録されている。ここでSTとはStep Timeの略であり、ある音の発音タイミングから次の音の発音タイミングまでの長さを表す数値である。従って、この楽曲データベースの「開始音とのST比率」には、メロディの開始音(第1音)のSTと、各音符のSTとの比率を表すデータが記録されている。
ここで、図12では、開始音のSTと同じ長さの音符について、「開始音とのST比率」が1となるように記録されている。従って、例えば、曲番号1の「こぎつね」では、第2音から第6音までの全ての音符について、開始音と同じ長さの8分音符(休符なし)であるので、これらの音符について、「開始音とのST比率」は1と記録されている。また、曲番号1の「こぎつね」の第7音(4分音符のG)については、開始音(8分音符)の倍の長さであるので、「開始音とのST比率」は2と記録されている。さらに、曲番号8の「とんび」では、開始音が付点4分音符であるのに対して、第2音から第6音は、その3分の1の長さの8分音符であるので、これらの音符に対して「開始音とのST比率」が「0.33」と記録されている。
さらに図12の各楽曲のNote欄の4行目には、コード欄があって、コードネーム(和音記号)が記録されている。このコード欄で、例えば「C」と表されているものはいわゆる「C」のコードである「ドミソ」の和音を表している。また「G7」と表されているものは、いわゆる「G7」なるセブンスコードである「ソシレファ」の和音を表している。また、コード欄が「→」となっているものは、前の和音と同じ和音の意味であり、前の和音をそのまま継続して変更せずに維持するということを意味している。このコード名と実際の音との対応は、例えば、ROM内等に記憶されている、図示しないコード名対応テーブルを参照することにより対応づけられている。
このコード欄は、後述するコード選択処理で、伴奏としてメロディに付ける和音を決定する際に参照されるものである。あるメロディに付けることが可能な和音は必ずしも一通りではなく、アレンジや演奏者の個性・感性等によっても異なるものであるが、ここでは、自動伴奏における機械による自動コード判別(コード付け)の補完を行うという観点から、「少なくとも、この和音を付けておけば、間違いとはいえない」といった和音のテーブルが用意されていることが望ましい。
なお、この楽曲のデータベースのデータ形式については、必ずしもここに記載された形式に限られず、例えば、MIDI形式のデータに基づいて、メロディの各音符の長さから開始音とのST比率を求め、またメロディ音の前後の音符の音高を比較して、直前音との音程を、計算処理によって求めることとしてもよい。さらに、コード部分は、コードデータを持っていてもよいし、メロディと別トラックにコードのデータをコード記号若しくはある和音を表す複数の音符が記録されているような形のデータでも実行可能である。
本実施の形態にかかる電子楽器10は、通常モードの下においては、鍵盤11の鍵の押鍵に基づいて楽音を発生する。その一方、電子楽器10は、例えば図1に示された各種スイッチ12、13等のうちの一つである自動伴奏スイッチが操作されることにより、自動伴奏モードとなる。自動伴奏モードの下では、鍵の押鍵により、その鍵の音高の楽音が発生する。また、押鍵された鍵の情報に基づいてコード名が決定され、そのコード名のコード構成音を含む自動伴奏パターンにしたがった楽音が発生する。なお、自動伴奏パターンは、ピアノやギター、ベースなど音高の変化を伴うメロディ自動伴奏パターン、コード自動伴奏パターンと、バスドラム、スネアドラム、シンバルなど音高の変化を伴わないリズムパターンとを含むことができる。以下、電子楽器10が、自動伴奏モードの下で動作する場合について説明する。
以下、本実施の形態にかかる電子楽器10において実行される処理について詳細に説明する。図3は、本実施の形態にかかる電子楽器において実行されるメインフローの例を示すフローチャートである。なお、図示しないが、メインフローの実行中に、所定の時間間隔で、割込カウンタのカウンタ値をインクリメントするタイマインクリメント処理も実行される。
図3に示すように、電子楽器10のCPU21は、電子楽器10の電源が投入されると、RAM23中のデータや、表示部15の画像のクリアクリアを含むイニシャル処理(初期化処理)を実行する(ステップS301)。イニシャル処理が終了すると、CPU21は、スイッチ群25を構成するスイッチのそれぞれの操作を検出し、検出された操作にしたがった処理を実行するスイッチ処理を実行する(ステップS302)。
たとえば、スイッチ処理(ステップS302)においては、音色指定スイッチや、自動伴奏パターンの種別の指定スイッチ、自動伴奏パターンのオン・オフの指定スイッチなど、種々のスイッチの操作が検出される。自動伴奏パターンがオンとなったときには、CPU21は、演奏モードを、自動伴奏モードに切り換える。演奏モードを示すデータは、RAM23の所定の領域に指定される。音色や自動伴奏パターンの種別を示すデータも、同様に、RAM23の所定の領域に格納される。
次いで、CPU21は、鍵盤処理を実行する(ステップS303)。図4は、本実施の形態にかかる鍵盤処理の例をより詳細に示すフローチャートである。鍵盤処理において、まずCPU21は、鍵盤11の鍵を走査する(ステップS401)。鍵の走査結果であるイベント(鍵オン或いはオフ)は、そのイベントが生じた時刻の情報とともに、RAM23に一時的に記憶される。CPU21は、RAM23に記憶された鍵の走査結果を参照して、ある鍵についてイベントが有るか否かを判断する(ステップ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)。また、このメロディ履歴を格納するにあたり、最初に入力されたメロディ音の音長(ST:Step Time)と、今回入力されたメロディ音の音長との比率(開始音とのST比率)を算出して、メロディ履歴情報に付加して記憶する。
CPU21は、全ての鍵イベントについて処理が終了したかを判断する(ステップS408)。ステップS408でNoと判断された場合には、ステップS402に戻る。全ての鍵イベントについて処理が終了したら(ステップS408:Yes)、図4の鍵盤処理を終了する。
鍵盤処理(図3のステップ303)が終了すると、CPU21は、曲候補検索処理を実行する(ステップS304)。図5は、本実施の形態にかかる曲候補検索処理の例をより詳細に示すフローチャートである。
曲候補検索処理において、まずCPU21は、先に図4を用いて説明した鍵盤処理で検出された押鍵・離鍵処理によりメロディの入力があったか否かを判断する(ステップS501)。メロディ入力がなかった場合には(ステップS501:No)、図5の曲候補検索処理を終了する。
メロディ入力があった場合には(ステップS501:Yes)、RAM23の所定のメロディ履歴保存エリアに、入力されたメロディをメロディ履歴として、既に記録されているメロディ履歴に追加して記録する(ステップS502)。RAM23に記録するメロディ履歴のデータ構造の一例を図14に示す。
図14の例では、上述した楽曲のデータベース(図12)のデータ構造に合わせて、メロディの入力に対して、入力音高、直前音(開始音)との音程、さらに、開始音とのST比率を算出して格納する。この各データの具体的な意義および算出方法については、図12において説明したものと同様である。勿論図12の説明で述べたのと同様、例えば図12のデータ構造を別のものとするのに合わせて、他のデータ構造で記憶することも可能である。
なお、このステップS502でのメロディ履歴の記録に際して、例えば、軽微なミスタッチ等を除去するために、入力音長の極めて短い音については、メロディ履歴の記録音から除外することも可能である。例えば、入力されたメロディのうち、押鍵時間(デュレーション)が所定のしきい値以下の音については、メロディ履歴の記録を行わず、また、ステップS503以下の処理を行わずに、曲候補検索処理からリターンするといった処理を行っても良い。
ステップS502でのメロディ履歴の記録が終わると、CPU21は入力されたメロディ音が最初のメロディ音であるかどうかを判定する(ステップS503)。入力されたメロディ音が最初のメロディ音だった場合は(ステップS503:Yes)、Fリストアップの処理を行う(ステップS504)。このFリストアップの処理は図6に詳細が示してあるので、図6を参照して説明する。
図6でリストアップするFリストとは、上述の楽曲データベース(図12)から、入力されたメロディ音のうち第1音めの音が一致するものを検索して、リストアップしたものである。
第1音めのみで楽曲と比較するため、必ずしも一つの楽曲に絞り込めるわけではなく、またユーザが移調して弾いている場合等も考慮すれば、必ずしも正確な絞り込みが行えるとは限らないが、例えば、ユーザがメロディを弾く場合に原曲キーで弾くことが多いと仮定すれば、原曲キーで記録された楽曲データベースを、入力メロディ音の第1音によって検索することで、ある程度の楽曲の絞り込みは可能となる。
図6では、CPU21はまず、変数FNに開始音、すなわち入力されたメロディの第1音めの情報を取得する(ステップS601)。次にCPU21は、メロディ開始音FNと、楽曲データベースの開始音(各楽曲のメロディの開始音)として登録されている音が一致する楽曲を検索する(ステップS602)。
そして、CPU21は、ステップS602で検索された各楽曲をFリストとしてリストアップする(ステップS603)。この際、該当する楽曲が複数あった場合は、それらを全てリストアップすることとしてもよいし、ランダムに選択した所定数の楽曲をリストアップすることとしてもよい。また、該当する楽曲が無かった場合は、該当曲無しとのフラグ等を返すようにすることとしても良い。
このようにして作成される、Fリストの例を図15に示す。ここでは、図14に示すメロディ入力の第1音「C」が入力されたときに、図12および図13に示す楽曲データベースを検索して得られたFリストの例を示している。この場合、メロディ入力の第1音「C」は、楽曲データベースの曲番号1から9の全楽曲と一致するので、曲番号1から9の全楽曲がFリストにリストアップされている。
なお、楽曲につけられた順位は、あくまで一例として、楽曲データベースを検索して該当すると判断された楽曲を順にリストに格納した場合を示している。ここでは、楽曲データベースの1から順にリストに格納され、そのまま順位が付けられた場合を示している。もっとも、これ以外にも、これらの複数の楽曲について、全て同じ順位(1位)として記録する事も可能である。
このようにして図5のステップS504を介して、図6に示した処理によってFリストが作成されると、CPU21は、図5のフローチャートに処理を戻し、ステップS511でFリストを総合リストとして(ステップS511)、曲候補検索処理を終了する。
一方、ステップS503に戻って、入力されたメロディ音が最初の音でなかった場合には(ステップS503:No)、入力されているメロディに対するKey(調性)が確定されているか否かを判定する(ステップS505)。
このKey(調性)が確定しているか否かは、後述する図3のステップS305におけるキー(調性)判別処理において、「確定キー」としてキーが確定されているか否かによって判断することが可能である。このキー(調性)判別処理の詳細については後述する。
ステップS505において、Key(調性)が確定していると判定された場合には(ステップS505:Yes)、CPU21は、ステップS506へ処理を進め、Kリストのリストアップを行う。このKリストアップの処理は図7に詳細が示してあるので、図7を参照して説明する。
図7でリストアップするKリストとは、入力されているメロディのKey(調性)が確定しているとの判定結果に基づき、上述の楽曲データベース(図12)に記録されている各楽曲を、上記確定していると判定されたKey(調性)に移調させてから、入力メロディ履歴との比較を行ってリストアップを行うものである。
このような処理を行うことで、ユーザがメロディを任意の調に移調して弾いているような場合でも、楽曲データベースに登録されている各楽曲のキー(調性)にかかわらず、迅速に楽曲を検索・特定して正しいコード付けが行えるようになる。
図7では、CPU21はまず、変数Keyに、確定したと判定された入力メロディの調の情報を取得する(ステップS701)。次にCPU21は、上述の楽曲データベース(図12)に登録されている各楽曲のキー(調性)と、変数Keyに取得したメロディの確定調とに基づいて、楽曲と入力メロディの比較を行う(ステップS702)。
この処理をさらに具体的に説明する。例えば、変数Keyに取得された入力メロディの確定調がF(ヘ長調)であった場合を考える。今、仮に曲番号4の「アーユースリーピング」と比較を行うとすると、この曲の登録されているKeyは「C」すなわちハ長調であるので、Key「F」とKey「C」の間の半音数を算出する。これは周知の音楽理論に基づいて「半音数=5」と算出できるので、曲番号4「アーユースリーピング」の登録されているメロディ(図12の曲番号4のNote欄最上行)の各音に、半音数+5の操作を行って、Fキーに移調を行う。上記の例の場合は、元のメロディ「CDECCDE」であったものが、半音数+5の移調操作によって「FGAFFGA」となる。
そして、移調された楽曲データベースのメロディ音の各音と、入力されているメロディ履歴の各音とが比較される。比較された結果、所定の条件を満たす楽曲がステップS702における検索結果としてピックアップされる。
ここで、ピックアップされる条件としては、種々のものが考えられる。例えば、最初の音から最新の音までの全ての音高が、入力されたメロディ履歴と合っている楽曲データベースの楽曲をピックアップすることが可能である。あるいは、入力されたメロディ履歴の過去の音から現在の音まで、連続して合っている音数が多い楽曲から順に、所定数の楽曲をピックアップすることが可能である。さらに、最初の音から現在の音までで、音を比較して、合っている音数(確率)の高いものから順に所定数の楽曲をピックアップするなどの方法も考えられる。
続いてCPU21は、ステップS702での検索の結果、ピックアップされた曲があったか否かを判断する(ステップS703)。そして、ピックアップされた曲がなかった場合は、このKリストのリストアップ処理を終了する(ステップS703:No)。
一方、ピックアップされた曲が存在していた場合は(ステップS703:Yes)、入力されたメロディ履歴の各音について、メロディ開始音(最初の音)とのST比率を算出して、ピックアップされた各曲について、楽曲データベース上に記録されている「開始音とのST比率」のデータと比較を行い、「正解率」を算出する(ステップS704)。
ステップS704における「正解率の算出」についても、種々の方法が可能である。
例えば、入力されたメロディ履歴の各音と、メロディ開始音とのST比率を求め、この入力メロディのST比率と、楽曲データベース上で登録されているST比率との差に基づいて各音の「正解率」を決定して、これらを加え合わせる(平均する)方法などが考えられる。これはすなわち、例えば曲番号4「アーユースリーピング」の2音目の「D」について、楽曲データベース上は開始音と等しい長さとしてST比率=「1」が記録されているが、これに反して、実際に演奏されたメロディでは、第2音めの音の長さが、メロディ開始音に対して、90%だったり、110%だったりした場合、この第2音めの音に対する正解率を「90点」とする、といった具合である。
上述のようにステップS704では、入力されたメロディ履歴に対して、各楽曲が、どの程度近いか(似ているか)に相当する指標である、「各楽曲の正解率」が算出できる。そして、この「各楽曲の正解率」を参照して、正解率の高いものから順に所定数の楽曲をKリストとしてリストアップし(ステップS705)、このKリストアップの処理を終了する。
このようにして作成される、Kリストの例を図16に示す。
ここでは、図16(A)に示すようなメロディが入力された場合に、図12および図13に示す楽曲データベースを検索して得られたKリストの例を図16(B)に示している。
図16(A)に示すように、メロディ入力は順に「FGAB♭」の4音が入力されている。また、この入力メロディに基づき、確定キーとしてF(ヘ長調)が得られているものとする。ここで、図16(A)に示すメロディ入力は、演奏者が鍵盤11を弾いて入力したメロディと仮定すると、人間の演奏はある程度揺らぎや不正確さを含む場合がある。この点を考慮した例として、図16(A)の例では、第2音めの「G」がやや短めに押鍵されて、開始音とのST比率が1よりやや小さめの0.9となった場合を示している。また第3音めの「A」の音は、やや長めに押鍵されて、開始音とのST比率が1よりやや大きめの1.1となっている場合を示している。
このような入力メロディに対して、図7のKリストアップ処理を行うと、まず、ステップS701で変数Keyに確定した調(キー)、すなわち「F」が記録され、次にステップS702で、図12の楽曲データベースの各曲について、確定キーである「F」に移調させた上で、音高連結が比較される。すなわち、各楽曲データベースの曲のうち、ヘ長調に移調して「FGAB♭」との音高を持つもの、すなわち、ハ長調では第1音から第4音まで、「CDEF」という音高連結を持つ楽曲が検索される。従って、この場合、曲番号1の「こぎつね」と、曲番号3の「かえるのうた」が、音高連結の合う該当曲として抽出される。
該当曲があったため、ステップS703はYesとなり、ステップS704に進み、各該当曲ごとに、ST比率の正解率:Pを計算する。ここでは、楽曲データベースの該当曲のi番目の音符のST値:STdb(i)、と、入力メロディのi番目の音符のST値:STin(i)との値を用いて、以下の式により求めた例を示している。
(1)式に示すように、ここでは、各音のST値について、データベース上の値と入力値との差分の絶対値を、基準とするデータベース上の当該音のST値で除算して比率値とし、これを100分率値として、ここまで入力された音のうち、第2音めから最新の音までの値を平均し、100から減じたものを「正解率」として用いている。
すなわち、図16(A)の入力メロディを曲番号1の「こぎつね」と比較した場合、第2音めについて、ST値の差分値は、0.1であるので、データベース中の当該音のST値(=1)で除算して、0.1となり、100分率化して10となる。同様に、第3音めについても10、第4音めについては0となり、これらを加えると、20点となる。
よってこれらの平均値は、(10+10+0)÷3=約6.7点となり、これを100点から減じて、正解率=93.3点と求められる。
なお、(1)式で、i=2からループ開始しており、第1音めのST値の比率を計算に入れていないのは、ST比率を第1音めを基準として判定しているため、第1音めのST比率は常に100%となるため除外しているものである。
このようにして、音高連結が一致した各曲の正解率が求められたら、ステップS705で、その点数の高い順にKリストをリストアップする。図16の例では、曲番号1の「こぎつね」と曲番号3の「かえるのうた」で、正解率の点数に差が無いため、便宜上、順位を付けて記録した例を示している。このような同点の曲同士の順位付けについては、Fリストにて説明したのと同様の方法で順位を決定することが可能である。
このようにして図5のステップS506を介して、図7に示した処理によってKリストが作成されると、CPU21は、図5のフローチャートに処理を戻し、ステップS510でKリストを総合リストとして(ステップS510)、曲候補検索処理を終了する。
他方、ステップS505で、Key(調性)が確定していないと判定された場合には(ステップS505:No)、CPU21は、ステップS507へ処理を進め、Nリストのリストアップを行う。このNリストアップの処理は図8に詳細が示してあるので、図8を参照して説明する。
図8でリストアップするNリストとは、入力メロディ履歴の音高と、上述の楽曲データベース(図12)に記録されている各楽曲のメロディ音高データ(Note欄最上行データ)との比較を行って、リストアップを行うものである。
図8では、CPU21はまず、入力されたメロディ履歴のデータ(図14)から、入力音高データを音高連結データとして取得する(ステップS801)。図14のような入力の例を考え、仮にいま、メロディの第3音まで入力がなされた場合を仮定すると、このステップS801では、入力メロディの音高連結として、「CDE」というデータが取得される。
続いてCPU21は、この取得された入力メロディの音高連結データと、楽曲データベース(図12)の各楽曲のメロディ音高データ(Note欄最上行データ)とを比較して、音高が一致する楽曲を検索する(ステップS802)。
例えば、上述のように入力メロディが「CDE」である場合に、図12の例の楽曲データベースを検索すると、図12に示されている曲番号1から曲番号9の9曲は、すべて、メロディの音高連結が開始音から順に「CDE」であるので、この場合はステップS802で、図12の9曲全てが検索結果としてピックアップされることとなる。ここでも、最初の音から最新の音まで全ての音高が一致している楽曲をピックアップすることとする以外にも、ステップS702における楽曲ピックアップ方法と同様に、種々の方法での検索が可能である。
続いてCPU21は、ステップS802での検索の結果、ピックアップされた曲があったか否かを判断する(ステップS803)。そして、ピックアップされた曲がなかった場合は、このNリストのリストアップ処理を終了する(ステップS803:No)。
一方、ピックアップされた曲が存在していた場合は(ステップS803:Yes)、入力されたメロディ履歴の各音について、メロディ開始音(最初の音)とのST比率を算出して、ピックアップされた各曲について、楽曲データベース上に記録されている「開始音とのST比率」のデータと比較を行い、「正解率」を算出する(ステップS804)。この正解率の算出の具体的な方法については、ステップS704で説明したのと同様である。
そして、ステップS804において算出された、「各楽曲の正解率」を参照して、正解率の高いものから順に所定数の楽曲をNリストとしてリストアップし(ステップS805)、このNリストアップの処理を終了する。
このようにして作成される、Nリストの例を図17に示す。
ここでは、図17(A)に示すようなメロディが入力された場合に、図12および図13に示す楽曲データベースを検索して得られたNリストの例を図17(B)に示している。
図17(A)に示すように、メロディ入力は順に「CDE」の3音が入力されている。また、図17(A)に示すメロディ入力の例では、CDEの全てが、同じ長さ(ST値)で、第1音とのST比率が1である場合を仮定している。
このような入力メロディに対して、図8のNリストアップ処理を行うと、まず、ステップS801で図17(A)のメロディ履歴データから音高連結である「CDE」が抽出される。次にステップS802で、図12の楽曲データベースの各曲について、音高連結が比較される。ここで、本図のNリストのリストアップでは、Kリストのリストアップ時と異なり、キーが定まっていないため、楽曲データベースの音高をそのまま用いて比較を行う。従って、この場合、曲番号1から曲番号9までの全ての曲が、開始から第3音まで「CDE」の音高を持つため、ステップS802では9曲全て候補として抽出されることとなる。
該当曲があったため、ステップS803はYesとなり、ステップS804に進み、各該当曲ごとに、ST比率の正解率:Pを計算する。この正解率の計算は、ここではKリストの場合のステップS704と同様、式(1)を用いて計算している。
一例として、曲番号8の「とんび」と比較を行って正解率を求める場合を説明する。この場合、第2音めの「D」については、ST値の差分値は、0.67となるので、データベース中の当該音のST値(=0.33)で除算すると、約2となる(便宜上、0.33=1/3として、0.67=2/3として示している)。従って、この値を100分率化して200となる。同様に第3音の「E」についても、差分値の比率が200と算出される。
よって、これらの平均値は、(200+200)÷2=200点となり、これを100点から減じて、正解率=−100点と求められる(図中では、−を▲で表している)。
このようにして、各曲の正解率が求められたら、ステップS805で、その点数の高い順にNリストをリストアップする。このようにして作成されたNリストの例を図17(B)に示してある。一部の曲について正解率が同点であり、この順位付けについては、FリストやKリストと同様に、曲番号の若い順に順位を付けた例を示しているが、同順位としたり、他の方法で順位付けをしても差し支えない。
このようにして図5のステップS507を介して、図8に示した処理によってNリストが作成されると、CPU21は、図5のフローチャートに処理を戻してステップS508へ処理を進め、Dリストのリストアップを行う。このDリストアップの処理は図9に詳細が示してあるので、図9を参照して説明する。
図9でリストアップするDリストとは、入力メロディ履歴の音程関係と、上述の楽曲データベース(図12)に記録されている各楽曲のメロディの音程関係(Note欄2行目)のデータを用いて比較を行うものである。
図8のNリストでは、入力メロディと楽曲データベースの音高そのものを比較していたのに対して、本図9のDリストでは、音程関係を用いて比較することとしている。これにより、入力メロディが、楽曲データベースに登録されたメロディと異なる調に移調されて演奏されていた場合であっても、楽曲データベースに登録された、相対的な音程関係を用いて比較を行うことができ、入力メロディの調性によらず楽曲の比較ができることとなる。
図9では、CPU21はまず、入力されたメロディ履歴のデータ(図14)から、隣り合う2つの音の音高を比較して求めた「開始音/直前音との音程」のデータを、音程間隔データとして取得する(ステップS901)。
例えば、仮にいま入力メロディが「FGA」であったとすると、音程関係としては、第1音「F」と第2音「G」の音程である「2」、および、第2音「G」と第3音「A」の音程関係である「2」が取得されることとなる。
続いてCPU21は、この取得された入力メロディの音程間隔データと、楽曲データベース(図12)の各楽曲の「開始音/直前音との音程」データ(Note欄第2行目データ)とを比較して、音程間隔が一致する楽曲を検索する(ステップS902)。
再度、上記の「FGA」と入力された例で説明すると、入力メロディの音程関係は、最初から順に「2、2」であるのに対し、図12の例の楽曲データベースに登録されている9曲は、いずれも、最初からの音程関係が順に「2、2」であるので、ステップS902で、図12の9曲全てが検索結果としてピックアップされることとなる。
この場合、上述したDリストの趣旨である「楽曲データベースと異なる調に移調してメロディが入力された場合でも楽曲を検索できる」という点に鑑み、入力メロディと楽曲の、各開始音の絶対的な音高は比較しないものとする。上記の「FGA」と入力された例で説明すると、入力メロディの開始音の音高「F」と、各楽曲の開始音の音高「C」は異なっているが、これについては比較を行わず、異なっている曲であってもピックアップされるようにする。
これにより、上記の「FGA」とメロディが入力された場合、図8のNリストの検索処理では、各楽曲の音高と全く異なる音高であるためにピックアップされないが、本図9のDリストの検索処理においては、音高そのものは異なっていても「CDE」から始まる楽曲がピックアップされることとなる。
続いてCPU21は、ステップS902での検索の結果、ピックアップされた曲があったか否かを判断する(ステップS903)。そして、ピックアップされた曲がなかった場合は、このDリストのリストアップ処理を終了する(ステップS903:No)。
一方、ピックアップされた曲が存在していた場合は(ステップS903:Yes)、入力されたメロディ履歴の各音について、メロディ開始音(最初の音)とのST比率を算出して、ピックアップされた各曲について、楽曲データベース上に記録されている「開始音とのST比率」のデータと比較を行い、「正解率」を算出する(ステップS904)。この正解率の算出の具体的な方法については、ステップS704で説明したのと同様である。
そして、ステップS904において算出された、「各楽曲の正解率」を参照して、正解率の高いものから順に所定数の楽曲をDリストとしてリストアップし(ステップS905)、このDリストアップの処理を終了する。
このようにして作成される、Dリストの例を図18に示す。
ここでは、図18(A)に示すようなメロディが入力された場合に、図12および図13に示す楽曲データベースを検索して得られたNリストの例を図18(B)に、Dリストの例を図18(C)に示している。
図18(A)に示すように、メロディ入力は順に「FGA」の3音が入力されている。また、図18(A)に示すメロディ入力の例では、FGAの全てが、同じ長さ(ST値)で、第1音とのST比率が1である場合を仮定している。
既に説明したように、図18(A)のメロディ入力に対して、図12の楽曲データベースの各曲の音高連結を比較すると、「FGA」で始まっている楽曲は無いので、図18(B)に示すように、Nリストでは、この図12の曲1から曲9については一曲もリストアップがされない。なお、楽曲データベースにさらに他の曲が登録されており、その中に「FGA」で始まる曲があった場合は、この図18(B)のNリストにピックアップされることとなる。
このような入力メロディに対して、図9のDリストアップ処理を行うと、まず、ステップS901で図18(A)のメロディ履歴データから音程間隔のデータである、第1音(開始音)〜第2音の音程「2」、並びに、第2音〜第3音の音程「2」が抽出される。次にステップS902で、この抽出された音程間隔に対して、図12の楽曲データベースの各曲について音程間隔が比較される。
ここで、本図のDリストのリストアップでは、Nリストのリストアップ時と異なり、音高連結ではなく音程間隔を比較する。従って、入力メロディが、楽曲データベースに登録されたメロディと異なる調に移調されて演奏されていた場合であっても、楽曲データベースに登録された、相対的な音程関係を用いて比較を行うことができる。これにより、図18(B)のNリストではリストアップされなかった楽曲についても、Dリストとしてリストアップがなされる可能性がある。
本図18(A)の入力に対しても、図12の楽曲データベースの曲番号1から曲番号9までの9曲全てにおいて、音程間隔が、第1音(開始音)〜第2音の音程「2」、並びに、第2音〜第3音の音程「2」となっているため、ステップS902では、これらの9曲全てが候補として抽出される。
該当曲があったためステップS903はYesとなり、ステップS904に進み、各該当曲ごとにST比率の正解率:Pを計算する。この正解率の計算は、Kリストの場合のステップS704や、Nリストの場合のステップS804と同様、式(1)を用いて計算している。
このようにして、各曲の正解率が求められたら、ステップS905で、その点数の高い順にDリストをリストアップする。このようにして作成されたDリストの例を図18(C)に示してある。一部の曲について正解率が同点であり、この順位付けについては、Fリスト、Kリスト、Nリストと同様に、曲番号の若い順に順位を付けた例を示しているが、同順位としたり、他の方法で順位付けをしても差し支えない。
このようにして図5のステップS508を介して、図9に示した処理によってDリストが作成されると、CPU21は、図5のフローチャートに処理を戻してステップS509へ処理を進め、ステップS507とS508で作成された、NリストとDリストを用いて、総合リストを作成する(ステップS509)。この総合リストの作成処理は図10に詳細が示してあるので、図10を参照して説明する。
図10では、CPU21はまず、NリストとDリストを、統合して、所定の方法により順番に並べて、総合リストとする(ステップS1001)。
ここで、統合して順番に並べる方法としては、例えば、ステップS804とステップS904で算出した、NリストとDリストのそれぞれのリストの各楽曲のST比率の正解率に応じて、リスト種別に関わらずST比率の正解率が高いものから順に、楽曲を並べていく方法がある。
また、その他にも、例えば、ステップS802とステップS902で、音高連結ないし音程間隔を比較した際に、入力メロディ履歴と、楽曲データベースの楽曲とで、音高連結あるいは音程間隔が一致した音数が多いものを上位として、NリストとDリストの双方から楽曲を並べていく方法が可能である。
さらには、音高連結ないし音程間隔の比較結果と、ST比率の正解率を総合的に評価して、NリストとDリストの統合を行う方法も可能である。この場合、いずれかの評価、例えば音高連結ないし音程間隔が一致した音数が多いものを上位とし、一致した音数が同じものについて、ST比率の正解率で順位付けをする方法や、逆にST比率の正解率を優先的に順位付けする方法、さらに、所定の重み付けを行って、両項目の評価点を加算して、この重み付け加算された評価点の高い順に楽曲を並べていく方法などが可能である。
このような方法によってNリストとDリストから総合リストが作成されると、CPU21はこの総合リスト中に重複する楽曲がないかを検索する(ステップS1002)。これは即ち、NリストとDリストの両方にリストアップされている、重複する楽曲があるか否かを検索することと等しい。
ステップS1002で重複する曲があった場合には、総合リストにそのような重複する曲が存在すると、以後の処理に不便であるので、CPU21はこの重複する楽曲を総合リストから削除して(ステップS1003)、総合リストから重複する曲がなくなるようにする。なお、重複する曲は1曲とは限らず、複数の曲が重複していた場合であっても、それらを全て削除するものとする。
この図10に示した処理によってNリストとDリストを用いて作成された総合リストの例を図19に示す。図19の総合リストでは、各楽曲が正解率の順に並べられ、かつ、重複する曲が削除されたリストとなっている。
以上により、図5に示した曲候補検索処理では、入力されたメロディに基づき、後述するキー(調性)判定処理の状況に応じた楽曲候補の総合リストが作成される。
このようにして図3のステップS304を介して、図5の曲候補検索処理が終了すると、CPU21は図3のフローチャートに処理を戻し、キー(調性)判定処理を行う(ステップS305)。キー(調性)判定処理は、例えば、RAM23中に、図20のようなダイアトニックレジスタ2000を有して、各データを更新することによって実行される。
本実施の形態において、CPU21は、メロディ音が押鍵されるごとに、ダイアトニックレジスタ2000の一連の項目に値を格納する。図20の例では、時系列に5つのメロディ音のそれぞれについて、一連の値が格納されている(符号2001〜2005)。図20においては、矢印tの方向に時間的に新しい押鍵についての値となっている。つまり、メロディ音の項目にあるように、「C」、「D」、「E」、「F」、「B」の順で押鍵されている。
本実施の形態においては、CPU21によって、複数のメロディ音について、以下に述べる項目の値が、ダイアトニックレジスタ2000の単位レジスタ2001〜2005に格納されるようになっている。単位レジスタ2001〜2005は、それぞれ、メロディ音、音長、仮キー、仮コード、仮機能、メロディ音履歴、キー候補レジスタおよび確定キーという項目を有し、単位レジスタには、各項目についての値が格納され得る。メロディ音には、押鍵された鍵の音名が格納される。また、音長は、当該鍵の押鍵時間が格納される。なお、この音長については、楽曲データベースと揃えてST値を記録することとしてもよい。
最終的に、キー(調性)が確定したときには、CPU21は、単位レジスタの確定キーの項目に、キー名を格納する(たとえば、単位レジスタ2005格納)。しかしながら、キーが確定したとCPU21によって判断されるためには、複数の押鍵が必要となる。そこで、本実施の形態においては、キーが確定できると判断する段階になるまでは、CPU21の処理により仮キーが特定されて、そのキー名が、単位レジスタの仮キーの項目に格納される。また、仮キーの下で、メロディ音に適切な仮のコード名が、CPU21によって仮コードの項目に格納される。また、仮機能の項目には、CPU21によって、仮キーの下での、仮コードの機能(主音をIとした場合のコード名、および、トニック(T)、ドミナント(D)、サブドミナント(S)の種別)が格納される。
メロディ音履歴は、演奏開始時或いは所定のタイミングから、押鍵された鍵の音名が蓄積される。たとえば、最初の押鍵についての単位レジスタ2001には、押鍵された鍵であるCのみが格納され、次の押鍵についての単位レジスタ2002には、2つの鍵CDが格納されている。キー候補には、当該鍵が押鍵された時点で、あり得る1以上のキー名が格納される。
メロディ履歴データからのキー(調性)候補の絞り込みは、CPU21が図21のダイアトニックスケールテーブル2100を参照することによって実行される。
ダイアトニックスケールテーブル2100には、C〜Bの12個のキーそれぞれについて、キースケールノート(音階に該当する音)が識別可能に格納されている。たとえば、キーがCであればC、D、E、F、G、A、Bの音名が格納され(符号2101参照)、キーGであればG、A、B、C、D、E、F#の音名が格納される(符号2102参照)。
そして、CPU21によって、図20のメロディ音履歴と、ダイアトニックスケールテーブル2100とが比較され、メロディ音履歴に含まれる音名が、あるキーのダイアトニックスケールに全て含まれるようなキーが存在するかが調べられる。このようなキーは、存在しない場合もあるし、複数存在する場合もある。たとえば、単位レジスタ2003のメロディ音履歴には、C、D、Eが格納されている。そこで、ダイアトニックスケールテーブル2100を参照すると、C、D、Eの全てをダイアトニックスケールとして含むキーは、C、G、Fの3つとなる。したがって、この場合には、C、D、Eの3つのキーがキー候補となり得る。(単位レジスタ2003のキー候補欄)
そして、このキー(調性)候補が一つになった場合に、CPU21は、その候補キー(調性)を、確定キー(調性)とする。一方、キー候補が2以上存在する場合は、CPU21は、例えば、候補キーのうち最も調号の少ないものを仮キーとして、単位レジスタの仮キーの値として格納する。なお、調号が同数の場合(たとえば、FとG、DとB♭)には、♯系のキーが優先して仮キーとされる。
以上のようにして、図3のステップS305でキー(調性)判定処理が行われると、CPU21は自動コード判定処理を行う(ステップS306)。
自動コード判定処理は、現時点までに入力されたメロディ音に基づいて、現在のメロディに付けるべきコード(和音)を自動的に判定する処理であり、種々の方法により実現することが可能である。
例えば、現在のメロディ音に基づき、図22に示すような仮コード決定マップ2200を用いてコードを決定することが可能である。この手法は、例えば、まだ十分なメロディ履歴が得られていない、例えば第1音めや開始後数音程度の場合に用いることができる。
また、特にキーが未確定の場合などに、図23のコードデータベースを用いてコードを決定することができる。図23に示すように、コードデータベース2300には、コード名ごとに、コード構成音および当該コードに関するスケールノートが格納されている。図23において、たとえば、ハッチングで示される音名がコード構成音である。
例えば、CPU21は、所定の長さのメロディ履歴の中で、音長の長いものから順に所定個数の音を選択する。所定の長さのメロディ履歴としては、例えば、所定小節分のメロディ履歴や、所定音数のメロディ履歴などと決めておくことができる。
CPU21は、上記音長の長いものから選択された所定個数の音をコードデータベース2300と比較し、この所定個数の音を含むコード構成音を有するコードがあるかどうか判断する。そして、コードが見つかれば、そのコードを自動コード判定処理のコードとし、見つからなければ上記選択する音数を減らして再度コードデータベースと照合するなどの方法でコードを決定することができる。
また、前回のコードの機能と、その次のメロディの進行に応じて、図24のようなコード判定テーブルを用いてコードを決定することも可能である。
ここで、コードの機能とは、音楽理論における「トニック(TO)」、「サブドミナント(SU)」、「ドミナント(DO)」のことをいい、図24の左端に前回コード機能による分類が示されている。
図24に示すコード判定テーブルおいては、前回コードの機能(トニック(TO)、サブドミナント(SU)或いはドミナント(DO)の何れか)、および、前回メロディ音PMおよび現在メロディ音CMの組み合わせによって、コード名が取得されるようになっている。なお、図24のコード判定テーブル2400は、キー(C)の場合についてのものである。したがって、他のキーの場合には、当該キーの主音とCとの音程をオフセットとして、実際の前回メロディ音PMおよび現在メロディ音CMからオフセットを考慮して、キーをCとした場合の前回メロディ音PMおよび現在メロディ音CMを算出して用いれば良い。なお、図24の例では示されていないが、前回メロディ音PMおよび今回メロディ音CMの組み合わせによっては、コード名が得られない場合もある。
さらに、公知となっている他の手法を用いて、ステップS305のキー(調性)判定処理や、ステップS306の自動コード判定処理を実行することも可能である。例えば、特開2011ー158855号公報や、特開2012−68548号公報などの手法を用いることが可能である。
このようにして、図3のステップS306で自動コード判定処理が行われると、CPU21はコード選択処理を実行する(ステップS307)。このコード選択処理は図11に詳細が示してあるので、図11を参照して説明する。
図11で実行されるコード選択処理は、ステップS304を介して図5以下で実行された、曲候補検索処理でリストアップされた曲のコード進行と、ステップS306で実行された自動コード判定処理で決定されたコードのいずれを用いて自動伴奏付けを行うかを決定する処理である。
図11では、CPU21はまず、総合リスト中で音高/音程連結が所定数、例えば10音以上合っている曲があるか否かを判断する(ステップS1101)。この音数について、「音楽テーマ事典」(音楽之友社)では、6音までの音の並びから楽曲を検索できるようになっているが、6音で検索をすると、音が同じ曲が希に10曲程度検索される場合がある。このことから、例えば、6音〜10音程度の音が合っているかどうかを調べると、ある程度の正確性をもって楽曲の検索が行える。なお、メロディ入力が、まだ、所定数の音数(例えば10音)に達していない場合には、本処理をスキップすることとしても良い。
総合リスト中で音高/音程連結が所定数合っているものが無かった場合(ステップS1101:NO)、CPU21は、ステップS1104に処理を進め、リアルタイムコード付け結果通りのコードを出力して本コード選択処理を終了する(ステップS1104)。なお、そもそもFリスト、Kリスト、Nリスト・Dリストの各リストに該当する曲が検索されず、総合リストに曲がピックアップされていなかった場合も、このステップS1101でNOと判断されて、ステップ1104にてリアルタイムコード付け結果通りのコードを出力する。
一方、総合リスト中で音高/音程連結が所定数合っているものがあった場合(ステップS1101:YES)、CPU21は、その中で発音タイミングが80%以上マッチしている曲があるか否かを判定する(ステップS1102)。具体的には、総合リストにリストアップされている曲の中で、「正解率」が80点以上のものがあるか否かを判断する。この正解率は、既述のように、楽曲データベースと入力メロディ履歴との「開始音とのST比率」の値を比較して求めた、発音タイミングに関する評価値であるので、この正解率の値が所定値以上の曲を選択することで、ほぼデータベースと同じ曲を弾いていると判断でき、楽曲データベースからコード進行を選択して自動伴奏用コードとして差し支えないものと考えられる。なお、この「80点」の基準数値に関しては、適宜変更して、異なる基準値を用いて実施することも可能である。また、例えば「習熟度」に関する指定を図示しないボタン等で受け付けて、この習熟度に応じて判断の基準値を変えることも可能である。
発音タイミングが80%以上マッチしている曲が無かった場合(ステップS1102:NO)、CPU21は、ステップS1104に処理を進め、リアルタイムコード付け結果通りのコードを出力して本コード選択処理を終了する(ステップS1104)。
一方、発音タイミングが80%以上マッチしている曲があった場合(ステップS1102:YES)、CPU21は、このステップS1101とステップS1102とで選択された曲、具体的には、音高/音程連結が所定数合っている曲であって、発音タイミングが所定率以上合っている曲(以下「該当曲」という)の楽曲データベース(図12)を参照する。そして、該当曲のデータ中、現在のメロディと推定される部分のコードを、楽曲データベースから読み出して、ステップS306の自動コード判定処理(リアルタイムコード付け)のコード付け結果とマッチするか否かを判別する(ステップS1103)。
自動コード判定処理(リアルタイムコード付け)のコード付け結果と、該当曲の楽曲データベースから読み出したコードとがマッチしていた場合(ステップS1103:YES)、CPU21は、ステップS1104に処理を進め、リアルタイムコード付け結果通りのコードを出力して、本コード選択処理を終了する(ステップS1104)。
一方、自動コード判定処理(リアルタイムコード付け)のコード付け結果と、該当曲の楽曲データベースから読み出したコードとがマッチしていない場合(ステップS1103:NO)、CPU21は、ステップS1105に処理を進め、該当曲の楽曲データベースから読み出したコードを出力して、本コード選択処理を終了する(ステップS1105)。
このようにして図3のステップS307を介して、図11に示したコード選択処理が実行されると、CPU21は、図3のフローチャートに処理を戻し、ステップS308で自動伴奏処理を実行する(ステップS308)。この自動伴奏処理は図25に詳細が示してあるので、図25を参照して説明する。
図25は、本実施の形態にかかる自動伴奏処理の例を示すフローチャートである。まず、CPU21は、電子楽器10が自動伴奏モードの下で動作しているかを判断する(ステップ2501)。ステップ2501でYesと判断された場合には、CPU21のタイマ(図示せず)を参照して、現在時刻が、自動伴奏データ中、メロディ音のデータについてのイベントの実行タイミングに達しているかを判断する(ステップ2502)。
自動伴奏データには、3つの種類の楽音、すなわち、メロディ音(オブリガート音を含む)、コード音、リズム音のデータが含まれる。メロディ音のデータおよびコード音のデータは、発音すべき楽音ごとに、その音高、発音タイミングおよび発音時間を含む。また、リズム音のデータは、発音すべき楽音(リズム音)ごとに、その発音タイミングを含む。
ステップ2502でYesと判断された場合には、CPU21は、メロディ発音・消音処理を実行する(ステップ2503)。メロディ発音・消音処理においては、処理にかかるイベントがノートオンイベントであるかを判断する。ノートオンイベントであることは、現在時刻が、上記メロディ音のデータにおける所定の楽音の発音タイミングとほぼ一致することで判断できる。その一方、ノートオフイベントであることは、現在時刻が、当該楽音の発音タイミングに発音時間を加えた時刻とほぼ一致することで判断できる。
処理にかかるイベントがノートオフイベントである場合には、CPU21は、消音処理を実行する。その一方、処理にかかるイベントがノートオンイベントであれば、メロディ音のデータにしたがった発音処理を実行する。
次いで、CPU21は、CPU21のタイマ(図示せず)を参照して、現在時刻が、自動伴奏データ中、コード音のデータについてのイベントの実行タイミングに達しているかを判断する(ステップ2504)。ステップ2504においてYesと判断された場合には、CPU21は、コード発音・消音処理を実行する(ステップ2505)。コード音発音・消音処理においては、発音タイミングに達したコード音について発音処理を実行し、その一方、消音タイミングに達したコード音については消音処理を実行する。
その後CPU21は、現在時刻が、自動伴奏データ中、リズムのデータについてのイベントの実行タイミングに達しているかを判断する(ステップ2506)。ステップ2506においてYesと判断された場合には、CPU21は、リズム音発音処理を実行する(ステップ2507)。リズム音発音処理においては、発音タイミングに達したリズム音についてノートオンイベントを生成する。
自動伴奏処理(図3のステップS308)が終了すると、CPU21は、音源発音処理を実行する(ステップS309)。音源発音処理において、CPU21は、生成されたノートオンイベントに基づいて、発音すべき楽音の音色および音高を示すデータを音源部26に与え、或いは、消音すべき楽音の音色および音高を示すデータを音源部26に与える。音源部26は、音色、音高、音長等を示すデータにしたがって、ROM22の波形データを読み出して、所定の楽音データを生成する。これにより、スピーカ28から所定の楽音が発生する。また、CPU21は、ノートオフイベントに基づいて、音源26にノートオフイベントが示す音高の消音を指示する。
音源発音処理(ステップS309)が終了すると、CPU21は、その他の処理(たとえば、表示部15への画像表示、LED(図示せず)の点灯、消灯など:ステップS310)を実行して、ステップ302に戻る。
以上に説明した通り、本実施の形態においては、演奏者が演奏したメロディに対して自動的に伴奏を付加する電子楽器で、楽曲データベースを備え、演奏者の演奏メロディとこの楽曲データベースの各楽曲とを比較照合する。そして、所定の条件で一致したと判別された曲が見つかった場合、この楽曲データベースに登録されているコードを読み出して、演奏者の演奏メロディに対して伴奏付けを行う。
このようにすることで、演奏者の演奏メロディに対して、リアルタイムで自動的に伴奏を付ける際の自動コード判別のみによらず、楽曲データベースに登録されている曲と合致した場合は、データベースから曲に合ったコードを読み出して出力できるため、自動的なコード付けの精度を向上させることができる。
さらに、本実施の形態では、楽曲データベースとの照合処理において、キー(調性)判別がまだ確定していない場合に、音高の比較を行うNリストと、音程間隔の比較を行うDリストとを備え、楽曲データベースに登録されているのと異なる調でメロディが演奏された場合でも比較照合を行えるようにしている。従って、演奏者がメロディをデータベースと異なる調で演奏した場合であっても、楽曲データベースを有効に活用してコード付けを行うことが可能である。
さらに、本実施の形態では、楽曲データベースに、メロディ開始音と各メロディ音とのST比率を登録しておき、演奏されたメロディについての開始音と各音とのST比率を取得して、楽曲データベースの登録値と比較して、正解率を算出する。そして、この正解率の高いものから優先的に楽曲データベースの楽曲を検索するようにしている。従って、多少発音タイミングがずれて演奏されていた場合であっても、概ね曲の特徴が合っていれば、候補曲として検索される柔軟なシステムを構築することが可能である。
また、楽曲データベース検索と平行して、自動的なコードの判別処理も行い、楽曲データベースでの検索で該当する曲が見つからない場合は自動的なコード判別結果に基づいてコード付けを行うようになっている。従って、自動コード判別と楽曲データベース検索方式との二重構造によってコード付けをすることにより、データベースに登録されている曲については速やかにデータベースを用いた正確なコード付けを行うと共に、データベースに該当曲がない場合や、判別不能な場合等は、自動的なコード判別処理でコードを付けることができ、コード付け不能となることなく、かつ、精度の良いコード付け並びに自動伴奏付けが可能となる。
次に、本発明の第2の実施の形態を説明する。第2の実施形態では、CPU21は、図11のコード選択処理に替えて、図26に示すコード選択処理を実行する。
図26のコード選択処理において、図11と同様の処理を行う部分については、図11と共通のステップ番号を付してあり、これについては説明を省略する。図26のコード選択処理では、図11のステップ1103に替えてステップS2603を実行する。
ステップS2603では、CPU21は、ステップS306の自動コード判定処理で演奏メロディに対して付けられたコードと、S1101、S1102で、条件に該当すると判断された楽曲データベースの曲の中の、現在演奏されているメロディ部分に付けられているコードとの「コードの機能」を比較する。
具体的には、楽曲データベースに付けられているコードの機能としては、図12に示した楽曲データベース中に、さらに各メロディ音に対して、コードの機能の情報を追加で記録されていることとしても良いし、または、図12の楽曲データベースでは、各曲のキー(調性)が判っているので、この調性と、各メロディ音に対するコードとを比較照合することで、機能を判定することとしても良い。
また、現在演奏されているメロディ部分に付けられているコードの機能は、ステップS305のキー(調性)判定の部分で説明した、仮機能の部分に記録された機能を用いることとしても良い。この、演奏されているメロディのコードの機能(仮機能)は、ステップS305で説明した、仮キー若しくは確定キーの情報と、現在のメロディに対して付けられたコード(和音)の情報を比較照合して、機能を判定することができる。
具体的には、各種コードとコードの機能について、周知の音楽理論を用いたテーブルを用意し、このテーブルを参照することによって、コードの機能を取得することが可能である。例えば、トニックに該当するコード名として、「IMaj」、「IM7」、「IIImin」、「IIIm7」、「VImin」、「VIm7」がある。サブドミナントに該当するコード名として、「IImin」、「IIm7」、「IIm7 (−5)」、「IVMaj」、「IVM7」、「IVmin」、[IVmM7]がある。また、ドミナントに該当するコード名として、「IIIMaj」、「III7」、「III7sus4」、「VMaj」、「V7」、「V7sus4」、「VIIm7 (−5)」がある。
このようにして、ステップS2603で、CPU21は、ステップS306の自動コード判定処理で演奏メロディに対して付けられたコードと、S1101、S1102で、条件に該当すると判断された楽曲データベースの曲の中の、現在演奏されているメロディ部分に付けられているコードとの「コードの機能」を比較する。
そして、コードの機能が共通だった場合には(ステップS2603:YES)、リアルタイムコード付け結果のコードを出力する(ステップS1104)。一方、コードの機能が異なっていた場合は(ステップS2603:NO)、該当曲の楽曲データベースから読み出したコードを出力する(ステップS1105)。
このようにすることによって、本第2の実施形態では、リアルタイムコード付けの結果のコードと楽曲データベースから読み出したコードの、「コードの機能」が合っている場合には、同じ機能を有するコードのうちでのバラエティとして、リアルタイムコード付けの結果を尊重してリアルタイムコード付けの結果のコードを出力する一方、「コードの機能」が異なっていた場合、リアルタイムコード付けの結果のコードが、機能からして大外れの見当違いの和音を付してしまう危険を避けるために、楽曲データベースのコードを読み出して出力するようにできる。従って、楽曲データベースとリアルタイムコード付けの両方式の協働によって、大きく見当外れのコードを出力する可能性を低減しつつ、機能が合っている中ではコード付けのバラエティとして、リアルタイムコード付けの判断結果を尊重したコード出力をすることが可能となる。
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
また、上述した各実施形態において記載した手法は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク(フロッピーディスク、ハードディスク等)、光ディスク(CD−ROM、DVD等)、半導体メモリなどの記録媒体に書き込んで各種装置に適用したり、通信媒体により伝送して各種装置に適用することも可能である。本装置を実現するコンピュータは、記録媒体に記録されたプログラムを読み込み、このプログラムによって動作が制御されることにより、上述した処理を実行する。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的或いは個別に実行される処理をも含むものである。
また、本明細書において、システムの用語は、複数の装置や複数の手段などより構成される全体的な装置を意味するものとする。
例えば、上記実施形態の図3で説明した処理のうち一部は、処理の順番を前後させる等させても差し支えない。例えば、S304の曲候補検索処理と、S305、S306のキー(調性)判定処理、自動コード判定処理と、は、順序を逆にすることもできる。そのようにすることで、ステップS505における「Key確定?」か否かの判断において、より最新の判断結果を用いることができる。
以上に説明した本発明によれば、メロディ音の履歴に基づいて、自動的なコード付けと、楽曲データベースを用いたコード付けとの双方を適切に使い分けてコード付けができるため、精度の良い適切なコード付けを迅速に行うことが可能となる。
すなわち、本発明によれば、楽曲データベース手段に登録された曲の中で、該当する楽曲が見つからない場合には、自動コード付けによりコードが付けられる。従って、楽曲データベース中に該当する楽曲が見つからなかった場合でも、和音が付かなくなってしまい、演奏者の演奏に何らの自動伴奏も付されないといった事態を回避することができる。
他方、本発明によれば、楽曲データベース手段に登録されている曲の中で、該当する楽曲が検索された場合には、この楽曲データベース手段に登録されているコードを利用して自動伴奏を付けることができる。従って、自動コード付けによるコード付けで自動的にコードの判別を行った場合に、人間の聴覚的に明らかにおかしい、間違った和音が付いてしまうといった事態を防ぐことが可能になる。
さらに、本発明によれば、楽曲データベース手段に登録されている曲の中で、該当する楽曲が検索された場合に、自動コード付けによるコードと、楽曲データベース中に登録されているコードとのコードの機能を比較して、用いるコードを選択している。従って、自動コード付けによるコード付けが、楽曲データベースに登録されているコードと比べて、コードの機能の面からも異なっている、大ハズレのコードを付してしまうといった目立った誤りが発生する事態を防ぐことができる。
さらにまた、楽曲データベースに登録されているコードと機能が同じであった場合に、自動コード付けを選択するようにすることで、コードの機能が大ハズレでは無いことを確認した上で、自動コード付けによるコード付けアルゴリズムを尊重したコードを選択できることから、より適切なコードを用いた自動伴奏を行うことができるようになる。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[付記1]
複数の楽曲のそれぞれについて、メロディ情報と当該メロディ情報に対応するコードとが楽曲データとして記憶されている楽曲データベース手段と、
演奏操作子の操作に対応して順次楽音の発生を指示するための演奏情報を記憶する演奏記憶手段と、
前記演奏記憶手段に記憶された演奏情報に基づいて、前記楽曲データベース手段から当該演奏情報に対応するメロディ情報を有する楽曲データを検索する楽曲検索手段と、
前記演奏記憶手段に記憶されている演奏情報から、コードを判定するコード判定手段と、
前記楽曲検索手段によって検索された楽曲に対応して記憶されたコード及び前記コード判定手段によって判定されたコードのうち、いずれのコードを用いるかを選択するコード選択手段と、
前記コード選択手段によって選択されたコードに基づいた、伴奏音の発生を指示する自動伴奏手段と、
を備えたことを特徴とする自動伴奏装置。
[付記2]
前記コード選択手段は、前記楽曲検索手段によって検索された楽曲データに対応して記憶されたコード及び前記コード判定手段によって判定されたコード夫々のコードの機能を比較し、このコードの機能の比較結果に基づいてコードを選択することを特徴とする付記1に記載の自動伴奏装置。
[付記3]
前記コード選択手段は、前記楽曲検索手段によって検索された楽曲データに対応して記憶されたコード及び前記コード判定手段によって判定されたコード夫々のコードの機能が一致した場合は、前記コード判定手段によって判定されたコードを選択するとともに、当該コードの機能が一致しない場合には、前記楽曲データに記憶されているコードを選択することを特徴とする付記2に記載の自動伴奏装置。
[付記4]
前記コード選択手段は、前記楽曲検索手段によって前記楽曲データベース手段から当該演奏情報に対応するメロディ情報を有する楽曲が検索されなかった場合に、前記コード判定手段によって判定されたコードを選択することを特徴とする、付記1から3のいずれかに記載の自動伴奏装置。
[付記5]
前記楽曲検索手段は、前記演奏操作子により順次発音の指示された楽音のうち、第1音目の楽音の音長と、夫々入力された楽音の音長との比率に基づき前記楽曲データベース手段から対応する楽曲を順位を付けて検索することを特徴とする付記1から4のいずれかに記載の自動伴奏装置。
[付記6]
前記コード判定手段は、記演奏操作子の演奏情報の調性を判定するキー判定手段を備え、
前記楽曲検索手段は、前記楽曲データベース手段に記憶された楽曲データを前記キー判定手段によって判定されたキーに基づき移調し、当該移調された楽曲データ及び前記演奏情報に基づいて、前記楽曲データベース手段から対応する楽曲を検索することを特徴とする付記1から5のいずれかに記載の自動伴奏装置。
[付記7]
前記キー判定手段によるキー判定が未確定の場合には、前記楽曲検索手段は、前記楽曲データベース手段に記憶された楽曲データに対応するメロディ情報に含まれる音高データに基づく楽曲検索と、当該音高データ間の相対的な音程間隔データに基づく楽曲検索とを組み合わせて楽曲を検索することを特徴とする付記6に記載の自動伴奏装置。
[付記8]
前記楽曲データベース手段に記憶された各楽曲データは、単一の調で記憶されていることを特徴とする付記1から7のいずれかに記載の自動伴奏装置。
[付記9]
前記楽曲データベース手段に記憶された各楽曲データが、原曲の調で記録されていることを特徴とする付記1から7のいずれかに記載の自動伴奏装置。
[付記10]
複数の楽曲のそれぞれについて、メロディ情報と当該メロディ情報に対応するコードとが楽曲データとして記憶されている楽曲データベース手段と、演奏操作子の操作に対応して順次楽音の発生を指示する演奏情報を記憶する演奏記憶手段と、を有する自動伴奏装置に用いられる自動伴奏方法であって、
前記演奏記憶手段に記憶された演奏情報に基づいて、前記楽曲データベース手段から当該演奏情報に対応するメロディ情報を有する楽曲データを検索し、
前記演奏記憶手段に記憶されている演奏情報から、コードを判定し、
前記楽曲検索手段によって検索された楽曲に対応して記憶されたコード及び前記コード判定手段によって判定されたコードのうち、いずれのコードを用いるかを選択し、
前記コード選択手段によって選択されたコードに基づいた、伴奏音の発生を指示する、自動伴奏方法。
[付記11]
複数の楽曲のそれぞれについて、メロディ情報と当該メロディ情報に対応するコードとが楽曲データとして記憶されている楽曲データベース手段と、演奏操作子の操作に対応して順次楽音の発生を指示する演奏情報を記憶する演奏記憶手段と、を備えた自動伴奏装置として用いられるコンピュータに、
前記演奏記憶手段に記憶された演奏情報に基づいて、前記楽曲データベース手段から当該演奏情報に対応するメロディ情報を有する楽曲データを検索する楽曲検索ステップと、 前記演奏記憶手段に記憶されている演奏情報から、コードを判定するコード判定ステップと、
前記検索された楽曲に対応して記憶されたコード及び前記判定されたコードのうち、いずれのコードを用いるかを選択するコード選択ステップと、
前記選択されたコードに基づいた、伴奏音の発生を指示する自動伴奏ステップと、
を実行させる自動伴奏プログラム。