本発明は、コード名検出装置及びコード名検出用プログラムに関する。
ポピュラー系の音楽においてコードは非常に重要な要素であり、このようなジャンルの音楽を小編成のバンドで演奏する場合には、演奏する個々の音符が書かれた楽譜は使用しないで、コード譜またはリードシートと呼ばれるメロディとコード進行のみが書かれた楽譜を使用することが通常である。従って市販のCD等の曲をバンドで演奏するためには曲のコード進行を採譜する必要があるが、この作業は特別な音楽的知識を有する専門家のみが可能であり、一般の人には不可能であった。そこで、市販のパーソナルコンピュータなどを使用して、演奏音が収録された音楽CD等の音源から出力される音楽音響信号に基づいて、コード名を検出する自動採譜装置が求められていた。
このような音楽音響信号からコードを検出する装置として、下記特許文献1の構成がある。同文献の構成では、パワー・スペクトルの計算結果から基本周波数候補を抽出し、この基本周波数候補から倍音と思われるものを除去して音符情報を検出し、この音符情報から和音を検出している。
同様に音楽音響信号からコードを検出する装置として、後述する特許文献2の構成がある。該特許文献2の構成では、入力される音響信号に対して、異なる特性のディジタルフィルタリング処理を時分割で行い、各音階音のレベルを検出し、検出したレベルのうちオクターブ内で同じ音階関係にあるレベル同士を積算して、その積算レベルのうち値が大きい所定数を使って和音検出をしている。この方法では音響信号に含まれる個々の音符情報を検出しないので、後述する特許文献1にあげるような問題は発生しない。
特許第2876861号
特許第3156299号
しかし、該特許文献1に示す構成では、上記倍音を除去する作業は、楽器の種類による倍音構造の違い、打鍵強さによる倍音の出方の違い、時間による倍音のパワー変化、同じ周波数を倍音成分として持つ音同士の位相干渉の問題などから非常に困難であることが知られている。即ち、この音符情報を検出するという工程が、多くの楽器や歌唱などが混じった一般の音楽CDなどの音源で必ずしも正しく機能するとは考えられない。
他方、音楽音響信号からコードを検出する上記特許文献2に示す構成では、各音階音のレベルをオクターブ内で同じ音階関係にあるもの同士、つまり12の音名毎に積算してしまっているので、同じ構成音からなる複数の和音、例えばラ、ド、ミ、ソからなるAm7とド、ミ、ソ、ラからなるC6という2つのコードを判別することができない。
また、この特許文献2の和音検出装置には、テンポや小節の検出機能はなく、和音検出は所定のタイミング毎に行うとなっている。つまり、あらかじめ曲のテンポを設定してそのテンポで発音するメトロノームに合わせて演奏するようなケースを想定しており、音楽CD等のような演奏後の音響信号に適用した場合、一定時間間隔毎のコード名は検出できるが、テンポや小節を検出していないので、コード譜またはリードシートと呼ばれているような各小節のコード名が書かれた楽譜のような形式に出力することはできない。
仮に曲のテンポを与えたとしても、一般的に音楽CDに収録されている演奏のテンポは一定ではなく多少揺らぐため、正しく小節毎のコードを検出することはできない。
また、一定のテンポで発音されるメトロノームなどに合わせて正確なテンポで演奏することは初心者の演奏者にとっては非常に困難であり、一般的には演奏のテンポは揺らいでしまうのが通常である。
さらに、特許文献2の構成では、入力される音響信号に対して、異なる特性のディジタルフィルタリング処理を時分割で行う構成が採用されているが、この構成の採用理由として、FFT演算では低域で周波数分解が悪いことをあげている。しかし、入力音響信号をダウンサンプリングしてFFTを行うことで低域でもある程度の周波数分解能を得ることは可能であるし、ディジタルフィルタリング処理では、フィルタ出力信号のレベルを求めるためにエンベロープ抽出部が必要になってしまうのに対し、FFTでは、FFT後のパワーそのものが各周波数でのレベルを表しているためそのようなものは必要なく、FFTポイント数とシフト量のパラメータを適宜選ぶことで周波数分解能や時間分解能を自由に設定できるメリットもある。
仮に和音が検出できたとしても、検出された和音中に、7th、9thなどの音程があると、実際には、3和音で良いのに、4和音のコードとして検出される可能性がある。また特徴的な音程の強度が比較的小さく、所望のコードが候補に入らないこともある。従って自動採譜ができるようになったとしても、採譜された結果にある程度ユーザ側で自由な設定ができる必要がある。
本発明は、以上のような問題に鑑み創案されたもので、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざり、しかも演奏テンポに揺らぎのある音楽音響信号(オーディオ信号)から、個々の音符情報を検出することなしに、全体の響きから、コード名(和音名)を検出することができるコード名検出装置を提供すると共に、その結果においてユーザ側で自由に採譜結果に手を加えることができるようにせんとするものである。
併せて、これらの装置をコンピュータ上に実現できるコード名検出用のコンピュータ・プログラムについても、提供する。
そのため本発明に係るコード名検出装置の構成は、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められる(ベース検出期間におけるベース検出音域の各音階音のレベルの平均的なレベルを計算することによって求められる)ベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められる(コード検出期間における各音階音の平均的なレベルを計算することによって求められる)コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記コード名決定手段で決定されたベース音及びコード構成音を表示する表示手段と、
上記表示手段で表示されたコード構成音の数を変更する変更手段と、
上記変更手段によるコード構成音の数の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、表示手段にコード構成音を再表示させる再設定手段と
を有することを基本的特徴としている。
上記構成によれば、入力手段に入力された音響信号から所定の時間毎の各音階音のレベルを音階音レベル検出手段によって求め、上記ビート検出手段によって、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、同じくビート検出手段により、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート(拍)間隔(つまりテンポ)と各ビートの位置を検出し、次に上記小節検出手段により、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す上記値求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置(1拍目の位置)を検出することになる。
すなわち、入力された音響信号から所定の時間毎の各音階音のレベルを求め、この所定の時間毎の各音階音のレベルの変化から平均的なビート(拍)間隔(つまりテンポ)と各ビートの位置を検出し、次にこのビート毎の各音階音のレベルの変化から拍子と小節線位置(1拍目の位置)を検出することになる。
また上記ベース音検出手段において、ベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名を、ベース音と各コード検出範囲における各音階音のレベルから、決定するものとする。
上記構成によれば、入力手段から入力された入力音響信号に対し、第1の音階音レベル検出手段により、所定の時間間隔で、まずビート検出に適したパラメータでFFT演算を行い、これにより所定の時間毎の各音階音のレベルを求め、ビート検出手段により、この所定の時間毎の各音階音のレベルの変化から平均的なビート間隔と各ビートの位置を検出する。次に、小節検出手段により、このビート毎の各音階音のレベルの変化から拍子と小節線位置を検出する。さらに、本発明のコード名検出装置は、第2の音階音レベル検出手段により、入力音響信号に対し先のビート検出の時とは異なる別の所定の時間間隔で、今度はコード検出に適したパラメータでFFT演算を行い、これにより所定の時間毎の各音階音のレベルを求める。そしてベース音検出手段により、この各音階音のレベルの内、低域側の音階音のレベルから各小節のベース音を検出し、コード名決定手段により、検出したベース音と各音階音のレベルから各小節のコード名を決定することになる。
また上記のように、ベース音検出手段でこのベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名をベース音と各コード検出範囲における各音階音のレベルから決定することになる。
以上のように、本発明のコード名検出装置の構成では、簡単な構成のみでビート検出という時間分解能が必要な処理(謂わばテンポ検出装置の構成と言って良い)と、和音検出という周波数分解能が必要な処理(上記テンポ検出装置の構成を基にさらに和音を検出できる構成)を同時に行うことができるようになる。
さらに、検出されたコード毎に、上記コード情報記憶手段に、それらの、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名が記憶される。そして、上記表示手段に、上記コード名決定手段で決定されたベース音及びコード構成音が表示される。
この結果を見たユーザは、その結果においてコード名が適切でない、或いは後にコード進行を聞いた時に不自然、と感じて訂正を加えたい時は、上記変更手段を使用して、ユーザ側で、表示されたコード構成音の数を変更することができる。すなわち、採用個数を変えることで、3和音、4和音のコントロールをすることが可能となる。
そのような変更が行われた場合、上記再設定手段により、上記変更手段によるコード構成音の数の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、表示手段にコード構成音を再表示させるようにすることになる。そのようにすることで、ユーザが適切乃至自然だと思うコード名が決定されることになる。
コード構成音数を変更させる場合に、コード情報記憶手段に記憶されたコード音階音強度やコード構成音を参照するのは、たとえば、構成音とする音階音の強度に閾値が設けられており、その閾値を増減することで、そのコード音階音強度の高い順に、コード構成音数を簡単に増減できるようになるからである。そのコード構成音数の変更によっては、コード名も変わるようになる。
次に第2の発明に係るコード名検出装置の構成は、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められる(ベース検出期間におけるベース検出音域の各音階音のレベルの平均的なレベルを計算することによって求められる)ベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められる(コード検出期間における各音階音の平均的なレベルを計算することによって求められる)コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記ベース音検出手段及びコード名決定手段で決定されたベース音及びコード構成音を表示すると共に、コード構成音及び/又はベース音を変更しようとする時には、コード名決定手段及び/又はベース音検出手段で検出されている他の候補となるコード構成音及び/又はベース音を表示する表示手段と、
上記表示手段で表示されたコード構成音の追加又は削除、及び/又はベース音の変更を行う変更手段と、
上記変更手段によるコード構成音の追加又は削除、及び/又はベース音の変更に基づき、コード名決定手段及び/又はベース音検出手段にこれらの情報の決定を変更させ、コード情報記憶手段に、元の情報を維持したまま、新たなコード構成音、コード構成音数、コード名を、及び/又はベース音の変更情報を記憶させると共に、表示手段にこれらの変更情報を再表示させる再設定手段と
を有することを特徴としている。
上記構成では、入力手段〜表示手段までの構成は、先の発明と同じであるが、変更手段及び再設定手段の構成は、その機能が異なっている。
すなわち、上記コード情報記憶手段に、検出されたコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められるベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められるコード音階音強度、コード構成音、コード構成音数、コード名が記憶され、上記表示手段に、上記ベース音検出手段及びコード名決定手段で決定されたベース音及びコード構成音が表示される。
この結果を見たユーザは、その結果においてベース音やコード名(或いはコード構成音)が適切でない、或いは後にコード進行を聞いた時に不自然、と感じて訂正を加えたい時は、上記変更手段を使用して、ユーザ側で、表示されたコード構成音の追加又は削除、及び/又はベース音の変更を行うことができる。すなわち、コード構成音及び/又はベース音を変更しようとする時には、上記表示手段に、コード名決定手段及び/又はベース音検出手段で検出されている他の候補となるコード構成音及び/又はベース音が表示される。それに基づいて、ユーザは、その候補の中から、変更手段により、コード名決定手段及び/又はベース音検出手段で検出されている他の候補であるコード構成音及び/又はベース音に変更する。
上記変更手段によるコード構成音の追加又は削除、及び/又はベース音の変更がなされた時には、上記再設定手段により、該コード構成音の追加又は削除、及び/又はベース音の変更操作に基づいて、コード名決定手段及び/又はベース音決定手段にこれらの情報の決定を変更させ、コード情報記憶手段に、元の情報を維持したまま、新たなコード構成音、コード構成音数、コード名を、及び/又はベース音の変更情報を記憶させる。それと共に、表示手段にこれらの変更情報を再表示させることになる。
ここで、再設定手段が元の情報を維持したまま、追加又は削除されたコード構成音、及び/又は変更されたベース音を記憶させる(詳細な処理方法は実施形態の実施例2参照)のは、このようなユーザが一旦手を加えたデータでも、元に戻して最初からやり直したいような場合に、元のデータが残っていないと、できなくなってしまうからである。
以上のような構成を用いることで、仮に和音が検出できたとしても、検出された和音中に、特徴的な音程の強度が比較的小さく、所望のコードが候補に入らない場合でも、上記変更手段によりベース音やコード構成音に変更を加えることができ、採譜された結果にある程度ユーザ側で自由な設定ができるようになる。
さらに、3つ目の本発明の構成及び4つ目の本発明の構成は、第1の発明の構成及び第2の発明の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、第1の発明乃至第2の発明の構成として規定された各機能実現手段と同様な機能実現手段が達成されることになる。
第3の発明のより具体的構成は、
コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められる(ベース検出期間におけるベース検出音域の各音階音のレベルの平均的なレベルを計算することによって求められる)ベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められる(コード検出期間における各音階音の平均的なレベルを計算することによって求められる)コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記コード名決定手段で決定されたベース音及びコード構成音を表示する表示手段と、
上記表示手段で表示されたコード構成音の数を変更する変更手段と、
上記変更手段によるコード構成音の数の変更に基づき、コード情報記憶手段に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定手段に変更させ、その変更情報を上記コード情報記憶手段に再記憶させると共に、表示手段にコード構成音を再表示させる再設定手段と
して機能させることを特徴とするコード名検出用プログラムである。
さらに、第4の発明の構成は、上記第2の発明の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、コンピュータに上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、第2の発明の構成として規定された各機能実現手段と同様な機能実現手段が達成されることになる。
第4の発明のより具体的構成は、
コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と、
検出した全てのコード毎に、コード位置、ベース検出期間におけるベースの検出音域の音階音のレベルより求められる(ベース検出期間におけるベース検出音域の各音階音のレベルの平均的なレベルを計算することによって求められる)ベース域音階音強度、ベース音、コード検出期間におけるコードの検出音域の音階音のレベルより求められる(コード検出期間における各音階音の平均的なレベルを計算することによって求められる)コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶手段と、
上記ベース音検出手段及びコード名決定手段で決定されたベース音及びコード構成音を表示すると共に、コード構成音及び/又はベース音を変更しようとする時には、コード名決定手段及び/又はベース音検出手段で検出されている他の候補となるコード構成音及び/又はベース音を表示する表示手段と、
上記表示手段で表示されたコード構成音の追加又は削除、及び/又はベース音の変更を行う変更手段と、
上記変更手段によるコード構成音の追加又は削除、及び/又はベース音の変更に基づき、コード名決定手段及び/又はベース音検出手段にこれらの情報の決定を変更させ、コード情報記憶手段に、元の情報を維持したまま、新たなコード構成音、コード構成音数、コード名を、及び/又はベース音の変更情報を記憶させると共に、表示手段にこれらの変更情報を再表示させる再設定手段と
して機能させることを特徴とするコード名検出用プログラムである。
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
尚、第3乃至第4の発明の構成の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能(コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い)によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
これは、第1乃至第2の発明の構成として規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
本発明に規定されたコード名検出装置及びプログラムによれば、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざり、しかも演奏テンポに揺らぎのある音楽音響信号(オーディオ信号)から、個々の音符情報を検出することなしに、全体の響きから、コード名(和音名)を検出することができるコード名検出装置を提供すると共に、その結果においてユーザ側で自由に採譜結果に手を加えることができるようになる。
以下、本発明の実施の形態を図示例と共に説明する。
前提例
図1は、本発明の前提となるテンポ検出装置の全体ブロック図である。このテンポ検出装置の構成は、テンポ検出用プログラムが読み込まれて実行可能なコンピュータにより構成されており、該コンピュータをテンポ検出用機能ブロックとして分けた場合、図1に示すように、音響信号を入力する入力部1と、入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出部2と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部3と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部4とを有するもので構成される。
上記入力部1は、後述するように、コンピュータに接続されたマイクや、同じくコンピュータに接続されたMIDIインタフェースなどのI/Oインターフェースで構成されており、上述のように、音響信号を入力する機能を有している。
上記音階音レベル検出部2は、テンポ検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのCPUにより構成されており、上述のように、入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める機能を有している。
上記ビート検出部3は、同じくテンポ検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのCPUにより構成されており、上述のように、所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出する機能を有している。
上記小節検出部4は、同じくテンポ検出用プログラムが読み込まれて実行され、以下に示す処理を行うコンピュータのCPUにより構成されており、上述のように、上記ビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する機能を有している。
音楽音響信号を入力する上記入力部1は、テンポ検出をする対象の音楽音響信号を入力する部分である。マイク等の機器から入力されたアナログ信号をA/D変換器(図示無し)によりディジタル信号に変換しても良いし、音楽CDなどのディジタル化された音楽データの場合は、そのままファイルとして取り込み(リッピング)、これを指定して開くようにしても良い。このようにして入力したディジタル信号がステレオの場合、後の処理を簡略化するためにモノラルに変換する。
このディジタル信号は、音階音レベル検出部2に入力される。この音階音レベル検出部は図2の各部から構成される。
そのうち波形前処理部20は、音楽音響信号の上記入力部1からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする構成である。
ダウンサンプリングレートは、ビート検出に使う楽器の音域によって決定する。すなわち、シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、ダウンサンプリング後のサンプリング周波数はそれほど高くする必要はない。
例えば検出する最高音をA6(C4が中央のド)とする場合、A6の基本周波数は約1760Hz(A4=440Hzとした場合)となるので、ダウンサンプリング後のサンプリング周波数は、ナイキスト周波数が1760Hz以上となる、3520Hz以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が44.1kHz(音楽CD)の場合、1/12程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、3675Hzとなる。
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数(今の例では1837.5Hz)以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす(今の例では波形サンプルの12個に11個を破棄する)ことによって行われる。
このようにダウンサンプリングの処理を行うのは、この後のFFT演算において、同じ周波数分解能を得るために必要なFFTポイント数を下げることで、FFTの演算時間を減らすのが目的である。
なお、音楽CDのように、音源が固定のサンプリング周波数で既にサンプリングされている場合は、このようなダウンサンプリングが必要になるが、音楽音響信号の入力部1が、マイク等の機器から入力されたアナログ信号をA/D変換器によりディジタル信号に変換するような場合には、当然A/D変換器のサンプリング周波数を、ダウンサンプリング後のサンプリング周波数に設定することで、この波形前処理部を省くことが可能である。
このようにして波形前処理部20によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号を、FFT演算部21によりFFT(高速フーリエ変換)する。
FFTのパラメータ(FFTポイント数とFFT窓のシフト量)は、ビート検出に適した値とする。つまり、周波数分解能を上げるためにFFTポイント数を大きくすると、FFT窓のサイズが大きくなってしまい、より長い時間から1回のFFTを行うことになり、時間分解能が低下する、というFFTの特性を考慮しなくてはならない(つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い)。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし残りは0で埋めることによって、FFTポイント数を大きくしても時間分解能が悪くならない方法もあるが、低音側のパワー(ここでパワーは、上記レベルと同意;以下同じ)も正しく検出するためには、ある程度の波形サンプル数は必要である。
以上のようなことを考慮し、本実施例では、FFTポイント数512、窓のシフトは32サンプルで、0埋めなしという設定にした。このような設定でFFT演算を行うと、時間分解能約8.7ms、周波数分解能約7.2Hzとなる。時間分解能約8.7msという値は、四分音符=300のテンポの曲で、32分音符の長さが、25msであることを考えると、十分な値であることがわかる。
このようにして、所定の時間間隔毎にFFT演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部22に送られる。
レベル検出部22では、FFT演算部21で計算されたパワー・スペクトルから、各音階音のレベルを計算する。FFTは、サンプリング周波数をFFTポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、以下のような処理を行う。つまり、音階音を計算するすべての音(C1からA6)について、その各音の基本周波数の上下50セントの範囲(100セントが半音)の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
すべての音階音についてレベルが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔(先の例では32サンプル)進めて、FFT演算部21とレベル検出部22の処理を波形の終わりまで繰り返す。
以上により、音楽音響信号の入力部1に入力された音響信号の、所定時間毎の各音階音のレベルが、バッファ23に保存される。
次に、図1のビート検出部3の構成について説明する。該ビート検出部3は、図3のような処理の流れで実行される。
ビート検出部3は、音階音レベル検出部が出力した所定時間(以下、この1所定時間を1フレームと呼ぶ)毎の各音階音のレベルの変化を元に平均的なビート(拍)間隔(つまりテンポ)とビートの位置を検出する。そのために、まずビート検出部3は、各音階音のレベル増分値の合計(前のフレームとのレベルの増分値をすべての音階音で合計したもの。前のフレームからレベルが減少している場合は0として加算する)を計算する(ステップS100)。
つまり、フレーム時間tにおけるi番目の音階音のレベルをLi(t)とするとき、i番目の音階音のレベル増分値Laddi(t)は、下式数1に示すようになり、このLaddi(t)を使って、フレーム時間tにおける各音階音のレベル増分値の合計L(t)は、下式数2で計算できる。ここで、Tは音階音の総数である。
この合計L(t)値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
例として、図4に、ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のレベルを濃淡で表したもの(下が低い音、上が高い音。この図では、C1からA6の範囲)、下段がフレーム毎の各音階音のレベル増分値の合計を示している。この図の各音階音のレベルは、音階音レベル検出部から出力されたものであるので、周波数分解能が約7.2Hzであり、G#2以下の一部の音階音でレベルが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のレベルが測定できないのは、問題ない。
この図の下段に見られるように、各音階音のレベル増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
ビートの位置を求めるために、ビート検出部3では、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のレベル増分値の合計の自己相関から計算できる(図3;ステップS102)。
あるフレーム時間tにおける各音階音のレベル増分値の合計をL(t)とすると、この自己相関φ(τ)は、以下の式数3で計算される。
自己相関計算の概念図を、図5に示す。この図のように、時間遅れτがL(t)のピークの周期の整数倍の時に、φ(τ)は大きな値となる。よって、ある範囲のτについてφ(τ)の最大値を求めれば、曲のテンポを求めることができる。
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符=30から300の範囲を計算するならば、自己相関を計算する範囲は、0.2秒から2秒となる。時間(秒)からフレームへの変換式は、以下の数4式に示す通りとなる。
この範囲の自己相関φ(τ)が最大となるτをビート間隔としても良いが、必ずしもすべての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め(図3;ステップS104)、これら複数の候補からユーザにビート間隔を決定させるのが良い(図3;ステップS106)。
このようにしてビート間隔が決定したら(決定したビート間隔をτmaxとする)、まず最初に先頭のビート位置を決定する。
先頭のビート位置の決定方法を、図6を用いて説明する。図6の上段はフレーム時間tにおける各音階音のレベル増分値の合計L(t)で、下段M(t)は決定したビート間隔τmaxの周期で値を持つ関数である。式で表すと、下式数5に示すようになる。
この関数M(t)を、0からτmax−1の範囲でずらしながら、L(t)とM(t)の相互相関を計算する。
相互相関r(s)は、上記M(t)の特性から、下式数6で計算できる。
この場合のnは、最初の無音部分の長さに応じて適当に決めれば良い(図6の例では、n=10)。
r(s)をsが0からτmax−1の範囲で求め、r(s)が最大となるsを求めれば、このsのフレームが最初のビート位置である。
最初のビート位置が決まったら、それ以降のビートの位置を1つずつ決定していく(図3;ステップS108)。
その方法を、図7を用いて説明する。図7の三角印の位置に先頭のビートが見つかったとする。2番目のビート位置は、この先頭のビート位置からビート間隔τmaxだけ離れた位置を仮のビート位置とし、その近辺でL(t)とM(t)が最も相関が取れる位置から決定する。つまり、先頭のビート位置をb0とするとき、以下の式のr(s)が最大となるようなsの値を求める。この式のsは仮のビート位置からのずれで、以下の式数7の範囲の整数とする。Fは揺らぎのパラメータで0.1程度の値が適当であるが、テンポの揺らぎの大きい曲では、もっと大きな値にしてもよい。nは5程度でよい。
kは、sの値に応じて変える係数で、例えば図8のような正規分布とする。
r(s)が最大となるようなsの値が求まれば、2番目のビート位置b1は、下式数8で計算される。
以降、同じようにして3番目以降のビート位置も求めることができる。
テンポがほとんど変わらない曲ではこの方法でビート位置を曲の終わりまで求めることができるが、実際の演奏は多少テンポが揺らいだり、部分的にだんだん遅くなったりすることがよくある。
そこで、これらのテンポの揺らぎにも対応できるように以下のような方法を考えた。
つまり、図7のM(t)の関数を、図9のように変化させるものである。
1)は、従来の方法で、図のように各パルスの間隔をτ1、τ2、τ3、τ4としたとき、
τ1=τ2=τ3=τ4=τmax
である。
2)は、τ1からτ4を均等に大きくしたり小さくしたりするものである。
τ1=τ2=τ3=τ4=τmax+s (-τmax・F≦s≦τmax・F)これにより、急にテンポが変わった場合に対応できる。
3)は、rit.(リタルダンド、だんだん遅く)又は、accel.(アッチェレランド、だんだん速く)に対応したもので、各パルス間隔は、
τ1=τmax
τ2=τmax+1・s
τ3=τmax+2・s (-τmax・F≦s≦τmax・F)
τ4=τmax+4・s
で計算される。
1、2、4の係数は、あくまで例であり、テンポ変化の大きさによって変えてもよい。
4)は、3)のようなrit.やaccel.の場合の、5個のパルスの位置のどこが現在ビートを求めようとしている場所かを変えるものである。
これらをすべて組み合わせて、L(t)とM(t)の相関を計算し、それらの最大からビート位置を決めれば、テンポが揺らぐ曲に対してもビート位置の決定が可能である。なお、2)と3)の場合には、相関を計算するときの係数kの値を、やはりsの値に応じて変えるようにする。
さらに、5個のパルスの大きさは現在すべて同じにしてあるが、ビートを求める位置(図9の仮のビート位置)のパルスのみ大きくしたり、ビートを求める位置から離れるほど値を小さくして、ビートを求める位置の各音階音のレベル増分値の合計を強調するようにしてもよい[図9の5)]。
以上のようにして、各ビートの位置が決定したら、この結果をバッファ30に保存すると共に、検出した結果を表示し、ユーザに確認してもらい、間違っている箇所を修正してもらうようにしてもよい。
ビート検出結果の確認画面の例を、図10に示す。同図の三角印の位置が検出したビート位置である。
「再生」のボタンを押すと、現在の音楽音響信号が、D/A変換され、スピーカ等から再生される。現在の再生位置は、図のように縦線等の再生位置ポインタで表示されるので、演奏を聞きながら、ビート検出位置の誤りを確認できる。さらに、検出の元波形の再生と同時に、ビート位置のタイミングで例えばメトロノームのような音を再生させるようにすれば、目で確認するだけでなく音でも確認でき、より容易に誤検出を判断できる。このメトロノームの音を再生させる方法としては、例えばMIDI機器等が考えられる。
ビート検出位置の修正は、「ビート位置の修正」ボタンを押して行う。このボタンを押すと、画面に十字のカーソルが現れるので、最初のビート検出が間違っている箇所で正しいビート位置をクリックする。クリックされた場所の少し前(例えばτmaxの半分の位置)から後のビート位置をすべてクリアし、クリックされた場所を、仮のビート位置として、以降のビート位置を再検出する。
次に、拍子および小節の検出について説明する。
これまでの処理で、ビートの位置が確定しているので、今度は、ビート毎の音の変化度合いを求める。ビート毎の音の変化度合いは、音階音レベル検出部が出力した、フレーム毎の各音階音のレベルから計算する。
j番目のビートのフレーム数をbjとし、その前後のビートのフレームをbj−1、bj+1とする時、j番目のビートのビート毎の音の変化度合いは、フレームbj−1からbj−1までのフレームの各音階音のレベルの平均とフレームbjからbj+1−1までのフレームの各音階音のレベルの平均を計算し、その増分値から各音階音のビート毎の音の変化度合いを求め、それらをすべての音階音で合計して計算することができる。
つまり、フレーム時間tにおけるi番目の音階音のレベルをLi(t)とするとき、j番目のビートのi番目の音階音のレベルの平均Lavgi(j)は、下式数9であるから、j番目のビートのi番目の音階音のビート毎の音の変化度合いBaddi(j)は、下式数10に示すようになる。
よって、j番目のビートのビート毎の音の変化度合いB(j)は、下式数11に示すようになる。ここで、Tは音階音の総数である。
図11の最下段は、このビート毎の音の変化度合いである。このビート毎の音の変化度合いから拍子と1拍目の位置を求める。
拍子は、ビート毎の音の変化度合いの自己相関から求める。一般的に音楽は1拍目で音が変わることが多いと考えられるので、このビート毎の音の変化度合いの自己相関から拍子を求めることができる。例えば、下式数12に示す自己相関φ(τ)を求める式から、ビート毎の音の変化度合いB(j)の自己相関φ(τ)を遅れτが、2から4の範囲で求め、自己相関φ(τ)が最大となる遅れτを拍子の数とする。
Nは、総ビート数、τ=2〜4の範囲でφ(τ)を計算し、φ(τ)が最大となるτを拍子の数とする。
次に1拍目を求めるが、これは、ビート毎の音の変化度合いB(j)がもっとも大きい箇所を1拍目とする。つまり、φ(τ)が最大となるτをτmax、下式数13のX(k)が最大となるkをkmaxとするとき、kmax番目のビートが最初の1拍目の位置となり、以降、τmaxを足したビート位置が1拍目となる。
n
maxは、τ
max・n+k<Nの条件で最大となるn
以上のようにして、拍子及び1拍目の位置(小節線の位置)が決定したら、この結果をバッファ40に保存すると共に、検出した結果を画面表示して、ユーザに変更させるようにすることが望ましい。特に変拍子の曲は、この方法では対応できないので、変拍子の箇所をユーザに指定してもらう必要がある。
以上の前提例構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート(拍)の位置、さらに曲の拍子と1拍目の位置を検出することが可能となる。
図12は、本発明のコード名検出装置の全体ブロック図である。同図において、ビート検出及び小節検出の構成は、前提例構成と基本的に同じであり、同一構成において、テンポ検出用とコード検出用の構成について、上記前提例構成の場合と異なるものもあるので、数式等を除き、同じ説明が重なるが、以下に示す。
同図によれば、本コード名検出装置の構成は、音響信号を入力する入力部1と、入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求めるビート検出用音階音レベル検出部2と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部3と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部4と、上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求めるコード検出用音階音レベル検出部5と、検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出部6と、検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定部7と、検出した全てのコード毎に、コード位置、ベース域音階音強度、ベース音、コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶部8と、上記コード名決定部7で決定されたベース音及びコード構成音を表示する表示部9と、該表示部9で表示されたコード構成音の数を変更する変更部10と、該変更部10によるコード構成音の数の変更に基づき、コード情報記憶部8に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定部7に変更させ、その変更情報を上記コード情報記憶部8に再記憶させると共に、表示部9にコード構成音を再表示させる再設定部11とを有している。
上記コード情報記憶部8は、コンピュータの内部又は外部記憶装置で構成されており、上述のように、検出した全てのコード毎に、コード位置、ベース域音階音強度、ベース音、コード音階音強度、コード構成音、コード構成音数、コード名を記憶する機能を有している。
上記表示部9は、コンピュータのディスプレイで構成されており、上述のように、上記コード名決定部7で決定されたベース音及びコード構成音を表示する機能を有している。
上記変更部10は、同じくコンピュータのディスプレイに表示されたカーソルと該コンピュータに接続されたポインティングデバイスで構成されており、上述のように、表示部9で表示されたコード構成音の数を変更する構成である。
上記再設定部11は、コード名検出用プログラムが読み込まれて実行され、次に説明する処理を行うコンピュータのCPUにより構成されており、上述のように、変更部10によるコード構成音の数の変更に基づき、コード情報記憶部8に記憶されたコード音階音強度及びコード構成音を参照して、コード構成音、コード構成音数、コード名を、コード名決定部7に変更させ、その変更情報を上記コード情報記憶部8に再記憶させると共に、表示部9にコード構成音を再表示させる機能を有している。
音楽音響信号を入力する上記入力部1は、コード検出をする対象の音楽音響信号を入力する部分であるが、基本的構成は上記実施例1の入力部1と同じであるので、その詳細な説明は省略する。ただし、通常センタに定位されるボーカルが後のコード検出でじゃまになる場合は、右チャンネルの波形と左チャンネルの波形を引き算することでボーカルキャンセルするようにしても良い。
このディジタル信号は、ビート検出用音階音レベル検出部2とコード検出用音階音レベル検出部5とに入力される。これらの音階音レベル検出部は、どちらも上記図2の各部から構成され、構成はまったく同じなので、同じものをパラメータだけを変えて再利用できる。
そしてその構成として使用される波形前処理部20は、上記と同様な構成であり、音楽音響信号の上記入力部1からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする。ただし、ダウンサンプリング後のサンプリング周波数、つまり、ダウンサンプリングレートは、ビート検出用とコード検出用で変えるようにしても良いし、ダウンサンプリングする時間を節約するために同じにしても良い。
ビート検出用の場合は、ビート検出に使う音域によってダウンサンプリングレートを決定する。シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、以下のコード検出時と同じダウンサンプリングレートで構わない。
コード検出用の波形前処理部のダウンサンプリングレートは、コード検出音域によって変える。コード検出音域とは、コード名決定部でコード検出するときに使う音域のことである。例えばコード検出音域をC3からA6(C4が中央のド)とする場合、A6の基本周波数は約1760Hz(A4=440Hzとした場合)となるので、ダウンサンプリング後のサンプリング周波数はナイキスト周波数が1760Hz以上となる、3520Hz以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が44.1kHz(音楽CD)の場合、1/12程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、3675Hzとなる。
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数(今の例では1837.5Hz)以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす(今の例では波形サンプルの12個に11個を破棄する)ことによって行われる。これについては、前提例構成に説明したことと同じ理由による。
このようにして波形前処理部20によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号をFFT演算部21により、FFT(高速フーリエ変換)する。
FFTのパラメータ(FFTポイント数とFFT窓のシフト量)は、ビート検出時とコード検出時で異なる値とする。これは、周波数分解能を上げるためにFFTポイント数を大きくすると、FFT窓のサイズが大きくなってしまい、より長い時間から1回のFFTを行うことになり、時間分解能が低下する、というFFTの特性によるものである(つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い)。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし、残りは0で埋めることによってFFTポイント数を大きくしても時間分解能が悪くならない方法もあるが、本実施例のケースでは、低音側のパワーも正しく検出するためにある程度の波形サンプル数は必要である。
以上のようなことを考慮し、本実施例では、ビート検出時はFFTポイント数512、窓のシフトは32サンプルで、0埋めなし、コード検出時はFFTポイント数8192、窓のシフトは128サンプルで、波形サンプルは一度のFFTで1024サンプル使うようにした。このような設定でFFT演算を行うと、ビート検出時は、時間分解能約8.7ms、周波数分解能約7.2Hz、コード検出時は、時間分解能約35ms、周波数分解能約0.4Hzとなる。今レベルを求めようとしている音階音は、C1からA6の範囲であるので、コード検出時の周波数分解能約0.4Hzは、最も周波数差の小さいC1とC#1の基本周波数の差、約1.9Hzにも対応できる。また、四分音符=300のテンポの曲で32分音符の長さが25msであることを考えると、ビート検出時の時間分解能約8.7msは、十分な値であることがわかる。
このようにして、所定の時間間隔毎にFFT演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部22に送られる。
レベル検出部22では、FFT演算部21で計算されたパワー・スペクトルから、各音階音のレベルを計算する。FFTは、サンプリング周波数をFFTポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、前提例構成と同様な処理を行う。すなわち、音階音を計算するすべての音(C1からA6)について、その各音の基本周波数の上下50セントの範囲(100セントが半音)の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
すべての音階音についてレベルが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔(先の例ではビート検出時は32サンプル、コード検出時は128サンプル)進めて、FFT演算部21とレベル検出部22の処理を波形の終わりまで繰り返す。
以上により、音楽音響信号の入力部1に入力された音響信号の、所定時間毎の各音階音のレベルが、ビート検出用とコード検出用の2種類のバッファ23及び50に保存される。
次に、図12のビート検出部3及び小節検出部4の構成については、前提例構成のビート検出部3及び小節検出部4と同じ構成なので、その詳細な説明は、ここでは、省略する。
前提例構成と同様な構成と手順で、小節線の位置(各小節のフレーム番号)が確定したので、今度は各小節のベース音を検出する。
ベース音は、コード検出用音階音レベル検出部5が出力した各フレームの音階音のレベルから検出する。
図13に前提例構成の図4と同じ曲の同じ部分のコード検出用音階音レベル検出部5が出力した各フレームの音階音のレベルを示す。この図のように、コード検出用音階音レベル検出部5での周波数分解能は、約0.4Hzであるので、C1からA6のすべての音階音のレベルが抽出されている。
ベース音は、小節の前半と後半で異なる可能性があるので、ベース音検出部6により、各小節の前半と後半でそれぞれ検出する。前半と後半のベース音が同じ音のときは、小節のベース音としてこれを確定し、コードも小節全体で検出する。前半と後半で別の音のベース音が検出されたときは、コードも前半と後半に分けて検出する。場合によっては、分割する範囲を更に半分にまで(小節の4分の1まで)狭めてもよい。
ベース音は、ベース検出期間におけるベース検出音域の音階音のレベルの平均的な強さから求める。すなわちこれがベース音の強度である。
フレーム時間tにおけるi番目の音階音のレベルをLi(t)とすると、フレームfsからfeのi番目の音階音の平均的なレベルLavgi(fs,fe)は、下式数14で計算できる。
この平均的なレベルをベース検出音域、例えばC2からB3の範囲で計算し、平均的なレベルが最も大きな音階音をベース音として、ベース音検出部6は、決定する。ベース検出音域に音が含まれない曲や無音部分で間違ってベース音を検出しないために、適当な閾値を設定し、検出したベース音の平均的なレベルが、この閾値以下の場合は、ベース音を検出しないようにしてもよい。また、後のコード検出でベース音を重要視する場合には、検出したベース音がベース検出期間中継続してあるレベル以上を保っているかどうかをチェックするようにして、より確実なものだけをベース音として検出するようにしてもよい。さらに、ベース検出音域中、平均的なレベルが最も大きい音階音をベース音として決定するのではなく、この各音名の平均的なレベルを12の音名毎に平均し、この音名毎のレベルが最も大きな音名をベース音名として決定し、その音名を持つベース検出音域の中の音階音で、平均的なレベルが最も大きい音階音をベース音として決定するようにしてもよい。
ベース音が決定したら、この結果をバッファ60に保存すると共に、ベース検出結果を画面表示して、間違っている場合にはユーザに修正させるようにしてもよい。また、曲によってベース音域が変わることも考えられるので、ユーザがベース検出音域を変更できるようにしてもよい。
図14に、ベース音検出部6によるベース検出結果の表示例を示す。
次にコード名決定部7によるコード検出処理であるが、該コード検出処理も、同じようにコード検出期間における各音階音の平均的なレベルを計算することによって決定する。すなわちこれがコードの強度である。
本実施例では、コード検出期間とベース検出期間は同一としている。コード検出音域、例えばC3からA6の各音階音のコード検出期間における平均的なレベルを計算し、これが大きな値を持つ音階音から順に数個の音名を検出し、これとベース音の音名からコード名候補を抽出する。
上記コード情報記憶部8は、検出した上記データを記憶する構成であり、上記コンピュータの内部又は外部記憶装置で構成される。
図15は、コード情報記憶部8の情報記憶状態の模式図が示されている。同図に示すように、該コード情報記憶部8には、コード名検出の過程において、コード位置にはベース音検出期間の最初のフレーム番号(コード1、コード2、……)が記憶され、ベース域音階音強度には、ベース音域内であって、ベース音検出期間のC〜Bまでの各12音の強度の区間平均が記憶される(例えばコード1では、Cが150、…、Bが110)。また、ベース音には、ベース音検出期間において検出されたベース音の音階番号が記憶される(例えばコード1では0、コード2では7)。コード音階音強度には、ベース検出期間のC〜Bまでの各12音の強度の区間平均が記憶され(例えばコード2では、Cが100、…、Bが130)、コード構成音には、ベース検出期間において抽出されたコード構成音が記憶される(例えばコード1では、0、4、7が、またコード2では、7、2、11、5が、各記憶される)。さらに、コード構成音数には、上述のようにして抽出された構成音の個数が記憶され(例えばコード1では3、またコード2では4)、コード名には、決定されたコード名(或いはそれに対応した番号でも良い)が記憶される(例えばコード1ではC、またコード2ではG7)。
図16は、上記のようにしてコード情報記憶部8に記憶されたベース及びコード構成音の表示部9(コンピュータのディスプレイ)における表示例が示されている。ここでは、各コードにおいてベース音及びコード構成音として抽出された音階音は黒丸で表示されている。これに加えて、各音階音の強度を数値、或いは各エリアの背景色濃淡で表しても良い。同図の例では、左端に音階音名が表示されているが、図17に示すように、表示エリアの矩形を鍵盤のような形で表示し、音階音名が分かるように表示するようにしても良い。
上記図15のように、コード情報記憶部8に記憶され、且つ図16に示すように、表示部9に表示された、コード構成音及びベース音の訂正について、説明する。本実施例では、コード名決定部7で決定されたコード構成音の数の変更により、コード名を変更する構成であり、その手順は、以下に示すようになる。
まず、図18に示すように、コード構成音表示領域内(図面ではコードCの領域内)にカーソルを置き、マウスなどのポインティングデバイス(図示無し)が右クリックされると、同図に示すように、構成音数変更メニューが表示され、さらにこれを左クリックで選択すると、図19に示すように、構成音数を入力するダイアログボックスが表示される。このダイアログボックスに現在の構成音数(図では3)が表示されているが、ここで変更したい構成音数(例えば4)を入力して、「OK」をクリックすると、その最初にポインティングデバイスを右クリックしたポイントに対応したコード(図17では当初「C」とコード名が表示されている)の構成音が変更される。本実施例では、図19に示すようなダイアログボックスとポインティングデバイスが、上記変更部10に相当する。
以上のように、上記変更部10によるコード構成音数の変更操作がなされると、コンピュータのCPUで構成される再設定部11により、上記コード情報記憶部8のコード構成音数が4に変更される。すると、4番目に強度が大きいB(図面ではレベル120)を4番目のコード構成音として、採用される。
上記の処理により、図20に示すように、コード情報記憶部8のコード1のコード構成音に11(Bに相当)が追加され、図21に示すように、表示部9のコード1(それまでコードCとされていた)の表示列のBの表示領域に黒丸が表示される。
この際、必ずしもレベルが大きな音がコード構成音であるとは限らないので、複数の音名の音を例えば5つ検出し、その中の2つ以上をすべての組み合わせで抜き出して、これとベース音の音名とからコード名候補の抽出を行う。
コードに関しても、平均的なレベルが閾値以下のものは検出しないようにしてもよい。また、コード検出音域もユーザが変更できるようにしてもよい。さらに、コード検出音域中、平均的なレベルが最も大きい音階音から順にコード構成音候補を抽出するのではなく、このコード検出音域内の各音名の平均的なレベルを12の音名毎に平均し、この音名毎のレベルの最も大きな音名から順にコード構成音候補を抽出してもよい。
コード名候補の抽出は、コードのタイプ(m、M7等)とコード構成音のルート音からの音程を保存したコード名データベースを、コード名決定部7により検索することによって抽出する。つまり、検出した5つの音名の中からすべての2つ以上の組み合わせを抜き出し、これらの音名間の音程が、このコード名データベースのコード構成音の音程の関係にあるかどうかをしらみつぶしに調べ、同じ音程関係にあれば、コード構成音のいずれかの音名からルート音を算出し、そのルート音の音名にコードタイプを付けて、コード名を決定する。このとき、コードのルート音(根音)や5度の音は、コードを演奏する楽器では省略されることがあるので、これらを含まなくてもコード名候補として抽出するようにする。ベース音を検出した場合には、このコード名候補のコード名にベース音の音名を加える。すなわち、コードのルート音とベース音が同じ音名であればそのままでよいし、異なる音名の場合は分数コードとする。
上記方法では、抽出されるコード名候補が多すぎるという場合には、ベース音による限定を行ってもよい。つまり、ベース音が検出された場合には、コード名候補の中でそのルート音がベース音と同じ音名でないものは削除する。
コード名候補が複数抽出された場合には、これらの中でどれか1つを決定するために、コード名決定部7により、尤度(もっともらしさ)の計算をする。
尤度は、コード検出音域におけるすべてのコード構成音のレベルの強さの平均とベース検出音域におけるコードのルート音のレベルの強さから計算する。すなわち、抽出されたあるコード名候補のすべての構成音のコード検出期間における平均レベルの平均値をLavgc、コードのルート音のベース検出期間における平均レベルをLavgrとすると、下式数15のように、この2つの平均により尤度を計算する。
この際、コード検出音域やベース検出音域に同一音名の音が複数含まれる場合には、それらのうち、平均レベルの強い方を使うようにする。あるいは、コード検出音域とベース検出音域のそれぞれで、各音階音の平均レベルを12の音名毎に平均し、その音名毎の平均値を使うようにしてもよい。
さらに、この尤度の計算に音楽的な知識を導入してもよい。例えば、各音階音のレベルを全フレームで平均し、それを12の音名毎に平均して各音名の強さを計算し、その強さの分布から曲の調を検出する。そして、調のダイアトニックコードには尤度が大きくなるようにある定数を掛ける、あるいは、調のダイアトニックスケール上の音から外れた音を構成音に含むコードはその外れた音の数に応じて尤度が小さくなるようにする等が、考えられる。さらにコード進行のよくあるパターンをデータベースとして記憶しておき、それと比較することで、コード候補の中からよく使われる進行になるようなものは尤度が大きくなるようにある定数を掛けるようにしてもよい。
最も尤度が大きいものをコード名として決定するが、コード名の候補を尤度とともに表示し、ユーザに選択させるようにしてもよい。
いずれにしても、コード名決定部7により、コード名が決定したら、この結果(変更情報)をバッファ70を介して、上記コード情報記憶部8に再記憶させると共に、図21に示すように、表示部9にコード構成音を再表示させる(コード名は、CからCM7に変更される)。
図22に、コード名決定部7によるコード名検出結果の表示例を示す。このように検出されたコード名を画面表示するだけでなく、MIDI機器等を使って、検出されたコードとベース音を再生するようにすることが望ましい。一般的には、コード名を見ただけで正しいかどうかは判断できないからである。
以上説明した本実施例構成によれば、簡単な構成のみでビート検出という時間分解能が必要な処理(上記前提例のテンポ検出装置の構成と同じ)と、コード検出という周波数分解能が必要な処理(上記テンポ検出装置の構成を基にさらにコード名を検出できる構成)を同時に行うことができるようになって、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざった入力された音楽音響信号に対し、個々の音符情報を検出することなしに全体の響きから、コード名を検出でき、その際に構成音が同じ和音でも判別可能であるだけでなく、その検出結果を見たり聞いたユーザがコード進行上不自然なコード音であり、その検出結果に訂正を加えたい時は、上記変更部10を使用して、ユーザ側で、表示されたコード構成音の数を変更することができ、適切なコード名の決定、或いはコード進行を聞いた時に自然と感じるように、ユーザによる訂正ができるようになる。
図23は、本発明に係る別のコード名検出装置の全体ブロック図である。同図において、ビート検出及び小節検出の構成は、前提例構成及び実施例1と基本的に同じであり、また表示部、変更部及び再設定部以下の構成は、上記実施例1の構成とは異なるので、同一構成についての説明は除き、別異の構成につき、以下に示す。
同図によれば、本コード名検出装置の構成は、音響信号を入力する入力部1と、入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求めるビート検出用音階音レベル検出部2と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部3と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部4と、上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求めるコード検出用音階音レベル検出部5と、検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出部6と、検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定部7と、検出した全てのコード毎に、コード位置、ベース域音階音強度、ベース音、コード音階音強度、コード構成音、コード構成音数、コード名を記憶するコード情報記憶部8と、上記ベース音検出部6及びコード名決定部7で決定されたベース音及びコード構成音を表示すると共に、コード構成音及び/又はベース音を変更しようとする時には、コード名決定部7及び/又はベース音検出部6で検出されている他の候補となるコード構成音及び/又はベース音を表示する表示部9aと、上記表示部9aで表示されたコード構成音の追加又は削除、及び/又はベース音の変更を行う変更部10aと、上記変更部10aによるコード構成音の追加又は削除、及び/又はベース音の変更に基づき、コード名決定部7及び/又はベース音検出部6にこれらの情報の決定を変更させ、コード情報記憶部8に、元の情報を維持したまま、新たなコード構成音、コード構成音数、コード名を、及び/又はベース音の変更情報を、元の情報とは別途に記憶させると共に、表示部9aにこれらの変更情報を再表示させる再設定部11aとを有している。
上記表示部9aは、コンピュータのディスプレイで構成されており、実施例1の構成のそれに相当する表示部9のように、上記コード名決定部7で決定されたベース音及びコード構成音を表示するだけでなく、コード構成音及び/又はベース音を変更しようとする時に、コード名決定部7及び/又はベース音検出部6で検出されている他の候補となるコード構成音及び/又はベース音を表示する機能を有している。
上記変更部10aは、同じくコンピュータのディスプレイに表示されたカーソルと該コンピュータに接続されたポインティングデバイスで構成されており、実施例1の構成のそれに相当する変更部10とは異なり、表示部9aで表示されたコード構成音の追加又は削除、及び/又はベース音の変更を直接行える構成である。
上記再設定部11aは、コード名検出用プログラムが読み込まれて実行され、次に説明する処理を行うコンピュータのCPUにより構成されており、実施例1の構成のそれに相当する再設定部11とは異なり、変更部10aによるコード構成音の追加又は削除、及び/又はベース音の変更に基づき、コード名決定部7及び/又はベース音検出部6にこれらの情報の決定を変更させ、コード情報記憶部8に、元の情報を維持したまま、新たなコード構成音、コード構成音数、コード名を、及び/又はベース音の変更情報を、元の情報とは別途に記憶させると共に、表示部9aにこれらの変更情報を再表示させる機能を有している。
上記実施例1の構成と同様、コード情報記憶部8は、図15に示すような状態で情報が記憶されている。すなわち、同図に示すように、該コード情報記憶部8には、コード名検出の過程において、コード位置にはベース音検出期間の最初のフレーム番号(コード1、コード2、……)が記憶され、ベース域音階音強度には、ベース音域内であって、ベース音検出期間のC〜Bまでの各12音の強度の区間平均が記憶される(例えばコード1では、Cが150、…、Bが110)。また、ベース音には、ベース音検出期間において検出されたベース音の音階番号が記憶される(例えばコード1では0、コード2では7)。コード音階音強度には、ベース検出期間のC〜Bまでの各12音の強度の区間平均が記憶され(例えばコード2では、Cが100、…、Bが130)、コード構成音には、ベース検出期間において抽出されたコード構成音が記憶される(例えばコード1では、0、4、7が、またコード2では、7、2、11、5が、各記憶される)。さらに、コード構成音数には、上述のようにして抽出された構成音の個数が記憶され(例えばコード1では3、またコード2では4)、コード名には、決定されたコード名(或いはそれに対応した番号でも良い)が記憶される(例えばコード1ではC、またコード2ではG7)。
図24は、上記のようにしてコード情報記憶部8に記憶されたベース及びコード構成音の表示部9aにおける表示例が示されている。ここでは、各コードにおいてベース音及びコード構成音として抽出された音階音は黒丸で表示されている。そしてその上にある「編集」と表示されたボタンは、変更部10aによって、ベース音やコード構成音を編集するための編集モードと、標準モード(そのような編集は行わない通常動作のモード)とを切り替えるための編集モード切替ボタンである。このボタンをONにすると、編集モードであることを示す編集モードフラグが1となり、反対に該ボタンをOFFにすると、編集モードフラグは0になる。
編集モードに設定された時に、上記変更部10aを使用した次のような操作がなされると、ベース音やコード構成音の編集が可能となる。すなわち、ベース音又はコード構成音の表示領域に、カーソルを当て、ポインティングデバイス(図示無し)でクリックすると、コード構成音の追加、又は削除、或いはベース音の変更ができるようになる。尚、標準モードの場合は、それらの動作は行われず、その音階音を鳴らすなどの処理ができる。
上記図15のように、コード情報記憶部8に記憶され、且つ図24に示すように、表示部9に表示された、コード構成音及びベース音の訂正について、説明する。本実施例では、コード名決定部7で決定されたコード構成音の追加、又は削除、或いはベース音の変更により、コード名を変更する構成であり、その手順は、以下に示すようになる。
まず、上記図24に示すように、上記編集モード切替ボタンにカーソルを置き、ポインティングデバイスがクリックされ、編集モードに設定される。本実施例では、コード構成音の数の最大値は5、最小値は1とする。
コード構成音に採用されている表示領域にカーソルが移動し、そこでクリックがなされた時、コード構成音の数が1以下では何もしない。それに対し、コード構成音の数が2以上であれば、クリックされた黒丸の部分に相当する音が、そのコード構成音から除外される。
コード構成音に採用されていない表示領域にカーソルが移動し、そこでクリックがなされた時、コード構成音の数が5であれば何もしない。それに対し、コード構成音の数が4以下であれば、クリックされた部分に相当する音が、そのコード構成音に追加される。
さらにベース音に採用されている表示領域にカーソルが移動し、そこでクリックがなされでも、何もしない。反対にベース音に採用されていない表示領域にカーソルが移動し、そこでクリックがなされれば、クリックされた部分に相当する音階音が、ベース音として採用される。
以上のように、上記変更部10aによるコード構成音の追加、又は削除、或いはベース音の変更操作がなされると、コンピュータのCPUで構成される再設定部11aにより、上記コード情報記憶部8に記憶されたコード構成音、或いはベース音が、元の記憶状態を維持したまま、新たなコード構成音、コード構成音数、コード名として、元の情報とは別途に記憶される。
このようにして検出処理がなされ、さらにユーザにより編集が加えられた場合でも、必ずしもレベルが大きな音がコード構成音であるとは限らないので、上記実施例1と同様、複数の音名の音を例えば5つ検出し、その中の2つ以上をすべての組み合わせで抜き出して、これとベース音の音名とからコード名候補の抽出を行う。
コードに関しても、平均的なレベルが閾値以下のものは検出しないようにしてもよい。また、コード検出音域もユーザが変更できるようにしてもよい。さらに、コード検出音域中、平均的なレベルが最も大きい音階音から順にコード構成音候補を抽出するのではなく、このコード検出音域内の各音名の平均的なレベルを12の音名毎に平均し、この音名毎のレベルの最も大きな音名から順にコード構成音候補を抽出してもよい。
コード名候補の抽出は、コードのタイプ(m、M7等)とコード構成音のルート音からの音程を保存したコード名データベースを、コード名決定部7により検索することによって抽出する。つまり、検出した5つの音名の中からすべての2つ以上の組み合わせを抜き出し、これらの音名間の音程が、このコード名データベースのコード構成音の音程の関係にあるかどうかをしらみつぶしに調べ、同じ音程関係にあれば、コード構成音のいずれかの音名からルート音を算出し、そのルート音の音名にコードタイプを付けて、コード名を決定する。このとき、コードのルート音(根音)や5度の音は、コードを演奏する楽器では省略されることがあるので、これらを含まなくてもコード名候補として抽出するようにする。ベース音を検出した場合には、このコード名候補のコード名にベース音の音名を加える。すなわち、コードのルート音とベース音が同じ音名であればそのままでよいし、異なる音名の場合は分数コードとする。
上記方法では、抽出されるコード名候補が多すぎるという場合には、ベース音による限定を行ってもよい。つまり、ベース音が検出された場合には、コード名候補の中でそのルート音がベース音と同じ音名でないものは削除する。
コード名候補が複数抽出された場合には、これらの中でどれか1つを決定するために、コード名決定部7により、上記実施例1と同様、尤度の計算をする。
最も尤度が大きいものをコード名として決定するが、コード名の候補を尤度とともに表示し、ユーザに選択させるようにしてもよい。
いずれにしても、コード名決定部7により、コード名が決定したら、この結果(変更情報)をバッファ70を介して、上記コード情報記憶部8に再記憶させると共に、上記実施例1の場合と同様に(例えば図21に示すように)、表示部9aにコード構成音を再表示させる。
以上のコード構成音の削除処理を行う場合の、実際の操作手順につき、以下に説明する。
まず、コード構成音の削除操作では、コード構成音数と各音階音の強度を変更することで行われる。ここでは、実際の操作を分かりやすくするため、コードG7のコード構成音Fの表示領域がクリックされた場合について説明する。コードG7の音階音強度を強度の大きい順に表したものを、図25(a)に示す。このコード構成音数は4であり、G〜Fが構成音となっている。
ここでコードG7のFの領域が変更部10aのカーソルでクリックされると、Fは構成音に採用されているので削除がなされる。しかし、ここでFを削除する場合、Fの強度を最低の強度に変更し、A(Fより強度的に1つ下の順位)〜A#(最低順位)までの強度を順位が1つ上の強度に変更するように処理する。さらにコード構成音数を3に変更する。すると、このコードの構成音は、同図(b)に示すように変わる。この場合、図27及び図28に示すように、コード構成音はG〜Bまでの3音となる。この時、図24の状態から図28に示すように、表示部9aに表示されるコードG7のFの領域から黒丸が消えることになる。
その後、上記コード名決定部7によりコード名が決定され、この場合コード名はGとなる。
また、上記コード構成音の追加処理を行う場合の、実際の操作手順につき、以下に説明する。
まず、コード構成音の追加操作では、同じくコード構成音数と各音階音の強度を変更することで行われる。ここでは、実際の操作を分かりやすくするため、コードCのコード構成音Bの表示領域がクリックされた場合について説明する。コードCの音階音強度を強度の大きい順に表したものを、図26(a)に示す。このコード構成音数は3であり、C〜Gが構成音となっている。
ここでコードCのBの領域が変更部10aのカーソルでクリックされると、Bは構成音に採用されていないので追加がなされる。Bを追加する場合、Bの強度を最高の強度に変更し、C(最高順位)〜D#(Bより1つ上の順位)までの強度を順位が1つ下の強度に変更するように処理する。さらにコード構成音数を4に変更する。すると、このコードの構成音は、同図(b)に示すように変わる。この場合、図27及び図28に示すように、コード構成音はB〜Gまでの4音となる。この時、図24の状態から図28に示すように、表示部9aに表示されるコードCのBの領域に、黒丸が表示されることになる。
その後、上記コード名決定部7によりコード名が決定され、この場合コード名はCM7となる。
上記のように、削除された音階音の強度を最低にすることで、コード名決定部7の尤度計算において、その音階音を含むコード名の尤度を低くすることができる。また追加された音階音の強度を最高にすることで、コード名決定部7の尤度計算において、その音階音を含むコード名の尤度を高くすることができる。
以上説明した本実施例構成によれば、簡単な構成のみでビート検出という時間分解能が必要な処理(上記前提例のテンポ検出装置の構成と同じ)と、コード検出という周波数分解能が必要な処理(上記テンポ検出装置の構成を基にさらにコード名を検出できる構成)を同時に行うことができるようになって、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざった入力された音楽音響信号に対し、個々の音符情報を検出することなしに全体の響きから、コード名を検出でき、その際に構成音が同じ和音でも判別可能であるだけでなく、その検出結果を見たり聞いたりしたユーザがコード進行上不自然なコード音であり、その検出結果に訂正を加えたい時は、上記変更部10aを使用して、ユーザ側で、表示されたコード構成音の追加又は削除、及び/又はベース音の変更を直接行うことができ、適切なコード名の決定、或いはコード進行を聞いた時に自然と感じるように、ユーザによる訂正ができるようになる。
尚、本発明のコード名検出装置及びそれを実現できるプログラムは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
本発明のコード名検出装置及びコード名検出用プログラムは、ミュージックプロモーションビデオの作成の際などに音楽トラック中のビートの時刻に対して映像トラック中のイベントを同期させるビデオ編集処理や、ビートトラッキングによりビートの位置を見つけ音楽の音響信号の波形を切り貼りするオーディオ編集処理、人間の演奏に同期して照明の色・明るさ・方向・特殊効果などといった要素を制御したり、観客の手拍子や歓声などを自動制御するライブステージのイベント制御、音楽に同期したコンピュータグラフィックスなど、種々の分野で利用可能である。
本発明の前提となるテンポ検出装置の全体ブロック図である。
音階音レベル検出部2の構成のブロック図である。
ビート検出部3の処理の流れを示すフローチャートである。
ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示すグラフである。
自己相関計算の概念を示す説明図である。
先頭のビート位置の決定方法を説明する説明図である。
最初のビート位置決定後のそれ以降のビートの位置を決定していく方法を示す説明図である。
sの値に応じて変えられる係数kの分布状態を示すグラフである。
2番目以降のビート位置の決定方法を示す説明図である。
ビート検出結果の確認画面の例を示す画面表示図である。
小節検出結果の確認画面の例を示す画面表示図である。
実施例1に係る本発明のコード名検出装置の全体ブロック図である。
曲の同じ部分のコード検出用音階音レベル検出部5が出力した各フレームの音階音のレベルを示すグラフである。
ベース音検出部6によるベース検出結果の表示例を示すグラフである。
実施例2のコード情報記憶部8における情報記憶状態を示す模式図である。
コード情報記憶部8に記憶されたベース及びコード構成音の表示部9における表示例を説明する説明図である。
表示エリアの矩形を鍵盤のような形で表示することで音階音名が分かるように表示する表示例を説明する説明図である。
表示部9に示されるコード構成音及びベース音において、コード構成音数を変更部10により変更する状態を示す画面構成例を示す画面表示図である。
構成音数を入力するダイアログボックスを示す画面表示図である。
変更部10によって構成音数を増やすことで、4番目に強度が大きいBを4番目のコード構成音として採用した場合のコード情報記憶部8のコード1のコード構成音に11が追加された状態を示す説明図である。
変更部10によって構成音数を増やし、最終的にコード名決定部7により、コード名の決定がなされた場合に、表示部9にコード構成音を再表示させた状態を示す画面構成例を示す画面表示図である。
コード名検出結果の確認画面の例を示す画面表示図である。
本発明の実施例2に係るコード名検出装置の全体ブロック図である。
実施例2の検出処理構成において検出され、コード情報記憶部8に記憶されたベース及びコード構成音の表示部9aにおける表示例を説明する説明図である。
コード構成音の削除処理が行われた場合に、その前後でコード構成音数と各音階音の強度が変更された状態を示す説明図である。
コード構成音の追加処理が行われた場合に、その前後でコード構成音数と各音階音の強度が変更された状態を示す説明図である。
コード構成音の削除乃至追加がなされた場合のコード情報記憶部8における情報記憶状態を示す模式図である。
コード構成音の削除乃至追加がなされた場合のベース及びコード構成音の表示部9aにおける表示例を説明する説明図である。
符号の説明
1 入力部
2 ビート検出用音階音レベル検出部
3 ビート検出部
4 小節検出部
5 コード検出用音階音レベル検出部
6 ベース音検出部
7 コード名決定部
8 コード情報記憶部
9、9a 表示部
10、10a 変更部
11、11a 再設定部
20 波形前処理部
21 FFT演算部
22 レベル検出部
23、30、40、50、60、70 バッファ