(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-05
(45)【発行日】2024-01-16
(54)【発明の名称】拍子決定方法、拍子決定装置、及びプログラム
(51)【国際特許分類】
G10G 3/04 20060101AFI20240109BHJP
G10L 25/51 20130101ALI20240109BHJP
【FI】
G10G3/04
G10L25/51 300
(21)【出願番号】P 2021155215
(22)【出願日】2021-09-24
【審査請求日】2022-09-26
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100182936
【氏名又は名称】矢野 直樹
(72)【発明者】
【氏名】南高 純一
【審査官】大野 弘
(56)【参考文献】
【文献】特開2009-003225(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10G 3/04
G10L 25/51
(57)【特許請求の範囲】
【請求項1】
コンピュータが、
楽曲データの或るタイミングにおける
全周波数帯域である第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる
1つ以上の或る周波数帯域を含む第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、
前記第1周波数帯域と前記第2周波数帯域毎とで夫々ビートレベル変動波形を取得し、
前記ビートレベル変動波形が各周波数帯域に応じた重み付けで重み付き平均されることにより重み付き
平均ビートレベル
変動波形を取得し、
取得された前記重み付き
平均ビートレベル
変動波形の自己相関値が高い複数のタイミングを取得し、
取得された前記複数のタイミングに基づいて、拍子を決定する、
拍子決定方法。
【請求項2】
前記コンピュータが、
前記重み付き
平均ビートレベル
変動波形に基づいて、前記楽曲データの或るタイミングから設定時間長の比較元と、前記或るタイミングから離れたタイミングから前記設定時間長の比較先を取得し、
取得された前記比較元と前記比較先に基づいて、前記自己相関
値を計算する、
請求項1に記載の拍子決定方法。
【請求項3】
前記第1ビートレベルは、前記第1パワーレベルの変動がマイナスからプラスに転じた第1タイミングのパワーレベルと、前記変動が次にプラスからマイナスに転じた第2タイミングのパワーレベルとのレベル差を含み、
前記コンピュータが、
前記レベル差を前記第2タイミングにおける前記第1ビートレベルとして取得する、
請求項1又は2に記載の拍子決定方法。
【請求項4】
前記コンピュータが、
前記重み付き
平均ビートレベル
変動波形に基づいて、前記自己相関値のヒストグラムを生成し、
生成された前記ヒストグラムに基づいて、前記拍子を決定する、
請求項1乃至3の何れかに記載の拍子決定方法。
【請求項5】
前記コンピュータが、
前記ヒストグラムから抽出した、値が上位所定数個までの相関値のヒストグラムのピークの夫々が、3拍子、4拍子又は5拍子のいずれの拍子の倍数関係にあるかを判定し、
判定結果に基づいて、前記拍子を決定する、
請求項4に記載の拍子決定方法。
【請求項6】
前記第2周波数帯域は、バスドラム帯域、スネアドラム帯域又はコード帯域の何れかを含む、
請求項1乃至5の何れかに記載の拍子決定方法。
【請求項7】
楽曲データの或るタイミングにおける
全周波数帯域である第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる
1つ以上の或る周波数帯域を含む第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、
前記第1周波数帯域と前記第2周波数帯域毎とで夫々ビートレベル変動波形を取得し、
前記ビートレベル変動波形が各周波数帯域に応じた重み付けで重み付き平均されることにより重み付き
平均ビートレベル
変動波形を取得し、
取得された前記重み付き
平均ビートレベル
変動波形の自己相関値が高い複数のタイミングを取得し、
取得された前記複数のタイミングに基づいて、拍子を決定する、
処理を実行する拍子決定装置。
【請求項8】
コンピュータが、
楽曲データの或るタイミングにおける
全周波数帯域である第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる
1つ以上の或る周波数帯域を含む第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、
前記第1周波数帯域と前記第2周波数帯域毎とで夫々ビートレベル変動波形を取得し、
前記ビートレベル変動波形が各周波数帯域に応じた重み付けで重み付き平均されることにより重み付き
平均ビートレベル
変動波形を取得し、
取得された前記重み付き
平均ビートレベル
変動波形の自己相関値が高い複数のタイミングを取得し、
取得された前記複数のタイミングに基づいて、拍子を決定する、
処理を実行するためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、拍子決定方法、拍子決定装置、及びプログラムに関する。
【背景技術】
【0002】
従来、楽曲音を示す楽曲音データのテンポを解析する技術が知られている(例えば、特許文献1)。楽曲音からテンポを抽出できれば、例えばテンポを変えたオーディオデータの再生や、他のMIDI(Musical Instrument Digital Interface)データと重ねて、テンポを合わせた再生などが可能となる。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、楽曲音は、テンポだけでなく、拍子によっても特徴付けられているため、拍子を認識したいという要請もある。しかしながら、従来、楽曲データからの拍子の認識は、演奏者が実際に聞いて認識しており、拍子を自動認識する技術は知られていなかった。
【0005】
そこで、本発明は、楽音データから良好に拍子を決定することを目的とする。
【課題を解決するための手段】
【0006】
態様の一例の拍子決定方法では、コンピュータが、楽曲データの或るタイミングにおける全周波数帯域である第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる1つ以上の或る周波数帯域を含む第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、前記第1周波数帯域と前記第2周波数帯域毎とで夫々ビートレベル変動波形を取得し、前記ビートレベル変動波形が各周波数帯域に応じた重み付けで重み付き平均されることにより重み付き平均ビートレベル変動波形を取得し、取得された前記重み付き平均ビートレベル変動波形の自己相関値が高い複数のタイミングを取得し、取得された前記複数のタイミングに基づいて、拍子を決定する。
【発明の効果】
【0007】
本発明によれば、楽音データから良好に拍子を決定することが可能となる。
【図面の簡単な説明】
【0008】
【
図1】拍子決定装置の実施形態のブロック図である。
【
図3】パワー変動波形からビートレベル変動波形の導出の説明図である。
【
図4】重み付き平均ビートレベル変動波形の自己相関算出処理の説明図である。
【
図5】重み付き平均ビートレベル変動波形に対する自己相関波形例(4拍子の場合)を示す図である。
【
図6】重み付き平均ビートレベル変動波形に対する自己相関波形例(3拍子の場合)を示す図である。
【
図8】拍子決定のメイン処理の例を示すフローチャートである。
【
図9】拍解析処理の例を示すフローチャート(その1)である。
【
図10】拍解析処理の例を示すフローチャート(その2)である。
【
図11】自己相関計算処理の詳細例を示すフローチャートである。
【
図12】比較元の検証処理の詳細例を示すフローチャートである。
【
図13】3拍子の検証処理の詳細例を示すフローチャートである。
【
図14】5拍子の検証処理の詳細例を示すフローチャートである。
【
図15】小節線位置特定処理の例を示すフローチャートである。
【発明を実施するための形態】
【0009】
図1は、拍子決定装置の実施形態100のブロック図である。拍子決定装置100は、CPU101、ROM(リードオンリーメモリ)102、RAM(ランダムアクセスメモリ)103、入力部104、表示部105、及び出力部106が、システムバス107によって相互に接続される構成を有する。
【0010】
CPU101は、拍子決定装置100の全体の制御と、拍解析処理を実行する。
【0011】
ROM102は、制御プログラムと、データベースを格納する。
【0012】
RAM103は、制御プログラム実行時の変数などを記憶する。
【0013】
入力部104は、音楽オーディオデータを入力する部分であり、オーディオファイル形式のデータを入力する。
【0014】
表示部105は、処理結果を表示する。
【0015】
出力部106は、音楽オーディオを再生する。
【0016】
図1の拍子決定装置100の実施形態の動作概要について、以下に説明する。
図2は、楽曲データの再生に対する周波数毎のパワー変動の模式図である。3次元奥行き方向の斜め軸は周波数[Hz(ヘルツ)]を示しており、横軸は経過時刻[秒]、縦軸はパワーレベル[dB]を示している。
【0017】
一般に音楽のテンポはその音楽で演奏される楽器や歌われる歌のリズム構造によって具現化されるものである。ドラムやベース、ギター、鍵盤楽器や歌など様々な楽器と歌で音楽が構成され、それぞれのパートがテンポやリズム構造に影響を与える。また、一般にテンポやリズムをキープするのはドラムやギター、キーボードなどの楽器であることが多く、歌はそのリズム構造の上で或る程度自由に揺れがあったり自由な表現がなされる。また、リズム構造は、拍、小節、ビートなどの夫々の階層での周期性を持つことで音楽の秩序が生まれる。
【0018】
図2に例示される周波数スペクトルの時間変化では、周波数帯域別に周期性の特徴が表れていることがわかる。例えば帯域Aに着目すると、その帯域での周波数成分のパワーは、経過時刻に沿って周期的に大きく変動している。このパワー変動201は、楽器演奏のリズムに対応している。ここで、帯域Aは低い周波数帯域である。従って、これらの4個の大きなパワーのピークは、例えば低い周波数成分が多く含まれる楽音を発するバスドラムが、例えば4拍子でリズム演奏されることに起因していると考えられる。
【0019】
次に、中間周波数帯域である帯域Bに着目すると、やはり経過時刻に沿ったパワー変動202が見られる。ただし、この場合は、大きなピークの数は2個になっている。従って、これらの2個の大きなパワーのピークは、例えば中間帯域の周波数成分が多く含まれる楽音を発するスネアドラムが、例えば4拍子における強拍又は弱拍の2つの発音タイミングでリズム演奏されることに起因していると考えられる。
【0020】
更に、高い周波数帯域である帯域Cに着目すると、やはり経過時刻に沿ったパワー変動203が見られる。ただし、この場合は、大きなピークの数は8個になっている。従って、これらの8個の大きなパワーのピークは、例えば高い周波数帯域の周波数成分が多く含まれる楽音を発するギターによるコード演奏により、例えば4拍子において8分音符の発音タイミングでリズム演奏されることに起因していると考えられる。
【0021】
以上の考察により、以下に説明する実施形態(以下「本実施形態」と記載)では、各楽器や歌の特徴を捉えやすいように周波数帯域別にスペクトルパワーの立ち上がり部分のパワーをビートレベルと定義し、このビートレベルを周波数解析結果から求める。これを、リズム構造の特徴として表れやすい周波数帯域毎に求めるようにする。
【0022】
図3は、パワー変動波形からビートレベル変動波形の導出の説明図である。フレーム単位の例えば短時間フーリエ変換で算出される或る帯域のパワー変動波形301に着目した場合、その波形変化がマイナス変動からプラス変動に転じたフレームfbから、波形変化が次にプラス変動からマイナス変動に転じるフレームfpまでをパワー変動波形301の立ち上がり部分と判断する。そして、フレームfbのパワーレベルからフレームfpのパワーレベルまでのレベル差を、フレームfpにおけるビートレベルbeatと定義する。
図3(a)のパワー変動波形301からは、#1、#2、及び#3の3個の大きなピークが抽出できる。
【0023】
従って、
図3(b)のビートレベル変動波形302は、#1、#2、及び#3の各ピークフレームfpにおいて有意なビートレベル値を有し、その他の時刻において値0を有する波形となる。
【0024】
ところで、1つの帯域に対応するビートレベル変動波形302のみを拍子の検出に用いた場合、その帯域に対応した楽器の演奏形態によって、正確なビートが刻まれない可能性がある。そこで、本実施形態では、任意の周波数帯域のパワーレベルから
図3に示されるようにして算出したビートレベルを、まず全周波数帯域である第1周波数帯域のパワーレベルである第1パワーレベルに応じた第1ビートレベルとして集計する。更に、上記算出したビートレベルを、上記任意の周波数帯域が含まれる第2周波数帯域(
図2の帯域A、B、Cの何れか)のパワーレベルである第2パワーレベルに応じた第2ビートレベルとして集計してゆく。この結果、第1周波数帯域、及び1つ以上の第2周波数帯域毎に、
図3に示されるようなビートレベル変動波形302が得られる。本実施形態では、これらの帯域毎のビートレベル変動波形302の時間毎のビートレベル値が各帯域に応じた重み付けで重み付き平均されることにより、重み付き平均ビートレベル変動波形が算出される。そして、この重み付き平均ビートレベル変動波形に基づいて、拍子が決定される。
【0025】
このように、(1)バスドラムの帯域、(2)スネアドラムの帯域、(3)コード楽器の帯域、及び(4)帯域全体について算出された各ビートレベル変動波形302が重ね合わされて重み付き平均される。これにより、拍や小節に基づく規則的な音の特徴をより際立たせることができ、拍子の抽出がし易くなる。楽曲に含まれるメロディ等の規則的でない音は重ね合わせによってより強調されなくなるので、結果的に拍にかかわる音がより強調されることになる。上記(1)から(4)の重ね合わせにより、より多くの種類の音楽に対応して拍子を決定することが可能となる。
【0026】
次に、本実施形態では、上述のように算出された重み付き平均ビートレベル変動波形に基づいて、次のような比較元データと各比較先データとの各自己相関が計算される。比較元データは、楽曲データの各経過時刻から設定時間分のデータである。各比較先データは、実際に設定され得る各テンポに対応する同じ楽曲データの各経過時刻だけ比較元データから離れ(ずらされ)、各経過時刻から設定時間分の各データである。そして、自己相関計算により得られる各相関値のうち、値が高い複数(例えば5個)のタイミング(ピーク位置)及び各タイミングの相関値が取得される。そして、その取得された複数のタイミング及び各タイミングの相関値に基づいて、拍子が決定される。
【0027】
図4は、重み付き平均ビートレベル変動波形の自己相関算出処理の説明図である。401は、上述した重み付き平均ビートレベル変動波形である。この重み付き平均ビートレベル変動波形401では、重み付き平均処理により、拍子に対応する規則性が際立っていることがわかる。
【0028】
本実施形態では、この重み付き平均ビートレベル変動波形401において、各経過時刻が楽曲の先頭である経過時刻0秒から例えば2秒ずつ順次進められてゆきながら(
図4の時刻tn
1、tn
2等)、楽曲データの各経過時刻の時点から設定時間=T秒分のデータ、例えば0秒時点~T秒、2秒時点~T秒、4秒時点~T秒、つまり例えば2秒毎時点からT秒分のデータが、比較元データ402として設定される。また、実際に設定される可能性のある各テンポ、例えばテンポ=70~180bpm(ビート/秒)に対応する各時間、例えば1.33秒~3.43秒だけ比較元データから離され(ずらされ)、各経過時刻の時点から設定時間分のデータが比較先データ403として設定される。そして、比較元データ402と、各比較先データ403との間で自己相関が計算される。
【0029】
図5は、
図4のようにして算出された重み付き平均ビートレベル変動波形に対する自己相関波形例(4拍子の場合)を示す図である。
図5において、x軸は、自己相関における比較元に対する比較先のずらし時間であり、テンポが70bpmから180bpmまでの1小節あたりの時間(1.33秒~3.43秒)である。
y軸は、楽曲の先頭から終端までの経過時刻である。
z軸は、自己相関計算の結果である相関値である。
【0030】
図5に示される自己相関波形としては、y軸方向の各経過時刻毎に、その経過時刻からT秒分の比較元データ402(
図4参照)について、1.33秒~3.43秒だけ比較元データから離され(ずらされ)、各経過時刻からT秒分の各比較先データ403(
図4参照)に対応するz軸方向の相関値が、x軸方向に2次元波形としてプロットされる。更に、y軸方向の各経過時刻毎に比較元データ402がシフトされることにより、全体として3次元の自己相関波形がプロットされている。
y軸方向に一番手前の、x軸方向及びz軸方向からなる2次元の自己相関波形は、楽曲の先頭から例えば40秒時点における自己相関波形を示している。
【0031】
図5に例示される3次元波形全体として、まず、比較先データ403が比較元データ402から夫々、1.44秒、1.92秒、2.40秒、2.88秒、及び3.36秒ずれた各時点付近に、#1~#5の相関値のピーク501が現れていることがわかる。前述したように、自己相関の計算における比較元に対する比較先のずらし時間としては、楽曲として想定され得るテンポが70bpmから180bpmまでの1小節あたりの時間(1.33秒~3.43秒)が設定されている。従って、
図5に例示される自己相関波形において現れる相関値のピーク501は、楽曲演奏により発生するテンポ及び拍に同期したビート成分が現れていると考えられる。
【0032】
従って、まず、4拍子の楽曲を仮定した場合には、小節内の4拍に相当する拍間隔及び小節間隔で相関値のピーク501が並ぶはずである。
また、楽曲のテンポは不明であるため、
図5に例として現れる#1から#5の相関値のピーク501のうち、どの相関値のピーク501に対応するずらし時間が小節長に対応するかはわからない。
【0033】
しかしながら、楽曲が4拍子であると仮定され、ある相関値のピーク501に対応するずらし時間がもし小節長に対応していると仮定するならば、他の相関値のピーク501に対応するずらし時間は、その小節長に対して4拍子の各拍子タイミングに対応する倍数関係になるはずである。具体的には、4拍子の楽曲を仮定した場合、他の相関値のピーク501に対応するずらし時間長は、小節長に対して、3/4倍、4/4倍、5/4倍、6/4倍、7/4倍等の倍数関係になるはずである。
【0034】
本実施形態では、上記の4拍子に関する関係性が成立しない場合、次に、楽曲が3拍子であると仮定される。
図6は、
図4のようにして算出された重み付き平均ビートレベル変動波形に対する自己相関波形例(3拍子の場合)を示す図である。
図6において、x軸、y軸、z軸の意味は、夫々
図5の場合と同じである。
【0035】
図6に示される自己相関波形の3次元形状の意味も、
図5の場合と同様である。
図6に例示される3次元波形全体として、まず、比較先データ403が比較元データ402から夫々、1.37秒、1.83秒、2.29秒、及び2.74秒ずれた各時点付近に、#1~#4の相関値のピーク601が現れていることがわかる。
【0036】
ある相関値のピーク601に対応するずらし時間がもし小節長に対応していると仮定するならば、他の相関値のピーク601に対応するずらし時間は、その小節長に対して3拍子の各拍子タイミングに対応する倍数関係になるはずである。具体的には、3拍子の楽曲を仮定した場合、他の相関値のピーク601に対応するずらし時間長は、小節長に対して、3/3倍、4/3倍、5/3倍、6/3倍等の倍数関係になるはずである。
【0037】
本実施形態では、上記の3拍子に関する関係性も成立しない場合、特には図示しないが、楽曲が5拍子であると仮定される。ある相関値のピークに対応するずらし時間がもし小節長に対応していると仮定するならば、他の相関値のピークに対応するずらし時間は、その小節長に対して5拍子の各拍子タイミングに対応する倍数関係になるはずである。具体的には、5拍子の楽曲を仮定した場合、他の相関値のピークに対応するずらし時間長は、小節長に対して、3/5倍、4/5倍、5/5倍、6/5倍、7/5倍等の倍数関係になるはずである。
【0038】
楽曲が他の拍子である場合も考えられるが、通常は3、4、5拍子を仮定すれば十分である。
【0039】
本実施形態では、上述のアルゴリズムを実現するために、次のような処理が実行される。まず、例えば
図4のようにして算出された
図5又は
図6のような3次元の相関値のピーク501又は601について、y軸方向の或る経過時刻における自己相関波形中の、例えば相関値が高い上位5個のピークの相関値が抽出される。そして、それらの相関値が、そのピーク位置(ずらし時間)に対応するヒストグラムのビン位置に累算される。この動作が、y軸方向の各経過時刻毎の自己相関波形に対して実行され、同じヒストグラムに累算されてゆく。
【0040】
この結果、4拍子の楽曲に対する相関値のヒストグラムとして、例えば
図7(a)に例示される相関値のヒストグラム700(a)が得られる。この相関値のヒストグラム700(a)においては、
図5の#1~#5の相関値のピーク501に対応して、それらのピーク位置(ずらし時間)に対応するビン位置に、#1~#5の相関値のヒストグラムのピーク701が得られる。
同様に、3拍子の楽曲に対する相関値のヒストグラムとして、例えば
図7(b)に示される相関値のヒストグラム700(b)が得られる。この相関値のヒストグラム700(b)においては、
図6の#1~#4の相関値のピーク601に対応して、それらのピーク位置(ずらし時間)に対応するビン位置に、#1~#4の相関値のヒストグラムのピーク702が得られる。
【0041】
続いて、本実施形態では、後述する
図8、
図9、及び
図12の拍解析処理及び比較元の検証処理が実行される。これらの処理において、
図7(a)のように得られた相関値のヒストグラム700(a)から抽出した、値が例えば上位7個までの相関値のヒストグラムのピーク701の夫々について、そのピーク位置(ずらし時間)に対応するビン位置が小節時間長であると仮定される。そして、他の相関値のヒストグラムのピーク701に対応するビン位置(=ずらし時間)の2つ以上が前述した4拍子の倍数関係の何れかにあるか否かを判定する処理が実行される。この判定結果が肯定的であれば、上記仮定した小節時間長は正しいと判定して、その4拍子の小節時間長を確定させ、同時にテンポも確定させる。
【0042】
相関値のヒストグラム700が、
図7(a)の700(a)ではなく、
図7(b)の700(b)であったような場合であって、抽出された相関値のヒストグラムのピーク702の何れにおいても、4拍子に関する上記判定が肯定的にならなかった場合には、後述する
図13の3拍子の検証処理が実行される。この3拍子の検証処理において、
図7(b)のように得られた相関値のヒストグラム700(b)から抽出した、値が例えば上位7個までの抽出された相関値のヒストグラムのピーク702の夫々について、そのピーク位置(ずらし時間)に対応するビン位置が小節時間長であると仮定される。そして、他の相関値のヒストグラムのピーク702に対応するビン位置(=ずらし時間)の2つ以上が、前述した3拍子の倍数関係の何れかにあるか否かを判定する処理が実行される。この判定結果が肯定的であれば、上記仮定した小節長は正しいと判定して、その3拍子の小節時間長を確定させ、同時にテンポも確定させる。
【0043】
相関値のヒストグラム700が、
図7(a)の700(a)でも
図7(b)の700(b)でもなく、抽出された相関値のヒストグラムのピークの何れにおいても、4拍子に関する上記判定及び3拍子に関する上記判定が肯定的にならなかった場合には、後述する
図14の5拍子の検証処理が実行される。この5拍子の検証処理において、特には図示しないが、抽出された相関値のヒストグラムのピークの夫々について、そのピーク位置(ずらし時間)に対応するビン位置が小節時間長であると仮定される。そして、他の相関値のヒストグラムのピークに対応するビン位置(=ずらし時間)の2つ以上が前述した5拍子の倍数関係の何れかにあるか否かを判定する処理が実行される。この判定結果が肯定的であれば、上記仮定した小節長は正しいと判定して、その5拍子の小節時間長を確定させ、同時にテンポも確定させる。
【0044】
上述のようにして本実施形態では、楽音データから良好に拍子を決定することが可能となる。
【0045】
図8は、上述した実施形態の動作を実現する拍子決定のメイン処理の例を示すフローチャートである。このメイン処理は、
図1のCPU101がROM102に記憶されているメイン処理プログラムをRAM103に読み出して実行する処理である。このメイン処理では、各楽器や歌の特徴を捉えやすいように周波数解析(短時間フーリエ変換)により
図2に例示されるように周波数帯域別に算出したスペクトル成分のパワーの立上り部分を、
図3で説明したビートレベルとして算出する。メイン処理では、この処理を、リズム構造の特徴として表れやすい周波数帯域毎に算出する。更に、メイン処理では、これらの処理を、楽曲データの全体に対して、時間(フレーム)を少しずつずらしながら、実行していく。
【0046】
CPU101はまず、初期化処理として、楽曲の経過時刻を一定時間(例えば256~1024ミリ秒)毎のフレームとして指定するためのRAM103に記憶されている変数であるフレームカウンタ変数frmの値を0(ゼロ)にリセットする(ステップS801)。
【0047】
次に、CPU101は、ステップS802で楽曲データの全てのフレームに対して処理が終了したと判定するまで、ステップS820でフレームカウンタ変数frmの値を+1ずつインクリメントしながら、ステップS802からステップS820までの一連の処理を繰り返し実行する。
【0048】
この繰返し処理において、CPU101はまず、
図1の入力部104からRAM103に読み込んだフレームカウンタ変数frmが示す現在のフレームの楽曲データに対して、周波数解析処理である短時間フーリエ変換の演算を実行する(ステップS803)。
【0049】
次に、CPU101は、ステップS803の短時間フーリエ変換の演算により算出された各周波数成分から、各周波数成分のパワーを計算する(ステップS804)。周波数成分毎のパワー値は、周波数成分の周波数位置であるbin値をキーとして、RAM103上の配列変数であるパワー配列変数doData[bin]に得られる。
【0050】
続いて、CPU101は、ステップS805で、前述したbin値を指定するためのRAM103に記憶される変数であるbin変数の値を1にリセットした後、ステップS818でそのbin変数の値を+1ずつインクリメントしながら、ステップS806で全てのbin値について処理が完了したと判定するまで、ステップS806からステップS818までの一連の処理をbin値毎に繰返し実行する。
【0051】
このbin値の繰返し処理において、CPU101はまず、bin変数が示す現在のbin(周波数成分)値に対応してRAM103に記憶されている現在フレームパワー配列変数doData[bin]の値から、現在のフレームの1つ前のフレームにおける現在のbin値に対応してRAM103に記憶されている前フレームパワー配列変数doDataBuf[bin]の値を減算する。そして、CPU101は、その減算結果である差分値をRAM103に記憶される変数である差分値変数div1に格納する(ステップS807)。この差分値は、前フレームと現在フレームとの間のパワーの変化分を示している。
【0052】
次に、CPU101は、ステップS807で算出した差分値変数div1の値が、0(ゼロ)よりも大きいか否かを判定する(ステップS808)。この判定処理では、現在フレームにおける現在のbin(周波数成分)値に対応するパワーが、プラス変動になって(増加して)いるか、マイナス変動になって(減少して)いるか(変動無しを含む)が判定される。
【0053】
現在フレームにおける現在のbin(周波数成分)値のパワー変動がプラス変動になっておりステップS808の判定がYESの場合には、CPU101は、次の処理を実行する。CPU101は、現在のbin(周波数成分)値のパワーレベル値を示すRAM103に記憶される配列変数であるレベル配列変数Lv[bin]に、ステップS807で算出された差分値変数div1の値をレベル増加分として累算する(ステップS817)。なお、
図8のステップS817において演算記号「+=」は、その左辺の変数にその右辺の値を累算する演算を示している。
【0054】
ステップS817の処理の後、CPU101は、ステップS818でbin変数の値を+1インクリメントし、その後にステップS806からステップS807の処理に移行して、次のbin(周波数成分)値に対する処理を繰り返し実行する。
【0055】
やがて、現在フレームにおける現在のbin(周波数成分)値のパワー変動がマイナス変動(又は変動無し)に転じて差分値変数div1の値が0以下となり、ステップS808の判定がNOとなる。これは、前述した
図3においてフレームfpが到来したことを意味する。
【0056】
この時点において、レベル配列変数Lv[bin]には、現在のbin(周波数成分)値に対応する
図3に示されるビートレベルbeatが得られている。CPU101はまず、このレベル配列変数Lv[bin]の値を、全周波数帯域である第1周波数帯域の、フレームカウンタ変数frmの値が示す現在フレームにおけるビートレベルが格納されるRAM103に記憶される配列変数である第1のビートレベル変動波形配列変数BL1[frm]に累算する(ステップS809)。第1周波数帯域は、例えば、サンプリング周波数が44.1kHz(キロヘルツ)の場合、周波数0~22050Hzの範囲を有する。
【0057】
次に、CPU101は、bin変数の値が示す現在のbin(周波数成分)値が、BD(バスドラム)帯域に属するか否かを判定する(ステップS810)。BD帯域は、例えば、周波数20~100Hzの範囲を有し、例えば
図2の帯域Aに対応する。
【0058】
ステップS810の判定がYESならば、CPU101は、レベル配列変数Lv[bin]の値を、第2周波数帯域の一帯域であるBD帯域の、フレームカウンタ変数frmの値が示す現在フレームにおけるビートレベルが格納されるRAM103に記憶される配列変数である第2のビートレベル変動波形配列変数BL2[frm]に累算する(ステップS811)。その後、CPU101は、ステップS816の処理に移行する。
【0059】
ステップS810の判定がNOならば、CPU101は、bin変数の値が示す現在のbin(周波数成分)値が、SD(スネアドラム)帯域に属するか否かを判定する(ステップS812)。SD帯域は、例えば、周波数125~250Hzの範囲を有し、例えば
図2の帯域Bに対応する。
【0060】
ステップS812の判定がYESならば、CPU101は、レベル配列変数Lv[bin]の値を、第2周波数帯域の一帯域であるSD帯域の、フレームカウンタ変数frmの値が示す現在フレームにおけるビートレベルが格納されるRAM103に記憶される配列変数である第3のビートレベル変動波形配列変数BL3[frm]に累算する(ステップS813)。その後、CPU101は、ステップS816の処理に移行する。
【0061】
ステップS812の判定がNOならば、CPU101は、bin変数の値が示す現在のbin(周波数成分)値が、コード帯域に属するか否かを判定する(ステップS814)。コード帯域は、例えば、周波数300~600Hzの範囲を有し、例えば
図2の帯域Cに対応する。
【0062】
ステップS814の判定がYESならば、CPU101は、レベル配列変数Lv[bin]の値を、第2周波数帯域の一帯域であるコード帯域の、フレームカウンタ変数frmの値が示す現在フレームにおけるビートレベルが格納されるRAM103に記憶される配列変数である第4のビートレベル変動波形配列変数BL4[frm]に累算する(ステップS815)。その後、CPU101は、ステップS816の処理に移行する。
【0063】
ステップS811、ステップS813、又はステップS815の処理の後、或いはステップS814の判定がNOの場合に、CPU101は、現在のbin(周波数成分)値に対応するレベル配列変数Lv[bin]の値を0(ゼロ)にクリアする。その後、CPU101は、bin(周波数成分)値の値を+1インクリメントし(ステップS818),ステップS806の処理からステップS807の処理に移行して、次のbin(周波数成分)値に対応する処理を繰り返し実行する。
【0064】
以上のステップS806からステップS818の処理の繰返しにより、全てのbin(周波数成分)値に対する処理が終了すると、ステップS806の判定がYESとなる。この結果、CPU101は、RAM103に記憶されている現在フレームに対応する全てのbin(周波数成分)値に対応する現在フレームパワー配列変数doData[n]を、前フレームパワー配列変数doDataBuf[n](nはすべてのbin値を表す)にコピーし、RAM103に記憶させる(ステップ819)。
【0065】
その後、CPU101は、フレームカウンタ変数frmの値を+1インクリメントし(ステップS820)、そして、ステップS802からステップS803に移行して、次のフレームに対する処理を繰り返し実行する。
【0066】
やがて、楽曲データの末尾までの全てのフレームに対する処理が完了すると、ステップS802の判定がYESとなって、
図8のメイン処理を終了する。
【0067】
以上のメイン処理により、全帯域に対応する第1のビートレベル変動波形配列変数BL1[frm]に得られる第1のビートレベル変動波形BL1[frm]、BD帯域に対応する第2のビートレベル変動波形配列変数BL2[frm]に得られる第2のビートレベル変動波形BL2[frm]、SD帯域に対応する第3のビートレベル変動波形配列変数BL3[frm]に得られる第3のビートレベル変動波形BL3[frm]、及びコード帯域に対応する第4のビートレベル変動波形配列変数BL4[frm]に得られる第4のビートレベル変動波形BL4[frm]として、
図3(b)の302に例示したのと同様の形状の、一楽曲データ分のビートレベル変動波形が得られる。
【0068】
図9及び
図10は、拍解析処理の例を示すフローチャートである。拍解析処理は、メイン処理の場合と同様に、
図1のCPU101がROM102に記憶されている拍解析処理プログラムをRAM103に読み出して実行する処理である。
この拍解析処理では、まず
図3で前述したようにして、
図8のメイン処理で得られた全帯域に対応する第1のビートレベル変動波形BL1[frm]、BD帯域に対応する第2のビートレベル変動波形BL2[frm]、SD帯域に対応する第3のビートレベル変動波形BL3[frm]、及びコード帯域に対応する第4のビートレベル変動波形BL4[frm]から、重み付き平均ビートレベル変動波形WAM_BL(Weighted Arithmetic Mean Beat Level)が算出される。
次に、拍解析処理では、
図4~
図6で前述したようにして、重み付き平均ビートレベル変動波形WAM_BLに対して、自己相関が計算される。
更に、拍解析処理では、
図7で前述したようにして、自己相関の計算により得られる相関値から相関値のヒストグラム(
図7の700に対応)が算出される。
そして、拍解析処理では、前述したようにして、相関値のヒストグラムのピークに基づいて、楽曲データの拍子を推定する処理が実行される。
【0069】
上述の重み付き平均ビートレベル変動波形WAM_BLの算出処理と、重み付き平均ビートレベル変動波形WAM_BLに対する自己相関の計算処理は、
図9のステップS901からステップS908で実行され、上述の相関値のヒストグラムの算出処理は
図9のステップS909とステップS910で実行される。更に、上述の相関値のヒストグラムのピークに基づいて楽曲データの拍子を推定する処理は、
図10のステップS912からステップS923で実行される。
【0070】
ここで、RAM103に記憶される比較元先頭位置変数doOrgとして、
図4の比較元データ402の先頭位置が、秒を単位とするデータとして格納される。同様に、RAM103に記憶される比較先先頭位置変数doDstとして、
図4の比較先データ403の先頭位置が、秒を単位とするデータとして格納される。以下の説明では、それぞれの変数に格納される値をその変数名と同じ記号で示す。
比較元先頭位置doOrg[秒]は、ROM102(可変を許容する場合にはRAM103)に記録される比較元時間ステップ幅変数doOrgStepが示す比較元時間ステップ幅doOrgStep[秒]ずつ増加させられながら、楽曲データの先頭から終端までの間で指定される。比較元時間ステップ幅doOrgStepの値は、例えば2秒である。
また、比較先先頭位置doDstは、楽曲データとして指定され得るテンポ範囲が例えば60から180の範囲であるように、値がセットされる。4拍子の楽曲データでは、テンポ60の場合に小節の長さが4秒、テンポ180の場合に小節の長さが1.33秒となる。つまり、比較先先頭位置doDstとしては、1.33[秒]から4.00[秒]の間の値が、必要な分解能でずらしながら指定される。今、このずらし幅を、ROM102(可変を許容する場合にはRAM103)に記録される比較先時間ステップ幅変数doDstStepが示す比較先時間ステップ幅doDstStep[秒]とする。このとき、比較先先頭位置doDstは、下記(1)式で示される演算処理により計算される。
doDst=doOrg+1.33+k×doDstStep ・・・(1)
ここで、kは、0以上の整数である。
【0071】
図9のフローチャートにおいて、CPU101はまず、初期化処理を実行し、比較元データの進行を制御するRAM103に記憶される比較元カウンタ変数nに0(ゼロ)を設定し、比較元先頭位置変数doOrgに楽曲データの先頭を表す0.0[秒]を設定する(ステップS901)。
【0072】
次に、CPU101は、ステップS911で比較元カウンタ変数nの値を+1ずつインクリメントすると共に、比較元先頭位置変数doOrgにROM102(可変を許容する場合はRAM103)から読み出した比較元時間ステップ幅変数doOrgStepの値を順次累算しながら、ステップS902で比較元データの指定が楽曲データの末尾まで達したと判定するまで、ステップS902からステップS911までの一連の比較元毎処理を繰り返し実行する。ステップS911での累算処理の繰返しによって、「doOrg=doOrgStep×n」という比較元先頭位置変数doOrgを進行させる処理が実行されることになり、例えば
図4において、楽曲の先頭から末尾までの各経過時刻tn
1、tn
2等が順次指定されてゆくことになる。
【0073】
上述の比較元毎処理の繰返しにおいて、CPU101はまず、比較先の位置を指定するためのRAM103に記憶される比較先カウンタ変数k(前述の(1)式を参照)に初期値0(ゼロ)を設定する(ステップS903)。
【0074】
次に、CPU101は、現在指定されている比較元先頭位置変数doOrg(ステップS901とステップS911を参照)と、ステップS903で初期設定された比較先カウンタ変数kの値=0を用いて、前述した(1)式により、比較先先頭位置doDstの初期値を算出する(ステップS904)。
【0075】
そして、CPU101は、ステップS908で、比較先カウンタ変数kの値を+1ずつインクリメントすると共に、ステップS904で初期設定された比較先先頭位置変数doDstにROM102(可変を許容する場合はRAM103)から読み出した比較先時間ステップ幅変数doDstStepの値を順次累算しながら、ステップS905で比較先データの指定が終了したと判定するまで、ステップS905からステップS908までの一連の比較先毎処理を繰り返し実行する。
【0076】
上記比較先毎処理の繰返しにおいて、CPU101はまず、自己相関計算処理を実行する(ステップS906)。
【0077】
図11は、
図9のステップS906の自己相関計算処理の詳細例を示すフローチャートである。
図11において、CPU101は、ステップS1101で比較元及び比較先の設定時間内の進行を制御するRAM103に記憶される設定時間内カウンタ変数iに初期値0(ゼロ)を格納する。その後、CPU101は、ステップS1107で設定時間内カウンタ変数iの値を+1ずつインクリメントしながら、ステップS1102で設定時間内カウンタ変数iの値が設定時間T(
図4参照)に対応するROM102(可変を許容する場合はRAM103)に記憶されている設定時間サンプル数Numに到達したと判定するまで、ステップS1102からステップS1107の一連の設定時間内毎処理を繰り返し実行する。
【0078】
上述の設定時間内毎処理の繰返しにおいて、まずCPU101は、下記(2)式及び(3)式で示される各演算処理に基づいて、比較元データの設定時間内及び比較先データの設定時間内の各i番目のデータ位置p0及びp1[秒]を計算する(ステップS1103)。
p0=doOrg+i×4×(doDst-doOrg)/Num ・・・(2)
p1=doDst+i×4×(doDst-doOrg)/Num ・・・(3)
上記(2)式及び(3)式において、設定時間内カウンタ変数iの値が
図4の設定時間Tに相当する設定時間サンプル数Numの値になったときに、上記(2)式及び(3)式で計算される各データ位置は、共に「4×(doDst-doOrg)」となる。即ち、設定時間Tは、比較先データの比較元データに対するずらし時間の4倍の時間に設定される。
上述の(2)式及び(3)式によって示される演算処理によれば、設定時間Tは、固定時間ではなく、比較先データと比較元データのずらし時間の4倍の値{4×(doDst-doOrg)}になって、ずらし時間に応じた時間範囲になる。このようにして、自己相関演算のためにずらし時間に応じた適切な設定時間Tが設定されることになる。
【0079】
次に、CPU101は、上記(2)式及び(3)式の演算で計算された比較元データの設定時間内及び比較先データの設定時間内の各i番目のデータ位置p0及びp1[秒]に基づいて、下記(4)式及び(5)式で示される各演算処理を実行する。この結果、CPU101は、比較元データの設定時間内及び比較先データの設定時間内の各i番目のサンプルデータへのインデックスである、比較元サンプルiインデックスidxOrg_i及び比較先サンプルiインデックスidxDst_iを算出する(ステップS1104)。
idxOrg_i=p0×サンプリング周波数[Hz] ・・・(4)
idxDst_i=p1×サンプリング周波数[Hz] ・・・(5)
【0080】
続いて、CPU101は、(4)式及び(5)式の各演算で算出された比較元サンプルiインデックスidxOrg_i及び比較先サンプルiインデックスidxDst_iが含まれる各フレーム番号である、比較元フレームインデックスidxOrg_f及び比較先フレームインデックスidxDst_fを、下記(6)式及び(7)式で示される演算処理により算出する(ステップS1005)。ただし、fsizeはフレームサイズ(単位は「サンプル」)である。
idxOrg_f=idxOrg_i/fsize ・・・(6)
idxDst_f=idxDst_i/fsize ・・・(7)
【0081】
そして、CPU101は、上述の(6)式の演算で算出された比較元フレームインデックスidxOrg_fをキーとして、下記(8)式で示される演算処理を実行する。
WAM_BL_Org[i]=A×第1のビートレベル変動波形BL1[idxOrg_f]+B×第2のビートレベル変動波形BL2[idxOrg_f]+C×第3のビートレベル変動波形BL3[idxOrg_f]+D×第4のビートレベル変動波形BL4[idxOrg_f]
・・・(8)
この演算処理により、CPU101は、重み係数A、B、C、及びDを用いて、第1のビートレベル変動波形BL1[idxOrg_f]、第2のビートレベル変動波形BL2[idxOrg_f]、第3のビートレベル変動波形BL3[idxOrg_f]、及び第4のビートレベル変動波形BL4[idxOrg_f]に対する比較元重み付き平均ビートレベル変動波形WAM_BL_Org[i]を計算する(ステップS1106)。ここで、重み係数A、B、C、及びDは、例えばROM102に記憶されており、又は可変を許容する場合はRAM103に記憶されている。また、第1のビートレベル変動波形BL1[idxOrg_f]、第2のビートレベル変動波形BL2[idxOrg_f]、第3のビートレベル変動波形BL3[idxOrg_f]、及び第4のビートレベル変動波形BL4[idxOrg_f]は夫々、
図8のフローチャートのステップS809、ステップS811、ステップS813、及びステップS815で算出されRAM103に記憶されている。
【0082】
同様に、CPU101は、上述の(7)式の演算で算出された比較先フレームインデックスidxDst_fをキーとして、下記(9)式で示される演算処理を実行する。
WAM_BL_Dst[i]=A×第1のビートレベル変動波形BL1[idxDst_f]+B×第2のビートレベル変動波形BL2[idxDst_f]+C×第3のビートレベル変動波形BL3[idxDst_f]+D×第4のビートレベル変動波形BL4[idxDst_f]
・・・(9)
この演算処理により、CPU101は、上述の重み係数A、B、C、及びDを用いて、第1のビートレベル変動波形BL1[idxDst_f]、第2のビートレベル変動波形BL2[idxDst_f]、第3のビートレベル変動波形BL3[idxDst_f]、及び第4のビートレベル変動波形BL4[idxDst_f]に対する比較先重み付き平均ビートレベル変動波形WAM_BL_Dst[i]を計算する(同じくステップS1106)。ここで、第1のビートレベル変動波形BL1[idxDst_f]、第2のビートレベル変動波形BL2[idxDst_f]、第3のビートレベル変動波形BL3[idxDst_f]、及び第4のビートレベル変動波形BL4[idxDst_f]は夫々、
図8のフローチャートのステップS809、ステップS811、ステップS813、及びステップS815で算出されRAM103に記憶されている。
【0083】
その後、CPU101は、設定時間内カウンタ変数iを+1インクリメントし、ステップS1102を介してステップS1103の処理に移行し、設定時間T内の次の位置iに対応する演算処理を繰り返す。
【0084】
やがて、設定時間内カウンタ変数iの値が設定時間Tに対応する末尾位置である設定時間サンプル数Numに到達し、ステップS1102でi≧Numとなってその判定がYESになると、CPU101は、次の処理を実行する。CPU101は、上述のように算出された設定時間Tに対応する比較元重み付き平均ビートレベル変動波形WAM_BL_Org[i]及び比較先重み付き平均ビートレベル変動波形WAM_BL_Dst[i](0≦i<Num)に基づいて、既知の例えば下記(10)式で示される自己相関演算により、相関値である相関係数corrを算出する(ステップS1108)。
corr=Cov(WAM_BL_Org[i],WAM_BL_Dst[i])/(σ(WAM_BL_Org[i])×σ(WAM_BL_Dst[i]))
但し、(0≦i<Num)
・・・(10)
ここで、Cov(X,Y)は、値XとYの共分散を算出する関数演算である。また、σ(X)は、値Xの標準偏差を算出する関数演算である。
【0085】
その後、CPU101は、比較先カウンタ変数kで示される現在のずれ時間「k×doDstStep」を有する比較元データと比較先データに対する、
図11のフローチャートで示される
図9のステップS906の自己相関計算処理を終了する。
【0086】
図9のフローチャートの説明に戻り、CPU101は、(10)式で示される演算処理により計算された相関係数corrを、比較先カウンタ変数kに対応する相関係数配列corr[k]に格納し、RAM103に記憶させる(ステップS907)。
【0087】
その後、CPU101は、比較先カウンタ変数kの値を+1インクリメントさせると共に、比較先先頭位置変数doDstの値に比較先時間ステップ幅変数doDstStepの値を累算する(ステップS908)。そして、CPU101は、ステップS905からS906の処理に移行し、次の比較先データに対する自己相関計算処理を繰り返す。
【0088】
やがて、全ての比較先カウンタ変数kの値に対応する繰返し処理が終了しステップS905の判定がYESになると、CPU101は、次の処理を実行する。CPU101は、
図7で前述したようにして、上述のステップS902~S908の繰返しにより得られる、比較元カウンタ変数nの値によって示される現在の経過時刻における比較元データに対して計算された自己相関波形において、例えば上位5個のピーク位置とそれらの相関値を算出し、夫々RAM103に記憶される配列変数CorrPosFive[j]とCorrFive[j](0≦j≦4)に格納する(ステップS909)。
【0089】
続いて、CPU101は、
図7で前述したようにして、RAM103に記憶される配列変数である相関値のヒストグラムHistの、ステップS909で算出した上位5個の各ピーク位置CorrPosFive[j]に対応する各ビン位置に、ステップS909で算出した各相関係数CorrFive[j]を、夫々「Hist[CorrPosFive[j]]+=CorrFive[j](0≦j≦4)」として累算する(ステップS910)。
【0090】
その後、CPU101は、比較元カウンタ変数nの値を+1インクリメントさせると共に、比較元先頭位置変数doOrgの値に比較元時間ステップ幅変数doOrgStepの値を累算する(ステップS911)。そして、CPU101は、ステップS902からS903の処理に移行し、次の比較元データに対する自己相関計算処理を繰り返す。
【0091】
やがて、全ての比較元データに対する処理が終了しステップS902の判定がYESになると、CPU101は、
図10のステップS912以降の処理を実行する。
【0092】
まずCPU101は、ヒストグラムHist[k]から、ヒストグラム値が例えば上位7個までの大きさを有する相関値のヒストグラムのピーク位置を取得する(ステップS912)。ここで、ヒストグラムHist[k]は、前述の
図9のステップS909及びステップS910の処理により得られている。また、kは、
図4で説明したずらし時間を1.33秒から4秒まで指定する比較先カウンタ変数値(前述の(1)式参照)である。
【0093】
次に、CPU101は、ピーク比較元カウンタ変数nに対して、ステップS912で取得した例えば7個のピークのうちの最初のピーク番号=0をセットする(ステップS913)。その後、CPU101は、ステップS923で+1ずつインクリメントしながら、ステップS914で全ての指定が終了したと判定するまで、ピーク比較元カウンタ変数nの値を順次指定する。そして、CPU101は、このピーク比較元カウンタ変数nが示すピーク位置(=ずらし時間長)を、RAM103に記憶されるピーク比較元長さ変数len1に格納する(ステップS915)。
【0094】
続いて、CPU101は、ピーク比較元カウンタ変数nが指定されてピーク比較元が一つ指定される毎に、ピーク比較先カウンタ変数kに対して、ステップS912で取得した例えば7個のピークのうちの最初のピーク番号=0をセットする(ステップS916)。その後、CPU101は、ステップS922で+1ずつインクリメントしながら、ステップS917で全ての指定が終了したと判定するまで、ピーク比較先カウンタ変数kの値を順次指定する。
そして、CPU101はまず、このピーク比較先カウンタ変数kが示すピーク位置(=ずらし時間長)を、RAM103に記憶されるピーク比較先長さ変数len2に格納する(ステップS918)。
【0095】
その後、CPU101は、まずステップS919、S920、及びS921で、4拍子、3拍子、及び5拍子を順次仮定する。夫々の仮定のもとで、CPU101は、ピーク比較元長さ変数len1の値が小節時間長であると仮定する。そして、CPU101は、ステップS918で順次指定されるピーク比較先長さ変数len2の値を用いて計算される比率len2/len1が、前述した4拍子、3拍子、及び5拍子の何れかの倍数関係にあたるか否かを順次判定する。
【0096】
図12は、
図10のステップS919の比較元の検証処理である4拍子検証処理の詳細例を示すフローチャートである。CPU101は、4拍子の倍率を指定するRAM103に記憶される変数jを3に初期設定する(ステップS1201)。その後、CPU101は、変数jの値を+1ずつインクリメントしながら(ステップS1206)、ステップS1202で例えばピーク7個分の比較処理が終了したと判定するまで(
図10のステップS912を参照)、下記(11)式で示される演算(ステップS1203)と、下記(12)式で示される判定処理(ステップS1204)を実行する。
LRat[n]=100×len2/len1-100×j/4 ・・・(11)
-1≦LRat[n]≦1 ・・・(12)
【0097】
(11)式で示される演算処理により、ピーク比較元長さ変数len1の値に対するピーク比較先長さ変数len2の値の比率と、ステップS1203の繰返し処理により順次指定される4拍子の各倍率j/4との差分値が算出される。そして、ステップS1204の繰返し処理により順次実行される(12)式の判定処理が成立すると、比率len2/len1が現在の変数jの値に対応する4拍子の倍率j/4に一致又はほぼ一致すると判定される。
【0098】
ステップS1204の判定がYESになったら、CPU101は、RAM103に記憶される変数TempoOK[n]の値をインクリメントする(ステップS1205)。なお、この変数値は、
図10のステップS916又はステップS922でピーク比較先カウンタ変数kの値が変更される毎に0(ゼロ)にリセットされる。
【0099】
ステップS1202の判定がYESとなって以上の繰返し処理が終了すると、CPU101は、変数TempoOK[n]の値が2以上になっているか否か、即ち、len2/len1の比率が4拍子の倍率j/4に一致又はほぼ一致した回数が2回以上あったか否かを判定する(ステップS1207)。
【0100】
ステップS1207の判定がYESならば、CPU101は、現在仮定されている小節時間長が正しいと判定して、その4拍子の小節時間長を確定させ、同時にテンポも確定させる(ステップS1208)。
【0101】
ステップS1207の判定がNOならば、CPU101は、ステップS1208の処理はスキップして、小節時間長及びテンポは確定させない。
【0102】
その後、CPU101は、
図12のフローチャートで示される
図10のステップS919の比較元の検証処理を終了する。ここでCPU101は、上記ステップS1208を実行することにより小節時間長及びテンポが確定していれば、
図9及び
図10のフローチャートで示される拍解析処理を終了して、確定した小節長及びテンポ値を、
図1の表示部105に表示する。
【0103】
一方、CPU101は、ステップS919の検証処理で小節時間長及びテンポが確定しなければ、次に、3拍子の検証処理を実行する(ステップS920)。
図13は、3拍子の検証処理の詳細例を示すフローチャートである。
【0104】
CPU101は、3拍子の倍率を指定するRAM103に記憶される変数jを3に初期設定する(ステップS1301)。その後、CPU101は、変数jの値を+1ずつインクリメントしながら(ステップS1306)、ステップS1302で例えばピーク7個分の比較処理が終了したと判定するまで(
図10のステップS912を参照)、下記(13)式で示される演算(ステップS1303)と、前述の(12)式で示される判定処理(ステップS1304)を実行する。
LRat[n]=100×len2/len1-100×j/3 ・・・(13)
【0105】
(13)式で示される演算処理により、ピーク比較元長さ変数len1の値に対するピーク比較先長さ変数len2の値の比率と、ステップS1303の繰返し処理により順次指定される3拍子の各倍率j/3との差分値が算出される。そして、ステップS1304の繰返し処理により順次実行される(14)式の判定処理が成立すると、比率len2/len1が現在の変数jの値に対応する3拍子の倍率j/3に一致又はほぼ一致すると判定される。
【0106】
ステップS1304の判定がYESになったら、CPU101は、RAM103に記憶される変数TempoOK[n]の値をインクリメントする(ステップS1305)。なお、この変数値は、
図10のステップS916又はステップS922でピーク比較先カウンタ変数kの値が変更される毎に0(ゼロ)にリセットされる。
【0107】
ステップS1302の判定がYESとなって以上の繰返し処理が終了すると、CPU101は、変数TempoOK[n]の値が2以上になっているか否か、即ち、len2/len1の比率が3拍子の倍率j/3に一致又はほぼ一致した回数が2回以上あったか否かを判定する(ステップS1307)。
【0108】
ステップS1307の判定がYESならば、CPU101は、現在仮定されている小節時間長が正しいと判定して、その3拍子の小節時間長を確定させ、同時にテンポも確定させる(ステップS1308)。
【0109】
ステップS1307の判定がNOならば、CPU101は、ステップS1308の処理はスキップして、小節時間長及びテンポは確定させない。
【0110】
その後、CPU101は、
図13のフローチャートで示される
図10のステップS920の3拍子の検証処理を終了する。ここでCPU101は、上記ステップS1308を実行することにより小節時間長及びテンポが確定していれば、
図9及び
図10のフローチャートで示される拍解析処理を終了して、確定した小節長及びテンポ値を、
図1の表示部105に表示する。
【0111】
一方、CPU101は、ステップS920の検証処理で小節時間長及びテンポが確定しなければ、引き続いて、5拍子の検証処理を実行する(ステップS921)。
図14は、5拍子の検証処理の詳細例を示すフローチャートである。
【0112】
CPU101は、5拍子の倍率を指定するRAM103に記憶される変数jを3に初期設定する(ステップS1401)。その後、CPU101は、変数jの値を+1ずつインクリメントしながら(ステップS1406)、ステップS1402で例えばピーク7個分の比較処理が終了したと判定するまで(
図10のステップS912を参照)、下記(14)式で示される演算(ステップS1403)と、前述の(12)式で示される判定処理(ステップS1404)を実行する。
LRat[n]=100×len2/len1-100×j/5 ・・・(14)
【0113】
(13)式で示される演算処理により、ピーク比較元長さ変数len1の値に対するピーク比較先長さ変数len2の値の比率と、ステップS1403の繰返し処理により順次指定される5拍子の各倍率j/5との差分値が算出される。そして、ステップS1404の繰返し処理により順次実行される(14)式の判定処理が成立すると、比率len2/len1が現在の変数jの値に対応する5拍子の倍率j/5に一致又はほぼ一致すると判定される。
【0114】
ステップS1404の判定がYESになったら、CPU101は、RAM103に記憶される変数TempoOK[n]の値をインクリメントする(ステップS1405)。なお、この変数値は、
図10のステップS916又はステップS922でピーク比較先カウンタ変数kの値が変更される毎に0(ゼロ)にリセットされる。
【0115】
ステップS1402の判定がYESとなって以上の繰返し処理が終了すると、CPU101は、変数TempoOK[n]の値が2以上になっているか否か、即ち、len2/len1の比率が5拍子の倍率j/5に一致又はほぼ一致した回数が2回以上あったか否かを判定する(ステップS1407)。
【0116】
ステップS1407の判定がYESならば、CPU101は、現在仮定されている小節時間長が正しいと判定して、その5拍子の小節時間長を確定させ、同時にテンポも確定させる(ステップS1408)。
【0117】
ステップS1407の判定がNOならば、CPU101は、ステップS1408の処理はスキップして、小節時間長及びテンポは確定させない。
【0118】
その後、CPU101は、
図14のフローチャートで示される
図10のステップS921の5拍子の検証処理を終了する。ここでCPU101は、上記ステップS1408を実行することにより小節時間長及びテンポが確定していれば、
図9及び
図10のフローチャートで示される拍解析処理を終了して、確定した小節長及びテンポ値を、
図1の表示部105に表示する。
【0119】
一方、CPU101は、ステップS921の検証処理で小節時間長及びテンポが確定しなければ、ステップS922でピーク比較先カウンタ変数kの値を+1インクリメントする。その後CPU101は、ステップS917からステップS918の処理に移行して、ステップS912で取得した例えば7個のピークのうちの次のピーク番号に対する上述の処理を繰り返し実行する。
【0120】
やがて、ステップS912で取得した例えば7個のピークの全てに対して上述の処理が終了してステップS914の判定がYESになると、CPU101は、
図1の表示部105に、小節長及びテンポを確定できなかった旨をエラー表示して、
図9及び
図10のフローチャートで例示される拍解析処理を終了する(ステップS924)。
【0121】
図15は、小節線位置特定処理の例を示すフローチャートである。
図9から
図14のフローチャートを用いて説明した拍解析処理を実行すると、楽曲全体に対するその楽曲のテンポと拍子と小節時間(小節長)が抽出される。今、上記拍解析処理によって決定された小節時間をmeasLen(単位は「秒」)とし、拍子を例えば4拍子とする。また、楽曲中の小節の順番(何番目の小節か)をmeasNumとし、measNum番目の小節の楽曲の先頭からの暫定的な先頭位置(経過時刻、単位は「秒」)をmeasTime[measNum]とする。この結果、measLenとmeasNumを使って、measTime[measNum]は、下記(15)式で示される演算により決定される。
measTime[measNum]=measLen×measNum
・・・(15)
【0122】
上記(15)式で決定される小節の暫定的な先頭位置measTime[measNum]は、あくまでも暫定値である。今、小節の正しい先頭位置を小節線位置と呼ぶことにすれば、小節線位置は、時間経過に伴うテンポの変動に伴って各ビートのピーク位置が変化することによって、小節の暫定的な先頭位置measTime[measNum]からずれる。この小節線ずれ量をbestPhaseとすれば、小節線位置は、下記(16)式で示される演算により決定される。
小節線位置=measTime[measNum]+bestPhase
・・・(16)
図15のフローチャートで示される小節線位置特定処理は、上記(16)式の小節線ずれ量bestPhaseを算出して、正しい小節線位置を特定するための処理である。
【0123】
小節線位置を特定するために、
図15に示されるフローチャートにおいて、CPU101はまず、小節線ずれ量仮定値measPhase(単位は「秒」)を、ステップS1501で0.0(ゼロ)に初期設定する。その後、CPU101は、ステップS1509で例えば0.005秒(5ミリ秒)ずつ順次インクリメントしながら、ステップS1502で所定の最大値に達して終了したと判定するまで、ステップS1502からS1509までの一連の処理を繰り返し実行する。
【0124】
上記繰返し処理において、CPU101は更に、ステップS15003において小節番号measNumと誤差合計値doValを夫々初期値0(ゼロ)に設定する。その後、CPU101は、ステップS1506で小節番号measNumを順次インクリメントしながら、ステップS1504で楽曲の最後の小節に達したと判定するまで、以下に説明するステップS1505及びS1506の各処理を実行する。
【0125】
今、現在の小節番号measNumと小節線ずれ量仮定値measPhaseに対応する現在評価している小節線位置(現在小節線位置)(単位は「秒」)は、前述の(16)式と同様にして、下記(17)式で示される演算により決定される。
現在小節線位置=measTime[measNum]+measPhase
・・・(17)
【0126】
また、現在の小節番号measNumに対応する小節を16分音符単位の位置に分割したときに、先頭の16分音符単位位置は、上記(17)式で算出される現在小節線位置に等しい。この現在小節線位置をデジタルのサンプル数で示したものをidx[0]とすれば、このidx[0]は、上記(17)式を用いて、下記(18)式で示される演算により算出される。
idx[0]=measTime[measNum]+measPhase
×サンプリング周波数[Hz] ・・・(18)
【0127】
また、小節内の16分音符のサンプル長をidx16とすれば、このidx16は、前述した小節時間measLenを用いて、下記(19)式で示される演算により決定される。
idx16=measLen/16×サンプリング周波数[Hz]
・・・(19)
【0128】
上記(18)式及び(19)式より、現在の小節番号measNumに対応する小節を16分音符単位の位置に分割したidx[0]以外の各サンプル位置idx[i](1≦i≦15)は、下記(20)式で示される演算により決定される。
idx[i]=idx[i-1]+idx16×i ・・・(20)
【0129】
更に、現在の小節番号measNumに対応する小節を16分音符単位の位置に分割した各サンプル位置idx[i](0≦i≦15)をフレーム番号に変換したフレーム位置idx_f[i](0≦i≦15)は、下記(21)式で示される演算により決定される。ただし、fsizeはフレームサイズ(単位は「サンプル」)である。
idx_f[i]=idx[i]/fsize ・・・(21)
【0130】
以上の(18)式から(21)式で示される演算処理により算出されるidx_f[i](0≦i≦15)を用いて、下記(22)式から(25)式の各演算処理が実行される。これらの演算処理では、現在の小節番号measNumに対応する小節を16分音符単位の位置に分割した各フレーム位置で抽出されるビートレベルBL1、BL2、BL3、及びBL4に基づいて、小節線ずれ量仮定値measPhaseに対して算出されるその小節内の16分音符単位のビートレベル列が算出される。ここで、BL1、BL2、BL3、及びBL4は夫々、前述した
図8のフローチャートで示される処理により、全帯域、BD帯域、SD帯域、及びコード帯域の各周波数帯域で抽出されるビートレベルである。
{BL1[idx_f[0]],BL1[idx_f[1]],
BL1[idx_f[2]],・・・,BL1[idx_f[15]]}
・・・(22)
{BL2[idx_f[0]],BL2[idx_f[1]],
BL2[idx_f[2]],・・・,BL2[idx_f[15]]}
・・・(23)
{BL3[idx_f[0]],BL3[idx_f[1]],
BL3[idx_f[2]],・・・,BL3[idx_f[15]]}
・・・(24)
{BL4[idx_f[0]],BL4[idx_f[1]],
BL4[idx_f[2]],・・・,BL4[idx_f[15]]}
・・・(25)
【0131】
一方、周波数帯域(全帯域、BD帯域、SD帯域、及びコード帯域)の夫々に対応して、夫々が例えば下記(26)式に例示されるような、16分音符で16音符分即ち1小節分のビートを表したビートパターンが用意される。
{1,0.1,0.3,0.1,
0.5,0.1,0.3,0.1,
0.7,0.1,0.3,0.1,
0.3,0.1,0.3,0.1} ・・・(26)
上記(26)式において、夫々の行に対応する16分音符で4音符分の4つずつの数字は、例えば4拍子の場合の各拍を構成する16分音符×4音符のビートの強さを示している。これらのビートの強さは、最大値が1になるように正規化されている。
【0132】
例えば、(26)式の第1行目の4つの数字は、小節内の第1拍目に対応している。その第1拍目において、最初の数字「1」は、第1拍目の16分音符分解能の1番目(先頭)において、最大ビートが刻まれることを示している。それに続く3つの数字「0.1」「0.3」「0.1」は、第1拍目の16分音符分解能の2番目、3番目、4番目において、非常に小さな振幅のビートが刻まれることを示している。
【0133】
また例えば、(26)式の第3行目の4つの数字は、小節内の第3拍目に対応している。その第3拍目において、最初の数字「0.7」は、第3拍目の16分音符分解能の1番目(先頭)において、大きな振幅のビートが刻まれることを示している。この値は、第1拍目に次いで大きな振幅のビートとなっている。即ち、この例では、第1拍目と第3拍目が、いわゆる強拍に対応していることがわかる。
【0134】
一方例えば、小節内の第2拍目、第4拍目に対応する(26)式の第2行目及び第4行目の16分音符分解能の1番目(先頭)の値は夫々、「0.5」及び「0.3」という比較的小さな振幅のビートとなっており、この例では、第2拍目と第4拍目が、いわゆる弱拍に対応していることがわかる。
【0135】
本実施形態では、上記(26)式に例示されるようなビートパターンが、4つの周波数帯域(全帯域、BD帯域、SD帯域、及びコード帯域)の夫々に対応して、全部で4パターン用意される。
【0136】
その後、ステップS1505において、現在の小節番号measNumに対応する現在の小節で、各周波数帯域(全帯域、BD帯域、SD帯域、及びコード帯域)に対応して前述の(22)式から(25)式で示されるように算出された16分音符単位の各ビートレベル列の夫々について、(26)式の形式で用意された4つのビートパターンの夫々に対して、最小二乗誤差が計算される。具体的には、周波数帯域毎に、その周波数帯域に対して(22)式から(25)式の何れかにより算出されたビートレベル列とその周波数帯域に対して用意されたビートパターンの各16分音符単位のデータの差を二乗した値を16個分加算したものが、その周波数帯域に対する最小二乗誤差として計算される。
【0137】
そして、ステップS1505において、周波数帯域毎に上述のようにして計算された最小二乗誤差が、4つの周波数帯域分累算されて、その累算結果が変数doVに格納される。
【0138】
その後、ステップS1506において、ステップS1505にて現在の小節番号measNumが示す小節に対して計算された最小二乗誤差doVが、楽曲全体の最小二乗誤差累算値を表す変数doValに累算される。
【0139】
以上のステップS1505及びS1506の各処理が、楽曲全体の小節にわたって実行されることにより、ステップS1504で楽曲の末端の小節が処理されたと判定された後、ステップS1508において、上記処理により算出された現在の小節線ずれ量仮定値measPhaseに対応する楽曲全体の最小二乗誤差累算値doValが、現在までに得られている誤差最小値min(初期値はステップS1501で大きな値に設定されている)よりも小さいか否かが判定される。
【0140】
ステップS1508の判定がYESならば、ステップS1504からS1507の一連の処理により今回算出された現在の小節線ずれ量仮定値measPhaseに対応する楽曲全体の最小二乗誤差累算値doValが、新たな誤差最小値minに設定される。それと共に、今回の小節線ずれ量仮定値measPhaseが新たな小節線ずれ量最適値bestPhaseに設定される。
【0141】
以上の制御処理が、小節線ずれ量仮定値measPhaseが順次更新されながら繰返し実行されることにより、ステップS1502の判定がYESとなった時点で、最終的な小節線ずれ量最適値bestPhaseが算出される。そして、この小節線ずれ量最適値bestPhaseを用いて、前述した(16)式により、各小節番号measNumに対応する小節線位置が決定される。
【0142】
図15に関する上記説明では、前述した(22)式から(25)式で示される演算により算出された小節内の16分音符単位のビートレベル列が使用されたが、小節を16分音符単位で分割した各小範囲毎にビートレベル値を累算して得られる16分音符単位のビートレベル列を使用することで、より安定した小節線位置特定処理を実行することができる。
【0143】
以上説明した実施形態において、
図11のステップS1106の重み付き平均処理で、重み係数A、B、C、及びDの組合せを変えながら、相関が最も高い結果を採用するように制御してもよい。
【0144】
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
楽曲データの或るタイミングにおける第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、重み付きビートレベルを取得し、
取得された前記重み付きビートレベルの自己相関値が高い複数のタイミングを取得し、
取得された前記複数のタイミングに基づいて、拍子を決定する、
拍子決定方法。
(付記2)
前記重み付きビートレベルに基づいて、前記楽曲データの或るタイミングから設定時間長の比較元と、前記或るタイミングから離れたタイミングから前記設定時間長の比較先を取得し、
取得された前記比較元と前記比較先に基づいて、前記自己相関を計算する、
付記1に記載の拍子決定方法。
(付記3)
前記第1ビートレベルは、前記第1パワーレベルの変動がマイナスからプラスに転じた第1タイミングのパワーレベルと、前記変動が次にプラスからマイナスに転じた第2タイミングのパワーレベルとのレベル差を含み、
前記レベル差を前記第2タイミングにおける前記第1ビートレベルとして取得する、
付記1又は2に記載の拍子決定方法。
(付記4)
前記重み付きビートレベルに基づいて、前記自己相関値のヒストグラムを生成し、
生成された前記ヒストグラムに基づいて、前記拍子を決定する、
付記1乃至3の何れかに記載の拍子決定方法。
(付記5)
前記ヒストグラムから抽出した、値が上位所定数個までの相関値のヒストグラムのピークの夫々が、3拍子、4拍子又は5拍子のいずれの拍子の倍数関係にあるかを判定し、
判定結果に基づいて、前記拍子を決定する、
付記4に記載の拍子決定方法。
(付記6)
前記第1周波数帯域は、全帯域であり、
前記第2周波数帯域は、バスドラム帯域、スネアドラム帯域又はコード帯域の何れかを含む、
付記1乃至5の何れかに記載の拍子決定方法。
(付記7)
楽曲データの或るタイミングにおける第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、重み付きビートレベルを取得し、
取得された前記重み付きビートレベルの自己相関値が高い複数のタイミングを取得し、
取得された前記複数のタイミングに基づいて、拍子を決定する、
処理を実行する拍子決定装置。
(付記8)
コンピュータが、
楽曲データの或るタイミングにおける第1周波数帯域の第1パワーレベルに応じた第1ビートレベルと、前記第1周波数帯域に含まれる第2周波数帯域の第2パワーレベルに応じた第2ビートレベルに基づいて、重み付きビートレベルを取得し、
取得された前記重み付きビートレベルの自己相関値が高い複数のタイミングを取得し、
取得された前記複数のタイミングに基づいて、拍子を決定する、
処理を実行するためのプログラム。
【符号の説明】
【0145】
101 CPU
102 ROM
103 RAM
104 入力部
105 表示部
106 出力部
201、202、203 パワー変動
301 パワー変動波形
302 ビートレベル変動波形
401 重み付き平均ビートレベル変動波形
402 比較元データ
403 比較先データ
501、601 相関値のピーク
700 相関値のヒストグラム
701、702 相関値のヒストグラムのピーク