米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 楽器;音響 -> 株式会社河合楽器製作所

発明の名称 テンポ検出装置、コード名検出装置及びプログラム
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2007−52394(P2007−52394A)
公開日 平成19年3月1日(2007.3.1)
出願番号 特願2006−1194(P2006−1194)
出願日 平成18年1月6日(2006.1.6)
代理人 【識別番号】100086863
【弁理士】
【氏名又は名称】佐藤 英世
発明者 澄田 錬
要約 課題
テンポの揺らぐ演奏の信号から、曲全体の平均的なテンポと正確なビートの位置、曲の拍子と1拍目の位置を検出することが可能なテンポ検出装置を提供する。

解決手段
音響信号の入力部1と、入力信号から、ある間隔でFFT演算を行い所定の時間毎の各音階音のレベルを求めるレベル検出部2と、所定の時間毎の各音階音のレベルの増分値を全ての音階音について合計して上記時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、該時間毎の全体の音の変化度合いを示すレベルの増分値の合計から平均的なビート間隔と各ビートの位置を検出するビート検出部3と、ビート毎の各音階音のレベルの平均値を計算しビート毎の各音階音の平均レベルの増分値を全ての音階音について合計してビート毎の全体の音の変化度合いを示す値を求め、その値から拍子と小節線位置を検出する小節検出部4とを有する。
特許請求の範囲
【請求項1】
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と
を有することを特徴とするテンポ検出装置。
【請求項2】
上記ビート検出手段による平均的なビート間隔と各ビートの位置を検出するにあたり、各音階音のレベル増分値合計の自己相関から平均的なビート間隔を求め、次にこの各音階音のレベル増分値の合計と、上記平均的なビート間隔で周期を持つ関数との相互相関を計算して、最初のビート位置を求め、さらに、2番目以降のビート間隔も、平均的な上記ビート間隔で周期を持つ関数との相互相関を計算して、求めることを特徴とする請求項1記載のテンポ検出装置。
【請求項3】
上記ビート検出手段による平均的なビート間隔と各ビートの位置を検出するにあたり、各音階音のレベル増分値合計の自己相関から平均的なビート間隔を求め、次にこの各音階音のレベル増分値の合計と、上記平均的なビート間隔で周期を持つ関数との相互相関を計算して、最初のビート位置を求め、さらに、2番目以降のビート間隔を、平均的な上記ビート間隔に+α又は−αの間隔を加算した関数との相互相関を計算して求めることを特徴とする請求項1記載のテンポ検出装置。
【請求項4】
上記ビート検出手段による平均的なビート間隔と各ビートの位置を検出するにあたり、各音階音のレベル増分値合計の自己相関から平均的なビート間隔を求め、次にこの各音階音のレベル増分値の合計と、上記平均的なビート間隔で周期を持つ関数との相互相関を計算して、最初のビート位置を求め、さらに、2番目以降のビート間隔を、平均的な上記ビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を計算して求めることを特徴とする請求項1記載のテンポ検出装置。
【請求項5】
上記ビート検出手段による平均的なビート間隔と各ビートの位置を検出するにあたり、各音階音のレベル増分値合計の自己相関から平均的なビート間隔を求め、次にこの各音階音のレベル増分値の合計と、上記平均的なビート間隔で周期を持つ関数との相互相関を計算して、最初のビート位置を求め、さらに、2番目以降のビート間隔を、平均的な上記ビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を、その途中のビート位置をずらして計算することにより求めることを特徴とする請求項1記載のテンポ検出装置。
【請求項6】
上記小節検出手段により、拍子と小節線位置を求めるにあたり、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値の自己相関から拍子を求め、さらに、ビート毎の全体の音の変化度合いを示す値が最も大きな箇所を1拍目として、小節線位置に設定することを特徴とする請求項1〜5いずれか1つに記載のテンポ検出装置。
【請求項7】
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と
を有することを特徴とするコード名検出装置。
【請求項8】
上記ベース音検出手段において、ベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名を、ベース音と各コード検出範囲における各音階音のレベルから、決定する請求項7記載のコード名検出装置。
【請求項9】
コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と
して機能させることを特徴とするテンポ検出用プログラム。
【請求項10】
コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と
して機能させることを特徴とするコード名検出用プログラム。
発明の詳細な説明
【技術分野】
【0001】
本発明は、テンポ検出装置、コード名検出装置及びプログラムに関する。
【背景技術】
【0002】
従来の自動伴奏装置では、あらかじめ演奏するテンポを使用者が設定し、このテンポに従って自動演奏が行われる。従って、この自動伴奏に合わせて演奏者が演奏する場合、この自動伴奏のテンポに合わせて演奏する必要があり、これは特に演奏初心者にとっては非常に困難なことであった。そのため、演奏者の演奏音から自動的にテンポを検出し、このテンポに合わせて自動伴奏を行うような自動伴奏装置が望まれていた。
【0003】
また、演奏音が収録された音楽CD等の音源からコード名や音符情報を検出する採譜装置において、その演奏音からテンポを検出する機能はその前段階の処理として必須である。
【0004】
このようなテンポ検出装置として、例えば、下記特許文献1のテンポ検出装置がある。
【0005】
この特許文献1のテンポ検出装置は、外部から入力される演奏音の1音毎の音程、音量、及び発音のタイミングを表す演奏情報に基づいて、音量に起因するアクセントと、音量以外の音楽要素に起因するアクセントを検出し、これら双方のアクセントに基づいて演奏情報のテンポの変化を予測し、予測されたテンポに内部で生成するテンポを追従させるテンポ変更手段を備えたテンポ検出装置である。従って、テンポ検出するためには、音符情報が検出されていなければならず、MIDI等の音符情報を出力する機能を持った楽器で演奏された場合は、これを簡単に取得できるが、これを持たない一般の楽器で演奏された場合は、演奏音から音符情報を検出するという採譜技術が必要になる。
【0006】
MIDI等の音符情報を出力する機能を持たない一般楽器の演奏音、すなわち音響信号を入力とするテンポ検出装置の例としては、下記特許文献2に示される構成がある。
【0007】
該特許文献2に示される構成では、入力される音響信号を時分割でディジタルフィルタリング処理を行って音階を抽出し、検出した音階音のエンベロープ値に基づいてその音階音の発生周期を検出し、この音階音の発生周期とあらかじめ指定された入力音響信号の拍子に基づいてテンポを検出している。このテンポ検出装置は、音符情報を検出しないので、コード名や音符情報を検出する採譜装置の前処理としても使用できる。
【0008】
同様なテンポ検出装置として、後述する非特許文献1がある。
【0009】
他方、ポピュラー系の音楽においてコードは非常に重要な要素であり、このようなジャンルの音楽を小編成のバンドで演奏する場合にも、演奏する個々の音符が書かれた楽譜は使用しないで、コード譜またはリードシートと呼ばれるメロディとコード進行のみが書かれた楽譜を使用することが通常である。よって市販のCD等の曲をバンドで演奏するためには曲のコード進行を採譜する必要があるが、この作業は特別な音楽的知識を有する専門家のみが可能であり、一般の人には不可能であった。そこで、市販のパーソナルコンピュータなどを使用して音楽音響信号からコード名を検出する自動採譜装置が求められていた。
【0010】
このような音楽音響信号からコードを検出する装置として、下記特許文献3の構成がある。同文献の構成では、パワー・スペクトルの計算結果から基本周波数候補を抽出し、この基本周波数候補から倍音と思われるものを除去して音符情報を検出し、この音符情報から和音を検出している。
【0011】
しかし、該特許文献3に示す構成では、上記倍音を除去する作業は、楽器の種類による倍音構造の違い、打鍵強さによる倍音の出方の違い、時間による倍音のパワー変化、同じ周波数を倍音成分として持つ音同士の位相干渉の問題などから非常に困難であることが知られている。即ち、この音符情報を検出するという工程が、多くの楽器や歌唱などが混じった一般の音楽CDなどの音源で必ずしも正しく機能するとは考えられない。
【0012】
同様に音楽音響信号からコードを検出する装置として、後述する特許文献4の構成がある。該特許文献4の構成では、入力される音響信号に対して、異なる特性のディジタルフィルタリング処理を時分割で行い、各音階音のレベルを検出し、検出したレベルのうちオクターブ内で同じ音階関係にあるレベル同士を積算して、その積算レベルのうち値が大きい所定数を使って和音検出をしている。この方法では音響信号に含まれる個々の音符情報を検出しないので、特許文献3にあげたような問題は発生しない。
【特許文献1】特許第3231482号
【特許文献2】特許第3127406号
【非特許文献1】後藤真孝著「リアルタイムビートトラッキングシステム」(共立出版 コンピュータサイエンス誌 bit Vol.28 No.3 1996年)
【特許文献3】特許第2876861号
【特許文献4】特許第3156299号
【発明の開示】
【発明が解決しようとする課題】
【0013】
ところが、上記特許文献2のテンポ装置では、音階音のエンベロープからその音階音の発生周期を検出する部分が、エンベロープ値の最大値を検出し、その最大値に対して所定割合以上の部分を検出することにより行う構成となっている。しかし、このように所定割合を一意に定めてしまうと、音量の大小によって発音タイミングを検出できたりできなかったりしてしまい、それが最終的なテンポの決定に大きな影響を与えてしまうという問題を抱えている。
【0014】
上記非特許文献1に示されるビートトラッキングシステムも、音響信号をFFTして得られた周波数スペクトルから音の立ち上がり成分を抽出するので、先の特許文献2のテンポ検出装置と同様、この立ち上がりを検出できるかどうかが最終的なテンポの決定に大きな影響を与えてしまう。
【0015】
また、これら2つのテンポ検出装置に共通して言えることは、この音の立ち上がりを検出するのをどの音階音、あるいは、周波数で行うのかということである。たまたま検出する音階音(周波数)で細かいリズムを刻んでいる曲があった場合、間違えて速いテンポを検出してしまう問題があった。
【0016】
他方、音楽音響信号からコードを検出する上記特許文献4に示す構成では、各音階音のレベルをオクターブ内で同じ音階関係にあるもの同士、つまり12の音名毎に積算してしまっているので、同じ構成音からなる複数の和音、例えばラ、ド、ミ、ソからなるAm7とド、ミ、ソ、ラからなるC6という2つのコードを判別することができない。
【0017】
また、この特許文献4の和音検出装置には、テンポや小節の検出機能はなく、和音検出は所定のタイミング毎に行うとなっている。つまり、あらかじめ曲のテンポを設定してそのテンポで発音するメトロノームに合わせて演奏するようなケースを想定しており、音楽CD等のような演奏後の音響信号に適用した場合、一定時間間隔毎のコード名は検出できるが、テンポや小節を検出していないので、コード譜またはリードシートと呼ばれているような各小節のコード名が書かれた楽譜のような形式に出力することはできない。
【0018】
仮に曲のテンポを与えたとしても、一般的に音楽CDに収録されている演奏のテンポは一定ではなく多少揺らぐため、正しく小節毎のコードを検出することはできない。
【0019】
また、一定のテンポで発音されるメトロノームなどに合わせて正確なテンポで演奏することは初心者の演奏者にとっては非常に困難であり、一般的には演奏のテンポは揺らいでしまうのが通常である。
【0020】
さらに、特許文献4の構成では、入力される音響信号に対して、異なる特性のディジタルフィルタリング処理を時分割で行う構成が採用されているが、この構成の採用理由として、FFT演算では低域で周波数分解が悪いことをあげている。しかし、入力音響信号をダウンサンプリングしてFFTを行うことで低域でもある程度の周波数分解能を得ることは可能であるし、ディジタルフィルタリング処理では、フィルタ出力信号のレベルを求めるためにエンベロープ抽出部が必要になってしまうのに対し、FFTでは、FFT後のパワーそのものが各周波数でのレベルを表しているためそのようなものは必要なく、FFTポイント数とシフト量のパラメータを適宜選ぶことで周波数分解能や時間分解能を自由に設定できるメリットもある。
【0021】
本発明は、以上のような問題に鑑み創案されたもので、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート(拍)の位置、さらに曲の拍子と1拍目の位置を検出することが可能なテンポ検出装置を提供せんとするものである。
【0022】
またもう1つの本発明の構成は、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざった音楽音響信号(オーディオ信号)から、コード名(和音名)を検出することができるコード名検出装置を提供することを目的とする。
【0023】
さらに詳しくは、入力された音響信号に対し、個々の音符情報を検出することなしに、全体の響きから、コードを決定することができるコード名検出装置を提供することを目的とする。
【0024】
加えて、構成音が同じ和音でも判別可能で、演奏のテンポが揺らいでしまった場合や、逆にわざとテンポを揺らして演奏しているような音源に関しても、小節毎の和音が検出可能なコード名検出装置を提供することを目的とする。
【0025】
以上のように、本発明構成では、簡単な構成のみでビート検出という時間分解能が必要な処理(上記テンポ検出装置の構成と同じ)と、和音検出という周波数分解能が必要な処理(上記テンポ検出装置の構成を基にさらに和音を検出できる構成)を同時に行うことができるコード名検出装置を提供することを目的とする。
【0026】
併せて、これらの装置をコンピュータ上に実現できるテンポ検出用及びコード名検出用のコンピュータ・プログラムについても、提供する。
【課題を解決するための手段】
【0027】
そのため本発明に係るテンポ検出装置は、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と
を有することを基本的特徴としている。
【0028】
上記構成によれば、入力手段に入力された音響信号から所定の時間毎の各音階音のレベルを音階音レベル検出手段によって求め、上記ビート検出手段によって、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、同じくビート検出手段により、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート(拍)間隔(つまりテンポ)と各ビートの位置を検出し、次に上記小節検出手段により、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す上記値求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置(1拍目の位置)を検出することになる。
【0029】
すなわち、入力された音響信号から所定の時間毎の各音階音のレベルを求め、この所定の時間毎の各音階音のレベルの変化から平均的なビート(拍)間隔(つまりテンポ)と各ビートの位置を検出し、次にこのビート毎の各音階音のレベルの変化から拍子と小節線位置(1拍目の位置)を検出することになる。
【0030】
またコード名検出装置の構成は、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と
を有することを特徴としている。
【0031】
また上記ベース音検出手段において、ベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名を、ベース音と各コード検出範囲における各音階音のレベルから、決定するものとする。
【0032】
上記構成によれば、入力手段から入力された入力音響信号に対し、第1の音階音レベル検出手段により、所定の時間間隔で、まずビート検出に適したパラメータでFFT演算を行い、これにより所定の時間毎の各音階音のレベルを求め、ビート検出手段により、この所定の時間毎の各音階音のレベルの変化から平均的なビート間隔と各ビートの位置を検出する。次に、小節検出手段により、このビート毎の各音階音のレベルの変化から拍子と小節線位置を検出する。さらに、本発明のコード名検出装置は、第2の音階音レベル検出手段により、入力音響信号に対し先のビート検出の時とは異なる別の所定の時間間隔で、今度はコード検出に適したパラメータでFFT演算を行い、これにより所定の時間毎の各音階音のレベルを求める。そしてベース音検出手段により、この各音階音のレベルの内、低域側の音階音のレベルから各小節のベース音を検出し、コード名決定手段により、検出したベース音と各音階音のレベルから各小節のコード名を決定することになる。
【0033】
また上記のように、ベース音検出手段でこのベース音が小節内で複数検出される場合は、そのベース音検出結果に応じて、上記コード名決定手段は、小節を幾つかのコード検出範囲に分断し、この各コード検出範囲におけるコード名をベース音と各コード検出範囲における各音階音のレベルから決定することになる。
【0034】
さらに、請求項9の構成は、請求項1記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【0035】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項1に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【0036】
請求項9のより具体的構成は、
コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と
して機能させることを特徴とするテンポ検出用プログラムである。
【0037】
さらに、請求項10の構成は、請求項7記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、コンピュータに上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項7に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【0038】
請求項10のより具体的構成は、
コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第1の音階音レベル検出手段と、
この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求める第2の音階音レベル検出手段と、
検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出手段と、
検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定手段と
して機能させることを特徴とするコード名検出用プログラムである。
【0039】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【0040】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【0041】
尚、請求項9、10記載の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能(コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い)によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【0042】
これは、請求項1、7に規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【0043】
本発明の請求項1〜請求項6記載のテンポ検出装置、及び請求項9記載のプログラムによれば、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート(拍)の位置、さらに曲の拍子と1拍目の位置を検出することができるようになるという優れた効果を奏し得る。
【0044】
また請求項7及び請求項8記載のコード名検出装置、請求項10記載のプログラムによれば、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざった入力された音楽音響信号(オーディオ信号)に対し、個々の音符情報を検出することなしに全体の響きから、コード名(和音名)を検出することが可能となる。
【0045】
さらに、該構成によれば、構成音が同じ和音でも判別可能で、演奏のテンポが揺らいでしまった場合や、逆にわざとテンポを揺らして演奏しているような音源に関しても、小節毎の和音が検出可能となる。
【0046】
特に請求項7及び請求項8記載のコード名検出装置の後者の構成及び請求項10記載のプログラムでは、簡単な構成のみでビート検出という時間分解能が必要な処理(上記テンポ検出装置の構成と同じ)と、和音検出という周波数分解能が必要な処理(上記テンポ検出装置の構成を基にさらに和音を検出できる構成)を同時に行うことができるようになる。
【発明を実施するための最良の形態】
【0047】
以下、本発明の実施の形態を図示例と共に説明する。
【実施例1】
【0048】
図1は、本発明に係るテンポ検出装置の全体ブロック図である。同図によれば、本テンポ検出装置の構成は、音響信号を入力する入力部1と、入力された音響信号から、所定の時間間隔で、FFT演算を行い、所定の時間毎の各音階音のレベルを求める音階音レベル検出部2と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部3と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部4とを有している。
【0049】
音楽音響信号を入力する上記入力部1は、テンポ検出をする対象の音楽音響信号を入力する部分である。マイク等の機器から入力されたアナログ信号をA/D変換器(図示無し)によりディジタル信号に変換しても良いし、音楽CDなどのディジタル化された音楽データの場合は、そのままファイルとして取り込み(リッピング)、これを指定して開くようにしても良い。このようにして入力したディジタル信号がステレオの場合、後の処理を簡略化するためにモノラルに変換する。
【0050】
このディジタル信号は、音階音レベル検出部2に入力される。この音階音レベル検出部は図2の各部から構成される。
【0051】
そのうち波形前処理部20は、音楽音響信号の上記入力部1からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする構成である。
【0052】
ダウンサンプリングレートは、ビート検出に使う楽器の音域によって決定する。すなわち、シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、ダウンサンプリング後のサンプリング周波数はそれほど高くする必要はない。
【0053】
例えば検出する最高音をA6(C4が中央のド)とする場合、A6の基本周波数は約1760Hz(A4=440Hzとした場合)となるので、ダウンサンプリング後のサンプリング周波数は、ナイキスト周波数が1760Hz以上となる、3520Hz以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が44.1kHz(音楽CD)の場合、1/12程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、3675Hzとなる。
【0054】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数(今の例では1837.5Hz)以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす(今の例では波形サンプルの12個に11個を破棄する)ことによって行われる。
【0055】
このようにダウンサンプリングの処理を行うのは、この後のFFT演算において、同じ周波数分解能を得るために必要なFFTポイント数を下げることで、FFTの演算時間を減らすのが目的である。
【0056】
なお、音楽CDのように、音源が固定のサンプリング周波数で既にサンプリングされている場合は、このようなダウンサンプリングが必要になるが、音楽音響信号の入力部1が、マイク等の機器から入力されたアナログ信号をA/D変換器によりディジタル信号に変換するような場合には、当然A/D変換器のサンプリング周波数を、ダウンサンプリング後のサンプリング周波数に設定することで、この波形前処理部を省くことが可能である。
【0057】
このようにして波形前処理部20によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号を、FFT演算部21によりFFT(高速フーリエ変換)する。
【0058】
FFTのパラメータ(FFTポイント数とFFT窓のシフト量)は、ビート検出に適した値とする。つまり、周波数分解能を上げるためにFFTポイント数を大きくすると、FFT窓のサイズが大きくなってしまい、より長い時間から1回のFFTを行うことになり、時間分解能が低下する、というFFTの特性を考慮しなくてはならない(つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い)。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし残りは0で埋めることによって、FFTポイント数を大きくしても時間分解能が悪くならない方法もあるが、低音側のパワーも正しく検出するためには、ある程度の波形サンプル数は必要である。
【0059】
以上のようなことを考慮し、本実施例では、FFTポイント数512、窓のシフトは32サンプルで、0埋めなしという設定にした。このような設定でFFT演算を行うと、時間分解能約8.7ms、周波数分解能約7.2Hzとなる。時間分解能約8.7msという値は、四分音符=300のテンポの曲で、32分音符の長さが、25msであることを考えると、十分な値であることがわかる。
【0060】
このようにして、所定の時間間隔毎にFFT演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部22に送られる。
【0061】
レベル検出部22では、FFT演算部21で計算されたパワー・スペクトルから、各音階音のレベルを計算する。FFTは、サンプリング周波数をFFTポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、以下のような処理を行う。つまり、音階音を計算するすべての音(C1からA6)について、その各音の基本周波数の上下50セントの範囲(100セントが半音)の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
【0062】
すべての音階音についてレベルが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔(先の例では32サンプル)進めて、FFT演算部21とレベル検出部22を波形の終わりまで繰り返す。
【0063】
以上により、音楽音響信号の入力部1に入力された音響信号の、所定時間毎の各音階音のレベルが、バッファ23に保存される。
【0064】
次に、図1のビート検出部3の構成について説明する。該ビート検出部3は、図3のような処理の流れで実行される。
【0065】
ビート検出部3は、音階音レベル検出部が出力した所定時間(以下、この1所定時間を1フレームと呼ぶ)毎の各音階音のレベルの変化を元に平均的なビート(拍)間隔(つまりテンポ)とビートの位置を検出する。そのために、まずビート検出部3は、各音階音のレベル増分値の合計(前のフレームとのレベルの増分値をすべての音階音で合計したもの。前のフレームからレベルが減少している場合は0として加算する)を計算する(ステップS100)。
【0066】
つまり、フレーム時間tにおけるi番目の音階音のレベルをL(t)とするとき、i番目の音階音のレベル増分値Laddi(t)は、下式数1に示すようになり、このLddi(t)を使って、フレーム時間tにおける各音階音のレベル増分値の合計L(t)は、下式数2で計算できる。ここで、Tは音階音の総数である。
【0067】
【数1】


