本発明の一実施形態に係る音響信号分析装置10について説明する。音響信号分析装置10は、以下説明するように、楽曲を表わす音響信号を取り込んで、その楽曲における拍点、テンポ、小節線の位置及びコード進行を検出する。音響信号分析装置10は、図1に示すように、入力操作子11、コンピュータ部12、表示器13、記憶装置14、外部インターフェース回路15及びサウンドシステム16を備えており、これらがバスBSを介して接続されている。
入力操作子11は、オン・オフ操作に対応したスイッチ(例えば数値を入力するためのテンキー)、回転操作に対応したボリューム又はロータリーエンコーダ、スライド操作に対応したボリューム又はリニアエンコーダ、マウス、タッチパネルなどから構成される。これらの操作子は、演奏者の手によって操作されて、分析対象の楽曲の選択、音響信号の分析開始又は停止、楽曲の再生又は停止(後述するサウンドシステム16からの出力又は停止)、音響信号の分析に関する各種パラメータの設定などに用いられる。入力操作子11を操作すると、その操作内容を表す操作情報が、バスBSを介して、後述するコンピュータ部12に供給される。
コンピュータ部12は、バスBSにそれぞれ接続されたCPU12a、ROM12b及びRAM12cからなる。CPU12aは、詳しくは後述する音響信号分析プログラム及びそのサブルーチンをROM12bから読み出して実行する。ROM12bには、音響信号分析プログラム及びそのサブルーチンに加えて、初期設定パラメータ、表示器13に表示される画像を表わす表示データを生成するための図形データ及び文字データなどの各種データが記憶されている。RAM12cには、音響信号分析プログラムの実行時に、各種データが一時的に記憶される。
表示器13は、液晶ディスプレイ(LCD)によって構成される。コンピュータ部12は、図形データ、文字データなどを用いて表示すべき内容を表わす表示データを生成して表示器13に供給する。表示器13は、コンピュータ部12から供給された表示データに基づいて画像を表示する。例えば分析対象の楽曲の選択時には、楽曲のタイトルリストが表示される。また、例えば分析終了時には、拍点及び小節線を表わすグラフ、テンポの推移を表わすグラフ、コード進行を表わすコード名の系列などが表示される。
また、記憶装置14は、HDD、FDD、CD−ROM、MO、DVDなどの大容量の不揮発性記録媒体と、同各記録媒体に対応するドライブユニットから構成されている。記憶装置14には、複数の楽曲をそれぞれ表わす複数の楽曲データが記憶されている。楽曲データは、楽曲を所定のサンプリング周期(例えば1/44100秒)でサンプリングして得られた複数のサンプル値からなり、各サンプル値が記憶装置14における連続するアドレスに順に記録されている。楽曲のタイトルを表わすタイトル情報、楽曲データの容量を表わすデータサイズ情報なども楽曲データに含まれている。楽曲データは予め記憶装置14に記憶されていてもよいし、後述する外部インターフェース回路15を介して外部機器から取り込んでもよい。
外部インターフェース回路15は、音響信号分析装置10を電子音楽装置、パーソナルコンピュータなどの外部機器に接続可能とする接続端子を備えている。音響信号分析装置10は、外部インターフェース回路15を介して、LAN(Local Area Network)、インターネットなどの通信ネットワークにも接続可能である。
サウンドシステム16は、楽曲データをアナログ音信号に変換するD/A変換器、変換したアナログ音信号を増幅するアンプ、及び増幅されたアナログ音信号を音響信号に変換して出力する左右一対のスピーカを備えている。ユーザが入力操作子11を用いて分析対象の楽曲の再生を指示すると、CPU12aは、分析対象の楽曲データをサウンドシステム16に供給する。これにより、ユーザは分析対象の楽曲を試聴できる。
つぎに、音響信号分析装置10の動作の概略を説明する。本実施形態においては、分析対象の楽曲は複数のフレームt(=0,1,・・・)に分割される。各フレームtにおける、直前の小節線からの拍数として表わされた拍子位置s(例えば、4拍子の楽曲においては、「s」は、「1」、「2」、「3」又は「4」)、次の拍までのフレーム数n及び拍周期bの値(テンポの逆数に比例する値)の値の組み合わせの系列によって表わされたモデルZ
(o)(図8参照)と、各フレームtにおいて発音されているコード(和音)i(=「C」、「Cm」、「D」、・・・)の系列によって表されたモデルZ
(c)(図8参照)と、に基づいて、拍点、テンポ、小節線の位置(具体的には各フレームの拍子位置)及びコード進行が、ベイズ推定法を用いて同時(一体的)に推定される。なお、詳しくは後述するように、コードの遷移は、拍子位置に関連している。したがって、上記の両モデルは互いに関連付けられている。ただし、ベイズ推定を解析的に実行することは困難であるので、本実施形態では、変分ベイズ法を用いる。具体的には、下記の式(1)に示すような変分事後分布の積として表わされる分布を真の事後分布に近似させる。つまり、前記変分事後分布の積として表わされる分布と真の事後分布との差が収束するまで、各変分事後分布を反復的に更新する。なお、拍周期bは、フレームの数によって表わされる。したがって、拍周期bの値は「1≦b≦b
max」を満たす整数であり、拍周期bの値が「η」である状態では、フレーム数nの値は「0≦n<η」を満たす整数である。
また、上記の式(1)における「θ(c)」は、コード進行のモデル(つまり、モデルZ(c))に関連するパラメータである。具体的には、「θ(c)」は、詳しくは後述する、各コードiに対応したコード特徴量x(c)を規定するパラメータ、及び各コードiに対応したテンプレートである。また、「θ(o)」は、拍点のモデル(つまり、モデルZ(o))に関連するパラメータである。具体的には、「θ(o)」は、詳しくは後述する、オンセット特徴量x(o)の分布(正規分布)を規定するパラメータである。また、「θ(b)」は、テンポのモデル(つまり、モデルZ(o))に関連するパラメータである。具体的には、「θ(b)」は、詳しくは後述する、拍周期bに対応したテンプレートである。
つぎに、音響信号分析装置10の動作について具体的に説明する。ユーザが音響信号分析装置10の図示しない電源スイッチをオンにすると、CPU12aは、図2A及び図2Bに示す音響信号分析プログラムをROM12bから読み出して実行する。なお、図2Bにおいては、「判断」のステップを六角形で示す。
CPU12aは、ステップS10にて音響信号分析処理を開始し、ステップS11にて、記憶装置14に記憶されている複数の楽曲データにそれぞれ含まれるタイトル情報を読み込んで、楽曲のタイトルをリスト形式で表示器13に表示する。ユーザは、入力操作子11を用いて、表示器13に表示された楽曲の中から分析対象の楽曲データを選択する。なお、ステップS11にて分析対象の楽曲データを選択する際、選択しようとする楽曲データが表す楽曲の一部又は全部を再生して楽曲データの内容を確認できるように構成してもよい。
つぎに、CPU12aは、ステップS12にて、音響信号分析のための初期設定処理を実行する。具体的には、前記選択された楽曲データのデータサイズ情報に応じた記憶領域をRAM12c内に確保し、前記確保した記憶領域に前記選択された楽曲データを読み込む。また、後述するコード特徴量x(c)、オンセット特徴量x(o)、BPM特徴量x(b)などを記憶する記憶領域をRAM12c内に確保する。また、後述する変分事後分布を計算するために一時的に利用される変数を記憶する記憶領域をRAM12c内に確保する。また、同ステップS12において、ユーザは、前記選択した楽曲の調keyを、入力操作子11を用いて入力する。つまり、本実施形態においては、前記選択した楽曲の調keyが既知である。
CPU12aは、ステップS13にて、図3に示すように、前記選択された楽曲を所定の時間間隔をおいて区切り、複数のフレームt(=0,1,・・・)に分割する。各フレームの長さは共通である。
次に、CPU12aは、ステップS14にて、各フレームtの各特徴量を計算する。具体的には、CPU12aは、コード(和音)に関する特徴を表わすコード特徴量x(c)、拍の存在に関する特徴を表すオンセット特徴量x(o)、及びテンポに関する特徴を表すBPM(beats per minute(1分間あたりの拍数))特徴量x(b)をフレームtごとに計算する。
フレームtのコード特徴量x(c)(t)は次のようにして計算される。まず、CPU12aは、各フレームtの各周波数ビンのパワーを、その周波数に最も近い音高の周波数(例えば平均律における各音高の基本周波数)にマッピングする。次に、上記のようにして各音高にマッピングされたパワーのうち、低音域(例えば「B1」以下)に属するパワーをピッチクラス(C,C#,D,・・・,B#)ごとに加算(又は積算)する。このようにして計算された各ピッチクラスのパワーからなる12次元の特徴量をベース特徴量HPCP(B)と呼ぶ(図4参照)。また、各音高にマッピングされたパワーのうち、高音域(例えば「C2」以上)に属するパワーをピッチクラス(C,C#,D,・・・,B#)ごとに加算(又は積算)する。このようにして計算された各ピッチクラスのパワーからなる12次元の特徴量をトレブル特徴量HPCP(T)と呼ぶ。各フレームtに関するベース特徴量HPCP(B)及びトレブル特徴量HPCP(T)からなる24次元の特徴量がコード特徴量x(c)(t)である。
フレームtのオンセット特徴量x
(o)(t)は、次のようにして計算される。CPU12aは、まず、フレームtに対して短時間フーリエ変換を実行し、各周波数ビンの信号強度を計算する。次に、CPU12aは、メルフィルタバンクを用いて、各周波数帯域fb
y(例えば、y=1,2,・・・,20)の信号強度M(fb
y,t)を計算する。次に、CPU12aは、フレーム間における各周波数帯域の信号強度の増加量R(fb
y,t)を計算する。下記の式(2)に示すように、フレーム間における前記各周波数帯域の信号強度の増加量の総和がオンセット特徴量x
(o)(t)である。
フレームtのBPM特徴量x(b)(t)は、次のようにして計算される。CPU12aは、まず、オンセット特徴量x(o)(0),x(o)(1)・・・をこの順にフィルタバンクFBB(図5参照)に入力する。フィルタバンクFBBは、拍周期bの値に応じてそれぞれ設けられた複数のコムフィルタCFbからなる。コムフィルタCFbは、1つのデータが入力される度に1つのデータを出力する。コムフィルタCFbは、過去の出力データを拍周期bの値に応じた個数だけ記憶するFIFO(=First In First Out)メモリを有しており、入力されたデータと前記記憶手段に記憶されているデータのうちの最古のデータを所定の比率(例えば、1:1(すなわち、λ=0.5))で加算して出力する。オンセット特徴量x(o)の系列x(o)(t){=x(o)(0),x(o)(1)・・・}をフィルタバンクFBBに入力することにより得られたデータxb (D)の系列xb (D)(t){=xb (D)(0),xb (D)(1)・・・の時系列を逆にして、フィルタバンクFBBに再度入力することにより、拍周期bに関するBPM特徴量の系列xb (b)(t){=xb (b)(0),xb (b)(1)・・・}が得られる。フレームtのBPM特徴量x(b)(t)は、拍周期bごとに計算されたBPM特徴量xb=1,2・・・ (b)(t)の集合として表わされる(図6参照)。
次に、CPU12aは、ステップS15にて、各フレームtの各特徴量の観測尤度を計算する。具体的には、CPU12aは、コード特徴量x(c)(t)の観測尤度L(c)(t)、オンセット特徴量x(o)(t)の観測尤度L(o)(t)及びBPM特徴量x(b)(t)の観測尤度L(b)(t)を計算する。
コード特徴量x
(c)(t)の観測尤度L
(c)(t)は下記の式(3)のように表わされる。
対数観測尤度Li (c)(t)は、トレブル特徴量HPCP(T)及びベース特徴量HPCP(B)のテンプレートTMPi (T)及びテンプレートTMPi (B)に対する適合度に相当する。テンプレートTMPi (T)及びテンプレートTMPi (B)は、コードiに対応する係数列である。例えば、「Cmaj」に対応する係数列TMPi=Cmaj (T)は、{1,0,0,0,1,0,0,1,0,0,0,0}と表わされる。また、「Cmin」に対応する係数列TMPi=Cmin (T)は、{1,0,0,1,0,0,0,1,0,0,0,0}と表わされる。なお、テンプレートTMPi (B)は、テンプレートTMPi (T)よりもルート音に対応する成分が強調されている。トレブル特徴量HPCP(T)と係数列TMPi (T)とのコサイン距離、及びベース特徴量HPCP(B)と係数列TMPi (B)とのコサイン距離の重み付け和が、対数観測尤度Li (c)(t)である。例えば、トレブル特徴量HPCP(T)と係数列TMPi (T)とのコサイン距離、及びベース特徴量HPCP(B)と係数列TMPi (B)とのコサイン距離の重み係数をそれぞれ「1.0」及び「1.0」に設定する。ベース音を重視する場合には、前記重み係数をそれぞれ「1.0」及び「2.0」に設定すればよい。なお、「zi (c)(t)」は、次に説明するような2値変数である。すなわち、この変数は、フレームtにおいて、コードが「i」である場合に「1」であり、それ以外の場合に「0」である。
オンセット特徴量x
(o)(t)及びBPM特徴量x
(b)(t)の観測尤度L
(o)(t)及び観測尤度L
(b)(t)は下記の式(4)及び式(5)のように表わされる。なお、式(4)及び式(5)における「:」は、その次元に関する総和を意味する(下記の式(6)参照)。
本実施形態においては、オンセット特徴量x(o)(t)は、次の拍点までのフレーム数nの値に応じて設定された正規分布に従うものとする。つまり、オンセット特徴量x(o)(t)の観測尤度L(o)(t)は、次の拍点までのフレーム数nの値に応じて設定された正規分布の確率変数としてオンセット特徴量x(o)(t)を代入することにより計算される。例えば、フレーム数nの値が「0」であるときは、平均値が「3」であって、且つ分散が「1」である正規分布が用いられる。また、フレーム数nの値が「0」でないとき、平均値が「0」であって、且つ分散が「1」である正規分布が用いられる。上記の両正規分布を規定する平均値及び分散が上記式(1)における「θ(o)」である。フレーム数nの値が「0」であるときの正規分布を規定するパラメータが式(4)における「θ0 (o)」である。フレーム数nの値が「0」でないときの正規分布を規定するパラメータが式(4)における「θ1 (o)」である。なお、「zs,n,b (o)(t)」は、次に説明するような2値変数である。すなわち、この変数は、フレームtにおいて、拍子位置が「s」であり、次の拍点までのフレーム数が「n」であって、かつ拍周期が「b」である場合に「1」であり、それ以外の場合に「0」である。
また、BPM特徴量x(b)(t)の観測尤度L(b)(t)は、拍周期bごとに設けられたテンプレートTMP(b)に対するBPM特徴量x(b)(t)の適合度に相当する。テンプレートTMP(b)は、BPM特徴量x(b)(t)を構成するBPM特徴量xb (b)(t)にそれぞれ乗算される係数ζb,γ{=1,2・・・}の系列からなる(図7参照)。テンプレートTMPbを構成する係数ζb,γのうち、インデックスγが拍周期bに等しい係数及び拍周期bの整数倍に等しい係数が極大となるように、テンプレートTMPbが設定されている。式(5)に示すように、テンプレートTMPbとBPM特徴量x(b)(t)の内積が、観測尤度L(b)(t)である。なお、この演算式における「μb」は、オンセット特徴量x(o)(t)に対するBPM特徴量x(b)(t)の重みを決定する係数である。つまり、「μb」を大きく設定するほど、結果的に、BPM特徴量x(b)(t)が重視される。また、この演算式におけるZ(μb)は、「μb」に依存する正規化係数である。なお、上記のテンプレートTMPbが上記式(1)における「θ(b)」に相当する。
さらに、CPU12aは、同ステップS15において、式(7)に示す、観測尤度L
(o,b)(t)を計算する。観測尤度L
(o,b)(t)は、観測尤度L
(o)(t)と観測尤度L
(b)(t)との積である
次に、CPU12aはステップS16〜ステップS27にて拍点、テンポ、小節線の位置及びコード進行の推定処理を実行する。ここで、コードの遷移(コード進行)のモデルZ
(c)は、下記の式(8)に示すように定義される。
式(8)における、「τi,j (c,0)」は、いずれか一方のフレームが拍点ではないフレーム間においてコードiからコードjへ遷移する確率を表わす。一方、「τi,j (c,s)」は、拍子位置sへの遷移が生起するフレーム間(つまり、遷移先のフレームに拍点が存在する場合)において、コードiからコードjへ遷移する確率を表わす。コードの遷移は拍点において生起する確率が高い。言い換えれば、拍点でないフレーム間においては、同一のコードに遷移する確率が高い。したがって、「τi,j=i (c,0)」は「τi,j≠i (c,0)」よりも大きい。
一般に、コード間の遷移確率は、拍点の拍子位置sに依存する。例えば、4分の4拍子の楽曲において、4拍目(つまりs=4)の和音が「G7」であるとき、次の小節の1拍目(つまりs=1)の和音は「C」である可能性が高い(ドミナントモーション)。また、コード間の遷移確率は、楽曲の調keyに依存する。例えば、コード「C」からコード「F」への遷移はハ長調の楽曲において生起する可能性が高い。そこで、予め種々の楽曲におけるコード間の遷移回数をカウントし、前記カウントしたコード間の遷移回数が、データベースとしてROM12bに記憶されている。データベースは、拍子ごとに構成されている。つまり、音響信号分析装置10は、例えば、4分の3拍子の楽曲を分析するときに用いるデータベース、4分の4拍子の楽曲を分析するときに用いるデータベース、8分の6拍子の楽曲を分析するときに用いるデータベースなどを備える。そして、各データベースには、コード間の遷移回数が、調key及び拍子位置sに関連づけて記憶されている。
また、拍点、テンポ及び拍子位置の遷移のモデルZ
(o)は、下記の式(9)に示すように表わされる。
式(9)における、「τs0,n0,b0,s1,n1,b1 (o)」は、拍子位置s0、フレーム数n0、且つ拍周期b0である状態から、拍子位置s1、フレーム数n1、且つ拍周期b1である状態へ遷移する確率を表わす。本実施形態では、フレーム数nの値が「0」でない状態(n0≠0)から次の状態へ遷移するとき、拍子位置s及び拍周期bの値は変更されず、フレーム数nの値が「1」だけ減少する。一方、フレーム数nの値が「0」である状態(n0=0)から次の状態へ遷移するとき、拍子位置s及び拍周期bの値は変更され得る。このとき、フレーム数nの値は、遷移後の拍周期bの値より「1」だけ小さい値に設定される。以下、拍子位置sの遷移確率を「τ(s)」と表記し、拍周期bの遷移確率を「τ(b)」と表記する。
また、各遷移確率の事前分布は下記の式(10)乃至(12)に示すように定義される。
各遷移確率は多項分布に従うので、本実施形態では、多項分布の共役事前分布であるディリクレ分布を採用した。式(10)における「νi,j (c)」は、上記のコード進行に関するデータベースに相当する。つまり、例えば、「νi,j (c)」は、「4分の4拍子の楽曲であって、且つハ長調の楽曲において、4拍目から1拍目への遷移するとき、「G7」から「Cmaj」への遷移がM回あった」という情報に相当する。また、式(11)における「νs0,s1 (s)」は、拍子位置s0から拍子位置s1へ遷移する度合いを設定するパラメータである。例えば、「ν1,2 (s)」、「ν2,3 (s)」、「ν3,4 (s)」及び「ν4,1 (s)」が「1」に近い値(例えば「0.99」)に設定され、その他の遷移に関するパラメータは充分に小さい値に設定される。また、式(12)における「νb0,b1 (b)」は、拍周期b0から拍周期b1へ遷移する度合いを設定するパラメータである。例えば、「νb0,b1 (b)」を、所定の係数ρ,ωを用いて表わされた関数ρ×exp(−ω(b0−b1)2)と設定することにより、テンポが急激に変化することを抑制できる。係数ρ及び係数ωは、例えば、「10.0」及び「5.0」にそれぞれ設定される。
モデルZ
(c)の変分事後分布q(Z
(c))は、下記の式(13)のように表わされる。なお、以降、「x」の分布が「p(x)」に従う場合の「f(x)」の期待値を「〈f(x)〉
p(x)」と表記する。ただし、標記が煩雑になるのを防止するため、「p(x)」を省略する場合もある。
式(13)における「〈logτ
i,j (c,0)〉」は、式(14)に示すように表される。ただし、「ψ(x)」は、digamma関数である。
また、ここで、下記の式(15)及び式(16)に示す量を定義しておく。式(15)は、モデルZ
(c)の各フレームの対数観測尤度に相当し、式(16)は、モデルZ
(c)の各状態間の対数遷移確率に相当する。
一方、モデルZ
(o)の変分事後分布q(Z
(o))は、下記の式(17)のように表わされる。
なお、式(17)における「ξ
i,j (c)(t)」は、下記の式(18)に示すように、フレームtへの遷移において、コードが「i」から「j」へ遷移した回数の期待値を意味する。
ここで、下記の式(19)及び式(20)に示す量を定義しておく。式(19)は、モデルZ
(o)の各フレームの対数観測尤度に相当し、式(20)は、モデルZ
(o)の各状態間の対数遷移確率に相当する。
なお、式(20)における「δ(n)」は、Kroneckerのデルタ関数である。
上記のように、変分事後分布q(Z(c))は、モデルZ(o)の期待値に依存し、変分事後分布q(Z(o))は、モデルZ(c)の期待値に依存している。したがって、変分事後分布q(Z(c))を更新した後、その期待値に依存する変分事後分布q(Z(o))を更新する必要があり、変分事後分布q(Z(o))を更新した後、その期待値に依存する変分事後分布q(Z(c))を更新する必要がある。このように、変分事後分布q(Z(c))及び変分事後分布q(Z(o))を交互に更新することにより、両変分事後分布を収束させる。
具体的には、まず、CPU12aは、ステップS16にて、推論対象をモデルZ
(c)に設定する。つぎに、CPU12aは、ステップS17にて、現在の推論対象のモデルがモデルZ
(c)か否かを判定する。現在の推論対象のモデルがモデルZ
(c)である場合には、CPU12aは「Yes」と判定して、ステップS18にて、式(15)及び式(16)に基づいて、対数観測尤度O
i (c)(t)及び対数遷移確率T
i,j (c)(t)を計算する。つぎに、CPU12aは、ステップS19にて、前向き後ろ向きアルゴリズムを用いて、前向き変数α
i (c)(t)及び後ろ向き変数β
i (c)(t)を計算する。具体的には、CPU12aは、下記の式(21)及び式(22)に基づいて、前向き変数α
i (c)(t)及び後ろ向き変数β
i (c)(t)を計算する。なお、式(21)における「N
i (c)(t)」は、式(23)に示すような正規化係数である。
次に、CPU12aは、ステップS20にて、下記の式(24)に基づいて、各フレームtのモデルZ
(c)の期待値を計算する。
また、CPU12aは、同ステップS20にて、下記の式(25)に基づいて、フレームtにおいてコードiからコードjに遷移した回数の期待値を計算する。
次に、CPU12aは、ステップS21にて、変分事後分布q(Z(o))及び変分事後分布q(Z(c))が収束したか否かを判定する。変分事後分布q(Z(o))及び変分事後分布q(Z(c))のうち少なくとも一方が収束していない場合には、CPU12aは「No」と判定して、ステップS22にて、推論対象を切り替え、ステップS17に処理を進める。すなわち、ステップS22において、現在の推論対象がモデルZ(c)である場合には、CPU12aは、推論対象をモデルZ(o)に設定する。一方、ステップS22において、現在の推論対象がモデルZ(o)である場合には、CPU12aは、推論対象をモデルZ(c)に設定する。
ステップS17において、推論対象がモデルZ
(o)である場合には、CPU12aは「No」と判定して、ステップS23にて、式(19)及び式(20)に基づいて、対数観測尤度O
s,n,b (o)(t)」及び対数遷移確率T
s0,n0,b0s1,n1,b1 (o)(t)を計算する。つぎに、CPU12aは、ステップS24にて、前向き後ろ向きアルゴリズムを用いて、前向き変数α
s,n,b (o)(t)及び後ろ向き変数β
s,n,b (o)(t)を計算する。具体的には、CPU12aは、下記の式(26)及び式(27)に基づいて、前向き変数α
s,n,b (o)(t)及び後ろ向き変数β
s,n,b (o)(t)を計算する。なお、式(26)における「N
s,n,b (o)(t)」は、式(28)に示すような正規化係数である。
次に、CPU12aは、ステップS25にて、下記の式(29)に基づいて、各フレームtのモデルZ
(o)の期待値を計算し、ステップS21に処理を進める。
ステップS21において、変分事後分布q(Z(o))及び変分事後分布q(Z(c))のいずれもが収束した場合には、CPU12aは「Yes」と判定して、ステップS26にて、各フレームtにおけるモデルZ(o)及びモデルZ(c)の期待値がそれぞれ最大になる系列を選択することにより、分析対象の楽曲における拍点、テンポ、小節線の位置及びコード進行を推定する。CPU12aは、前記推定結果を例えば図8に示すような形式で表示する。そして、CPU12aは、ステップS27にて、音響信号分析処理を終了する。
音響信号分析装置10においては、モデルZ(c)の各状態間の遷移確率τi、j (c)が、拍子位置sに関連して設定されている。そして、モデルZ(c)の事後分布と、モデルZ(o)の事後分布とが、同時(一体的)に計算される。モデルZ(c)とモデルZ(o)とは、拍子位置sに関して互いに依存しており、この両モデルの事後分布を同時(一体的)に計算することにより、楽曲における拍点、テンポ、拍子位置、及びコードに関する情報が精度良く得られる。言い換えれば、一方のモデルの推定結果が他方のモデルの推定結果にフィードバックされて推定結果が更新される(S16〜S26)。これにより、両モデルの推定精度が高められる。したがって、音響信号分析装置10によれば、拍点、テンポ、小節線の位置及びコード進行の推定精度を従来よりも向上させることができる。
さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
例えば、上記実施形態では、楽曲全体を分析対象としているが、楽曲の一部(例えば数小節)のみを分析対象としてもよい。この場合、入力した楽曲データのうち、分析対象とする部分を選択可能に構成するとよい。また、楽曲のうちの単一のパート(例えばリズムセクション)のみを分析対象としてもよい。
また、上記実施形態では、楽曲の調が既知であると仮定しているが、楽曲の調も、拍点、テンポ、小節線の位置及びコード進行と同時に推定しても良い。例えば、コードの遷移確率τ(c)を24個のブロックから構成されるブロック対角行列とし,各ブロックにそれぞれの調におけるコード進行のデータを対応させるとよい。具体的には、コードの種類を4つとすると、ブロック対角行列は、96×96(96=4(コードの種類)×12×2(12個の調のルート×(長調または短調)))の要素を有する。ブロック対角行列の要素(1,1)から要素(4,4)は、調が「Cmaj」である場合のコードの遷移を表わす。要素(5,5)から要素(8,8)は、調が「Cmin」である場合のコードの遷移を表わす。要素(9,9)から要素(12,12)は、調が「C#maj」である場合のコードの遷移を表わす。要素(13,13)から要素(16,16)は、調が「C#min」である場合のコードの遷移を表わす。他の要素についても、上記の要素と同様に設定することで、すべての調のコード進行データを網羅できる。この場合、ブロックをまたがるような遷移は許されないので、単一の調におけるコード進行を推定することに相当する。
また、例えば、ユーザによって指定されたフレームの拍点、テンポ、拍子位置、及びコードのいずれか又は複数の要素を修正可能に構成しても良い。この場合、ユーザが入力操作子11を用いて修正値を入力すると、CPU12aは、前記指定されたフレームの各種要素の値を前記入力された値に修正するとともに、そのフレームに近接するフレームの各種要素を前記入力された値に応じて自動的に修正するように構成するとよい。例えば、連続する複数のフレームのテンポの推定値が同じ値であって、そのうちの1つのフレームのテンポの値が修正されたとき、前記複数のフレームのテンポの値を前記1つのフレームの修正値と同じ値に自動的に修正してもよい。
また、例えば、コード進行の推定において、優先的に推定するコードを指定可能に構成してもよい。例えば、メジャーコードを優先的に推定するように設定可能に構成してもよい。この場合、メジャーコード以外の対数観測尤度を十分に小さく設定する。これにより、メジャーコードが優先的に推定される。これによれば、楽曲の大凡のコードが既知である場合、コードの推定精度を向上させることができる。
また、例えば、テンポの推定において、優先的に推定するテンポの範囲を指定可能に構成してもよい。具体的には、「Presto」、「Moderato」などのテンポを表わす用語を表示して、優先的に推定するテンポの範囲を選択可能に構成してもよい。例えば、「Presto」が選択された場合、BPM=160〜190の範囲以外の対数観測尤度を十分に小さく設定する。これにより、BPM=160〜190の範囲のテンポが優先的に推定される。これによれば、楽曲の大凡のテンポが既知である場合、テンポの推定精度を向上させることができる。