(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-13
(45)【発行日】2022-10-21
(54)【発明の名称】楽音信号のパワーの平坦化方法及び装置、並びに、楽曲のビートタイミング検出方法及び装置
(51)【国際特許分類】
G10L 25/51 20130101AFI20221014BHJP
G10G 3/04 20060101ALI20221014BHJP
【FI】
G10L25/51 300
G10G3/04
(21)【出願番号】P 2021528794
(86)(22)【出願日】2019-06-27
(86)【国際出願番号】 JP2019025669
(87)【国際公開番号】W WO2020261497
(87)【国際公開日】2020-12-30
【審査請求日】2021-10-01
(73)【特許権者】
【識別番号】000116068
【氏名又は名称】ローランド株式会社
(74)【代理人】
【識別番号】110002860
【氏名又は名称】弁理士法人秀和特許事務所
(72)【発明者】
【氏名】日下部 智
【審査官】大野 弘
(56)【参考文献】
【文献】特開2011-039511(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G10L 25/51
G10G 3/04
(57)【特許請求の範囲】
【請求項1】
情報処理装置が、
楽音信号の複数の時点におけるパワーを示す第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定することと、
前記複数の第1の値の夫々に対応する第2の値を用いて前記複数の第1の値を平坦化することとを含み、
前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化する
ことを特徴とする楽音信号のパワーの平坦化方法。
【請求項2】
前記楽音信号の複数の時点におけるパワーは、前記楽音信号の複数のサンプルの夫々のパワー、又は、前記複数のサンプルから抽出された複数のピークのパワーを示す
請求項1に記載の楽音信号のパワーの平坦化方法。
【請求項3】
前記比較において、前記第2の値の現在値より大きい第1の値を新たな第2の値の現在値に設定してから第1の期間に前記新たな第2の値の現在値より大きい第1の値の現在値が出現しない場合に、前記所定の軌跡は、前記第1の期間、前記新たな第2の値の現在値を維持する第1の直線を描き、さらに、前記第1の期間に連続する第2の期間に前記新たな第2の値の現在値より大きい第1の値の現在値が出現しない場合に、前記所定の軌跡は、前記第2の期間の始点における第2の値の現在値が前記第2の期間の終点において0となる第2の直線を描き、
前記情報処理装置は、前記第1の値の現在値が前記第2の値の現在値より大きい場合は、その第1の値の現在値を対応する第2の値に決定し、前記第1の値の現在値が前記第2の値の現在値より小さい場合は、前記第1の直線及び前記第2の直線に従って対応する第2の値を決定し、
前記複数の第1の値の平坦化を、前記複数の第1の値の夫々を対応する第2の値で割ること、又は、前記複数の第1の値の夫々に対応する第2の値の逆数をかけることによって行う、
請求項1又は2に記載の楽音信号のパワーの平坦化方法。
【請求項4】
楽音信号の複数の時点におけるパワーを示す複数の第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定する処理と、前記複数の第1の値の夫々に対応する第2の値を用いて前記複数の第1の値を平坦化する処理と、を行う制御部を含み、
前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化する
ことを特徴とする情報処理装置。
【請求項5】
情報処理装置が、
楽曲の楽音信号の複数の時点におけるパワーを示す複数の第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定することと、
前記複数の第1の値を前記複数の第1の値の夫々に対応する複数の第2の値を用いて平坦化することと、
前記平坦化された前記複数の第1の値を用いてビートタイミングを検出することとを含み、
前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化する
ことを特徴とする楽曲のビートタイミング検出方法。
【請求項6】
前記楽音信号の複数の時点におけるパワーは、前記楽音信号の複数のサンプルの夫々のパワー、又は、前記複数のサンプルから抽出された複数のピークのパワーを示す
請求項5に記載の楽曲のビートタイミング検出方法。
【請求項7】
前記比較において、前記第2の値の現在値より大きい第1の値を新たな第2の値の現在値に設定してから第1の期間に前記新たな第2の値の現在値より大きい第1の値の現在値が出現しない場合に、前記所定の軌跡は、前記第1の期間、前記新たな第2の値の現在値を維持する第1の直線を描き、さらに、前記第1の期間に連続する第2の期間に前記新たな第2の値の現在値より大きい第1の値の現在値が出現しない場合に、前記所定の軌跡は、前記第2の期間の始点における第2の値の現在値が前記第2の期間の終点において0となる第2の直線を描き、
前記情報処理装置は、前記第1の値の現在値が前記第2の値の現在値より大きい場合は、その第1の値を対応する第2の値に決定し、前記第1の値の現在値が前記第2の値の現在値より小さい場合は、前記第1の直線及び前記第2の直線に従って対応する第2の値を決定し、
前記複数の第1の値の平坦化を、前記複数の第1の値の夫々を対応する第2の値で割ること、又は、前記複数の第1の値の夫々に対応する第2の値の逆数をかけることによって行う、
請求項5又は6に記載の楽曲のビートタイミング検出方法。
【請求項8】
前記楽音信号の複数のサンプルの夫々のパワーの夫々は、前記楽曲のデータから所定数の連続する音のサンプルからなるフレームを取得し、前記フレーム中のサンプルを間引きし、間引きしたサンプルについて高速フーリエ変換を行い、高速フーリエ変換によって得られた周波数バンド幅毎のパワーの総和を示す
請求項6又は7に記載の楽曲のビートタイミング検出方法。
【請求項9】
前記複数のサンプルから抽出された複数のピークのパワーの夫々は、前記複数のサンプルの夫々のパワーのうち、自身より大きい値を示すパワーが出現しない状態が所定時間継続した場合のパワーを示す、
請求項6から8のいずれか一項に記載の楽曲のビートタイミング検出方法。
【請求項10】
前記情報処理装置は、
前記複数のピークのパワーを平坦化し、
平坦化した複数のピークのパワーを用いて前記楽曲のビートの周期及び位相を算出し、
前記ビートの周期及び位相に基づいて、楽曲のビートタイミングを検出する
請求項6から9のいずれか一項に記載の楽曲のビートタイミング検出方法。
【請求項11】
前記情報処理装置は、
所定時間分の前記平坦化した複数のピークのパワーに対するフーリエ変換を行い、前記フーリエ変換の値の絶対値が最大値となるときのBPM(Beats Per Minute)を、前記楽曲のビートの周期として算出し、
前記BPMを示す正弦波における前記ビート音の発生タイミングの相対位置を前記ビートの位相として算出する、
請求項10に記載の楽曲のビートタイミング検出方法。
【請求項12】
前記情報処理装置は、複数個のBPM(Beats Per Minute)に関して、減衰項を有するフーリエ変換を、前記平坦化した複数のピークのパワーに対して行い、前記フーリエ変換の値の絶対値が最大となるときのBPMを、前記楽曲のビートの周期として算出する
請求項10に記載の楽曲のビートタイミング検出方法。
【請求項13】
前記情報処理装置は、前記楽曲のビートの周期に対応するBPMの1/n周期ずつずれた窓関数のそれぞれを前記平坦化した複数のピークのパワーに乗じて得られた複数の値に対し、前記フーリエ変換を行うことで、複数のウェーブレット変換値を求め、前記複数のウェーブレット変換の絶対値が最大になるときの位相を、前記楽曲のビートの位相として算出する
請求項12に記載の楽曲のビートタイミング検出方法。
【請求項14】
前記情報処理装置は、前記ビートの周期及び前記ビートの位相を示すカウント値を求め、サンプリングレートの1サンプル毎にインクリメントを行うカウンタを用いて前記カウント値の計時を行い、前記カウンタの値が前記カウント値に達したタイミングを前記ビートタイミングとして検出する
請求項10から13のいずれか一項に記載のビートタイミング検出方法。
【請求項15】
楽曲の楽音信号の複数の時点におけるパワーを示す複数の第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定する処理と、前記複数の第1の値を前記複数の第1の値の夫々に対応する複数の第2の値を用いて平坦化する処理と、前記平坦化された前記複数の第1の値を用いてビートタイミングを検出する処理とを行う制御部を含み、
前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化する
ことを特徴とする楽曲のビートタイミング検出装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、楽音信号のパワーの平坦化方法及び装置、並びに、楽曲のビートタイミング検出方法及び装置に関する。
【背景技術】
【0002】
従来、エンベロープによって正規化した波形データの差分の列に波形データ列の変動の大きさに反比例する圧縮率を乗算した圧縮差分データ列と、圧縮率に関連する伸長率データと、所定のエンベロープとに基づいて波形データ列を再生する波形記録・再生法及び波形再生装置がある(例えば、特許文献1参照)。また、波形信号のブロックごとの最大値とそのアドレスに基づいて、波形信号を正規化して、波形信号のエンベロープを除去する波形信号処理装置がある(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0003】
【文献】特許第2900077号公報
【文献】特開昭62-075600号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
楽曲信号の解析により楽曲のビートを検出することが試みられている。ビートは、一定の間隔で刻まれる基本的な時間の単位のことである。ビートは、一般に、定期的に現れる楽音信号のピークの時間位置(信号のレベル/パワーの大きなところ)を特定することによって行われる。このため、過去の信号の状況は、現時点より後のビートタイミングの検出(予測)に影響を与える。
【0005】
楽曲の中には、或る時点を境に音量が急激に小さくなってその状態がしばらく続くとともに、ビートの変化が生じる部分を有するものがある。このような楽曲については、或る時点より過去の楽曲信号について実施していたビートタイミングの検出方法を或る時点より後にそのまま適用できないケースが起こりうる(例えば、音量の低下によりピークを適正に検出できないなど)。特に、ビートタイミングの検出に再帰的処理が用いられていると、音量が小さくなった後のビートタイミングの検出処理において、音量が小さくなる前のフィードバック値が大きな影響を与え、ビートタイミングの検出精度に影響を及ぼす虞があった。
【0006】
本発明は、パワー(音量)の変化による影響を低減し得る楽音信号の正規化方法、情報処理装置、ビートタイミングの検出方法、およびビートタイミング検出装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の一態様は、情報処理装置が、楽音信号の複数の時点におけるパワーを示す第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定することと、前記複数の第1の値の夫々に対応する第2の値を用いて前記複数の第1の値を平坦化することとを含み、前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化することを特徴とする楽音信号のパワーの平坦化方法である。
【0008】
本発明の他の態様は、楽音信号の複数の時点におけるパワーを示す複数の第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定する処理と、前記複数の第1の値の夫々に対応する第2の値を用いて前記複数の第1の値を平坦化する処理と、を行う制御部を含み、前記第2の値は、前記比較の結果において、第2の値の現在値が第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化することを特徴とする情報処理装置である。
【0009】
本発明の他の態様は、情報処理装置が、楽曲の楽音信号の複数の時点におけるパワーを示す複数の第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定することと、前記複数の第1の値を前記複数の第1の値の夫々に対応する複数の第2の値を用いて平坦化することと、前記平坦化された前記複数の第1の値を用いてビートタイミングを検出することとを含み、前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化することを特徴とする楽曲のビートタイミング検出方法である。
【0010】
本発明の他の態様は、楽曲の楽音信号の複数の時点におけるパワーを示す複数の第1の値の夫々に対応する第2の値を前記第1の値の現在値と前記第2の値の現在値との比較の結果に基づいて決定する処理と、前記複数の第1の値を前記複数の第1の値の夫々に対応する複数の第2の値を用いて平坦化する処理と、前記平坦化された前記複数の第1の値を用いてビートタイミングを検出する処理とを行う制御部を含み、前記第2の値は、前記比較の結果において、前記第2の値の現在値が前記第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化することを特徴とする楽曲のビートタイミング検出装置である。
【図面の簡単な説明】
【0011】
【
図1】
図1はビートタイミング検出装置として動作可能な情報処理装置(コンピュータ)の構成例を示す。
【
図2】
図2は、制御部(ビートタイミング検出部)の構成例を示す。
【
図3】
図3は、生成部の処理の参考例を示すフローチャートである。
【
図4】
図4Aは、生成部に入力される12秒分の楽曲のディジタル信号(楽曲信号ともいう)の例を示し、
図4Bは、参考例によって
図4Aの楽曲信号から生成されるSpxデータの例を示す。
【
図5】
図5は、実施形態における生成部の処理例を示すフローチャートである。
【
図6】
図6は、パワーデータ(Qx)を正規化する構成を模式的に示す。
【
図8】
図8は、エンベローパの処理例を示すフローチャートである。
【
図9】
図9Aは、正規化前のQx及びSpxを示し、
図9Bは、正規化後のQx及びSpxを示す。
【
図10】
図10は、算出部の処理例を示すフローチャートである。
【
図11】
図11は、Spxデータとフーリエ変換に用いるBPMの正弦波の例を示す図である。
【
図12】
図12は、BPMを示す余弦波とビートの発生タイミングとの関係を図示する。
【
図13】
図13は、検出部によるビート発生タイミングの検出処理の例を示すフローチャートである。
【
図14】
図14は、ビートタイミング検出方法における、第2の周期データ及び位相データの算出処理の例を示すフローチャートである。
【
図16】
図16は、Spxデータと、式3のフーリエ変換に用いるBPM周波数を有する減衰正弦波の例を示す。
【
図17】
図17は、ウェーブレット変換値w
nを算出する回路を模式的に示す。
【
図18】
図18A、B、Cは、Spxデータと周期的ハン窓列との関係を示す。
【
図19】
図19は、位相データの算出処理の例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下の実施形態において、以下を含む楽音信号のパワーの平坦化方法、及びこの平坦化方法と同様の特徴を有する情報処理装置について説明する。平坦化方法は、情報処理装置が、楽音信号の複数の時点におけるパワーを示す第1の値の夫々に対応する第2の値を第1の値の現在値と第2の値の現在値との比較の結果に基づいて決定することと、複数の第1の値の夫々に対応する第2の値を用いて複数の第1の値を平坦化することとを含み、第2の値は、比較の結果において、第2の値の現在値が第1の値の現在値より大きい状態が連続する場合に所定の軌跡を描いて変化することを特徴とする。
【0013】
楽音信号のパワーの平坦化方法において、楽音信号の複数の時点におけるパワーは、例えば、楽音信号の複数のサンプルの夫々のパワーであってもよく、又は、複数のサンプルから抽出された複数のピークのパワーであってもよい。
【0014】
また、楽音信号のパワーの平坦化方法において、以下の構成が採用されてもよい、すなわち、比較において、第2の値の現在値より大きい第1の値を新たな第2の値の現在値に設定してから第1の期間に新たな第2の値の現在値より大きい第1の値の現在値が出現しない場合に、所定の軌跡は、第1の期間、新たな第2の値の現在値を維持する第1の直線を描き、さらに、第1の期間に連続する第2の期間に新たな第2の値の現在値より大きい第1の値の現在値が出現しない場合に、所定の軌跡は、第2の期間の始点における第2の値の現在値が第2の期間の終点において0となる第2の直線を描くようにする。この場合、情報処理装置は、第1の値の現在値が第2の値の現在値より大きい場合は、その第1の値を対応する第2の値に決定し、第1の値の現在値が第2の値の現在値より小さい場合は、第1の直線及び第2の直線に従って対応する第2の値を決定し、複数の第1の値の平坦化を、複数の第1の値の夫々を対応する第2の値で割ること、又は、複数の第1の値の夫々に対応する第2の値の逆数をかけることによって行う。
【0015】
また、実施形態では、上記した楽音信号のパワーの平坦化方法によって得られた、平坦化された複数のパワーを用いて、ビートタイミングを検出する、ビートタイミング検出方法、及びビートタイミング検出装置について説明する。
【0016】
ビートタイミング検出方法において、楽音信号の複数のサンプルのパワーの夫々(強度データ)は、例えば、楽曲のデータから所定数の連続する音のサンプルからなるフレームを取得し、前記フレーム中のサンプルを間引きし、間引きしたサンプルについて高速フーリエ変換を行い、高速フーリエ変換によって得られた周波数バンド幅毎のパワーの総和を示すものであってもよい。但し、複数のサンプルのパワーの夫々は、上記に限定されない。
【0017】
ビートタイミング検出方法において、複数のサンプルから抽出された複数のピークのパワーの夫々は、前記複数のサンプルの夫々のパワーのうち、自身より大きい値を示すパワーが出現しない状態が所定時間継続した場合のパワーを示すもの(強度データと呼ぶ)であってよい。また、情報処理装置は、複数のピークのパワーを平坦化し、平坦化した複数のピークのパワーを用いて楽曲のビートの周期及び位相を算出し、ビートの周期及び位相に基づいて、楽曲のビートタイミングを検出する、構成を採用してもよい。
【0018】
ビートタイミング検出方法において、情報処理装置は、所定時間分の平坦化した複数のピークのパワー(複数の強度データ)に対するフーリエ変換を行い、フーリエ変換の値の絶対値が最大値となるときのBPM(Beats Per Minute)を、楽曲のビートの周期として算出し、BPMを示す正弦波におけるビート音の発生タイミングの相対位置をビートの位相として算出する、構成を採用してもよい。
【0019】
ビートタイミング検出方法において、情報処理装置は、複数個のBPMに関して、減衰項を有するフーリエ変換を、平坦化した複数のピークのパワーに対して行い、フーリエ変換の値の絶対値が最大となるときのBPMを、楽曲のビートの周期として算出する、ようにしてもよい。この場合、情報処理装置は、楽曲のビートの周期に対応するBPMの1/n周期ずつずれた窓関数のそれぞれを平坦化した複数のピークのパワーに乗じて得られた複数の値に対し、フーリエ変換を行うことで、複数のウェーブレット変換値を求め、複数のウェーブレット変換の絶対値が最大になるときの位相を、前記楽曲のビートの位相として算出する、ようにしてもよい。
【0020】
ビートタイミング検出方法において、情報処理装置は、ビートの周期及びビートの位相を示すカウント値を求め、サンプリングレートの1サンプル毎にインクリメントを行うカウンタを用いてカウント値の計時を行い、カウンタの値がカウント値に達したタイミングをビートタイミングとして検出する、ようにしてもよい。
【0021】
以下、図面を参照して、実施形態に係るビートタイミング検出装置及びビートタイミング検出方法について説明する。実施形態の構成は例示であり、実施形態の構成に限定されない。
【0022】
〔第1実施形態〕
<ビートタイミング検出装置の構成>
図1は、ビートタイミング検出装置として動作可能な情報処理装置の構成例を示す。情報処理装置1は、パーソナルコンピュータ(PC)、スマートデバイス(スマートフォン、タブレット端末)などの汎用のコンピュータであっても、専用のコンピュータであってもよい。また、情報処理装置は、可搬性を有する移動端末でも固定端末でもよい。
【0023】
図1において、情報処理装置1は、バス3に接続された、CPU10と、ROM(Read Only Memory)11と、RAM(Random Access Memory)12と、ハードディスクドライブ(HDD)13と、入力装置14と、表示装置15と、通信インタフェース(通信I/F)16とを含む。情報処理装置1は、さらに、バス3に接続された、ディジタルアナログ変換器(D/A)17と、アナログディジタル変換器(A/D)20とを含む。D/A17にはアンプ(AMP)18が接続され、AMP18にはスピーカ19が接続されている。A/D20には、マイクロフォン(MIC)21が接続されている。
【0024】
ROM11は、CPU10によって実行される様々なプログラムやプログラムの実行に際して使用されるデータを記憶している。RAM12は、プログラムの展開領域、CPU10の作業領域、データの記憶領域などとして使用される。HDD13は、プログラムやプログラムの実行に際して使用されるデータ、楽曲データなどを記憶する。楽曲データは、例えばMP3やWAVE形式などの所定の音声ファイルのフォーマットを有する音データである。音声ファイルのフォーマット形式は、MP3やWAVE形式以外でもよい。ROM11及びRAM12は、主記憶装置の一例であり、HDD13は補助記憶装置の一例である。主記憶装置及び補助記憶装置は、記憶装置又は記憶媒体の一例である。
【0025】
入力装置14は、キー、ボタン、タッチパネルなどであり、情報(指示や命令を含む)の入力に使用される。表示装置15は、情報の表示に使用される。通信I/F16は、ネットワーク2に接続されており、通信に係る処理を司る。CPU10は、例えば入力装置14から入力された指示に応じて、ネットワーク2から所望の楽曲データ(楽曲信号)をダウンロードし、HDD13に記憶することができる。
【0026】
CPU10は、プログラムの実行によって、様々な処理を行う。処理は、上記した楽曲ダウンロードに係る処理の他、楽曲の再生に係る処理、楽曲のビート音発生タイミングを生成する処理、ビート音発生タイミングに合わせてビート音(例えば、クラップ音、特にハンドクラップ音など)を出力する処理などを含む。CPU10は、「制御部」の一例である。
【0027】
例えば、CPU10は、楽曲データを再生する場合、プログラムの実行によって、HDD13からRAM12に読み出した楽曲データから楽曲の音を表すディジタルデータ(ディジタル信号)を生成し、D/A17に供給する。D/A17は、音を表すディジタルデータをディジタルアナログ変換によってアナログ信号に変換し、AMP18に出力する。AMP18によって振幅が調整されたアナログ信号はスピーカ19から出力される。
【0028】
MIC21は、例えば、スピーカ19から出力される楽曲の音を伴奏(カラオケ)とする歌唱音などを集音する。MIC21で集音されたアナログの音声信号は、AMP18で振幅を増幅され、スピーカ19から出力される。このとき、歌唱音は楽曲音とミキシングされても、それぞれ別個のスピーカから出力されてもよい。
【0029】
また、MIC21は、楽器を用いた演奏(いわゆる生演奏)による音声や外部機器からの楽曲の再生音声を集音して音を拡大(スピーカ19から出力)したり、録音したりする場合にも使用される。例えば、MIC21で集音された演奏音の信号は、A/D20によってディジタル信号に変換され、CPU10に渡される。CPU10は、演奏音の信号を音声ファイルのフォーマットに従った形式に変換して音声ファイルを生成し、HDD13に記憶する。MIC21で集音される楽曲の音信号について、ビートタイミングの検出(ビート音発生タイミングの生成)処理が行われてもよい。
【0030】
なお、情報処理装置1がコンパクトディスク(CD)などのディスク型記録媒体のドライブ装置(図示せず)を含んでもよい。この場合、ドライブ装置を用いてディスク型記録媒体から読み出された楽曲の音を表すディジタル信号がD/A17に供給され、楽曲音が再生されてもよい。この場合、ディスク型記録媒体から読み出された楽曲の音信号について、ビートタイミングの検出処理が行われてもよい。
【0031】
図1に示した情報処理装置1は、ビートタイミング検出装置として動作可能である。CPU10は、ROM11やHDD13に記憶されたプログラムを実行することによって、後述する正規化処理や、楽曲のビートタイミングを検出する(ビート音発生タイミングを生成する)処理を行う制御部として動作する。
【0032】
図2は、制御部(ビートタイミング検出)部の構成例を示す図である。プログラムの実行によって、CPU10は、
図2に示す制御部(ビートタイミング検出部)100として動作する。制御部100は、時間スパースデータ(「Spxデータ」と表記:複数のサンプルから抽出されたピークのパワー」、「強度データ」に相当)の生成部101、バッファ102、周期データ及び位相データの算出部103、及びビートタイミングの検出部104として動作する。バッファ102は、例えば、RAM12やHDD13の所定の記憶領域に設けられる。
【0033】
Spxデータの生成部101は、楽曲の音を表すディジタルデータ(楽曲のデータ)を用いて、Spxデータを生成して出力する。バッファ102は、少なくとも所定時間分のSpxデータ(複数の強度データに相当)を蓄積する。本実施形態では、所定時間として6秒を例示するが、所定時間は6秒より長くても短くてもよい。算出部103は、バッファ102に蓄積された所定時間分のSpxデータの集合を用いて、ビートの周期データ及び位相データを算出する。発生タイミングの検出部104は、周期データ及び位相データを用いてビートタイミングを検出する。
【0034】
ビートタイミングは、ビート音発生タイミング(出力指示)として、ビート音の再生処理部105に入力される。再生処理部105は、発生タイミングに合わせたビート音の再生処理を行う。再生処理部105としての動作は、例えばCPU10によって行われる。バッファ102は、例えば、RAM12やHDD13の所定の記憶領域に設けられる。
【0035】
Spxデータの生成部101は、楽曲の音を表すディジタルデータを用いて、Spxデータを生成して出力する。バッファ102は、少なくとも所定時間分のSpxデータ(複数の強度データに相当)を蓄積する。本実施形態では、所定時間として6秒を例示するが、所定時間は6秒より長くても短くてもよい。算出部103は、バッファ102に蓄積された所定時間分のSpxデータの集合を用いて、ビートの周期データ及び位相データを算出する。発生タイミングの検出部104は、周期データ及び位相データを用いてビートタイミングを検出する。
【0036】
<<Spxデータの生成>>
生成部101によるSpxデータの生成について説明する。生成部101には、再生に係る楽曲(音声出力のためにD/A17に送られたデータ)の音を表すディジタル信号が「楽曲のデータ」として入力される。音を表すディジタル信号は、HDD13に記憶された楽曲データの再生処理によるものでも、MIC21で収音された音声信号のA/D変換によって得られたものでもよい。
【0037】
音を表すディジタルデータは、RAM12に記憶され、生成部101の処理に使用される。音を表すディジタルデータは、例えばアナログ信号から所定のサンプリングレートに従って採取されたサンプル(標本)データ(通常、アナログ信号の電圧値)の集合である。本実施形態では、一例として、サンプリングレートは44100Hzであるとする。但し、サンプリングレートは、所望のFFT解像度が得られる限りにおいて適宜変更可能である。
【0038】
(参考例)
図3は、生成部101の処理の参考例を示すフローチャートである。生成部101には、楽音出力(再生)のためにD/A17へ送られた、楽曲の音を表すディジタルデータ(ディジタル信号)が入力される。生成部101は、入力されたディジタルデータから、所定個数のサンプル(「フレーム」と呼ぶ)を取得する(S01)。所定個数は、本実施形態では1024であるがこれより多くても少なくてもよい。サンプルの取得は、所定間隔で行われる。所定間隔は、例えば5msであるが、これより多くても少なくてもよい。
【0039】
S02では、生成部101は、間引き処理を行う。すなわち、生成部101は、1024個のサンプルに対する1/4間引きを行って、256個のサンプルを得る。間引きは1/4間引き以外でもよい。S03では、生成部101は、256個のサンプルに対して高速フーリエ変換(FFT)を施し、FFTの結果(周波数バンド幅毎のパワー)から、フレーム単位でのパワーの大きさを示すデータ(パワーデータという)を得る(S04)。なお、パワーは振幅の2乗で表されることから、「パワー」との概念には振幅も含まれる。
【0040】
パワーデータの値は、例えば、256個のサンプルに対するFFTの実施によって得られるパワーの総和である。但し、今回のフレームの各周波数バンド幅のパワーから前回のフレームにおける、対応するバンド幅のパワーを差し引き、その値が正である(パワーが増加している)場合にはそのパワーの値を総和計算のために残し、そうでない(差し引いた値が負である(パワーが減少している))値は無視してもよい。パワーの増加分が大きいところがビートである可能性が高いからである。
【0041】
また、他のフレームとの比較対象が同じである限りにおいて、総和の算出に用いる値は、今回のフレームのパワーの総和であっても、今回のフレームのパワーから前回のフレームのパワーを引いた値が正の値のパワーの総和であっても、今回のフレームのパワーから前回のフレームのパワーを差し引いた差分であってもよい。また、FFTの実施によって得られるパワースペクトルにおいて、所定の周波数より低い周波数についてのみ、上記した差分の算出が行われてもよい。所定の周波数以上の周波数については、ローパスフィルタを用いてカットしてもよい。
【0042】
パワーデータは、フレーム単位で、RAM12やHDD13に記憶される。生成部101は、フレーム単位のパワーデータが作成される毎に、パワーの総和(ピーク値)の大きさを比較して大きい方を残し、小さい方は破棄する(S05)。生成部101は、S05で残した総和より大きい総和が所定時間出現していないか否かを判定する(S06)。所定時間は例えば100msであるが、100msより大きくても小さくてもよい。より大きい総和を示すデータが出現していない状態が所定時間続いた場合に、生成部101は、そのパワーの総和を示すデータをSpxデータとして抽出し、バッファ102に記憶(保存)する(S07)。このように、Spxデータは、楽音を示すディジタルデータのピーク値を100ms間隔で抽出したデータであり、楽曲のビートを司るタイミングを示す情報(タイミング情報)と、そのタイミングにおけるパワーとを示すデータである。Spxデータは、バッファ102に複数個蓄積される。生成部101は、S01からS06までの処理を繰り返し行う。
【0043】
図4Aは、生成部101に入力される12秒分の楽曲のディジタル信号であり、
図4Bは、
図4Aに示した楽曲のディジタル信号から参考例の処理により生成されたSpxデータの例を示す。
図4Bに示すグラフの横軸は時間で、縦軸はパワーである。このグラフにおいて、上端に黒丸のついた縦線が、
図4Aに示した楽曲のディジタル信号から得られた個々のSpxデータを示し、横軸(時間軸)の位置がタイミングを示し、縦線の長さがパワーを示す。Spxデータは、定められた間隔(例えば100ms以上)で生成され、通常、1秒間に6個程度生成される。
【0044】
(正規化処理)
上述した参考例では、
図4Bに示すような複数のSpxデータの値が得られる。しかし、
図4Bの中央部分のように、或るタイミングを境にSpxデータ(強度データ)の値が急激に小さい値に減少する場合がある。このような場合では、後述するビートの周期及び位相の算出において、適正な値を得られない場合があった。後述するが、例えば、ビートの周期及び位相の算出において再帰的処理(
図15、
図17)を行う場合、変化前の大きなSpxデータの値が、変化直後のSpxデータに係る処理において支配的となり、Spxデータの変化に適正に追従できない場合があった。
【0045】
本実施形態では、上述した問題を解決するため、Spxデータの正規化処理(Spxデータの大きさを平坦化する処理、或いは差を縮める処理)を行う。
図5は、実施形態に係る生成部101の処理例を示すフローチャートである。
図5の処理は、参考例におけるS04とS05との間に、正規化処理(S04A)が設けられている点で、参考例と異なる。
【0046】
図6は、生成部101にて行われる正規化処理に係る構成を模式的に示す。正規化処理は、エンベローパ(enveloper)101Aと、ノーマライザ(normalizer)101Bとを有する。参考例において説明した、フレーム単位のパワーの大きさ(総和)を示すデータ(パワーデータ)を“Qx”とする。時間軸上に時系列で並んだQxの集合が、「複数の楽音信号」に該当する。エンベローパ101A及びノーマライザ101Bには、複数のQxのそれぞれが入力される。Qxは、「第1の値」、「複数のサンプルの夫々のパワー」に相当する。
【0047】
エンベローパ101Aは、Qxの値を用いて、Qx対応のダイナミクス値(Dynamics value:Dv)を求めて算出する。ダイナミクス値Dvは、Qxに対する音の強弱の変化を示す値であり、「正規化用信号(第2の値)」の一例である。ノーマライザ101Bは、Qxの値をDvの値で除する(Qx/Dv)ことによって、正規化されたQxの値を求める。
【0048】
図7は、エンベローパ101Aの処理の説明図である。エンベローパ101Aは、楽音信号の値が減衰する状態が所定の時間(監視区間:第1の期間(第1インターバル)Itv1)継続する間は一定の値を保持する(第1の期間におけるDvの値の軌跡は、Dvの値が一定の直線(第1の直線)を描く)。そして、所定の時間が経過すると、その時点でのDvの大きさに関係なく、一定時間(第1の期間に連続する第2の期間(第2インターバル)Itv2)でDvの値が一点(0)に終結(収束)するように、Dvの値を算出する。すなわち、第2の期間におけるDvの値の軌跡は、第2の期間の始点におけるDvの値が第2の期間の終点において0となる傾きを持つ直線(第2の直線)を描く。第1及び第2の直線からなる軌跡が「所定の軌跡」の一例であるが、「所定の軌跡」の形状は、上記一例に制限されない。
【0049】
「所定の時間」は、以下のようにして決定する。ビート検出は、周期的に現れる楽音のピークの時間位置を特定することによって行う。したがって、正規化用信号が楽音のピークの周期よりも短い時間で変化する(楽音信号に追従する)と、本来のビートの周期よりも短いピークを検出してしまう可能性が高くなる。このため、「所定の時間」は、ビートの周期よりも長くする必要がある。一方、「所定の時間」を長くしすぎると、音量が大きな状態から音量が小さな状態になったときに、なかなか影響が消えないこととなる。これらを考慮して、「所定の時間」は決定される。
【0050】
図8は、エンベローパ101Aの処理例を示すフローチャートである。S001では、初期設定として、以下のような処理が行われる。
・音の強弱の変化を示す値(ダイナミクス値:Dyna-value:Dv)の値を0に設定する。
・デュレーションカウンタ(Duration Counter:Dc)の値を0に設定する。Dcは、
図7に示したグラフの時間軸上の位置を示す。
・
図7に示したItv1及びItv2の値を所定値に設定する。
【0051】
S002では、S04(
図5)で得られたQxの値を取得し、Dcの値をインクリメントする。S003では、Qxの値とDvの値とを比較して、Dvの値がQxの値より大きいかを判定する。Dvの値がQxの値より大きいと判定される場合には、処理がS004に進み、そうでないと判定される場合には、処理がS007に進む。
【0052】
S007に処理が進んだ場合には、Dvの値をQxの値と等しくする(Dvの値を上げる)とともに、Dcの値を0にする(リセットする)。その後、処理がS010に進む。S010では、現在のDvの値を出力し、処理をS002に戻す。
【0053】
S004に処理が進んだ場合には、Dcの値がItv1の値より大きいか否かを判定する。Dcの値がItv1の値より大きいと判定される場合には、処理がS005に進む。これに対し、Dcの値がItv1の値より小さいと判定される場合には、処理がS008に進む。Dcの値がItv1の値より大きいことは、Dcの値が監視時間(楽音信号の値が減少に転じてからの所定時間)Itv1に達したことを意味する。
【0054】
S008では、Dvの値をItv2の値で割った値を“ステップ(Step)”の値に設定する。ステップの値は、区間2におけるDvの傾きを示す。その後、処理がS010に戻る。
【0055】
S004においてDcの値がItv1の値より大きいと判定されることは、Qxの時間軸上の位置が、第2区間Itv2内にあることを意味する。S005では、ステップの値をDvの値から減じる。S005の処理では、Dvの現在の値がItv2の終点で0となる直線(S008で求めた傾き)に従って、Dvの値を減少させる処理が行われる。すなわち、Dvの値を、上記した直線上において、現在のDcの値に対応する値にする。
【0056】
S006では、Dvの値がQxの値より大きいかを判定する。DvがQxより大きいと判定される場合には、処理がS010に進み、そうでないと判定される場合には、処理がS009に進む。S009では、Qxの値をDvの値に設定するとともに、Dcの値を0にする(リセットする)。その後、処理がS010に進む。
【0057】
図9Aは、QxとDvとの関係を示す。
図9Aにおける、灰色の部分はQxの時間的変化(複数のQx)を示し、上端に黒丸がついた棒グラフはSpxを示す。そして、破線は、Dvの変化を示す。
図9Aに示すように、Qxの値は、9.8[sec]あたりを境に急激に低下し、小さい値が続く。
図8の処理では、QxがDvより大きい場合はDvを上昇させる。また、QxがDvより小さい場合は、DcがItv1を超えるまで、Dcのカウントアップを行う。この間、Dvの値は変化しない(Dvの値を維持する:横軸の9.4~10.1付近を参照)。DcがItv1を超える(時間軸上のQxの位置がItv2内となる)と、“Dv/Itv2”の傾きに従ったDvの値の減少が行われる。傾き一定のため、DvはQxが再びDvを上回るまで一直線に減少する(横軸の10.1~10.5付近を参照)。
【0058】
図9Bは、ノーマライザ101Bによって正規化されたQx及びSpxを示す。例えば、
図9Aにおいて、Qx=0.08に対し、Dv=0.08である場合、ノーマライザ101Bの計算(Qx/Dv)によって、正規化されたQxの値は1.0となる。一方、Qx=0.005のときにDv=0.005であれば、正規化されたQxの値は1.0となる。このように、Qxの正規化によって、パワーが急激に減少した場合でも、音の強弱の変化でみた場合は同程度の値となる。
【0059】
図5のS05~S07の処理、すなわち、Spxを求める処理は、正規化されたQxを用いて行われる。
図9Bに示すSpxは、S04Aにて得られた正規化されたQxを用いたS05~S07の処理によって得られる。なお、Spxを算出した後、Spxについて上述した正規化処理を行ってもよい。
【0060】
<<正規化(平坦化)処理の作用効果>>
上述したように、情報処理装置1は、Qx(楽音信号の複数の時点におけるパワーを示す第1の値に相当)の夫々に対応するDv(第2の値に相当)をQxの現在値とDvの値の現在値との比較の結果に基づいて決定する。本実施形態では、“Qx/Dv(第1の値を対応する第2の値で割る演算)”によって、Qxの正規化を行う。但し、演算は第1の値に対応する第2の値の逆数をかける演算(Qx*1/Dv)でもよい。正規化に用いるDvの値は、比較の結果において、Dvの現在値がQxの現在値より大きい状態が連続する場合に所定の軌跡を描いて変化する。所定の軌跡は、例えば、
図7に示したような第1の期間(Itv1)における第1の直線と第2の期間(Itv2)における第2の直線からなる。このようなDvを用いて、複数のQxの夫々に対応するDvの値を求め、Qx/Dvの演算を行って、Qxの値を平坦化する。このような、Qx(Qxを用いて求めるSpx)の平坦化によって、楽曲の音量の変化がビートの検出精度に影響を与えるのを抑えることができる。特に、後述する、再帰的処理(
図15、
図17)が行われる場合に、フィードバック信号が大きな影響を与えるのを抑えることができる。
【0061】
<<周期データ及び位相データの算出>>
次に、ビートの周期及び位相を算出する方法(第1の方法)について説明する。
図10は、算出部103の処理例を示すフローチャートである。S10において、生成部101にて生成された新たなSpxデータがバッファ102に到来し、蓄積される。S11において、バッファ102に蓄積されたSpxデータのうち所定時間分のSpxデータ(複数の強度データに相当)がバッファ102から取得される。所定時間は、例えば6秒間であるが、ビートの周期及び位相を得られる限りにおいて6秒より長くても短くてもよい。以降のS12~S16の処理は、S11で取得した6秒分のSpxデータを用いて行われる処理である。S12では、6秒分のSpxデータについて、所定個数(例えば20個)のBPM(Beats Per Minute:テンポ(リズムの速さ)を示す)に対応したフーリエ変換を施し、ビートの周期(BPMの一周期)とビートの位相(ビート音の発生タイミング)とを算出する。
【0062】
具体的に説明すると、6秒分のSpxデータについて所定個数、例えばBPM86~168に対応する20個、のBPMに対応する周波数(BPM周波数)f = {86,90,94,…,168}/60 について、Exp(2πjft)(BPM周波数で振動する正弦波、振動数に関係無く振幅は同じ)に対する積和をとる。すなわちフーリエ変換を行う。フーリエ変換の結果をフーリエ変換データc(i) (i=0,1, 2, 3,…,19)とする。
【0063】
図11は、Spxデータとフーリエ変換に用いるBPM周波数を有する正弦波の例を示す図である。
図10の例では、BPM72の正弦波(実線で示す)と、BPM88の正弦波(破線で示す)と、BPM104の正弦波(一点鎖線で示す)とが例示されている。フーリエ変換データc(i)の値は以下の式1により求められる。なお、BPMの値及びその個数は適宜変更することができる。
【数1】
【0064】
ここに、式1におけるt(k)は、Spxデータの存在する過去6秒のうちの時間位置であり、単位は秒である。kはそのSpxデータのインデックスであり、k=1,...,Mである(MはSpxデータの個数)。また、x(t(k))は、その瞬間のSpxデータの値(ピーク値の大きさ)を示す。jは虚数単位(j2=-1)である。f(i)はBPM周波数であり、例えばBPM120は2.0Hzである。
【0065】
算出部103は、c(i)=(c0, 1, c2, c3, ... ,c19)のうち、その絶対値が最大値に対応するBPMをSpxデータ(ビート)のBPMに決定する(S13)。また、その位相値(Phase)φ= Arg(c(i))[rad] を、6秒間分のSpxデータについてのビートタイミングとする。 ビートタイミングは、周期的に到来するビートの発生タイミングに対する相対的な位置を示す。
【0066】
位相値φは複素数の偏角であり、c=c
re+jc
im(c
reは実部でc
imは虚部)とした場合に、以下の式2により得られる。
【数2】
【0067】
位相値φの算出によって、BPMの正弦波に対するビートの発生タイミングの相対位置、すなわち、BPMの一周期に対してビート発生タイミングがどのくらい遅れているかがわかる。
【0068】
図12は、BPMを示す余弦波(EXP(2πjft)の実部)と、ビートの発生タイミングとの関係を図示する。
図12に示す例では、Spxデータの個数が4であり、そのBPMが72である。
図12に示すSpxデータの夫々は、式2を用いて求められるc(i)の値(位相)であり、ビートの発生タイミングを示す。Spxデータ間がビート発生タイミングの間隔をなす。
図12に示す例では、位相値φの計算によって得られる、BPM周波数を有する余弦波からπ/2遅れたタイミングがビートの発生タイミングとなる。算出部103は、BPMの一周期のサンプル数を周期データとする(S15)。
【0069】
例えば、BPMが104であり、サンプリングレートが44100Hzの場合では、周期データ(サンプル数)は、44100[個]/(104/60)=25442[個]となる。また、周期データが25442[個]の場合において、位相値φが0.34[rad]であった場合、位相データ(サンプル数)は、25442[個]×0.34[rad]/2π[rad]=1377[個]となる。そして、算出部103は、周期データ及び位相データを出力する(S16)。なお、算出部103は、6秒分のSpxデータが蓄積されるごとに、S11~S16の処理を繰り返し行う。これにより、楽曲のリズムの変更に追従することができる。
【0070】
<<ビートタイミングの検出>>
図13は、検出部104によるビートタイミングの検出処理の例を示すフローチャートである。S21において、検出部104は、新しい周期データ及び位相データが算出部103から提供されたかを判定する。新しい周期データ及び位相データが提供された場合には、処理がS22に進み、そうでない場合には、処理がS23に進む。
【0071】
S22では、検出部104は、新しい周期データ及び位相データをビート発生タイミングの検出に採用し、古い周期データ及び位相データは破棄する。このとき、Spxデータの作成時に、Spxデータをなすフレームのサンプルは、100ms遅延が与えられた状態となっているため、ここで、演奏又は再生中の楽曲とリズムと、後述するハンドクラップ音とが一致するように時間調整(位相調整)が行われる。その後、処理がS23に進む。
【0072】
S23では、周期データのサンプル数及び位相データのサンプル数を用いたカウンタの設定を行う。例えば、検出部104は、サンプリングレートの1サンプル(サンプリングレートに従ったアナログ信号の電圧チェックの間隔)毎にカウントアップ(インクリメント)を行うカウンタを有し、当該カウンタのカウント値を1サンプル毎にインクリメントする。これによってカウント値が零から所定値(位相データのサンプル数(カウント値)及び周期データのサンプル数(カウント値)の和を示す値)以上になるのを待つ(S24)。
【0073】
カウンタのカウント値が所定値以上になると、検出部104は、予測に基づく、ビート音の発生タイミング(ビートタイミング)を検出する(S25)。検出部104は、制御部53にビートタイミングの発生を通知するとともに、ビート音の出力指示を出力する(S25)。制御部53は、ビートタイミングに基づき、第1実施形態で説明した動作(表示態様の変更)を行う。再生処理部105は、出力指示に応じて、ROM11又はHDD13に予め記憶していたビート音(例えば、ハンドクラップ音)のディジタルデータをD/A17へ送る。ディジタルデータはD/A17でアナログ信号に変換され、AMP18で振幅増幅された後、スピーカ19から出力される。これによって、再生又は演奏中の楽曲に重ねてハンドクラップ音が出力される。
【0074】
以上説明したビートタイミング検出方法によれば、再生又は演奏済みの(過去の)楽曲が生成部101に入力され、生成部101がSpxデータを生成する。このようなSpxデータがバッファ102に蓄積され、算出部103が所定時間(6秒)分の複数のSpxデータから、ビートの周期及び位相を算出し、再生または演奏中の楽曲(音声)に合わせたビートタイミングを検出部104が検出して出力する。また、再生処理部105が再生又は演奏中の楽曲のリズムに合致したハンドクラップ音を出力させることができる。このハンドクラップ音の自動的な出力は、上述したSpxデータの生成や、フーリエ変換データに基づくビートの周期及び位相の算出、並びにカウンタ値のカウントのような、計算量の少ない簡易なアルゴリズムにより行うことができる。これにより、処理の実行主体(CPU10)に対する負荷増大や、メモリリソースの増大を回避することができる。また、処理量が少ないが故に、再生音や演奏音に対する遅延のない(遅延があっても人がそれを認識できない)クラップ音出力が可能となる。
【0075】
さらに、正規化処理によって、Qx及びSpxデータの値が正規化されるため、パワーが急激に低下する場合であっても、その影響の少ないSpxの値を用いてビートタイミングを検出することができる。なお、Spxの正規化は、Qxに対応するDvを記憶しておき、QxからSpxが算出された場合に、対応するDvの値でSpxの値を除すること(Spx/Dv)によって行われてもよい。また、正規化は、Spx以外の、ビートタイミングの検出用データについて行われてもよい。
【0076】
なお、ビートタイミング検出部100が行う処理は、複数のCPU(プロセッサ)によって行うのでも、マルチコア構成のCPUによって行うのでもよい。また、ビートタイミング検出部100が行う処理は、CPU10以外のプロセッサ(DSPやGPUなど)、プロセッサ以外の集積回路(ASICやFPGAなど)、或いはプロセッサと集積回路との組み合わせ(MPU、SoCなど)によって実行されてもよい。
【0077】
〔第2実施形態〕
次に第2実施形態について説明する。第2実施形態は、ビートの周期及び位相の算出方法として、第1実施形態で説明した第1の方法と異なる方法を用いる。但し、第2の方法法においても、第1実施形態で説明した方法によって正規化されたSpxデータが使用される。第2の方法は、、周期データ及び位相データの算出に関して、第1の方法と以下のように異なる。
【0078】
図14は、第2のビートタイミング検出方法における、周期データ及び位相データの算出処理の例を示すフローチャートである。S50では、生成部101にて生成された新たなSpxデータがバッファ102に到来する。
【0079】
S51では、算出部103は、所定個数のBPMに対応したフーリエ変換データを得る。第1の方法では、周期データ及び位相データの算出に関して、6秒分のSpxデータについて、所定個数(例えば20~40個)のBPM(Beats Per Minute:テンポ(リズムの速さ)を示す)に対応したフーリエ変換を施していた(
図9、S12)。
【0080】
これに対し、第2の方法(S51)では、第1の方法で用いたフーリエ変換の代わりに、減衰項U
kをもつフーリエ変換を用いる。フーリエ変換の式(式3)を以下に示す。
【数3】
【0081】
式3において、Uは1サンプルあたりの減衰量を示し、1に近い数である。Uは過去データを忘却していく割合を示す。区間は過去の無限大までである。
図15は、式3の回路図である。現在の遅延ブロック(Z
-1)61により遅延が与えられた過去の信号f
n-1(m)に対し、乗算器62で減衰項Ue
-jωmが乗じられ、加算器63で現在の信号f(n)と加算される。このようにして、1サンプル当たりのフーリエ変換値が得られる。
【0082】
式3のフーリエ変換値は、以下の式4及び式5で表すことができる。
【数4】
【0083】
Spxデータの値が到来することなくL(Lは正の整数)サンプルが経過する区間(空区間)については、式3(
図15に示した回路)を用いず、以下の式6及び式7を用いて、Lサンプル分のフーリエ変換値を得ることができる。式6におけるq
m
Lの値は、式7を用いて簡便に求めることができる。なお、f(n)は、Spxデータの値、LはSpxデータの到来間隔であり、Uは減衰係数、ω
m はBPMに対応する一サンプル当たりの角周波数である。
【数5】
【0084】
図16は、Spxデータと、式3のフーリエ変換に用いるBPM周波数を有する減衰正弦波の例を示す。
図16の例において、周期が最も長い波がBPM72の波であり、次の波がBPM88の波であり、周期が最も短い波がBPM104の波である。第2の方法においても、所定個数の複数個のBPM(例えば20個)が用意され、各BPMについて上記した式3を用いたフーリエ変換値が求められる。BPMの数は、20より多くても少なくてもよい。
【0085】
第2の方法では、第1の方法と異なり、所定期間(6秒)のSpxデータを蓄積することを要しない。このため、Spxデータを蓄積するためのメモリ(記憶装置57)の記憶領域を有効に活用することができる。また、第1の方法では、複数個のBPM×Spxデータ数の積和計算を行っていたのに対し、第2の方法では、各BPMについて式3の演算を行うため、大幅に演算量を減らすことができる。
【0086】
S52では、算出部103は、所定個数(例えば20個)のBPMに対応した所定個数(例えば5個)のウェーブレット変換値を得る。
図17は、ウェーブレット変換値w
nを算出する回路を模式的に示す。回路は、
図14に示したフーリエ変換値の算出用の回路に、乗算器64が追加された構成となっている。乗算器64は、BPM値に相当するサンプル数を周期とする周期的ハン窓列をSpxデータに乗じる。乗算器64の出力に対し、上述した式3のフーリエ変換が行われ、ウェーブレット変換値w
nとして出力される。ハン窓は窓関数の一例であり、ハン窓以外に、三角窓やハミング窓などを適用可能である。
【0087】
ウェーブレット変換値wnは、各BPMについて、各BPMの1/5周期だけずれたタイミングについて求められる。すなわち、BPMの1/5周期ずつずれた周期的ハン窓列が用意され、各周期的ハン窓列に対応するウェーブレット変換値{wn}0≦n<5が求められる。
【0088】
図18A、
図18B及び
図18Cは、Spxデータと周期的ハン窓列との関係を示す。
図18Aは、或るBPMに係る、タイミング0の周期的ハン窓列を示す減衰正弦波を太線で示し、タイミング0以外の周期的ハン窓列を示す減衰正弦波を細線で示す。
図18Bは、或るBPMに係る、タイミング1(タイミング0より1/5周期分進んでいる)の周期的ハン窓列を示す減衰正弦波を太線で示し、タイミング1以外の周期的ハン窓列を示す減衰正弦波を細線で示す。
図18Cは、或るBPMに係る、タイミング2(タイミング1より1/5周期進んでいる)の周期的ハン窓列を示す減衰正弦波を太線で示し、タイミング1以外の周期的ハン窓列を示す減衰正弦波を細線で示す。
【0089】
S53では、算出部103は、S13と同様に、複数のBPMに対応するフーリエ変換値のうち、その絶対値が最大となるフーリエ変換値に対応するBPMを、Spxデータ(ビート)のBPMに決定する。また、算出部103は、決定したBPMのビートの一周期のサンプル数をビートの周期データに決定する(S54)。
【0090】
S55では、算出部103は、BPMに対応する所定個数のウェーブレット変換値から位相値を算出し、周期データに対するサンプル値に変換する。すなわち、算出部103は、ウェーブレット変換値w
nの絶対値が最大となるときのnを求め(
図19のS551)、nに対応する位相値Arg(w
n)を求める(
図19のS552)。算出部103は、位相値を周期データに対するサンプル値(位相データ)に変換し(S55)、周期データ及び位相データを出力する(S56)。
【0091】
図20は、ウェーブレット変換値の説明図である。ウェーブレット変換値は、時間偏在するともに、複素数の位相情報を持つ。すなわち、ウェーブレット変換値は、ハン窓のカーブと、ハン窓と実部(余弦)との積に係るカーブと、ハン窓と虚部(正弦)との積に係るカーブとを有する。本実施形態では、1つのSpxデータ(ビート)に関してタイミングが1/5周期(n=5)ずれた複数のウェーブレット変換値を用いることで、ビートの位相をより精度よく検出することができる。なお、ビートタイミングの検出処理については、第1の方法(
図12)と同じであるので、説明を省略する。
【0092】
第2実施形態における、周期及び位相を求める第2の方法によれば、第1の方法に比べて、処理に要する記憶容量と演算量とを減らすことができ、また、位相(ビートタイミング)の検出精度が上がる。特に、第2の方法では、遅延ブロックが前回のSpxのフーリエ変換値を保持するため、正規化前の値では、パワーが急激に低下した場合に、遅延ブロック61により保持されている前回の値が今回の値の計算において支配的となり、急激な低下を反映したものとならない。Spxの正規化によって、変化の前後におけるSpxの値に大きな差が生じないようになるため、適正なフーリエ変換値やウェーブレット変換値を得る(これらの値の精度を高める)ことができる。
【0093】
なお、上記した実施形態では、楽音信号の複数のQx(複数のサンプルの夫々パワー)を正規化処理によって平坦化し、平坦化されたQxの値を用いて平坦化された複数のSpx(複数のピークのパワー)を求めた。これに対し、正規化前のQxを用いてSpxを求め、そのSpxに対して正規化処理を行うことで平坦化された複数のSpxを得るようにしてもよい。
【符号の説明】
【0094】
1・・・情報処理装置
2・・・ネットワーク
10・・・CPU
11・・・ROM
12・・・RAM
13・・・HDD
14・・・入力装置
15・・・表示装置
16・・・通信インタフェース
17・・・ディジタルアナログ変換器
18・・・アンプ
19・・・スピーカ
20・・・アナログディジタル変換器
21・・・マイクロフォン
100・・・ビートタイミング検出部
101・・・生成部
102・・・バッファ
103・・・算出部
104・・・検出部
105・・・再生処理部