【0068】
【数2】


【0069】
この合計L(t)値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
【0070】
例として、図4に、ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のレベルを濃淡で表したもの(下が低い音、上が高い音。この図では、C1からA6の範囲)、下段がフレーム毎の各音階音のレベル増分値の合計を示している。この図の各音階音のレベルは、音階音レベル検出部から出力されたものであるので、周波数分解能が約7.2Hzであり、G#2以下の一部の音階音でレベルが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のレベルが測定できないのは、問題ない。
【0071】
この図の下段に見られるように、各音階音のレベル増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
【0072】
ビートの位置を求めるために、ビート検出部3では、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のレベル増分値の合計の自己相関から計算できる(図3;ステップS102)。
【0073】
あるフレーム時間tにおける各音階音のレベル増分値の合計をL(t)とすると、この自己相関φ(τ)は、以下の式数3で計算される。
【0074】
【数3】


ここで、Nは総フレーム数、τは時間遅れである。
【0075】
自己相関計算の概念図を、図5に示す。この図のように、時間遅れτがL(t)のピークの周期の整数倍の時に、φ(τ)は大きな値となる。よって、ある範囲のτについてφ(τ)の最大値を求めれば、曲のテンポを求めることができる。
【0076】
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符=30から300の範囲を計算するならば、自己相関を計算する範囲は、0.2秒から2秒となる。時間(秒)からフレームへの変換式は、以下の数4式に示す通りとなる。
【0077】
【数4】


