(57)【特許請求の範囲】
【請求項１】
音符のシーケンスを示す演奏データを入力する演奏データ入力手段と、
前記演奏データ入力手段によって入力された演奏データを所定の区間に分割する区間分割手段と、
互いに異なるコード数で、それぞれが複数のコードで構成される和音進行を複数記憶した和音進行データベースと、
前記和音進行データベースに記憶されている和音進行のうちから、前記区間分割により分割された所定区間の演奏データに適合する和音進行を抽出する和音進行抽出手段と、
を備え、
前記和音進行抽出手段は、前記複数のコードで構成される和音進行のなかで所定の長さで和音進行を決定できなかったときは、他の長さの和音進行を用いて和音進行を決定する
ことを特徴とする演奏データ分析装置。
【請求項２】
前記和音進行データベースに記憶されている複数の和音進行のそれぞれには優先順位が付与されており、前記所定区間の演奏データに適合する和音進行が複数存在するとき、前記優先順位に従った和音進行を抽出することを特徴とする請求項１記載の演奏データ分析装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子楽器やコンピュータミュージック等における演奏データを分析する装置に関わり、入力された演奏データから和音進行を検出する演奏データ分析装置に関する。
【０００２】
【従来の技術】
従来、電子楽器やコンピュータミュージック等においてメロディにコード（和音）を付けたり編曲等を行うために、演奏データから和音を検出する必要がある。このような演奏データの和音を検出する方法として、演奏データの構成音から和音を解析することが行われる。しかし、和音を一つずつ付与していくと、連続する和音の間で、つながりが悪くなる可能性がある。
【０００３】
【発明が解決しようとする課題】
本発明は、音符のシーケンスを示す演奏データに、つながりのよい和音進行を付与することを課題とする。
【０００４】
【課題を解決するための手段】
上記の課題を解決するためになした本発明の請求項１記載の演奏データ分析装置は、音符のシーケンスを示す演奏データを入力する演奏データ入力手段と、前記演奏データ入力手段によって入力された演奏データを所定の区間に分割する区間分割手段と、互いに異なるコード数で、それぞれが複数のコードで構成される和音進行を複数記憶した和音進行データベースと、前記和音進行データベースに記憶されている和音進行のうちから、前記区間分割により分割された所定区間の演奏データに適合する和音進行を抽出する和音進行抽出手段と、を備え、前記和音進行抽出手段は、前記複数のコードで構成される和音進行のなかで所定の長さで和音進行を決定できなかったときは、他の長さの和音進行を用いて和音進行を決定することを特徴とする。
【０００５】
本発明の請求項２記載の演奏データ分析装置は、請求項１の構成を備え、前記和音進行データベースに記憶されている複数の和音進行のそれぞれには優先順位が付与されており、前記所定区間の演奏データに適合する和音進行が複数存在するとき、前記優先順位に従った和音進行を抽出することを特徴とする。
【０００６】
請求項１の演奏データ分析装置によれば、和音進行データベースから、所定区間の演奏データに適合する和音進行を抽出するので、典型的な和音進行の中から和音進行を選択することにより、連続する和音の間で音楽的につながりのよい和音進行を付与することができる。
【０００７】
また、請求項２の演奏データ分析装置によれば、請求項１の作用効果に加えて、和音進行としての優先順位に従う和音進行を抽出するので、さらにつながりのよい和音進行を付与することができる。
【０００８】
【発明の実施の形態】
図２は本発明実施例の演奏データ分析装置を適用した電子楽器のブロック図であり、ＣＰＵ１はプログラムメモリ２に格納されている制御プログラムに基づいてワーキングメモリ３のワーキングエリアを使用して電子楽器全体の制御を行い、パネルスイッチ等の操作子４の操作と表示装置５への表示処理により、通常モードまたはメロディ分析モードで動作する。
【０００９】
通常モードでは、ＣＰＵ１は鍵盤６のキーイベントに応じたキーコード、タッチデータ、キーオン信号（またはキーオフ信号）等を取り込み、キーコードとノートオンまたはノートオフを音源７に出力して鍵盤演奏に対応する発音処理と消音処理を行う。なお、音源７は上記ＣＰＵ１から入力されるデータに応じた楽音信号を発生し、サウンドシステム８は楽音信号のＤ／Ａ変換および増幅等を行って楽音を発生する。
【００１０】
メロディ分析モードでは、先ず、ＣＰＵ１は鍵盤６のキーイベントに応じたキーコード、タッチデータ、キーオン信号（またはキーオフ信号）等を取り込み、これらのデータに基づいて演奏データを生成する。なお、この演奏データを生成する処理は、鍵盤６による通常の演奏操作に応じて演奏データを生成するリアルタイムレコードのモードまたは鍵盤６と操作子４の操作によって１音づつ入力して演奏データを生成するステップレコードのモードで行う。
【００１１】
また、この演奏データから入力演奏時の音長のバラツキ等を修正（クオンタイズ）して音符の符長を示す音長データを生成し、音高データ、音長データ、休符データ、休符長データからなるメロディデータを構成してデータメモリ９（ＲＡＭ）に記憶する。そして、メロディデータを記憶すると、後述詳細に説明するように、ＣＰＵ１はこの記憶したメロディデータの分析を行い、メロディデータを分割した区間分析データ、検出調のデータおよび検出コード（和音）のデータを分析データとしてデータメモリ９に記憶する。
【００１２】
図３はメロディデータと分析データ中の区間分析データの各フォーマットを示す図である。同図（Ａ）  に示したメロディデータは、ピッチに対応する音高データと音符の符長に対応する音長データで一つの音符を表し、休符データと休符の符長に対応する休符長データで一つの休符を表している。音高データはキーコードであり、休符データは予め決められた特定の識別コードである。また、音長データおよび休符長データは、所定のクロック（例えば４分音符を２４個に分割したクロック）を単位としてクロック数で時間長を表したデータである。
【００１３】
なお、実際の演奏では、同じ音符でもスラーで弾く場合とスタッカートで弾く場合のように実際の発音時間が異なることがあるが、前述のように、上記音長データと休符長データは実際の発音時間に関係なく符長分のクロック数となるように加工されている。したがって、メロディデータの先頭から音長データと休符長データを加算することにより小節線の位置が判明し、これによりメロディデータを小節単位やフレーズ単位でも検索することができる。
【００１４】
図３（Ｂ）  に示した区間分析データは、後述説明するようにメロディデータをメロディの分析結果に応じてコードリズム区間に分割したものであり、図３（Ａ）  のメロディデータに各コードリズム区間の境界を示す分割データを挿入したフォーマットで記録される。なお、メロディデータと区間分析データの最後にはエンドデータが記録される。
【００１５】
図１は実施例におけるメロディ分析の流れを説明する概念図である。まず、データメモリ９のメロディデータをフレーズ（＃１〜＃Ｎ）に分割し、この各フレーズをさらに細かくコードリズム（＃１１  〜＃１Ｍ  ，〜，＃Ｎ１  〜＃ＮＬ  ）に分割する。ここで、フレーズとは、メロディデータを区切りのよい所定長を分割したときの単位区間であり、この分割の仕方は後述する。コードリズムは１小節あるいは２拍のようにフレーズより小さな区間であり、コード進行において１つのコードが占める単位区間を意味する。この分割の仕方は後述説明するようにメロディの特徴に応じて決定する。
【００１６】
次に、この各コードリズム区間から和声音を抽出し、この和声音に基づいて、調検出用の検出区間とするためにコードリズムを必要に応じて結合し、区間を変更したコードリズム（＃１１  〜＃１Ｍ’，〜，＃Ｎ１  〜＃ＮＬ’）とする。この再構成したコードリズムの各検出区間毎に和声音と音名列を抽出してこの和声音と音名列に基づいて候補となる調を抽出する。
【００１７】
この実施例では、例えば次表１に示したように、各調の音階に対応してその調を特徴つける主要な音名からなる音名列をＩ  ，ＩＩ，ＩＩＩ  ，ＩＶのような度数で音階音列テーブルとしてプログラムメモリ２に記憶しており、和声音と音名列とから候補調を抽出するとき、この音階音列テーブルの中から検出区間の音名列に含まれる音階音列を検索し、この音階音列と検出区間の和声音とを含む音階の調を候補調とする。そして、この候補調から検出区間の調を確定する。
【００１８】
【表１】
0003591444.tif 000002
【００１９】
次に、調検出用に分割した検出区間とその和声音から検出区間のコード（和音）を決定する処理について説明する。この処理では、コードシーケンスＤＢ（データベース）１０（図２）に記憶されたコード進行データに基づいてコードを検出する。このとき、決定するコードがフレーズの先頭や最後のコードとして適しているか検査しつつ、コード進行データとのマッチングによりコードを決定する。
【００２０】
図５はコード進行データの一例を示す図である。コード進行データは代表的なコード進行を示すものであり、４つのコードで構成される４コード進行、３つのコードで構成される３コード進行、２つのコードで構成される２コード進行がある。また、これらの４コード進行、３コード進行、２コード進行は、それぞれ長調と短調に対応するコード進行データに分類されている。さらに、４コード進行については１小節に１つのコードが対応するような同期型とコードと小節が対応しない非同期型とに分類されている。これらのコード進行の各コードはＩｍａｊ  のように根音（Ｉ）  とタイプ（ｍａｊ）  の組み合わせで示されている。ここで、根音は調の主音を基準とした度数で表わされているので、コード進行データは１２音名（Ｃ，Ｃ♯，Ｄ，〜，Ｂ）の主音の調に対してそれぞれ共通に対応可能となっている。
【００２１】
また、同類のコード進行データ同志には優先準位が付けられている。例えば、図５に示した４コード進行（同期）ＤＢの長調用では、「Ｉｍａｊ→ＶＩｍｉｎ  →ＩＩｍ７→Ｖ７」（ハ長調の場合、Ｃｍａｊ  →Ａｍｉｎ  →Ｄｍ７→Ｇ７  ）が最も優先準位が高く、「ＩＩＩｍ７  →ＩＶｍｉｎ  →ＩＩｍ７→Ｖ７」（ハ長調の場合、Ｅｍ７→Ｆｍｉｎ  →Ｄｍ７→Ｇ７  ）、「Ｉｍａｊ→ＩＩｍ７→Ｖ７→Ｉｍａｊ」（ハ長調の場合、Ｃｍａｊ  →Ｄｍ７→Ｇ７  →Ｃｍａｊ  ）、の順に優先準位が低くなっている。
【００２２】
図６は実施例におけるメロディ分析モードでの制御プログラムのメロディ分析処理のフローチャート、図７〜図１７はサブルーチンのフローチャートであり、各フローチャートに基づいて実施例の動作を説明する。
【００２３】
操作子４の操作によりメロディ分析モードが指定されると、図６のメロディ分析処理が開始され、ステップＳ１で図７のデータ入力処理を行ってメロディデータを記憶し、コードリズム入力があればそれも記憶し、なければコードリズム自動設定モードにする。ステップＳ１−１ではコードリズム自動設定モードか否かを判定し、コードリズム自動設定モードならステップＳ２に、そうでなければステップＳ４に進む。ステップＳ２では図８の区間仮分割処理を行ってメロディデータをフレーズに分割する。次に、ステップＳ３で図９のコードリズム区間抽出処理を行って各フレーズをコードリズム区間に分割し、ステップＳ４で図１０の和声音抽出処理を行うとともにステップＳ５で図１３の和声音再抽出処理を行って和声音を抽出し、ステップＳ６で図１４のコードリズム結合処理を行って調検出用の検出区間としてコードリズムの区間を決定する。そして、ステップＳ７で図１５の調検出処理を行って調を確定する。また、ステップＳ８で図１７のコード検出処理を行ってコードを決定する。
【００２４】
図７のデータ入力処理では、ステップＳ１１で、鍵盤６からの演奏操作に基づいてメロディ入力を行い、メロディデータをデータメモリ９に記憶する。次に、ステップＳ１２で、操作子４により４分の４拍子や４分の３拍子など拍子のデータのマニュアル入力処理を行い、ステップＳ１３で、操作子４によるコードリズム区間のマニュアル指定入力が無い場合には自動設定モードにしてコードリズムを自動的に設定する。マニュアル指定入力が有れば指定されたコードリズム区間の区切りを記憶する。
【００２５】
図８の区間仮分割処理では、ステップＳ２１で、２分音符以上の音符（２分音符の符長以上に符長が長い音符）が小節線の直前にあったときその小節線の位置をフレーズの分割位置とする。フレーズが４小節以上になったときは、前から４小節毎の小節線の位置をフレーズの分割位置として、メロディデータをフレーズに再分割していく。なお、このとき図３（Ｂ）  の場合と同様にメロディデータにコードリズムとは異なるフレーズの分割データを挿入することにより分割位置を記憶する。
【００２６】
ここで、後述説明する図９のコードリズム抽出処理において上記の記憶した各フレーズをメロディパターンに応じて１小節または２拍毎のコードリズム区間にさらに仮分割するが、このときメロディパターンの検査条件をフレーズ中の音符密度に応じて切り換えるようにする。このために各フレーズに対応するフラグＤＶ（ＦＮ）（ＦＮはフレーズ番号）を用い、次の処理のように、フレーズの音符密度が低いときフラグＤＶ（ＦＮ）を“１”とし、音符密度が高いときフラグＤＶ（ＦＮ）を“２”として記憶しておく。
【００２７】
先ず、ステップＳ２２で現在設定されている拍子が４分の３拍子であるか否かを判定し、４分の３拍子であればステップＳ２３で全てのフレーズに対応する全てのフラグＤＶ（ａｌｌ）を“１”にセットして元のルーチンに復帰し、４分の３拍子でなければ、ステップＳ２４で読出しポインタ（データメモリ９における読出しポインタ。以下同じ。）をセットして最初のフレーズに注目してステップＳ２５に進む。
【００２８】
ステップＳ２５では、フレーズ中の音符のうち８分音符以上の符長の合計とフレーズの長さの比が０．６以上であるか否かを判定して、０．６以上であればフラグＤＶ（ＦＮ）を“１”にセットし、それ以外のときはフラグＤＶ（ＦＮ）を“２”にセットする。そして、ステップＳ２６で現在最後のフレーズであるか否かを判定し、最後のフレーズでなければステップＳ２７で読出しポインタを次のフレーズに更新してステップＳ２５に進み、最後のフレーズであればそのまま元のルーチンに復帰する。
【００２９】
以上の処理により、４分の３拍子の場合と４分の３拍子以外で８分音符以上の符長の合計とフレーズの長さの比が０．６以上の場合は、フレーズ中に符長の長い音符が多い（音符密度が低い）とみなし、４分の３拍子以外で８分音符以上の符長の合計とフレーズの長さの比が０．６に満たない場合は、符長の短い音符が多い（音符密度が高い）と見なし、図９のコードリズム抽出処理でこの音符密度に応じて検査条件を切り換えてメロディパターンを検査する。
【００３０】
図９において、先ず、ステップＳ３１で読出しポインタをセットして最初の小節に注目し、ステップＳ３２でＤＶ（ＦＮ）＝１であるか否かを判定する。ＤＶ（ＦＮ）＝１であれば（音符密度が低い）、ステップＳ３３でその現在の小節に含まれる音符が２音以下であるか否かを判定し、２音以下であればステップＳ３７で分割データを挿入して１小節のコードリズム区間に分割する。ステップＳ３３で２音以下でなければ、ステップＳ３４でトリルパターンを検索してトリルパターンが１小節全体にわたっているかを検査する。なお、トリルパターンとは、音高ａと音高ｂ（ａとｂの音程差は１音以内）の音符がａｂａｂ…と２回以上繰り返すパターンである。
【００３１】
ステップＳ３５の判定で、１小節のトリルパターンであればステップＳ３７で１小節のコードリズム区間に分割し、１小節のトリルパターンでなければステップＳ３６に進む。ステップＳ３６では、１小節の全ての音符が４分音符であるか否かを判定し、全ての音符が４分音符であればステップＳ３７で１小節のコードリズム区間に分割し、そうでなければステップＳ３０５で小節内に分割データを挿入して２拍ずつのコードリズム区間に分割し、ステップＳ３０６に進む。
【００３２】
一方、ステップＳ３２でＤＶ（ＦＮ）＝１でなければ（音符密度が高い）、ステップＳ３８で図４に示した特殊パターンを現在の小節内で検索し、ステップＳ３９でこの特殊パターンがあったか否かを判定する。この特殊パターンは１拍目から２拍目または３拍目から４拍目にかけて現れた２拍長の発音タイミングのパターンであり、２拍３拍間にまたがるようなパターンは無視する。この特殊パターンは使用頻度が高い２拍で１まとまりになっている。また、最初に入力したままのメロディデータの原メロディパターンおよび連続する同音高の音を１つの音としてまとめた結果生じる発音タイミングパターンの場合のいずれもチェックする。図４（Ａ）  の場合は順次進行で同方向進行のみのという条件付きである。なお、順次進行とは隣り合う音符の音高差が２度（全音または半音）で上または下に進行することであり、同方向とは音高が上がるか下がるかの１方向の場合である。また、図４（Ｂ）  ，（ｃ）  の場合は無条件である。
【００３３】
この特殊パターンがあれば２拍長でひとまとまりのパターンであるのでステップＳ３０５で２拍ずつのコードリズム区間に分割し、特殊パターンが無ければまだ２拍ずつに決めないでステップＳ３０１で４拍長のトリルパターンを検索する。そして、ステップＳ３０２の判定で４拍長のトリルパターンがあればステップＳ３７で１小節のコードリズム区間に分割し、４拍長のトリルパターンが無ければステップＳ３０３で全て同音名であるか否かを判定する。全て同音名であればステップＳ３７で１小節のコードリズム区間に分割し、少なくとも１つが異音名であれば、ステップＳ３０４で８分音符以下の符長の音符が有るか否かを判定する。そして、８分音符以下の音符が無ければステップＳ３７で１小節のコードリズム区間に分割し、８分音符以下の音符があればステップＳ３０５で２拍づつのコードリズム区間に分割する。
【００３４】
以上一つの小節についての処理が終了すると、ステップＳ３０６で現在注目している小節が最後の小節であるか否かを判定し、最後の小節でなければステップＳ３０７で読出しポインタを次の小節に更新してステップＳ３２に進み、最後の小節であればそのまま元のルーチンに復帰する。
【００３５】
以上の処理により、トリルパターンが１小節にわたる場合、１小節の全ての音符が４分音符の場合、１小節に４拍長のトリルパターンがある場合、１小節で全て同音名であった場合など、１小節内で調の変化（あるいはコードの変化）が無さそうな場合に１小節のコードリズム区間に分割される。また、２拍長でひとまとまりの特殊パターンがある場合や長いトリルパターンがなかったり音名が分散している場合など、１小節内で調の変化がありそうな場合に２拍長のコードリズム区間に分割される。このように、メロディパターンや符長に応じて各フレーズが１小節または２拍づつのコードリズム区間に仮分割される。なお、上記のコードリズム区間への分割の際、原メロディパターンの音符が２つのコードリズム区間にまたがるときは、その音符（前のコードリズム区間の最後の音符）の符長を分割位置で切断し、後ろのコードリズム区間の最初の音符の前に切断した残りの符長を示すタイ情報（図３（Ｂ）  参照）を付加する。
【００３６】
次に、図１０の和声音抽出処理（および図１１の和声音抽出ルール処理と図１２の先取音処理）によりメロディの先頭からコードリズム区間の和声音を抽出し、和声音が抽出できなかったコードリズム区間については図１３の和声音再抽出処理によりメロディの後ろから順に和声音を再抽出する。そこで、各コードリズム区間に対応して和声音が検出されたか否かを示す検出フラグを用い、和声音の未検出状態を検出フラグ“０”で記憶し、和声音の検出済状態を検出フラグ“１”で記憶する。
【００３７】
図１０の和声音抽出処理では、ステップＳ４１で読出しポインタをセットして最初のコードリズム区間に注目し、ステップＳ４２で注目コードリズム区間の検出フラグを予め“０”（未検出）にセットしてステップＳ４３に進む。ステップＳ４３では、注目コードリズム区間の先頭が休符であり、かつ直前のコードリズム区間に音符があり、かつその音符が和声音でないとき、この休符を直前の音符に吸収させる。すなわち、休符データを削除し、この休符の符長を直前の音符の符長に加えて音長データとする。
【００３８】
次に、ステップＳ４４で、注目コードリズム区間内で音高ａと音高ｂの音符がａｂａの並びになっているメロディすなわち刺繍音を含むパターンの検出を行い（ａｂ間，ｂａ間に休符があってもこの休符は無視する。）、ステップＳ４５で刺繍音パターンが検出されたか否かを判定する。刺繍音パターンが検出されていたら、ステップＳ４６で音高ａの音符を和声音、音高ｂの音符を刺繍音とし、ステップＳ４７で、注目コードリズム区間の音符で音高ａを１度としたときの３度音が有るか、無ければ６度音が有るか、無ければ増４度音が有るかを優先準位で検索し、この優先準位で検出された音を和声音とする。そして、ステップＳ４８でその他の音符をその他非和声音とし、ステップＳ４９で注目コードリズム区間の検出フラグを“１”とし、ステップＳ４０２に進む。
【００３９】
このように刺繍音パターンに着目して和声音を検出する一方、ステップＳ４５で刺繍音パターンが検出されていなければ、ステップＳ４０１で図１１の和声音抽出ルール処理を行って刺繍音パターン以外のルールで和声音を抽出し、ステップＳ４０２に進む。そして、一つのコードリズム区間についての処理が終了すると、ステップＳ４０２で現在の注目コードリズム区間が最後のコードリズム区間であるか否かを判定し、最後のコードリズム区間でなければステップＳ４０３で読出しポインタを次のコードリズム区間に更新してステップＳ４２に進み、最後のコードリズム区間であればそのまま元のルーチンに復帰する。
【００４０】
図１１の和声音抽出ルール処理では、ステップＳ４１０で注目コードリズム区間が休符のみであるか否かを判定し、休符のみであればそのまま元のルーチンに復帰し、休符のみでなければステップＳ４１１で音名が１種類であるか否かを判定する。音名が１種類であれば、ステップＳ４１２で全ての音符を和声音としてステップＳ４１８に進む。
【００４１】
一方、ステップＳ４１１で音名が１種類でなければ、ステップＳ４１３で図１２の先取音処理を行う。ここで、図１２の先取音処理は、例えばコードが変化するときに後のコードの構成音を前のコードの最終拍に先行させたアンティシペーションと称する音符に対する処理である。先ず、ステップＳ４２０で「次のコードリズム区間の先頭は音符でかつ４分音符以上の符長である」という条件を満足するか否かを判定し、条件を満足しなければそのまま元のルーチンに復帰し、条件を満足すればステップＳ４２１で現在の注目コードリズム区間の最後が音符ならばその音符を次のコードリズム区間の最初の音符として元のルーチンに復帰する。これによりアンティシペーションの音符が同じコードリズム区間内に配置される。
【００４２】
この先取音処理が終了すると図１１において、ステップＳ４１４で注目コードリズム区間の音符数が３音であるか否かを判定し、３音あれば、ステップＳ４１５で３音の内で最大の音高差をもつ２音を和声音としてステップＳ４１８に進む。３音でなければ、ステップＳ４１６でコードリズム区間の長さの１／２以上の符長の音符（以下、音符ｉという。）があるか否かを判定する。音符ｉが無ければそのまま元のルーチンに復帰し、音符ｉがあれば、ステップＳ４１７で音符ｉを和声音とするとともに、音符ｉをコード構成音とするコードの他のコード構成音があればそれらを和声音としてステップＳ４１８に進む。そして、ステップＳ４１８でその他の音符をその他非和声音とし、ステップＳ４１９で注目コードリズム区間の検出フラグを“１”として元のルーチンに復帰する。
【００４３】
以上のように図１０の和声音抽出処理、図１１の和声音抽出ルール処理および図１２の先取音処理により、メロディの先頭からコードリズム区間の和声音が抽出され、和声音が抽出されたコードリズム区間は検出フラグが“１”となり、和声音が抽出されなかったコードリズム区間は検出フラグが“０”となる。そこで、図１３の和声音再抽出処理によりメロディの最後から検査して検出フラグが“０”のコードリズム区間について和声音を再抽出する。
【００４４】
先ず、ステップＳ５１で読出しポインタをセットして最後のコードリズム区間に注目し、ステップＳ５２で注目コードリズム区間の検出フラグ＝０であるか否かを判定する。検出フラグ＝０でなければすでに和声音が検出されているので、ステップＳ５０１に進み、検出フラグ＝０であれば和声音が検出されていないのでステップＳ５４以降で和声音を検出する。
【００４５】
ステップＳ５４では、注目コードリズム区間が「２音で、かつ、後ろのコードリズム区間の先頭音が和声音で、かつ、これら３音が同方向順次進行である」という条件を満足するか否かを判定し、条件を満足すればステップＳ５５でその３音の先頭音を和声音とし、ステップＳ５９に進む。
【００４６】
一方、ステップＳ５４で条件を満足しなければ、ステップＳ５６で、注目コードリズム区間が「２音で、かつ、後ろのコードリズム区間の音が１音である」という条件を満足するか否かを判定し、条件を満足すればステップＳ５７で２番目の音符を和声音としてステップＳ５９に進み、条件を満足しなければ、ステップＳ５８で、注目コードリズム区間の任意の２音の音高差で３度が有るか、無ければ６度が有るか、無ければ増４度が有るかを優先順位で調べ、その優先順位で検出された音高差をもつ２音を和声音とする。なお、これらの音高差をもつ組のうち最優先順位の同じ度数の組が２つ以上あるときは低音側を優先する。そして、ステップＳ５９でその他の音符をその他非和声音とする。
【００４７】
以上のように一つのコードリズム区間についての和声音の検出が終了すると、ステップＳ５０１で現在注目しているコードリズム区間が最初のコードリズム区間であるか否かを判定し、最初のコードリズム区間でなければステップＳ５３で読出しポインタを直前のコードリズム区間に更新してステップＳ５２に進み、最初のコードリズム区間であればそのまま元のルーチンに復帰する。
【００４８】
以上の処理により、フレーズを１小節または２拍づつに仮分割したコードリズム区間の和声音が抽出される。次に、このコードリズム区間への仮分割が調検出にとって必要以上に分割されている可能性があるので、図１４のコードリズム結合処理により、必要以上に仮分割されたコードリズム区間をそれに含まれる和声音に基づいて結合する処理を行う。
【００４９】
図１４のコードリズム結合処理では、ステップＳ６１で読出しポインタをセットして最初の小節に注目し、ステップＳ６２で注目小節が２拍毎のコードリズム区間に分割されているか否かを判定する。２拍毎のコードリズム区間に分割されていなければ、ステップＳ６４で注目小節に対してその１小節を検出区間として設定し、ステップＳ６６に進む。
【００５０】
一方、注目小節が２拍毎のコードリズム区間に分割されていれば、ステップＳ６３で「注目小節の全ての和声音とマッチする構成音のコードが存在し、かつ、設定されているテンポが４分音符＞４６（４分音符を１拍としたとき１分間に４６拍を超えるテンポ）である」という条件を満足するか否かを判定する。条件を満足すれば、ステップＳ６４で注目小節に対してその１小節を検出区間として設定し、条件を満足しなければ、ステップＳ６５で注目小節に対して２拍毎を検出区間として設定する。そして、以上一つの小節についての処理が終了すると、ステップＳ６６で注目小節が最後の小節であるか否かを判定し、最後の小節でなければステップＳ６７で読出しポインタを次の小節に更新してステップＳ６２に進み、最後の小節であればそのまま元のルーチンに復帰する。
【００５１】
なお、以上のコードリズム結合処理においては、小節が２拍毎のコードリズム区間に仮分割されている場合に、その小節の全ての和声音とマッチする構成音のコードが存在する場合で、さらに、テンポが比較的速い場合は、その小節内で調が変化しない可能性が高いとみなしており、この２拍毎のコードリズム区間を１小節にまとめて検出区間とするようにしている。
【００５２】
以上のようにメロディデータを１小節または２拍に分割して検出区間を決定すると図１５の調検出処理で調検出を行う。先ず、ステップＳ７１で読出しポインタをセットして最初の検出区間に注目し、ステップＳ７２で直前の検出区間の調が確定しているか否かを判定する。直前の検出区間の調が確定していなければ（注目検出区間が最初の検出区間であって直前の検出区間が存在しない場合も含む）、ステップＳ７６で図１６の候補調抽出処理を行って検出区間の候補調を抽出し、ステップＳ７７に進む。
【００５３】
一方、ステップＳ７２で直前の検出区間の調が確定していれば、ステップＳ７３で注目検出区間にその確定している調に対する調外音（調の音階に無い音）が有るか否かを判定し、調外音が有ればステップＳ７６に進み、調外音が無ければステップＳ７４で注目検出区間の調を直前の検出区間の調に確定し、ステップＳ７０５に進む。
【００５４】
ここで、図１６の候補調抽出処理を先に説明する。先ず、ステップＳ８１で注目検出区間の音符の音名をピックアップしてソートし、ステップＳ８２で、前掲の表１の音階音列テーブルのうちソートした音名列に３音名以上含まれる音階音列を検索し、ステップＳ８３で、マッチした音階音列があればマッチした各音階音列と注目検出区間の和声音とが含まれる音階の調を検索し、検出された調（複数あれば複数の調）を注目検出区間の候補調として記憶する。そして、ステップＳ８４で、記憶した候補調から、注目検出区間にその調の５度音および短７度音がある短調を候補調を除き、元のルーチンに復帰する。以上のように候補調を抽出すると、図１５のステップＳ７７以降で所定の条件に合えば調を確定する。
【００５５】
先ず、ステップＳ７７で、条件（Ａ）  「調が確定されていない検出区間から注目検出区間までに調の音階の１度音と７度音とがある長調（ｍａｊ）の候補調」をピックアップし、ステップＳ７８で、条件（Ｂ）  「調が確定されていない検出区間から注目検出区間までに調の音階の１度音と５度音と７度音とがある短調（ｍｉｎｏｒ）  の候補調をピックアップし、ステップＳ７９で、条件（Ｃ）  「調が確定されていない検出区間から注目検出区間までに調の音階の１度音と６度音と７度音とがある短調（ｍｉｎｏｒ）  の候補調をピックアップする。
【００５６】
次に、ステップＳ７０１で条件（Ａ）  〜（Ｃ）  でピックアップされた候補調が有るか否かを判定し、候補調が無ければステップＳ７０２で注目検出区間が最後の検出区間であるか否かを判定する。最後の検出区間であれば、ステップＳ７０３で、調が確定されていない検出区間から注目検出区間までを直前に決定された調に確定して元のルーチンに復帰し、最後の検出区間でなければ調を確定しないでステップＳ７５に進む。
【００５７】
一方、条件（Ａ）  〜（Ｃ）  でピックアップされた候補調が有れば、ステップＳ７０４で、調が確定されていない検出区間から注目検出区間までに候補調として最も多く挙げられた調を、この確定されていない検出区間から注目検出区間までの調として確定して記憶し、ステップＳ７０５に進む。なお、最も多く挙げられた調が複数有るときは前の検出区間（最後に確定された検出区間）の調と同じ調、近親調優先という条件により決定する。また、前の調が確定されてないときは（Ａ）（Ｂ）  （Ｃ）  の優先順位でピックアップされた調に確定する。
【００５８】
以上の一つの検出区間についての処理が終了すると、ステップＳ７０５で注目検出区間が最後の検出区間であるか否かを判定し、最後の検出区間でなければステップＳ７５で読出しポインタを次の検出区間に更新してステップＳ７２に進み、最後の検出区間であれば元のルーチンに復帰する。
【００５９】
以上のように、メロディが和声音とメロディパターンに応じて２拍または１小節の検出区間に分割され、和声音と音名列とにより検出区間毎に候補調が抽出され、この候補調に基づき検出区間毎に調が確定される。なお、図１５のステップＳ７７〜Ｓ７９、ステップＳ７０３およびステップＳ７０４において、「調が確定されていない検出区間から注目検出区間まで」とは、直前の検出区間まで調が確定している場合は注目検出区間だけを指しており、少なくとも調の確定が可能な場合は、検出区間毎に調を確定していることになる。
【００６０】
図１７のコード検出処理では、ステップＳ９１で検出区間が１小節単位で４つ以上連続している部分がある場合（全て１小節単位の場合も含む）の処理を行う。すなわち、コード進行データ中の４コード進行（同期）の４つのコードと４つの検出区間を対応させ、それぞれの検出区間の和声音が対応するコードの構成音に含まれ、かつ、検出区間の１つがフレーズの最初または最後の場合はフレーズの最初または最後に適したコードであるとき、この４つの検出区間のコードをその４コード進行（同期）の４つのコードにそれぞれ決定する。このとき、長調用のＤＢと短調用のＤＢのどちらを用いるかは、前述のようにして求めた調（メジャまたはマイナ）によって決定され、調の主音を考慮することにより、度数で表された和音を実和音に変換することができる。なお、このような４コード進行（同期）が複数ある場合は優先順位に従って決定する。また、フレーズの最初または最後に適したコード群は予めプログラムメモリ２に記憶されており、それらと比較することにより適するか否か判別する。ここで、ある４つの検出区間において、４コード進行（同期）の４つのコードと４つの検出区間の対応がとれたとすると、次はそれに続く新たな４つの検出区間について同様の処理を行う。一方、４つのコードと４つの検出区間との対応がとれなかった場合、４つの検出区間を後方へ１つすらし、前回の後ろ３区間＋新たな１区間の計４区間で同様の処理を行う。このような処理を繰り返し実行することによって、全検出区間について４コード進行（同期）のコードが当てはまる場合を確定していく。
【００６１】
次に、ステップＳ９２で前述Ｓ９１でコードを決定することができなかった検出区間の処理を行う。すなわち、コードが決定されていない検出区間（ステップＳ９１で処理の対象とならなかった検出区間）に対して、コード進行データ中の４コード進行（非同期）の４つのコードと４つの検出区間を対応させ、それぞれの検出区間の和声音が対応するコードの構成音に含まれ、かつ、検出区間の１つがフレーズの最初または最後の場合はフレーズの最初または最後に適したコードであるとき、この４つの検出区間のコードをその４コード進行（非同期）の４つのコードにそれぞれ決定する。なお、このような４コード進行（非同期）が複数ある場合は優先順位に従って決定する。ここで、非同期とは４つのコード進行が必ずしも４つの検出区間と対応するとは限らないことを意味する。すなわち、１つのコードが複数の検出区間に渡ってもよいということである。例えば、Ｃ→Ａｍ  →Ｄｍ７→Ｇ７  という非同期コード進行があったとする。このコード進行を、８つの検出区間に対応させ、Ｃ→Ｃ→Ｃ→Ｃ→Ａｍ  →Ａｍ  →Ｄｍ７→Ｇ７  のように割り振ってもよい。したがって、前述のステップＳ９１において決定できなかった連続する４以上の検出区間に対して非同期コード進行を対応させる場合、まず最初の４区間について該区間に対応するコード進行があるか否かを判断し、あればそのコード進行に決定し、無ければ区間を１つ増やして５区間とする。そしてこの５区間を任意に４区間にグループ化し、グループ化された４区間についてコード進行との一致を判断する。以降、一致するコード進行がないと判断される毎に区間を１つずつ増やして同様の処理を行う。そして、連続する区間の最後まで達しても一致するコード進行が見つからなかった場合は、区間を後方へ１つずらし、同様の処理を行う。これを連続する区間の最後４区間に達するまで繰り返し行う。それでも一致するコード進行が見つからなかったときは次のステップＳ９３へと進む。
【００６２】
次に、ステップＳ９３で、コードが決定されなかった部分で検出区間が少なくとも３つ連続している部分の処理を行う。すなわち、コードが決定されていない検出区間に対して、コード進行データ中の３コード進行の３つのコードと３つの検出区間を対応させ、それぞれの検出区間の和声音が対応するコードの構成音に含まれるとき、この３つの検出区間のコードをその３コード進行の３つのコードにそれぞれ決定する。なお、このような３コード進行が複数ある場合は優先順位に従って決定する。３コード進行の場合は、４コード進行（同期）と同様に、検出区間との対応がとれなかった場合には、検出区間を後方へ１つずらしながら、処理を繰り返す。
【００６３】
次に、ステップＳ９４で、コードが決定されなかった部分で検出区間が少なくとも２つ連続している部分の処理を行う。すなわち、コードが決定されていない検出区間に対して、コード進行データ中の２コード進行の２つのコードと２つの検出区間を対応させ、それぞれの検出区間の和声音が対応するコードの構成音に含まれるとき、この２つの検出区間のコードをその２コード進行の２つのコードにそれぞれ決定する。なお、このような２コード進行が複数ある場合は優先順位に従って決定する。この２コード進行の場合も４コード進行（同期）の場合と同様の処理手順である。
【００６４】
次に、ステップＳ９５で４コード進行、３コード進行および２コード進行でコードが決定されなかった部分の処理を行う。すなわち、コードが決定されていない各検出区間に対して、それぞれの検出区間の和声音が対応するコードの構成音に含まれるコードのうち、優先順位が最も高いコードに決定する。この処理により、コード未決定区間はなくなり、全ての区間のコード決定が完了する。
【００６５】
なお、上記のコード決定の際には、例えば次表２に示したようなメロディと競合するコードは除くようにする。同表は根音が“Ｃ”の場合を示しているが他の根音の場合でもメロディと競合するコードとは同表と同じ音程関係にある。
【００６６】
【表２】
0003591444.tif 000003
【００６７】
この実施例では、フレーズの最初または最後に適したコードであるかを検査しているが、曲の最初または最後に適したコードであるかを検査するようにしてもよい。また、コード進行データはリズム種類、曲風、テンポ、拍子などにより異なるデータベースとしてもっていてもよい。
【００６８】
以上のように、メロディデータの和声音と音名列とを抽出し、この和声音と音名列とを含む音階から調を検出するので、メロディに忠実な調検出を行うことができる。また、メロディデータを和声音とメロディパターンに応じてフレーズより短い２拍または１小節の検出区間に分割し、少なくとも検出可能な検出区間については検出区間毎に調を検出するので、正確な調検出を行うことができる。
【００６９】
なお、実施例では、コードリズム区間を２拍または１小節に分割するようにしているが、この分割の長さをテンポに応じて切り換えるようにしてもよい。
【００７０】
また、実施例では、メロディデータを区間仮分割処理でフレーズに分割し、コードリズム区間抽出処理で１小節または２拍の検出区間に分割するようにしているが、予め決められた区間（１小節単位、１拍単位等）に分割するようにしてもよい。
【００７１】
さらに、実施例では、鍵盤から演奏データを入力するようにしているが、演奏データあるいはメロディデータを例えばＭＩＤＩデータにより外部から供給するようにしてもよい。このとき、ＭＩＤＩや各種ネットワークなどの通信インタフェース、ＦＤやＣＤ−ＲＯＭなどの記憶媒体からメロディデータを供給することができる。また、本願実施例では制御プログラムはプログラムメモリに格納されているものとしているが、外部記憶媒体にプログラムを格納しておき、必要に応じてＣＰＵを有する装置にロードさせて用いるようにしてもよい。
【００７２】
【発明の効果】
以上説明したように本発明の請求項１の演奏データ分析装置によれば、和音進行データベースから、所定区間の演奏データに適合する和音進行を抽出するので、典型的な和音進行の中から和音進行を選択することにより、連続する和音の間で音楽的につながりのよい和音進行を付与することができる。
【００７３】
また、請求項２の演奏データ分析装置によれば、請求項１の効果に加えて、和音進行としての優先順位に従う和音進行を抽出するので、さらにつながりのよい和音進行を付与することができる。
【図面の簡単な説明】
【図１】本発明の実施例のメロディ分析の流れを説明する概念図である。
【図２】実施例の演奏データ分析装置を適用した電子楽器のブロック図である。
【図３】実施例におけるメロディデータと区間分析データの各フォーマットを示す図である。
【図４】実施例における２拍長の特殊パターンを示す図である。
【図５】実施例におけるコード進行データの一例を示す図である。
【図６】実施例におけるメロディ分析処理のフローチャートである。
【図７】実施例におけるデータ入力処理のフローチャートである。
【図８】実施例における区間仮分割処理のフローチャートである。
【図９】実施例におけるコードリズム区間抽出処理のフローチャートである。
【図１０】実施例における和声音抽出処理のフローチャートである。
【図１１】実施例における和声音抽出ルール処理のフローチャートである。
【図１２】実施例における先取音処理のフローチャートである。
【図１３】実施例における和声音再抽出処理のフローチャートである。
【図１４】実施例におけるコードリズム結合処理のフローチャートである。
【図１５】実施例における調検出処理のフローチャートである。
【図１６】実施例におけるコード検出処理のフローチャートである。
【図１７】実施例におけるベースパターンについての音高変換処理のフローチャートである。
【符号の説明】
１…ＣＰＵ、２…プログラムメモリ、３…ワーキングメモリ、４…操作子、６…鍵盤、９…データメモリ、１０…コードシーケンスＤＢ
【図１】
0003591444.tif 000004
【図２】
0003591444.tif 000005
【図３】
0003591444.tif 000006
【図４】
0003591444.tif 000007
【図５】
0003591444.tif 000008
【図６】
0003591444.tif 000009
【図７】
0003591444.tif 000010
【図８】
0003591444.tif 000011
【図９】
0003591444.tif 000012
【図１０】
0003591444.tif 000013
【図１１】
0003591444.tif 000014
【図１２】
0003591444.tif 000015
【図１３】
0003591444.tif 000016
【図１４】
0003591444.tif 000017
【図１５】
0003591444.tif 000018
【図１６】
0003591444.tif 000019
【図１７】
0003591444.tif 000020