(57)【要約】  本発明の様々な方法及びシステムの実施形態は、ディジタル符号化された音楽セレクションのテンポの計算による推定を対象とする。後述する本発明の特定の実施形態では、音楽セレクションのテンポを決定するために音楽セレクションの短い部分が解析される。ディジタル符号化された音楽セレクションサンプルは、サンプルに対応するパワースペクトルを作成するために計算により変換され、次に二次元開始強度マトリックス（６１８）を作成するために変換される。次に、二次元開始強度マトリックスは、対応する１組の周波数帯（７０４〜７０７）のそれぞれの１組の開始強度／時間関数（７１６）に変換される（８０６）。次に、開始強度／時間関数が解析され、解析（８１２）によって戻される推定テンポに変換される最も信頼性の高い開始間隔が求められる（８０８，８１００）。
2010503043.tif 000002
【特許請求の範囲】
【請求項１】
音楽セレクション（図８）のテンポを計算により推定する方法であって、
前記音楽セレクションの一部分を選択し、
前記音楽セレクションの前記選択部分のスペクトログラム（５０２）を計算し（８０４）と、
前記スペクトログラムを、対応する１組の波数帯（７０４〜７０７）の１組の開始強度／時間関数（７１６）に変換し（８０６）、
各開始間間隔長に対応するより高い周波数の高調波の解析を含む、一連の開始間間隔長における各開始間間隔長（９０６〜９１２）の潜在的位相を解析することによって、前記１組の開始強度／時間関数を解析して最も信頼性の高い開始間間隔長を決定し（８０８，８１００）、
前記最も信頼性の高い開始間間隔長からテンポ推定値を計算すること（８１２）を含む方法。
【請求項２】
前記スペクトログラム（５０２）を、対応する１組の周波数帯（７０４〜７０７）の１組の開始強度／時間関数（７１６）に変換することが、
前記スペクトログラム（５０２）を二次元開始強度マトリックス（６１８）に変換し、
１組の周波数帯を選択し、
周波数帯ごとに、開始強度／時間関数を計算することをさらに含む請求項１に記載の方法。
【請求項３】
前記スペクトログラム（５０２）を二次元開始強度マトリックス（６１８）に変換することが、
前記スペクトログラムにおけるサンプル時間ｔと周波数ｆによって索引付けされた内点値ｐ（ｔ，ｆ）ごとに、
サンプル時間ｔと周波数ｆの開始強度値ｄ（ｔ，ｆ）を計算し、
インデックスｔ及びｆを有する前記二次元開始強度マトリックスセル内に前記計算された開始強度値ｄ（ｔ，ｆ）を含めることをさらに含み、
前記開始強度値ｄ（ｔ，ｆ）は、対応するスペクトログラム内点値ｐ（ｔ，ｆ）に関して次のように計算され、
ｄ（ｔ，ｆ）＝ｍａｘ（ｐ（ｔ，ｆ），ｎｐ（ｔ−ｆ））−ｐｐ（ｔ，ｆ）
ここで、ｎｐ（ｔ，ｆ）＝ｐ（ｔ＋１，ｆ）であり、
１組の周波数帯（７０４〜７０７）を選択することは、前記スペクトログラムに含まれる一連の周波数を幾つかの周波数帯に区分することをさらに含み、
周波数帯ｂの開始強度／時間関数を計算することは、
サンプル時間ｔiごとに、ｔ＝ｔiであり且つｆが周波数帯ｂと関連付けられた周波数範囲内にある二次元開始強度マトリックス（６１８）内の開始強度値ｄ（ｔ，ｆ）を合計することによって開始強度値Ｄ（ｔi，ｂ）を計算することをさらに含む請求項２に記載の方法。
【請求項４】
前記１組の開始強度／時間関数（７１６）を解析して、各開始間間隔長のより高い周波数高調波の解析を含む、一連の開始間間隔長内の各開始間間隔長の潜在的位相を解析することによって最も信頼性の高い開始間間隔長（９０６〜９１２）を決定することは、
周波数帯ｂに対応する各開始強度／時間関数ごとに、
前記一連の開始間間隔長の範囲内の開始間長ごとに各潜在的位相の信頼性を計算し、
周波数帯（７０４〜７０７）にわたって開始間間隔長ごとに計算された信頼性を合計して、各開始間間隔長の最終的な計算された信頼性を生成し、
最終的な最も信頼性の高い開始間間隔長を、最終的な計算された最も高い信頼性を有する開始間間隔長として選択することをさらに含み、
前記最も信頼性の高い開始間間隔長からテンポ推定値を計算することは、前記スペクトログラム（５０２）を作成するために一定期間ごとに収集された一定数のサンプル点を使用し且つ各サンプル点によって表された時間間隔を使用することによって、前記最も信頼性の高い開始間間隔長から、サンプル点の単位で、１分当たりの拍子で表したテンポを計算する段階をさらに含む請求項１に記載の方法。
【請求項５】
特定の位相を有する開始間長（９０６〜９１２）の信頼性を計算することが、
開始間長の信頼性変数とペナルティ変数を初期化し、
開始強度／時間関数（７１６）の起点から前記位相だけずらされたサンプル時間から始めて、前記開始強度／時間関数内のサンプル点の全ての開始間間隔長が検討されるまで、
サンプル点の次の現在検討中の開始間間隔長を選択し、
サンプル点の前記選択された次の開始間間隔長の前記開始強度／時間関数から代表Ｄ（ｔ，ｂ）値を選択し、
前記選択された代表Ｄ（ｔ，ｂ）値がしきい値より大きいときに、前記信頼性変数をある値だけ増分させ、
潜在的なより高次の拍子周波数が、サンプル点の現在検討中の開始間間隔長の範囲内で検出されたときに、前記ペナルティ変数をある値だけ増分させ、
前記選択された代表Ｄ（ｔ，ｂ）値がしきい値より大きいときに、
前記信頼性変数と前記ペナルティ変数における前記値から前記開始間長の信頼性を計算する段階を続ける段階とを更に含む請求項４に記載の方法。
【請求項６】
テンポ推定システムであって、
ディジタル符号化された音声信号を受け取ることができるコンピュータシステムと、
ソフトウェアプログラムであって、
前記音楽セレクションの一部分を選択し、
前記音楽セレクションの前記選択部分のスペクトログラム（５０２）を計算し（８０４）、
前記スペクトログラムを、対応する１組の周波数帯（７０４〜７０７）の１組の開始強度／時間関数（７１６）に変換し（８０６）、
前記１組の開始強度／時間関数を解析して、各開始間間隔長に対応するより高い周波数高調波の解析を含む、一連の開始間間隔長における各開始間間隔長の潜在的位相を解析することによって、最も信頼席の高い開始間間隔長を決定し（８０８，８１００，９０６〜９１２）、
前記最も信頼性の高い開始間間隔長からテンポ推定を計算する（８１２）ことによってディジタル符号化された音声信号のテンポを推定するソフトウェアプログラムとを備えたテンポ推定システム。
【請求項７】
前記スペクトログラム（５０２）を、対応する１組の周波数帯（７０４〜７０７）の１組の開始強度／時間関数（７１６）に変換することは、
前記スペクトログラムを二次元開始強度マトリックス（６１８）に変換し、
１組の周波数帯を選択し、
周波数帯ごとに、開始強度／時間関数を計算することを更に含む請求項６に記載のテンポ推定システム。
【請求項８】
前記スペクトログラム（５０２）を二次元開始強度マトリックス（６１８）に変換することが、
前記スペクトログラム内でサンプル時間ｔと周波数ｆによって索引付けされた内点値ｐ（ｔ，ｆ）ごとに、
サンプル時間ｔと周波数ｆの開始強度値ｄ（ｔ，ｆ）を計算し、
前記計算された開始強度値ｄ（ｔ，ｆ）を、インデックスｔとｆを有する二次元開始強度マトリックスセル内に含めることを更に含み、
前記開始強度値ｄ（ｔ，ｆ）は、対応するスペクトログラム内点値ｐ（ｔ，ｆ）に関して次のように計算され、
ｄ（ｔ，ｆ）＝ｍａｘ（ｐ（ｔ，ｆ），ｎｐ（ｔ−ｆ））−ｐｐ（ｔ，ｆ）
ここで、ｎｐ（ｔ，ｆ）＝ｐ（ｔ＋１，ｆ）及び
ｐｐ（ｔ，ｆ）＝ｍａｘ（ｐ（ｔ−２，ｆ），ｐ（ｔ−１，ｆ＋１），ｐ（ｔ−１，ｆ），ｐ（ｔ−１，ｆ−１））であり、
周波数帯ｂの開始強度／時間関数を計算することは、
サンプル時間ｔiごとに、二次元開始強度マトリックス内の前記開始強度値ｄ（ｔ，ｆ）を合計することによって開始強度値Ｄ（ｔi，ｂ）を計算することを更に含み、ｔ＝ｔiであり且つｆが周波数帯ｂと関連付けられた１連の周波数にある請求項７に記載のテンポ推定システム。
【請求項９】
１組の開始強度／時間関数（７１６）を解析して、各開始間間隔長のより高い周波数高調波の解析を含む、一連の開始間間隔長における各開始間間隔長の潜在的位相を解析することによって、最も信頼性の高い開始間間隔長（９０６〜９１２）を決定することが、
周波数帯ｂに対応する各開始強度／時間関数ごとに、
前記開始間間隔長の範囲内の開始間長ごとに信頼性の潜在的位相を計算し、
開始間間隔長ごとに計算された前記信頼性を前記周波数帯（７０４〜７０７）にわたって合計し、開始間間隔長ごとの最終的な計算された信頼性を生成し、
最終的な最も信頼性の高い開始間間隔長を、最も大きい最終的な計算された信頼性を有する開始間間隔長として選択することを更に含む請求項６に記載のテンポ推定システム。
【請求項１０】
特定の位相を有する開始間長の信頼性を計算することが、
前記開始間長の信頼性変数とペナルティ変数を初期化し、
開始強度／時間関数（７１６）の起点から前記位相だけずらされたサンプル時間から始めて、前記開始強度／時間関数内のサンプル点の全ての開始間間隔長（９０６〜９１２）が検討されるまで、
サンプル点の次の現在検討中の開始間間隔長を選択し、
サンプル点の前記選択された次の開始間間隔長の前記開始強度／時間関数から代表Ｄ（ｔ，ｂ）値を選択し、
前記選択された代表Ｄ（ｔ，ｂ）値がしきい値より大きいときに、前記信頼性変数をある値だけ増分し、
潜在的なより高次の拍子周波数が、サンプル点の前記現在検討中の開始間間隔長の範囲内で検出されたときに、前記ペナルティ変数をある値だけ増分させ、
前記選択された代表Ｄ（ｔ，ｂ）値がしきい値より大きいときに、
前記信頼性変数と前記ペナルティ変数における前記値から前記開始間長の信頼性を計算する段階を続けることを更に含む請求項９に記載のテンポ推定システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、信号処理及び信号特徴決定に関連し、詳細には、楽曲の短い部分に対応する音声信号のテンポを推定する方法及びシステムに関連する。
【背景技術】
【０００２】
パーソナルコンピュータ及びコンピュータシステムの処理能力、データ容量及び機能が向上したため、他のパーソナルコンピュータ及びハイエンドコンピュータシステムと相互接続されたパーソナルコンピュータは、音楽を含む様々なタイプの情報や娯楽を伝達するための主要な媒体になった。パーソナルコンピュータのユーザは、インターネットから膨大な数の様々なディジタル符号化された音楽セレクションをダウンロードし、そのディジタル符号化された音楽セレクションをパーソナルコンピュータ内又はパーソナルコンピュータと関連付けられた大容量記憶装置に記憶することができ、また音楽セレクションを取り出し、音声再生ソフトウェア、ファームウェア及びハードウェア構成機器によって再生することができる。パーソナルコンピュータユーザは、インターネットを介して、何千もの様々な無線局や他の音声放送会社から生放送のストリーミング音声放送を受信することができる。
【０００３】
ユーザが、多数の音楽セレクションを蓄積し始めており、またそのような蓄積された音楽セレクションを管理し検索する必要性を体験し始めているので、ソフトウェアやコンピュータのベンダーは、記憶された音楽セレクションをユーザが編成し、管理し、閲覧できるようにする様々なソフトウェアツールを提供し始めている。音楽セレクションを記憶し参照する両方の操作には、音楽セレクションを特徴決定することが必要な場合が多く、この特徴決定は、ユーザ又は音楽セレクション提供者によってディジタル符号化された音楽セレクションと関連付けられたテキスト符号化属性（タイトルとサムネイル説明を含む）に依存するか、或いはしばしばより望ましいように、ディジタル符号化された音楽セレクションを解析して音楽セレクションの様々な特徴を決定することによって行われる。一例として、ユーザは、特定のディレクトリ又はサブディレクトリツリー内に似た音楽をまとめるために音楽セレクションを幾つかの音楽パラメータ値で特徴付けしたり、特定の音楽セレクションの検索を絞り込むために音楽セレクションブラウザに音楽パラメータ値を入力したりすることがある。より高性能な音楽セレクション参照アプリケーションは、音楽セレクション特徴決定技術を使用して、局所的に記憶された音楽セレクションと遠く離れて記憶された音楽セレクションの両方の高度に自動化された検索と参照を行うことができる。
【０００４】
再生又は放送される音楽セレクションのテンポは、１つのよく遭遇する音楽パラメータである。聴き手は、しばしば、音楽セレクションにテンポ（即ち、基本的な知覚速度）を容易且つ直感的に付与することができるが、テンポの付与は一般に明白でなく、所定の聴き手は、異なる音楽コンテキストに現れた同一音楽セレクションとは異なるテンポを付与する場合がある。しかしながら、多数の聴き手によって付与された所定の音楽セレクションの１分当たりの拍子で表した基本的な速度（即ち、テンポ）は、一般に、１つ又はわずかな数の離散的な狭帯域に入る。更に、知覚されるテンポは、一般に、音楽セレクションを表現する音声信号の信号特徴と一致する。テンポは一般に認識されている基本的な音楽パラメータなので、コンピュータユーザ、ソフトウェアベンダー、音楽提供者、及び音楽放送会社は全て、ディジタル符号化された音楽セレクションを編成し、記憶し、取得し、検索するためのパラメータとして使用できる所定の音楽セレクション用のテンポ値を決定する有効な計算方法の必要性を認識していた。
【発明の概要】
【０００５】
本発明の様々な方法及びシステムの実施形態は、ディジタル符号化された音楽セレクションのテンポの計算推定を対象とする。本発明の特定の実施形態では、後述するように、音楽セレクションの短い部分が解析されて、音楽セレクションのテンポが決定される。ディジタル符号化された音楽セレクションサンプルは、サンプルに対応するパワースペクトルを作成するために計算により変換され、次に二次元開始強度マトリックスを作成するために変換される。次に、二次元開始強度マトリックスは、対応する１組の周波数帯ごとの１組の開始強度／時間関数に変換される。次に、開始強度／時間関数が解析されて、解析によって戻された推定テンポに変換される最も信頼性の高い開始間隔が求められる。
【図面の簡単な説明】
【０００６】
【図１Ａ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図１Ｂ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図１Ｃ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図１Ｄ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図１Ｅ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図１Ｆ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図１Ｇ】音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す図である。
【図２】複雑な波形を成分波形周波数に分解する数学的手法を示す図である。
【図３】周波数と時間に対する大きさの三次元プロットに挿入された第１の周波数ドメインプロットである。
【図４】時間軸の時間τ1とτ2に一致する２列のプロットデータの三次元的な周波数、時間及び大きさプロットである。
【図５】図２から図４に関して述べた方法により作成されたスペクトログラムを示す図である。
【図６Ａ】本発明の方法の実施形態で使用されるスペクトログラムの２つの変換のうちの第１の変換を示す図である。
【図６Ｂ】本発明の方法の実施形態で使用されるスペクトログラムの２つの変換のうちの第１の変換を示す図である。
【図６Ｃ】本発明の方法の実施形態で使用されるスペクトログラムの２つの変換のうちの第１の変換を示す図である。
【図７Ａ】１組の周波数帯の開始強度／時間関数の計算を示す図である。
【図７Ｂ】１組の周波数帯の開始強度／時間関数の計算を示す図である。
【図８】本発明の１つのテンポ推定方法の実施形態を示すフロー制御図である。
【図９Ａ】開始間間隔と位相の概念を示す図である。
【図９Ｂ】開始間間隔と位相の概念を示す図である。
【図９Ｃ】開始間間隔と位相の概念を示す図である。
【図９Ｄ】開始間間隔と位相の概念を示す図である。
【図１０】図８の段階８１０によって示された検索の状態空間を示す図である。
【図１１】本発明の実施形態によるＤ（ｔ，ｂ）値の近傍内のピークＤ（ｔ，ｂ）値の選択を示す図である。
【図１２】時間軸に沿った開始間間隔の代表Ｄ（ｔ，ｂ）値を連続的に検討することによって信頼性を計算する方法の１つの段階を示す図である。
【図１３】開始間間隔における潜在的な高次周波数（即ち、テンポ）の識別に基づく開始間間隔の割引（即ち、不利益をもたらすこと）を示す図である。
【発明を実施するための形態】
【０００７】
本発明の様々な方法及びシステム実施形態は、ディジタル符号化された音楽セレクションの推定テンポの計算決定を対象とする。後述するように、推定テンポを決定するために解析される幾つかの開始強度／時間関数を作成するために、音楽セレクションの短い部分が変換される。以下の説明では、最初に音声信号について概略的に延べ、その後、１組の周波数帯の開始強度／時間関数を作成するために本発明の方法の実施形態で使用される様々な変換について述べる。次に、図による説明とフロー制御図の両方を用いて、開始強度／時間関数の解析について述べる。
【０００８】
図１Ａから図１Ｇは、音声波形を生成する幾つかの成分音声信号、即ち成分波形の組み合わせを示す。図１Ａから図１Ｇに示した波形成分は、一般的な波形成分の特別な事例であるが、その例は、一般的に複雑な音声波形が、幾つかの単純な単一周波数波形成分からなることを示す。図１Ａは、第１の６つの単純な成分波形の一部分を示す。音声信号は、本質的に、空間を伝播する振動空気圧の乱れである。ある期間にわたって空間内の特定の点で観察すると、気圧は、中間空気圧の前後で規則的に変動する。図１Ａの波形１０２は、縦軸に沿って圧力がプロットされ横軸に沿って時間がプロットされた正弦波であり、空間内の特定の点における気圧を時間の関数として表示する。音波の強さは、音波の圧力振幅の二乗に比例する。また、特定の瞬間に音源から出る直線光線に沿った空間内の異なる点における圧力を測定することによって類似の波形が得られる。ある期間にわたる空間内の特定点における圧力を波形表現に戻すと、ピーク１０６と１０８間の距離１０４等の波形における任意の２つのピーク間の距離は、空気圧外乱における連続振動間の時間である。この時間の逆数は、波形の周波数である。図１Ａに示した成分波形を基本周波数ｆと考えると、図１Ｂから図１Ｆに示した波形は、基本周波数の様々な高次の高調波を表わす。高調波周波数は、基本周波数の整数倍である。従って、例えば、図１Ｂに示した成分波形の周波数２ｆは、図１Ａに示した基本周波数の成分波形の２倍であり、その理由は、基本周波数ｆを有する成分波形で１サイクルが起こるときと同じ時間で、図１Ｂに示した成分波形では２つの完全サイクルが生じるからである。図１Ｃから図１Ｆの成分波形はそれぞれ、周波数３ｆ、４ｆ、５ｆ及び６ｆを有する。図１Ａから図１Ｆに示した６つの波形の和は、図１Ｇに示した音声波形１１０を作成する。音声波形は、弦楽器や管楽器で演奏される単一音を表わすこともある。音声波形は、図１Ａから図１Ｆに示した正弦波の単一周波数の成分波形よりも複雑な形状を有する。しかしながら、音声波形は、基本周波数ｆで繰り返すと考えることができ、より高い周波数では規則的パターンを示す。
【０００９】
楽団又はオーケストラによって演奏される歌曲等の複雑な音楽セレクションに対応する波形は、極めて複雑であり、何百もの異なる成分波形からなる場合がある。図１Ａから図１Ｇの例で分かるように、図１Ｇに示した波形１１０を図１Ａから図１Ｆに示した成分波形に、観察又は直観によって分解するのは極めて難しい。演奏楽曲を表わす極めて複雑な波形の場合、観察又は直観による分解は実際には不可能である。複雑な波形を成分波形の周波数に分解する数学的方法が開発された。図２は、複雑な波形を成分波形の周波数に分解する数学的方法を示す。図２に、時間に対してプロットされた複雑な波形２０２の振幅を示す。この波形を、短時間フーリエ変換方法を使用して数学的に変換して、所定の短期間の周波数の範囲内の各周波数における成分波形の振幅のプロットを作成することができる。図２は両方とも、以下の２つの連続的な短時間フーリエ変換２０４を示す。
【００１０】
【数１】
2010503043.tif 000003
【００１１】
ここで、τ1は、特定の時間であり、
ｘ（ｔ）は、波形を示す関数であり、
ｗ（ｔ−τ1）は、時間窓関数であり、
ωは、選択された周波数であり、
Ｘ（τ1，ω）は、時間τ1において周波数ωを有する波形ｘ（ｔ）の成分波形の振幅、圧力又はエネルギーである。
短時間フーリエ変換の離散的なもの２０６の場合、
【００１２】
【数２】
2010503043.tif 000004
【００１３】
ここで、ｍは、選択された時間間隔であり、
ｘ［ｎ］は、波形を示す離散関数であり、
ｗ［ｎ−ｍ］は、時間窓関数であり、
ωは、選択された周波数であり、
Ｘ（ｍ、ω）は、期間ｍにわたる周波数ωを有する波形ｘ［ｎ］の成分波形の大きさ、圧力又はエネルギーである。
【００１４】
短時間フーリエ変換は、時間ドメイン波形（図２の２０２）に関する特定の瞬間、即ちサンプル時間を中心とする時間の窓に適用される。例えば、図２に示した連続的フーリエ変換２０４と離散的フーリエ変換２０６は、時間τ1（即ち、離散的な事例では時間間隔ｍ）２０８を中心とする小さな時間窓に適用されて、横軸２１２に沿って強度（デシベルで（ｄｂ）で表された）がプロットされ縦軸２１４に沿って周波数がプロットされた二次元周波数ドメインプロット２１０が作成される。周波数ドメインプロット２１０は、波形２０２に寄与するｆ0〜ｆn-1の周波数範囲にわたる周波数を有する成分波の大きさを示す。連続的短時間フーリエ変換２０４は、アナログ信号解析に適切に使用され、離散的短時間フーリエ変換２０６は、ディジタル符号化波形に適切に使用される。本発明の一実施形態では、ハミング窓と３５８４ポイント重複を有する４０９６ポイント高速フーリエ変換が、４４１００Ｈｚの入力サンプリングレートで使用されて、スペクトログラムが生成される。
【００１５】
時間ドメイン時間τ1に対応する周波数ドメインプロットを、周波数と時間に関する大きさの三次元プロットに入れることができる。図３は、周波数と時間に関する大きさの三次元プロットに入られた第１の周波数ドメインプロットを示す。図２に示した二次元周波数ドメインプロット２１４は、プロットの紙面から出る縦軸に対して９０°回転され、時間τ1に対応する時間軸３０４に沿った位置に周波数軸３０２に対して平行に挿入される。同じように、短時間フーリエ変換を時間τ2の波形（図２の２０２）に適用することによって、次の周波数ドメイン二次元プロットを得ることができ、その二次元プロットを図３の三次元プロットに追加して、２列を有する三次元プロットを作成することができる。図４は、２列のプロットデータがサンプル時間τ1及びτ2に位置決めされた三次元周波数、時間及び大きさを示す。このように続けて、規則的に間隔をおかれた各期間における短時間フーリエ変換を、時間ドメイン内の音声波形に連続的に適用することによって、波形の三次元プロット全体を生成することができる。
【００１６】
図５は、図２から図４に関して述べた方法によって作成されたスペクトログラムを示す。図５は、図３と図４のような三次元的ではなく二次元的にプロットされている。スペクトログラム５０２は、横方向の時間軸５０４と縦方向の周波数軸５０６を有する。スペクトログラムは、各サンプル時間に一列の強度値を含む。例えば、列５０８は、時間τ1（図２の２０８）において波形（図２の２０２）に適用される短時間フーリエ変換によって生成される二次元周波数ドメインプロット（図２の２１４）に対応する。スペクトログラム内の各セルは、特定の時間に特定の周波数に関して計算された大きさに対応する強度値を含む。例えば、図５のセル５１０は、時間τ1での複雑な音声波形（図２の２０２）から計算された図２の行２１６の長さに対応する強度値ｐ（ｔ1，ｆ10）を含む。図５は、スペクトログラム５０２内の２つの追加セル５１２及び５１４の出力表記ｐ（ｔx，ｆy）の註釈を示す。スペクトログラムは、コンピュータメモリ内に二次元配列で数的に符号化されてもよく、出力に対応するセルの表示色コーディングを有する二次元マトリックス又はアレイとして表示装置に表示されることが多い。
【００１７】
スペクトログラムは、音声信号に対する様々な周波数の成分波形の動的寄与を解析する便利なツールであるが、スペクトログラムは、時間に対する強度の変化率を強調しない。本発明の様々な実施形態は、２つの追加の変換、最初にスペクトログラムを使用して、テンポを推定することができる１組の周波数帯の対応する１組の開始強度／時間関数を作成する。図６Ａから図６Ｃは、本発明の方法の実施形態で使用されるスペクトログラムの２つの変換のうちの第１の変換を示す。図６Ａから図６Ｂでは、スペクトログラムの小さな部分６０２が示される。スペクトログラム６０４内の所定の点、即ちセルｐ（ｔ，ｆ）において、スペクトログラム６０４内の所定の点、即ちセルによって表わされる時間と周波数の開始強度ｄ（ｔ，ｆ）を計算することができる。図６Ａの第１の式６１０で示されたように、前の強度ｐｐ（ｔ，ｆ）は、所定の瞬間より前にある最大４つの点、即ちセル６０６〜６０９として計算される。
【００１８】
ｐｐ（ｔ，ｆ）＝ｍａｘ（ｐ（ｔ−２，ｆ），ｐ（ｔ−１，ｆ＋１），ｐ（ｔ−１，ｆ），ｐ（ｔ−１，ｆ−１））
図６Ａに式６１４で示したように、時間的に所定のセル６０４の次の単一セル６１２から次のように強度ｎｐ（ｔ，ｆ）が計算される。
【００１９】
ｎｐ（ｔ，ｆ）＝ｐ（ｔ＋１，ｆ）
次に、項ａは、図６Ｂに示したように、次の出力６１２と所定のセル６０４に対応するセルの最大出力値として計算される。
【００２０】
ａ＝ｍａｘ（ｐ（ｔ，ｆ），ｎｐ（ｔ−ｆ））
最後に、開始強度ｄ（ｔ，ｆ）は、図６Ｂに式６１６で示したように、所定の点におけるａとｐｐ（ｔ，ｆ）の差として計算される。
【００２１】
ｄ（ｔ，ｆ）＝ａ−ｐｐ（ｔ，ｆ）
スペクトログラムの各内点の開始値強度を計算して、図６Ｃに示したような二次元開始強度マトリックス６１８を作成することができる。二次元開始強度マトリックスの境界を定義する太線の長方形６２０内の各内点、即ち内部セルが、開始強度値ｄ（ｔ，ｆ）と関連付けられる。太線の長方形は、二次元開始強度マトリックスが、計算されるスペクトログラム上にあるときに、ｄ（ｔ，ｆ）を計算できないスペクトログラムの特定の縁セルを省略することを示すものである。
【００２２】
二次元開始強度プロットは、局所的強度変化値を含むが、このプロットは、一般に、テンポを識別するのが困難なほどのノイズと局所的変動を含む。従って、第２の変換では、個々の周波数帯の開始強度／時間関数が計算される。図７Ａから図７Ｂは、１組の周波数帯の開始強度／時間関数の計算を示す。図７Ａに示したように、二次元開始強度マトリックス７０２を、幾つかの水平周波数帯７０４〜７０７に区分することができる。本発明の一実施形態では、次の４つの周波数帯が使用される。
【００２３】
周波数帯１：３２．３Ｈｚ〜１０７６．６Ｈｚ
周波数帯２：１０７６．６Ｈｚ〜３２２９．８Ｈｚ
周波数帯３：３２２９．８Ｈｚ〜７５３６．２Ｈｚ
周波数帯４：７５３６．２Ｈｚ〜１３９９５．８Ｈｚ
周波数帯７０５内の縦列７０８など、周波数帯の縦列内の各セル内の開始強度値が加算され、図７Ａに式７１０で示したように、各周波数帯ｂ内の各時間ｔの開始強度値Ｄ（ｔ，ｂ）が作成される。各ｂ値の開始強度値Ｄ（ｔ，ｂ）が別々に収集されて、各周波数帯ごとにＤ（ｔ）値の一次元配列として表わされた離散的な開始強度／時間関数が作成され、その１つのプロット７１６を図７Ｂに示す。次に、各周波数帯の開始強度／時間関数が、後述のプロセスで解析され、音声信号の推定テンポが作成される。
【００２４】
図８は、本発明の１つのテンポ推定方法の実施形態を示すフロー制御図である。第１のステップ８０２では、方法は、．ｗａｖファイル等の電子符号化された音楽を受け取る。ステップ８０４で、方法は、電子符号化された音楽の短い部分のスペクトログラムを生成する。ステップ８０６で、方法は、図６Ａから図６Ｃに関して前に述べたように、スペクトログラムをｄ（ｔ，ｆ）値を含む二次元開始強度マトリックスに変換する。次に、ステップ８０８で、方法は、図７Ａから図７Ｂに関して前に述べたように、二次元開始強度マトリックスを、対応する１組の周波数帯の１組の開始強度／時間関数に変換する。ステップ８１０で、方法は、後で述べるプロセスによって、ステップ８０８で生成された１組の開始強度／時間関数の範囲内の一連の開始間間隔の信頼性を判定する。最後に、ステップ８１２で、プロセスは、最も信頼性の高い開始間間隔を選択し、最も信頼性の高い開始間間隔に基づいて推定テンポを計算し、推定テンポを返す。
【００２５】
図８にステップ８１０によって表わされた一連の開始間間隔の信頼性を判定するプロセスは、Ｃ＋＋ライク擬似コードインプリメンテーションとして後で述べる。しかしながら、信頼性判定と推定テンポ計算のＣ＋＋ライク擬似コードインプリメンテーションについて述べる前に、Ｃ＋＋ライク擬似コードインプリメンテーションの後の考察を容易にするために、まず図９から図１３を参照して信頼性判定と関連する様々な概念についてまずは述べる。
【００２６】
図９Ａから図９Ｄは、開始間間隔と位相の概念を示す。図９Ａとその後の図９Ｂから図９Ｄでは、特定の周波数帯９０２の開始強度／時間関数の一部分が示される。第１列９０４等の開始強度／時間関数のプロット内の各列は、特定の帯の特定のサンプル時間における開始強度値Ｄ（ｔ，ｂ）を表わす。テンポを推定するプロセスで一連の開始間間隔の長さを検討する。図９Ａでは、短い４列幅の開始間間隔９０６〜９１２を検討する。図９Ａでは、各開始間間隔は、時間間隔４Δｔにわたる４つのＤ（ｔ，ｂ）値を含み、ここで、Δｔは、サンプル点に対応する短い期間である。実際のテンポ評価では、開始間間隔が一般にもっと長く、開始強度／時間関数は、何万個以上のＤ（ｔ，ｂ）値も含む場合があることに注意されたい。例証では、説明を分かりやすくするために意図的に小さい値を使用する。
【００２７】
各開始間間隔（「ＩＯＩ」）内において、各ＩＯＩ内の同じ位置にあるＤ（ｔ，ｂ）値は、潜在的開始点、即ち強度が急激に上昇する点として見なされてもよく、これは、音楽セレクション内の拍子又はテンポ点を示す場合がある。各間隔内の特定のＤ（ｔ，ｂ）位置で高いＤ（ｆ，ｂ）を有する最も高い規則性又は信頼性を有するＩＯＩを見つけるために、一連のＩＯＩが評価される。換言すると、固定長の連続した１組の間隔の信頼性が高いとき、ＩＯＩは、一般に、音楽セレクション内の拍子又は周波数を表わす。一般に、１組の開始強度／時間関数の対応する１組の周波数帯を解析することによって決定された最も信頼性の高いＩＯＩが、推定テンポと関連付けられる。従って、図８の段階８１０の信頼性解析は、ある最小ＩＯＩ長から最大ＩＯＩ長までの一連のＩＯＩ長を検討し、各ＩＯＩ長の信頼性を決定する。
【００２８】
特定のＩＯＩ長ごとに、開始強度／時間関数の起点に対して特定の長さの各間隔内の特定のＤ（ｔ，ｂ）値の全ての可能な開始、即ち、位相を評価するために、ＩＯＩ未満の１に等しい幾つかの位相を検討しなければならない。図９Ａの第１列９０４が時間ｔ0の場合は、図９に示された間隔９０６〜９１２を、４Δｔ間隔、即ちゼロ位相を有する４列幅ＩＯＩを表わすと見なすことができる。図９Ｂから図９Ｄでは、間隔の始まりは、それぞれΔｔ、２Δｔ及び３Δｔの連続位相を作成するために時間軸に沿った連続位置だけずらされる。従って、一連の可能なＩＯＩ長に関して、あらゆる位相、即ちｔ0に対する開始点を評価することによって、音楽セレクション内で確実に生じる拍子を網羅的に探すことができる。図１０は、図８に段階８１０によって表された検索の状態空間を示す。図１０では、横軸１００２に沿ってＩＯＩ長がプロットされ、縦軸１００４に沿って位相がプロットされ、ＩＯＩ長と位相は両方ともΔｔの増分でプロットされ、期間は各サンプル点によって表わされる。図１０に示したように、最小間隔サイズ１００６と最大間隔サイズ１００８の間の全ての間隔サイズが検討され、ＩＯＩ長ごとに、ＩＯＩ長より短い０と１の間の全ての位相が検討される。従って、検索の状態空間は、斜線部分１０１０によって表わされる。
【００２９】
前述のように、ＩＯＩの信頼性を評価するために、各ＩＯＩ内の特定の位置にある各ＩＯＩ内の特定のＤ（ｔ，ｂ）値が選択される。しかしながら、ちょうど特定位置におけるＤ（ｔ，ｂ）値を選択するのではなく、その位置の近傍内のＤ（ｔ，ｂ）値が検討され、ＩＯＩのＤ（ｔ，ｂ）値として、特定位置を含む最大値を有する特定位置の近傍内のＤ（ｔ，ｂ）値が選択される。図１１は、本発明の実施形態によるＤ（ｔ，ｂ）値の近傍内の最大Ｄ（ｔ，ｂ）値の選択を示す。図１１では、Ｄ（ｔ，ｂ）値１１０２等の各ＩＯＩ内の最終Ｄ（ｔ，ｂ）値は、ＩＯＩを表わす初期候補Ｄ（ｔ，ｂ）値である。候補Ｄ（ｔ，ｂ）値のまわりの近傍Ｒ１１０４が検討され、その近傍内の最大Ｄ（ｔ，ｂ）値（図１１に示した事例ではＤ（ｔ，ｂ）値１１０６）が、ＩＯＩの代表Ｄ（ｔ，ｂ）値として選択される。
【００３０】
前述のように、特定の位相の特定のＩＯＩ長の信頼性は、開始強度／時間関数において各ＩＯＩの選択的な代表Ｄ（ｔ，ｂ）値において高Ｄ（ｔ，ｂ）値が生じる規則性として計算される。この信頼性は、時間軸に沿ったＩＯＩの代表Ｄ（ｔ，ｂ）値を連続的に検討することによって計算される。図１２は、時間軸に沿って開始間間隔の代表Ｄ（ｔ，ｂ）値を連続して検討することによって信頼性を計算するプロセスの１つのステップを示す。図１２では、ＩＯＩ１２０４の特定の代表Ｄ（ｔ，ｂ）値１２０２に達した。次のＩＯＩ１２０８の次の代表Ｄ（ｔ，ｂ）値１２０６が求められ、次の代表Ｄ（ｔ，ｂ）値が、図１２の式１２１０によって示されたように、しきい値より大きいかどうかが判定される。しきい値より大きい場合は、ＩＯＩ長と位相の場合の信頼性計量が増分されて、現在検討中のＩＯＩ１２０４の次のＩＯＩにおいて比較的高いＤ（ｔ，ｂ）値が見つかったことが示される。
【００３１】
図１２に関して前に述べた方法によって決定されたような信頼性は、推定テンポを決定する際の１つの要因であるが、ＩＯＩ内により高次のテンポが見つかったときは特定のＩＯＩの信頼性は割り引かれる。図１３は、開始間間隔内の潜在的なより高次周波数、即ち、テンポの識別に基づく現在検討中の開始間間隔の割り引き、即ち、ペナライジングを示す。図１３では、ＩＯＩ１３０２が現在検討されている。前述のように、前のＩＯＩ１３０８内の候補Ｄ（ｔ，ｂ）値１３０６の信頼性を判定するときに、ＩＯＩ内の最終位置におけるＤ（ｔ，ｂ）値１３０４の大きさが検討される。しかしながら、Ｄ（ｔ，ｂ）値１３１０〜１３１２等、ＩＯＩによって表わされた周波数のより高次調波で大きなＤ（ｔ，ｂ）値が検出された場合は、現在検討中のＩＯＩが不利にされてもよい。特定のＩＯＩ長の評価中に多数のＩＯＩにわたる高次の高調波周波数を検出すると、テンポをより適切に推定することができる音楽セレクション内のより早くより高次の高調波テンポが、ある可能性があることがわかる。従って、後で詳しく述べるように、より高次の高調波周波数が検出されたとき、計算された信頼性はペナルティによって相殺される。
【００３２】
二次元開始強度マトリックスから導出された対応する１組の周波数帯の１組の開始強度／時間関数からテンポを推定する本発明の１つの可能な方法の実施形態を詳細に示すために、図８の段階８１０と８１２の続くＣ＋＋ライク擬似コードインプリメンテーションが提供される。最初に、次のような幾つかの定数が宣言される。
１  ｃｏｎｓｔ  ｉｎｔ  ｍａｘＴ；
２  ｃｏｎｓｔ  ｄｏｕｂｌｅ  ｔＤｅｌｔａ；
３  ｃｏｎｓｔ  ｄｏｕｂｌｅ  Ｆｓ；
４  ｃｏｎｓｔ  ｉｎｔ  ｍａｘＢａｎｄｓ＝４；
５  ｃｏｎｓｔ  ｉｎｔ  ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ＝４；
６  ｃｏｎｓｔ  ｄｏｕｂｌｅ  ｆｒａｃｔｉｏｎａｌＯｎｓｅｔｓ［ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ］＝｛０．６６６，０．５，０．３３３，．２５｝；
７  ｃｏｎｓｔ  ｄｏｕｂｌｅ  ｆｒａｃｔｉｏｎａｌＣｏｅｆｆｉｃｉｅｎｔｓ［ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ］＝｛０．４，０．２５，０．４，０．８｝；
８  ｃｏｎｓｔ  ｉｎｔ  Ｐｅｎａｌｔｙ＝０；
９  ｃｏｎｓｔ  ｄｏｕｂｌｅ  ｇ［ｍａｘＢａｎｄｓ］＝｛１．０，１．０，０．５，０．２５｝；
これらの定数は、（１）上記の１行目に宣言され、開始強度／時間関数の最大時間サンプル、即ち時間軸に沿った時間インデックスを表わすｍａｘＴ、（２）上記の２行目に宣言され、各サンプルによって表わされる時間期間の数値を含むｔＤｅｌｔａ、（３）上記の３行目に宣言され、１秒当たりに収集されるサンプルを表わすＦｓ、（４）上記の４行目に宣言され、最初の二次元開始強度マトリックスを区分することができる周波数帯の最大値を表わすｍａｘＢａｎｄｓ、（５）上記の５行目に宣言され、信頼性決定中にＩＯＩのペナルティを決定するために評価される各ＩＯ１内のより高次の調波周波数に対応するポジション数を表わすｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ、（６）上記の６行目に宣言され、ペナルティ計算中に検討される各断片的開始がＩＯＩ内にあるＩＯＩの断片を含む配列であるｆｒａｃｔｉｏｎａｌＯｎｓｅｔｓ、（７）上記の７行目に宣言され、ＩＯＩのペナルティ計算中に、ＩＯＩ内の検討される断片的開始に生じるＤ（ｔ，ｂ）値に掛けられる係数の配列であるｆｒａｃｔｉｏｎａｌＣｏｅｆｆｉｃｉｅｎｔｓ、（８）上記の８行目に宣言され、ＩＯＩの代表Ｄ（ｔ，ｂ）値がしきい値より小さいときに評価信頼性から減算される値であるＰｅｎａｌｔｙ、及び（９）上記の９行目に宣言され、ある周波数帯内のＩＯＩの信頼性を他の周波数帯内の対応する信頼性より重み付けするために、各周波数帯内の検討された各ＩＯＩに掛けられる利得値の配列であるｇを含む。
【００３３】
次に、２つのクラスが宣言される。最初に、クラス「ＯｎｓｅｔＳｔｒｅｎｇｔｈ」が、以下のように宣言される。
１  ｃｌａｓｓ  ＯｎｓｅｔＳｔｒｅｎｇｔｈ
２  ｛
３  ｐｒｉｖａｔｅ：
４  ｉｎｔ  Ｄ＿ｔ［ｍａｘＴ］；
５  ｉｎｔ  ｓｚ；
６  ｉｎｔ  ｍｉｎＦ；
７  ｉｎｔ  ｍａｘＦ；
８
９  ｐｕｂｌｉｃ：
１０  ｉｎｔ  ｏｐｅｒａｔｏｒ［］（ｉｎｔ  ｉ）
１１  ｛ｉｆ（ｉ＜０｜｜ｉ＞＝ｍａｘＴ）ｒｅｔｕｒｎ−１；ｅｌｓｅ  ｒｅｔｕｒｎ（Ｄ＿ｔ［ｉ］）；｝；
１２  ｉｎｔ  ｇｅｔＳｉｚｅ（）｛ｒｅｔｕｒｎ  ｓｚ；｝；
１３  ｉｎｔ  ｇｅｔＭａｘＦ（）｛ｒｅｔｕｒｎ  ｍａｘＦ；｝；
１４  ｉｎｔ  ｇｅｔＭｉｎＦ（）｛ｒｅｔｕｒｎ  ｍｉｎＦ；｝；
１５  ＯｎｓｅｔＳｔｒｅｎｇｔｈ（）；
１６  ｝；
図７Ａから図７Ｂに関して前述したように、クラス「ＯｎｓｅｔＳｔｒｅｎｇｔｈ」は、周波数帯に対応する開始強度／時間関数を表わす。このクラスの完全な宣言は、信頼性の計算のためにＤ（ｔ，ｂ）値を抽出するためにしか使用されないので提供されない。プライベートデータメンバは、（１）上記の４行目に宣言され、Ｄ（ｔ，ｂ）値を含む配列であるＤ＿ｔ、（２）上記の５行目に宣言され、開始強度／時間関数のサイズ、即ちＤ（ｔ，ｂ）値の数であるｓｚ、（３）上記の６行目に宣言され、クラス「ＯｎｓｅｔＳｔｒｅｎｇｔｈ」のインスタンスによって表わされる周波数帯内の最低周波数であるｍｉｎＦ、及び（４）クラス「ＯｎｓｅｔＳｔｒｅｎｇｔｈ」のインスタンスによって表わされる最高周波数であるｍａｘＦを含む。クラス「ＯｎｓｅｔＳｔｒｅｎｇｔｈ」は、（１）上記の１０行目に宣言され、クラスＯｎｓｅｔＳｔｒｅｎｇｔｈのインスタンスが一次元配列として機能するように指定されたインデックス、即ちサンプル数に対応するＤ（ｔ，ｂ）値を抽出する演算子［］、（２）プライベートデータメンバｓｚ、ｍｉｎＦ及びｍａｘＦの現在値をそれぞれ返す３つの関数ｇｅｔＳｉｚｅ、ｇｅｔＭａｘＦ及びｇｅｔＭｉｎＦ、並びに（３）コンストラクタの４つのパブリック関数メンバを含む。
【００３４】
次に、クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」が宣言される。
１  ｃｌａｓｓ  ＴｅｍｐｏＥｓｔｉｍａｔｏｒ
２  ｛
３  ｐｒｉｖａｔｅ：
４  ＯｎｓｅｔＳｔｒｅｎｇｔｈ＊Ｄ；
５  ｉｎｔ  ｎｕｍＢａｎｄｓ；
６  ｉｎｔ  ｍａｘＩＯＩ；
７  ｉｎｔ  ｍｉｎＩＯＩ；
８  ｉｎｔ  ｔｈｒｅｓｈｏｌｄｓ［ｍａｘＢａｎｄｓ］；
９  ｉｎｔ  ｆｒａｃｔｉｏｎａｌＴｓ［ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ］；
１０  ｄｏｕｂｌｅ  ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｍａｘＢａｎｄｓ］［ｍａｘＴ］；
１１  ｄｏｕｂｌｅ  ｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙ［ｍａｘＴ］；
１２  ｄｏｕｂｌｅ  ｐｅｎａｌｔｉｅｓ［ｍａｘＴ］；
１３
１４  ｉｎｔ  ｆｉｎｄＰｅａｋ（ＯｎｓｅｔＳｔｒｅｎｇｔｈ＆ｄｔ，ｉｎｔ  ｔ，ｉｎｔ  Ｒ）；
１５  ｖｏｉｄ  ｃｏｍｐｕｔｅＴｈｒｅｓｈｏｌｄｓ（）；
１６  ｖｏｉｄ  ｃｏｍｐｕｔｅＦｒａｃｔｉｏｎａｌＴｓ（ｉｎｔ  ＩＯＩ）；
１７  ｖｏｉｄ  ｎｘｔＲｅｌｉａｂｉｌｉｔｙＡｎｄＰｅｎａｌｔｙ
１８  （ｉｎｔ  ＩＯＩ，ｉｎｔ  ｐｈａｓｅ，ｉｎｔ  ｂａｎｄ，ｄｏｕｂｌｅ＆ｒｅｌｉａｂｉｌｉｔｙ，
１９  ｄｏｕｂｌｅ＆ｐｅｎａｌｔｙ）；
２０
２１  ｐｕｂｌｉｃ：
２２  ｖｏｉｄ  ｓｅｔＤ（ＯｎｓｅｔＳｔｒｅｎｇｔｈ＊ｄ，ｉｎｔ  ｂ）｛Ｄ＝ｄ；ｎｕｍＢａｎｄｓ＝ｂ；｝；
２３  ｖｏｉｄ  ｓｅｔＭａｘＩＯＩ（ｉｎｔ  ｍｘＩＯＩ）｛ｍａｘＩＯＩ＝ｍｘＩＯＩ；｝；
２４  ｖｏｉｄ  ｓｅｔＭｉｎＩＯＩ（ｉｎｔ  ｍｎＩＯＩ）｛ｍｉｎＩＯＩ＝ｍｎＩＯＩ；｝；
２５  ｉｎｔ  ｅｓｔｉｍａｔｅＴｅｍｐｏ（）；
２６  ＴｅｍｐｏＥｓｔｉｍａｔｏｒ（）；
２７  ｝；
クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」は、（１）上記の４行目に宣言され、１組の周波数帯の開始強度／時間関数を表わすクラス「ＯｎｓｅｔＳｔｒｅｎｇｔｈ」のインスタンスの配列であるＤ、（２）上記の５行目に宣言され、現在検討中の周波数帯と開始強度／時間関数の数を格納するｎｕｍＢａｎｄｓ、（３）上記の６、７行目に宣言され、それぞれ図１０の点１００８及び１００６に対応する信頼性解析で検討される最大ＩＯＩ長と最小ＩＯＩ長であるｍａｘＩＯＩとｍｉｎＩＯｌ、（４）８行目に宣言され、信頼性解析中に代表Ｄ（ｔ，ｂ）値が比較される計算済みしきい値の配列であるｔｈｒｅｓｈｏｌｄｓ、（５）９行目に宣言され、現在検討中のＩＯＩ内でより高次の周波数の存在に基づくＩＯＩのペナルティの計算中に検討される断片的開始に対応するＩＯＩの開始からオフセット（Δｔで表した）であるｆｒａｃｔｉｏｎａｌＴｓ、（６）１０行目に宣言され、各周波数帯の各ＩＯＩ長の計算済み信頼性を格納する二次元配列であるｒｅｌｉａｂｉｌｉｔｉｅｓ、（７）１１行目に宣言され、各周波数帯の一連のＩＯＩ内の各ＩＯＩ長に関して決定された信頼性を合計することによって計算される最終的信頼性を記憶する配列であるｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙ、及び（８）１２行目に宣言され、信頼性解析中に計算されたペナルティを格納する配列であるｐｅｎａｌｔｉｅｓ、を含むプライベートデータメンバを含む。クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」は、（１）１４行目に宣言され、図１１と関連して前述したように近傍Ｒ内の最高ピークの時点を示すｆｉｎｄＰｅａｋ、（２）１５行目に宣言され、プライベートデータメンバしきい値に格納されたしきい値を計算するｃｏｍｐｕｔｅＴｈｒｅｓｈｏｌｄｓ、（３）１６行目に宣言され、ペナルティを計算するために検討される高次高調波周波数に対応する特定長のＩＯＩの開始からのオフセット（時間で表した）を計算するｃｏｍｐｕｔｅＦｒａｃｔｉｏｎａｌＴｓ、（４）１７行目に宣言され、特定のＩＯＩ長、位相及び周波数帯に対する次の信頼性とペナルティ値を計算するｎｘｔＲｅｌｉａｂｉｌｉｔｙＡｎｄＰｅｎａｌｔｙ、のプライベート関数メンバを含む。クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」は、（１）上記の２２行目に宣言され、クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」のインスタンスにいくつかの開始強度／時間関数をロードすることを可能にするｓｅｔＤ、（２）上記の２３、２４行目に宣言され、信頼性解析で検討されるＩＯＩの範囲を定義する最大及び最小ＩＯＩ長を設定することを可能にするｓｅｔＭａｘ及びｓｅｔＭｉｎ、（３）プライベートデータメンバＤに格納された開始強度／時間関数に基づいてテンポを推定するｅｓｔｉｍａｔｅＴｅｍｐｏ、及び（４）コンストラクタ、のパブリック関数メンバを含む。
【００３５】
次に、クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」の様々な関数メンバのインプリメンテーションが提供される。最初に、次のような関数メンバ「ｆｉｎｄＰｅａｋ」のインプリメンテーションが提供される。
１  ｉｎｔ  ＴｅｍｐｏＥｓｔｉｍａｔｏｒ：：ｆｉｎｄＰｅａｋ（ＯｎｓｅｔＳｔｒｅｎｇｔｈ＆ｄｔ，ｉｎｔ  ｔ，ｉｎｔ  Ｒ）
２  ｛
３  ｉｎｔ  ｍａｘ＝０；
４  ｉｎｔ  ｎｅｘｔＴ；
５  ｉｎｔ  ｉ；
６  ｉｎｔ  ｓｔａｒｔ＝ｔ−Ｒ／２；
７  ｉｎｔ  ｆｉｎｉｓｈ＝ｔ＋Ｒ；
８
９  ｉｆ（ｓｔａｒｔ＜０）ｓｔａｒｔ＝０；
１０  ｉｆ（ｆｉｎｉｓｈ＞ｄｔ．ｇｅｔＳｉｚｅ（））ｆｉｎｉｓｈ＝ｄｔ．ｇｅｔＳｉｚｅ（）；
１１
１２  ｆｏｒ（ｉ＝ｓｔａｒｔ；ｉ＜ｆｉｎｉｓｈ；ｉ＋＋）
１３  ｛
１４  ｉｆ（ｄｔ［ｉ］＞ｍａｘ）
１５  ｛
１６  ｍａｘ＝ｄｔ［ｉ］；
１７  ｎｅｘｔＴ＝ｉ；
１８  ｝
１９  ｝
２０  ｒｅｔｕｒｎ  ｎｅｘｔＴ；
２１  ｝
関数メンバ「ｆｉｎｄＰｅａｋ」は、図１１に関して前述したように、パラメータｔやＲ等の時間値と近傍サイズと、時点ｔのまわりの近傍内の最高ピークを見つけるための開始強度／時間関数ｄｔに対する基準を受け取る。関数メンバ「ｆｉｎｄＰｅａｋ」は、９〜１０行目で近傍を囲む横軸点に対応する開始時間と終了時間を計算し、１２〜１９行目のｆｏｒループで、その近傍内の各Ｄ（ｔ，ｂ）値を調べて最大Ｄ（ｔ，ｂ）値を決定する。最大Ｄ（ｔ，ｂ）に対応するインデックス、即ち、時間値は、２０行目に戻される。
【００３６】
次に、関数メンバ「ｃｏｍｐｕｔｅＴｈｒｅｓｈｏｌｄｓ」のインプリメンテーションが提供される。
１  ｖｏｉｄ  ＴｅｍｐｏＥｓｔｉｍａｔｏｒ：：ｃｏｍｐｕｔｅＴｈｒｅｓｈｏｌｄｓ（）
２  ｛
３  ｉｎｔ  ｉ，ｊ；
４  ｄｏｕｂｌｅ  ｓｕｍ；
５
６  ｆｏｒ（ｉ＝０；ｉ＜ｎｕｍＢａｎｄｓ；ｉ＋＋）
７  ｛
８  ｓｕｍ＝０．０；
９  ｆｏｒ（ｊ＝０；ｊ＜Ｄ［ｉ］．ｇｅｔＳｉｚｅ（）；ｊ＋＋）
１０  ｛
１１  ｓｕｍ＋＝Ｄ［ｉ］［ｊ］；
１２  ｝
１３  ｔｈｒｅｓｈｏｌｄｓ［ｉ］＝ｉｎｔ（ｓｕｍ／ｊ）；
１４  ｝
１５  ｝
この関数は、各開始強度／時間関数の平均Ｄ（ｔ，ｂ）値を計算し、平均Ｄ（ｔ，ｂ）値を各開始強度／時間関数のしきい値として記憶する。
【００３７】
次に、関数メンバ「ｎｘｔＲｅｌｉａｂｉｌｉｔｙＡｎｄＰｅｎａｌｔｙ」のインプリメンテーションを提供する。
１  ｖｏｉｄ  ＴｅｒｎｐｏＥｓｔｉｍａｔｏｒ：：ｎｘｔＲｅｌｉａｂｉｌｉｔｙＡｎｄＰｅｎａｌｔｙ
２  （ｉｎｔ  ＩＯＩ，ｉｎｔ  ｐｈａｓｅ，ｉｎｔ  ｂａｎｄ，ｄｏｕｂｌｅ＆ｒｅｌｉａｂｉｌｉｔｙ，
３  ｄｏｕｂｌｅ＆ｐｅｎａｌｔｙ）
４  ｛
５  ｉｎｔ  ｉ；
６  ｉｎｔ  ｖａｌｉｄ＝０；
７  ｉｎｔ  ｐｅａｋ＝０；
８  ｉｎｔ  ｔ＝ｐｈａｓｅ；
９  ｉｎｔ  ｎｅｘｔＴ；
１０  ｉｎｔ  Ｒ＝ＩＯＩ／１０；
１１  ｄｏｕｂｌｅ  ｓｑｔ；
１２
１３  ｉｆ（ｌ（Ｒ％２））Ｒ＋＋；
１４  ｉｆ（Ｒ＞５）Ｒ＝５；
１５
１６  ｒｅｌｉａｂｉｌｉｔｙ＝０；
１７  ｐｅｎａｌｔｙ＝０；
１８
１９  ｗｈｉｌｅ（ｔ＜（Ｄ［ｂａｎｄ］．ｇｅｔＳｉｚｅ（）−ＩＯＩ））
２０  ｛
２１  ｎｅｘｔＴ＝ｆｉｎｄＰｅａｋ（Ｄ［ｂａｎｄ］，ｔ＋ＩＯＩ，Ｒ）；
２２  ｐｅａｋ＋＋；
２３  ｉｆ（Ｄ［ｂａｎｄ］［ｎｅｘｔＴ］＞ｔｈｒｅｓｈｏｌｄｓ［ｂａｎｄ］）
２４  ｛
２５  ｖａｌｉｄ＋＋；
２６  ｒｅｌｉａｂｉｌｉｔｙ＋＝Ｄ［ｂａｎｄ］［ｎｅｘｔＴ］；
２７  ｝
２８  ｅｌｓｅ  ｒｅｌｉａｂｉｌｉｔｙ＝Ｐｅｎａｌｔｙ；
２９
３０  ｆｏｒ（ｉ＝０；ｉ＜ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ；ｉ＋＋）
３１  ｛
３２  ｐｅｎａｌｔｙ＋＝Ｄ［ｂａｎｄ］［ｆｉｎｄＰｅａｋ
３３  （Ｄ［ｂａｎｄ］，ｔ＋ｆｒａｃｔｉｏｎａｌＴｓｆ［ｉ］，
３４  Ｒ）］＊ｆｒａｃｔｉｏｎａｌＣｏｅｆｆｉｃｉｅｎｔｓ［ｉ］；
３５  ｝
３６
３７  ｔ＋＝ＩＯＩ；
３８  ｝
３９  ｓｑｔ＝ｓｑｒｔ（ｖａｌｉｄ＊ｐｅａｋ）；
４０  ｒｅｌｉａｂｉｌｉｔｙ／＝ｓｑｔ；
４１  ｐｅｎａｌｔｙ／＝ｓｑｔ；
４２  ｝
関数メンバ「ｎｘｔＲｅｌｉａｂｉｌｉｔｙＡｎｄＰｅｎａｌｔｙ」は、指定されたＩＯＩサイズ、即ち長さ、指定された位相、及び指定された周波数帯の信頼性とペナルティを計算する。換言すると、このルーチンは、二次元プライベートデータメンバ信頼性における各値を計算するために呼び出される。６〜７行目に宣言されたローカル変数ｖａｌｉｄとｐｅａｋは、指定されたＩＯＩサイズ、位相、指定された周波数帯の信頼性とペナルティを計算するために開始強度／時間関数が解析されるときに、前述のしきい値ＩＱＩ及び合計ＩＯＩのカウントを累積するために使用される。８行目に宣言されたローカル変数ｔは、指定された位相に設定される。図１１に関して前に述べたように、１０行目に宣言されたローカル変数Ｒは、代表Ｄ（ｔ，ｂ）値が選択される近傍の長さである。
【００３８】
１９〜３８行のｗｈｉｌｅループでは、長さＩＯＩの隣接Ｄ（ｔ，ｂ）値の連続グループが検討される。換言すると、ループの各反復を検討して、プロットされた開始強度／時間関数の時間軸に沿った次のＩＯＩを解析することができる。２１行で、次のＩＯＩの代表Ｄ（ｔ，ｂ）値が計算される。２２行目で、別のＩＯＩの検討が終わったことを示すためにローカル変数ｐｅａｋが増分される。２３行で、次のＩＯＩの代表Ｄ（ｔ，ｂ）値の大きさがしきい値より大きいと判定された場合は、２５行目でローカル変数ｖａｌｉｄが増分されて、２６行目で、別の有効代表Ｄ（ｔ，ｂ）値が検出されＤ（ｔ，ｂ）値がローカル変数ｒｅｌｉａｂｉｌｉｔｙに追加されたことが示される。次のＩＯＩの代表Ｄ（ｔ，ｂ）値がしきい値以下の場合、ローカル変数ｒｅｌｉａｂｉｌｉｔｙは値Ｐｅｎａｌｔｙによって減分される。次に、３０〜３５行のｆｏｒループで、現在検討中のＩＯＩ内のより高次の拍子の検出に基づいてペナルティが計算される。定数ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ及び配列ＦｒａｃｔｉｏｎａｌＴｓによって指定された、ＩＯＩ内で様々な順序間高調波ピークのＤ（ｔ，ｂ）値に係数を掛けたものとしてペナルティが計算される。最後に、３７行目で、次のＩＯＩに索引を付けて１９〜３８行のｗｈｉｌｅループの次の反復の準備をするために、指定されたＩＯＩ長（ＩＯＩ）によってｔが増分される。３９〜４１行目で、ＩＯＩ長、位相、周波数帯の累積的な信頼性とペナルティが両方とも、ローカル変数ｖａｌｉｄ及びｐｅａｋの内容の積の平方根によって正規化される。代替の実施形態では、ｎｅｘｔＴは、３７行目で、ＩＯＩによって増分されてもよく、２１行目で、ｆｉｎｄＰｅａｋ（Ｄ［ｂａｎｄ］，ｎｅｘｔＴ＋ＩＯＩ，Ｒ）を呼び出すことにより求められてもよい。
【００３９】
次に、関数メンバ「ｃｏｍｐｕｔｅＦｒａｃｔｉｏｎａｌＴｓ」のインプリメンテーションを提供する。
１  ｖｏｉｄ  ＴｅｍｐｏＥｓｔｉｍａｔｏｒ：：ｃｏｍｐｕｔｅＦｒａｃｔｉｏｎａｌＴｓ（ｉｎｔ  ＩＯＩ）
２  ｛
３  ｉｎｔ  ｉ；
４
５  ｆｏｒ（ｉ＝０；ｉ＜ｎｕｍＦｒａｃｔｉｏｎａｌＯｎｓｅｔｓ；ｉ＋＋）
６  ｛
７  ｆｒａｃｔｉｏｎａｌＴｓ［ｉ］＝ｉｎｔ（ＩＯＩ＊ｆｒａｃｔｉｏｎａｌＯｎｓｅｔｓ［ｉ］）；
８  ｝
９  ｝
この関数メンバは、定数配列「ｆｒａｃｔｉｏｎａｌＯｎｓｅｔｓ」に格納された断片的開始に基づいて指定長のＩＯＩの最初からの、時間で表したオフセットを単純に計算する。
【００４０】
最後に、関数メンバ「ＥｓｔｉｍａｔｅＴｅｍｐｏ」のインプリメンテーションを提供する。
１  ｉｎｔ  ＴｅｍｐｏＥｓｔｉｍａｔｏｒ：：ｅｓｔｉｍａｔｅＴｅｍｐｏ（）
２  ｛
３  ｉｎｔ  ｂａｎｄ；
４  ｉｎｔ  ＩＯＩ；
５  ｉｎｔ  ＩＯＩ２；
６  ｉｎｔ  ｐｈａｓｅ；
７  ｄｏｕｂｌｅ  ｒｅｌｉａｂｉｌｉｔｙ＝０．０；
８  ｄｏｕｂｌｅ  ｐｅｎａｌｔｙ＝０．０；
９  ｉｎｔ  ｅｓｔｉｍａｔｅ＝０；
１０  ｄｏｕｂｌｅ  ｅ；
１１
１２  ｉｆ（Ｄ＝＝０）ｒｅｔｕｒｎ−１；
１３  ｆｏｒ（ＩＯＩ＝ｍｉｎＩＯＩ；ＩＯＩ＜ｍａｘＩＯＩ；ＩＯＩ＋＋）
１４  ｛
１５  ｐｅｎａｌｔｉｅｓ［ＩＯＩ］＝０．０；
１６  ｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙ［ＩＯＩ］＝０．０；
１７  ｆｏｒ（ｂａｎｄ＝０；ｂａｎｄ＜ｎｕｍＢａｎｄｓ；ｂａｎｄ＋＋）
１８  ｛
１９  ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ］＝０．０；
２０  ｝
２１  ｝
２２  ｃｏｍｐｕｔｅＴｈｒｅｓｈｏｌｄｓ（）；
２３
２４  ｆｏｒ（ｂａｎｄ＝０；ｂａｎｄ＜ｎｕｍＢａｎｄｓ；ｂａｎｄ＋＋）
２５  ｛
２６  ｆｏｒ（ＩＯＩ＝ｍｉｎＩＯＩ；ＩＯＩ＜ｍａｘＩＯＩ；ＩＯＩ＋＋）
２７  ｛
２８  ｃｏｍｐｕｔｅＦｒａｃｔｉｏｎａｌＴｓ（ＩＯＩ）；
２９  ｆｏｒ（ｐｈａｓｅ＝０；ｐｈａｓｅ＜ＩＯＩ−１；ｐｈａｓｅ＋＋）
３０  ｛
３１  ｎｘｔＲｅｌｉａｂｉｌｉｔｙＡｎｄＰｅｎａｌｔｙ
３２  （ＩＯＩ，ｐｈａｓｅ，ｂａｎｄ，ｒｅｌｉａｂｉｌｉｔｙ，ｐｅｎａｌｔｙ）；
３３  ｉｆ（ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ］＜ｒｅｌｉａｂｉｌｉｔｙ）
３４  ｛
３５  ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ］＝ｒｅｌｉａｂｉｌｉｔｙ；
３６  ｐｅｎａｌｔｉｅｓ［ＩＯＩ］＝ｐｅｎａｌｔｙ；
３７  ｝
３８  ｝
３９  ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ］＝０．５＊ｐｅｎａｌｔｉｅｓ［ＩＯＩ］；
４０  ｝
４１  ｝
４２
４３  ｆｏｒ（ＩＯＩ＝ｍｉｎＩＯＩ；ＩＯＩ＜ｍａｘＩＯＩ；ＩＯＩ＋＋）
４４  ｛
４５  ｒｅｌｉａｂｉｌｉｔｙ＝０．０；
４６  ｆｏｒ（ｂａｎｄ＝０；ｂａｎｄ＜ｎｕｍＢａｎｄｓ；ｂａｎｄ＋＋）
４７  ｛
４８  ＩＯＩ２＝ＩＯＩ／２；
４９  ｉｆ（ＩＯＩ２＞＝ｍｉｎＩＯＩ）
５０  ｒｅｌｉａｂｉｌｉｔｙ＋＝
５１  ｇ［ｂａｎｄ］＊（ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ］＋
５２  ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ／２］）；
５３  ｅｌｓｅ  ｒｅｌｉａｂｉｌｉｔｙ＋＝ｇ［ｂａｎｄ］＊ｒｅｌｉａｂｉｌｉｔｉｅｓ［ｂａｎｄ］［ＩＯＩ］；
５４  ｝
５５  ｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙ［ＩＯＩ］＝ｒｅｌｉａｂｉｌｉｔｙ；
５６  ｝
５７
５８  ｒｅｌｉａｂｉｌｉｔｙ＝０．０；
５９  ｆｏｒ（ＩＯＩ＝ｍｉｎＩＯＩ；ＩＯＩ＜ｍａｘＩＯＩ；ＩＯＩ＋＋）
６０  ｛
６１  ｉｆ（ｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙ［ＩＯＩ］＞ｒｅｌｉａｂｉｌｉｔｙ）
６２  ｛
６３  ｅｓｔｉｍａｔｅ＝ＩＯＩ；
６４  ｒｅｌｉａｂｉｌｉｔｙ＝ｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙ［ＩＯＩ］；
６５  ｝
６６  ｝
６７
６８  ｅ＝Ｆｓ／（ｔＤｅｌｔａ＊ｅｓｔｉｍａｔｅ）；
６９  ｅ＊＝６０；
７０  ｅｓｔｉｍａｔｅ＝ｉｎｔ（ｅ）；
７１  ｒｅｔｕｒｎ  ｅｓｔｉｍａｔｅ；
７２  ｝
関数メンバ「ｅｓｔｉｍａｔｅＴｅｍｐｏ」は、（１）３行目に宣言された、検討される現在の周波数帯又は開始強度／時間関数を指定する反復変数であるｂａｎｄ、（２）４行目に宣言され、現在検討中のＩＯＩ長であるＩＯＩ、（３）５行目に宣言され、現在検討中のＩＯＩ長の半分であるＩＯＩ２、（４）６行目に宣言され、現在検討中のＩＯＩ長の現在検討中の位相であるｐｈａｓｅ、（５）７行目に宣言され、現在検討中の周波数帯、ＩＯＩ長、及び位相に関して計算されたｒｅｌｉａｂｉｌｉｔｙ、（６）現在検討中の周波数帯、ＩＯＩ長及び位相に対して計算されたｐｅｎａｌｔｙ、（７）９〜１０行目に宣言され、最終テンポ推定値を計算するために使用されるｅｓｔｉｍａｔｅとｅ、のローカル変数を含む。
【００４１】
最初に、１２行目で、クラス「ＴｅｍｐｏＥｓｔｉｍａｔｏｒ」の現行インスタンスに１組の開始強度／時間関数が入力されたかどうかを確認するチェックが行われる。２番目に、１３〜２１行目で、テンポ推定に使用される様々なローカル及びプライベートデータメンバが初期化される。次に、２２行目で、信頼性解析のためのしきい値が計算される。２４〜４１行目のｆｏｒループでは、各周波数帯の各検討中のＩＯＩ長の位相ごとに信頼性及びペナルティが計算される。３９行目で、現在検討中のＩＯＩ長と現在検討中の周波数帯の全ての位相にわたって計算された最も高い信頼性とそれに対応するペナルティが決定され、現在検討中のＩＯＩ長と周波数帯に関して求められた信頼性として記憶される。次に、４３〜５６行目のｆｏｒループで、周波数帯全体にわたるＩＯＩ長の信頼性を合計することによってＩＯＩ長ごとに最終信頼性が計算され、各項には、他の周波数帯より大きな特定の周波数帯に重み付けするために、定数配列「ｇ」に記憶されたゲインファクタが掛けられる。特定のＩＯＩの信頼性の推定値が、特定のＩＯＩ長の半分の長さのＩＯＩの信頼性の推定値に依存することが経験的に分かっているので、現在検討中のＩＯＩ長の半分のＩＯＩに対応する信頼性が利用できるときは、半分の長さのＩＯＩの信頼性が、この計算で現在検討中のＩＯＩの信頼性と合算される。５５行目で、その時点に計算された信頼性が、データメンバｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙに格納される。最後に、５９〜６６行目のｆｏｒループで、データメンバｆｉｎａｌＲｅｌｉａｂｉｌｉｔｙを調べることによって、任意のＩＯＩ長に関して計算された全体で最大の信頼性が求められる。６８〜７１行目で、任意のＩＯＩ長に関して計算された全体で最大の信頼性が使用されて１分当たりの拍子で表した推定テンポが計算され、７１行目で戻される。
【００４２】
本発明を特定の実施形態に関して説明したが、本発明はこれらの実施形態に限定されない。本発明の趣旨の範囲内の修正は当業者に明らかであろう。例えば、様々なモジュール編成、データ構造、プログラミング言語、制御構造、及び様々な他のプログラミング及びソフトウェア工学パラメータを使用して、本発明の実質的に無数の代替実施形態を考案することができる。前述の実施態様で使用されている種々様々な経験的な値及び技術は、様々な異なる環境下で様々なタイプの音楽セレクションに最適なテンポ推定を実現するように変更することができる。例えば、高次高調波周波数の存在に基づいてペナルティを決定するために、様々な異なる断片的開始係数及び多数の断片的開始を検討することができる。技法を特徴付ける様々なパラメータを使用する膨大な数の技法のうちのどの技法によって作成されたスペクトログラムも、使用することができる。解析中に信頼性を増減しまたペナルティを計算する厳密な値は、変化してもよい。スペクトログラムを作成するためにサンプリングされる音楽の一部分の長さは異なってもよい。開始強度は代替方法によって計算されてもよく、開始強度／時間関数の数を計算する基礎として任意の振動数を使用することができる。
【００４３】
以上の説明は、説明のため、本発明の完全な理解を提供するために特定の命名法を使用した。しかしながら、本発明を実施するには特定の詳細が必要ないことは当業者に明らかである。本発明の特定の実施形態の以上の説明は、例示と説明のために示された。これらの説明は、網羅的でもなく本発明を開示した厳密な形態に限定するものでもない。以上の教示を鑑みて多くの修正及び変更が可能であることは明らかである。実施形態は、本発明の原理とその実際の応用例を最もよく説明し、それにより当業者が、意図された特定の用途に適合するような様々な修正で本発明及び様々な実施形態を最も良く利用できるようにするために図示され記述された。本発明の範囲は、添付の特許請求の範囲及びその等価物によって定義される。
【図１Ａ】
2010503043.tif 000005
【図１Ｂ】
2010503043.tif 000006
【図１Ｃ】
2010503043.tif 000007
【図１Ｄ】
2010503043.tif 000008
【図１Ｅ】
2010503043.tif 000009
【図１Ｆ】
2010503043.tif 000010
【図１Ｇ】
2010503043.tif 000011
【図２】
2010503043.tif 000012
【図３】
2010503043.tif 000013
【図４】
2010503043.tif 000014
【図５】
2010503043.tif 000015
【図６Ａ】
2010503043.tif 000016
【図６Ｂ】
2010503043.tif 000017
【図６Ｃ】
2010503043.tif 000018
【図７Ａ】
2010503043.tif 000019
【図７Ｂ】
2010503043.tif 000020
【図８】
2010503043.tif 000021
【図９Ａ】
2010503043.tif 000022
【図９Ｂ】
2010503043.tif 000023
【図９Ｃ】
2010503043.tif 000024
【図９Ｄ】
2010503043.tif 000025
【図１０】
2010503043.tif 000026
【図１１】
2010503043.tif 000027
【図１２】
2010503043.tif 000028
【図１３】
2010503043.tif 000029
【国際調査報告】
2010503043.tif 000030
2010503043.tif 000031
2010503043.tif 000032