【0078】
この範囲の自己相関φ(τ)が最大となるτをビート間隔としても良いが、必ずしもすべての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め(図3;ステップS104)、これら複数の候補からユーザにビート間隔を決定させるのが良い(図3;ステップS106)。
【0079】
このようにしてビート間隔が決定したら(決定したビート間隔をτmaxとする)、まず最初に先頭のビート位置を決定する。
【0080】
先頭のビート位置の決定方法を、図6を用いて説明する。図6の上段はフレーム時間tにおける各音階音のレベル増分値の合計L(t)で、下段M(t)は決定したビート間隔τmaxの周期で値を持つ関数である。式で表すと、下式数5に示すようになる。
【0081】
【数5】


【0082】
この関数M(t)を、0からτmax−1の範囲でずらしながら、L(t)とM(t)の相互相関を計算する。
【0083】
相互相関r(s)は、上記M(t)の特性から、下式数6で計算できる。
【0084】
【数6】


【0085】
この場合のnは、最初の無音部分の長さに応じて適当に決めれば良い(図6の例では、n=10)。
【0086】
r(s)をsが0からτmax−1の範囲で求め、r(s)が最大となるsを求めれば、このsのフレームが最初のビート位置である。
【0087】
最初のビート位置が決まったら、それ以降のビートの位置を1つずつ決定していく(図3;ステップS108)。
【0088】
その方法を、図7を用いて説明する。図7の三角印の位置に先頭のビートが見つかったとする。2番目のビート位置は、この先頭のビート位置からビート間隔τmaxだけ離れた位置を仮のビート位置とし、その近辺でL(t)とM(t)が最も相関が取れる位置から決定する。つまり、先頭のビート位置をbとするとき、以下の式のr(s)が最大となるようなsの値を求める。この式のsは仮のビート位置からのずれで、以下の式数7の範囲の整数とする。Fは揺らぎのパラメータで0.1程度の値が適当であるが、テンポの揺らぎの大きい曲では、もっと大きな値にしてもよい。nは5程度でよい。
【0089】
kは、sの値に応じて変える係数で、例えば図8のような正規分布とする。
【0090】
【数7】


