(57)【要約】【課題】  誤り無く平均的なビートの間隔とビートの位置を検出できるテンポ検出装置を提供する。【解決手段】  ビート検出波形の先頭を演奏させながら、タッピング検出部１０４を用い、ユーザにビート位置を、タッピングしてもらうようにし、タッピングの揺らぎが揺らぎ算出部１０７で一定の範囲内であると判定されたら、テンポ候補検出部１０２で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択し、また、安定したところのタッピング位置をビート検出の先頭ビート位置とするようにしているので、ユーザに数拍タッピングしてもらうだけで、曲全体のビート検出をより正確に行えるようになる。【選択図】        図２
2008040284.tif 000002
【特許請求の範囲】
【請求項１】
音響信号を入力する信号入力手段と、
入力された音響信号から、所定のフレーム毎に、ＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定のフレーム毎の各音階音のパワーの増分値をすべての音階音について合計して、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、このフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザに拍子を入力してもらう拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを計算するタッピングテンポ計算手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングのビートの数値から、それに最も近い１拍目の位置を出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と
を有することを特徴とするテンポ検出装置。
【請求項２】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔で周期を持つ関数との相互相関を計算して求めることを特徴とする請求項１記載のテンポ検出装置。
【請求項３】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔に＋α又は−αの間隔を加算した関数との相互相関を計算して求めることを特徴とする請求項１記載のテンポ検出装置。
【請求項４】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を計算して求めることを特徴とする請求項１記載のテンポ検出装置。
【請求項５】
上記ビート位置確定手段によるビート位置を確定するにあたり、各音階音のパワー増分値の合計と、テンポ確定手段によって確定されたビート間隔から次第に広くなる又は次第に狭くなる間隔にした関数との相互相関を、その途中のビート位置をずらして計算することにより求めることを特徴とする請求項１記載のテンポ検出装置。
【請求項６】
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定のフレーム毎に、ＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定のフレーム毎の各音階音のパワーの増分値をすべての音階音について合計して、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、このフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザに拍子を入力してもらう拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを計算するタッピングテンポ計算手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングのビートの数値から、それに最も近い１拍目の位置を出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と
して機能させることを特徴とするテンポ検出用コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テンポ検出装置及びテンポ検出用コンピュータプログラムに関する。
【背景技術】
【０００２】
音楽ＣＤ等の複数の楽器音の混ざった音楽音響信号（オーディオ信号）からビート位置を検出するテンポ検出装置として、本出願人は、先に特願２００６−１１９４の特許出願をしている。
【０００３】
同出願の構成では、ビート位置の検出方法として、入力波形を所定の時間間隔（以下、フレーム）でＦＦＴ演算し、求められたパワースペクトルから各音階音のパワーを求め、この各音階音のパワーのフレーム毎の増分値を計算し、これを全音階音で合計してフレーム毎の全体の音の変化度合いを求め、このフレーム毎の全体の音の変化度合いの自己相関を計算して周期性を求め、この自己相関の値が最大となるフレーム間隔から平均的なビート間隔（いわゆるテンポ）を求めていた。
【０００４】
また、平均的なビート間隔が求まったら、波形の先頭部分のフレーム（例えば、この平均的なビート間隔の約１０倍の長さのフレーム）において、ビート間隔だけ離れたフレーム位置における全体の音の変化度合いを積算することを開始フレームを１ずつずらしながら行い、この積算値が最大となる開始フレームを先頭のビート位置としていた。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、この方法では、曲の半分や２倍のテンポに誤ってビート間隔を決定してしまったり、裏拍にアクセントのある曲では、ビート位置が裏拍になってしまうことがあった。
【０００６】
本発明は、以上のような問題に鑑み創案されたもので、誤り無く平均的なビートの間隔（いわゆるテンポ）とビートの位置を検出できるテンポ検出装置及びテンポ検出用コンピュータプログラムを提供せんとするものである。
【課題を解決するための手段】
【０００７】
そのため本発明に係るテンポ検出装置は、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定のフレーム毎に、ＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定のフレーム毎の各音階音のパワーの増分値をすべての音階音について合計して、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、このフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザに拍子を入力してもらう拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを計算するタッピングテンポ計算手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングのビートの数値から、それに最も近い１拍目の位置を出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と
を有することを基本的特徴としている。
【０００８】
上記構成によれば、ビート検出波形の先頭付近を演奏させながら、タッピング検出手段（例えばパソコンのキーボードなど）を用い、ユーザにビート位置を、タッピングしてもらうようにし、ユーザがタッピングしたビートの間隔が数拍に渡って安定してきたら（タッピングの揺らぎが一定の範囲内であると判定されたら）、その間隔をビート間隔として採用し（テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択する）、また、安定したところのタッピング位置をビート検出の先頭ビート位置とするようにしているので、ユーザに数拍タッピングしてもらうだけで、曲全体のビート検出をより正確に行えるようになる。
【０００９】
すなわち、ユーザに再生音を聞かせながらビート位置をタッピングしてもらい、それによりビート間隔とビート検出の先頭のビート位置を抽出することで、テンポ検出精度を上げている。
【００１０】
その際、ビート間隔の平均をとる処理では、近い方に加重した移動平均で計算処理するようにすると良い。また、ユーザがタッピングしたビートの間隔（テンポ）が安定したかどうかは、新しい方からＮ回（例えば４回）のテンポの揺らぎ（平均からのずれ）がＰ％（例えば５％）以内ならば、安定したと判断するようにし、この安定した状態がＭ回（例えば４回）連続して続いた場合に、テンポを決定し、ユーザによるタッピングを終了するようにするのが望ましい。
【００１１】
請求項６の構成は、請求項１記載の構成を、コンピュータに実行させるために、該コンピュータで実行可能なプログラム自身を規定している。すなわち、上述した課題を解決するための構成として、上記各手段を、コンピュータの構成を利用することで実現する、該コンピュータで読み込まれて実行可能なプログラムである。この場合、コンピュータとは中央演算処理装置の構成を含んだ汎用的なコンピュータの構成の他、特定の処理に向けられた専用機などを含むものであっても良く、中央演算処理装置の構成を伴うものであれば特に限定はない。
【００１２】
上記各手段を実現させるためのプログラムが該コンピュータに読み出されると、請求項１に規定された各機能実現手段と同様な機能実現手段が達成されることになる。
【００１３】
請求項６のより具体的構成は、
コンピュータに読み込まれて実行されることにより、該コンピュータを、
音響信号を入力する信号入力手段と、
入力された音響信号から、所定のフレーム毎に、ＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求める音階音パワー検出手段と、
この所定のフレーム毎の各音階音のパワーの増分値をすべての音階音について合計して、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、このフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔を求めて、テンポの候補を検出するテンポ候補検出手段と、
ユーザに拍子を入力してもらう拍子入力手段と、
ユーザのタッピング入力を検出するタッピング検出手段と、
タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録手段と、
タッピング間隔の移動平均をとり、テンポを計算するタッピングテンポ計算手段と、
直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出手段と、
上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力手段と、
上記タッピングテンポ出力手段から出力されたタッピングテンポを元に、該テンポ候補検出手段で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定手段と、
上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングのビートの数値から、それに最も近い１拍目の位置を出力する１拍目位置出力手段と、
同じく上記揺らぎ算出手段でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定手段で決定されたテンポを元に確定させるビート位置確定手段と、
上記１拍目位置出力手段から出力される１拍目の位置とビート位置確定手段から出力される各ビート位置に基づき小節線位置を検出する小節検出手段と
して機能させることを特徴とするテンポ検出用コンピュータプログラムである。
【００１４】
以上のようなプログラムの構成であれば、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の夫々の装置が容易に実現できるようになる。
【００１５】
このプログラムという態様では、通信などを利用して、これを容易に使用、配布、販売することができるようになる。また、既存のハードウェア資源を用いてこのプログラムを使用することにより、既存のハードウェアで新たなアプリケーションとしての本発明の装置が容易に実行できるようになる。
【００１６】
尚、請求項６記載の各機能実現手段のうち一部の機能は、コンピュータに組み込まれた機能（コンピュータにハードウェア的に組み込まれている機能でも良く、該コンピュータに組み込まれているオペレーティングシステムや他のアプリケーションプログラムなどによって実現される機能でも良い）によって実現され、前記プログラムには、該コンピュータによって達成される機能を呼び出すあるいはリンクさせる命令が含まれていても良い。
【００１７】
これは、請求項１に規定された各機能実現手段の一部が、例えばオペレーティングシステムなどによって達成される機能の一部で代行され、その機能を実現するためのプログラムないしモジュールなどは直接存在するわけではないが、それらの機能を達成するオペレーティングシステムの機能の一部を、呼び出したりリンクさせるようにしてあれば、実質的に同じ構成となるからである。
【発明の効果】
【００１８】
本発明の請求項１〜請求項６記載のテンポ検出装置及びテンポ検出用コンピュータプログラムによれば、誤り無く平均的なビートの間隔（いわゆるテンポ）とビートの位置を検出できるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態を図示例と共に説明する。
【実施例１】
【００２０】
図１は、本発明の望ましい実施形態が適用されるパーソナルコンピュータの構成を示している。同図の構成では、後述するＣＤ−ＲＯＭドライブ１８に、ＣＤ−ＲＯＭ２０を入れて、それに読み込ませ、実行された場合に、該パーソナルコンピュータが、本発明のテンポ検出装置として利用可能なプログラムが、該ＣＤ−ＲＯＭ２０に格納されている。従って、このＣＤ−ＲＯＭ２０を上記ＣＤ−ＲＯＭドライブ１８に読み込ませて実行させ、パーソナルコンピュータ上に、本発明のテンポ検出装置が実現されることになる。
【００２１】
図１に示されるパーソナルコンピュータの回路概要は、システムバス１０を介して、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、画像コントロール部（図示無し）を介して接続されるディスプレイ１４、Ｉ／Ｏインターフェース１５、ハードディスクドライブ１９がつながっており、該システムバス１０を介して、夫々のデバイスに制御信号、データの入出力がなされることになる。
【００２２】
ＣＰＵ１１は、ＣＤ−ＲＯＭドライブ１８により上記ＣＤ−ＲＯＭ２０から読み込まれ、ハードディスクドライブ１９乃至ＲＡＭ１３に格納される上記プログラムに基づき、テンポ検出装置全体の制御を行う中央演算処理装置である。また後述する音階音パワー検出部１０１と、テンポ候補検出部１０２と、タッピングテンポ計算部１０６と、揺らぎ算出部１０７と、タッピングテンポ出力部１０８と、１拍目位置出力部１０９と、テンポ確定部１１０と、ビート位置確定部１１１と小節検出部１１２とは、上記プログラムが稼働した該ＣＰＵ１１によって構成されることになる。
【００２３】
ＲＯＭ１２は、本パーソナルコンピュータのＢＩＯＳなどが記憶されている格納領域である。
【００２４】
ＲＡＭ１３は、本プログラムの格納エリアの他、ワークエリア、種々の係数、パラメータ、後述する練習フラグや記憶フラグ等の、一時的な記憶領域（例えば後述するような各変数を一時的に記憶しておく）等として使用される。
【００２５】
ディスプレイ１４は、ＣＰＵ１１の指令により、必要な画像処理を行う画像コントロール部（図示無し）によって、制御されており、その画像処理結果を表示する。
【００２６】
Ｉ／Ｏインターフェース１６は、これを介してシステムバス１０につながるキーボード１６、サウンドシステム１７及びＣＤ−ＲＯＭドライブ１８に接続されており、これらのデバイスとシステムバス１０上につながった上記デバイスとの間で、制御信号やデータの入出力がなされることになる。
【００２７】
上記デバイスのうちキーボード１６は、後述するタッピング検出部１０４を構成することになる。
【００２８】
またＣＤ−ＲＯＭドライブ１８は、テンポ検出用のプログラムが格納されたＣＤ−ＲＯＭ２０から、該プログラムやデータなどを読み出す。そのプログラムやデータなどは、ハードディスクドライブ１９に格納され、またメインとなるプログラムは上記ＲＡＭ１３上に格納され、ＣＰＵ１１により実行される。
【００２９】
上述のように、ハードディスクドライブ１９は、上記テンポ検出用プログラムの読み込み及びその実行によって、該プログラム自身と必要なデータ等を格納する。該ハードディスクドライブに記憶されるデータは、サウンドシステム１７やＣＤ−ＲＯＭドライブ１８から入力されるものと同等の演奏・歌唱データなどがある。
【００３０】
本実施形態に係るテンポ検出用プログラムを、パーソナルコンピュータ（ＲＡＭ１３及びハードディスクドライブ１９）に読み込ませて、（ＣＰＵ１１に）実行させることで、図２に示すようなテンポ検出装置の構成となる。
【００３１】
図２は、本発明の実施例構成であるテンポ検出装置の全体ブロック図である。同図によれば、本テンポ検出装置の構成は、音響信号を入力する入力部１００と、入力された音響信号から、所定の時間間隔（フレーム）で、ＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求める音階音パワー検出部１０１と、このフレーム毎の各音階音のパワーの増分値をすべての音階音について合計して、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、このフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出するテンポ候補検出部１０２と、ユーザに拍子を入力してもらう拍子入力部１０３と、ユーザのタッピング入力を検出するタッピング検出部１０４と、タッピング間隔とタッピングのあった時間と各タッピングのビートの数値を記録する記録部１０５と、タッピング間隔の移動平均をとり、テンポを計算するタッピングテンポ計算部１０６と、直近の移動平均毎のタッピングテンポの揺らぎを算出する揺らぎ算出部１０７と、上記揺らぎが一定の範囲内の場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力するタッピングテンポ出力部１０８と、該タッピングテンポ出力部１０８から出力されたタッピングテンポを元に、該テンポ候補検出部１０２で検出されたビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔を選択するテンポ確定部１１０と、上記揺らぎ算出部１０７でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングのビートの数値から、それに最も近い１拍目の位置を出力する１拍目位置出力部１０９と、同じく上記揺らぎ算出部１０７でタッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置を先頭ビート位置として、それ以後およびそれ以前の各ビート位置をテンポ確定部１１０で決定されたテンポを元に確定させるビート位置確定部１１１と、上記１拍目位置出力部１０９から出力される１拍目の位置とビート位置確定部１１１から出力される各ビート位置に基づき小節線位置を検出する小節検出部１１２とを有している。
【００３２】
上記テンポ検出用プログラムを、パーソナルコンピュータ（ＲＡＭ１３及びハードディスクドライブ１９）に読み込ませて、（ＣＰＵ１１に）実行させると、最初に、拍子入力部１０３により、図３のような画面が表示され、ユーザは、テンポを検出しようとする曲の拍子の入力が要求され、それに応じて、拍子を入力することになる。同図では、４分の何拍子かを選択している状態を示している。
【００３３】
また音楽音響信号を入力する上記入力部１００は、テンポ検出をする対象の音楽音響信号を入力する部分であり、サウンドシステム１７により、マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器（図示無し）によりディジタル信号に変換しても良いし、ＣＤ−ＲＯＭドライブ１８により読み込まれた音楽ＣＤなどのディジタル化された音楽データの場合は、そのままファイルとして取り込み（リッピング）、これを指定して開くようにしても良い（その場合一時的にハードディスクドライブ１９に一時的に格納しておくことも出来る）。このようにして入力したディジタル信号がステレオの場合、後の処理を簡略化するためにモノラルに変換する。
【００３４】
このディジタル信号は、音階音パワー検出部１０１に入力される。この音階音パワー検出部は図４の各部から構成される。
【００３５】
そのうち波形前処理部１０１ａは、音楽音響信号の上記入力部１００からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする構成である。
【００３６】
ダウンサンプリングレートは、ビート検出に使う楽器の音域によって決定する。すなわち、シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、ダウンサンプリング後のサンプリング周波数はそれほど高くする必要はない。
【００３７】
例えば検出する最高音をＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数は、ナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【００３８】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。
【００３９】
このようにダウンサンプリングの処理を行うのは、この後のＦＦＴ演算において、同じ周波数分解能を得るために必要なＦＦＴポイント数を下げることで、ＦＦＴの演算時間を減らすのが目的である。
【００４０】
なお、音楽ＣＤのように、音源が固定のサンプリング周波数で既にサンプリングされている場合は、このようなダウンサンプリングが必要になるが、音楽音響信号の入力部１００が、マイク等の機器から入力されたアナログ信号をＡ／Ｄ変換器によりディジタル信号に変換するような場合には、当然Ａ／Ｄ変換器のサンプリング周波数を、ダウンサンプリング後のサンプリング周波数に設定することで、この波形前処理部を省くことが可能である。
【００４１】
このようにして波形前処理部１０１ａによるダウンサンプリングが終了したら、所定の時間間隔（フレーム）で、波形前処理部の出力信号を、ＦＦＴ演算部１０１ｂによりＦＦＴ（高速フーリエ変換）する。
【００４２】
ＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出に適した値とする。つまり、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性を考慮しなくてはならない（つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い）。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし残りは０で埋めることによって、ＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、低音側のパワーも正しく検出するためには、ある程度の波形サンプル数は必要である。
【００４３】
以上のようなことを考慮し、本実施例では、ＦＦＴポイント数５１２、窓のシフトは３２サンプル（窓のオーバーラップは１５／１６）で、０埋めなしという設定にした。このような設定でＦＦＴ演算を行うと、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚとなる。時間分解能約８．７ｍｓという値は、四分音符＝３００のテンポの曲で、３２分音符の長さが、２５ｍｓであることを考えると、十分な値であることがわかる。
【００４４】
このようにして、フレーム毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がパワー検出部１０１ｃに送られる。
【００４５】
パワー検出部１０１ｃでは、ＦＦＴ演算部１０１ｂで計算されたパワー・スペクトルから、各音階音のパワーを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のパワーを検出するために、以下のような処理を行う。つまり、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のパワーとする。
【００４６】
すべての音階音についてパワーが検出されたら、これをバッファ２００に保存し、波形の読み出し位置を所定の時間間隔（１フレーム；先の例では３２サンプル）進めて、ＦＦＴ演算部１０１ｂとパワー検出部１０１ｃを波形の終わりまで繰り返す。
【００４７】
以上により、音楽音響信号の入力部１００に入力された音響信号の、所定時間毎の各音階音のパワーが、バッファ２００に保存される。
【００４８】
次に、図２のテンポ候補検出部１０２の構成について説明する。該テンポ候補検出部１０２は、図５のような処理の流れで実行される。
【００４９】
テンポ候補検出部１０２は、音階音パワー検出部が出力した１フレーム毎の各音階音のパワーの変化を元に平均的なビート（拍）間隔（つまりテンポ）とビートの位置を検出する。そのために、まずテンポ候補検出部１０２は、各音階音のパワー増分値の合計（前のフレームとのパワーの増分値をすべての音階音で合計したもの。前のフレームからパワーが減少している場合は０として加算する）を計算する（ステップＳ１００）。
【００５０】
つまり、フレーム時間ｔにおけるｉ番目の音階音のパワーをＬｉ（ｔ）とするとき、ｉ番目の音階音のパワー増分値Ｌａｄｄｉ（ｔ）は、下式数１に示すようになり、このＬａｄｄｉ（ｔ）を使って、フレーム時間ｔにおける各音階音のパワー増分値の合計Ｌ（ｔ）は、下式数２で計算できる。ここで、Ｔは音階音の総数である。
【００５１】
【数１】
2008040284.tif 000003
【００５２】
【数２】
2008040284.tif 000004
【００５３】
この合計Ｌ（ｔ）値は、フレーム毎の全体での音の変化度合いを表している。この値は、音の鳴り始めで急激に大きくなり、同時に鳴り始める音が多いほど大きな値となる。音楽はビートの位置で音が鳴り始めることが多いので、この値が大きなところはビートの位置である可能性が高いことになる。
【００５４】
例として、図６に、ある曲の一部分の波形と各音階音のパワー、各音階音のパワー増分値の合計の図を示す。上段が波形、中央がフレーム毎の各音階音のパワーを濃淡で表したもの（下が低い音、上が高い音。この図では、Ｃ１からＡ６の範囲）、下段がフレーム毎の各音階音のパワー増分値の合計を示している。この図の各音階音のパワーは、音階音パワー検出部から出力されたものであるので、周波数分解能が約７．２Ｈｚであり、Ｇ＃２以下の一部の音階音でパワーが計算できずに歯抜け状態になっているが、この場合はビートを検出するのが目的であるので、低音の一部の音階音のパワーが測定できないのは、問題ない。
【００５５】
この図の下段に見られるように、各音階音のパワー増分値の合計は、定期的にピークをもつ形となっている。この定期的なピークの位置が、ビートの位置である。
【００５６】
ビートの位置を求めるために、テンポ候補検出部１０２では、まずこの定期的なピークの間隔、つまり平均的なビート間隔を求める。平均的なビート間隔はこの各音階音のパワー増分値の合計の自己相関から計算できる（図５；ステップＳ１０２）。
【００５７】
あるフレーム時間ｔにおける各音階音のパワー増分値の合計をＬ（ｔ）とすると、この自己相関φ（τ）は、以下の式数３で計算される。
【００５８】
【数３】
2008040284.tif 000005
ここで、Ｎは総フレーム数、τは時間遅れである。
【００５９】
自己相関計算の概念図を、図７に示す。この図のように、時間遅れτがＬ（ｔ）のピークの周期の整数倍の時に、φ（τ）は大きな値となる。よって、ある範囲のτについてφ（τ）の最大値を求めれば、曲のテンポを求めることができる。
【００６０】
自己相関を求めるτの範囲は、想定する曲のテンポ範囲によって変えれば良い。例えば、メトロノーム記号で四分音符＝３０から３００の範囲を計算するならば、自己相関を計算する範囲は、０．２秒から２秒となる。時間（秒）からフレームへの変換式は、以下の数４式に示す通りとなる。
【００６１】
【数４】
2008040284.tif 000006
【００６２】
この範囲の自己相関φ（τ）が最大となるτをビート間隔としても良いが、必ずしも全ての曲で自己相関が最大となる時のτがビート間隔とはならないので、自己相関が極大値となる時のτからビート間隔の候補を求め（図５；ステップＳ１０４）、これら複数の候補から、後述するように、直近の移動平均毎のタッピングテンポの揺らぎが一定の範囲内の場合になった場合にタッピングテンポ出力部１０８から出力されるタッピングテンポと上記タッピングの最後の時間とそのときのビートの数値に基づき、テンポ確定部１１０により、タッピングテンポに数値的に近いテンポが決定される（図５；ステップＳ１０６）。
【００６３】
図８は、このステップＳ１０６におけるテンポ確定までの処理フローを示している。
【００６４】
まず、ＲＡＭ１３上に設定された変数が初期化される（ステップＳ２００）。該変数としては、タッピングされた回数（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）がインクリメントされ（ステップＳ４０８）、上記ステップＳ４０２に復帰して、以上の処理を繰り返す。
【００９３】
タッピングテンポ出力部１０８は、上記揺らぎが一定の範囲内であると判定した場合、タッピングテンポと上記タッピングの最後の時間とそのときのビートの数値を出力する。それによって、上記テンポ確定部１１０により、ビート間隔の候補から、上記タッピングテンポに数値的に近いビート間隔が選択され、テンポが確定される。その一方で、ビート位置確定部１１１により、タッピングの揺らぎが一定の範囲内であると判定された時のタッピングの位置が、先頭ビート位置として、さらにそれ以後およびそれ以前の各ビート位置がテンポ確定部１１０で決定されたテンポを元に確定される。
【００９４】
以上のように、先頭ビート位置が決まり、それ以降のビートの位置を１つずつ決定していく方法を、図１１を用いて説明する。図１１の三角印の位置に先頭のビートが見つかったとする。２番目のビート位置は、この先頭のビート位置からビート間隔τｍａｘだけ離れた位置を仮のビート位置とし、その近辺でＬ（ｔ）とＭ（ｔ）が最も相関が取れる位置から決定する。つまり、先頭のビート位置をｂ０とするとき、以下の式のｒ（ｓ）が最大となるようなｓの値を求める。この式のｓは仮のビート位置からのずれで、以下の式数５の範囲の整数とする。Ｆは揺らぎのパラメータで０．１程度の値が適当であるが、テンポの揺らぎの大きい曲では、もっと大きな値にしてもよい。ｎは５程度で良い。
【００９５】
ｋは、ｓの値に応じて変える係数で、例えば図１２のような正規分布とする。
【００９６】
【数５】
2008040284.tif 000007
【００９７】
ｒ（ｓ）が最大となるようなｓの値が求まれば、２番目のビート位置ｂ１は、下式数６で計算される。
【００９８】
【数６】
2008040284.tif 000008
【００９９】
以降、同じようにして３番目以降のビート位置も求めることができる。
【０１００】
テンポがほとんど変わらない曲ではこの方法でビート位置を曲の終わりまで求めることができるが、実際の演奏は多少テンポが揺らいだり、部分的にだんだん遅くなったりすることがよくある。
【０１０１】
そこで、これらのテンポの揺らぎにも対応できるように以下のような方法を考えた。
【０１０２】
つまり、図１１のＭ（ｔ）の関数を、図１３のように変化させるものである。
１）は、従来の方法で、図のように各パルスの間隔をτ１、τ２、τ３、τ４としたとき、
τ１＝τ２＝τ３＝τ４＝τｍａｘ
である。
２）は、τ１からτ４を均等に大きくしたり小さくしたりするものである。
τ１＝τ２＝τ３＝τ４＝τｍａｘ＋ｓ  (-τｍａｘ・Ｆ≦ｓ≦τｍａｘ・Ｆ）これにより、急にテンポが変わった場合に対応できる。
３）は、ｒｉｔ．（リタルダンド、だんだん遅く）又は、ａｃｃｅｌ．（アッチェレランド、だんだん速く）に対応したもので、各パルス間隔は、
τ１＝τｍａｘ
τ２＝τｍａｘ＋１・ｓ
τ３＝τｍａｘ＋２・ｓ  （-τｍａｘ・Ｆ≦ｓ≦τｍａｘ・Ｆ）
τ４＝τｍａｘ＋４・ｓ
で計算される。
１、２、４の係数は、あくまで例であり、テンポ変化の大きさによって変えてもよい。
４）は、３）のようなｒｉｔ．やａｃｃｅｌ．の場合の、５個のパルスの位置のどこが現在ビートを求めようとしている場所かを変えるものである。
【０１０３】
これらをすべて組み合わせて、Ｌ（ｔ）とＭ（ｔ）の相関を計算し、それらの最大からビート位置を決めれば、テンポが揺らぐ曲に対してもビート位置の決定が可能である。なお、２）と３）の場合には、相関を計算するときの係数ｋの値を、やはりｓの値に応じて変えるようにする。
【０１０４】
さらに、５個のパルスの大きさは現在すべて同じにしてあるが、ビートを求める位置（図１３の仮のビート位置）のパルスのみ大きくしたり、ビートを求める位置から離れるほど値を小さくして、ビートを求める位置の各音階音のパワー増分値の合計を強調するようにしても良い［図１３の５）］。以上のようにしてビート位置を決定していくが、タッピングテンポ出力部１０８が出力したビート位置より前の位置についてもビートを検出する場合は、同様の処理を波形の後ろ方向ではなく、波形の前方向に行えば良い。
【０１０５】
以上のようにして、各ビートの位置が決定したら、この結果をバッファ２０１に保存すると共に、検出した結果を表示し、ユーザに確認してもらい、間違っている箇所を修正してもらうようにしても良い。
【０１０６】
ビート検出結果の確認画面の例を、図１４に示す。同図の三角印の位置が検出したビート位置である。
【０１０７】
「再生」のボタンを押すと、現在の音楽音響信号が、Ｄ／Ａ変換され、スピーカ等から再生される。現在の再生位置は、図のように縦線等の再生位置ポインタで表示されるので、演奏を聞きながら、ビート検出位置の誤りを確認できる。さらに、検出の元波形の再生と同時に、ビート位置のタイミングで例えばメトロノームのような音を再生させるようにすれば、目で確認するだけでなく音でも確認でき、より容易に誤検出を判断できる。このメトロノームの音を再生させる方法としては、例えばＭＩＤＩ機器等が考えられる。
【０１０８】
ビート検出位置の修正は、「ビート位置の修正」ボタンを押して行う。このボタンを押すと、画面に十字のカーソルが現れるので、最初のビート検出が間違っている箇所で正しいビート位置をクリックする。クリックされた場所の少し前（例えばτｍａｘの半分の位置）から後のビート位置をすべてクリアし、クリックされた場所を、仮のビート位置として、以降のビート位置を再検出する。
【０１０９】
次に、小節位置決定のための前提となる、１拍目位置の決定について説明する。
【０１１０】
上述したビート位置確定部１１１により、各ビート位置は確定するが、そのままだと、小節の位置は確定しない。そのため、ユーザに対して、最初に拍子入力部１０３に、拍子の入力を要求している。また、タッピング入力の際には、演奏を聴きながらその１拍目の時にステップＳ２３０のFlashの点灯によるビート数値が１となるようにタッピングしてもらっている。そのタッピング時に算出されるタッピングテンポの揺らぎが、上記揺らぎ算出部１０７により、一定の範囲内であると判定された時、そのタッピングのビートの数値から、それに最も近い１拍目の位置が求められ、その位置が１拍目の位置として出力される。
【０１１１】
以上のようにして、１拍目の位置（小節線の位置）が決定したら、その１拍目の位置が小節検出部１１２に出力されるので、ビート位置確定部１１１により確定された各ビート位置と共に、小節検出部１１２により、小節線位置が検出されることになる。この結果をバッファ２０２に保存する。それと共に、検出した結果を画面表示して、ユーザに変更させるようにしても良い。特に変拍子の曲は、この方法では対応できないので、変拍子の箇所をユーザに指定してもらう必要がある。
【０１１２】
以上の構成により、人間が演奏したテンポの揺らぐ演奏の音響信号から、曲全体の平均的なテンポと正確なビート（拍）の位置、さらに小節線の位置を検出することが可能となる。
【実施例２】
【０１１３】
図１５は、本発明のテンポ検出構成を使用したコード検出装置の全体ブロック図である。同図において、テンポ検出及び小節検出の構成は、上記構成と基本的に同じであり、同一構成において、テンポ検出用とコード検出用の構成について、上記構成の場合と異なるものもあるので、数式等を除き、同じ説明が重なるが、以下に示す。
【０１１４】
同図によれば、本コード検出装置の構成は、音響信号を入力する入力部１００と、入力された音響信号から、所定の時間間隔（フレーム）で、ビート検出に適したパラメータを使ってＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求めるビート検出用音階音パワー検出部１０１と、このフレーム毎の各音階音のパワーの増分値をすべての音階音について合計して、フレーム毎の全体の音の変化度合いを示すパワーの増分値の合計を求め、このフレーム毎の全体の音の変化度合いを示すパワーの増分値の合計から、平均的なビート間隔と各ビートの位置を検出する上記テンポ候補検出部１０２〜上記小節検出部１１２までの実施例１に記載された各構成と、上記入力された音響信号から、先のビート検出の時とは異なる別の時間間隔（フレーム）で、コード検出に適したパラメータを使ってＦＦＴ演算を行い、求められたパワースペクトルからフレーム毎の各音階音のパワーを求めるコード検出用音階音パワー検出部３００と、検出した各音階音のパワーのうち、各小節を幾つかの検出範囲に設定し、各検出範囲内の１拍目に相当する部分の低域側の音階音のパワーから各検出範囲のベース音を検出するベース音検出部３０１と、検出されたベース音が各検出範囲で異なるか否かによって、ベース音の変化のあるなしを判定し、このベース音の変化があるなしにより小節を複数個に分割することの可否を決定する第１の小節分割決定部３０２と、同じく小節を幾つかのコード検出区間に設定し、主に和音が演奏されている音域として設定されたコード検出音域において、フレーム毎の各音階音のパワーを上記検出区間で平均し、これらの平均された各音階音のパワーをさらに１２の音階音毎に積算し、積算した数で割り１２の音階音の平均パワーを求め、夫々をパワーの強い順に並べ替えておいて、後続区間の強い音の内上位３以上のＭ個の音階音がその前の区間の強い音の内上位３以上のＮ個の音階音に、Ｃ個以上含まれるか否かによって、和音の変化のあるなしを判定し、この和音の変化の度合いにより小節を複数個に分割することの可否を決定する第２の小節分割決定部３０３と、第１乃至第２の小節分割決定部３０２、３０３により、小節を幾つかのコード検出範囲に分割する必要があると決定された場合は、ベース音と各コード検出範囲における各音階音のパワーから、また小節を分割する必要がないと決定された場合は、ベース音とその小節の各音階音のパワーから、各コード検出範囲又はその小節におけるコード名を決定するコード名決定部３０４とを有している。
【０１１５】
音楽音響信号を入力する上記入力部１００は、コード検出をする対象の音楽音響信号を入力する部分であるが、基本的構成は上記構成の入力部１００と同じであるので、その詳細な説明は省略する。ただし、通常センタに定位されるボーカルが後のコード検出でじゃまになる場合は、右チャンネルの波形と左チャンネルの波形を引き算することでボーカルキャンセルするようにしても良い。
【０１１６】
このディジタル信号は、ビート検出用音階音パワー検出部１０１とコード検出用音階音パワー検出部３００とに入力される。これらの音階音パワー検出部は、どちらも上記図４の各部から構成され、構成はまったく同じなので、同じものをパラメータだけを変えて再利用できる。
【０１１７】
そしてその構成として使用される波形前処理部１０１ａは、上記と同様な構成であり、音楽音響信号の上記入力部１００からの音響信号を今後の処理に適したサンプリング周波数にダウンサンプリングする。ただし、ダウンサンプリング後のサンプリング周波数、つまり、ダウンサンプリングレートは、ビート検出用とコード検出用で変えるようにしても良いし、ダウンサンプリングする時間を節約するために同じにしても良い。
【０１１８】
ビート検出用の場合は、ビート検出に使う音域によってダウンサンプリングレートを決定する。シンバル、ハイハット等の高音域のリズム楽器の演奏音をビート検出に反映させるには、ダウンサンプリング後のサンプリング周波数を高い周波数にする必要があるが、ベース音とバスドラム、スネアドラム等の楽器音と中音域の楽器音から主にビート検出させる場合には、以下のコード検出時と同じダウンサンプリングレートで構わない。
【０１１９】
コード検出用の波形前処理部のダウンサンプリングレートは、コード検出音域によって変える。コード検出音域とは、コード名決定部でコード検出する時に使う音域のことである。例えばコード検出音域をＣ３からＡ６（Ｃ４が中央のド）とする場合、Ａ６の基本周波数は約１７６０Ｈｚ（Ａ４＝４４０Ｈｚとした場合）となるので、ダウンサンプリング後のサンプリング周波数はナイキスト周波数が１７６０Ｈｚ以上となる、３５２０Ｈｚ以上にすれば良い。これから、ダウンサンプリングレートは、元のサンプリング周波数が４４．１ｋＨｚ（音楽ＣＤ）の場合、１／１２程度にすれば良いことになる。この時、ダウンサンプリング後のサンプリング周波数は、３６７５Ｈｚとなる。
【０１２０】
ダウンサンプリングの処理は、通常、ダウンサンプリング後のサンプリング周波数の半分の周波数であるナイキスト周波数（今の例では１８３７．５Ｈｚ）以上の成分をカットするローパスフィルタを通した後に、データを読み飛ばす（今の例では波形サンプルの１２個に１１個を破棄する）ことによって行われる。これについては、上記構成に説明したことと同じ理由による。
【０１２１】
このようにして波形前処理部１０１ａによるダウンサンプリングが終了したら、所定の時間間隔で、波形前処理部の出力信号をＦＦＴ演算部１０１ｂにより、ＦＦＴ（高速フーリエ変換）する。
【０１２２】
ＦＦＴのパラメータ（ＦＦＴポイント数とＦＦＴ窓のシフト量）は、ビート検出時とコード検出時で異なる値とする。これは、周波数分解能を上げるためにＦＦＴポイント数を大きくすると、ＦＦＴ窓のサイズが大きくなってしまい、より長い時間から１回のＦＦＴを行うことになり、時間分解能が低下する、というＦＦＴの特性によるものである（つまりビート検出時は周波数分解能を犠牲にして時間分解能をあげるのが良い）。窓のサイズと同じだけの長さの波形を使わないで、窓の一部だけに波形データをセットし、残りは０で埋めることによってＦＦＴポイント数を大きくしても時間分解能が悪くならない方法もあるが、本実施例のケースでは、低音側のパワーも正しく検出するためにある程度の波形サンプル数は必要である。
【０１２３】
以上のようなことを考慮し、本実施例では、ビート検出時は、ＦＦＴポイント数５１２、窓のシフトは３２サンプル（窓のオーバーラップは１５／１６）で、０埋めなしであるが、コード検出時は、ＦＦＴポイント数８１９２、窓のシフトは１２８サンプル（窓のオーバーラップは６３／６４）で、波形サンプルは一度のＦＦＴで１０２４サンプル使うようにした。このような設定でＦＦＴ演算を行うと、ビート検出時は、時間分解能約８．７ｍｓ、周波数分解能約７．２Ｈｚ、コード検出時は、時間分解能約３５ｍｓ、周波数分解能約０．４Ｈｚとなる。今パワーを求めようとしている音階音は、Ｃ１からＡ６の範囲であるので、コード検出時の周波数分解能約０．４Ｈｚは、最も周波数差の小さいＣ１とＣ＃１の基本周波数の差、約１．９Ｈｚにも対応できる。また、四分音符＝３００のテンポの曲で３２分音符の長さが２５ｍｓであることを考えると、ビート検出時の時間分解能約８．７ｍｓは、十分な値であることが分かる。
【０１２４】
このようにして、フレーム毎にＦＦＴ演算が行われ、その実数部と虚数部のそれぞれを二乗したものの和の平方根からパワーが計算され、その結果がパワー検出部１０１ｃに送られる。
【０１２５】
パワー検出部１０１ｃでは、ＦＦＴ演算部１０１ｂで計算されたパワー・スペクトルから、各音階音のパワーを計算する。ＦＦＴは、サンプリング周波数をＦＦＴポイント数で割った値の整数倍の周波数のパワーが計算されるだけであるので、このパワー・スペクトルから各音階音のパワーを検出するために、上記構成と同様な処理を行う。すなわち、音階音を計算するすべての音（Ｃ１からＡ６）について、その各音の基本周波数の上下５０セントの範囲（１００セントが半音）の周波数に相当するパワー・スペクトルの内、最大のパワーを持つスペクトルのパワーをこの音階音のパワーとする。
【０１２６】
すべての音階音についてパワーが検出されたら、これをバッファに保存し、波形の読み出し位置を所定の時間間隔（１フレーム；先の例ではビート検出時は３２サンプル、コード検出時は２５６サンプル）進めて、ＦＦＴ演算部１０１ｂとパワー検出部１０１ｃを波形の終わりまで繰り返す。
【０１２７】
以上により、音楽音響信号の入力部１００に入力された音響信号の、フレーム毎の各音階音のパワーが、ビート検出用とコード検出用の２種類のバッファ２００及び２０３に保存される。
【０１２８】
次に、図１５のテンポ候補検出部１０２〜小節検出部１１２の構成については、上記実施例１の構成のテンポ候補検出部１０２〜小節検出部１１２と同じ構成なので、その詳細な説明は、ここでは、省略する。
【０１２９】
上記構成と同様な構成と手順で、小節線の位置（各小節のフレーム番号）が確定したので、今度は各小節のベース音を検出する。
【０１３０】
ベース音は、コード検出用音階音パワー検出部３００が出力した各フレームの音階音のパワーから検出する。
【０１３１】
図１６に上記構成の図６と同じ曲の同じ部分のコード検出用音階音パワー検出部３００が出力した各フレームの音階音のパワーを示す。この図のように、コード検出用音階音パワー検出部３００での周波数分解能は、約０．４Ｈｚであるので、Ｃ１からＡ６のすべての音階音のパワーが抽出されている。
【０１３２】
本出願人による先の出願では、ベース音は、小節の前半と後半で異なる可能性があるので、小節を前半と後半の２つに分割し、その夫々でベース音を検出し、別のベース音が検出された場合は、コードも前半と後半に分けて検出するという構成である。しかし、この方法では、ベース音が同じで和音が異なる場合、例えば、小節の前半がＣのコードで、後半がＣｍのコードの場合に、ベース音は同じであるために小節を分割することができず、コードを小節全体で検出してしまうという問題があった。
【０１３３】
また、上記出願では、ベース音を検出範囲全体で検出していた。つまり、検出範囲が小節の場合は、小節全体で強い音をベース音としていた。しかし、ジャズのようなベースランニング（ベースが４分音符などで動く）場合には、この方法では正しくベース音を検出することができない。
【０１３４】
そのため、本実施例構成では、まず、ベース音検出部３０１で、ベース音の検出を行うが、検出した各音階音のパワーのうち、各小節を幾つかの検出範囲に設定し、各検出範囲内の１拍目に相当する部分の低域側の音階音のパワーから各検出範囲のベース音を検出する構成とした。これは、上述のように、ベースランニングの場合にも、最初の１拍目はコードのルート音を弾くことが多いことによる。
【０１３５】
ベース音は、１拍目の検出範囲内に相当する部分におけるベース検出音域の音階音のパワーの平均的な強さから求める。
【０１３６】
フレーム時間ｔにおけるｉ番目の音階音のパワーをＬｉ（ｔ）とすると、フレームｆｓからｆｅのｉ番目の音階音の平均的なパワーＬａｖｇｉ（ｆｓ，ｆｅ）は、下式数７で計算できる。
【０１３７】
【数７】
2008040284.tif 000009
【０１３８】
この平均的なパワーを、ベース検出音域、例えばＣ２からＢ３の範囲で計算し、平均的なパワーが最も大きな音階音をベース音として、ベース音検出部３０１は、決定する。ベース検出音域に音が含まれない曲や無音部分で間違ってベース音を検出しないために、適当な閾値を設定し、検出したベース音のパワーが、この閾値以下の場合は、ベース音を検出しないようにしても良い。また、後のコード検出でベース音を重要視する場合には、検出したベース音が１拍目のベース検出期間中継続してあるパワー以上を保っているかどうかをチェックするようにして、より確実なものだけをベース音として検出するようにしても良い。さらに、ベース検出音域中、平均的なパワーが最も大きい音階音をベース音として決定するのではなく、この各音名の平均的なパワーを１２の音名毎に平均し、この音名毎のパワーが最も大きな音名をベース音名として決定し、その音名を持つベース検出音域の中の音階音で、平均的なパワーが最も大きい音階音をベース音として決定するようにしても良い。
【０１３９】
ベース音が決定したら、この結果をバッファ２０４に保存すると共に、ベース検出結果を画面表示して、間違っている場合にはユーザに修正させるようにしても良い。また、曲によってベース音域が変わることも考えられるので、ユーザがベース検出音域を変更できるようにしても良い。
【０１４０】
図１７に、ベース音検出部３０１によるベース検出結果の表示例を示す。
【０１４１】
次に第１の小節分割決定部３０２により、検出されたベース音が各検出範囲で異なるか否かによって、ベース音の変化のあるなしを判定し、このベース音の変化があるなしにより小節を複数個に分割することの可否を決定する。すなわち、検出されたベース音が各検出範囲で同じであれば、その小節を分割する必要はないと決定する。また検出されたベース音が各検出範囲で異なれば、その小節を分割する必要があると決定する。この場合、さらに夫々の半分がさらに分割する必要があるか否かを繰り返し判断するようにしても良い。
【０１４２】
他方第２の小節分割決定部３０３の構成では、まず、コード検出音域を設定する。これは、主に和音が演奏されている音域で、例えば、Ｃ３〜Ｅ６（Ｃ４が中央のド）とする。
【０１４３】
このコード検出音域のフレーム毎の各音階音のパワーを、小節の半分等の検出区間で平均する。平均された各音階音のパワーをさらに１２の音階音（Ｃ、Ｃ＃、Ｄ、Ｄ＃、…、Ｂ）毎に積算し、積算した数で割り、１２の音階音の平均パワーを求める。
【０１４４】
小節の前半と後半で、このコード検出音域の１２の音階音の平均パワーを求め、夫々を強い順に並べ替えておく。
【０１４５】
上記図１８(ａ)(ｂ)に示すように、後半の強い音の内、例えば上位３つ（この数をＭとする）が、前半の例えば上位３つ（この数をＮとする）に含まれているかどうかを調べ、その数以上含まれるか否かによって、和音の変化のあるなしを判定する。この判定により、第２の小節分割決定部３０３は、この和音の変化の度合いを判定し、それによって、小節を複数個に分割することの可否を決定する。
【０１４６】
含まれている数が例えば３つ（この数をＣとする）以上の場合（即ちすべて含まれる）には、小節の前半と後半で和音の変化は無いと判断し、和音の変化度合いによる小節の分割は行わないと、第２の小節分割決定部３０３では決定する。
【０１４７】
第２の小節分割決定部３０３におけるこのＭ、Ｎ、Ｃの値を適当に設定することにより、この和音の変化度合いによる小節分割の強さを変えることができる。先の例の全て３では、かなりシビアに和音の変化をチェックするが、例えば、Ｍ＝３、Ｎ＝６、Ｃ＝３（後半の上位３つの音が前半の上位６つに全て含まれるかどうか）にすれば、ある程度似た響きであれば、同じ和音であると判断する。
【０１４８】
先に４拍子の場合、前半と後半を夫々更に半分に分割して小節全体を４分割することを述べたが、前半と後半の分割判断では、Ｍ＝３、Ｎ＝３、Ｃ＝３とし、前半と後半を更に半分に分割するかどうかの判断では、Ｍ＝３、Ｎ＝６、Ｃ＝３とすることで、実際の一般的な音楽に適合したより正しい判断を行うことができる。
【０１４９】
コード名決定部３０４は、第１乃至第２の小節分割決定部３０２又は３０３によって、小節を幾つかのコード検出範囲に分割する必要があると決定された場合は、ベース音と各コード検出範囲における各音階音のパワーから、また小節を分割する必要がないと決定された場合は、ベース音とその小節の各音階音のパワーから、各コード検出範囲又はその小節におけるコード名を決定する構成である。
【０１５０】
コード名決定部３０４による実際のコード名の決定は以下のようにして行われる。本実施例では、コード検出期間とベース検出期間は同一としている。コード検出音域、例えばＣ３からＡ６の各音階音のコード検出期間における平均的なパワーを計算し、これが大きな値を持つ音階音から順に数個の音名を検出し、これとベース音の音名からコード名候補を抽出する。
【０１５１】
この際、必ずしもパワーが大きな音がコード構成音であるとは限らないので、複数の音名の音を例えば５つ検出し、その中の２つ以上を全ての組み合わせで抜き出して、これとベース音の音名とからコード名候補の抽出を行う。
【０１５２】
コードに関しても、平均的なパワーが閾値以下のものは検出しないようにしても良い。また、コード検出音域もユーザが変更できるようにしても良い。さらに、コード検出音域中、平均的なパワーが最も大きい音階音から順にコード構成音候補を抽出するのではなく、このコード検出音域内の各音名の平均的なパワーを１２の音名毎に平均し、この音名毎のパワーの最も大きな音名から順にコード構成音候補を抽出しても良い。
【０１５３】
コード名候補の抽出は、コードのタイプ（ｍ、Ｍ７等）とコード構成音のルート音からの音程を保存したコード名データベースを、コード名決定部３０４により検索することによって抽出する。つまり、検出した５つの音名の中から全ての２つ以上の組み合わせを抜き出し、これらの音名間の音程が、このコード名データベースのコード構成音の音程の関係にあるかどうかをしらみつぶしに調べ、同じ音程関係にあれば、コード構成音のいずれかの音名からルート音を算出し、そのルート音の音名にコードタイプを付けて、コード名を決定する。この時、コードのルート音（根音）や５度の音は、コードを演奏する楽器では省略されることがあるので、これらを含まなくてもコード名候補として抽出するようにする。ベース音を検出した場合には、このコード名候補のコード名にベース音の音名を加える。すなわち、コードのルート音とベース音が同じ音名であればそのままで良いし、異なる音名の場合は分数コードとする。
【０１５４】
上記方法では、抽出されるコード名候補が多過ぎるという場合には、ベース音による限定を行っても良い。つまり、ベース音が検出された場合には、コード名候補の中でそのルート音がベース音と同じ音名でないものは削除する。
【０１５５】
コード名候補が複数抽出された場合には、これらの中でどれか１つを決定するために、コード名決定部３０４により、尤度（もっともらしさ）の計算をする。
【０１５６】
尤度は、コード検出音域における全てのコード構成音のパワーの強さの平均とベース検出音域におけるコードのルート音のパワーの強さから計算する。すなわち、抽出されたあるコード名候補の全ての構成音のコード検出期間における平均パワーの平均値をＬａｖｇｃ、コードのルート音のベース検出期間における平均パワーをＬａｖｇｒとすると、下式数８のように、この２つの平均により尤度を計算する。尤度を計算する別の方法としては、コード検出音域におけるコードトーン（コード構成音）とノンコードトーン（コード構成音以外の音）の（平均的な）パワーの比を用いても良い。
【０１５７】
【数８】
2008040284.tif 000010
【０１５８】
この際、コード検出音域やベース検出音域に同一音名の音が複数含まれる場合には、それらのうち、平均パワーの強い方を使うようにする。あるいは、コード検出音域とベース検出音域の夫々で、各音階音の平均パワーを１２の音名毎に平均し、その音名毎の平均値を使うようにしても良い。
【０１５９】
さらに、この尤度の計算に音楽的な知識を導入しても良い。例えば、各音階音のパワーを全フレームで平均し、それを１２の音名毎に平均して各音名の強さを計算し、その強さの分布から曲の調を検出する。そして、調のダイアトニックコードには尤度が大きくなるようにある定数を掛ける、或いは、調のダイアトニックスケール上の音から外れた音を構成音に含むコードはその外れた音の数に応じて尤度が小さくなるようにする等が、考えられる。さらにコード進行のよくあるパターンをデータベースとして記憶しておき、それと比較することで、コード候補の中からよく使われる進行になるようなものは尤度が大きくなるようにある定数を掛けるようにしても良い。
【０１６０】
最も尤度が大きいものをコード名として決定するが、コード名の候補を尤度とともに表示し、ユーザに選択させるようにしても良い。
【０１６１】
いずれにしても、コード名決定部３０４により、コード名が決定したら、この結果をバッファ２０５に保存すると共に、コード名が、画面出力されることになる。
【０１６２】
図１９に、コード名決定部３０４によるコード検出結果の表示例を示す。このように検出されたコード名を画面表示するだけでなく、ＭＩＤＩ機器等を使って、検出されたコードとベース音を再生するようにすることが望ましい。一般的には、コード名を見ただけで正しいかどうかは判断できないからである。
【０１６３】
以上説明した本実施例構成によれば、特別な音楽的知識を有する専門家でなくても、音楽ＣＤ等の複数の楽器音の混ざった入力された音楽音響信号に対し、個々の音符情報を検出することなしに全体の響きから、コード名を検出することができるようになる。
【０１６４】
さらに、該構成によれば、構成音が同じ和音でも判別可能で、演奏のテンポが揺らいでしまった場合や、逆にわざとテンポを揺らして演奏しているような音源に関しても、小節毎のコード名が検出可能となる。
【０１６５】
特に本実施例構成では、ベース音のみではなく、和音の変化度合いに応じても小節を分割するようにして、コードを検出しているため、ベース音が同じ場合でも、和音の変化度合いが大きい場合には、小節を分割してコードが検出されることになる。すなわち、小節内で例えば同じベース音を持つ同士のコード変化がある場合でも正しいコードが検出出来るようになる。この小節の分割については、ベース音の変化の度合い、和音の変化度合いに応じて、様々に分割することが可能である。
【実施例３】
【０１６６】
本実施例構成は、実施例２の構成とは異なり、各音階音のパワーのユークリッド距離を計算するという構成により、和音の変化の度合いを感知し、小節を分割してコードを検出するというものである。
【０１６７】
ただし、この場合、単純にユークリッド距離を計算したのでは、急激な音の立ち上がり（曲の始まりなど）や急激な音の減衰（曲の終わり、ブレークなど）で、ユークリッド距離が大きな値となり、和音の変化は無いのに音の強弱だけで小節を分割してしまう恐れがある。そこで、ユークリッド距離を計算する前に、図２０(ａ)〜(ｄ)に示すように、各音階音のパワーを正規化するようにする［図２０(ａ)は同図(ｃ)のように、また図２０(ｂ)は同図(ｄ)のように正規化する］。その際、大きい方に合わせるのではなく、小さい方に合わせるようにすれば（図２０参照）、急激な音の変化ではユークリッド距離が小さくなり、誤って小節分割することは無くなる。
【０１６８】
上記各音階音のパワーのユークリッド距離は、下式数９で計算される。このユークリッド距離が、例えば全フレーム全音のパワーの平均を上回る場合は、上記第１の小節分割決定部３０２により小節を分割することを決定することになる。
【０１６９】
【数９】
2008040284.tif 000011
【０１７０】
さらに、詳しくは、（ユークリッド距離＞全フレーム全音のパワーの平均×Ｔ）の時、小節を分割するようにすれば良い。該式の値Ｔを変えれば、小節分割の閾値を任意の値に変える（調整する）ことができる。
【０１７１】
尚、本発明のコード名検出装置及びコード名検出用プログラムは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０１７２】
本発明のコード名検出装置及びコード名検出用プログラムは、ミュージックプロモーションビデオの作成の際などに音楽トラック中のビートの時刻に対して映像トラック中のイベントを同期させるビデオ編集処理や、ビートトラッキングによりビートの位置を見つけ音楽の音響信号の波形を切り貼りするオーディオ編集処理、人間の演奏に同期して照明の色・明るさ・方向・特殊効果などといった要素を制御したり、観客の手拍子や歓声などを自動制御するライブステージのイベント制御、音楽に同期したコンピュータグラフィックスなど、種々の分野で利用可能である。
【図面の簡単な説明】
【０１７３】
【図１】本発明の望ましい実施形態が適用されるパーソナルコンピュータの構成を示す構成概要図である。
【図２】前出願のテンポ検出装置の全体ブロック図である。
【図３】曲の拍子の入力画面構成を示す説明図である。
【図４】音階音パワー検出部１０１の構成のブロック図である。
【図５】テンポ候補検出部１０２の処理の流れを示すフローチャートである。
【図６】ある曲の一部分の波形と各音階音のパワー、各音階音のパワー増分値の合計の図を示すグラフである。
【図７】自己相関計算の概念を示す説明図である。
【図８】図５のステップＳ１０６におけるテンポ確定までの処理フローを示すフローチャートである。
【図９】図８のステップＳ２１２の移動平均によるテンポ計算処理の処理ステップを示すフローチャートである。
【図１０】同じく図８のステップＳ２１６のテンポ揺らぎ計算処理の処理ステップを示すフローチャートである。
【図１１】最初のビート位置決定後のそれ以降のビートの位置を決定していく方法を示す説明図である。
【図１２】ｓの値に応じて変えられる係数ｋの分布状態を示すグラフである。
【図１３】２番目以降のビート位置の決定方法を示す説明図である。
【図１４】ビート検出結果の確認画面の例を示す画面表示図である。
【図１５】本実施例２に係るテンポ検出構成を用いたコード検出装置の全体ブロック図である。
【図１６】曲の同じ部分のコード検出用音階音パワー検出部３００が出力した各フレームの音階音のパワーを示すグラフである。
【図１７】ベース音検出部３０１によるベース検出結果の表示例を示すグラフである。
【図１８】小節前半及び小節後半の各音階音のパワーの状態を示す各音階音パワー模式図である。
【図１９】コード検出結果の確認画面の例を示す画面表示図である。
【図２０】第２の小節分割決定部３０３における各音階音のパワーのユークリッド距離の計算方法の概略を示す説明図である。
【符号の説明】
【０１７４】
１０                                  システムバス
１１                                  ＣＰＵ
１２                                  ＲＯＭ
１３                                  ＲＡＭ
１４                                  ディスプレイ
１５                                  Ｉ／Ｏインターフェース
１６                                  キーボード
１７                                  サウンドシステム
１８                                  ＣＤ−ＲＯＭドライブ
１９                                  ハードディスクドライブ
２０                                  ＣＤ−ＲＯＭ
１００                                  入力部
１０１                                  ビート検出用音階音パワー検出部
１０１ａ                                波形前処理部
１０１ｂ                                ＦＦＴ演算部
１０１ｃ                                パワー検出部
１０２                                  テンポ候補検出部
１０３                                  拍子入力部
１０４                                  タッピング検出部
１０５                                  記録部
１０６                                  タッピングテンポ計算部
１０７                                  揺らぎ算出部
１０８                                  タッピングテンポ出力部
１０９                                  １拍目位置出力部
１１０                                  テンポ確定部
１１１                                  ビート位置確定部
１１２                                  小節検出部
２００、２０１、２０２、２０３、２０４、２０５  バッファ
３００                                  コード検出用音階音パワー検出部
３０１                                  ベース音検出部
３０２                                  第１の小節分割決定部
３０３                                  第２の小節分割決定部
３０４                                  コード名決定部
【図１】
2008040284.tif 000012
【図２】
2008040284.tif 000013
【図３】
2008040284.tif 000014
【図４】
2008040284.tif 000015
【図５】
2008040284.tif 000016
【図６】
2008040284.tif 000017
【図７】
2008040284.tif 000018
【図８】
2008040284.tif 000019
【図９】
2008040284.tif 000020
【図１０】
2008040284.tif 000021
【図１１】
2008040284.tif 000022
【図１２】
2008040284.tif 000023
【図１３】
2008040284.tif 000024
【図１４】
2008040284.tif 000025
【図１５】
2008040284.tif 000026
【図１６】
2008040284.tif 000027
【図１７】
2008040284.tif 000028
【図１８】
2008040284.tif 000029
【図１９】
2008040284.tif 000030
【図２０】
2008040284.tif 000031