(57)【要約】【課題】  コード名検出結果の検出精度を上げるコード名検出装置を提供する。【解決手段】  音響信号の演奏部７０と、複数の小節を含む楽節の区切りを受ける第１の入力部９０と、楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出部１００と、類似性検出状況をユーザに表示する表示部８０と、類似性検出状況の判定を受け付ける第２の入力部１１０と、類似性検出状況の判定で確定できない場合に、閾値を変更させて、楽節類似性検出部１００に、各楽節の類似性の再検出を行わしめると共に、上記判定の確定を受けて、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定部１２０と、その修正部１３０とを有している。【選択図】        図２
2010054535.tif 000002
【特許請求の範囲】
【請求項１】
入力された音響信号に対し、該音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行うコード名検出装置において、
上記音響信号の演奏を行う演奏手段と、
その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力手段と、
上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出手段と、
音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示手段と、
ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力手段と、
上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定手段と
を有することを特徴とするコード名検出装置。
【請求項２】
上記楽節類似性確定手段により、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出させた際に、小節分割及び／又はコードの修正を行える修正手段を備えることを特徴とする請求項１記載のコード名検出装置。
【請求項３】
上記第１の入力手段で受ける楽節の区切りに、さらに、Ａメロ、Ｂメロ、サビ等の楽節の入力を受けることを特徴とする請求項１又は２記載のコード名検出装置。
【請求項４】
請求項１〜３いずれか１つに記載のコード名検出装置において、入力された音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成につき、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と
を少なくとも備える構成からなる請求項１〜３いずれか１つに記載のコード名検出装置。
【請求項５】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
入力された音響信号に対し、該音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成として機能させ、さらに該構成中に、
上記音響信号の演奏を行う演奏手段と、
その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力手段と、
上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出手段と、
音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示手段と、
ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力手段と、
上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定手段と
しての機能を備えさせることを特徴とするコード名検出用コンピュータ・プログラム。
【請求項６】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
入力された音響信号に対し、該音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成として機能させ、さらに該構成中に、
上記音響信号の演奏を行う演奏手段と、
その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力手段と、
上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出手段と、
音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示手段と、
ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力手段と、
上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定手段と、
上記楽節類似性確定手段により、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出させた際に、小節分割及び／又はコードの修正を行える修正手段と
しての機能を備えさせることを特徴とするコード名検出用コンピュータ・プログラム。
【請求項７】
上記第１の入力手段で受ける楽節の区切りに、さらに、Ａメロ、Ｂメロ、サビ等の楽節の入力を受けることを特徴とする請求項５又は６記載のコード名検出用コンピュータ・プログラム。
【請求項８】
コンピュータに読み込まれて実行されることにより、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と
しての機能を、入力された音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成として、さらに該コンピュータに備えさせることを特徴とする請求項５〜７いずれか１つに記載のコード名検出用コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、音楽ＣＤ等の音楽音響信号（オーディオ信号）からその中で演奏されているコード名を検出するコード名検出装置及びコード名検出用コンピュータ・プログラムに関する。
【背景技術】
【０００２】
これまで、オーディオ信号からコード名を自動的に採譜する技術が開示されており、本出願人も、同様な構成について、出願してきた。
【０００３】
通常、楽曲は、楽節が繰り返されてできている。楽節とは、音楽形式で１つのまとまった単位のことで、通常８小節程度である。よく、Ａメロ、Ｂメロ、サビというような用語が使われるが、このＡメロ、Ｂメロ、サビというのが、１つの楽節単位である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、１つの長い楽曲をコード検出した場合、同じ楽節が何度も出てくるが、従来のコード名検出装置や同目的のプログラムでは、その夫々において小節分割の誤りやコード名検出結果の誤りを修正する必要があった。
【０００５】
従来のコード名検出装置においては、その特性上、同じ楽節においては、同じような検出誤りをしてしまうことが多かった。そのため、ユーザは同じような修正を何度も繰り返す必要があり、これは非常に手間のかかる作業であった。
【０００６】
本発明は、以上のような問題に鑑み創案されたもので、コード名検出結果の検出精度を上げると共に、その精度向上の技術を生かして一旦一つの所の訂正を行ったら、即座に他の箇所も同様な訂正が行えるコード名検出装置及びコード名検出用コンピュータ・プログラムを提供せんとするものである。
【課題を解決するための手段】
【０００７】
そこで、本発明では、コード検出後、その検出コードの類似性から同じ楽節部分を検出する構成を創案した。その具体的構成は、
入力された音響信号に対し、該音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行うコード名検出装置において、
上記音響信号の演奏を行う演奏手段と、
その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力手段と、
上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出手段と、
音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示手段と、
ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力手段と、
上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定手段と
を有することを基本的特徴としている。
【０００８】
上記構成では、コード検出後、その検出コードの類似性から、楽節類似性検出手段により同じ楽節部分を検出するのであるが、その際、ユーザが入力するのは、第１の入力手段による楽節の区切り位置だけであり、それがＡメロなのか、Ｂメロなのかというようなことは意識する必要がない。指定された楽節区切りから同じ小節数の楽節同士を比較し、同じようなコード進行であれば同一の楽節であると検出する。その類似性の判断にあたっては、上述のように、楽節類似性検出手段により、区切られた各楽節に対し、それらの小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較し、それらの類似性を表す類似度が所定の閾値以上であるか否かで行う。
【０００９】
それらの類似性のチェックが行われた後、上記楽節類似性検出手段により、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る。これは、その後の楽節類似性確定手段により類似度が特定の閾値以上の楽節同士の一気の確定乃至一気に変更した後そのまま確定する作業をし易くするためである。
【００１０】
もちろん上記楽節類似性検出手段により、楽節の類似性の検出が、必ずしも正しいとは限らないので、確定前に、本構成では、表示手段によりその検出状況を表示させると共に、（必要に応じて演奏手段により元の音響信号を演奏させ）、最終的に、上記類似性検出状況について、第２の入力手段を使用して、ユーザによる判定を受け付けるようにしている。
【００１１】
仮に、上記類似性検出状況の判定について、ユーザにより第２の入力手段において確定しないと入力された場合に、楽節類似性確定手段は、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめることになる。
【００１２】
他方、各楽節の類似性の再検出しないまま、或いはそのような再検出がなされた後、上記判定を確定すると第２の入力手段で入力された場合に、同じ楽節部分（同一のユニークなＩＤがつけられた楽節部分）は、上記楽節類似性確定手段により、同じ小節分割及び同じコードになるように再検出させることになる。これは、楽節の類似性があると確定したのだから、同じ楽節間では、同じ小節の分割や並びになるはずであるし、また各小節中のコードは同じになるはずであるからである。
【００１３】
また、上記楽節類似性確定手段により、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出させた際に、小節分割及び／又はコードの修正を行える修正手段をさらに備えていると良い。第２の発明は以上のような構成を提案する。すなわち、上記楽節類似性確定手段により、同じ楽節部分が、同じ小節分割及び同じコードになっているはずであるが、それが誤っている場合、該修正手段によりこれらの誤りをユーザにより修正できるようにする。その場合、楽節類似性確定手段で同じ楽節と決定した部分は、修正手段で修正後、上記楽節類似性確定手段により、同じ小節分割及び同じコードになるように修正されることになる。そのような構成によって、同じ楽節部分においては、その誤りのある箇所を修正するだけで、同じ楽節の同じ小節を同時に修正することができ、修正の手間を大幅に減らすことが可能となる。
【００１４】
上記構成では、上述のように、コード検出後、その検出コードの類似性から、楽節類似性検出手段により同じ楽節部分を検出するのであるが、その際、ユーザが入力するのは、第１の入力手段による楽節の区切り位置だけであり、それがＡメロなのか、Ｂメロなのかというようなことは意識する必要がない。指定された楽節区切りから同じ小節数の楽節同士を比較し、同じようなコード進行であれば同一の楽節であると検出する。しかし、ユーザが予めその楽節がＡメロ、Ｂメロ或いはサビであると初めから分かっている場合は、楽曲全体としての総合的な構造が初めから明確になり、検出精度がより高まることから、上記第１の入力手段で受ける楽節の区切りに、さらに、Ａメロ、Ｂメロ、サビ等の楽節の入力を受ける構成とするのが、望ましい。第３の発明は、そのような構成について規定している。
【００１５】
さらに上記構成のうち、入力された音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成の１例としては、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と
を少なくとも有する構成が必要である。
【００１６】
上記構成では、入力手段に入力された音響信号から所定の時間毎の各音階音のレベルを音階音レベル検出手段によって求め、上記ビート検出手段によって、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、同じくビート検出手段により、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次に上記小節検出手段により、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置（１拍目の位置）を検出することになる。
【００１７】
すなわち、入力された音響信号から所定の時間毎の各音階音のレベルを求め、この所定の時間毎の各音階音のレベルの変化から平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次にこのビート毎の各音階音のレベルの変化から拍子と小節線位置（１拍目の位置）を検出することになる。
【００１８】
また上記ベース音検出手段において、ベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名を、ベース音と各コード検出範囲における各音階音のレベルから、決定するものとする。
【００１９】
上記構成によれば、入力手段から入力された入力音響信号に対し、第１の音階音レベル検出手段により、所定の時間間隔で、まずビート検出に適したパラメータでＦＦＴ演算を行い、これにより所定の時間毎の各音階音のレベルを求め、ビート検出手段により、この所定の時間毎の各音階音のレベルの変化から平均的なビート間隔と各ビートの位置を検出する。次に、小節検出手段により、このビート毎の各音階音のレベルの変化から拍子と小節線位置を検出する。さらに、本発明のコード名検出装置は、第２の音階音レベル検出手段により、入力音響信号に対し先のビート検出の時とは異なる別の所定の時間間隔で、今度はコード検出に適したパラメータでＦＦＴ演算を行い、これにより所定の時間毎の各音階音のレベルを求める。そしてベース音検出手段により、この各音階音のレベルの内、低域側の音階音のレベルから各小節のベース音を検出し、コード名決定手段により、検出したベース音と各音階音のレベルから各小節のコード名を決定することになる。
【００２０】
また上記のように、ベース音検出手段でこのベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名をベース音と各コード検出範囲における各音階音のレベルから決定することになる。
【００２１】
以上のように、本発明のコード名検出装置の構成では、簡単な構成のみでビート検出という時間分解能が必要な処理（謂わばテンポ検出装置の構成と言って良い）と、和音検出という周波数分解能が必要な処理（上記テンポ検出装置の構成を基にさらに和音を検出できる構成）を同時に行うことができるようになる。
【００２２】
上記構成によって、ビート（拍）間隔、各ビート位置、拍子及び小節（１拍目の位置）の検出ができることとなり、入力手段に入力された音響信号から所定の時間毎の各音階音のパワースペクトルを音階音パワー検出手段によって求め、上記パワー増分値算出手段によって、この所定の時間毎（フレーム毎）の各音階音のパワーの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、さらにビート検出手段により、この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次に上記小節検出手段により、このビート毎の各音階音のパワーの平均値を計算し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す上記値求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置（１拍目の位置）を検出することになる。
【００２３】
それを前提として、第１の発明〜第３の発明の構成により、上述のコード進行の類似性検出による楽曲の構造解析がなされれば、類似性の高い部分から総合的にコード名を決定できるので、コードの検出精度を上げることが可能になる。それと共に、その精度向上の技術を生かして、第２の発明（第３の発明が第２の発明の構成を備えている場合は第３の発明の構成も）の構成では、一旦一つの所の訂正を行ったら、即座に他の箇所も同様な訂正が行えるようになる。
【００２４】
第５の発明〜第８の発明の構成は、第１の発明〜第４の発明の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【００２５】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されて実行されることで、第１の発明〜第４の発明に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【００２６】
そのうち第５の発明のより具体的構成は、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
入力された音響信号に対し、該音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成として機能させ、さらに該構成中に、
上記音響信号の演奏を行う演奏手段と、
その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力手段と、
上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出手段と、
音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示手段と、
ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力手段と、
上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定手段と
しての機能を備えさせるコード名検出用コンピュータ・プログラムである。
【００２７】
第６の発明のより具体的な構成は、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
入力された音響信号に対し、該音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成として機能させ、さらに該構成中に、
上記音響信号の演奏を行う演奏手段と、
その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力手段と、
上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出手段と、
音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示手段と、
ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力手段と、
上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出手段に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定手段と、
上記楽節類似性確定手段により、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出させた際に、小節分割及び／又はコードの修正を行える修正手段と
しての機能を備えさせるコード名検出用コンピュータ・プログラムである。
【００２８】
第７の発明のより具体的構成は、上記第１の入力手段で受ける楽節の区切りに、さらに、Ａメロ、Ｂメロ、サビ等の楽節の入力を受けることを特徴としている。
【００２９】
第８の発明のより具体的な構成は、
コンピュータに読み込まれて実行されることにより、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第１の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める第２の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と
しての機能を、入力された音響信号から、ビートの検出、小節の検出及びコードの検出・決定を行う構成として、さらに該コンピュータに備えさせる第５の発明〜第７の発明のいずれか１つに記載の構成に適用可能なコード名検出用コンピュータ・プログラムである。
【００３０】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【００３１】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【００３２】
尚、第５の発明〜第８の発明のいずれか１つに記載の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能（コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い）によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【００３３】
これは、第１の発明〜第４の発明に規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【００３４】
本発明の構成によれば、コード検出後、そのコード進行の類似性から同じ楽節部分を検出し、類似すると検出されて、確定がなされた場合は、同じ楽節部分は、基本的に同じ小節分割、同じコード進行となるので、コード名の検出精度が極めて高くなるという優れた効果を奏し得る。
【００３５】
また、そのコード検出で誤認識がたとえあったとしても、第２の発明又は第６の発明のように、ユーザによる修正作業が可能な場合は、同一のＩＤがつく箇所の１つを修正するだけで、他の部分は、自動的に修正されるため、ユーザは同じような修正を何度も繰り返す必要がなくなり、修正の手間を大幅に減らすことが可能となる。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の実施の形態を図示例と共に説明する。
【実施例】
【００３７】
図１は、本発明の望ましい実施形態が適用されるパーソナルコンピュータの構成を示している。同図の構成では、後述するＣＤ−ＲＯＭドライブ１０１６に、ＣＤ−ＲＯＭ１０１６ａを入れて、それに読み込ませ、実行された場合に、該パーソナルコンピュータが、本発明のコード名検出装置として利用可能なプログラムが、該ＣＤ−ＲＯＭ１０１６ａに格納されている。従って、このＣＤ−ＲＯＭ１０１６ａを上記ＣＤ−ＲＯＭドライブ１０１６に読み込ませて実行させ、パーソナルコンピュータ上に、本発明のコード名検出装置が実現されることになる。
【００３８】
図１に示されるパーソナルコンピュータの回路概要は、システムバス１０００を介して、ＣＰＵ１００２、ＲＯＭ１００４、ＲＡＭ１００６、画像コントロール部（図示無し）を介して接続されるディスプレイ１００８、Ｉ／Ｏインターフェース１０１０、ハードディスクドライブ１０２０がつながっており、該システムバス１０００を介して、夫々のデバイスに制御信号、データの入出力がなされることになる。
【００３９】
ＣＰＵ１００２は、ＣＤ−ＲＯＭドライブ１０１６により上記ＣＤ−ＲＯＭ１０１６ａから読み込まれ、ハードディスクドライブ１０２０乃至ＲＡＭ１００６に格納される上記プログラムに基づき、コード名検出装置全体の制御を行う中央演算処理装置である。また後述するビート検出用音階音レベル検出部２０、ビート検出部２５、小節検出部３０、コード検出用音階音レベル検出部４０、ベース音検出部５０、コード名決定部６０、楽節類似性検出部１００や楽節類似性確定部１２０は、上記プログラムが稼働した該ＣＰＵ１００２によって構成されることになる。
【００４０】
ＲＯＭ１００４は、本パーソナルコンピュータのＢＩＯＳなどが記憶されている格納領域である。
【００４１】
ＲＡＭ１００６は、本プログラムの格納エリアの他、ワークエリア、種々の係数、ＦＦＴ演算時に使用するビートやコード検出に適した各パラメータ等の、一時的な記憶領域（例えば後述するような各バッファや各変数を一時的に記憶しておく）等として使用される。
【００４２】
ディスプレイ１００８は、ＣＰＵ１００２の指令により、必要な画像処理を行う画像コントロール部（図示無し）によって、制御されており、その画像処理結果を表示する。後述する表示部８０がそれに相当する。
【００４３】
Ｉ／Ｏインターフェース１０１０は、これを介してシステムバス１０００につながるキーボード１０１２、サウンドシステム１０１４、ＣＤ−ＲＯＭドライブ１０１６及びマウス１０１８に接続されており、これらのデバイスとシステムバス１０００上につながった上記デバイスとの間で、制御信号やデータの入出力がなされることになる。
【００４４】
このサウンドシステム１０１４は、後述する入力部１０を構成するが、その他に、入力し記憶された音響信号を出力する後述する演奏部７０を構成している。
【００４５】
またＣＤ−ＲＯＭドライブ１０１６は、コード名検出用のプログラムが格納されたＣＤ−ＲＯＭ１０１６ａから、該プログラムやデータなどを読み出す。そのプログラムやデータなどは、ハードディスクドライブ１０２０に格納され、またメインとなるプログラムは上記ＲＡＭ１００６上に格納され、ＣＰＵ１００２により実行される。
【００４６】
上述のように、ハードディスクドライブ１０２０は、上記コード名検出用プログラムの読み込み及びその実行によって、該プログラム自身と必要なデータ等を格納する。該データとしては、後述するＦＦＴ演算による、所定の時間毎の各音階音のレベルを求めることにより得られる、ビート検出に適したパラメータやコード検出に適したパラメータ、或いは閾値などを含む各種パラメータなどがあり、ハードディスクドライブ１０２０は、ＲＡＭ１００６と共に上記各バッファやこれらのパラメータ、閾値などを記憶する。さらに後述するコード情報記憶部６２や音響信号記憶部７１としても機能する。該ハードディスクドライブに記憶されるデータは、サウンドシステム１０１４やＣＤ−ＲＯＭドライブ１０１６から入力されるものと同等の音響信号（演奏データなど）や、後述する第１の入力部９０や第２の入力部１１０或いは修正部１３０等からのデータや指示などが含まれる。
【００４７】
本実施形態に係るコード名検出用プログラムを、パーソナルコンピュータ（ＲＡＭ１００６及びハードディスクドライブ１０２０）に読み込ませて、（ＣＰＵ１００２に）実行させることで、図２に示すようなコード名検出装置の構成となる。
【００４８】
さらに、上記キーボード１０１２とマウス１０１８などの入力機器は、後述する第１の入力部９０や第２の入力部１１０或いは修正部１３０を構成することになる。
【００４９】
図２は、本発明に係るコード名検出装置の全体ブロック図である。同図によれば、本コード名検出装置の構成は、音響信号を入力する入力部１０と、入力された音響信号から、所定の時間間隔（所定のフレーム；窓）で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求めるビート検出用音階音レベル検出部２０と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部２５と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部３０と、上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求めるコード検出用音階音レベル検出部４０と、検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出部５０と、検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定部６０と、検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶部６２と、入力された音響信号を記憶しておく音響信号記憶部７１と、その音響信号の演奏を行う演奏部７０と、その演奏に従って、ユーザによる、複数の小節を含む楽節の区切りを受ける第１の入力部９０と、上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る楽節類似性検出部１００と、音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する表示部８０と、ユーザによる、上記類似性検出状況の判定を受け付ける第２の入力部１１０と、上記類似性検出状況の判定について確定しないと入力された場合に、上記閾値を変更させて、上記楽節類似性検出部１００に、各楽節の類似性の再検出を行わしめると共に、上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように再検出させる楽節類似性確定部１２０と、上記楽節類似性確定部１２０により、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出させた際に、小節分割及び／又はコードの修正を行える修正部１３０とを有している。
【００５０】
音楽音響信号を入力する上記入力部１０は、コード名検出をする対象の音楽音響信号を入力する部分であり、上述のように、サウンドシステム１０１４により構成されている。マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器（図示無し）によりディジタル信号に変換しても良いし、音楽ＣＤなどのディジタル化された音楽データの場合は、そのままファイルとして取り込み（リッピング）、これを指定して開くようにしても良い。このようにして入力したディジタル信号がステレオの場合、後の処理を簡略化するためにモノラルに変換する。
【００５１】
このディジタル信号は、ビート検出用音階音レベル検出部２０に入力される。このビート検出用音階音レベル検出部２０は、コード名検出用プログラムが読み込まれて実行され、上記ＣＰＵ１００２により構成され、上述のように、入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める機能を有している。該構成は、さらに、図３の各部から構成される。
【００５２】
そのうち波形前処理部２１は、音楽音響信号の上記入力部１０からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする構成である。
【００５３】
ダウンサンプリングレートは、ビート検出に使う楽器の音域によって決定する。すなわち、シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、ダウンサンプリング後のサンプリング周波数はそれほど高くする必要はない。
【００５４】
例えば検出する最高音をＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数は、ナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【００５５】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。
【００５６】
このようにダウンサンプリングの処理を行うのは、この後のＦＦＴ演算において、同じ周波数分解能を得るために必要なＦＦＴポイント数を下げることで、ＦＦＴの演算時間を減らすのが目的である。
【００５７】
なお、音楽ＣＤのように、音源が固定のサンプリング周波数で既にサンプリングされている場合は、このようなダウンサンプリングが必要になるが、音楽音響信号の入力部１０が、マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器によりディジタル信号に変換するような場合には、当然Ａ／Ｄ変換器のサンプリング周波数を、ダウンサンプリング後のサンプリング周波数に設定することで、この波形前処理部２１を省くことが可能である。
【００５８】
このようにして波形前処理部２１によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部２１の出力信号を、ＦＦＴ演算部２２によりＦＦＴ（高速フーリエ変換）する。
【００５９】
このＦＦＴ演算部２２は、上記プログラムが稼働した該ＣＰＵ１００２によって構成されている。そしてＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出に適した値とする。つまり、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性を考慮しなくてはならない。つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし残りは０で埋めることによって、ＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、低音側のパワーも正しく検出するためには、ある程度の波形サンプル数は必要である。
【００６０】
以上のようなことを考慮し、本実施例では、ＦＦＴポイント数５１２、窓のシフトは３２サンプルで、０埋めなしという設定にした。このような設定でＦＦＴ演算を行うと、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚとなる。時間分解能約８．７ｍｓという値は、四分音符＝３００のテンポの曲で、３２分音符の長さが、２５ｍｓであることを考えると、十分な値であることがわかる。
【００６１】
このようにして、所定の時間間隔毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワースペクトルのレベルが計算され、その結果がレベル検出部２３に送られる。
【００６２】
レベル検出部２３では、同じく上記プログラムが稼働した該ＣＰＵ１００２によって構成されており、ＦＦＴ演算部２２で計算されたパワースペクトルから、各音階音のレベルを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワースペクトルから各音階音のレベルを検出するために、以下のような処理を行う。つまり、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワースペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
【００６３】
すべての音階音についてレベルが検出されたら、これをバッファ２４に保存し、波形の読み出し位置を所定の時間間隔（先の例では３２サンプル）進めて、ＦＦＴ演算部２２とレベル検出部２３を波形の終わりまで繰り返す。
【００６４】
以上により、音楽音響信号の入力部１０に入力された音響信号の、所定時間毎の各音階音のパワーが、バッファ２４に保存される。
【００６５】
上記ビート検出部２５は、同じくコード名検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのＣＰＵ１００２により構成されている。それは、上述のように、所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出する機能を有している。
【００６６】
次に、図１のビート検出部２５の構成について説明する。該ビート検出部２５は、図４のような処理の流れで実行される。
【００６７】
ビート検出部２５は、ビート検出用音階音レベル検出部２０が出力した所定時間（以下、この１所定時間を１フレームと呼ぶ）毎の各音階音のレベルの変化を元に、平均的なビート（拍）間隔（つまりテンポ）とビートの位置を検出する。そのために、まずビート検出部２５は、各音階音のレベル増分値の合計（前のフレームとのレベルの増分値をすべての音階音で合計したもの。前のフレームからレベルが減少している場合は０として加算する）を計算する（ステップＳ１００）。
【００６８】
この各音階音のレベル増分値を算出する構成では、上記ビート検出用音階音レベル検出部２０により、後述する図５の中段に示されるように検出される、この所定の時間（上述のように１フレームと呼ぶ）毎の各音階音のパワースペクトル（図５の例ではＣ１〜Ａ６の縦方向に夫々示されたパワースペクトル）の増分値を、すべての音階音について合計しており、それによって、所定の時間毎の全体の音の変化度合いを示す、後述図５の下段に示されるレベルの増分値の合計が求められることになる。
【００６９】
すなわち、各音階音のレベル増分値を算出する構成では、各音階音のレベル増分値の合計（前のフレームとのレベルの増分値をすべての音階音で合計したもの。前のフレームからレベルが減少している場合は０として加算する）を算出する。
【００７０】
つまり、フレーム時間ｔにおけるｉ番目の音階音のレベルをＬｉ（ｔ）とするとき、ｉ番目の音階音のレベル増分値Ｌａｄｄｉ（ｔ）は、下式数１に示すようになり、このＬａｄｄｉ（ｔ）を使って、フレーム時間ｔにおける各音階音のレベル増分値の合計Ｌ（ｔ）は、下式数２で計算できる。ここで、Ｔは音階音の総数である。
【００７１】
【数１】
2010054535.tif 000003
【００７２】
【数２】
2010054535.tif 000004
【００７３】
この合計Ｌ（ｔ）値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
【００７４】
例として、図５に、ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のレベルを濃淡で表したもの（下が低い音、上が高い音。この図では、Ｃ１からＡ６の範囲）、下段がフレーム毎の各音階音のレベル増分値の合計を示している。この図の各音階音のレベルは、ビート検出用音階音レベル検出部２０から出力されたものであるので、周波数分解能が約７．２Ｈｚであり、Ｇ＃２以下の一部の音階音でレベルが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のレベルが測定できないのは、問題ない。
【００７５】
この図の下段に見られるように、各音階音のレベル増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
【００７６】
上述のように、ビート検出部２５は、ビート検出用音階音レベル検出部２０が出力した所定時間毎の各音階音のレベルの変化を元に、平均的なビート（拍）間隔（つまりテンポ）とビートの位置を検出するが、そのために、該ビート検出部２５は、ビートの位置を求めることを目的として、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のレベル増分値の合計の自己相関から計算できる（図４；ステップＳ１０２）。
【００７７】
あるフレーム時間ｔにおける各音階音のレベル増分値の合計をＬ（ｔ）とすると、この自己相関φ（τ）は、以下の式数３で計算される。
【００７８】
【数３】
2010054535.tif 000005
ここで、Ｎは総フレーム数、τは時間遅れである。
【００７９】
自己相関計算の概念図を、図６に示す。この図のように、時間遅れτがＬ（ｔ）のピークの周期の整数倍の時に、φ（τ）は大きな値となる。よって、ある範囲のτについてφ（τ）の最大値を求めれば、曲のテンポを求めることができる。
【００８０】
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符＝３０から３００の範囲を計算するならば、自己相関を計算する範囲は、０．２秒から２秒となる。時間（秒）からフレームへの変換式は、以下の数４式に示す通りとなる。
【００８１】
【数４】
2010054535.tif 000006
【００８２】
この範囲の自己相関φ（τ）が最大となるτをビート間隔としても良いが、必ずしもすべての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め（図４；ステップＳ１０４）、これら複数の候補からユーザにビート間隔を決定させるのが良い（図４；ステップＳ１０６）。
【００８３】
このようにしてビート間隔が決定したら（決定したビート間隔をτｍａｘとする）、まず最初に先頭のビート位置を決定する。
【００８４】
先頭のビート位置の決定方法を、図７を用いて説明する。図７の上段はフレーム時間ｔにおける各音階音のレベル増分値の合計Ｌ（ｔ）で、下段Ｍ（ｔ）は決定したビート間隔τｍａｘの周期で値を持つ関数である。式で表すと、下式数５に示すようになる。
【００８５】
【数５】
2010054535.tif 000007
【００８６】
この関数Ｍ（ｔ）を、０からτｍａｘ−１の範囲でずらしながら、Ｌ（ｔ）とＭ（ｔ）の相互相関を計算する。
【００８７】
相互相関ｒ（ｓ）は、上記Ｍ（ｔ）の特性から、下式数６で計算できる。
【００８８】
【数６】
2010054535.tif 000008
【００８９】
この場合のｎは、最初の無音部分の長さに応じて適当に決めれば良い（図７の例では、ｎ＝１０）。
【００９０】
ｒ（ｓ）をｓが０からτｍａｘ−１の範囲で求め、ｒ（ｓ）が最大となるｓを求めれば、このｓのフレームが最初のビート位置である。
【００９１】
最初のビート位置が決まったら、それ以降のビートの位置を１つずつ決定していく（図４；ステップＳ１０８）。
【００９２】
その方法を、図８を用いて説明する。図８の三角印の位置に先頭のビートが見つかったとする。２番目のビート位置は、この先頭のビート位置からビート間隔τｍａｘだけ離れた位置を仮のビート位置とし、その近辺でＬ（ｔ）とＭ（ｔ）が最も相関が取れる位置から決定する。つまり、先頭のビート位置をｂ０とするとき、以下の式のｒ（ｓ）が最大となるようなｓの値を求める。この式のｓは仮のビート位置からのずれで、以下の式数７の範囲の整数とする。Ｆは揺らぎのパラメータで０．１程度の値が適当であるが、テンポの揺らぎの大きい曲では、もっと大きな値にしてもよい。ｎは５程度でよい。
【００９３】
ｋは、ｓの値に応じて変える係数で、例えば図９のような正規分布とする。
【００９４】
【数７】
2010054535.tif 000009
【００９５】
ｒ（ｓ）が最大となるようなｓの値が求まれば、２番目のビート位置ｂ１は、下式数８で計算される。
【００９６】
【数８】
2010054535.tif 000010
【００９７】
以降、同じようにして３番目以降のビート位置も求めることができる。
【００９８】
テンポがほとんど変わらない曲ではこの方法でビート位置を曲の終わりまで求めることができるが、実際の演奏は多少テンポが揺らいだり、部分的にだんだん遅くなったりすることがよくある。
【００９９】
そこで、これらのテンポの揺らぎにも対応できるように以下のような方法を考えた。
【０１００】
つまり、図８のＭ（ｔ）の関数を、図１０のように変化させるものである。
１）は、従来の方法で、図のように各パルスの間隔をτ１、τ２、τ３、τ４としたとき、
τ１＝τ２＝τ３＝τ４＝τｍａｘ
である。
２）は、τ１からτ４を均等に大きくしたり小さくしたりするものである。
τ１＝τ２＝τ３＝τ４＝τｍａｘ＋ｓ  (-τｍａｘ・Ｆ≦ｓ≦τｍａｘ・Ｆ）これにより、急にテンポが変わった場合に対応できる。
３）は、ｒｉｔ．（リタルダンド、だんだん遅く）又は、ａｃｃｅｌ．（アッチェレランド、だんだん速く）に対応したもので、各パルス間隔は、
τ１＝τｍａｘ
τ２＝τｍａｘ＋１・ｓ
τ３＝τｍａｘ＋２・ｓ  （-τｍａｘ・Ｆ≦ｓ≦τｍａｘ・Ｆ）
τ４＝τｍａｘ＋４・ｓ
で計算される。
１、２、４の係数は、あくまで例であり、テンポ変化の大きさによって変えてもよい。
４）は、３）のようなｒｉｔ．やａｃｃｅｌ．の場合の、５個のパルスの位置のどこが現在ビートを求めようとしている場所かを変えるものである。
【０１０１】
これらをすべて組み合わせて、Ｌ（ｔ）とＭ（ｔ）の相関を計算し、それらの最大からビート位置を決めれば、テンポが揺らぐ曲に対してもビート位置の決定が可能である。なお、２）と３）の場合には、相関を計算するときの係数ｋの値を、やはりｓの値に応じて変えるようにする。
【０１０２】
さらに、５個のパルスの大きさは現在すべて同じにしてあるが、ビートを求める位置（図１０の仮のビート位置）のパルスのみ大きくしたり、ビートを求める位置から離れるほど値を小さくして、ビートを求める位置の各音階音のレベル増分値の合計を強調するようにしてもよい［図１０の５）］。
【０１０３】
以上のようにして、各ビートの位置が決定したら、この結果をバッファ２６に保存すると共に、検出した結果を表示部８０を介して表示し、ユーザに確認してもらい、間違っている箇所を修正してもらうようにしてもよい。
【０１０４】
ビート検出結果の確認画面の例を、図１１に示す。同図の三角印の位置が検出したビート位置である。
【０１０５】
「再生」のボタンを押すと、上記演奏部７０により、現在の音楽音響信号が、Ｄ／Ａ変換され、スピーカ等から再生される。現在の再生位置は、図のように縦線等の再生位置ポインタで表示されるので、演奏を聞きながら、ビート検出位置の誤りを確認できる。さらに、検出の元波形の再生と同時に、ビート位置のタイミングで例えばメトロノームのような音を再生させるようにすれば、目で確認するだけでなく音でも確認でき、より容易に誤検出を判断できる。このメトロノームの音を再生させる方法としては、例えばＭＩＤＩ機器等が考えられる。
【０１０６】
ビート検出位置の修正は、「ビート位置の修正」ボタンを押して行う。このボタンを押すと、画面に十字のカーソルが現れるので、最初のビート検出が間違っている箇所で正しいビート位置をクリックする。クリックされた場所の少し前（例えばτｍａｘの半分の位置）から後のビート位置をすべてクリアし、クリックされた場所を、仮のビート位置として、以降のビート位置を再検出する。
【０１０７】
次に、上記小節検出部３０による拍子および小節の検出について説明する。
【０１０８】
上記小節検出部３０は、同じくコード名検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのＣＰＵ１００２により構成されている。それは、上述のように、上記ビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する機能を有している。
【０１０９】
上記ビート検出部２５によるこれまでの処理で、ビートの位置が確定しているので、上記小節検出部３０によって、まずはビート毎の音の変化度合いを求める。このビート毎の音の変化度合いは、ビート検出用音階音レベル検出部２０が出力した、フレーム毎の各音階音のレベルから計算する。
【０１１０】
ｊ番目のビートのフレーム数をｂｊとし、その前後のビートのフレームをｂｊ−１、ｂｊ＋１とする時、ｊ番目のビートのビート毎の音の変化度合いは、フレームｂｊ−１からｂｊ−１までのフレームの各音階音のパワーの平均とフレームｂｊからｂｊ＋１−１までのフレームの各音階音のレベルの平均を計算し、その増分値から各音階音のビート毎の音の変化度合いを求め、それらをすべての音階音で合計して計算することができる。
【０１１１】
つまり、フレーム時間ｔにおけるｉ番目の音階音のレベルをＬｉ（ｔ）とするとき、ｊ番目のビートのｉ番目の音階音のレベルの平均Ｌａｖｇｉ（ｊ）は、下式数９であるから、ｊ番目のビートのｉ番目の音階音のビート毎の音の変化度合いＢａｄｄｉ（ｊ）は、下式数１０に示すようになる。
【０１１２】
【数９】
2010054535.tif 000011
【０１１３】
【数１０】
2010054535.tif 000012
【０１１４】
よって、ｊ番目のビートのビート毎の音の変化度合いＢ（ｊ）は、下式数１１に示すようになる。ここで、Ｔは音階音の総数である。
【０１１５】
【数１１】
2010054535.tif 000013
【０１１６】
図１２の最下段は、このビート毎の音の変化度合いである。さらに、上記小節検出部３０は、このビート毎の音の変化度合いから、拍子と１拍目の位置を求める。
【０１１７】
拍子は、ビート毎の音の変化度合いの自己相関から求める。一般的に音楽は１拍目で音が変わることが多いと考えられるので、このビート毎の音の変化度合いの自己相関から拍子を求めることができる。例えば、下式数１２に示す自己相関φ（τ）を求める式から、ビート毎の音の変化度合いＢ（ｊ）の自己相関φ（τ）を遅れτが、２から４の範囲で求め、自己相関φ（τ）が最大となる遅れτを拍子の数とする。
【０１１８】
【数１２】
2010054535.tif 000014
【０１１９】
Ｎは、総ビート数、τ＝２〜４の範囲でφ（τ）を計算し、φ（τ）が最大となるτを拍子の数とする。
【０１２０】
次に１拍目を求めるが、これは、ビート毎の音の変化度合いＢ（ｊ）がもっとも大きい箇所を１拍目とする。つまり、φ（τ）が最大となるτをτｍａｘ、下式数１３のＸ（ｋ）が最大となるｋをｋｍａｘとするとき、ｋｍａｘ番目のビートが最初の１拍目の位置となり、以降、τｍａｘを足したビート位置が１拍目となる。
【０１２１】
【数１３】
2010054535.tif 000015
ｎｍａｘは、τｍａｘ・ｎ＋ｋ＜Ｎの条件で最大となるｎ
【０１２２】
以上のようにして、小節検出部３０により、拍子及び１拍目の位置（小節線の位置）が決定したら、この結果をバッファ３１に保存すると共に、検出した結果を表示部８０を使用して画面表示し、ユーザに変更させるようにすることが望ましい。特に変拍子の曲は、この方法では対応できないので、変拍子の箇所をユーザに指定してもらう必要がある。
【０１２３】
以上の構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート（拍）の位置、さらに曲の拍子と１拍目の位置を検出することが可能となる。
【０１２４】
次に、コード名検出用の構成につき、以下に説明する。
【０１２５】
上記コード検出用音階音レベル検出部４０は、同じくコード名検出用プログラムが読み込まれて実行され、上記ＣＰＵ１００２により構成され、上述のように、入力部１０で入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、所定の時間毎の各音階音のレベルを求める機能を有している。
【０１２６】
上記入力部１０から入力されてくる音響ディジタル信号は、ビート検出用音階音レベル検出部２０とコード検出用音階音レベル検出部４０とに入力される。これらの音階音レベル検出部は、どちらも上記図３の各部から構成され、構成はまったく同じなので、同じものをパラメータだけを変えて再利用できる。
【０１２７】
そしてコード検出用音階音レベル検出部４０の構成として使用される波形前処理部２１は、上記と同様な構成であり、音楽音響信号の上記入力部１０からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする。（ただし、ダウンサンプリング後のサンプリング周波数、つまり、ダウンサンプリングレートは、ビート検出用とコード検出用で変えるようにしても良いし、ダウンサンプリングする時間を節約するために同じにしても良い。）
【０１２８】
コード検出用の波形前処理部のダウンサンプリングレートは、コード検出音域によって変える。コード検出音域とは、コード名決定部６０でコード検出するときに使う音域のことである。例えばコード検出音域をＣ３からＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数はナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【０１２９】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。これについては、上述したことと同じ理由による。
【０１３０】
このようにして波形前処理部２１によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号をＦＦＴ演算部２２により、ＦＦＴ（高速フーリエ変換）する。
【０１３１】
ＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出時とコード検出時で異なる値とする。これは、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性によるものである（つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い）。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし、残りは０で埋めることによってＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、本実施例のケースでは、低音側のパワーも正しく検出するためにある程度の波形サンプル数は必要である。
【０１３２】
以上のようなことを考慮し、本実施例では、ビート検出時はＦＦＴポイント数５１２、窓のシフトは３２サンプルで、０埋めなし、コード検出時はＦＦＴポイント数８１９２、窓のシフトは１２８サンプルで、波形サンプルは一度のＦＦＴで１０２４サンプル使うようにした。このような設定でＦＦＴ演算を行うと、ビート検出時は、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚ、コード検出時は、時間分解能約３５ｍｓ、周波数分解能約０．４Ｈｚとなる。今レベルを求めようとしている音階音は、Ｃ１からＡ６の範囲であるので、コード検出時の周波数分解能約０．４Ｈｚは、最も周波数差の小さいＣ１とＣ＃１の基本周波数の差、約１．９Ｈｚにも対応できる。また、四分音符＝３００のテンポの曲で３２分音符の長さが２５ｍｓであることを考えると、ビート検出時の時間分解能約８．７ｍｓは、十分な値であることがわかる。
【０１３３】
このようにして、所定の時間間隔毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部２３に送られる。
【０１３４】
レベル検出部２３では、ＦＦＴ演算部２２で計算されたパワー・スペクトルから、各音階音のレベルを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、ビート検出用音階音レベル検出部２０の構成と同様な処理を行う。すなわち、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
【０１３５】
すべての音階音についてレベルが検出されたら、これをバッファ４１に保存し、波形の読み出し位置を所定の時間間隔（先の例ではビート検出時は３２サンプル、コード検出時は１２８サンプル）進めて、ＦＦＴ演算部２２とレベル検出部２３の処理を波形の終わりまで繰り返す。
【０１３６】
以上により、音楽音響信号の入力部１に入力された音響信号の、所定時間毎の各音階音のレベルが、コード検出用のバッファ４１にも保存される。
【０１３７】
また上記ベース音検出部５０は、同じくコード名検出用プログラムが読み込まれて実行され、上記ＣＰＵ１００２により構成され、上述のように、上記コード検出用音階音レベル検出部４０で検出された各音階音のレベルのうち、上記小節検出部３０で検出された各小節内における低域側の音階音のレベルから、ベース音を検出する機能を有している。すなわち、ベース音は、コード検出用音階音レベル検出部４０が出力された各フレームの音階音のレベルから検出される。
【０１３８】
図１３に、上記図５と同じ曲の同じ部分について、コード検出用音階音レベル検出部４０により出力された各フレームの音階音のレベルを示す。この図のように、コード検出用音階音レベル検出部４０での周波数分解能は、約０．４Ｈｚであるので、Ｃ１からＡ６のすべての音階音のレベルが抽出されている。
【０１３９】
ベース音は、小節の前半と後半で異なる可能性があるので、ベース音検出部５０により、各小節の前半と後半でそれぞれ検出する。前半と後半のベース音が同じ音のときは、小節のベース音としてこれを確定し、コードも小節全体で検出する。前半と後半で別の音のベース音が検出されたときは、コードも前半と後半に分けて検出する。場合によっては、分割する範囲を更に半分にまで（小節の４分の１まで）狭めてもよい。
【０１４０】
本実施例では、ベース音決定部５０で、小節をどのように分割してコードを検出するかを決定しているが、小節の分割方法はこれに限るものではなく、例えば、本出願人による先行出願、特願２００６−２１６３６１にあるようにコード検出音域の音の変化によって小節を分割してもよい。また、この小節分割処理を、ベース音検出部５０で行うのではなく、独立した構成として設けてもよい。
【０１４１】
さらに、後述するように、楽節類似性確定部１２０により、同じ楽節部分が、同じ小節分割になるように再検出させる処理を指示した場合は、同ベース音検出部５０の構成が行うことになる。これはもともとベース音決定部５０が、小節をどのように分割してコードを検出するかを決定しているからである。但し、該コード検出部５０にこのうな機能を持たせなくても、上記指示が楽節類似性確定部１２０により出された場合、それを受けて同じ楽節部分が、同じ小節分割になるようにする小節分割部（図示なし）として独立した構成として設けても良い。
【０１４２】
ベース音は、ベース検出期間におけるベース検出音域の音階音のレベルの平均的な強さから求める。すなわちこれがベース音の強度である。
【０１４３】
フレーム時間ｔにおけるｉ番目の音階音のレベルをＬｉ（ｔ）とすると、フレームｆｓからｆｅのｉ番目の音階音の平均的なレベルＬａｖｇｉ（ｆｓ，ｆｅ）は、下式数１４で計算できる。
【０１４４】
【数１４】
2010054535.tif 000016
【０１４５】
この平均的なレベルをベース検出音域、例えばＣ２からＢ３の範囲で計算し、平均的なレベルが最も大きな音階音をベース音として、ベース音検出部５０は、決定する。ベース検出音域に音が含まれない曲や無音部分で間違ってベース音を検出しないために、適当な閾値を設定し、検出したベース音の平均的なレベルが、この閾値以下の場合は、ベース音を検出しないようにしてもよい。また、後のコード検出でベース音を重要視する場合には、検出したベース音がベース検出期間中継続してあるレベル以上を保っているかどうかをチェックするようにして、より確実なものだけをベース音として検出するようにしてもよい。さらに、ベース検出音域中、平均的なレベルが最も大きい音階音をベース音として決定するのではなく、この各音名の平均的なレベルを１２の音名毎に平均し、この音名毎のレベルが最も大きな音名をベース音名として決定し、その音名を持つベース検出音域の中の音階音で、平均的なレベルが最も大きい音階音をベース音として決定するようにしてもよい。
【０１４６】
ベース音が決定したら、この結果をバッファ５１に保存すると共に、ベース検出結果を上記表示部８０に表示して、間違っている場合にはユーザに修正させるようにしてもよい。また、曲によってベース音域が変わることも考えられるので、ユーザがベース検出音域を変更できるようにしてもよい。
【０１４７】
図１４に、ベース音検出部５０によるベース検出結果の表示例を示す。
【０１４８】
上記コード名決定部６０は、同じくコード名検出用プログラムが読み込まれて実行され、上記ＣＰＵ１００２により構成され、上述のように、ベース音検出部５０で検出されたベース音と各音階音のレベルから、各小節のコード名を決定する機能を有している。その他、後述するように、楽節類似性確定部１２０により、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出させる処理を指示した場合は、同コード名決定部６０の構成が、該コードの再検出を行うことになる。
【０１４９】
コード名決定部６０によるコード検出処理も、同じようにコード検出期間における各音階音の平均的なレベルを計算することによって決定する。すなわちこれがコードの強度である。
【０１５０】
本実施例では、コード検出期間とベース検出期間は同一としている。コード検出音域、例えばＣ３からＡ６の各音階音のコード検出期間における平均的なレベルを計算し、これが大きな値を持つ音階音から順に数個の音名を検出し、これとベース音の音名からコード名候補を抽出する。
【０１５１】
上記コード情報記憶部６２は、検出した上記データを記憶する構成であり、上記ＲＡＭ１００６やハードディスクドライブ１０２０で構成される。
【０１５２】
該コード情報記憶部６２には、コード名検出の過程において、コード位置にはベース音検出期間の最初のフレーム番号（コード１、コード２、……）が記憶され、ベース域音階音強度には、ベース音域内であって、ベース音検出期間のＣ〜Ｂまでの各１２音の強度の区間平均が記憶される。フレーム番号はサンプルにも変換できるのでサンプル番号で記憶しても良い。また、ベース音には、ベース音検出期間において検出されたベース音の音階番号が記憶される。コード音階音強度には、ベース検出期間のＣ〜Ｂまでの各１２音の強度の区間平均が記憶され、コード構成音には、ベース検出期間において抽出されたコード構成音が記憶される。そしてコード名には、決定されたコード名（或いはそれに対応した番号でも良い）が記憶される。
【０１５３】
コード名決定部６０は、コード情報記憶部６２を参照してコード名を決定する。コード名決定部６０はコードのタイプ（ｍ、Ｍ７等）とコード構成音のルート音からの音程を保存したコード名データベースから、１つのコード名とそのコード構成音を検索する。そのコード構成音の平均強度を、コード情報記憶部６２のコード音階音強度より算出する。全てのコードのコード構成音平均強度が最も大きいコード名を、その区間のコード名と決定する。このとき、コードのルート音（根音）や５度の音は、コードを演奏する楽器では省略されることがあるので、これらを含まなくてもコード名候補として抽出するようにする。ベース音を検出した場合には、このコード名候補のコード名にベース音の音名を加える。すなわち、コードのルート音とベース音が同じ音名であれば、そのままで良いし、異なる音名の場合は分数コードとする。また、コード構成音平均強度が比較的大きなものを表示部８０に複数表示して、ユーザーに選択させるようにしても良い。
【０１５４】
上記方法では、抽出されるコード名候補が多すぎるという場合には、ベース音による限定を行ってもよい。つまり、ベース音が検出された場合には、コード名候補の中でそのルート音がベース音と同じ音名でないものは削除する。
【０１５５】
さらに、このコード構成音平均強度の計算に音楽的な知識を導入してもよい。例えば、各音階音のレベルを全フレームで平均し、それを１２の音名毎に平均して各音名の強さを計算し、その強さの分布から曲の調を検出する。そして、調のダイアトニックコードにはコード構成音平均強度が大きくなるようにある定数を掛ける、あるいは、調のダイアトニックスケール上の音から外れた音を構成音に含むコードはその外れた音の数に応じてコード構成音平均強度が小さくなるようにする等が、考えられる。さらにコード進行のよくあるパターンをデータベースとして記憶しておき、それと比較することで、コード候補の中からよく使われる進行になるようなものはコード構成音平均強度が大きくなるようにある定数を掛けるようにしてもよい。
【０１５６】
いずれにしても、コード名決定部６０により、コード名が決定したら、この結果（変更情報）をバッファ６１を介して、上記コード情報記憶部６２に再記憶させると共に、表示部８０にも再表示させる。
【０１５７】
また、コード名を決定した結果を、図１５に示す。同図は、本実施例におけるコード情報記憶部６２の一部を示したものである。
【０１５８】
一方、上記入力部１０で入力された音響信号は、上記ハードディスクドライブ１０２０で構成される音響信号記憶部７１に記憶される。また以上で決定されたコード名も、コード名情報記憶部６２から出力されて、該音響信号記憶部７１に記憶される。
【０１５９】
またコード名決定部６０により、コード名が決定して、バッファ６１を介して、表示部８０に再表示させた際、ユーザの指示により、音響信号記憶部７１に記憶されている音響信号を、演奏部７０により、演奏させることができる。
【０１６０】
上記第１の入力部９０は、キーボード１０１２及びマウス１０１８などで構成されているが、コード名決定結果が上記表示部８０に表示され、且つ上記演奏部７０でその音響信号を聴いたユーザにより、この第１の入力部９０が使用されて、複数の小節を含む楽節の区切りを受ける。上述のように、楽節とは、音楽形式で１つのまとまった単位であり、４小節の倍数であって、例えば８小節単位であることが多い。
【０１６１】
ユーザは、上記演奏を聴きながら、楽節の区切り位置と思ったら、その箇所の小節線を、マウス１０１８でクリックする。クリックすると、その箇所に楽節区切りを示すマークが表示され、楽曲の先頭の区切りから順に、Ａ、Ｂ、Ｃ、…の文字が表示される。このＡ、Ｂ、Ｃ、…の文字は、後にコードを修正するときのマーカ（目印）として利用できる。なお、すでに楽節区切りに指定されている箇所をもう一度クリックすると、楽節区切りのキャンセルとして機能する。
【０１６２】
他方、上記第１の入力部９０で受ける楽節の区切りに、さらに、Ａメロ、Ｂメロ、サビ等の楽節の入力が受けられる構成とすることも可能である。以上の実施例の構成では、後述のように、コード検出後、その検出コードの類似性から、楽節類似性検出部１００により同じ楽節部分を検出するのであるが、その際、ユーザが入力するのは、第１の入力部９０による楽節の区切り位置だけであり、それがＡメロなのか、Ｂメロなのかというようなことは意識する必要がないのは上述の通りである。そして指定された楽節区切りから同じ小節数の楽節同士を比較し、同じようなコード進行であれば同一の楽節であると検出する。しかし、ユーザが予めその楽節がＡメロ、Ｂメロ或いはサビであると初めから分かっている場合は、楽曲全体としての総合的な構造が初めから明確になり、検出精度がより高まることから、上記のように、第１の入力部９０で受ける楽節の区切りに、さらに、Ａメロ、Ｂメロ、サビ等の楽節の入力が受けられる構成とすることもできる。
【０１６３】
上記楽節類似性検出部１００は、前記と同じく、コード名検出用プログラムが読み込まれて実行され、上記ＣＰＵ１００２により構成され、上述のように、上記楽節の区切りの位置から、各楽節の小節数を割り出し、同じ小節数のものの中から検出したコードネームの文字列又はコードネームの構成音を比較することでそれらの類似性をチェックし、それらの類似性を表す類似度が所定の閾値以上の楽節同士には、ユニークなＩＤを割り振る機能を有している。
【０１６４】
上記第１の入力部９０により全ての楽節区切りを入力し終わったら、この楽節類似性検出部１００により、楽節の類似性の検出を実行する。図１６は、該楽節類似性検出部１００による、楽節類似性の検出の処理フローを示している。
【０１６５】
同図に示すように、楽節の区切り位置から各楽節の小節数がカウントされ（ステップＳ２００）、同じ小節数の楽節があるか否かがチェックされる（ステップＳ２０２）。
【０１６６】
ここで、同じ小節数の楽節がなければ（ステップＳ２０２；Ｎ）、処理を終了する。
【０１６７】
他方同じ小節数の楽節があれば（ステップＳ２０２；Ｙ）、同じ小節数の楽節についての類似性のチェックがなされる（ステップＳ２０４）。この類似性のチェックのやり方については後述する。
【０１６８】
この類似性のチェックの結果、類似性の高い楽節に対しては、ユニークな（唯一の）ＩＤが割り当てられる（ステップＳ２０６）。この際、同一のＩＤの楽節は、同じ色で表示するなどしてユーザに分かりやすくするようにすると良い。
【０１６９】
さらに、他に同じ小節数の楽節があるか否かがチェックされ（ステップＳ２０８）、あれば（ステップＳ２０８；Ｙ）、上記ステップＳ２０４に移行する。
【０１７０】
他方、他に同じ小節数の楽節がなければ（ステップＳ２０８；Ｎ）、残りの楽節は、上述のように、すでにマーカ（目印）Ａ、Ｂ、Ｃ、…の文字が割り振られているので、そのままとし、処理を終了する。
【０１７１】
ここで上述した楽節の類似性のチェックのやり方について、以下に説明する。仮に図１７に示すように、第１楽節と第２楽節とが同じ小節数であったとする。そして、両楽節の間で、第３小節と第４小節が、夫々コードＣとコードＦであったとすると、夫々のコード構成音は、Ｃ＝（ド、ミ、ソ）であり、Ｆ＝（ファ、ラ、ド）であるから、構成音ドのみ一致し、３和音のうち１音が一致するので、一致する率は、第３小節と第４小節とも、夫々１／３ずつとなる。その他は、全てコードが一致しているので、一致率は夫々１となる。従って、（１＋１＋１／３＋１／３＋１＋１＋１＋１）／８（小節数）＝２０／２４＝５／６であり、その値は、０．８３３３３３３…となる。このように、コード構成音を比較するやり方の他に、単純なコードの文字列の比較でも良い（文字列の比較の場合上記コードＣとコードＦとは全く一致しなくなる）。
【０１７２】
比較した結果、類似度合（％で表しても良い）が、ある閾値以上の場合は、両方の楽節にユニークな同じＩＤを振る。この際、既にどちらかにＩＤが振られている（つまり、既にどこか他の楽節と類似性が検出されている）場合は、まだＩＤが振られていない楽節に、そのＩＤを振る。既に両方ともＩＤが振られている場合は、どちらのＩＤにするか決めて、それと違う方のＩＤを持つ全ての楽節のＩＤを、決めたＩＤに修正する。（つまり、別々のものとして検出されていた２つの楽節のグループを、どれか１対の楽節が同じであると判断したら、全て同じものであるとしてしまう。）
【０１７３】
その他、この楽節類似判定における一致度合いとして、コードのルート（基音）に重み付けして、その一致度合いを算出しても良い。その場合は、下記式数１５のように、算出されることになる。
【０１７４】
（数１５）
（コードのルートに重み付けした場合のコードの一致度合）＝（同じ音名の構成音の数＋（同じルートの場合１；そうでない場合０）／（コード構成音の数の多い方＋１）
【０１７５】
上記表示部８０は、上記ディスプレイ１００８で構成されており、音響信号の演奏状況・楽節区切り状況・及びユニークなＩＤの振られた楽節を含む類似性検出状況をユーザに表示する機能を有している。図１８は、「ふるさと」という曲の楽節類似性検出結果を、当該表示部８０に示した状態を示す画面説明図である。ユーザは、この検出画面を見て楽節の類似性検出が正しく行われたかが確認できる。
【０１７６】
上記第２の入力部１１０は、第１の入力部９０と同様、キーボード１０１２及びマウス１０１８などで構成されており、楽節類似性検出結果が上記表示部８０に表示され、この結果を見た（場合により上記演奏部７０でその音響信号を聴いた）ユーザにより、この第２の入力部１１０が使用されて、上記類似性検出状況の判定を受け付ける機能を有している。
【０１７７】
上記楽節類似性確定部１２０は、同じく、コード名検出用プログラムが読み込まれて実行され、上記ＣＰＵ１００２により構成され、上述のように、上記類似性検出状況の判定について上記第２の入力部１１０により確定しないと入力された場合に、上記閾値を変更させて（デフォルトでセットされていた閾値が低い値であればその閾値は通常高めに変更されるが、それに限定されるわけではない）、上記楽節類似性検出部１００に、各楽節の類似性の再検出を行わしめると共に、同じく上記第２の入力部１１０により上記判定を確定すると入力された場合に、同じ楽節部分は、同じ小節分割及び同じコードになるように、上記ベース音検出部５０及びコード名決定部６０に再検出させる機能を有している。
【０１７８】
楽節類似性検出部１００により同じＩＤに割り振られた楽節は、上述のように、表示部８０で同じ色で表示される。ユーザはこれを見て、正しく判断されているかどうか（同じ色の部分が同じ楽節かどうか）をチェックし、誤っている場合は、第２の入力部１１０により、楽節類似性検出部１００でチェックに使用される閾値を変更して、再度楽節類似性検出を行う。正しい判断になるまで繰り返し、正しくなった時点で、ユーザは第２の入力部１１０を使用し、上記楽節類似性確定部１２０により、これを確定する。
【０１７９】
楽節類似性が確定したら、上記楽節類似性確定部１２０は、同じ楽節部分は同じ小節分割、コードになるように、再度小節分割、コード検出を、コード名決定部６０に指示する。この際、コード名決定部６０には、同じ楽節部分はそれら全てを使って総合的に小節分割とコードを判断させるようにする。（例えば、小節分割に関しては、全ての同じ楽節の小節で分割すると判断した場合にのみ分割する、または、半数以上の楽節で分割すると判断したら分割する。コード検出に関しては、全ての同じ楽節の同じコード検出箇所のコード候補と尤度を合計して判断する、など）
【０１８０】
さらに上記修正部１３０は、第１の入力部９０や第２の入力部１１０と同様、キーボード１０１２及びマウス１０１８などで構成されており、楽節類似性確定部１２０で確定された結果が上記表示部８０に表示され、この結果を見た（場合により上記演奏部７０でその音響信号を聴いた）ユーザにより、この修正部１３０が使用されて、上記楽節類似性確定部１２０が上記コード名決定部６０に、同じ楽節部分が、同じ小節分割及び同じコードになるように再検出を指示した際に、小節分割及び／又はコードの修正を行える構成である。
【０１８１】
上記楽節類似性確定部１２０により、同じ楽節は、同じ小節分割、コードとして検出されているはずである。しかし、これらが誤っている場合（例えば同じＩＤがついている楽節間で同じコードＣと確定しているものが実はＦであったという場合）は、上記修正部１３０により、修正を行う。
【０１８２】
この際、図１９に示すように、例えば第１楽節の第５小節目が、例えばＣからＡに修正された場合、同じＩＤのついた第２楽節の第５小節目も、ＣからＡに修正が行われる。（その小節の楽節にＩＤが振られていたら、同じＩＤの他の楽節の、楽節の最初からの小節数が同じ小節を、同様に修正する。）
【０１８３】
以上説明した本実施例の構成によれば、コード検出後、そのコード進行の類似性から同じ楽節部分を検出し、謂わば楽曲の構造解析を行っているため、類似すると検出され、確定がなされた場合は、同じ楽節部分は、基本的に同じ小節分割、同じコード進行となり、コード名の検出精度が極めて高くなる。また、そのコード検出で誤認識がたとえあったとしても、ユーザによる修正作業が可能であるので、同一のＩＤがつく箇所の１つを修正するだけで、他の部分は、自動的に修正されることになり、そのため、ユーザは同じような修正を何度も繰り返す必要がなくなり、修正の手間を大幅に減らすことが可能となる。
【０１８４】
尚、本発明のコード名検出装置及びコンピュータ・プログラムは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０１８５】
本発明のコード名検出装置及びコンピュータ・プログラムは、ミュージックプロモーションビデオの作成の際などに音楽トラック中のビートの時刻に対して映像トラック中のイベントを同期させるビデオ編集処理や、ビートトラッキングによりビートの位置を見つけ音楽の音響信号の波形を切り貼りするオーディオ編集処理、人間の演奏に同期して照明の色・明るさ・方向・特殊効果などといった要素を制御したり、観客の手拍子や歓声などを自動制御するライブステージのイベント制御、音楽に同期したコンピュータグラフィックスなど、種々の分野で利用可能である。
【図面の簡単な説明】
【０１８６】
【図１】本発明の望ましい実施形態が適用されるパーソナルコンピュータの回路概要図である。
【図２】本発明に係るコード名検出装置の全体ブロック図である。
【図３】音階音レベル検出部２０又は４０の装置構成説明図である。
【図４】ビート検出部２５における処理の流れを示すフローチャートである。
【図５】ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計を示すグラフである。
【図６】自己相関計算の概念図である。
【図７】先頭のビート位置の決定方法を示す説明図である。
【図８】最初のビート位置決定後のそれ以降のビートの位置を決定していく方法を示す説明図である。
【図９】ｓの値に応じて変えられる係数ｋの分布状態を示すグラフである。
【図１０】２番目以降のビートの位置の決定方法を示す説明図である。
【図１１】ビート検出結果の確認画面の例を示す画面表示図である。
【図１２】小節検出結果の確認画面の例を示す画面表示図である。
【図１３】曲の同じ部分のコード検出用音階音レベル検出部４０で出力した各フレームの音階音のレベルを示すグラフである。
【図１４】ベース音検出部５０によるベース検出結果の表示例を示すグラフである。
【図１５】コード名検出結果の確認画面の例を示す画面表示図である。
【図１６】楽節類似性検出部１００による楽節類似性検出処理フローを示すフローチャートである。
【図１７】楽節類似性の一例を示す説明図である。
【図１８】「ふるさと」という曲の楽節類似性検出結果を、当該表示部８０に示した状態を示す画面説明図である。
【図１９】類似性が確定された間の楽節で、任意の小節などの修正がなされた場合の、その修正結果が類似楽節の同じ小節に反映される状態を示す説明図である。
【符号の説明】
【０１８７】
１０                    入力部
２０、４０              音階音レベル検出部
２１                    波形前処理部
２２                    ＦＦＴ演算部
２３                    レベル検出部
２４、２６、３１、４１、５１、６１  バッファ
２５                    ビート検出部
３０                    小節検出部
５０                    ベース音検出部
６０                    コード名決定部
６２                    コード情報記憶部
７０                    演奏部
７１                    音響信号記憶部
８０                    表示部
９０                    第１の入力部
１００                    楽節類似性検出部
１１０                    第２の入力部
１２０                    楽節類似性確定部
１３０                    修正部
１０００                    システムバス
１００２                    ＣＰＵ
１００４                    ＲＯＭ
１００６                    ＲＡＭ
１００８                    ディスプレイ
１０１０                    Ｉ／Ｏインターフェース
１０１２                    キーボード
１０１４                    サウンドシステム
１０１６                    ＣＤ−ＲＯＭドライブ
１０１６ａ                  プログラムＣＤ−ＲＯＭ
１０１８                    マウス
１０２０                    ハードディスクドライブ
【図１】
2010054535.tif 000017
【図２】
2010054535.tif 000018
【図３】
2010054535.tif 000019
【図４】
2010054535.tif 000020
【図５】
2010054535.tif 000021
【図６】
2010054535.tif 000022
【図７】
2010054535.tif 000023
【図８】
2010054535.tif 000024
【図９】
2010054535.tif 000025
【図１０】
2010054535.tif 000026
【図１１】
2010054535.tif 000027
【図１２】
2010054535.tif 000028
【図１３】
2010054535.tif 000029
【図１４】
2010054535.tif 000030
【図１５】
2010054535.tif 000031
【図１６】
2010054535.tif 000032
【図１７】
2010054535.tif 000033
【図１８】
2010054535.tif 000034
【図１９】
2010054535.tif 000035