【0091】
r(s)が最大となるようなsの値が求まれば、2番目のビート位置bは、下式数8で計算される。
【0092】
【数8】


【0093】
以降、同じようにして3番目以降のビート位置も求めることができる。
【0094】
テンポがほとんど変わらない曲ではこの方法でビート位置を曲の終わりまで求めることができるが、実際の演奏は多少テンポが揺らいだり、部分的にだんだん遅くなったりすることがよくある。
【0095】
そこで、これらのテンポの揺らぎにも対応できるように以下のような方法を考えた。
【0096】
つまり、図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個のパルスの位置のどこが現在ビートを求めようとしている場所かを変えるものである。
【0097】
これらをすべて組み合わせて、L(t)とM(t)の相関を計算し、それらの最大からビート位置を決めれば、テンポが揺らぐ曲に対してもビート位置の決定が可能である。なお、2)と3)の場合には、相関を計算するときの係数kの値を、やはりsの値に応じて変えるようにする。
【0098】
さらに、5個のパルスの大きさは現在すべて同じにしてあるが、ビートを求める位置(図9の仮のビート位置)のパルスのみ大きくしたり、ビートを求める位置から離れるほど値を小さくして、ビートを求める位置の各音階音のレベル増分値の合計を強調するようにしてもよい[図9の5)]。
【0099】
以上のようにして、各ビートの位置が決定したら、この結果をバッファ30に保存すると共に、検出した結果を表示し、ユーザに確認してもらい、間違っている箇所を修正してもらうようにしてもよい。
【0100】
ビート検出結果の確認画面の例を、図10に示す。同図の三角印の位置が検出したビート位置である。
【0101】
「再生」のボタンを押すと、現在の音楽音響信号が、D/A変換され、スピーカ等から再生される。現在の再生位置は、図のように縦線等の再生位置ポインタで表示されるので、演奏を聞きながら、ビート検出位置の誤りを確認できる。さらに、検出の元波形の再生と同時に、ビート位置のタイミングで例えばメトロノームのような音を再生させるようにすれば、目で確認するだけでなく音でも確認でき、より容易に誤検出を判断できる。このメトロノームの音を再生させる方法としては、例えばMIDI機器等が考えられる。
【0102】
ビート検出位置の修正は、「ビート位置の修正」ボタンを押して行う。このボタンを押すと、画面に十字のカーソルが現れるので、最初のビート検出が間違っている箇所で正しいビート位置をクリックする。クリックされた場所の少し前(例えばτmaxの半分の位置)から後のビート位置をすべてクリアし、クリックされた場所を、仮のビート位置として、以降のビート位置を再検出する。
【0103】
次に、拍子および小節の検出について説明する。
【0104】
これまでの処理で、ビートの位置が確定しているので、今度は、ビート毎の音の変化度合いを求める。ビート毎の音の変化度合いは、音階音レベル検出部が出力した、フレーム毎の各音階音のレベルから計算する。
【0105】
j番目のビートのフレーム数をbとし、その前後のビートのフレームをbj−1、bj+1とする時、j番目のビートのビート毎の音の変化度合いは、フレームbj−1からb−1までのフレームの各音階音のレベルの平均とフレームbからbj+1−1までのフレームの各音階音のレベルの平均を計算し、その増分値から各音階音のビート毎の音の変化度合いを求め、それらをすべての音階音で合計して計算することができる。
【0106】
つまり、フレーム時間tにおけるi番目の音階音のレベルをL(t)とするとき、j番目のビートのi番目の音階音のレベルの平均Lavgi(j)は、下式数9であるから、j番目のビートのi番目の音階音のビート毎の音の変化度合いBaddi(j)は、下式数10に示すようになる。
【0107】
【数9】


