(57)【要約】      （修正有）【課題】どのような楽器からもリズムパターンの検出が可能なリズム検出装置を提供する。【解決手段】入力部１０ａに入力された音響信号から所定の時間毎の各音階音のパワースペクトルを音階音パワー検出部２０ａによって求め、パワー増分値算出部３０ａによって、フレーム毎の各音階音のパワーの増分値をすべての音階音について合計してフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、さらにビート検出部４０ａにより、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なテンポと各ビートの位置を検出し、リズムパターン決定部９０ａにおいて、最終的に入力音響信号から抽出された上記リズム抽出パラメータと、リズム抽出パラメータ記憶部８０ａから読み出される複数のリズム抽出パラメータとの相互相関が算出され、最も相関の大きなリズムが、入力音響信号のリズムパターンとして決定される。【選択図】図２
2008275975.tif 000002
【特許請求の範囲】
【請求項１】
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを特徴とするリズム検出装置。
【請求項２】
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを特徴とするリズム検出装置。
【請求項３】
上記パワーの増分値の合計の局所的なピークを検出するピーク検出手段は、上記パワーの増分値の合計の最大値を求め、その後所定の時間毎のパワーの増分値の合計を平滑化してから、各最大値の所定分の比率より小さな増分値を全て０にして、残った所定の時間毎の局所的なピークを検出することを特徴とする請求項１又は２記載のリズム検出装置。
【請求項４】
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを特徴とするリズム検出装置。
【請求項５】
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを特徴とするリズム検出装置。
【請求項６】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔で周期を持つ関数との相互相関を計算して、求めることを特徴とする請求項４又は５記載のリズム検出装置。
【請求項７】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔に＋α又は−αの間隔を加算した関数との相互相関を計算して求めることを特徴とする請求項４〜６いずれか１つに記載のリズム検出装置。
【請求項８】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を計算して求めることを特徴とする請求項４〜７いずれか１つに記載のリズム検出装置。
【請求項９】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を、その途中のビート位置をずらして計算することにより求めることを特徴とする請求項４〜８いずれか１つに記載のリズム検出装置。
【請求項１０】
上記パワーの増分値の合計の局所的なピークを検出するピーク検出手段は、上記パワーの増分値の合計の最大値を求め、その後所定の時間毎のパワーの増分値の合計を平滑化してから、各最大値の所定分の比率より小さな増分値を全て０にして、残った所定の時間毎の局所的なピークを検出することを特徴とする請求項４〜９いずれか１つに記載のリズム検出装置。
【請求項１１】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラム。
【請求項１２】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラム。
【請求項１３】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラム。
【請求項１４】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、音楽ＣＤ等の音楽音響信号（オーディオ信号）からその中で演奏されているリズムパターンを検出するリズム検出装置及びリズム検出用コンピュータ・プログラムに関する。
【背景技術】
【０００２】
オーディオ信号からドラム音を自動採譜する装置として、例えば、後述する特許文献１がある。同文献では、ＦＩＲ（有限区間インパルス応答）フィルタを用いてバスドラム、スネアドラム等の音を検出し、ドラム音を自動採譜している。
【０００３】
このようにして、ドラムのパートを自動採譜して、それとあらかじめ用意したリズムパターンのデータベースとのマッチングを取ってリズムパターンを検出することもできる。
【特許文献１】特開平６−２７９４０号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、この方法では、ドラム以外の他のリズム楽器、例えば、ベースやギター、ピアノ等の演奏するリズムは判定に一切使われない。また、ＦＩＲフィルタの係数を求めるために使ったバスドラム、スネアドラム等の波形と、検出するオーディオ信号の中に含まれるバスドラム、スネアドラム等の波形とは必ずしも一致するとは限らない。
【０００５】
本発明は、以上のような問題に鑑み創案されたもので、どのような楽器からもリズムパターンの検出が可能なリズム検出装置及びリズム検出用コンピュータ・プログラムを提供せんとするものである。
【課題を解決するための手段】
【０００６】
このような問題を解決するため、本発明では、入力された音響信号の波形を所定の時間間隔（後の実施例では、フレームと言う）でＦＦＴ演算し、求められたパワースペクトルから各音階音のパワーを求め、この各音階音のパワーの所定の時間毎の増分値を算出し、これを全音階音で合計して所定の時間毎の全体の音の変化度合いを求め、この所定の時間毎の全体の音の変化度合いのピークからリズム情報、すなわちリズム抽出パラメータを生成し、このリズム抽出パラメータと、予め用意し記憶されているリズム抽出パラメータ（リズムパターン）とのマッチングを取ることにより、或いは、抽出・生成されたリズム抽出パラメータと、後述するように、演奏データ記憶手段に記憶された演奏データから抽出された各演奏データのリズム抽出パラメータとのマッチングを取ることにより、入力された音響信号のリズムパターンを検出しようというものである。
【０００７】
すなわち本発明に係るリズム検出装置は、より具体的には、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを基本的特徴としている。
【０００８】
上記構成によれば、上記リズムパターン決定手段において、最終的に上記リズム抽出パラメータ算出手段により入力音響信号から抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関が算出され、最も相関の大きなリズムが、入力音響信号のリズムパターンとして決定されることになる。
【０００９】
またこのようなリズムパターン決定の前提となる、ビート（拍）間隔、各ビート位置、拍子及び小節（１拍目の位置）の検出では、入力手段に入力された音響信号から所定の時間毎の各音階音のパワースペクトルを音階音パワー検出手段によって求め、上記パワー増分値算出手段によって、この所定の時間毎（フレーム毎）の各音階音のパワーの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、さらにビート検出手段により、この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次に上記小節検出手段により、このビート毎の各音階音のパワーの平均値を計算し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す上記値求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置（１拍目の位置）を検出することになる。それを前提として、上記リズムパターンは決定されることになる。
【００１０】
上記請求項１の構成では、リズムパターン決定手段において、入力音響信号のリズムパターンを決定するために、予めリズム抽出パラメータ記憶手段に記憶させておいた複数のリズム抽出パラメータをその比較対象としている。それに対し、請求項２のリズム検出装置の構成では、演奏データ記憶手段に、リズムパターンを含む複数の演奏データがプリセットされており、リアルタイムで、該演奏データ中に含まれるリズムパターンを抽出しながら、上記２つのパターンの比較を行って、入力音響信号のリズムパターンを決定する構成である。
【００１１】
すなわち、請求項２のリズム検出装置の構成では、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを特徴としている。
【００１２】
２つのリズム抽出パラメータ算出手段があるのは、上述のように、プリセット演奏データ中に含まれるリズムパターンを、リアルタイムで抽出しながら、上記２つのパターンの比較を行って、入力音響信号のリズムパターンを決定する構成だからである。
【００１３】
両構成とも、上記パワーの増分値の合計の局所的なピークを検出するピーク検出手段は、上記パワーの増分値の合計の最大値を求め、その後所定の時間毎のパワーの増分値の合計を平滑化してから、各最大値の所定分の比率より小さな増分値を全て０にして、残った所定の時間毎の局所的なピークを検出すると良い。このように処理することで、ピークがより明確に検出できるようになるからである。
【００１４】
他方、請求項４〜１０の構成は、平均的なビート間隔（テンポ）とビート位置をより誤りが少ない状態で検出できる構成に、上記リズムパターンの検出構成を、適用できるようにするものである。すなわち、その構成とは、ビート検出波形の先頭を演奏させながら、タッピング検出手段（例えばパソコンのキーボードなど）を用い、ユーザにビート位置を、タッピングしてもらうようにし、ユーザがタッピングしたビートの間隔が数拍に渡って安定してきたら（タッピングの揺らぎが一定の範囲内であると判定されたら）、その間隔をビート間隔として採用し（後述するように、テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択する）、また、安定したところのタッピング位置をビート検出の先頭ビート位置とするようにしている（正確には、揺らぎが一定の範囲内であると判定された時のタッピング位置をビート検出の先頭ビート位置として出力し、さらに、この時のビートの数値からそれより前で最も近い１拍目の位置を１拍目位置として出力している）ので、ユーザに数拍タッピングしてもらうだけで、曲全体のビート検出をより正確に行えるようになる。簡単に言えば、より誤りが少ない状態で検出できる該構成は、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出し、テンポ検出精度を上げるというものである。このように、ユーザ側に再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出し、テンポ検出精度を上げているので、それらの構成に、上記リズムパターンの検出構成を適用すれば、その検出精度はより高まることが予想される。
【００１５】
より具体的には、請求項４の構成として、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有するリズム検出装置を提案する。
【００１６】
この構成は、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出することで、テンポ検出精度を上げる上述の構成に、請求項１と同じようなリズムパターンの検出構成を適用したものである。従って、請求項１の構成より、テンポ検出精度が向上した分、リズムパターンの検出精度も向上することになる。
【００１７】
一方、請求項５のリズム検出装置の構成は、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
を有することを特徴としている。
【００１８】
この構成は、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出することで、テンポ検出精度を上げる上記構成に、請求項２と同じようなリズムパターンの検出構成を適用したものである。従って、請求項２の構成より、テンポ検出精度が向上した分、リズムパターンの検出精度も向上することになる。
【００１９】
また請求項４又は５記載のリズム検出装置の構成において、上記ビート位置確定手段によるビート位置を確定するには、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔で周期を持つ関数との相互相関を計算して、求めるようにすると、テンポ検出精度が上がり、従ってまたリズムパターンの検出精度も向上する（請求項６）。
【００２０】
さらに、請求項４〜６いずれか１つに記載のリズム検出装置において、上記ビート位置確定手段によるビート位置を確定するには、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔に＋α又は−αの間隔を加算した関数との相互相関を計算して求めるようにすると、テンポ検出精度が上がり、従ってまたリズムパターンの検出精度も向上する（請求項７）。
【００２１】
加えて、請求項４〜７いずれか１つに記載のリズム検出装置において、上記ビート位置確定手段によるビート位置を確定するには、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を計算して求めるようにすると、テンポ検出精度が上がり、従ってまたリズムパターンの検出精度も向上する（請求項８）。
【００２２】
そして、請求項４〜８いずれか１つに記載のリズム検出装置において、上記ビート位置確定手段によるビート位置を確定するには、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を、その途中のビート位置をずらして計算することにより求めるようにすると、テンポ検出精度が上がり、従ってまたリズムパターンの検出精度も向上する（請求項９）。
【００２３】
上記請求項４〜９のいずれの構成においても、上記請求項３の構成のように、上記パワーの増分値の合計の局所的なピークを検出するピーク検出手段は、上記パワーの増分値の合計の最大値を求め、その後所定の時間毎のパワーの増分値の合計を平滑化してから、各最大値の所定分の比率より小さな増分値を全て０にして、残った所定の時間毎の局所的なピークを検出すると良い（請求項１０）。このように処理することで、ピークがより明確に検出できるようになるからである。
【００２４】
請求項１１の構成は、請求項１記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【００２５】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項１に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【００２６】
請求項１１のより具体的構成は、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラムである。
【００２７】
請求項１２の構成は、請求項２記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定しており、より具体的には、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
該パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出手段と、
このビート毎の各音階音のパワーの平均値を算出し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラムである。
【００２８】
請求項１３の構成は、請求項４記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定しており、より具体的には、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出手段と、
プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶手段と、
入力音響信号から最終的に上記リズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶手段から読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラムである。
【００２９】
請求項１４の構成は、請求項５記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定しており、より具体的には、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出手段と、
この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザの拍子の入力を受ける拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記タッピングテンポ出力手段から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と、
上記パワー増分値算出手段によって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出手段と、
所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出する第１のリズム抽出パラメータ算出手段と、
リズムパターンを含む複数の演奏データをプリセットしておく演奏データ記憶手段と、
該演奏データ記憶手段から、それらに含まれる複数のリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計して正規化し、複数のリズム抽出パラメータとして算出する第２のリズム抽出パラメータ算出手段と、
入力音響信号から最終的に上記第１のリズム抽出パラメータ算出手段により抽出された上記リズム抽出パラメータと、プリセットリズムパターンから最終的に上記第２のリズム抽出パラメータ算出手段により抽出された複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定手段と
して機能させることを特徴とするリズム検出用コンピュータプログラムである。
【００３０】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【００３１】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【００３２】
尚、請求項１１〜１４いずれか１つに記載の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能（コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い）によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【００３３】
これは、請求項１、２、４又は５に規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【００３４】
本発明の請求項１〜請求項１４記載のリズム検出装置及びリズム検出用コンピュータ・プログラムによれば、どのような楽器からもリズムパターンの検出ができるようになるという優れた効果を奏し得る。
【００３５】
特に請求項４〜１０のリズム検出装置及び請求項１３及び１４のコンピュータ・プログラムによれば、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出することで、テンポ検出精度を上げる構成に、上記のようなリズムパターンの検出構成を適用したものであるため、他の請求項の構成より、テンポ検出精度が向上した分、リズムパターンの検出精度もさらに向上している。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の実施の形態を図示例と共に説明する。
【実施例１】
【００３７】
図１は、本発明の望ましい実施形態が適用されるパーソナルコンピュータの構成を示している。同図の構成では、後述するＣＤ−ＲＯＭドライブ１０１６に、ＣＤ−ＲＯＭ１０１８を入れて、それに読み込ませ、実行された場合に、該パーソナルコンピュータが、本発明のリズム検出装置として利用可能なプログラムが、該ＣＤ−ＲＯＭ１０１８に格納されている。従って、このＣＤ−ＲＯＭ１０１８を上記ＣＤ−ＲＯＭドライブ１０１６に読み込ませて実行させ、パーソナルコンピュータ上に、本発明のリズム検出装置が実現されることになる。
【００３８】
図１に示されるパーソナルコンピュータの回路概要は、システムバス１０００を介して、ＣＰＵ１００２、ＲＯＭ１００４、ＲＡＭ１００６、画像コントロール部（図示無し）を介して接続されるディスプレイ１００８、Ｉ／Ｏインターフェース１０１０、ハードディスクドライブ１０２０がつながっており、該システムバス１０００を介して、夫々のデバイスに制御信号、データの入出力がなされることになる。
【００３９】
ＣＰＵ１００２は、ＣＤ−ＲＯＭドライブ１０１６により上記ＣＤ−ＲＯＭ１０１８から読み込まれ、ハードディスクドライブ１０２０乃至ＲＡＭ１００６に格納される上記プログラムに基づき、リズム検出装置全体の制御を行う中央演算処理装置である。また後述する音階音パワー検出部２０ａと、パワー増分値算出部３０ａと、ビート検出部４０ａと、小節検出部５０ａと、ピーク検出部６０ａと、リズム抽出パラメータ算出部７０ａと、リズムパターン決定部９０ａとは、上記プログラムが稼働した該ＣＰＵ１００２によって構成されることになる。
【００４０】
ＲＯＭ１００４は、本パーソナルコンピュータのＢＩＯＳなどが記憶されている格納領域である。
【００４１】
ＲＡＭ１００６は、本プログラムの格納エリアの他、ワークエリア、種々の係数、パラメータ等の、一時的な記憶領域（例えば後述するような各変数を一時的に記憶しておく）等として使用される。
【００４２】
ディスプレイ１００８は、ＣＰＵ１００２の指令により、必要な画像処理を行う画像コントロール部（図示無し）によって、制御されており、その画像処理結果を表示する。
【００４３】
Ｉ／Ｏインターフェース１０１０は、これを介してシステムバス１０００につながるキーボード１０１２、サウンドシステム１０１４及びＣＤ−ＲＯＭドライブ１０１６に接続されており、これらのデバイスとシステムバス１０００上につながった上記デバイスとの間で、制御信号やデータの入出力がなされることになる。
【００４４】
このサウンドシステム１０１４は、後述する入力部１０ａを構成するが、その他に、楽音の出力部（図示なし）を構成している。
【００４５】
またＣＤ−ＲＯＭドライブ１０１６は、リズム検出用のプログラムが格納されたＣＤ−ＲＯＭ１０１８から、該プログラムやデータなどを読み出す。そのプログラムやデータなどは、ハードディスクドライブ１０２０に格納され、またメインとなるプログラムは上記ＲＡＭ１００６上に格納され、ＣＰＵ１００２により実行される。
【００４６】
上述のように、ハードディスクドライブ１０２０は、上記リズム検出用プログラムの読み込み及びその実行によって、該プログラム自身と必要なデータ等を格納する。該データとしては、後述するリズム抽出パラメータなどがあり、ハードディスクドライブ１０２０は、後述するリズム抽出パラメータ記憶部８０ａとしても機能する。該ハードディスクドライブに記憶されるデータは、サウンドシステム１０１４やＣＤ−ＲＯＭドライブ１０１６から入力されるものと同等の演奏データや、上述のリズム抽出パラメータなどがある。
【００４７】
本実施形態に係るリズム検出用プログラムを、パーソナルコンピュータ（ＲＡＭ１００６及びハードディスクドライブ１０２０）に読み込ませて、（ＣＰＵ１００２に）実行させることで、図２に示すようなリズム検出装置の構成となる。
【００４８】
図２は、本発明に係るリズム検出装置の全体ブロック図である。同図によれば、本リズム検出装置の構成は、音響信号を入力する入力部１０ａと、入力された音響信号から、所定の時間間隔（所定のフレーム；窓）で、ＦＦＴ演算を行い、所定の時間毎の各音階音のパワースペクトルを求める音階音パワー検出部２０ａと、この所定の時間毎の各音階音のパワースペクトルの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出部３０ａと、この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するビート検出部４０ａと、このビート毎の各音階音のパワーの平均値を計算し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す値を求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置を検出する小節検出部５０ａと、上記パワー増分値算出部３０ａによって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出部６０ａと、所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出部７０ａと、プリセット伴奏データ（プリセット演奏データ）中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶部８０ａと、入力音響信号から最終的に上記リズム抽出パラメータ算出部７０ａにより抽出された上記リズム抽出パラメータと上記リズム抽出パラメータ記憶部８０ａから読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定部９０ａとを有している。
【００４９】
音楽音響信号を入力する上記入力部１０ａは、テンポ及びリズム検出をする対象の音楽音響信号を入力する部分であり、上述のように、サウンドシステム１０１４により構成されている。マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器（図示無し）によりディジタル信号に変換しても良いし、音楽ＣＤなどのディジタル化された音楽データの場合は、そのままファイルとして取り込み（リッピング）、これを指定して開くようにしても良い。このようにして入力したディジタル信号がステレオの場合、後の処理を簡略化するためにモノラルに変換する。
【００５０】
このディジタル信号は、音階音パワー検出部２０ａに入力される。この音階音パワー検出部２０ａは図３の各部から構成される。
【００５１】
そのうち波形前処理部２１は、音楽音響信号の上記入力部１０ａからの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする構成である。
【００５２】
ダウンサンプリングレートは、ビート検出に使う楽器の音域によって決定する。すなわち、シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、ダウンサンプリング後のサンプリング周波数はそれほど高くする必要はない。
【００５３】
例えば検出する最高音をＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数は、ナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【００５４】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。
【００５５】
このようにダウンサンプリングの処理を行うのは、この後のＦＦＴ演算において、同じ周波数分解能を得るために必要なＦＦＴポイント数を下げることで、ＦＦＴの演算時間を減らすのが目的である。
【００５６】
なお、音楽ＣＤのように、音源が固定のサンプリング周波数で既にサンプリングされている場合は、このようなダウンサンプリングが必要になるが、音楽音響信号の入力部１０ａが、マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器によりディジタル信号に変換するような場合には、当然Ａ／Ｄ変換器のサンプリング周波数を、ダウンサンプリング後のサンプリング周波数に設定することで、この波形前処理部２１を省くことが可能である。
【００５７】
このようにして波形前処理部２１によるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部２１の出力信号を、ＦＦＴ演算部２２によりＦＦＴ（高速フーリエ変換）する。
【００５８】
このＦＦＴ演算部２２は、上記プログラムが稼働した該ＣＰＵ１００２によって構成されている。そしてＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出に適した値とする。つまり、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性を考慮しなくてはならない。つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし残りは０で埋めることによって、ＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、低音側のパワーも正しく検出するためには、ある程度の波形サンプル数は必要である。
【００５９】
以上のようなことを考慮し、本実施例では、ＦＦＴポイント数５１２、窓のシフトは３２サンプルで、０埋めなしという設定にした。このような設定でＦＦＴ演算を行うと、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚとなる。時間分解能約８．７ｍｓという値は、四分音符＝３００のテンポの曲で、３２分音符の長さが、２５ｍｓであることを考えると、十分な値であることがわかる。
【００６０】
このようにして、所定の時間間隔毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワースペクトルのレベルが計算され、その結果がパワー検出部２３に送られる。
【００６１】
パワー検出部２３では、同じく上記プログラムが稼働した該ＣＰＵ１００２によって構成されており、ＦＦＴ演算部２２で計算されたパワースペクトルから、各音階音のパワーを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワースペクトルから各音階音のパワーを検出するために、以下のような処理を行う。つまり、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワースペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のパワーとする。
【００６２】
すべての音階音についてパワーが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔（先の例では３２サンプル）進めて、ＦＦＴ演算部２２とパワー検出部２３を波形の終わりまで繰り返す。
【００６３】
以上により、音楽音響信号の入力部１０ａに入力された音響信号の、所定時間毎の各音階音のパワーが、バッファ２４に保存される。
【００６４】
また、図２のパワー増分値算出部３０ａは、同じく上記プログラムが稼働した該ＣＰＵ１００２によって構成されており、上記音階音パワー検出部２０ａにより、後述する図５の中段に示されるように検出される、この所定の時間（以下、この１所定時間を１フレームと呼ぶ）毎の各音階音のパワースペクトル（図５の例ではＣ１〜Ａ６の縦方向に夫々示されたパワースペクトル）の増分値を、すべての音階音について合計する機能を有しており、それによって、所定の時間毎の全体の音の変化度合いを示す、後述図５の下段に示されるパワーの増分値の合計が求められることになる。
【００６５】
すなわち、該パワー増分値算出部３０ａは、各音階音のパワー増分値の合計（前のフレームとのパワーの増分値をすべての音階音で合計したもの。前のフレームからパワーが減少している場合は０として加算する）を算出し、後述するビート検出部４０ａに出力する。
【００６６】
つまり、フレーム時間ｔにおけるｉ番目の音階音のパワーをＬｉ（ｔ）とするとき、ｉ番目の音階音のパワー増分値Ｌａｄｄｉ（ｔ）は、下式数１に示すようになり、このＬａｄｄｉ（ｔ）を使って、フレーム時間ｔにおける各音階音のパワー増分値の合計Ｌ（ｔ）は、下式数２で計算できる。ここで、Ｔは音階音の総数である。
【００６７】
【数１】
2008275975.tif 000003
【００６８】
【数２】
2008275975.tif 000004
【００６９】
この合計Ｌ（ｔ）値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
【００７０】
例として、図５に、ある曲の一部分の波形と各音階音のパワー、各音階音のパワー増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のパワーを濃淡で表したもの（下が低い音、上が高い音。この図では、Ｃ１からＡ６の範囲）、下段がフレーム毎の各音階音のパワー増分値の合計を示している。この図の各音階音のパワーは、音階音パワー検出部２０ａから出力されたものであるので、周波数分解能が約７．２Ｈｚであり、Ｇ＃２以下の一部の音階音でパワーが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のパワーが測定できないのは、問題ない。
【００７１】
この図の下段に見られるように、各音階音のパワー増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
【００７２】
次に、図２のビート検出部４０ａの構成について説明する。該ビート検出部４０ａは、図４のような処理の流れで実行される。
【００７３】
ビート検出部４０ａは、同じく上記プログラムが稼働した該ＣＰＵ１００２によって構成されており、音階音パワー検出部２０ａが出力した所定時間毎の各音階音のパワーの変化を元に平均的なビート（拍）間隔（つまりテンポ）とビートの位置を検出する。そのために、ビート検出部４０ａは、ビートの位置を求めることを目的として、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のパワー増分値の合計の自己相関から計算できる（図４；ステップＳ１００）。
【００７４】
あるフレーム時間ｔにおける各音階音のパワー増分値の合計をＬ（ｔ）とすると、この自己相関φ（τ）は、以下の式数３で計算される。
【００７５】
【数３】
2008275975.tif 000005
ここで、Ｎは総フレーム数、τは時間遅れである。
【００７６】
自己相関計算の概念図を、図６に示す。この図のように、時間遅れτがＬ（ｔ）のピークの周期の整数倍の時に、φ（τ）は大きな値となる。よって、ある範囲のτについてφ（τ）の最大値を求めれば、曲のテンポを求めることができる。
【００７７】
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符＝３０から３００の範囲を計算するならば、自己相関を計算する範囲は、０．２秒から２秒となる。時間（秒）からフレームへの変換式は、以下の数４式に示す通りとなる。
【００７８】
【数４】
2008275975.tif 000006
【００７９】
この範囲の自己相関φ（τ）が最大となるτをビート間隔としても良いが、必ずしもすべての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め（図４；ステップＳ１０２）、これら複数の候補からユーザにビート間隔を決定させるのが良い（図４；ステップＳ１０４）。この候補からの決定については、後述する実施例２で述べる。
【００８０】
このようにしてビート間隔が決定したら（決定したビート間隔をτｍａｘとする）、まず最初に先頭のビート位置を決定する。
【００８１】
先頭のビート位置の決定方法を、図７を用いて説明する。図７の上段はフレーム時間ｔにおける各音階音のパワー増分値の合計Ｌ（ｔ）で、下段Ｍ（ｔ）は決定したビート間隔τｍａｘの周期で値を持つ関数である。式で表すと、下式数５に示すようになる。
【００８２】
【数５】
2008275975.tif 000007
【００８３】
この関数Ｍ（ｔ）を、０からτｍａｘ−１の範囲でずらしながら、Ｌ（ｔ）とＭ（ｔ）の相互相関を計算する。
【００８４】
相互相関ｒ（ｓ）は、上記Ｍ（ｔ）の特性から、下式数６で計算できる。
【００８５】
【数６】
2008275975.tif 000008
【００８６】
この場合のｎは、最初の無音部分の長さに応じて適当に決めれば良い（図７の例では、ｎ＝１０）。
【００８７】
ｒ（ｓ）をｓが０からτｍａｘ−１の範囲で求め、ｒ（ｓ）が最大となるｓを求めれば、このｓのフレームが最初のビート位置である。
【００８８】
最初のビート位置が決まったら、それ以降のビートの位置を１つずつ決定していく（図４；ステップＳ１０６）。
【００８９】
その方法を、図８を用いて説明する。図８の三角印の位置に先頭のビートが見つかったとする。２番目のビート位置は、この先頭のビート位置からビート間隔τｍａｘだけ離れた位置を仮のビート位置とし、その近辺でＬ（ｔ）とＭ（ｔ）が最も相関が取れる位置から決定する。つまり、先頭のビート位置をｂ０とするとき、以下の式のｒ（ｓ）が最大となるようなｓの値を求める。この式のｓは仮のビート位置からのずれで、以下の式数７の範囲の整数とする。Ｆは揺らぎのパラメータで０．１程度の値が適当であるが、テンポの揺らぎの大きい曲では、もっと大きな値にしてもよい。ｎは５程度でよい。
【００９０】
ｋは、ｓの値に応じて変える係数で、例えば図９のような正規分布とする。
【００９１】
【数７】
2008275975.tif 000009
【００９２】
ｒ（ｓ）が最大となるようなｓの値が求まれば、２番目のビート位置ｂ１は、下式数８で計算される。
【００９３】
【数８】
2008275975.tif 000010
【００９４】
以降、同じようにして３番目以降のビート位置も求めることができる。
【００９５】
テンポがほとんど変わらない曲ではこの方法でビート位置を曲の終わりまで求めることができるが、実際の演奏は多少テンポが揺らいだり、部分的にだんだん遅くなったりすることがよくある。
【００９６】
そこで、これらのテンポの揺らぎにも対応できるように以下のような方法を考えた。
【００９７】
つまり、図８のＭ（ｔ）の関数を、図１０のように変化させるものである。
１）は、従来の方法で、図のように各パルスの間隔をτ１、τ２、τ３、τ４としたとき、
τ１＝τ２＝τ３＝τ４＝τｍａｘ
である。
２）は、τ１からτ４を均等に大きくしたり小さくしたりするものである。
τ１＝τ２＝τ３＝τ４＝τｍａｘ＋ｓ  (-τｍａｘ・Ｆ≦ｓ≦τｍａｘ・Ｆ）これにより、急にテンポが変わった場合に対応できる。
３）は、ｒｉｔ．（リタルダンド、だんだん遅く）又は、ａｃｃｅｌ．（アッチェレランド、だんだん速く）に対応したもので、各パルス間隔は、
τ１＝τｍａｘ
τ２＝τｍａｘ＋１・ｓ
τ３＝τｍａｘ＋２・ｓ  （-τｍａｘ・Ｆ≦ｓ≦τｍａｘ・Ｆ）
τ４＝τｍａｘ＋４・ｓ
で計算される。
１、２、４の係数は、あくまで例であり、テンポ変化の大きさによって変えてもよい。
４）は、３）のようなｒｉｔ．やａｃｃｅｌ．の場合の、５個のパルスの位置のどこが現在ビートを求めようとしている場所かを変えるものである。
【００９８】
これらをすべて組み合わせて、Ｌ（ｔ）とＭ（ｔ）の相関を計算し、それらの最大からビート位置を決めれば、テンポが揺らぐ曲に対してもビート位置の決定が可能である。なお、２）と３）の場合には、相関を計算するときの係数ｋの値を、やはりｓの値に応じて変えるようにする。
【００９９】
さらに、５個のパルスの大きさは現在すべて同じにしてあるが、ビートを求める位置（図１０の仮のビート位置）のパルスのみ大きくしたり、ビートを求める位置から離れるほど値を小さくして、ビートを求める位置の各音階音のパワー増分値の合計を強調するようにしてもよい［図１０の５）］。
【０１００】
以上のようにして、各ビートの位置が決定したら、この結果をバッファ４１に保存すると共に、検出した結果を表示し、ユーザに確認してもらい、間違っている箇所を修正してもらうようにしてもよい。
【０１０１】
ビート検出結果の確認画面の例を、図１１に示す。同図の三角印の位置が検出したビート位置である。
【０１０２】
「再生」のボタンを押すと、現在の音楽音響信号が、Ｄ／Ａ変換され、スピーカ等から再生される。現在の再生位置は、図のように縦線等の再生位置ポインタで表示されるので、演奏を聞きながら、ビート検出位置の誤りを確認できる。さらに、検出の元波形の再生と同時に、ビート位置のタイミングで例えばメトロノームのような音を再生させるようにすれば、目で確認するだけでなく音でも確認でき、より容易に誤検出を判断できる。このメトロノームの音を再生させる方法としては、例えばＭＩＤＩ機器等が考えられる。
【０１０３】
ビート検出位置の修正は、「ビート位置の修正」ボタンを押して行う。このボタンを押すと、画面に十字のカーソルが現れるので、最初のビート検出が間違っている箇所で正しいビート位置をクリックする。クリックされた場所の少し前（例えばτｍａｘの半分の位置）から後のビート位置をすべてクリアし、クリックされた場所を、仮のビート位置として、以降のビート位置を再検出する。
【０１０４】
次に、上記小節検出部５０ａによる拍子および小節の検出について説明する。
【０１０５】
これまでの処理で、ビートの位置が確定しているので、今度は、小節検出部５０ａによって、まずはビート毎の音の変化度合いを求める。該小節検出部５０ａは、同じく上記プログラムが稼働した該ＣＰＵ１００２によって構成されいる。そしてビート毎の音の変化度合いは、音階音パワー検出部２０ａが出力した、フレーム毎の各音階音のパワーから計算する。
【０１０６】
ｊ番目のビートのフレーム数をｂｊとし、その前後のビートのフレームをｂｊ−１、ｂｊ＋１とする時、ｊ番目のビートのビート毎の音の変化度合いは、フレームｂｊ−１からｂｊ−１までのフレームの各音階音のパワーの平均とフレームｂｊからｂｊ＋１−１までのフレームの各音階音のパワーの平均を計算し、その増分値から各音階音のビート毎の音の変化度合いを求め、それらをすべての音階音で合計して計算することができる。
【０１０７】
つまり、フレーム時間ｔにおけるｉ番目の音階音のパワーをＬｉ（ｔ）とするとき、ｊ番目のビートのｉ番目の音階音のパワーの平均Ｌａｖｇｉ（ｊ）は、下式数９であるから、ｊ番目のビートのｉ番目の音階音のビート毎の音の変化度合いＢａｄｄｉ（ｊ）は、下式数１０に示すようになる。
【０１０８】
【数９】
2008275975.tif 000011
【０１０９】
【数１０】
2008275975.tif 000012
【０１１０】
よって、ｊ番目のビートのビート毎の音の変化度合いＢ（ｊ）は、下式数１１に示すようになる。ここで、Ｔは音階音の総数である。
【０１１１】
【数１１】
2008275975.tif 000013
【０１１２】
図１２の最下段は、このビート毎の音の変化度合いである。さらに、上記小節検出部５０ａは、このビート毎の音の変化度合いから、拍子と１拍目の位置を求める。
【０１１３】
拍子は、ビート毎の音の変化度合いの自己相関から求める。一般的に音楽は１拍目で音が変わることが多いと考えられるので、このビート毎の音の変化度合いの自己相関から拍子を求めることができる。例えば、下式数１２に示す自己相関φ（τ）を求める式から、ビート毎の音の変化度合いＢ（ｊ）の自己相関φ（τ）を遅れτが、２から４の範囲で求め、自己相関φ（τ）が最大となる遅れτを拍子の数とする。
【０１１４】
【数１２】
2008275975.tif 000014
【０１１５】
Ｎは、総ビート数、τ＝２〜４の範囲でφ（τ）を計算し、φ（τ）が最大となるτを拍子の数とする。
【０１１６】
次に１拍目を求めるが、これは、ビート毎の音の変化度合いＢ（ｊ）がもっとも大きい箇所を１拍目とする。つまり、φ（τ）が最大となるτをτｍａｘ、下式数１３のＸ（ｋ）が最大となるｋをｋｍａｘとするとき、ｋｍａｘ番目のビートが最初の１拍目の位置となり、以降、τｍａｘを足したビート位置が１拍目となる。
【０１１７】
【数１３】
2008275975.tif 000015
ｎｍａｘは、τｍａｘ・ｎ＋ｋ＜Ｎの条件で最大となるｎ
【０１１８】
以上のようにして、小節検出部５０ａにより、拍子及び１拍目の位置（小節線の位置）が決定したら、この結果をバッファ５１に保存すると共に、検出した結果を画面表示して、ユーザに変更させるようにすることが望ましい。特に変拍子の曲は、この方法では対応できないので、変拍子の箇所をユーザに指定してもらう必要がある。
【０１１９】
以上の構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート（拍）の位置、さらに曲の拍子と１拍目の位置を検出することが可能となる。
【０１２０】
次に、リズムパターンの検出について説明する。
【０１２１】
これまでの処理で、平均的なテンポ、ビート位置、拍子及び１拍目の位置が確定しているので、今度は、テンポ検出に用いたフレーム毎の全体の音の変化度合いのピークをピーク検出部６０ａにより検出し、そのピークから、さらに、リズム抽出パラメータ算出部７０ａによって、リズムに関するパラメータ（リズム抽出パラメータ）を抽出する。その後上記リズム抽出パラメータ記憶部８０ａに記憶されたプリセット伴奏データ中に含まれる各リズム抽出パラメータとマッチングして、リズムパターン決定部９０ａにより、入力音響信号のリズムパターンとして決定することになる。
【０１２２】
上記ピーク検出部６０ａ、リズム抽出パラメータ算出部７０ａ及びリズムパターン決定部９０ａは、上記プログラムが稼働した該ＣＰＵ１００２によって構成されている。また上記リズム抽出パラメータ記憶部８０ａは、上記ハードディスクドライブ１０２０により構成される。
【０１２３】
図１３は、リズムを検出しようとする曲に対してのリズム抽出パラメータの算出工程を示すフローチャートであり、図１４は、このフローチャートに従って、求められた検出元波形からリズム抽出パラメータを示すグラフである。
【０１２４】
図１４の最上段に示すように、元波形が入力されると、上述のようにして、各音階音のパワー増分値の合計Ｌ(t)が求められる。
【０１２５】
この各音階音のパワー増分値の合計Ｌ(t)は、そのままでは、値の変動が激しく局所的なピークを計算しにくいので、一旦該合計Ｌ(t)の最大値Ｌｍａｘを計算し（ステップＳ２００）、図１４の４段目のＬ(t)を平滑化したＬ(t)'を計算する（ステップＳ２０２）。
【０１２６】
このように合計Ｌ(t)を平滑化してから、ピークがより明確に検出できるようにするため、各最大値の所定分の比率より小さな増分値を全て０にして、残った所定の時間毎の局所的なピークを検出する。その際、上方向ベクトルから下方向ベクトルに変わるところをピークとして、図１４の５段目に示すＬp(t)を計算する（ステップＳ２０４）。
【０１２７】
上記ピーク検出部６０ａは、上述のように、上記パワー増分値算出部３０ａによって求められた、図１４の２段目に示されたような所定の時間毎の全体の音の変化度合い（テンポ検出に用いたフレーム毎の全体の音の変化度合い）を示すパワーの増分値の合計についての、局所的なピークを検出する。
【０１２８】
図１４の第４段目に示されるように、局所的なピークは、まず、幾つかのフレームの値をまとめて滑らかにし、その後極大値を求めることにより得る。
【０１２９】
ｔは、図１４に記載してあるように、フレーム（窓）数であり（Ｎは総フレーム数）、同図３段目に示すビート位置（上向き三角形）の各間隔を１６分割したｋ（ビートを１６個に区切った単位）の値に直す。すなわち、ビート区間を１６に分割した各区間でＬp(t)の最大値を計算して、図１４の６段目に示す曲のリズム抽出パラメータＲ(k)を求める（ステップＳ２０６）。
【０１３０】
さらに、該Ｒ(k)の最大値を計算して、後述するように、リズム抽出パラメータ記憶部８０ａに記憶された各リズム抽出パラメータとのマッチングを容易にするため、Ｒ(k)を１２７で正規化した値にする（ステップＳ２０８）。
【０１３１】
図１５は、上記図１３のステップＳ２０２の、各音階音のパワー増分値の合計Ｌ(t)の平滑化算出処理フロー［Ｌ(t)'を求める処理］を示すフローチャートである。
【０１３２】
まずフレーム時間である変数ｔを初期化する（ステップＳ３００）。そして該フレームｔが総フレーム数Ｎを超えない範囲であるか否かをチェックする（ステップＳ３０２）。ここで、フレームｔが総フレーム数Ｎ以上になったら（波形の分析処理の終わりまで達したら；ステップＳ３０２；Ｙ）、そこで、平滑化算出処理［Ｌ(t)'を求める処理］を終了する。
【０１３３】
反対にフレームｔが総フレーム数Ｎより少ない値なら（Ｓ３０２；Ｎ）、フレームｔを４で割り残った余り（ｔ％４）が３であるか否かをチェックする（ステップＳ３０４）。ここでは、フレーム数Ｎが４回に１回、Ｌ(t)の最大値を求めるので、余り（ｔ％４）が３であれば（ステップＳ３０４；Ｙ）、その最大値変数Ｍａｘの値と４回をカウントするカウンタ変数ｊを初期化し（ステップＳ３０６）、以下に示すように処理を４回ループさせながら、Ｌ(t−j)の最大値Ｍａｘを求める。
【０１３４】
すなわち、その後変数ｊが４になるまで（４回ループを回すまで）４回の中での各音階音のパワー増分値の合計Ｌ(t)の最大値を求める処理が行われる。すなわち、変数ｊが４より小さい場合（ステップＳ３０８；Ｙ）、各フレーム毎（ｔ−ｊ）の各音階音のパワー増分値の合計Ｌ(t−j)が上記最大値Ｍａｘを超えているか否かをチェックする（ステップＳ３１０）。合計Ｌ(t−j)が上記最大値Ｍａｘを超えている場合（ステップＳ３１０；Ｙ）、その合計Ｌ(t−j)を最大値Ｍａｘにセットし（ステップＳ３１２）、さらに変数ｊをカウンタでインクリメントして（ステップＳ３１４）、上記ステップＳ３０８に復帰させる。すなわち、上記各４回の中での各音階音のパワー増分値の合計Ｌ(t−j)の最大値Ｍａｘを求める計算処理を行う。上記ステップＳ３１０で、各音階音のパワー増分値の合計Ｌ(t−j)が上記最大値Ｍａｘ以下の場合（ステップＳ３１０；Ｎ)、該Ｍａｘがすでに最大値であるので、ステップＳ３１２をジャンプさせてステップＳ３１４に移行させる。
【０１３５】
他方、上記変数ｊが４以上になった場合（すなわち、４回ループしてその間の最大値を求めた後；ステップＳ３０８；Ｎ）、カウンタ変数ｊを初期化し（ステップＳ３１６）、以下に示すように、Ｌ(t−j)'に、４回の中でのＬ(t)の最大値Ｍａｘを代入する処理（ステップＳ３２０）を４回ループさせながら繰り返す。すなわち、変数ｊが４より小さい場合（ステップＳ３１８；Ｙ）、各フレーム毎（ｔ−ｊ）の各音階音のパワー増分値の合計Ｌ(t−j)'を、既に求めた上記最大値Ｍａｘを代入して（ステップＳ３２０）、変数ｊをカウンタでインクリメントし（ステップＳ３２２）、上記ステップＳ３１８に復帰させ、Ｌ(t)'に４回の中でのＬ(t)の最大値Ｍａｘを埋めることで、平滑化処理を行う。変数ｊをインクリメント後（ステップＳ３２２）、該変数ｊが４以上の値になったら（ステップＳ３１８；Ｎ）、後述するステップＳ３２４に移行して、フレームｔをカウンタでインクリメントさせ（ステップＳ３２４）、上記ステップＳ３０２に復帰させ、フレームｔが総フレーム数Ｎ以上になるまで、上記の処理を繰り返す。
【０１３６】
また、上記ステップＳ３０４で、フレームｔを４で割り残った余り（ｔ％４）が３以外の場合（ステップＳ３０４；Ｎ）も、ステップＳ３２４に移行して、フレームｔをカウンタでインクリメントさせ（ステップＳ３２４）、上記ステップＳ３０２に復帰させ、フレームｔが総フレーム数Ｎ以上になるまで、上記の処理を繰り返す。
【０１３７】
図１６は、上記図１３のＬ(t)'のピークＬp(t)を算出する計算処理フローを示すフローチャートである。
【０１３８】
まずピーク値として求められる全ての変数Ｌp(t)を０に初期化する（ステップＳ４００）。ここで、フレームｔは０以上総フレーム数Ｎ未満の値をとるが、次のステップＳ４０２で、該フレームｔの値を４にセットして（ステップＳ４０２）、初期化する。これは、以下に示す処理で、Ｌ(t-4)、Ｌ(t+1)を計算しているので、フレームｔの値は４〜Ｎ-1以下までにする必要があるからである。
【０１３９】
そして、フレームｔが最後の値Ｎ-1までになったか否か、すなわち該値がＮ-1未満であるか否かをチェックする（ステップＳ４０４）。フレームｔがＮ-1以上であれば（ステップＳ４０４；Ｎ）、そこで処理は終了する。
【０１４０】
反対にフレームｔがＮ-1未満であれば（ステップＳ４０４；Ｙ）、平滑化したＬ(t)'の値が、現在のフレームｔより４フレーム前の値Ｌ(t-4)より大きく、且つ１フレーム後Ｌ(t+1)よりも大きいか否かをチェックする（ステップＳ４０６）。すなわち、このステップＳ４０６では、平滑化したＬ(t)'の値が、増加から減少に変わるところ、すなわちピークを検出しようとしている。
【０１４１】
Ｌ(t)'の値が、現在のフレームｔより４フレーム前の値Ｌ(t-4)より大きく、且つ１フレーム後Ｌ(t+1)よりも大きいという条件を満たさない場合（ステップＳ４０６；Ｎ）、すなわち、Ｌ(t)'の値がまだピーク値を示していない場合、後述するステップＳ４１２に移行し、フレームｔをカウンタによりインクリメントする（ステップＳ４１２）。
【０１４２】
反対にＬ(t)'の値が、現在のフレームｔより４フレーム前の値Ｌ(t-4)より大きく、且つ１フレーム後Ｌ(t+1)よりも大きい場合（ステップＳ４０６；Ｙ）、すなわち、Ｌ(t)'の値がピーク値を示している場合、平滑化したＬ(t)'の値がＬ(t)の最大値Ｌｍａｘの１／４以下か否かをチェックする（ステップ４０８）。すなわち、最初にＬp(t)の値は０に初期化しているので０のままにし、ここでは、Ｌ(t)の最大値Ｌｍａｘの１／４以下のデータは、次のステップで無視することになる。
【０１４３】
Ｌ(t)'の値が、Ｌ(t)の最大値Ｌｍａｘの１／４よりも大きい場合（ステップＳ４０８；Ｙ）、Ｌp(t)の値に、平滑化したＬ(t)'の値を代入して、ピークを残す（ステップＳ４１０）。
【０１４４】
その後、或いは、Ｌ(t)'の値が、Ｌ(t)の最大値Ｌｍａｘの１／４以下の場合（ステップＳ４０８；Ｎ）、上記ステップＳ４１２に移行し、フレームｔをカウンタによりインクリメントし（ステップＳ４１２）、フレームｔがＮ−１以上になるまで、上記処理を繰り返す。
【０１４５】
以上の処理で、Ｌ(t)'の局所的なピーク（値が一旦上がりさらに下がっているところ）以外は全て０になる。あまり小さな値（Ｌｍａｘの１／４以下の値）は、ノイズなどによるものであるので、無視することになる。
【０１４６】
他方本プログラムが稼働したときにユーザの選択により演奏される伴奏データは、上記ハードディスクドライブ１０２０上にプリセットされており（場合により後からユーザが追加することが可能）、図１７は、そのうちの１つの伴奏データの各パート毎のイベントを示しており、同図（ａ）はピアノパート、また同図（ｅ）はベース、同図（ｆ）（ｇ）はパーカッションを各示している。また各図の下には夫々のイベントのベロシティデータが一緒に示されている。
【０１４７】
以上のような伴奏データの中には対応するリズムパターンがあるはずである。上記リズム抽出パラメータ記憶部８０ａには、このハードディスクドライブ１０２０上に設定されており、プリセット伴奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、夫々の伴奏パターンデータと共に、予め複数記憶してある。
【０１４８】
図１８は、リズム抽出パラメータ記憶部８０ａに記憶された、プリセット伴奏データ中に含まれるリズムパターンのリズム抽出パラメータについて、記憶する前にどのように抽出されたかを示す算出方法の処理フローチャートである。
【０１４９】
まず、リズム抽出パラメータＱ(k)を０に、すなわち、初期化する（ステップＳ５００）。そして、ユーザの選択により演奏される伴奏データ（スタンダードミディファイル；ＳＭＦ）を開く（ステップＳ５０２）。
【０１５０】
次に全トラックのイベントからＮｏｔｅＯｎイベントを抽出する（ステップＳ５０４）。そしてイベントの時刻が拍の１／１６毎の区間のどの場所(k)になるかを計算する（ステップＳ５０６）。
【０１５１】
その場所(k)のリズム抽出パラメータＱ(k)にこのＮｏｔｅＯｎイベントのベロシティ値を加算する（ステップＳ５０８）。
【０１５２】
以上の処理が現在の伴奏データ（ＳＭＦ）の全てのイベントについて行われたか否かをチェックする（ステップＳ５１０）。全てのイベントについて行われていなければ（ステップＳ５１０；Ｎ）、上記ステップＳ５０４に復帰し、以上の処理を伴奏データの終わりまで繰り返す。
【０１５３】
反対に全てのイベントについて行われた場合（ステップＳ５１０；Ｙ）、リズム抽出パラメータＱ(k)の最大値を計算して、該リズム抽出パラメータＱ(k)を１２７の値で正規化する（ステップＳ５１２）。
【０１５４】
以上の処理で得られるものは、拍（４分の４拍子の場合、４分音符）の１／１６の区間毎に存在するＮｏｔｅＯｎイベントのベロシティ値を合計したものを１２７の値で正規化した、リズム抽出パターンが得られることになる。
【０１５５】
上記リズムパターン決定部９０ａは、同じく上記プログラムが稼働した該ＣＰＵ１００２によって構成されている。該構成は、入力音響信号から最終的に上記リズム抽出パラメータ算出部７０ａにより抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶部８０ａから読み出される複数のリズム抽出パラメータとの、相互相関を算出して、最も相関の大きなリズムを入力音響信号のリズムパターンとして決定する機能を果たす構成である。すなわち、入力音響信号の波形から抽出されたリズム抽出パラメータと、プリセットリズムパターンのＳＭＦから読み出されたリズム抽出パラメータとの相互相関を、リズムパターン決定部９０ａによって計算し、最も相関の大きなリズムを入力波形のリズムパターンとして選択することになる。
【０１５６】
この相互相関の計算は、図１４の６段目［検出曲のリズム抽出パラメータＲ(k)］と、７及び８段目［リズムパターン(SMF)のリズム抽出パラメータＱ(k)］との関係で示されているが、図１９の方がさらに詳しく説明されている。
【０１５７】
すなわち、入力音響信号から最終的に上記リズム抽出パラメータ算出部７０ａにより抽出された上記リズム抽出パラメータＲ(k)と、上記リズム抽出パラメータ記憶部８０ａから読み出される複数のリズム抽出パラメータＱ(k)との、相互相関を算出する場合、同図４段目の検出曲のリズム抽出パラメータＲ(k)に対して、リズム抽出パラメータ記憶部８０ａから読み出されるリズム抽出パラメータＱ(k)の１つとの相互相関を取る場合、５〜７段目に示すように、読み出されるリズム抽出パラメータＱ(k)を１小節ずつずらしながら、検出曲のリズム抽出パラメータＲ(k)との相関を計算する。
【０１５８】
より、具体的には、リズムパターン決定部９０ａは、下式数１４式に従って、相関φ(i)を計算する。
【０１５９】
【数１４】
2008275975.tif 000016
ofsNum＝（検出曲の小節数）−（リズムパターンの小節数）＋１
４分の４拍子の場合、ｍ＝６４
４分の４拍子の２小節パターンの場合、Ｍ＝１２８
【０１６０】
以上のようにして、求められた相互相関相関φ(i)の中から、最も相関の大きなリズムが、入力音響信号のリズムパターンとして、決定されることになる。
【０１６１】
以上の実施例１に係る構成によれば、上記リズムパターン決定部９０ａにおいて、最終的に上記リズム抽出パラメータ算出部７０ａにより入力音響信号から抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶部８０ａから読み出される複数のリズム抽出パラメータとの相互相関が算出され、最も相関の大きなリズムパターンが、入力音響信号のリズムパターンとして決定されることになる。
【０１６２】
またこのようなリズムパターン決定の前提となる、ビート（拍）間隔、各ビート位置、拍子及び小節（１拍目の位置）の検出では、入力部１０ａに入力された音響信号から所定の時間毎の各音階音のパワースペクトルを音階音パワー検出部２０ａによって求め、上記パワー増分値算出部３０ａによって、この所定の時間毎（フレーム毎）の各音階音のパワーの増分値をすべての音階音について合計して所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、上記ビート検出部４０ａにより、この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート（拍）間隔（つまりテンポ）と各ビートの位置を検出し、次に上記小節検出部５０ａにより、このビート毎の各音階音のパワーの平均値を計算し、このビート毎の各音階音の平均パワーの増分値をすべての音階音について合計して、ビート毎の全体の音の変化度合いを示す上記値求め、このビート毎の全体の音の変化度合いを示す値から、拍子と小節線位置（１拍目の位置）を検出することになる。
【０１６３】
これらの検出構成を前提として、上記リズムパターンは決定されることになるので、どのような楽器からもリズムパターンの検出ができるようになるという優れた効果がある。
【０１６４】
尚、以上の実施例構成では、伴奏データと共に、リズム抽出パラメータ記憶部８０ａにそれらのリズム抽出パラメータが予め記憶された構成としているが、伴奏データのみ記憶されていて、リアルタイムで、その伴奏データから、夫々のリズム抽出パラメータを抽出し、入力音響信号から最終的に抽出されたリズム抽出パラメータと比較するような構成としても良い。
【実施例２】
【０１６５】
実施例２の構成は、平均的なビート間隔（テンポ）とビート位置をより誤りが少ない状態で検出できる構成に、上記実施例１と同様なリズムパターンの検出構成を、適用できるようにする構成である。すなわち、その構成とは、ビート検出波形の先頭を演奏させながら、本実施例ではパソコンのキーボード１０１２で構成されるタッピング検出部１２０を用いて、ユーザにビート位置を、タッピングしてもらうようにし、ユーザがタッピングしたビートの間隔が数拍に渡って安定してきたら（タッピングの揺らぎが一定の範囲内であると判定されたら）、その間隔をビート間隔として採用し（後述するように、テンポ候補検出部１００で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択する）、また、安定したところのタッピング位置をビート検出の先頭ビート位置とするようにする構成である。
【０１６６】
そのため、ユーザに数拍タッピングしてもらうだけで、曲全体のビート検出をより正確に行えるようになる。簡単に言えば、より誤りが少ない状態で検出できる該構成は、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出し、テンポ検出精度を上げるというものである。
【０１６７】
このように、ユーザ側に再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出し、テンポ検出精度を上げているので、それらの構成に、上記リズムパターンの検出構成を適用すれば、その検出精度はより高まることが予想される。
【０１６８】
図２０は、上記パソコン上に構築された実施例２の機能ブロックを示すブロック図である。同図に示すように、本実施例構成は、音響信号を入力する信号入力部１０ｂと、入力された音響信号から、所定の時間間隔で、ＦＦＴ演算を行い、求められたパワースペクトルから所定の時間毎の各音階音のパワーを求める音階音パワー検出部２０ｂと、この所定の時間毎の各音階音のパワーの増分値をすべての音階音について合計して、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計を求めるパワー増分値算出部３０ｂと、この所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出部１００と、ユーザのタッピングによる拍子の入力を受ける拍子入力部１１０と、ユーザのタッピング入力を検出するタッピング検出部１２０と、タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録部１３０と、タッピング間隔の移動平均をとり、テンポを算出するタッピングテンポ算出部１４０と、直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出部１５０と、上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力部１６０と、上記タッピングテンポ出力部１６０から出力されたタッピングテンポを元に、該テンポ候補検出部１００で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定部１７０と、上記タッピングテンポ出力部１５０から出力されたタッピングの最後の時間とそのときのビートの数値から、それに最も近い１拍目の位置を１拍目位置として出力する１拍目位置出力部１８０と、同じく上記揺らぎ算出部１５０でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定部１７０で決定されたテンポを元に確定させるビート位置確定部１９０と、上記１拍目位置出力部１８０から出力される１拍目の位置とビート位置確定部１９０から出力される各ビート位置に基づき小節線位置を検出する小節検出部５０ｂと、上記パワー増分値算出部３０ｂによって求められた、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計の局所的なピークを検出するピーク検出部６０ｂと、所定のビート区間の上記ピークの最大値を求め、その値を正規化してリズム抽出用のパラメータとして抽出するリズム抽出パラメータ算出部７０ｂと、プリセット演奏データ中に含まれるリズムパターンの任意の音符区間毎に存在するノートオンベロシティ値を合計し正規化して抽出されるリズム抽出パラメータを、予め複数記憶しておくリズム抽出パラメータ記憶部８０ｂと、入力音響信号から最終的に上記リズム抽出パラメータ算出部７０ｂにより抽出された上記リズム抽出パラメータと、上記リズム抽出パラメータ記憶部８０ｂから読み出される複数のリズム抽出パラメータとの相互相関を算出し、最も相関の大きなリズムを、入力音響信号のリズムパターンとして決定するリズムパターン決定部９０ｂとを有する、リズム検出装置の構成である。
【０１６９】
この構成は、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出することで、テンポ検出精度を上げる構成に、実施例１と同じようなリズムパターンの検出構成を適用したものである。従って、実施例１の構成より、テンポ検出精度が向上した分、リズムパターンの検出精度も向上することになる。
【０１７０】
リズム検出用プログラムを、パーソナルコンピュータ（ＲＡＭ１００６及びハードディスクドライブ１０２０）に読み込ませて、（ＣＰＵ１００２に）実行させると、最初に、拍子入力部１１０により、図２１のような画面が表示され、ユーザは、テンポを検出しようとする曲の拍子の入力が要求され、それに応じて、拍子を入力することになる。同図では、４分の何拍子かを選択している状態を示している。
【０１７１】
上記構成のうち、入力部１０ｂ、音階音パワー検出部２０ｂ、パワー増分値算出部３０ｂ、小節検出部５０ｂ、ピーク検出部６０ｂ、リズム抽出パラメータ算出部７０ｂ、リズム抽出パラメータ記憶部８０ｂ及びリズムパターン決定部９０ｂの構成は、実施例１の夫々に該当する構成と同じなので、その詳細な説明は、省略する。
【０１７２】
本実施例構成では、上述のように、平均的なビート間隔（テンポ）とビート位置をより誤りが少ない状態で検出できるようにするために、ビート検出波形の先頭を演奏させながら、パソコンのキーボード１０１２からなるタッピング検出部１２０を用いて、ユーザにビート位置を、タッピングしてもらうようにし、ユーザがタッピングしたビートの間隔が数拍に渡って安定してきたら（タッピングの揺らぎが一定の範囲内であると揺らぎ算出部１５０の揺らぎ算出とタッピングテンポ出力部１６０による判定がなされたら）、その間隔をビート間隔として採用し（後述するように、テンポ候補検出部１００で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択する）、また、安定したところのタッピング位置をビート検出の先頭ビート位置とする（正確には、揺らぎが一定の範囲内であると判定された時のタッピング位置をビート検出の先頭ビート位置として出力し、さらに、この時のビートの数値からそれより前で最も近い１拍目の位置を１拍目位置として出力している）ようにする構成が、実施例１の構成以外に付加されている。
【０１７３】
上記残りの構成のうち、上記テンポ候補検出部１００は、上記プログラムが稼働した該ＣＰＵ１００２によって構成されており、所定の時間毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出する構成である。
【０１７４】
該テンポ候補検出部１００による処理は、図２２のような流れで実行される。
【０１７５】
テンポ候補検出部１００は、音階音パワー検出部２０ｂが出力した１フレーム毎の各音階音のパワーの変化を元に平均的なビート（拍）間隔（つまりテンポ）とビートの位置を検出する。そのために、まずテンポ候補検出部１００は、各音階音のパワー増分値の合計（前のフレームとのパワーの増分値をすべての音階音で合計したもの。前のフレームからパワーが減少している場合は０として加算する）を計算する（ステップＳ６００）。
【０１７６】
つまり、フレーム時間ｔにおけるｉ番目の音階音のパワーをＬｉ（ｔ）とするとき、ｉ番目の音階音のパワー増分値Ｌａｄｄｉ（ｔ）は、下式数１５に示すようになり、このＬａｄｄｉ（ｔ）を使って、フレーム時間ｔにおける各音階音のパワー増分値の合計Ｌ（ｔ）は、下式数１６で計算できる。ここで、Ｔは音階音の総数である。
【０１７７】
【数１５】
2008275975.tif 000017
【０１７８】
【数１６】
2008275975.tif 000018
【０１７９】
この合計Ｌ（ｔ）値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
【０１８０】
例として、図２３に、ある曲の一部分の波形と各音階音のパワー、各音階音のパワー増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のパワーを濃淡で表したもの（下が低い音、上が高い音。この図では、Ｃ１からＡ６の範囲）、下段がフレーム毎の各音階音のパワー増分値の合計を示している。この図の各音階音のパワーは、音階音パワー検出部２０ｂから出力されたものであるので、周波数分解能が約７．２Ｈｚであり、Ｇ＃２以下の一部の音階音でパワーが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のパワーが測定できないのは、問題ない。
【０１８１】
この図の下段に見られるように、各音階音のパワー増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
【０１８２】
ビートの位置を求めるために、テンポ候補検出部１００では、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のパワー増分値の合計の自己相関から計算できる（図２２；ステップＳ６０２）。
【０１８３】
あるフレーム時間ｔにおける各音階音のパワー増分値の合計をＬ（ｔ）とすると、この自己相関φ（τ）は、以下の式数１７で計算される。
【０１８４】
【数１７】
2008275975.tif 000019
ここで、Ｎは総フレーム数、τは時間遅れである。
【０１８５】
自己相関計算の概念図を、図２４に示す。この図のように、時間遅れτがＬ（ｔ）のピークの周期の整数倍の時に、φ（τ）は大きな値となる。よって、ある範囲のτについてφ（τ）の最大値を求めれば、曲のテンポを求めることができる。
【０１８６】
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符＝３０から３００の範囲を計算するならば、自己相関を計算する範囲は、０．２秒から２秒となる。時間（秒）からフレームへの変換式は、以下の数１８式に示す通りとなる。
【０１８７】
【数１８】
2008275975.tif 000020
【０１８８】
この範囲の自己相関φ（τ）が最大となるτをビート間隔としても良いが、必ずしも全ての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め（図２２；ステップＳ６０４）、これら複数の候補から、後述するように、直近の移動平均毎のタッピングテンポの揺らぎが一定の範囲内の場合になった場合にタッピングテンポ出力部１６０から出力されるタッピングテンポと上記タッピングの最後の時間とそのときのビートの数値に基づき、テンポ確定部１７０により、タッピングテンポに数値的に近いテンポが決定される（図２２；ステップＳ６０６）。
【０１８９】
図２５は、このステップＳ６０６におけるテンポ確定までの処理フローを示している。
【０１９０】
まず、ＲＡＭ１００６上に設定された変数が初期化される（ステップＳ７００）。該変数としては、タッピングされた回数（TapCt）、前回タッピングされた時の時刻（PrevTime：この変数ではNow()で現在時刻を取得する、ここではパーソナルコンピュータを起動してからの時間msが入る）、現在のビート（CurBeat；４拍子の場合、０、１、２、３の値を取る、同図のステップＳ７３０のFlashでビートの数字を光らせる場合この数字に＋１して表示している）、揺らぎチェックに合格した回数（PassCt）などがある。これらの変数が全て０にセットされる。
【０１９１】
ユーザが、再生される楽音を聴きながら、キーボード１０１２のスペースキーをタッピングすることで、該キーボード１０１２がタッピング検出部１２０として構成されるので、該タッピング検出部１２０により、タッピングがあるか否かがチェックされる（ステップＳ７０２）。タッピングがない場合（ステップＳ７０２；Ｎ）、該チェックは継続される。
【０１９２】
反対にタッピングがある場合（ステップＳ７０２；Ｙ）、タッピングされた回数（TapCt）が０回より大きいか否かがチェックされる（ステップＳ７０４）。タッピング回数（TapCt）が０回以下の場合（ステップＳ７０４；Ｎ）、変数更新処理［タッピング回数（TapCt）のインクリメントされ、前回タッピング時刻（PrevTime）が現在時刻Now()にセットされる］がなされ（ステップＳ７２８）、タッピングに合わせて中にビートの数字を書いた四角を光らせ（ステップＳ７３０）、上記ステップＳ７０２に復帰して、以上の処理を繰り返す。
【０１９３】
反対にタッピング回数（TapCt）が０回より大きい場合（ステップＳ７０４；Ｙ）、タッピング間隔［DeltaTime.Add(Now()-Prevtime)］と時刻[Time.Add(CurPlayTime)]が記録部１３０に記録される（ステップＳ７０６）。ここで、DeltaTimeは前回タッピングされた時刻から今回タッピングされた時刻までの経過時間の配列を、意味する。またCurPlayTimeは現在の再生位置、波形先頭からの時間を意味する（この値を取っておいて、テンポが最終的に確定したとき、１拍目に相当する時間をプログラムに返す）。さらにTimeはCurPlayTimeを保存しておく配列を意味する。
【０１９４】
そしてビートがインクリメントされる（ステップＳ７０８；CurBeat++）。ここでは、CurBeatが、拍子入力部１１０で入力された拍子（BeatNume；拍子の分子）−１まで進むことになる。
【０１９５】
次にタッピング回数［DeltaTime.GetSize()］がＮ（例えば４回）以上になったか否かがチェックされる（ステップＳ７１０）。タッピング回数［DeltaTime.GetSize()］がＮより小さい場合（ステップＳ７１０；Ｎ）、変数更新処理［タッピング回数（TapCt）のインクリメントされ、前回タッピング時刻（PrevTime）が現在時刻Now()にセットされる］がなされ（ステップＳ７２８）、タッピングに合わせて中にビートの数字を書いた四角を光らせ（ステップＳ７３０）、上記ステップＳ７０２に復帰して、以上の処理を繰り返す。
【０１９６】
反対にタッピング回数［DeltaTime.GetSize()］がＮ以上であると判定された場合（ステップＳ７１０；Ｙ）、タッピングテンポ算出部１４０により、後述する図２６に示す処理手順でＮ回のタッピング間隔の移動平均が計算され、タッピングテンポ値［Tempo；BMP(Beat Per Measure)で表す。４分音符＝１２０など］が算出される（ステップＳ７１２）。
【０１９７】
そのタッピングテンポがディスプレイ１００８に表示される（ステップＳ７１４）。
【０１９８】
さらに、揺らぎ算出部１５０により、後述する図２７に示す処理手順で最近Ｎ回のタッピングテンポの揺らぎが計算される（ステップＳ７１６）。
【０１９９】
そしてタッピングテンポの揺らぎがＰ％以下か否かがチェックされる（ステップＳ７１８）。該タッピングテンポの揺らぎがＰ％以下でない場合（ステップＳ７１８；Ｎ）は、揺らぎチェック合格回数（PassCt）が０にセットされる（ステップＳ７２２）。
【０２００】
反対にタッピングテンポの揺らぎがＰ％以下の場合（ステップＳ７１８；Ｙ）、揺らぎチェック合格回数（PassCt）がインクリメントされる（ステップＳ７２０）。
【０２０１】
その後揺らぎチェック合格回数（PassCt）がＭ回以上か否かがチェックされる（ステップＳ７２４）。該揺らぎチェック合格回数（PassCt）がＭ回以上でない場合（ステップＳ７２４；Ｎ）、上述と同様、変数更新処理［タッピング回数（TapCt）のインクリメントされ、前回タッピング時刻（PrevTime）が現在時刻Now()にセットされる］がなされ（ステップＳ７２８）、タッピングに合わせて中にビートの数字を書いた四角を光らせ（ステップＳ７３０）、上記ステップＳ７０２に復帰して、以上の処理を繰り返す。
【０２０２】
反対に揺らぎチェック合格回数（PassCt）がＭ回以上である場合（ステップＳ７２４；Ｙ）、タッピングテンポがタッピングテンポ出力部１６０により出力され、該タッピングテンポを元に、テンポ確定部１７０により、上記テンポ候補検出部１００で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔が選択される（ステップＳ７２６）。
【０２０３】
テンポ確定部１７０により、テンポ候補検出部１００で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔が選択されると、ビート位置確定部１９０により、タッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置が、テンポ確定部１７０により選択されたビート間隔を元に確定される。
【０２０４】
以上の処理により、最初のビート位置が決まったら、後述する方法により、それ以降のビートの位置を１つずつ決定していく（図２２；ステップＳ６０８）。
【０２０５】
図２６は、上記ステップＳ７１２の移動平均によるテンポ計算処理の処理ステップを示すフローチャートである。
【０２０６】
まず、DeltaTime（前回タッピングされた時刻から今回タッピングされた時刻までの経過時間の配列）にビート毎の重み付けをした値を加算した値（TimeSum）、平均テンポを計算する時の割る値（Deno）、ビートを数えるための変数（Beat）が０にセット、すなわち初期化される（ステップＳ８００）。
【０２０７】
ビートを数えるための変数（Beat）がＮ回より少ないか否かがチェックされる（ステップＳ８０２）。Ｎ回より少なくない場合（ステップＳ８０２；Ｎ）、すなわち、Ｎ回以上に達している場合、TimeSumの値がDenoで除算され、平均時間間隔（Avg）が算出され、この平均時間間隔（Avg）で６００００を除算して、平均テンポ値［Temp；BMP(Beat Per Measure)で表す。４分音符＝１２０など］が算出される（ステップＳ８１２）。
【０２０８】
反対にビートを数えるための変数（Beat）がＮ回より少ない場合（ステップＳ８０２；Ｙ）、すなわち、Ｎ回以上に達していない場合、これまでカウントされたタッピング回数から、ビートを数えるための変数（Beat）が減算され、さらに−１として、DeltaTimeの配列番号を表す一時的な変数Ｔが算出される（ステップＳ８０４）。変数（Beat）の値は、最も最近のタッピングされたビート（Beat）が０となり、以降Ｎ−１までの値をとる。Ｔはその夫々のビート（Beat）でのDeltaTime配列にアクセスする際のインデックスとなる。
【０２０９】
この変数Ｔが０より小さいか否かがチェックされ（ステップＳ８０６）、０より小さい場合（ステップＳ８０６；Ｙ）、TimeSumの値がDenoで除算され、平均時間間隔（Avg）が算出され、この平均時間間隔（Avg）で６００００を除算して、平均テンポ値［Temp；BMP(Beat Per Measure)で表す。４分音符＝１２０など］が算出される（ステップＳ８１２）。
【０２１０】
反対に０より小さくない場合（ステップＳ８０６；Ｎ）、上記変数（Beat）におけるDeltaTimeが重み付けされてTimeSumに加算され（ステップＳ８０８）、ビートを数えるための変数（Beat）がインクリメントされ（ステップＳ８１０）、上記ステップＳ８０２に復帰し、以上の処理を繰り返す。
【０２１１】
図２７は、上記ステップＳ７１６のテンポ揺らぎ計算処理の処理ステップを示すフローチャートである。
【０２１２】
まず、テンポ揺らぎチェックのフラグPassが１にセットされ（１の時テンポ揺らぎはＯＫを意味する）、ビートを数えるための変数（Beat）が０にセットされる（ステップＳ９００）。
【０２１３】
そしてこのビートを数えるための変数（Beat）がＮより小さいか否かがチェックされる（ステップＳ９０２）。
【０２１４】
ビートを数えるための変数（Beat）がＮより小さくない場合（ステップＳ９０２；Ｎ）、テンポ揺らぎ計算処理は終了する。
【０２１５】
反対にビートを数えるための変数（Beat）がＮより小さい場合（ステップＳ９０２；Ｙ）、該変数（Beat）におけるDeltaTimeの配列番号Ｔが計算され、その時のビートの揺らぎ（Percent）が計算される（ステップＳ９０４）。
【０２１６】
上記平均時間間隔に対してどの程度（％）揺れているかを表す値（Percent）がテンポ揺らぎの許容値Ｐ（例えば７％）を越えているか否かがチェックされる（ステップＳ９０６）。
【０２１７】
平均時間間隔に対してどの程度（％）揺れているかを表す値（Percent）がテンポ揺らぎの許容値Ｐを越えている場合（ステップＳ９０６；Ｙ）、上記テンポ揺らぎチェックのフラグPassが０にセットされ（ステップＳ９１０）、処理を終了する。
【０２１８】
反対にその値（Percent）がテンポ揺らぎの許容値Ｐを越えていない場合（ステップＳ９０６；Ｎ）、上記ビートを数えるための変数（Beat）がインクリメントされ（ステップＳ９０８）、上記ステップＳ９０２に復帰して、以上の処理を繰り返す。
【０２１９】
タッピングテンポ出力部１６０は、上記揺らぎが一定の範囲内であると判定した場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力する。それによって、上記テンポ確定部１７０により、ビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔が選択され、テンポが確定される。その一方で、ビート位置確定部１９０により、タッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置が、先頭ビート位置として、さらにそれ以後およびそれ以前の各ビート位置がテンポ確定部１７０で決定されたテンポを元に確定される。
【０２２０】
以上のように、先頭ビート位置が決まる。それ以降のビートの位置を１つずつ決定していく方法は、上記実施例１に示したとおりである。
【０２２１】
以上のようにして、各ビートの位置が決定したら、この結果をバッファ（図示なし）に保存すると共に、検出した結果を表示し、ユーザに確認してもらい、間違っている箇所を修正してもらうようにしても良い。
【０２２２】
ビート検出結果の確認画面の例や、ビート検出位置の修正は、前記実施例１の場合と同様である。
【０２２３】
次に、小節位置決定のための前提となる、１拍目位置の決定について説明する。
【０２２４】
上述したビート位置確定部１９０により、各ビート位置は確定するが、そのままだと、小節の位置は確定しない。そのため、ユーザに対して、最初に拍子入力部１１０に、拍子の入力を要求している。また、タッピング入力の際には、演奏を聴きながらその１拍目の時にステップＳ７３０のFlashの点灯によるビート数値が１となるようにタッピングしてもらっている。そのタッピング時に算出されるタッピングテンポの揺らぎが、上記揺らぎ算出部１５０により、一定の範囲内であると判定された時、そのタッピングのビートの数値から、それに最も近い１拍目の位置が求められ、その位置が１拍目の位置として出力される。
【０２２５】
以上のようにして、１拍目の位置（小節線の位置）が決定したら、その１拍目の位置が小節検出部５０ｂに出力されるので、ビート位置確定部１９０により確定された各ビート位置と共に、小節検出部５０ｂにより、小節線位置が検出されることになる。この結果をバッファ５２に保存する。それと共に、検出した結果を画面表示して、ユーザに変更させるようにしても良い。特に変拍子の曲は、この方法では対応できないので、変拍子の箇所をユーザに指定してもらう必要がある。
【０２２６】
以上の構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート（拍）の位置、さらに小節線の位置を検出することができるため、特別な音楽的知識を有する専門家でなくても、音楽ＣＤ等の複数の楽器音の混ざった入力された音楽音響信号に対し、個々の音符情報を検出することなしに、リズムを検出することができるようになる。
【０２２７】
さらに、該構成によれば、演奏のテンポが揺らいでしまった場合や、逆にわざとテンポを揺らして演奏しているような音源に関しても、上記リズムの検出が可能となる。
【０２２８】
しかも、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出し、テンポ検出精度を上げる、すなわち、ユーザに数拍タッピングしてもらうだけで、曲全体のビート検出をより正確に行えるようにしているため、より誤りが少ない状態でテンポ検出ができ、本実施例構成では、リズムの検出精度が飛躍的に高まることになる。
【０２２９】
以上の実施例構成でも、伴奏データと共に、リズム抽出パラメータ記憶部８０ｂにそれらのリズム抽出パラメータが予め記憶された構成としているが、伴奏データのみ記憶されていて、リアルタイムで、その伴奏データから、夫々のリズム抽出パラメータを抽出し、入力音響信号から最終的に抽出されたリズム抽出パラメータと比較するような構成としても良い。
【０２３０】
尚、本発明のリズム検出装置及びコンピュータ・プログラムは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０２３１】
本発明のリズム検出装置及びコンピュータ・プログラムは、ミュージックプロモーションビデオの作成の際などに音楽トラック中のビートの時刻に対して映像トラック中のイベントを同期させるビデオ編集処理や、ビートトラッキングによりビートの位置を見つけ音楽の音響信号の波形を切り貼りするオーディオ編集処理、人間の演奏に同期して照明の色・明るさ・方向・特殊効果などといった要素を制御したり、観客の手拍子や歓声などを自動制御するライブステージのイベント制御、音楽に同期したコンピュータグラフィックスなど、種々の分野で利用可能である。
【図面の簡単な説明】
【０２３２】
【図１】本発明の望ましい実施形態が適用されるパーソナルコンピュータの回路概要図である。
【図２】本発明に係るリズム検出装置の全体ブロック図である。
【図３】音階音パワー検出部２０ａの装置構成説明図である。
【図４】ビート検出部４０ａにおける処理の流れを示すフローチャートである。
【図５】ある曲の一部分の波形と各音階音のパワー、各音階音のパワー増分値の合計のを示すグラフである。
【図６】自己相関計算の概念図である。
【図７】先頭のビート位置の決定方法を示す説明図である。
【図８】最初のビート位置決定後のそれ以降のビートの位置を決定していく方法を示す説明図である。
【図９】ｓの値に応じて変えられる係数ｋの分布状態を示すグラフである。
【図１０】２番目以降のビートの位置の決定方法を示す説明図である。
【図１１】ビート検出結果の確認画面の例を示す画面表示図である。
【図１２】小節検出結果の確認画面の例を示す画面表示図である。
【図１３】検出曲に対してのリズム抽出パラメータの算出工程を示すフローチャートである。
【図１４】上記算出工程に従って、求められた検出元波形からリズム抽出パラメータを示すグラフである。
【図１５】図１３のステップＳ２０２の、各音階音のパワー増分値の合計Ｌ(t)の平滑化算出処理フローを示すフローチャートである。
【図１６】図１３のＬ(t)'のピークＬp(t)を算出する計算処理フローを示すフローチャートである。
【図１７】ハードディスクドライブ１０２０上にプリセットされた１つの伴奏データの各パート毎のイベントを示す説明図である。
【図１８】プリセット伴奏データ中に含まれるリズムパターンのリズム抽出パラメータについて、リズム抽出パラメータ記憶部８０ａに記憶する前にどのように抽出されたかを示す算出方法の処理フローチャートである。
【図１９】検出曲のリズム抽出パラメータＲ(k)とリズムパターン(SMF)のリズム抽出パラメータＱ(k)との相互相関の計算処理方法を示す説明図である。
【図２０】パソコン上に構築された実施例２の機能ブロックを示すブロック図である。
【図２１】曲の拍子の入力画面構成を示す説明図である。
【図２２】テンポ候補検出部１００による処理フローを示すフローチャートである。
【図２３】ある曲の一部分の波形と各音階音のパワー、各音階音のパワー増分値の合計の図を示すグラフである。
【図２４】自己相関計算の概念を示す説明図である。
【図２５】ステップＳ６０６におけるテンポ確定までの処理フローを示すフローチャートである。
【図２６】ステップＳ７１２の移動平均によるテンポ計算処理の処理ステップを示すフローチャートである。
【図２７】ステップＳ７１６のテンポ揺らぎ計算処理の処理ステップを示すフローチャートである。
【符号の説明】
【０２３３】
１０ａ、１０ｂ          入力部
２０ａ、２０ｂ          音階音パワー検出部
２１                    波形前処理部
２２                    ＦＦＴ演算部
２３                    パワー検出部
３０ａ、３０ｂ          パワー増分値算出部
４０ａ                  ビート検出部
５０ａ、５０ｂ          小節検出部
２４、４１、５１、５２、１０１  バッファ
７０ａ、７０ｂ          リズム抽出パラメータ算出部
８０ａ、８０ｂ          リズム抽出パラメータ記憶部
９０ａ、９０ｂ          リズムパターン決定部
１００                    テンポ候補検出部
１１０                    拍子入力部
１２０                    タッピング検出部
１３０                    記録部
１４０                    タッピングテンポ算出部
１５０                    揺らぎ算出部
１６０                    タッピングテンポ出力部
１７０                    テンポ確定部
１８０                    １拍目位置出力部
１９０                    ビート位置確定部
１０００                    システムバス
１００２                    ＣＰＵ
１００４                    ＲＯＭ
１００６                    ＲＡＭ
１００８                    ディスプレイ
１０１０                    Ｉ／Ｏインターフェース
１０１２                    キーボード
１０１４                    サウンドシステム
１０１６                    ＣＤ−ＲＯＭドライブ
１０１８                    プログラムＣＤ−ＲＯＭ
１０２０                    ハードディスクドライブ
【図１】
2008275975.tif 000021
【図２】
2008275975.tif 000022
【図３】
2008275975.tif 000023
【図４】
2008275975.tif 000024
【図５】
2008275975.tif 000025
【図６】
2008275975.tif 000026
【図７】
2008275975.tif 000027
【図８】
2008275975.tif 000028
【図９】
2008275975.tif 000029
【図１０】
2008275975.tif 000030
【図１１】
2008275975.tif 000031
【図１２】
2008275975.tif 000032
【図１３】
2008275975.tif 000033
【図１４】
2008275975.tif 000034
【図１５】
2008275975.tif 000035
【図１６】
2008275975.tif 000036
【図１７】
2008275975.tif 000037
【図１８】
2008275975.tif 000038
【図１９】
2008275975.tif 000039
【図２０】
2008275975.tif 000040
【図２１】
2008275975.tif 000041
【図２２】
2008275975.tif 000042
【図２３】
2008275975.tif 000043
【図２４】
2008275975.tif 000044
【図２５】
2008275975.tif 000045
【図２６】
2008275975.tif 000046
【図２７】
2008275975.tif 000047
【手続補正書】
【提出日】平成20年6月27日(2008.6.27)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００６７
【補正方法】変更
【補正の内容】
【００６７】
【数１】
2008275975.tif 000048
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１０９
【補正方法】変更
【補正の内容】
【０１０９】
【数１０】
2008275975.tif 000049