(57)【特許請求の範囲】
【請求項１】
曲波形データを時間的にずらしながら複数の自己相関値を演算する第１の自己相関演算部と、
前記第１の自己相関演算部により演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し、前記曲波形データ内のグリッドの間隔を決定し、前記グリッドの間隔を基に前記曲波形データ内の前記グリッドの位置を決定するグリッド決定部とを有し、
前記グリッドの位置の間隔は、ビートの位置の間隔以下であることを特徴とするグリッド検出装置。
【請求項２】
さらに、前記グリッド決定部により決定されたグリッドの位置について、前記曲波形データの自己相関値を演算する第２の自己相関演算部と、
前記第２の自己相関演算部により演算された自己相関値を基に前記曲波形データ内の小節の位置を決定する小節決定部とを有し、
前記小節決定部は、前記第２の自己相関演算部により演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し、小節の間隔を決定し、前記小節の間隔を基に前記小節の位置を決定することを特徴とする請求項１記載のグリッド検出装置。
【請求項３】
さらに、前記グリッド決定部により決定されたグリッドの位置及び前記小節決定部により決定された小節の位置を基にビートの位置を決定するビート決定部を有することを特徴とする請求項２記載のグリッド検出装置。
【請求項４】
曲波形データを時間的にずらしながら複数の自己相関値を演算する第１の自己相関演算ステップと、
前記第１の自己相関演算ステップにより演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し、前記曲波形データ内のグリッドの間隔を決定し、前記グリッドの間隔を基に前記曲波形データ内の前記グリッドの位置を決定するグリッド決定ステップと
をコンピュータに実行させるためのプログラムであって、
前記グリッドの位置の間隔は、ビートの位置の間隔以下であることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グリッド検出装置及びプログラムに関する。
【背景技術】
【０００２】
音楽ＣＤ等の複数の楽器音の混ざった音楽音響信号（オーディオ信号）からビート位置を検出するテンポ検出装置として、下記の特許文献１が知られている。特許文献１では、ビート位置の検出方法として、入力波形を所定の時間間隔（以下、フレーム）でＦＦＴ演算し、求められたパワースペクトルから各音階音のパワーを求め、この各音階音のパワーのフレーム毎の増分値を計算し、これを全音階音で合計してフレーム毎の全体の音の変化度合いを求め、このフレーム毎の全体の音の変化度合いの自己相関を計算して周期性を求め、この自己相関の値が最大となるフレーム間隔から平均的なビート間隔（いわゆるテンポ）を求める。
【０００３】
また、下記の特許文献２には、ビート検出波形の先頭を演奏させながら、タッピング検出部を用い、ユーザにビート位置を、タッピングしてもらうようにし、タッピングの揺らぎが揺らぎ算出部で一定の範囲内であると判定されたら、テンポ候補検出部で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ検出装置が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−５２３９４号公報
【特許文献２】特開２００８−４０２８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１の方法では、曲の半分や２倍のテンポに誤ってビート間隔を決定してしまったり、裏拍にアクセントのある曲では、ビート位置が裏拍になってしまうことがある。また、特許文献２の方法では、ビート位置をユーザにタッピングしてもらわなければビート間隔を選択できない課題がある。
【０００６】
本発明の目的は、曲波形データ内においてビート以下の間隔のグリッドの位置を検出することができるグリッド検出装置及びプログラムを提供することである。
【課題を解決するための手段】
【０００７】
本発明のグリッド検出装置は、曲波形データを時間的にずらしながら複数の自己相関値を演算する第１の自己相関演算部と、前記第１の自己相関演算部により演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し、前記曲波形データ内のグリッドの間隔を決定し、前記グリッドの間隔を基に前記曲波形データ内の前記グリッドの位置を決定するグリッド決定部とを有し、前記グリッドの位置の間隔は、ビートの位置の間隔以下であることを特徴とする。
【０００８】
また、本発明のプログラムは、曲波形データを時間的にずらしながら複数の自己相関値を演算する第１の自己相関演算ステップと、前記第１の自己相関演算ステップにより演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し、前記曲波形データ内のグリッドの間隔を決定し、前記グリッドの間隔を基に前記曲波形データ内の前記グリッドの位置を決定するグリッド決定ステップとをコンピュータに実行させるためのプログラムであって、前記グリッドの位置の間隔は、ビートの位置の間隔以下であることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、曲波形データ内のグリッドの位置を検出することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態によるグリッド検出装置のグリッド検出方法を示すフローチャートである。
【図２】本発明の実施形態によるグリッド検出装置のグリッド検出方法を示すフローチャートである。
【図３】本発明の実施形態によるグリッド検出装置のグリッド検出方法を示すフローチャートである。
【図４】ステレオの曲波形データをモノラルの曲波形データに変換する方法を示す図である。
【図５】曲波形データのローパスフィルタ処理を示す図である。
【図６】曲波形データの間引き処理を示す図である。
【図７】曲波形データの正規化処理を示す図である。
【図８】図８（Ａ）及び（Ｂ）は高速フーリエ変換処理を示す図である。
【図９】フレーム毎のノートナンバの各音のパワーを示す図である。
【図１０】増分値データを示す図である。
【図１１】自己相関演算を示す図である。
【図１２】自己相関値及びずらしたフレーム数を示す図である。
【図１３】図１３（Ａ）〜（Ｃ）はグリッドの基点の検出方法を示す図である。
【図１４】図１４（Ａ）及び（Ｂ）は増分値データと等間隔関数との相関演算を示す図である。
【図１５】図１５（Ａ）〜（Ｃ）はグリッドのパワー配列の生成処理を示す図である。
【図１６】図１６（Ａ）〜（Ｃ）はグリッド配列の自己相関演算を示す図である。
【図１７】自己相関値及びずらしたグリッド数を示す図である。
【図１８】自己相関値に対する係数を示す図である。
【図１９】本発明の実施形態によるグリッド検出装置のハードウエア構成例を示すブロック図である。
【図２０】図１９のコンピュータのプログラムの機能を説明するためのブロック図である。
【発明を実施するための形態】
【００１１】
図１９は、本発明の実施形態によるグリッド検出装置（コンピュータ）のハードウエア構成例を示すブロック図である。グリッド検出装置は、例えばパーソナルコンピュータで構成される。バス１９０１には、中央処理装置（ＣＰＵ）１９０２、ＲＯＭ１９０３、ＲＡＭ１９０４、ネットワークインタフェース１９０５、入力装置１９０６、出力装置１９０７及び外部記憶装置１９０８が接続されている。
【００１２】
ＣＰＵ１９０２は、データの処理又は演算を行うと共に、バス１９０１を介して接続された各種構成要素を制御するものである。ＲＯＭ１９０３には、予めＣＰＵ１９０２の制御手順（コンピュータプログラム）を記憶させておき、このコンピュータプログラムをＣＰＵ１９０２が実行することにより、起動する。外部記憶装置１９０８にコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ１９０４にコピーされて実行される。ＲＡＭ１９０４は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置１９０８は、例えばハードディスク記憶装置やＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えない。ＣＰＵ１９０２は、ＲＡＭ１９０４内のコンピュータプログラムを実行することにより、図１〜図３のグリッド検出装置の処理を行う。
【００１３】
ネットワークインタフェース１９０５は、インターネット等のネットワークに接続するためのインタフェースである。入力装置１９０６は、例えばキーボード及びマウス等であり、各種指示又は入力等を行うことができる。出力装置１９０７は、表示装置（ディスプレイ）、印刷装置（プリンタ）及びスピーカ等である。
【００１４】
図１〜図３は、本実施形態によるグリッド検出装置のグリッド検出方法を示すフローチャートである。ＣＰＵ１９０２がプログラムを実行することにより、図１〜図３の処理が行われる。ＣＰＵ１９０２は、ステップＳ１０１の準備処理、ステップＳ１０２のグリッド処理、ステップＳ１０３の小節処理、及びステップＳ１０４のビート処理を行う。ステップＳ１０１は、ステップＳ１１１〜Ｓ１１５を有する。ステップＳ１０２は、ステップＳ１１６〜Ｓ１２３を有する。ステップＳ１０３は、ステップＳ１２４〜Ｓ１３０を有する。ステップＳ１０４は、ステップＳ１３１を有する。
【００１５】
ステップＳ１１１では、ＣＰＵ１９０２は、外部記憶装置１９０８から曲波形データ（ＷＡＶデータ）をＲＡＭ１９０４にロードし、モノラル化処理、ローパスフィルタ処理、ダウンサンプリング処理、正規化処理を行う。具体的には、ＣＰＵ１９０２は、曲波形データがステレオの場合には、図４に示すように、ステレオの曲波形データをモノラルの曲波形データに変換する。次に、ＣＰＵ１９０２は、図４の曲波形データに対して、ローパスフィルタ処理を行うことにより高音域成分を除去し、図５の曲波形データを生成する。次に、ＣＰＵ１９０２は、図５の曲波形データを時間的に間引くことにより曲波形データのサンプル数を減らし（ダウンサンプリング処理し）、図６の曲波形データを生成する。例えば、４４．１ｋＨｚのサンプル数を２７５６Ｈｚのサンプル数に変換し、サンプル数を１／１６に減らす。次に、ＣＰＵ１９０２は、図６の曲波形データを正規化することにより曲波形データの最大振幅をダイナミックレンジの最大値に合わせ、図７の曲波形データを生成する。
【００１６】
次に、ステップＳ１１２では、ＣＰＵ１９０２は、曲波形データの全体のピッチのずれ（単位：セント）を算出する。具体的には、ＣＰＵ１９０２は、図８（Ａ）のように、領域８０１及び８０２のサンプル数が６５５３６サンプル（約２３．８秒）、オーバーラップ領域８０３が１／２（３２７６８サンプル）で高速フーリエ変換（ＦＦＴ）を行い、図８（Ｂ）に示すように、各フレーム（時間）の周波数毎のパワーを求める。サンプリング周波数が２７５６Ｈｚの時、フレーム間隔は約１１．９秒である。
【００１７】
次に、ＣＰＵ１９０２は、フレーム毎に中央の「ド」から１オクターブ分上の「ド」までの半音毎に以下の処理を行い、テーブルを作成する。まず、ＣＰＵ１９０２は、調べる音をセントに変換する。セントは、（［ノートンナンバ］−３６）×１００で表わされる。ノートナンバは、音高であり、中央の「ド」を６０で表し、半音増える毎にノートナンバも１増える。半音減る場合も、同様にノートナンバが１減る。次に、ＣＰＵ１９０２は、調べる音の前後の音との中間のセントを求める。前の音との中間のセントは、［調べる音のセント］−５０で表わされる。次の音との中間のセントは、［調べる音のセント］＋５０で表わされる。次に、ＣＰＵ１９０２は、前後の音との中間のセントより、調べる音の基本周波数の範囲を求める。前の音との中間の周波数は、２((前の音との中間のセント-3300)÷1200)×４４０で表わされる。次の音との中間の周波数は、２((次の音との中間のセント-3300)÷1200)×４４０で表わされる。次に、ＣＰＵ１９０２は、周波数の範囲に相当するＦＦＴのポイント範囲を探し、その範囲で最もパワーが出ているパワーの位置（ポイント）を探す。次に、ＣＰＵ１９０２は、上記で求めた調べる音のセント、上記で探したパワーの位置、及び上記で探したパワーの位置のパワー値の３つを１組としてテーブルに記録する。
【００１８】
次に、ＣＰＵ１９０２は、テーブルを参照して最もパワーの強い３つの音を抽出する。次に、ＣＰＵ１９０２は、パワーの位置より、複素スペクトル内挿法で正確な周波数を求める。次に、ＣＰＵ１９０２は、正確な周波数をセントに変換する。正確な周波数のセントは、１２００×ｌｏｇ(正確な周波数÷４４０)÷ｌｏｇ２＋３３００で表わされる。次に、ＣＰＵ１９０２は、テーブルに記録されている音のセントと、上記で求めたＦＦＴ結果からのその音のセントとのズレを登録する。次に、ＣＰＵ１９０２は、全ての登録されたずれがほとんど＋方向にずれているものばかりなら、＋方向にずれているものの平均をとり、この曲波形データのピッチのずれとする。また、全ての登録されたずれがほとんど−方向にずれているものばかりなら、−方向にずれているものの平均をとり、この曲波形データのピッチのずれとする。また、それ以外（＋及び−のそれぞれにずれていて、ばらついている）の場合は、この曲波形データのピッチのずれは０（なし）とする。
【００１９】
次に、ステップＳ１１３では、ＣＰＵ１９０２は、高速フーリエ変換（ＦＦＴ）を行い、ノート毎のパワー配列を作成する。具体的には、ＣＰＵ１９０２は、サンプル数５１２、オーバーラップ３１／３２でＦＦＴを行い、各フレームのパワーを求める。サンプリング周波数が２７５６Ｈｚの時、フレーム間隔は約５．８ミリ秒である。次に、ＣＰＵ１９０２は、図９に示すように、フレーム毎にノートナンバ２８〜８８の各音のパワー９０１を求める。次に、ＣＰＵ１９０２は、調べる音をセントにし、その値に上記で求めたずれ分を加算する。次に、ＣＰＵ１９０２は、前後の音との中間の範囲内で最大のパワーが出ている場所のパワーをその音のパワーとする。
【００２０】
次に、ステップＳ１１４では、ＣＰＵ１９０２は、各フレームの各ノートのパワーを合計した配列を作成する。次に、ステップＳ１１５では、ＣＰＵ１９０２は、図１０に示すように、各フレームの曲波形データ１００１において、フレームの全ての音のパワー合計の、前フレームからの増分量を求め、増分値データ１００２を生成する。ここで、減っている場合は増分を０とする。増分値データ１００２は、曲波形データ１００１をＦＦＴした結果を各ノートのパワーにしてから合計し、前フレームからの増分量を表したものである。
【００２１】
次に、ステップＳ１１６では、ＣＰＵ１９０２は、フレームのパワー増分値の配列に対し、０．２秒〜３２秒の間の自己相関をとり、グリッドの間隔（フレーム数）を求める。具体的には、ＣＰＵ１９０２は、０．２秒に相当するフレーム数から、３２秒に相当するフレーム数までの自己相関を求める。すなわち、サンプリング周波数２７５６Ｈｚの１フレーム当たりのサンプル数が１６サンプルの時、３４フレームから５５１２フレームまでの間で自己相関を求める。例えば、図１１に示すように、増分値データ１１０１と、それを３４フレームずらした増分値データ１１０２との自己相関値を演算する。同様に、３５〜５５１２フレームをずらしたときの自己相関値を演算する。
【００２２】
次に、ステップＳ１１７では、ＣＰＵ１９０２は、図１２に示すように、自己相関値の高い順にずらしたフレーム数を並び替える。通常、例えば、１、２拍、１、２、４、８小節分ずれたフレーム数で、自己相関値が高くなる。
【００２３】
次に、ステップＳ１１８では、ＣＰＵ１９０２は、自己相関値の高いずらしたフレーム数（ずれ量）に対してずらしたフレーム数（ずれ量）が整数分の１に相当するものだけを対象に間隔の小さいものを探す。具体的には、ＣＰＵ１９０２は、自己相関値の大きい順に調べて行く。まず、ＣＰＵ１９０２は、仮のグリッド［Ａ］を決める。初回は、［Ａ］を一番自己相関値の高いフレーム数（３２０）とする。次に、ＣＰＵ１９０２は、グリッド候補［Ｂ］を決める。初回は、２番目に自己相関値の高いフレーム数（３１９）になる。次に、ＣＰＵ１９０２は、［Ｂ］が［Ａ］の整数分の１（１／２〜１／８）であるか調べる。整数分の１でない場合は、上記のグリッド候補［Ｂ］を次に自己相関値の高いフレーム数にする。［Ｂ］が３１９だった場合は、［Ｂ］を３２１にする。［Ｂ］が３２１だった場合は、［Ｂ］を３１８にする。また、整数分の１である場合は、次の処理に移る。［Ａ］を２〜８で割ったときに小数になる場合は、小数を切り上げ又は切り捨てした２つの整数が整数分の１であるとする。３２０÷５の６４フレームのときに、この条件に当てはまる。
【００２４】
なお、自己相関値の高いフレーム数は、通常数小節の間隔、１小節の間隔、拍の間隔などに相当し、求めるグリッド間隔はこれらの整数分の１であることは間違いないので、このようなチェックを行う。２〜８で限定しているのは、例えば、４小節の間隔→２小節の間隔→１小節の間隔→１拍の間隔→グリッドの間隔と、順番に限定しながら求めて、精度を上げることを目的としている。グリッドの間隔が最も短い間隔である。
【００２５】
次に、ステップＳ１１９では、ＣＰＵ１９０２は、グリッド間隔を決める。具体的には、ＣＰＵ１９０２は、［Ｂ］の自己相関値÷［Ａ］の自己相関値を求め、閾値［Ｃ］以上か調べる。閾値［Ｃ］未満の場合では、［Ａ］の値が２秒（サンプリング周波数２７５６Ｈｚで、３４４．５フレーム）以下の場合、［Ａ］をグリッド間隔とする。［Ａ］が６４になった後は、閾値［Ｃ］を超えないので、この条件に当てはまり、グリッド間隔は６４フレームとなる。また、上記以外の場合は、［Ａ］を［Ｂ］のフレーム数に変更し、上記の処理を繰り返す。初回は、６４の自己相関値÷３２０の自己相関値が閾値［Ｃ］を超えるのでこちらの条件に当てはまる。このときに、［Ｂ］の自己相関値÷［Ａ］の自己相関値が閾値［Ｃ］以上だった場合は、閾値［Ｃ］を上げて、次からの条件を少し厳しくしておく。
【００２６】
次に、ステップＳ１２０では、ＣＰＵ１９０２は、１フレームずつずらしながらグリッド間隔の位置でパワーの増分値が高いものをカウントする。次に、ステップＳ１２１では、ＣＰＵ１９０２は、最もカウント数が多いところをグリッド位置と仮決めする。具体的には、ＣＰＵ１９０２は、グリッドの間隔がわかっても、先頭フレームがグリッドとは限らないので、グリッドを割り振るためのグリッドの基点（確実にグリッドだろうと思われる１つのフレーム）を決める。まず、ＣＰＵ１９０２は、上記で最も自己相関値の高かったフレーム数を「確実にグリッドの出ている間隔」とし、グリッドの開始位置をずらしながら、先頭からどれだけずらしたときが最もグリッドらしいか調べる。ＣＰＵ１９０２は、先頭フレームを仮のグリッド先頭と仮定して、そこから「確実にグリッドの出ている間隔（３２０）」毎にフレームのパワー増分値の配列を見て、増分値が大きい箇所をカウントする。大きい箇所とは、例えばフレームのパワー増分値の配列の中の最大値の８０%を超えるものを指す。次に、ＣＰＵ１９０２は、２フレーム目を仮のグリッド先頭と仮定して、上記と同様にカウントする。次に、ＣＰＵ１９０２は、３フレーム目を仮のグリッド先頭と仮定して、上記と同様にカウントする。ＣＰＵ１９０２は、図１３（Ａ）に示すように、上記と同様のカウントを「確実にグリッドの出ている間隔（３２０）」回数分行う。３２０フレームずらすと先頭フレームを仮のグリッド先頭と仮定した上記と同じ位置を参照するため、カウントする必要がなくなる。次に、ＣＰＵ１９０２は、カウントした結果、最もカウント数の多かった先頭ずらしフレーム数を求める。図１３（Ｂ）に示すように、増分値データが山のピークになったときに、最もカウント数が大きくなる。
【００２７】
次に、ステップＳ１２２では、ＣＰＵ１９０２は、仮決めの中で最も増分値が高いものをグリッドの基点とする。具体的には、ＣＰＵ１９０２は、図１３（Ｃ）に示すように、最もグリッドらしい位置（上記で求めた先頭ずらしフレームから「確実にグリッドの出ている間隔」毎の位置）で、フレームのパワー増分値の配列を見て最もパワーが大きいフレームを、グリッドを割り振るためのグリッドの基点（基準フレーム）１３０１とする。
【００２８】
次に、ステップＳ１２３では、ＣＰＵ１９０２は、グリッドの基点から前後に向かって揺らぎを考慮しながらグリッド位置を決定する。具体的には、ＣＰＵ１９０２は、グリッドの基点１３０１から前後に向かってテンポの揺れを考慮しながら、１つずつグリッド位置を確定して行く。これは、すべてのグリッド間隔が上記で決定したグリッド間隔（６４）ぴったりとは限らないためである。
【００２９】
ＣＰＵ１９０２は、図１４（Ａ）の増分値データと図１４（Ｂ）の等間隔関数との相関値を演算する。図１４（Ｂ）は、仮のグリッド位置１４０１からテンポに相当する時間で等間隔に並ぶ関数である。ＣＰＵ１９０２は、仮のグリッド位置１４０１を左右に少し動かして、相関値が最も大きくなる場所を求める。
【００３０】
なお、テンポの揺らぎに対応するため、以下のような処理を行うことができる。図１４の関数の間隔を徐々に広く又は狭くして、上記の処理を行うことにより、テンポの揺らぎに対応することができる。また、グリッド位置を求めようとしている場所が重視されるように、グリッド位置を求めようとしている場所の重みを４として、それ以外の重みを１にする。
【００３１】
次に、ステップＳ１０３では、ＣＰＵ１９０２は、グリッド決定後に、小節位置を決める。ステップＳ１２４では、ＣＰＵ１９０２は、グリッド位置のみで０．６秒〜１２秒の間の自己相関値を求める。具体的には、ＣＰＵ１９０２は、図１５（Ａ）のパワー増分値の配列のグリッド位置となったフレームのみを取り出し、図１５（Ｂ）のデータを生成する。次に、ＣＰＵ１９０２は、図１５（Ｂ）のデータを基に図１５（Ｃ）のグリッドのパワー配列を生成する。次に、ＣＰＵ１９０２は、グリッド配列に対して０．６秒に相当するグリッド数から、１２秒に相当するグリッド数までの自己相関値を求める。サンプリング周波数が２７５６Ｈｚの１フレーム当たりのサンプル数が１６サンプルの時、グリッドフレーム数が６４の場合、２グリッドから３２グリッドまでの自己相関値を求める。ＣＰＵ１９０２は、図１６（Ａ）のグリッド配列に対して、図１６（Ｂ）の２グリッド分ずらしたグリッド配列との自己相関値を求める。同様に、ＣＰＵ１９０２は、図１６（Ａ）のグリッド配列に対して、図１６（Ｃ）の３グリッド分ずらしたグリッド配列との自己相関値を求める。以上のように、２〜３２グリッド分ずらした自己相関値を求める。
【００３２】
次に、ステップＳ１２５では、ＣＰＵ１９０２は、図１７に示すように、自己相関値の高い順にずらしたグリッド数を並び替える。
【００３３】
次に、ステップＳ１２６では、ＣＰＵ１９０２は、図１８に示すように、例えば間隔が２秒（４／４拍子）に近いグリッド数ほど優遇されるように自己相関値に対する係数を作成する。すなわち、２秒が最大係数になるようにする。サンプリング周波数２７５６Ｈｚの１フレーム当たりのサンプル数が１６サンプルの時、グリッドフレーム数が６４の場合、５グリッドが中央になる。
【００３４】
次に、ステップＳ１２７では、ＣＰＵ１９０２は、自己相関値の高いずらしたフレーム数（ずれ量）に対してずらしたフレーム数（ずれ量）が整数分の１に相当するものだけを対象に間隔の小さいものを探す。次に、ステップＳ１２８では、ＣＰＵ１９０２は、得られた間隔を小節の間隔とする。具体的には、ＣＰＵ１９０２は、自己相関値の大きい順に調べて行く。まず、ＣＰＵ１９０２は、仮の小節［Ａ］を決める。初回は、［Ａ］を一番自己相関値の高いグリッド数（１０）とする。次に、ＣＰＵ１９０２は、小節候補［Ｂ］を決める。初回は、２番目に自己相関値の高いグリッド数（５）になる。次に、ＣＰＵ１９０２は、［Ｂ］が一番自己相関値の高いグリッド数（１０）の整数分の１又は整数倍であるか調べる。つまり、「［Ｂ］÷一番自己相関値の高いグリッド数」又は「一番自己相関値の高いグリッド数÷［Ｂ］」が割り切れるか調べる。割り切れない場合は、［Ｂ］を次に自己相関値の高いグリッド数にし、上記の処理を繰り返す。［Ｂ］が５だった場合は、［Ｂ］を３０にする。［Ｂ］が３０だった場合は、［Ｂ］を２０にする。割り切れる場合は、次の処理に移る。［Ｂ］が５のときに、この条件に当てはまる。
【００３５】
なお、一番自己相関値の高いグリッド数は、通常数小節の間隔又は４分音符等の間隔に相当し、求める１小節の間隔はこれらの整数分の１又は整数倍であることは間違いないので、このようなチェックを行う。
【００３６】
次に、ＣＰＵ１９０２は、［Ｂ］の自己相関値×［Ｂ］の係数＞［Ａ］の自己相関値×［Ａ］の係数になるか調べる。該当する場合は、［Ａ］のグリッド数を［Ｂ］のグリッド数に変更し、上記の処理を繰り返す。全てのグリッドを調べ終わったときの［Ａ］のグリッド数が求めるべき１小節のグリッド数（１小節の間隔）になる。例えば、上記の例の数値を使用すると、グリッド数５が小節の間隔となる。
【００３７】
次に、ステップＳ１２９では、ＣＰＵ１９０２は、１グリッドずつずらしながら、小節間隔の位置でパワーの増分値が高いものをカウントする。具体的には、ＣＰＵ１９０２は、小節の間隔がわかっても、先頭グリッドが小節の頭とは限らないので、小節を割り振るための基準グリッド（確実に小節の頭だろうと思われる１つのグリッド）を決める。まず、ＣＰＵ１９０２は、小節の頭位置をずらしながら、先頭からどれだけずらしたときが最も小節の頭らしいか調べる。具体的には、ＣＰＵ１９０２は、先頭グリッドを仮の小節頭と仮定して、そこから小節間隔（５グリッド）毎にグリッドのパワー配列を見て、大きい箇所をカウントする。大きい箇所とは、例えばグリッドのパワー配列の中の最大値の６０%を超えるものを指す。次に、ＣＰＵ１９０２は、２グリッド目を仮の小節頭と仮定して、上記と同様にカウントする。次に、ＣＰＵ１９０２は、３グリッド目を仮の小節頭と仮定して、上記と同様にカウントする。ＣＰＵ１９０２は、上記と同様のカウントを小節間隔（５）回数分行う。５フレームずらすと、先頭グリッドを仮の小節頭と仮定した上記と同じ位置を参照するため、カウントする必要がなくなる。
【００３８】
次に、ステップＳ１３０では、ＣＰＵ１９０２は、最もカウント数が多いところを小節位置とする。具体的には、ＣＰＵ１９０２は、カウントした結果、最もカウント数の多かった先頭ずらしグリッド数を求め、このずらしグリッド数の位置を、小節を割り振るための基準グリッドと決定する。次に、ＣＰＵ１９０２は、基準グリッドから小節間隔のグリッド数毎の位置を全て小節の位置とする。
【００３９】
次に、ＣＰＵ１９０２は、小節の決定後、ステップＳ１３１で、ビート位置を決める。ステップＳ１３１では、ＣＰＵ１９０２は、小節内のグリッド数を２の倍数で割ったときに６未満になるような最小の値を１ビートのグリッド数とし、小節内のグリッド数を１ビートのグリッド数で割り切れる場合は、グリッド数毎の位置をビート位置とし、割り切れない場合は、グリッド位置をそのままビート位置とする。
【００４０】
具体的には、ＣＰＵ１９０２は、小節間隔のグリッド数から適当な数をビートのグリッド数として決める。ＣＰＵ１９０２は、小節のグリッド数が６×Ｎ以下か調べる。初回は、Ｎ＝１とする。６×Ｎ以下の場合は、ビートのグリッド数をＮとする。６を超える場合は、Ｎを２倍して、上記の処理を繰り返す。
【００４１】
次に、ＣＰＵ１９０２は、小節の頭をまずビートの位置とし、そこからＮグリッド毎の位置をビート位置とする。Ｎ＝１なら、グリッド位置がそのままビート位置になり、Ｎ＝２なら、グリッド位置の１つおきの場所がビートの位置となる。
【００４２】
以上のように、本実施形態によれば、曲波形データのグリッド位置、小節位置及びビート位置を検出することができる。これにより、曲波形データのグリッド位置、小節位置又はビート位置に同期し、画像（静止画又は動画）データを再生することにより、曲及び画像を、同期をとりながら再生することができる。例えば、曲波形データのグリッド位置、小節位置又はビート位置で、静止画が動く等の再生処理を行うことができる。
【００４３】
図２０は、図１９のコンピュータのプログラムの機能を説明するためのブロック図である。コンピュータがプログラムを実行することにより、グリッド検出装置（方法）が実現される。グリッド検出装置（方法）２０００は、ステップＳ１０１に対応する準備処理部（ステップ）２００１、ステップＳ１０２に対応するグリッド処理部（ステップ）２００２、ステップＳ１０３に対応する小節処理部（ステップ）２００３、及びステップＳ１０４に対応するビート処理部（ステップ）２００４を有する。
【００４４】
グリッド処理部２００２は、ステップＳ１１６に対応する第１の自己相関演算部（ステップ）２０１１、及びステップＳ１１７〜Ｓ１２３に対応するグリッド決定部（ステップ）２０１２を有する。第１の自己相関演算部２０１１は、曲波形データを時間的にずらしながら複数の自己相関値を演算する。グリッド決定部２０１２は、第１の自己相関演算部２０１１により演算された複数の自己相関値を基に曲波形データ内のグリッドの位置を決定する。具体的には、グリッド決定部２０１２は、第１の自己相関演算部２０１１により演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し（ステップＳ１１８）、グリッドの間隔を決定し（ステップＳ１１９）、グリッドの間隔を基にグリッドの位置を決定する（ステップＳ１２３）。
【００４５】
小節処理部２００３は、ステップＳ１２４に対応する第２の自己相関演算部（ステップ）２０１３、及びステップＳ１２５〜Ｓ１３０に対応する小節決定部（ステップ）２０１４を有する。第２の自己相関演算部２０１３は、グリッド決定部２０１２により決定されたグリッドの位置について、曲波形データの自己相関値を演算する。小節決定部２０１４は、第２の自己相関演算部２０１３により演算された自己相関値を基に曲波形データ内の小節の位置を決定する。グリッドの位置の間隔は、小節の位置の間隔以下である。具体的には、小節決定部２０１４は、第２の自己相関演算部２０１３により演算された複数の自己相関値の中で、自己相関値が最も高いものに対してずれ量が整数分の１に相当するものを抽出し（ステップＳ１２７）、小節の間隔を決定し（ステップＳ１２８）、小節の間隔を基に小節の位置を決定する（ステップＳ１３０）。
【００４６】
ビート処理部２００４は、ステップＳ１３１に対応するビート決定部（ステップ）２０１５を有する。ビート決定部２０１５は、グリッド決定部２０１２により決定されたグリッドの位置及び小節決定部２０１４により決定された小節の位置を基にビートの位置を決定する。グリッドの位置の間隔は、ビートの位置の間隔以下である。
【００４７】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、プログラムをコンピュータに供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びコンピュータプログラムプロダクトは、本発明の範疇に含まれる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００４８】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００４９】
２０００  グリッド検出装置
２００１  準備処理部
２００２  グリッド処理部
２００３  小節処理部
２００４  ビート処理部
２０１１  第１の自己相関演算部
２０１２  グリッド決定部
２０１３  第２の自己相関演算部
２０１４  小節決定部
２０１５  ビート決定部
【図１】
0005513074.tif 000002
【図２】
0005513074.tif 000003
【図３】
0005513074.tif 000004
【図４】
0005513074.tif 000005
【図５】
0005513074.tif 000006
【図６】
0005513074.tif 000007
【図７】
0005513074.tif 000008
【図８】
0005513074.tif 000009
【図９】
0005513074.tif 000010
【図１０】
0005513074.tif 000011
【図１１】
0005513074.tif 000012
【図１２】
0005513074.tif 000013
【図１３】
0005513074.tif 000014
【図１４】
0005513074.tif 000015
【図１５】
0005513074.tif 000016
【図１６】
0005513074.tif 000017
【図１７】
0005513074.tif 000018
【図１８】
0005513074.tif 000019
【図１９】
0005513074.tif 000020
【図２０】
0005513074.tif 000021