【0108】
【数10】


【0109】
よって、j番目のビートのビート毎の音の変化度合いB(j)は、下式数11に示すようになる。ここで、Tは音階音の総数である。
【0110】
【数11】


【0111】
図11の最下段は、このビート毎の音の変化度合いである。このビート毎の音の変化度合いから拍子と1拍目の位置を求める。
【0112】
拍子は、ビート毎の音の変化度合いの自己相関から求める。一般的に音楽は1拍目で音が変わることが多いと考えられるので、このビート毎の音の変化度合いの自己相関から拍子を求めることができる。例えば、下式数12に示す自己相関φ(τ)を求める式から、ビート毎の音の変化度合いB(j)の自己相関φ(τ)を遅れτが、2から4の範囲で求め、自己相関φ(τ)が最大となる遅れτを拍子の数とする。
【0113】
【数12】


【0114】
Nは、総ビート数、τ=2〜4の範囲でφ(τ)を計算し、φ(τ)が最大となるτを拍子の数とする。
【0115】
次に1拍目を求めるが、これは、ビート毎の音の変化度合いB(j)がもっとも大きい箇所を1拍目とする。つまり、φ(τ)が最大となるτをτmax、下式数13のX(k)が最大となるkをkmaxとするとき、kmax番目のビートが最初の1拍目の位置となり、以降、τmaxを足したビート位置が1拍目となる。
【0116】
【数13】


