IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ カシオ計算機株式会社の特許一覧

<>
  • 特許-テンポ検出装置、方法、及びプログラム 図1
  • 特許-テンポ検出装置、方法、及びプログラム 図2
  • 特許-テンポ検出装置、方法、及びプログラム 図3
  • 特許-テンポ検出装置、方法、及びプログラム 図4
  • 特許-テンポ検出装置、方法、及びプログラム 図5
  • 特許-テンポ検出装置、方法、及びプログラム 図6
  • 特許-テンポ検出装置、方法、及びプログラム 図7
  • 特許-テンポ検出装置、方法、及びプログラム 図8
  • 特許-テンポ検出装置、方法、及びプログラム 図9
  • 特許-テンポ検出装置、方法、及びプログラム 図10
  • 特許-テンポ検出装置、方法、及びプログラム 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-08
(45)【発行日】2024-07-17
(54)【発明の名称】テンポ検出装置、方法、及びプログラム
(51)【国際特許分類】
   G10G 3/04 20060101AFI20240709BHJP
【FI】
G10G3/04
【請求項の数】 7
(21)【出願番号】P 2020055114
(22)【出願日】2020-03-25
(65)【公開番号】P2021156975
(43)【公開日】2021-10-07
【審査請求日】2023-03-15
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(72)【発明者】
【氏名】田畑 裕二
【審査官】菊池 智紀
(56)【参考文献】
【文献】特開2014-112128(JP,A)
【文献】特表2013-508767(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10G 1/00-7/02
G10H 1/00-7/12
(57)【特許請求の範囲】
【請求項1】
楽曲の波形データから波形強度の分布を示す楽曲波形強度データを取得し、
前記楽曲波形強度データに基づく前記楽曲の所定の小節分の時間長でのビート波形データを取得し、
各テンポ値での前記ビート波形データの基本自己相関値を算出し、
前記楽曲に対応する拍子を指定し、
前記基本自己相関値前記指定された拍子に基づいて決められる倍率で変更した計算用自己相関値を算出し、
前記基本自己相関値に対して前記計算用自己相関値を重み付け加算した検出用自己相関値が最大となるテンポ値を前記楽曲のテンポとして検出する、
制御部を備え
前記指定された拍子をXとした場合に、前記倍率はX/(X-1)倍及びX/(X+1)倍であり、
前記制御部は、前記重み付け加算として、前記基本自己相関値をX/(X-1)倍した前記計算用自己相関値と、前記基本自己相関値をX/(X+1)倍した前記計算用自己相関値と、を前記基本自己相関値に対して重み付け加算して前記検出用自己相関値を算出する、テンポ検出装置。
【請求項2】
請求項に記載のテンポ検出装置において、
前記制御部は更に、前記重み付け加算を行う場合の重み値を、前記楽曲の波形データの強度により調整するテンポ検出装置。
【請求項3】
請求項1又は請求項2に記載のテンポ検出装置において、
前記制御部は更に、前記楽曲の波形データから取得した前記楽曲波形強度データに対してカットオフ周波数の高いローパスフィルタ処理を行った結果としてエンベロープ波形データを取得し、取得した前記エンベロープ波形データに対してカットオフ周波数の低いローパスフィルタ処理を行った結果を前記エンベロープ波形データから減算することでビート波形データを取得し、各テンポ値での前記ビート波形データ記基本自己相関値を算出するテンポ検出装置。
【請求項4】
請求項1から請求項3の何れか一項に記載のテンポ検出装置において、
前記制御部は更に、前記重み付け加算を行う場合の重み値を、前記ビート波形データの強度により調整するテンポ検出装置。
【請求項5】
請求項1から請求項4の何れか一項に記載のテンポ検出装置において、
前記制御部は更に、
検出された前記楽曲のテンポに基づいて、1小節の1/3時間長及び1小節の1/4時間長を含む複数の時間長を指定し、
前記ビート波形データの微分値に基づく波形を、前記指定されたそれぞれの時間長で周期的に合成することで複数のタイミングレベル値を算出し、
前記タイミングレベル値の分散が最大となる時間長に対応する拍子を、前記楽曲の拍子として検出するテンポ検出装置。
【請求項6】
楽曲の波形データから波形強度の分布を示す楽曲波形強度データを取得し、
前記楽曲波形強度データに基づく前記楽曲の所定の小節分の時間長でのビート波形データを取得し、
各テンポ値での前記ビート波形データの基本自己相関値を算出し、
前記楽曲に対応する拍子を指定し、
前記基本自己相関値を、前記指定された拍子をXとした場合に、X/(X-1)倍及びX/(X+1)倍の倍率で変更した計算用自己相関値を算出し、
前記基本自己相関値に対して、前記基本自己相関値をX/(X-1)倍した前記計算用自己相関値と、前記基本自己相関値をX/(X+1)倍した前記計算用自己相関値と、を重み付け加算した検出用自己相関値が最大となるテンポ値を前記楽曲のテンポとして検出する、
テンポ検出方法。
【請求項7】
楽曲の波形データから振幅強度のエンベロープを取得し、
前記エンベロープに基づく前記楽曲の所定の小節分の時間長でのビート波形データを取得し、
各テンポ値での前記ビート波形データの基本自己相関値を算出し、
前記楽曲に対応する拍子を指定し、
前記基本自己相関値を、前記指定された拍子をXとした場合に、X/(X-1)倍及びX/(X+1)倍の倍率で変更した計算用自己相関値を算出し、
前記基本自己相関値に対して、前記基本自己相関値をX/(X-1)倍した前記計算用自己相関値と、前記基本自己相関値をX/(X+1)倍した前記計算用自己相関値と、を重み付け加算した検出用自己相関値が最大となるテンポ値を前記楽曲のテンポとして検出する、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、楽曲の波形データからテンポを検出する技術に関する。
【背景技術】
【0002】
楽曲の波形データから楽曲のテンポを検出する場合に、楽曲の波形データに係る入力データに対する自己相関演算により算出された周期性に基づいて、楽曲のテンポを判定する技術が知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2002-116754号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記の従来技術においては、楽曲に特有の強度変化を含む場合などでは正確にテンポを検出するのが難しかった。
【0005】
そこで、本発明は、テンポをより正確に検出することを目的とする。
【課題を解決するための手段】
【0006】
態様の一例では、楽曲の波形データから波形強度の分布を示す楽曲波形強度データを取得し、楽曲波形強度データに基づく前記楽曲の所定の小節分の時間長でのビート波形データを取得し、各テンポ値での前記ビート波形データの基本自己相関値を算出し、楽曲に対応する拍子を指定し、基本自己相関値指定された拍子に基づいて決められる倍率で変更した計算用自己相関値を算出し、基本自己相関値に対して計算用自己相関値を重み付け加算した検出用自己相関値が最大となるテンポ値を楽曲のテンポとして検出する、制御部を備える。
【発明の効果】
【0007】
本発明によれば、テンポをより正確に検出することが可能となる。
【図面の簡単な説明】
【0008】
図1】テンポ検出方法の処理ブロック図である。
図2】ビート波形データ、自己相関値、及び重み付け加算した自己相関値の例を示すグラフ図である。
図3】タイミング同期方法の処理ブロック図である。
図4】3拍子の楽曲例におけるタイミングレベルの例を示すグラフ図である。
図5】4拍子の楽曲例におけるタイミングレベルの例を示すグラフ図である。
図6】テンポ検出及びタイミング同期の処理を実行するコンピュータのハードウェア構成例を示すブロック図である。
図7】テンポ検出/タイミング同期処理の例を示すメインフローチャートである。
図8】テンポ検出処理の詳細例を示すフローチャートである。
図9】テンポ決定処理の詳細例を示すフローチャートである。
図10】タイミング同期処理及び拍子検出処理の詳細例を示すフローチャートである。
図11】同期オフセット時間検出処理の詳細例を示すフローチャートである。
【発明を実施するための形態】
【0009】
以下、本発明を実施するためのテンポ検出方法およびタイミング同期方法の実施形態について図面を参照しながら詳細に説明する。図1は、本実施形態におけるテンポ検出方法の処理ブロック図である。テンポ検出方法は、
ステップS101:音声入力処理
ステップS102:エンベロープ検出処理
ステップS103:ビート波形検出処理
ステップS104:ビート強度検出処理
ステップS105:自己相関検出処理
ステップS106:テンポ決定処理
から構成される。
【0010】
まず、ステップS101の音声入力処理は、マイク入力装置等から入力した音声を、一定のサンプリング周期(例えば、44.1KHz(キロヘルツ))でA/D(アナログ/デジタル)変換し、楽曲波形データを取得する。
【0011】
次に、ステップS102のエンベロープ検出処理は、ステップS101の音声入力処理が取得した楽曲波形データを、一定のサンプル数(例えば、128サンプル)毎にブロック分割し、各ブロック毎に楽曲波形データの絶対値の平均である楽曲波形強度を算出する。更に、エンベロープ検出処理は、算出した楽曲波形強度に、弱い(カットオフ周波数の高い)ローパスフィルタ処理を実行することで、そのローパスフィルタ処理の演算結果として、エンベロープ波形を取得する。
【0012】
次に、ステップS103のビート波形検出処理は、ステップS102のエンベロープ検出処理が算出した楽曲波形強度に対して、強い(カットオフ周波数の低い)ローパスフィルタ処理を実行し、サンプリング時刻が一致するサンプル同士で、エンベロープ波形から上記強いローパスフィルタ処理の演算結果を減算することで、その減算結果としてビート波形を取得する。
【0013】
図2(a)は、ビート波形の例を示すグラフ図である。棒グラフ201の部分がエンベロープ波形である。折れ線グラフ202の部分が楽曲波形強度に強いローパスフィルタ処理を実行した結果を示しており、折れ線グラフ203がエンベロープ波形201から上記強いローパスフィルタ処理の結果202を対応するサンプル同士で減算して得られたビート波形(2倍拡大)である。ビート波形はエンベロープ波形からテンポと相関の低い定常波部が取り除かれた結果となっていることが理解される。
【0014】
ステップS104のビート強度検出処理は、ステップS103で算出されたビート波形の絶対値にローパスフィルタ処理を実行し、その処理結果としてビート強度を算出する。
【0015】
ここで、楽曲のテンポを、1分間あたりの拍数の単位:bpm(beats per minute)で表し、「テンポは60bpmである。」というような言い方をする。これは、1分間に60拍がカウントされる楽曲のテンポ(速さ)を示す。そして、図1において、ステップS105の自己相関検出処理は、テンポのbpm値から算出される楽曲の1小節分の時間長でのビート波形の自己相関値(基本自己相関値)を算出する。例えば、楽曲を4拍子とし、テンポ値をBPMとすると、1小節分の時間長TL(秒)は、
TL=60×4/BPM
となる。そして、楽曲の波形強度を算出する際の1ブロックのサンプル数をSPBとし、サンプリング周期(サンプル数/秒)をSPRとすると、ビート波形での1小節分のブロック数BLは、
BL=SPR×TL/SPB
として算出される。そして、ステップS105では、ビート波形のBL間隔での自己相関値が算出される。
【0016】
図2(b)は、ステップS105で算出される自己相関値の例を示すグラフ図で、テンポ値130bpmのダンスミュージック曲の解析結果例である。横軸はbpm値で、検出範囲を60bpmから180bpmとしている。楽曲本来のテンポ値130bpm(4拍時間長)の位置204の他に、104bpm(5拍時間長)や173bpm(3拍時間長)等の位置にも強い相関が現れており、173bpmの位置205がこのグラフ図における自己相関値の最大値となってしまい、このままでは正確にテンポ検出することはできない。
【0017】
そこで、図1のステップS106のテンポ決定処理では、ステップS105の自己相関検出処理にて算出された各bpm位置の自己相関値に4/5倍bpm及び4/3倍bpmの自己相関値(計算用自己相関値)を重み付け加算し、この重み付け加算の結果得られる自己相関値(検出用自己相関値)が最大となるbpm値がテンポとして決定される。
【0018】
いま、あるbpm位置での自己相関値をACR[bpm]とすると、重み付け加算された自己相関値WACR[bpm]は、
計算例1:WACR[bpm]=ACR[bpm]
+((ACR[bpm×4/5]
+ACR[bpm×4/3])/2
-ACR[bpm])×WCF
計算例2:WACR[bpm]=ACR[bpm]
+((ACR[bpm×4/5]
+ACR[bpm×4/3])/2×WCF
となる。なお、bpm×4/5がbpmの検出範囲の下限未満の場合は、
WACR[bpm]=ACR[bpm]
+(ACR[bpm×4/3]
-ACR[bpm])×WCF
とし、bpm×4/3がbpmの検出範囲の上限を超える場合は、
WACR[bpm]=ACR[bpm]
+(ACR[bpm×4/5]
-ACR[bpm])×WCF
とする。
ここで、WCFは、ステップS104で算出されたビート強度に基づいて決定される0.0以上0.5以下の重み付け係数である。例えば、ビート強度(以下、この値を「BS」と呼ぶ)が0から4095の値を取るとすると、
BSが1024以下の場合は、WCF=0.0
BSが3096以上の場合は、WCF=0.5
BSが上記以外の場合は、WCF=(BS-1024)/4096
などとしてよい。
【0019】
図2(c)は、ステップS106により重み付け加算された自己相関値の例を示すグラフ図であり、図2(b)の場合と同じ楽曲の解析結果例である。4/5倍bpm位置(5拍時間長)や4/3倍bpm位置(3拍時間長)での自己相関値が抑えられ、楽曲本来のテンポ値130bpm(4拍時間長)の位置206と自己相関値が最大値をとる位置207とが一致し、正確にテンポ検出が行われたことが理解される。
【0020】
上述したテンポ決定処理は、4拍子を前提として4/5倍bpm位置及び4/3倍bpm位置の自己相関値を重み付け加算したが、後述のタイミング同期方法における拍子検出処理にて3拍子と判定された場合は、3/4倍bpm位置及び3/2倍bpm位置の自己相関値が重み付け加算される。
【0021】
図3は、本実施形態におけるタイミング同期方法の処理ブロック図である。タイミング同期方法は、
ステップS301:拍子検出処理(1拍時間タイミングレベル算出)
ステップS302:同期オフセット時間検出処理(1小節タイミングレベル算出)
から構成される。
【0022】
まず、ステップS301の拍子検出処理は、図1のテンポ検出処理により得られた1小節の1/3(3拍子)および1/4(4拍子)の時間長での繰返しで、タイミングレベルを検出する。
【0023】
ステップS301で、タイミングレベルは、図1のステップS103のビート波形検出処理で検出されたビート波形(例えば、図2(a)の203)の現在値から前回値を減算して得られる値が、負の場合は値0、正の場合はその値に対して1拍時間分解能毎にローパスフィルタをかけて得られる値である。
【0024】
ステップS301で、例えば1拍の時間分解能を96とすると、1/3時間長(3拍子)では1小節時間長が96×3=288のタイミングに分解され、1/4時間長(4拍子)では1小節時間長が96×4=384のタイミングに分解されて、1拍の時間分解能(96)毎の各タイミングレベル値が算出される。
【0025】
そして、ステップS301において、得られたタイミングレベルの最大値と最小値との差の大小が比較され、拍子が決定される。つまり、1/3時間長のタイミングレベル値の最大値-最小値の方が、1/4時間長のタイミングレベル値の最大値-最小値よりも大きい場合は楽曲は3拍子であると決定される。逆に、1/4時間長のタイミングレベル値の最大値-最小値の方が、1/3時間長のタイミングレベル値の最大値-最小値よりも大きい場合は楽曲は4拍子であると決定される。
【0026】
なお、ステップS301の拍子検出処理は、上記タイミングレベルの偏差によって楽曲の拍子を決定してもよい。更に、上記と同様の方法で、5拍子、7拍子等も検出可能である。
【0027】
図4は、3拍子の楽曲例に対して、図3のステップS301の拍子検出処理で検出されたタイミングレベルの例を示すグラフ図である。図4(a)は、1小節長、図4(b)は1/2小節長、図4(c)は1/3小節長、図4(d)は1/4小節長である。図4(c)に示される1小節の1/3時間長におけるタイミングレベル値の最大値-最小値は、図4(d)に示される1/4時間長におけるタイミングレベル値の最大値-最小値よりも大きいことから、楽曲は3拍子であると判定され、正しく楽曲の拍子が検出される。
【0028】
図5は、4拍子の楽曲例に対して、図3のステップS301の拍子検出処理で検出されたタイミングレベルの例を示すグラフ図である。図5(a)は、1小節長、図5(b)は1/2小節長、図5(c)は1/3小節長、図5(d)は1/4小節長である。図5(d)に示される1小節の1/4時間長におけるタイミングレベル値の最大値-最小値は、図5(c)に示される1/3時間長におけるタイミングレベル値の最大値-最小値よりも大きいことから、楽曲は4拍子であると判定され、正しく楽曲の拍子が検出される。
【0029】
図3の説明に戻り、ステップS302の同期オフセット時間検出処理は、図1のテンポ検出処理により検出されたテンポbpm値により算出される1小節時間長(図1のステップS104の説明を参照)毎にタイミングレベルを検出する。
【0030】
ステップS302において、例えば1拍の分解能を96とすると、図3のステップS301の拍子検出処理の結果が3拍子の場合には、1小節時間長が96×3=288のタイミングに分解され、その結果が4拍子の場合には、1小節時間長が96×4=384のタイミングに分解されて、各タイミング毎のタイミングレベル値が算出される。
【0031】
そして、ステップS302において、上述のようにして得られたタイミングレベル値が最大値となるタイミングが、同期オフセット時間として検出される。ここで、同期オフセット時間は1小節時間長の繰返しで処理されるタイミングレベル検出における、楽曲本来の1小節先頭の開始時間である。
【0032】
また、図3のステップS301の拍子検出処理で、楽曲が4拍子であると判定された場合、ステップS302の同期オフセット時間検出処理は、1小節の1/2時間長でタイミングレベルが検出され、そのレベル値が最大値となるタイミングT1と、T1から更に1小節の1/2時間を加算したタイミングT2における1小節時間長でのタイミングレベル値を比較し、大きい方のタイミングレベル値を同期オフセット時間としてもよい。このようなアルゴリズムにより、4拍裏等に定常的に入るアクセントから同期オフセット時間を誤検知する可能性を軽減することができる。
【0033】
上述のステップS302の同期オフセット時間検出処理では、同期単位が1小節時間長とされたが、同期単位が1拍時間長とされる場合は、ステップS301の拍子検出処理における1拍時間長でタイミングレベル値が最大となるタイミングが同期オフセット時間とされてよい。
【0034】
図3の拍/小節のタイミング同期方法は図1のテンポ検出処理で検出された1小節の時間長に基づいて処理を実行するため、検出されたテンポが変化した場合、処理がやり直しとなることにより、同期が完了するまでに時間がかかってしまうという問題がある。
【0035】
このため、図3のテンポ検出処理のステップS103のビート波形検出処理にて得られるビート波形を、検出可能とする最低テンポ値のn(nは2以上の整数)小節時間分バッファリングしておき、テンポが変化したタイミングで新しいテンポのn小節時間分の処理を、バッファリングしておいたデータを用いて遡って実行し直すことにより、速やかに同期を再開することができるようになる。
【0036】
図3のステップS301の拍子検出処理にて楽曲が3拍子であると判定された場合、本実施形態における図1のテンポ検出方法の自己相関検出処理の検出単位は4拍子を前提とするテンポbpm値であるため、検出bpm値を3/4倍して報告するものとする。
【0037】
図6は、図1のテンポ検出方法の処理ブロック及び図3のタイミング同期方法の処理ブロックを実現可能なコンピュータのハードウェア構成の一例を示す図である。このコンピュータは、通常のパーソナルコンピュータのほか、スマートフォン、タブレット端末、デジタルカメラなどを含む。図6に示されるコンピュータは、CPU(Central Processing Unit)601、メモリ602、入力装置603、出力装置604、補助情報記憶装置605、可搬型記録媒体609が挿入される媒体駆動装置606、及びネットワーク接続装置607を有する。これらの構成要素は、バス608により相互に接続されている。図6に示される構成は図1のテンポ検出方法の処理ブロック及び図3のタイミング同期方法の処理ブロックを実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【0038】
メモリ602は、例えば、Read Only Memory(ROM)、Random Access Memory(RAM)、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。
【0039】
CPU(プロセッサ)601(制御部)は、例えば、メモリ602を利用して、図1のテンポ検出方法の処理ブロック及び図3のタイミング同期方法の処理ブロックに用いられる例えば図8乃至図11のフローチャートの処理に対応するプログラムを実行することにより、図1及び図2の各処理ブロックとして動作する。
【0040】
入力装置603は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示又は情報の入力に用いられる。出力装置604は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問合せ又は処理結果の出力に用いられる。
【0041】
補助情報記憶装置605は、例えば、ハードディスク記憶装置、磁気ディスク記憶装置、光ディスク装置、光磁気ディスク装置、テープ装置、又は半導体記憶装置である。図1のテンポ検出方法の処理ブロック及び図3のタイミング同期方法の処理ブロックは、補助情報記憶装置605に図1及び図3の各処理ブロックに用いられる例えば図7乃至図11のフローチャートの処理を実行するプログラム及びデータを格納しておき、それらをメモリ602にロードして使用することができる。
【0042】
媒体駆動装置606は、可搬型記録媒体609を駆動し、その記録内容にアクセスする。可搬型記録媒体609は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体609は、Compact Disk Read Only Memory(CD-ROM)、Digital Versatile Disk(DVD)、Universal Serial Bus(USB)メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体609に上述のプログラム及びデータを格納しておき、メモリ602にロードして使用することができる。
【0043】
このように、上述のプログラム及びデータを格納するコンピュータ読取り可能な記録媒体は、メモリ602、補助情報記憶装置605、又は可搬型記録媒体609のような、物理的な(非一時的な)記録媒体である。
【0044】
ネットワーク接続装置607は、例えばLocal Area Network(LAN)等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェースである。図6のコンピュータは、上述のプログラム又はデータを外部の装置からネットワーク接続装置607を介して受信し、それらをメモリ602にロードして使用することができる。
【0045】
なお、図1及び図3の各処理ブロックが図6の全ての構成要素を含む必要はなく、用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザからの指示又は情報を入力する必要がない場合は、入力装置603が省略されてもよい。可搬型記録媒体609又は通信ネットワークを利用しない場合は、媒体駆動装置606又はネットワーク接続装置607が省略されてもよい。
【0046】
図7は、図6の構成例を有するコンピュータによって実行される、テンポ検出/タイミング同期処理の例を示すメインフローチャートである。この処理は、図6において、CPU601が、補助情報記憶装置605などに記憶されたテンポ検出/タイミング同期処理プログラムをメモリ602にロードして実行する処理である。以下、随時図6を参照して説明する。
【0047】
図7において、CPU601はまず、テンポ変数値を0(未定)に、拍子変数値を4拍子を示す値4に、また、同期オフセット時間変数値を0に、それぞれ初期設定する(ステップS701)。これらの変数値は、メモリ602に記憶される。
【0048】
その後、CPU601は、ステップS702からステップS705の一連の処理を繰り返し実行する。
【0049】
上記一連の処理において、CPU601はまず、テンポ検出処理を実行し、メモリ602に記憶されているテンポ変数に、未定値0、或いは、60bpmから180bpmの間の値を算出して設定する(ステップS702)。この処理の詳細例については、図8を用いて後述する。
【0050】
上記一連の処理において、次にCPU601は、ユーザが入力装置603を構成する一部の特には図示しないスイッチなどにより、テンポ検出/タイミング同期処理の終了を指示したか否かを判定する(ステップS703)。
【0051】
ステップS703の判定がYESならば、CPU601は、図7のメインフローチャートで示されるテンポ検出/タイミング同期処理を終了し、特には図示しない上位に制御プログラムの処理に戻る。
【0052】
ステップS703の判定がNOならば、CPU601は、ステップS702のテンポ検出処理により検出されたメモリ602上のテンポ変数値が0でないか否かを判定する(ステップS704)。
【0053】
テンポ変数値が未定値0(ステップS704の判定がNO)である場合には、CPU601は、制御をステップS702に戻して前述した一連の処理の繰返しを続行する。
【0054】
テンポ変数値が未定値0以外(ステップS704の判定がYES)である場合には、CPU601は、タイミング同期処理を実行することにより、メモリ602に記憶されている拍子変数に3拍子、4拍子、又は5拍子の何れかを示す値3、4、又は5を取得し、また、メモリ602に記憶されている同期オフセット時間変数に、値0からn(nは自然数)の何れかを算出して設定する。
【0055】
その後、CPU601は、制御をステップS702に戻して前述した一連の処理の繰返しを続行する。
【0056】
図8は、図7のステップS702のテンポ検出処理の詳細例を示すフローチャートである。ここでは、CPU601は、図1の各処理ブロックで説明したのと同様のテンポ検出処理を実行する。
【0057】
即ちまず、CPU601は、図1のステップS101と同様の、音声入力処理を実行する(ステップS801)。ステップS801の処理において、CPU601は、ユーザが入力装置603の一部を構成するマイク入力装置等から入力した音声を、同じく入力装置603の一部を構成する特には図示しないA/D(アナログ/デジタル)コンバータによって、一定のサンプリング周期(例えば、44.1KHz(キロヘルツ))でA/D変換し、楽曲波形データを取得し、メモリ602に記憶させる。
【0058】
次に、CPU601は、図1のステップS102と同様の、エンベロープ検出処理を実行する(ステップS802)。ステップS802の処理において、CPU601は、ステップS801の音声入力処理が取得しメモリ602に記憶させた楽曲波形データを、一定のサンプル数(例えば、128サンプル)毎にブロック分割し、各ブロック毎に楽曲波形データの絶対値の平均である楽曲波形強度データを順次算出し、メモリ602に記憶させる。更に、CPU601は、算出しメモリ602に記憶させた楽曲波形強度データを順次読み出しながら、それに対して弱い(カットオフ周波数の高い)ローパスフィルタ処理を実行し、そのローパスフィルタ処理の演算結果として、エンベロープ波形データを順次取得し、メモリ602に記憶させる。
【0059】
次に、CPU601は、ステップS103と同様のビート波形検出処理を実行する(ステップS803)。ステップS803の処理において、CPU601は、ステップS802のエンベロープ検出処理で算出しメモリ602に記憶させた楽曲波形強度データを順次読出しながら、それに対して強い(カットオフ周波数の低い)ローパスフィルタ処理を実行し、サンプリング時刻が一致するサンプル同士で、メモリ602から順次読み出したエンベロープ波形データのサンプルから上記強いローパスフィルタ処理の演算結果データのサンプルを減算することで、その減算結果としてビート波形データを順次取得し、メモリ602に記憶させる。
【0060】
続いて、CPU601は、図1のステップS104と同様の、ビート強度検出処理を実行する(ステップS804)。ステップS804の処理において、CPU601は、ステップS803で算出しメモリ602に記憶させたビート波形データを順次読み出し、その各サンプルの絶対値を算出し、その絶対値にローパスフィルタ処理を実行し、その処理結果としてビート強度データを算出し、メモリ602に記憶させる。
【0061】
続いて、CPU601は、図1のステップS105と同様の、自己相関検出処理を実行する(ステップS805)。ステップS805の処理において、CPU601は、想定されるテンポ範囲の各bpm値から算出される楽曲の1小節分の時間長でのビート波形の自己相関値を算出する。
【0062】
そして、CPU601は、図1のステップS106と同様の、テンポ決定処理を実行する(ステップS806)。ステップS806の処理の後、CPU601は、図8のフローチャートで示される図7のステップS702のテンポ検出処理を終了する。
【0063】
図9は、図8のステップS906のテンポ決定処理の詳細例を示すフローチャートである。
【0064】
図9において、まずCPU601は、ユーザが入力装置603の一部を構成するスイッチによって3拍子を指定することにより、メモリ602に設定された拍子変数の値が、3であるか否かを判定する(ステップS901)。
【0065】
ステップS901の判定がYESならば、CPU601は、図8のステップS805の自己相関検出処理にて算出されメモリ602に記憶されている各bpm位置の自己相関値に、3/2倍bpm及び3/4倍のbpmの自己相関値を重み付け加算する(ステップS902)。
【0066】
ステップS901の判定がNOならば、CPU601は、ユーザが入力装置603の一部を構成するスイッチによって5拍子を指定することにより、メモリ602に設定された拍子変数の値が、5であるか否かを判定する(ステップS903)。
【0067】
ステップS903の判定がYESならば、CPU601は、図8のステップS805の自己相関検出処理にて算出されメモリ602に記憶されている各bpm位置の自己相関値に、5/4倍bpm及び5/6倍のbpmの自己相関値を重み付け加算する(ステップS904)。
【0068】
ステップS903の判定がNOならば、ユーザが入力装置603の一部を構成するスイッチによって4拍子を指定することにより、メモリ602に設定された拍子変数の値が4になっている。この場合、CPU601は、図8のステップS805の自己相関検出処理にて算出されメモリ602に記憶されている各bpm位置の自己相関値に、4/3倍bpm及び4/5倍のbpmの自己相関値を重み付け加算する(ステップS905)。
【0069】
ステップS902、S904、又はS905の処理の後、CPU601は、ステップS902、S904、又はS905の処理での重み付け加算の結果得られる自己相関値が最大となるbpm値を検出する(ステップS906)。
【0070】
そして、CPU601は、ステップS906で検出したbpm値を、新たなテンポ値として、メモリ602に記憶されているテンポ変数の値を上記bpm値で置き換えて更新する(ステップS907)。
【0071】
その後、CPU601は、図9のフローチャートで示される図8のステップS806のテンポ決定処理を終了する。
【0072】
図10(a)は、図7のステップS705のタイミング同期処理を示すフローチャートである。このタイミング同期処理において、CPU601はまず、図3のステップS301と同様の拍子検出処理を実行し(ステップS1001)、次に図3のステップS302と同様の同期オフセット時間検出処理を実行し(ステップS1002)、その後、図10のフローチャートで示される図7のステップS705の処理を終了する。
【0073】
図10(b)は、図10(a)の拍子検出処理の詳細例を示すフローチャートである。図10(b)において、CPU601はまず、図3のステップS301で説明したようにして、図7のステップS702のテンポ検出処理により得られた1小節の1/3(3拍子)の時間長での繰返しで、タイミングレベルを検出し、メモリ602に記憶させる(ステップS1011)。
【0074】
図10(b)において、次にCPU601は、図3のステップS301で説明したようにして、図7のステップS702のテンポ検出処理により得られた1小節の1/4(4拍子)の時間長での繰返しで、タイミングレベルを検出し、メモリ602に記憶させる(ステップS1012)。
【0075】
図10(b)において、次にCPU601は、上記と同様にして、図7のステップS702のテンポ検出処理により得られた1小節の1/5(5拍子)の時間長での繰返しで、タイミングレベルを検出し、メモリ602に記憶させる(ステップS1013)。
【0076】
その後、CPU601は、ステップS1011、S1012、及びS1013で検出されメモリ602に記憶された各タイミングレベル値の偏差(又はステップS301で説明した最大値-最小値)が最も大きいタイミングレベル値が検出されたときの拍子を検出する(ステップS1014)。
【0077】
そして、CPU601は、ステップS1014で検出した拍子の値を、新たな拍子値として、メモリ602に記憶されている拍子変数の値を上記拍子値で置き換えて更新する(ステップS1015)。
【0078】
その後、CPU601は、図10(b)のフローチャートで示される図10(a)のステップS1001の拍子検出処理を終了する。
【0079】
図11は、図10(a)の同期オフセット時間検出処理の詳細例を示すフローチャートである。図11において、CPU601はまず、図3のステップS302で説明したようにして、図7のステップS702のテンポ検出処理により検出されたテンポbpm値により算出される1小節時間長毎にタイミングレベルを検出する(ステップS1101)。
【0080】
次に、CPU601は、図3のステップS302で説明したようにして、ステップS1101で検出されたタイミングレベル値が最大値となるタイミングを、同期オフセット時間として検出する(ステップS1102)。
【0081】
そして、CPU601は、ステップS1102で検出した最大値を、新たな同期オフセット時間として、メモリ602に記憶されている同期オフセット時間変数の値を上記最大値で置き換えて更新する(ステップS1103)。
【0082】
その後、CPU601は、図11のフローチャートで示される図10(a)のステップS1002の同期オフセット時間検出処理を終了する。
【0083】
以上説明した実施形態により、例えばフーリエ変換を用いる方法よりも少ない処理量でテンポ検出および、小節や拍のタイミング同期がより正確に行えるようになり、楽曲に対してリアルタイムにフィルインやテンポ同期エフェクト等を付加することなどが可能となる。
【0084】
以上、開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができる。
【0085】
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
【0086】
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
楽曲の波形データから波形強度の分布を示す楽曲波形強度データを取得し、
前記楽曲波形強度データに基づく自己相関を検出して周期毎の強度を示す基本自己相関値を算出し、
前記楽曲に対応する拍子を指定し、
前記基本自己相関値の周期を前記指定された拍子に基づいて決められる倍率で変更した計算用自己相関値を算出し、
前記基本自己相関値に対して前記計算用自己相関値を重み付け加算した検出用自己相関値が最大となる部分を特定し、
前記特定した部分に対応する周期を前記楽曲のテンポとして検出する、
制御部を備えたテンポ検出装置。
(付記2)
付記1に記載のテンポ検出装置において、
前記指定された拍子をXとした場合に、前記倍率はX/(X-1)倍及びX/(X+1)倍であり、
前記制御部は更に、前記基本自己相関値の周期をX/(X-1)倍した前記計算用自己相関値と、前記基本自己相関値の周期をX/(X+1)倍した前記計算用自己相関値と、を前記基本自己相関値に対して重み付け加算して前記検出用自己相関値を算出するテンポ検出装置。
(付記3)
付記1又は2に記載のテンポ検出装置において、
前記制御部は更に、前記重み付け加算を行う場合の重み値を、前記楽曲の波形データの強度により調整するテンポ検出装置。
(付記4)
付記1乃至3に記載のテンポ検出装置において、
前記制御部は更に、前記楽曲の波形データから取得した前記楽曲波形強度データに対してカットオフ周波数の高いローパスフィルタ処理を行った結果としてエンベロープ波形データを取得し、取得した前記エンベロープ波形データに対してカットオフ周波数の低いローパスフィルタ処理を行った結果を前記エンベロープ波形データから減算することでビート波形を取得し、前記ビート波形の自己相関を検出して前記基本自己相関値を算出するテンポ検出装置。
(付記5)
付記1乃至4に記載のテンポ検出装置において、
前記制御部は更に、前記重み付け加算を行う場合の重み値を、前記ビート波形の強度により調整するテンポ検出装置。
(付記6)
付記1乃至5に記載のテンポ検出装置において、
前記制御部は更に、
検出された前記楽曲のテンポに基づいて、1小節の1/3時間長及び1小節の1/4時間長を含む複数の時間長を指定し、
前記ビート波形の微分値に基づく波形を、前記指定されたそれぞれの時間長で周期的に合成することで複数のタイミングレベル値を算出し、
前記タイミングレベル値の分散が最大となる時間長に対応する拍子を、前記楽曲の拍子として検出するテンポ検出装置。
(付記7)
楽曲の波形データから波形強度の分布を示す楽曲波形強度データを取得し、
前記楽曲波形強度データに基づく自己相関を検出して周期毎の強度を示す基本自己相関値を算出し、
前記楽曲に対応する拍子を指定し、
前記基本自己相関値の周期を前記指定された拍子に基づいて決められる倍率で変更した計算用自己相関値を算出し、
前記基本自己相関値に対して前記計算用自己相関値を重み付け加算した検出用自己相関値が最大となる部分を特定し、
前記特定した部分に対応する周期を前記楽曲のテンポとして検出する、
テンポ検出方法。
(付記8)
楽曲の波形データから振幅強度のエンベロープを取得し、
前記エンベロープに基づく自己相関を検出して周期毎の強度を示す基本自己相関値を算出し、
前記楽曲に対応する拍子を指定し、
前記基本自己相関値の周期を前記指定された拍子に基づいて決められる倍率で変更した計算用自己相関値を算出し、
前記基本自己相関値に対して前記計算用自己相関値を重み付け加算した検出用自己相関値が最大となる部分を特定し、
前記特定した部分に対応する周期を前記楽曲のテンポとして検出する、
処理をコンピュータに実行させるためのプログラム。
【符号の説明】
【0087】
S101 音声入力処理
S102 エンベロープ検出処理
S103 ビート波形検出処理
S104 ビート強度検出処理
S105 自己相関検出処理
S106 テンポ決定処理
201 エンベロープ波形
202 楽曲波形強度
203 ビート波形
204、206 楽曲本来のテンポ値
205、207 自己相関値の最大値
S301 拍子検出処理
S302 同期オフセット時間検出処理
601 CPU
602 メモリ
603 入力装置
604 出力装置
605 補助情報記憶装置
606 媒体駆動装置
607 ネットワーク接続装置
608 バス
609 可搬型記録媒体
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11