(57)【特許請求の範囲】
【請求項１】
コンピュータに読み込ませて実行させることにより、該コンピュータを音響信号のコード検出装置として機能させるコード検出プログラムにおいて、
音響信号供給源から曲の音響信号を読み込むステップと、
前記音響信号の各音階音のパワーを検出するステップと、
前記音響信号に複数のコード検出区間を設定するステップと、
前記パワーから、コード検出区間のそれぞれの１拍目に相当する部分における予定のベース音検出音域の各音階音のパワーを検出するステップと、
各音階音のうち、パワーが最大である音をベース音として決定するステップと、
コード検出区間全体の音階音からパワーが強い順に音名を予定数抽出し、該予定数の音名をそれぞれルート音とするコード候補を検出するステップと、
前記コード候補についてすべてのコード構成音の平均的なパワーの大きさから尤度を計算するステップと、
前記尤度が最大のコード候補をコードと決定するステップと、
コード検出対象である曲のジャンルの入力を受け入れるステップとからなり、
前記ベース音を決定するステップが、各音階音の基音および各倍音のパワーが最大の音をベース音とするステップと、前記ジャンルに応じて基音および倍音のパワーに別々に重み付けをするステップをさらに含んでいることを特徴とするコード検出プログラム。
【請求項２】
コンピュータに読み込ませて実行させることにより、該コンピュータを音響信号のコード検出装置として機能させるコード検出プログラムにおいて、
音響信号供給源から曲の音響信号を読み込むステップと、
前記音響信号の各音階音のパワーを検出するステップと、
前記音響信号に複数のコード検出区間を設定するステップと、
前記パワーから、コード検出区間のそれぞれの１拍目に相当する部分における予定のベース音検出音域の各音階音のパワーを検出するステップと、
各音階音のうち、パワーが最大である音をベース音として決定するステップと、
コード検出区間全体の音階音からパワーが強い順に音名を予定数抽出し、該予定数の音名をそれぞれルート音とするコード候補を検出するステップと、
前記コード候補についてすべてのコード構成音の平均的なパワーの大きさから尤度を計算するステップと、
前記尤度が最大のコード候補をコードと決定するステップと、
テンションレベルの入力を受け入れるステップとからなり、
前記コード候補を検出するステップが、テンションレベルに応じた構成音数のコードにコード候補を絞り込むステップをさらに含んでいることを特徴とするコード検出プログラム。
【請求項３】
前記尤度を計算するステップが、検出されたコード候補の構成音についてルート音からの音程によりテンションレベルに応じたパワー補正を行うステップをさらに含んでいることを特徴とする請求項２記載のコード検出プログラム。
【請求項４】
曲の音響信号の各音階音のパワーから、コード検出区間のそれぞれの１拍目に相当する部分における予定のベース音検出音域の各音階音のパワーが最大である音をベース音として決定するベース音検出手段と、
コード検出区間全体の音階音からパワーが強い順に音名を予定数抽出し、該予定数の音名をそれぞれルート音とするコード候補を検出するコード候補検出手段と、
前記コード候補についてすべてのコード構成音の平均的なパワーの大きさから尤度を計算する尤度算出手段とを有し、前記尤度が最大のコード候補をコードと決定するように構成されたコード検出装置において、
コード検出対象である音響信号からなる曲のジャンルを指定するためのジャンル入力手段を具備し、
前記ベース音検出手段が、各音階音の基音および倍音のパワーが最大の音をベース音とするとともに、前記ジャンルに応じて基音および倍音のパワーに別々に重み付けをするように構成されていることを特徴とするコード検出装置。
【請求項５】
曲の音響信号の各音階音のパワーから、コード検出区間のそれぞれの１拍目に相当する部分における予定のベース音検出音域の各音階音のパワーが最大である音をベース音として決定するベース音検出手段と、
コード検出区間全体の音階音からパワーが強い順に音名を予定数抽出し、該予定数の音名をそれぞれルート音とするコード候補を検出するコード候補検出手段と、
前記コード候補についてすべてのコード構成音の平均的なパワーの大きさから尤度を計算する尤度算出手段とを有し、前記尤度が最大のコード候補をコードと決定するように構成されたコード検出装置において、
テンションレベルを指定するためのテンションレベル入力手段を具備し、
前記コード候補検出手段が、テンションレベルに応じた構成音数のコードにコード候補を絞り込む手段をさらに含んでいることを特徴とするコード検出装置。
【請求項６】
前記尤度算出手段が、検出されたコード候補の構成音についてルート音からの音程によりテンションレベルに応じて補正されたパワーによって尤度を計算するように構成されていることを特徴とする請求項５記載のコード検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード検出装置およびコード検出プログラムに関し、特に、複数の楽音が混ざった音楽音響信号（以下、単に「音響信号」という）からコード（和音）を精度良く検出するのに好適なコード検出装置およびコード検出プログラムに関する。
【背景技術】
【０００２】
ポピュラー系の音楽においてコードは非常に重要な要素であり、このようなジャンルの音楽を小編成のバンドで演奏する場合、演奏する個々の音符が書かれた楽譜は使用しないで、コード譜またはリードシートと呼ばれるメロディとコード進行のみが書かれた楽譜を使用することが通常である。したがって、市販の音楽ＣＤ等の曲をバンドで演奏するためには曲のコード進行を採譜する必要があるが、この作業は特別な音楽的知識を有する専門家のみが可能であり、一般の人には不可能であった。そこで、市販のパーソナルコンピュータなどを使用して複数の楽音が混ざった音響信号を高速フーリエ変換手法（ＦＦＴ）を使って演算処理してコードを検出するコード検出装置やコード検出プログラムが種々検討されている。
【０００３】
例えば、１小節が複数のコードで構成されている場合、小節を前半と後半とに分割して、それぞれでベース音を検出し、互いのベース音が異なっていたときに、小節の前半と後半とでそれぞれコード検出されるようにしたコード検出装置が知られる（特許文献１）。
【０００４】
しかし、特許文献１に記載されたコード検出装置では、複数の互いに異なるコードが同じベース音を含んでいる場合、１小節全体で１つのコードしか検出されず、検出精度が不十分であった。また、小節全体で強い音をベース音とするので、ジャズのように４分音符で音をつないでいくベースランニング等では、ベース音を正しく検出することができないおそれがある。
【０００５】
そこで、同じベース音を含む互いに異なるコードが小節内にある場合でも正しいコードを検出できるコード検出装置が提案されている（特許文献２）。このコード検出装置では、ベース音のみではなく、コードの変化度合に応じて小節を分割する。つまり、ベース音が異なるか、あるいはコードの変化度合が大きい場合に小節を分割してコードを検出する。
【特許文献１】特開２００７−５２３９４号公報
【特許文献２】特開２００８−４０２８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献２に記載された装置では、まず、ベース音とコード構成音候補の変化度合を使って、単一のコードを含んでいると思われるコード検出区間を決定し、このコード検出区間内でベース音およびコード構成音を使ってコード（コード名）を決定している。しかし、このようにコード検出区間内の情報としてのベース音およびコード構成音だけを使ってコード検出するものでは、依然としてコード検出結果の精度が不十分であった。
【０００７】
例えば、ユーザ毎に好まれる曲のジャンルがあるので、そのジャンルにおいて一般的とされるコード進行やコード理論を考慮してコード検出をすることができれば精度の高いコード検出結果が期待できる。
【０００８】
本発明は、上記課題に対してなされたものであって、ベース音やコード構成音にだけ依存するのではなく、曲のジャンルやユーザが好む曲の傾向等も考慮して正しいコードが検出されるようにすることができるコード検出装置およびコード検出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決し、目的を達成するための本発明は、曲の音響信号の各音階音のパワーを検出する手段と、前記音響信号に複数のコード検出区間を設定する手段と、前記パワーから、コード検出区間のそれぞれの１拍目に相当する部分における予定のベース音検出音域の各音階音のパワーを検出する手段と、各音階音のうち、パワーが最大である音をベース音として決定する手段と、コード検出区間全体の音階音からパワーが強い順に音名を予定数抽出し、該予定数の音名をそれぞれルート音とするコード候補を検出する手段と、前記コード候補についてすべてのコード構成音の平均的なパワーの大きさから尤度を計算し、該尤度が最大のコード候補をコードと決定する手段と、コード検出対象である曲のジャンルの入力手段とからなり、前記ベース音の決定においては、各音階音の基音および各倍音のパワーが最大の音をベース音とするとともに、前記ジャンルに応じて基音および倍音のパワーに別々に重み付けをするようにした点に第１の特徴がある。
【００１０】
また、本発明は、曲の音響信号の各音階音のパワーを検出する手段と、前記音響信号に複数のコード検出区間を設定する手段と、前記パワーから、コード検出区間のそれぞれの１拍目に相当する部分における予定のベース音検出音域の各音階音のパワーを検出する手段と、各音階音のうち、パワーが最大である音をベース音として決定する手段と、コード検出区間全体の音階音からパワーが強い順に音名を予定数抽出し、該予定数の音名をそれぞれルート音とするコード候補を検出する手段と、前記コード候補についてすべてのコード構成音の平均的なパワーの大きさから尤度を計算し、該尤度が最大のコード候補をコードと決定する手段と、テンションレベルの入力手段とからなり、前記コード候補を検出する手段が、テンションレベルに応じた構成音数のコードにコード候補を絞り込むように構成されている点に第２の特徴がある。
【００１１】
また、本発明は、前記尤度を計算する手段が、検出されたコード候補の構成音について、ルート音からの音程によりテンションレベルに応じたパワー補正を行う手段をさらに含んでいる点に第３の特徴がある。
【発明の効果】
【００１４】
第１の特徴を有する本発明では、基音および倍音のパワーに基づいてベース音を検出する際に、ジャンルに応じて基音および倍音のパワーにそれぞれ重み付けをすることができる。したがって、例えば、倍音構造をもたないバスドラムの音量が大きいロック系の曲に対して基音に対する重み付けを小さくしておくことによって、バスドラム音のパワーが小さく検出されることになるので、バスドラム音をベース音として誤検出することを回避できる。
【００１５】
第２、第３の特徴を有する本発明では、テンションレベルによって和音の構成音数を限定してコード候補を絞り込むことができる。また、テンションレベルによって、尤度を操作してパワー補正を行うことができるので、それぞれのテンションレベルに応じたコードが検出されやすくすることができる。テンションレベルは曲のジャンルによって、傾向があるので、テンションレベルを指定することによって、特定のジャンルの曲やユーザの好みの曲からコードを検出するのに好都合である。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して本発明を詳細に説明する。図２は、本発明の一実施形態に係るコード検出装置としてのパーソナルコンピュータのハード構成を示すブロック図である。パーソナルコンピュータのハード構成は周知のものであり、本発明に係るコード検出プログラムがロードされるとコード検出装置としての機能に従って動作するものである。
【００１９】
図２において、パーソナルコンピュータ１は、ＣＰＵ２、ＲＯＭ３、ＲＡＭ４、表示装置（例えば、液晶ディスプレイ）５、外部記憶装置（ハードディスク装置）６を有し、これらはシステムバス７を介して接続される。さらに、システムバス７には入出力インタフェース８を介してキーボード９、サウンドシステム１０、およびＣＤ−ＲＯＭドライブ１１が接続される。パーソナルコンピュータ１の各部はシステムバス７を通じて互いに信号やデータの入出力を行う。なお、パーソナルコンピュータ１へユーザが指示を与える入力装置はキーボード９に限らず、マウス等のポインティング・デバイスも含まれる。
【００２０】
ＲＯＭ３は、パーソナルコンピュータ１のＢＩＯＳ（バイオス）等が記憶される格納領域である。ＲＡＭ４は、ハードディスク７から読み込まれるプログラムの格納領域としての他、ワークエリア、係数やパラメータ等の一時的な記憶領域として使用される。
【００２１】
表示装置５は、ＣＰＵ２の指令により、必要な画像処理を行う表示制御部（図示せず）によって制御されており、画像処理結果を表示する。
【００２２】
ＣＤ−ＲＯＭドライブ１１は、ＣＤ−ＲＯＭのデータを読み込んでハーディスク装置６に格納する読み込み手段であり、コード検出プログラムやコード検出の対象となる音響信号をパーソナルコンピュータ１に読み込む駆動装置である。ＣＤ−ＲＯＭドライブ１１によって読み出されたプログラムやデータ（音響信号を含む）はハードディスク装置６に格納され、メインのプログラムはＲＡＭ４に格納される。
【００２３】
図３は、コード検出プログラムによる要部処理を示すフローチャートである。図３において、ステップＳ１では、コード検出対象楽曲の音響信号を読み込む。音響信号はＣＤ−ＲＯＭドライブ１１にセットされたＣＤ−ＲＯＭからリッピングしたり、ＷＡＶファイルに予め格納されている楽音波形を指定したりして読み込むことができる。ステップＳ２では、読み込んだ音響信号におけるコード検出範囲を決定する。読み込まれた音響信号全部（つまり曲全体）をコード検出範囲としてもよいし、例えば、楽曲のイントロ部分やサビ部分の任意の小節に対してユーザが入力手段を用いて指定するのでもよい。ユーザがコード検出範囲を指定するためには、音響信号の波形を表示装置５に表示してユーザがキーボード９やポインティングデバイスを用いて範囲を指定できるようにする。
【００２４】
ステップＳ３では、拍子を設定する。拍子はユーザによって入力される指示に基づいて検出される。拍子の設定は、例えば、ステップＳ１で読み込まれた音響信号に基づいて楽曲を再生し、その再生音を聞いてユーザが拍子を判断し、判断された拍子を、例えば、表示装置５に表示される拍子入力画面から入力する。
【００２５】
ステップＳ４では、拍（ビート）の位置を検出する。拍は、ユーザが入力するタッピング（キーボード９の予定キーを叩くこと）に基づいて検出される。すなわち、音響信号に従って曲を再生し、ユーザが、この再生された曲を聞きながら、拍の位置を判断し、その位置でキーボード９を叩いて拍を入力する。タッピングの開始位置は小節の１拍目からとする。つまり、ユーザは再生された楽曲に合わせて１拍目を判断し、そのタイミングからタッピングを開始する。タッピング間隔が安定して所定のゆらぎの範囲に収まるようになったときに拍数（１分間あたりの拍数）を確定する。
【００２６】
ステップＳ５では、前記拍子と拍数とに基づいて、小節線位置を決定する。最初のタッピングは１拍目であるから、例えば４／４拍子の場合、タッピング開始時から開始してタッピング毎に１〜４の数字を順に当てはめ、拍数が確定した部分の直前の数字１〜４で示されるタッピング位置つまり４つの拍を含む小節を確定する。小節線は、４つの拍のうち第１拍目位置に引く。
【００２７】
こうして、１つの小節が確定されたならば、その小節のサイズで、その前後の音響信号に対しても小節線を引いていき、ステップＳ２で設定したコード検出範囲の中に、小節を１単位とするコード検出区間を決定する。コード検出区間はコードを検出するために音響信号のＦＦＴ演算をして音階音のパワースペクトルを求める区間である。
【００２８】
なお、コード検出区間の確定方法は、ユーザが入力する拍子や拍数に基づいて決定するものに限らない。例えば、拍子やタッピングによる拍間隔の入力に加えて、所定フレーム毎に音響信号をＦＦＴ演算して各フレーム毎の各音階音のパワーの変化度合を求め、この変化度合から平均的な拍間隔を求めてテンポ候補とし、このテンポ候補からタッピングテンポに近いものを選択して拍位置とするのでもよい。音響信号のＦＦＴ演算によって曲の小節線を検出する手法としては、本出願人が先に出願した特願２００６−２１６３６２号の明細書（特開２００８−４０２８４号公報）に開示されたものを適用することができる。要するに、この実施形態では、コード検出区間として１小節を単位とする区間が指定されればよい。しかし、本発明は、１小節をコード検出区間とするのに限らず、特許文献１、２に記載したもののように、さらに小節を分割して１小節の幅を複数のコード検出区間としてもよい。
【００２９】
上述のようにして、コード検出範囲にコード検出区間が設定されれば、ステップＳ６で最初のコード検出区間から順にコード検出を行う。
【００３０】
次に、コード検出処理を説明する。図４は、コード検出処理の要部フローチャートである。図４において、ステップＳ６０では、コード検出区間（１小節分）の音響信号から該コード検出区間のベース音を検出する。ベース音は、コード検出区間の１拍目に相当する部分の音階音のパワーに基づいて求められる。各音階音のパワーは、入力された音響信号から所定の時間間隔（フレーム）でＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎に検出される。ステップＳ６１では、該コード検出区間でのコード候補を検出する。
【００３１】
ステップＳ６２では、ステップＳ６１で検出されたコード候補の尤度（コード候補としてのふさわしさ）を、後述の数式１に従って計算する。ステップＳ６３では、計算された尤度が最も大きいコード候補を検出コードとして、コード名を決定する。
【００３２】
本実施形態のコード検出プログラムでは、ベース音の検出やコード候補の検出の精度を向上させるために検出オプションを設定することができる。検出オプションを付加したベース音やコード候補の検出については後述するが、まず、検出オプションを付加しないベース音の検出手順およびコード候補の検出手順を説明する。
【００３３】
ベース音は、コード検出区間の１拍目に相当する音響信号の音階音のパワーに基づいて決定する。各音階音の基本周波数の上下５０セントの範囲（１００セントが半音である）の周波数に相当するパワースペクトルのうち、最大の値をその音階音のパワーとすることができる。全音階音（Ｃ１〜Ａ６）について計算されたパワースペクトルのうち、ベース音の検出にはベース音検出音域（例えばＣ２〜Ｂ３）の音階音のパワーが用いられる。
【００３４】
音階音のパワーは、フレーム時間ｔにおけるｉ番目（最低音からｉ番目）の音階音のレベルをＬi（ｔ）とすると、フレーム番号ｆsからｆeまでの間のｉ番目の音階音の平均的なパワーＬavgi（ｆs，ｆe）は数式１で計算できる。
【００３５】
【数１】
0005196550.tif 000002
【００３６】
この数式１で計算される平均的なパワーをすべての音階音ｉ（０≦ｉ≦６９）について計算する。ここで計算したパワーは所定の記憶部に記憶しておく。そして、ベース音検出音域において平均的なパワーが最大となっている音階音をベース音として検出する。
【００３７】
コード検出区間（１小節）内で、１拍目に相当する部分における音階音のベース音が検出されたならば、次にコード候補検出に移る。コード候補の検出のためには、コード検出区間（１小節）の音階音のパワーが使われる。予め指定されたコード検出音域（例えばＣ３〜Ａ６）での各音階音の平均的なパワーを１２の音名（Ｃ、Ｃ♯、Ｄ、Ｄ♯、…、Ｂ）毎に積算して、各音名毎のパワーを計算する。そして、この音名毎のパワーが最も大きい音名を最大６つ抽出する。抽出された音名を最大６つとしたが、５つしか検出されないこともある。無音に近いコード検出区間で誤ってコード候補が検出されるのを防ぐため、平均的なパワーがしきい値以下のものがコード候補とされないようにしているためである。
【００３８】
検出されたベース音が、抽出した最大６つの音に含まれない場合は、このベース音も含めた最大７つの音からコード名を決定する。
【００３９】
コード候補の決定のためには、まず、検出された最大７つの音のいずれか一つをコードのルート音として仮定し、該ルート音と、所定のコードタイプにおいてルートから所定の音程にある構成音のすべてについて、パワーの合計を計算し、コード構成音の数で除算する。こうして、仮のルート音を含めた構成音からなるコード候補と、該コード候補の尤度が計算される。
【００４０】
例えば、パワーが大きい音として４つの音（ド、ミ、ソ、シ）が抽出された場合は、まず、「ド」をルート音と仮定して、予め設定した各コードタイプ毎の、ルート音を基準とした構成音の音程（インターバル）関係（図５参照）にある音階音のパワーを合計する。
【００４１】
図５は、コードタイプと各コードタイプ毎の構成音の音程（ルート音を基準とする音程）を示すテーブルの例である。この図５を参照して、パワーを検出する音名を決定する。例えば、メジャー（Ｍａｊ）では、「ド」をルート音としたときに、該ルート音から半音４つ分の音程を有する音（ミ）と、ルート音から半音７つ分の音程を有する（ソ）とが選択される。そして、この３つの音について尤度を計算する。尤度は、「すべての構成音の平均的なパワーの合計」を「コード構成音の数」で除算した値である。
【００４２】
例えば、メジャー（Ｍａｊ）コードに関して、ルート音を「ド」とした場合、該メジャーコードの構成音「ド」、「ミ」、「ソ」の音名の、コード検出区間における平均的なパワーを、Ｃ３からＡ６の範囲でオクターブ毎に積算し、オクターブ数で除算して平均したものを、各構成音毎に求め、これを合計したものを「すべての構成音の平均的なパワーの合計」とする。メジャーコードの場合、コード構成音の数は「３」である。
【００４３】
ここで、仮のルート音から算出される構成音が、抽出した最大７つの音に含まれない場合は、その音のパワーは「ゼロ」としてもよい。
【００４４】
こうしてすべてのコード候補に関して尤度が計算される。計算は図５に示したずべてのコードタイプについて行われる。例えば、抽出された音名が４つであった場合は、仮のルート音が４種類となるので、Ｍａｊから１３までの１５種類のコードタイプと構成音数「４」とを乗算した数（６０）のコード候補について尤度が計算される。
【００４５】
各コード候補について尤度が求められたならば、それらの尤度のうち、最大の尤度となったコード候補を検出コードとして確定する。確定したコード候補に対して設定されている仮のルートとコードタイプとを組み合わせてコード名を完成させる。なお、一般にメジャーコードはコードタイプを付加せず、ルート音のみ、例えば「Ｃ」というふうに表記する。
【００４６】
上述のように、一つのコード検出区間についてコード名が確定されると、次のコード検出区間（小節）に対しても同様にしてコードを検出する。指定したコード検出範囲についてコード名が検出されれば、コード検出区間毎に設けたコードトラックにコード名を貼り付けて、表示装置５に表示する。検出コード名を記載したリードシートとして表示してもよい。また、コード検出プログラムに予め設定しておくことができる内蔵リズムパターンを使って検出コードを演奏するように構成してもよい。
【００４７】
図１は、コード検出プログラムの要部を示す機能ブロック図である。図１において、音響信号入力部１２は、音楽ＣＤや波形ファイル等から音響信号を音響信号記憶部１３に入力する手段である。コード検出範囲設定部１４はユーザによって入力されるコード検出範囲の指定を受け入れ、音響信号記憶部１３に格納されている音響信号に範囲を設定する。コード検出区間設定部１５は、ユーザによって入力された拍子や拍によって小節線を確定し、コード検出区間を設定する。コード検出区間の設定方法は、これに限定されないのは、上述のとおりである。
【００４８】
パワー算出部１６は、ＦＦＴ演算により音響信号の音階音のパワースペクトルを計算する。計算されたパワースペクトルは音階音パワー記憶部１７に記憶される。ベース音検出部１８は、コード検出期間の１拍目に相当する部分について音響信号のパワーのうち、最も大きいパワーをもつ音をベース音として検出する。
【００４９】
コード候補検出部１９は、コード検出区間における各音階音の平均的なパワーを求め、音名毎にパワーが最も大きい音名を所定数抽出する機能と、これら抽出された音名のそれぞれをルート音と仮定したコード候補を音程テーブル１９ａの音程に従って抽出する機能とを有する。音程テーブル１９ａの例は、図５に関して説明したとおり、所定数のコードタイプとその構成音のルートからの音程を示したものである。
【００５０】
尤度算出部２０は、各コード候補毎に、ルート音を含めたすべての構成音の、コード検出区間における平均的なパワーの合計を、コード構成音の数で除算する機能を有する。コード名決定部２１は、尤度算出部２０で計算された尤度が最大であるコード候補を検出コード名として決定し、コード名表示部２１に出力する。コード名表示部２１は、コードトラックに貼り付けたコード名を表示装置５によって表示させる。
【００５１】
次に、コード検出精度を向上させることができる検出オプションについて説明する。第１の検出オプションとして、曲のジャンル指定によるベース音倍音構造を使ったベース音検出機能を加えることができる。上述したオプション無しのベース音検出においては、ベース音検出音域における平均的なレベルが最も大きい音をベース音としていた。しかし、この方法では、バスドラム等の音をベース音として誤検出してしまうことがある。特に、バスドラムの音量が大きいロック系の曲では誤検出のおそれがある。しかし、一般にバスドラムの音は、倍音構造を持たない点で、音色によって特有の倍音構造を有するベース音と異なる。そこで、本実施形態ではオプションとして、倍音構造を持たないバスドラム音などをベース音として誤検出することがないようにした。
【００５２】
上述のように、ベース音は、数式１で計算されるコード検出区間の１拍目に相当する部分における音階音のパワーＬavgi（ｆs，ｆe）に基づいて検出する。このパワーＬavgi（ｆs，ｆe）を以下のように補正する。すなわち、ｉ番目の音階音の平均的なパワーＬavgi（ｆs，ｆe）を、ｉを変数としてＬavg(i)と表し、ｉ番目の音階音について、その基音だけでなく、２倍音、３倍音、…、８倍音の倍音のパワーＬavg(i)〜Ｌavg(i＋36)を合算してｉ番目の音階音の平均的なパワーとする。この場合、各基音並びに倍音毎に係数を乗算する。
【００５３】
すなわち、ｉ番目の音階音の平均的なパワーＬavg(i)は次の数式２によって計算する。
【００５４】
Ｌavg(i)＝｛（Ｋ１・Ｌavg(i)）＋（Ｋ２・Ｌavg(i＋12))＋（Ｋ３・Ｌavg(i＋19))＋（Ｋ４・Ｌavg(i＋24))＋（Ｋ５・Ｌavg(i＋28))＋（Ｋ６・Ｌavg(i＋31))＋（Ｋ７・Ｌavg(i＋34))＋（Ｋ８・Ｌavg(i＋36))｝÷（Ｋ１＋Ｋ２＋Ｋ３＋Ｋ４＋Ｋ５＋Ｋ６＋Ｋ７＋Ｋ８）……数式２
【００５５】
係数（ジャンル係数）Ｋ１〜Ｋ８は曲のジャンルによって予め設定することができる数値である。この数式２から理解できるように、ｉ番目の音階音の音高そのものである基音から８倍音までの音階音のパワーのそれぞれにジャンル係数を乗算した後、互いを合算し、さらにその合算値をジャンル係数Ｋ１〜Ｋ８の合計で除算してパワーを計算している。
【００５６】
例えば、係数Ｋ１〜Ｋ８は次の値に設定することができる。図６はジャンル係数Ｋ１〜Ｋ８の例である。この例では、ジャズに対しては基音の係数Ｋ１を極端に大きくし、基音のパワーを際だたせている。そして、基音以外の倍音では係数Ｋを小さくしている。一方、ロックに対しては、基音の係数Ｋ１はジャズに比べて極めて小さくし、２倍音以上の係数Ｋ２〜Ｋ８はジャズの場合と同じ値にしている。
【００５７】
ジャンルとしてユーザがジャズを指定した場合、基音を重視してベース音が検出される。このジャズの指定は、バスドラムがそれほど強く演奏されない曲やドラムレスの曲に対して行うのがよい。ジャズ系の曲ではウッドベース（コントラバス）が用いられることが多く、このウッドベースの音は減衰が激しく倍音も強く検出されないので、この点でも基音を重視した係数の設定は有意義である。
【００５８】
ジャンルとしてのロックを選択するのは、バスドラムが強く演奏されるロック系の曲の場合である。倍音のパワーは基音に対するパワーと同程度のまたは３分の１程度重視されているだけなので、バスドラムの音のように基音しか存在しない音は、倍音に対して相対的にパワーが小さく検出され、結果的に排除される。
【００５９】
この検出オプションを実現するためには、コード検出プログラムにおいて、前記ステップＳ６０でのベース音検出の開始前に、ユーザに対してジャンルを指定させる表示を行うようにする。つまり、表示装置５上に、ユーザが指示を入力できるジャンル指定画面を表示できるようにする。例えば、ジャンル（ジャズ、ロック）を表示してスイッチ機能を持たせ、その表示をクリック操作することによってジャンル指定を受け付けられるようにするのがよい。
【００６０】
前記ベース音検出部１８には、ジャンル別の係数Ｋ１〜Ｋ８を記述した係数テーブルを設けておく。ベース音検出部１８は、数式１によってフレームｆsからｆeまでのｉ番目の音階音の平均的なパワーＬavgi（ｆs，ｆe）を計算した後、指定されたジャンルに従って係数テーブルから係数Ｋ１〜Ｋ８を読み出し、数式２によって補正を行う。
【００６１】
なお、図６に挙げた係数Ｋ１〜Ｋ８の値はこれに限らないし、何倍音までを合算するかも変形可能である。また、倍音がＦＦＴ演算によって求めた音階音の範囲を超えるときは、数式２の計算では、パワーを「０」として合算する。
【００６２】
このようにして補正した各音階音の平均パワーが、ベース音検出音域内で最も大きい音をベース音として決定するが、計算された各音階音の平均パワーが所定のしきい値以下の音階音はベース音の候補から予め排除するようにするのがよい。したがって、ベース音検出音域内のすべての音について、補正した平均パワーがしきい値未満である場合は、ベース音は検出されない。
【００６３】
第２の検出オプションでは、コード候補に対してテンションレベルによる補正を行うことができる。上述のように、コード名の決定に際してコード候補から尤度が最大のものを、コード検出区間のコード名として決定した。第２の検出オプションでは、図５の音程テーブルを使用してコード候補を検出する段階でテンションレベルによるコード候補の絞り込みを行う。これによって、ユーザが好みの曲や曲のジャンル等、曲の特徴に応じたコード候補の絞り込みを行うことができる。例えば、３和音、４和音、および５和音以上等、複数のテンションレベルを指定できるようにし、それぞれのテンションレベルのコード候補を検出する。テンションレベルは、例えば１〜３およびＮの４種類とする。図７は、テンションレベルと各テンションレベル毎の和音の絞り込みの例を示す図である。テンションレベル「０」では３和音のみを抽出するか、３和音を中心に抽出する。テンションレベル「１」では４和音のみを抽出するか、４和音を中心に抽出する。テンションレベル「２」では５和音以上のみ、または５和音以上を中心に抽出する。テンションレベル「Ｎ」では、絞り込みをせず、検出したコードをそのままコード候補として出力する。
【００６４】
コード候補検出部１９では、図５の音程テーブルから、指定されたテンションレベルのコードタイプを選択し、このコードタイプの音程に対応する音を構成音とするコード候補を検出する。第２の検出オプションを実現するため、コード検出プログラムにおいて、前記ステップＳ６１でのコード候補検出の開始前に、ユーザに対してテンションレベルを指定させる表示を行うようにする。つまり、表示装置５上に、ユーザがテンションレベルを指定できる表示を行うようにする。例えば、テンションレベル（１〜３、Ｎ）を表示装置５に表示して、その表示部にスイッチ機能を持たせ、その表示をクリック操作することによってテンションレベルを受け付けられるようにする。コード候補検出部１９は、テンションレベルの指定を受け付けると、テンションレベルに応じたコード候補を出力するように構成する。
【００６５】
さらに、指定されたテンションレベルに応じて尤度の計算に補正を加えることができる。つまり、図５のテーブルを使って尤度を計算する際の、構成音の平均的なパワーの合計時に、各構成音の平均的なパワーに対してルート音からの音程に応じた係数を掛けてから、合計する。
【００６６】
図８は、テンションレベル毎のパワー補正係数を示す図である。図８において、テンションレベルが「０」の場合、７th（センブンス）〜１３th（サーティンス）の音のパワーに掛ける係数を小さくしている。テンションレベルが「１」の場合は、セブンスの音のパワーにだけ「１」より大きい係数を掛けて、ナインスからサーティンスの音のパワーは小さくしている。テンションレベルが「２」の場合は、セブンスからサーティンスまでのすべての音のパワーに「１」より大きい係数を掛けている。テンションレベル「Ｎ」の場合は、セブンスからサーティンスまでの音のパワーに係数「１」を掛けて、計算されたパワーを補正しないようにしている。
【００６７】
このようにすれば、指定したテンションレベルに応じたテンションのパワーが相対的に大きくなるので、所望のコードが出やすくなるし、指定したテンションレベルのみが検出されるということもない。
【００６８】
コード名をコード検出区間毎のパワーの強い音から決定してもよいが、より検出精度を上げるために、さらに、コード進行を利用することができる。コード進行とは、複数のコードを連結したもので、コードの流れを表すものをいう。例えば、キーがＣメジャーのとき、「Ｄm7→Ｇ7→Ｃ」というコード進行が最も一般的なコード進行として知られている。このように、コード進行には、よく使われるコード進行と一般的でないコード進行とがあるので、よく使われているコード進行に従ってコード検出すると、検出精度の向上が期待できる。
【００６９】
検出精度を上げるため、コード進行を利用する場合、まず、コード検出範囲のすべてのコード検出区間について、コード候補を検出して尤度の計算を行う。上記テンションレベルによる絞り込みや尤度の補正は、この処理の先に行っておく。そして、すべてのコード検出区間について、コード候補が検出されたら、２番目のコード検出区間から、曲の終わりに向かって順に１つ前のコード検出区間のコード候補のコード名を使って、そのコード検出区間のコード候補の尤度に補正を加える。
【００７０】
補正のため、コード進行データベースを用意する。そして、１つ前のコード検出区間のコード候補と今回のコード検出区間のコード候補とをコード進行データベースのコード進行と照らし合わせ、データベースのコード進行と一致する連結になっていれば、図５を使って計算された今回のコード候補の尤度を持ち上げる。また、禁則されているコード進行であったならば、尤度を下げるように補正する。
【００７１】
図９は、コード進行と、コード進行によって尤度に乗算する係数の一例を示す図である。図９では、一般的なコード進行には、大きい係数「１．３」を設定し、あまり一般的でないコード進行には、小さい係数「１．２、１．１等」を設定している。普通には使用されないコード進行に対しては、「１．０」より小さい「０．９」という係数を設定してある。
【００７２】
図９において、コード名を構成するローマ数字は、曲あるいは曲の中で、そのコードがある部分のキー（調）のトニック（主音）からの音程である。ユーザにキーを入力してもらう等して、そのキーに限定して尤度を補正することもできる。しかし、一般に曲の調性は、１曲の中でも部分毎に替わることが多いので、キーにかかわらず、前のコード検出区間のコード候補と対象としているコード検出区間のコード候補のルートの音程とコードタイプのみの一致によってコード進行の一致を判断すればよいものとすることができる。
【００７３】
なお、図９において、３和音として書かれているメジャー（Ｍａｊ）コード（1、4等）には、メジャーコードだけでなく、Ｍ7のコードを含めてもよい。また、マイナー（ｍ）コード（2m、3m等）には、マイナーのトライアド（３和音）だけでなく、ｍ7のコードを含めてもよい。
【００７４】
なお、図９に示したコード進行はメジャーキー（長調）の場合であるが、マイナーキー（短調）の場合のコード進行データベースも同様に作成可能である。
【００７５】
図１０は、検出オプションの選択を含めたコード検出処理の要部フローチャートである。ステップＳ７０では、検出オプションとしてのジャンルをユーザに入力させる処理を行う。例えば、表示装置５に「曲のジャンルを入力して下さい」という文字を表示させ、ジャズかロックかを指定する選択ボタンを併せて表示させる。
【００７６】
ステップＳ７１では、検出オプションとしてのテンションレベルの指定をユーザに要求する処理を行う。例えば、表示装置５に「テンションレベルを入力して下さい」という文字を表示させ、テンションレベル「１」〜「３」、「Ｎ」のいずれかを指定する選択ボタンを併せて表示させる。
【００７７】
ステップＳ７２では、ユーザによって選択された曲のジャンルがジャズかロックかを判断し、この判断の結果により、ジャズかロックかによってそれぞれのジャンル係数Ｋ１〜Ｋ８を図６から読み出す。ステップＳ７３では、数式１を使ってコード検出区間の１拍目の各音階音の平均的なパワーを計算する。ステップＳ７４では、ステップＳ７３で読み出されたジャンル係数Ｋ１〜Ｋ８を使ってコード検出区間の１拍目の各音階音の平均的なパワーを補正する。ステップＳ７５では、補正されたコード検出区間の１拍目の各音階音の平均的なパワーが最大である音をベース音として抽出する。
【００７８】
ステップＳ７６ではユーザが指定したテンションレベルを読み出す。ステップＳ７７ではテンションレベルに応じた構成音数の和音に限定してコード候補を抽出する。テンションレベルに応じた構成音数の和音に限定しない場合は、このステップを省略する。ステップＳ７８ではテンションレベルに応じてパワー補正係数を読み出す。ステップＳ７９では、コード候補に関して、図５を使ってパワー補正係数を組み入れて、尤度を計算する。
【００７９】
ステップＳ８０では、尤度が最大であるコード候補を検出コードとしてコード名を決定する。
【００８０】
コード進行による尤度の補正は、すべてのコード検出区間についてコード候補の抽出と尤度の計算が終わった後に行う。つまりステップＳ７３〜Ｓ７９の処理を全ての小節について実行した後、各小節毎にその小節で検出されたコード候補と直前の小節のコード候補との連結が所定のコード進行かどうかを判断する。そして、一般的なコード進行か一般的でないコード進行かによって尤度を補正して、最終的に、補正されたコード候補から最も尤度が大きいコード候補を検出コードとしてコード名を決定する。
【００８１】
上記実施形態では、尤度が最大のコード候補をそのコード検出区間のコード名とする場合を示したが、これに限らず、例えば、尤度が大きい順に複数のコード候補を表示装置５に表示させ、ユーザが選択できるようにしてもよい。この際、コード候補に基づくＭＩＤＩ情報をサウンドシステム１０に転送して和音を発音させ、それを聞いた結果、複数のコード候補から一つを検出コードとして選択できるようにしてもよい。
【００８２】
また、コード検出結果を表示する画面には、コード検出対象である曲の音響信号（元波形）による演奏と検出コードのＭＩＤＩによる和音の演奏とを同時に行わせる再生スイッチを設けることができる。ユーザによる再生スイッチの操作に応答して曲と検出コードによる和音とが演奏されるので、ユーザは両者を聞くことによって、検出コードが正しいかどうかを確認することができる。正しくない検出コードが曲と共に再生された場合、違和感のある聞こえになるので、ユーザは検出コードの間違いを発見することができる。この際、検出コードの確認を容易にするため、曲の演奏音と検出されたコード名による和音の演奏音とを個別に音量バランスを調整できるようにするとよい。
【００８３】
検出コードの間違いが発見されたときには、ユーザがコード名を修正することができるようにする。例えば、コードの第１候補に代えて第２候補を選択することができる。また、例えば、表示画面５上に、コードトラックに貼り付けられたコード名を表示し、その表示部をユーザが指定して修正できるようにする。修正のためのコード名候補を画面に表示し、ユーザがその中から修正コードとして選択できるようにするのがよい。画面上のデータ修正は周知の手法を採用して実施できる。
【００８４】
さらに、ユーザが検出コード名の修正を行った場合、この修正後のコードと、その１つ前のコード検出区間のコードとの連結からなるコード進行が、所定のコード進行データベース（図９参照）に含まれていない場合は、修正後のコードを含む前記コード進行をコード進行データベースに登録する。これによってその後該コード進行が検出され易くできる。つまり、ユーザが好む曲のジャンルにおいてよく使用されるコード進行がデータベースとして蓄積されることになるので、修正によって追加されるコード進行が増えるにつれて、コード進行を使った検出オプションによる効果が顕著になってくる。
【００８５】
さらに、コード名がユーザによって修正されてコード進行が新たに登録された場合、そのコード検出区間以降のコード検出区間においてコード検出を再度行うようにするとよい。ユーザが修正を行うことによって、修正されたコード検出区間のコードと、その直後のコード検出区間のコードとの連結によるコード進行が変化するので、変化後のコード進行を考慮したコード検出が後続のコード検出区間に対しても自動的に行われる。したがって、全体のコード名の確認と修正とにかかる時間を短縮することができる。
【００８６】
以上のように、本実施形態によれば、音響信号からコードを検出する際に、曲のジャンルやテンションレベルをユーザが指定することによって、ユーザの好む曲に関するコードを迅速に、かつ精度良く検出することができる。また、曲のジャンルに合わせて、よく使用されるコード進行を参照して適切なコードを見つけることができる。さらに、決定したコードを修正し、その修正結果をデータベースに含めることで、さらにコード検出精度を高めることができる。
【００８７】
なお、本実施形態では、拍子やビート位置をユーザが入力するとともに、コード検出区間の単位を小節とした例を示した。しかし、本発明はこれに限らず、特許文献１や２に示したプログラムのように、拍子やビート位置を音響信号から自動的に検出し、かつ１小節内で複数のコード検出区間を設定するコード検出プログラムにも適用できる。要は、音響信号に対して音階音のパワーを算出して、その検出結果に基づいてベース音を検出し、さらに、コード候補を検出し尤度を算出する際に、ジャンルやテンションレベル、あるいはさらにコード進行データベースによって検出コード候補を絞り込めるようにする点が重要である。
【００８８】
また、本実施形態では、音階音のパワーを求めるのにＦＦＴ演算によるパワースペクトルの算出を行ったが、音階音のパワーは、音響信号を各音階音に対応するバンドパスフィルタを通して求めても良い。
【図面の簡単な説明】
【００８９】
【図１】検出オプションを含んでいないコード検出プログラムの要部機能を示すブロック図である。
【図２】本発明の一実施形態に係るコード検出プログラムの実行に用いられるパーソナルコンピュータのハード構成を示す図である。
【図３】本発明の一実施形態に係るコード検出プログラムの要部を示すフローチャートである。
【図４】図３に示したコード検出処理の詳細なフローチャートである。
【図５】コードタイプと各コードタイプ毎の構成音のルート音からの音程を示すテーブルの例を示す図である。
【図６】ジャンルに応じて倍音毎に使用される係数の例を示す図である。
【図７】テンションレベルと各テンションレベル毎の和音の絞り込みの例を示す図である。
【図８】テンションレベル毎のパワー補正係数を示す図である。
【図９】コード進行と、コード進行毎に乗算する尤度の係数の一例を示す図である。
【図１０】検出オプションの選択を含めたコード検出処理の要部フローチャートである。
【符号の説明】
【００９０】
１…パーソナルコンピュータ、  ５…表示装置、  ９…キーボード、  １１…ＣＤ−ＲＯＭドライブ、  １２…音響信号入力部、  １３…音響信号記憶部、  １５…コード検出区間設定部、  １６…パワー算出部、  １８…ベース音検出部、  １９…コード候補検出部、  ２０…尤度算出部、  ２１…コード名決定部
【図１】
0005196550.tif 000003
【図２】
0005196550.tif 000004
【図３】
0005196550.tif 000005
【図４】
0005196550.tif 000006
【図５】
0005196550.tif 000007
【図６】
0005196550.tif 000008
【図７】
0005196550.tif 000009
【図８】
0005196550.tif 000010
【図９】
0005196550.tif 000011
【図１０】
0005196550.tif 000012