maxは、τmax・n+k<Nの条件で最大となるn
【0117】
以上のようにして、拍子及び1拍目の位置(小節線の位置)が決定したら、この結果をバッファ40に保存すると共に、検出した結果を画面表示して、ユーザに変更させるようにすることが望ましい。特に変拍子の曲は、この方法では対応できないので、変拍子の箇所をユーザに指定してもらう必要がある。
【0118】
以上の実施例構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート(拍)の位置、さらに曲の拍子と1拍目の位置を検出することが可能となる。
【実施例2】
【0119】
図12は、本発明のコード検出装置の全体ブロック図である。同図において、ビート検出及び小節検出の構成は、実施例1と基本的に同じであり、同一構成において、テンポ検出用とコード検出用の構成について、上記実施例1の場合と異なるものもあるので、数式等を除き、同じ説明が重なるが、以下に示す。
【0120】
同図によれば、本コード検出装置の構成は、音響信号を入力する入力部1と、入力された音響信号から、所定の時間間隔で、ビート検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求めるビート検出用音階音レベル検出部2と、この所定の時間毎の各音階音のレベルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計を求め、この所定の時間毎の全体の音の変化度合いを示すレベルの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部3と、このビート毎の各音階音のレベルの平均値を計算し、このビート毎の各音階音の平均レベルの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部4と、上記入力された音響信号から、先のビート検出の時とは異なる別の所定の時間間隔で、コード検出に適したパラメータを使ってFFT演算を行い、所定の時間毎の各音階音のレベルを求めるコード検出用音階音レベル検出部5と、検出した各音階音のレベルのうち、各小節内における低域側の音階音のレベルからベース音を検出するベース音検出部6と、検出したベース音と各音階音のレベルから各小節のコード名を決定するコード名決定部7とを有している。
【0121】
音楽音響信号を入力する上記入力部1は、コード検出をする対象の音楽音響信号を入力する部分であるが、基本的構成は上記実施例1の入力部1と同じであるので、その詳細な説明は省略する。ただし、通常センタに定位されるボーカルが後のコード検出でじゃまになる場合は、右チャンネルの波形と左チャンネルの波形を引き算することでボーカルキャンセルするようにしても良い。
【0122】
このディジタル信号は、ビート検出用音階音レベル検出部2とコード検出用音階音レベル検出部5とに入力される。これらの音階音レベル検出部は、どちらも上記図2の各部から構成され、構成はまったく同じなので、同じものをパラメータだけを変えて再利用できる。
【0123】
そしてその構成として使用される波形前処理部20は、上記と同様な構成であり、音楽音響信号の上記入力部1からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする。ただし、ダウンサンプリング後のサンプリング周波数、つまり、ダウンサンプリングレートは、ビート検出用とコード検出用で変えるようにしても良いし、ダウンサンプリングする時間を節約するために同じにしても良い。
【0124】
ビート検出用の場合は、ビート検出に使う音域によってダウンサンプリングレートを決定する。シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、以下のコード検出時と同じダウンサンプリングレートで構わない。
【0125】
コード検出用の波形前処理部のダウンサンプリングレートは、コード検出音域によって変える。コード検出音域とは、コード名決定部でコード検出するときに使う音域のことである。例えばコード検出音域をC3からA6(C4が中央のド)とする場合、A6の基本周波数は約1760Hz(A4=440Hzとした場合)となるので、ダウンサンプリング後のサンプリング周波数はナイキスト周波数が1760Hz以上となる、3520Hz以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が44.1kHz(音楽CD)の場合、1/12程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、3675Hzとなる。
【0126】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数(今の例では1837.5Hz)以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす(今の例では波形サンプルの12個に11個を破棄する)ことによって行われる。これについては、実施例1に説明したことと同じ理由による。
【0127】
このようにして波形前処理部20によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号をFFT演算部21により、FFT(高速フーリエ変換)する。
【0128】
FFTのパラメータ(FFTポイント数とFFT窓のシフト量)は、ビート検出時とコード検出時で異なる値とする。これは、周波数分解能を上げるためにFFTポイント数を大きくすると、FFT窓のサイズが大きくなってしまい、より長い時間から1回のFFTを行うことになり、時間分解能が低下する、というFFTの特性によるものである(つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い)。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし、残りは0で埋めることによってFFTポイント数を大きくしても時間分解能が悪くならない方法もあるが、本実施例のケースでは、低音側のパワーも正しく検出するためにある程度の波形サンプル数は必要である。
【0129】
以上のようなことを考慮し、本実施例では、ビート検出時は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は、十分な値であることがわかる。
【0130】
このようにして、所定の時間間隔毎にFFT演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がレベル検出部22に送られる。
【0131】
レベル検出部22では、FFT演算部21で計算されたパワー・スペクトルから、各音階音のレベルを計算する。FFTは、サンプリング周波数をFFTポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のレベルを検出するために、実施例1と同様な処理を行う。すなわち、音階音を計算するすべての音(C1からA6)について、その各音の基本周波数の上下50セントの範囲(100セントが半音)の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のレベルとする。
【0132】
すべての音階音についてレベルが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔(先の例ではビート検出時は32サンプル、コード検出時は128サンプル)進めて、FFT演算部21とレベル検出部22を波形の終わりまで繰り返す。
【0133】
以上により、音楽音響信号の入力部1に入力された音響信号の、所定時間毎の各音階音のレベルが、ビート検出用とコード検出用の2種類のバッファ23及び50に保存される。
【0134】
次に、図12のビート検出部3及び小節検出部4の構成については、実施例1のビート検出部3及び小節検出部4と同じ構成なので、その詳細な説明は、ここでは、省略する。
【0135】
実施例1と同様な構成と手順で、小節線の位置(各小節のフレーム番号)が確定したので、今度は各小節のベース音を検出する。
【0136】
ベース音は、コード検出用音階音レベル検出部5が出力した各フレームの音階音のレベルから検出する。
【0137】
図13に実施例1の図4と同じ曲の同じ部分のコード検出用音階音レベル検出部5が出力した各フレームの音階音のレベルを示す。この図のように、コード検出用音階音レベル検出部5での周波数分解能は、約0.4Hzであるので、C1からA6のすべての音階音のレベルが抽出されている。
【0138】
ベース音は、小節の前半と後半で異なる可能性があるので、ベース音検出部6により、各小節の前半と後半でそれぞれ検出する。前半と後半のベース音が同じ音のときは、小節のベース音としてこれを確定し、コードも小節全体で検出する。前半と後半で別の音のベース音が検出されたときは、コードも前半と後半に分けて検出する。場合によっては、分割する範囲を更に半分にまで(小節の4分の1まで)狭めてもよい。
【0139】
ベース音は、ベース検出期間におけるベース検出音域の音階音のレベルの平均的な強さから求める。
【0140】
フレーム時間tにおけるi番目の音階音のレベルをL(t)とすると、フレームfからfのi番目の音階音の平均的なレベルLavgi(f,f)は、下式数14で計算できる。
【0141】
【数14】


【0142】
この平均的なレベルをベース検出音域、例えばC2からB3の範囲で計算し、平均的なレベルが最も大きな音階音をベース音として、ベース音検出部6は、決定する。ベース検出音域に音が含まれない曲や無音部分で間違ってベース音を検出しないために、適当な閾値を設定し、検出したベース音の平均的なレベルが、この閾値以下の場合は、ベース音を検出しないようにしてもよい。また、後のコード検出でベース音を重要視する場合には、検出したベース音がベース検出期間中継続してあるレベル以上を保っているかどうかをチェックするようにして、より確実なものだけをベース音として検出するようにしてもよい。さらに、ベース検出音域中、平均的なレベルが最も大きい音階音をベース音として決定するのではなく、この各音名の平均的なレベルを12の音名毎に平均し、この音名毎のレベルが最も大きな音名をベース音名として決定し、その音名を持つベース検出音域の中の音階音で、平均的なレベルが最も大きい音階音をベース音として決定するようにしてもよい。
【0143】
ベース音が決定したら、この結果をバッファ60に保存すると共に、ベース検出結果を画面表示して、間違っている場合にはユーザに修正させるようにしてもよい。また、曲によってベース音域が変わることも考えられるので、ユーザがベース検出音域を変更できるようにしてもよい。
【0144】
図14に、ベース音検出部6によるベース検出結果の表示例を示す。
【0145】
次にコード名決定部7によるコード検出処理であるが、該コード検出処理も、同じようにコード検出期間における各音階音の平均的なレベルを計算することによって決定する。
【0146】
本実施例では、コード検出期間とベース検出期間は同一としている。コード検出音域、例えばC3からA6の各音階音のコード検出期間における平均的なレベルを計算し、これが大きな値を持つ音階音から順に数個の音名を検出し、これとベース音の音名からコード名候補を抽出する。
【0147】
この際、必ずしもレベルが大きな音がコード構成音であるとは限らないので、複数の音名の音を例えば5つ検出し、その中の2つ以上をすべての組み合わせで抜き出して、これとベース音の音名とからコード名候補の抽出を行う。
【0148】
コードに関しても、平均的なレベルが閾値以下のものは検出しないようにしてもよい。また、コード検出音域もユーザが変更できるようにしてもよい。さらに、コード検出音域中、平均的なレベルが最も大きい音階音から順にコード構成音候補を抽出するのではなく、このコード検出音域内の各音名の平均的なレベルを12の音名毎に平均し、この音名毎のレベルの最も大きな音名から順にコード構成音候補を抽出してもよい。
【0149】
コード名候補の抽出は、コードのタイプ(m、M7等)とコード構成音のルート音からの音程を保存したコード名データベースを、コード名決定部7により検索することによって抽出する。つまり、検出した5つの音名の中からすべての2つ以上の組み合わせを抜き出し、これらの音名間の音程が、このコード名データベースのコード構成音の音程の関係にあるかどうかをしらみつぶしに調べ、同じ音程関係にあれば、コード構成音のいずれかの音名からルート音を算出し、そのルート音の音名にコードタイプを付けて、コード名を決定する。このとき、コードのルート音(根音)や5度の音は、コードを演奏する楽器では省略されることがあるので、これらを含まなくてもコード名候補として抽出するようにする。ベース音を検出した場合には、このコード名候補のコード名にベース音の音名を加える。すなわち、コードのルート音とベース音が同じ音名であればそのままでよいし、異なる音名の場合は分数コードとする。
【0150】
上記方法では、抽出されるコード名候補が多すぎるという場合には、ベース音による限定を行ってもよい。つまり、ベース音が検出された場合には、コード名候補の中でそのルート音がベース音と同じ音名でないものは削除する。
【0151】
コード名候補が複数抽出された場合には、これらの中でどれか1つを決定するために、コード名決定部7により、尤度(もっともらしさ)の計算をする。
【0152】
尤度は、コード検出音域におけるすべてのコード構成音のレベルの強さの平均とベース検出音域におけるコードのルート音のレベルの強さから計算する。すなわち、抽出されたあるコード名候補のすべての構成音のコード検出期間における平均レベルの平均値をLvgc、コードのルート音のベース検出期間における平均レベルをLavgrとすると、下式数15のように、この2つの平均により尤度を計算する。
【0153】
【数15】


【0154】
この際、コード検出音域やベース検出音域に同一音名の音が複数含まれる場合には、それらのうち、平均レベルの強い方を使うようにする。あるいは、コード検出音域とベース検出音域のそれぞれで、各音階音の平均レベルを12の音名毎に平均し、その音名毎の平均値を使うようにしてもよい。
【0155】
さらに、この尤度の計算に音楽的な知識を導入してもよい。例えば、各音階音のレベルを全フレームで平均し、それを12の音名毎に平均して各音名の強さを計算し、その強さの分布から曲の調を検出する。そして、調のダイアトニックコードには尤度が大きくなるようにある定数を掛ける、あるいは、調のダイアトニックスケール上の音から外れた音を構成音に含むコードはその外れた音の数に応じて尤度が小さくなるようにする等が、考えられる。さらにコード進行のよくあるパターンをデータベースとして記憶しておき、それと比較することで、コード候補の中からよく使われる進行になるようなものは尤度が大きくなるようにある定数を掛けるようにしてもよい。
【0156】
最も尤度が大きいものをコード名として決定するが、コード名の候補を尤度とともに表示し、ユーザに選択させるようにしてもよい。
【0157】
いずれにしても、コード名決定部7により、コード名が決定したら、この結果をバッファ70に保存すると共に、コード名が、画面出力されることになる。
【0158】
図15に、コード名決定部7によるコード検出結果の表示例を示す。このように検出されたコード名を画面表示するだけでなく、MIDI機器等を使って、検出されたコードとベース音を再生するようにすることが望ましい。一般的には、コード名を見ただけで正しいかどうかは判断できないからである。
【0159】
以上説明した本実施例構成によれば、特別な音楽的知識を有する専門家でなくても、音楽CD等の複数の楽器音の混ざった入力された音楽音響信号に対し、個々の音符情報を検出することなしに全体の響きから、コード名を検出することができるようになる。
【0160】
さらに、該構成によれば、構成音が同じ和音でも判別可能で、演奏のテンポが揺らいでしまった場合や、逆にわざとテンポを揺らして演奏しているような音源に関しても、小節毎のコード名が検出可能となる。
【0161】
特に本実施例構成では、簡単な構成のみでビート検出という時間分解能が必要な処理(上記テンポ検出装置の構成と同じ)と、コード検出という周波数分解能が必要な処理(上記テンポ検出装置の構成を基にさらにコード名を検出できる構成)を同時に行うことができるようになる。
【0162】
尚、本発明のテンポ検出装置、コード名検出装置及びそれらを実現できるプログラムは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【0163】
本発明のテンポ検出装置、コード名検出装置及びそれらを実現できるプログラムは、ミュージックプロモーションビデオの作成の際などに音楽トラック中のビートの時刻に対して映像トラック中のイベントを同期させるビデオ編集処理や、ビートトラッキングによりビートの位置を見つけ音楽の音響信号の波形を切り貼りするオーディオ編集処理、人間の演奏に同期して照明の色・明るさ・方向・特殊効果などといった要素を制御したり、観客の手拍子や歓声などを自動制御するライブステージのイベント制御、音楽に同期したコンピュータグラフィックスなど、種々の分野で利用可能である。
【図面の簡単な説明】
【0164】
【図1】本発明に係るテンポ検出装置の全体ブロック図である。
【図2】音階音レベル検出部2の構成のブロック図である。
【図3】ビート検出部3の処理の流れを示すフローチャートである。
【図4】ある曲の一部分の波形と各音階音のレベル、各音階音のレベル増分値の合計の図を示すグラフである。
【図5】自己相関計算の概念を示す説明図である。
【図6】先頭のビート位置の決定方法を説明する説明図である。
【図7】最初のビート位置決定後のそれ以降のビートの位置を決定していく方法を示す説明図である。
【図8】sの値に応じて変えられる係数kの分布状態を示すグラフである。
【図9】2番目以降のビート位置の決定方法を示す説明図である。
【図10】ビート検出結果の確認画面の例を示す画面表示図である。
【図11】小節検出結果の確認画面の例を示す画面表示図である。
【図12】実施例2に係る本発明のコード検出装置の全体ブロック図である。
【図13】曲の同じ部分のコード検出用音階音レベル検出部5が出力した各フレームの音階音のレベルを示すグラフである。
【図14】ベース音検出部6によるベース検出結果の表示例を示すグラフである。
【図15】コード検出結果の確認画面の例を示す画面表示図である。
【符号の説明】
【0165】
1 入力部
2 ビート検出用音階音レベル検出部
3 ビート検出部
4 小節検出部
5 コード検出用音階音レベル検出部
6 ベース音検出部
7 コード名決定部
20 波形前処理部
21 FFT演算部
22 レベル検出部
23、30、40、50、60、70 バッファ




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013