以下、添付の図面を参照し、本発明の一実施形態に係る音声信号処理装置、音声信号処理装置の制御方法、プログラムについて説明する。本発明は、楽曲中の特定の楽器のスペクトログラム形状を推定し、その楽器音を分離(抽出)するものである。そこで、本実施形態では、3種類の打楽器(バスドラム、スネアドラム、ハイハット)のスペクトログラム形状を推定し、それら3つの打楽器音を分離する場合について例示する。
図1は、本発明の一実施形態に係る音声信号処理装置1の機能構成を示すブロック図である。音声信号処理装置1は、主な機能構成として、FFT(Fast Fourier Transform)部11、継続音除去部12、帯域分割部13、詳細判別用音加工部14、詳細判別部15、ベロシティ特定部16、グルーヴ判定部17および打楽器音分離部18を備えている。なお、音声信号処理装置1は、専用装置であっても良いし、DJ機器(DJプレーヤー、DJミキサーなど)、オーディオ機器(CDプレーヤー、DVDプレーヤーなど)、音声編集機器、パーソナルコンピューター、タブレット端末、エフェクター、録音機器、放送機器など、各種電子機器の一部であっても良い。
FFT部11は、入力音(wavファイルなど、任意の楽曲の音声信号)を周波数フーリエ変換することにより、解析データ(振幅スペクトル情報)を生成する。ここでは、FFTサイズを2048サンプル、オーバーラップ数を4回としている。この場合、1フレーム(FFTの処理間隔)は、512サンプルとなる。
継続音除去部12は、周波数フーリエ変換により得られた振幅スペクトル情報に基づいて、所定時間以上継続している継続音成分を抽出し、入力された音声信号から除去する。この処理により、各打楽器のスペクトログラム形状を特定する際の誤差要因となる「打楽器ではない成分」を取り除くことができる。なお、特に図示しないが、継続音除去部12の処理後、IFFT(Inverse FFT)を行って一旦時間軸に戻した後、再度FFTを行っている。具体的には、FFTサイズを512サンプル、1フレームを、128サンプルとしている。このように、FFTサイズを変更してから打楽器音分離部18にデータ(継続音除去音源)を供給することにより、アタック感を再現することができる。
帯域分割部13は、各打楽器の周波数帯域を分割する。例えば、バスドラム「40〜300Hz」、スネアドラム「600〜3000Hz」、ハイハット「6000Hz〜16000Hz」のように、各打楽器に対応する周波数範囲を限定する。
詳細判別用音加工部14は、外部から発音位置情報を取得し、入力された音声信号に対して、打楽器のみの成分となるような加工を施す。この処理により、後段の詳細判別部15の判別正答率を上げることができる。なお、発音位置情報とは、楽曲の拍位置解析結果を元に生成される情報であり、楽曲に含まれる各打楽器の発音位置を示す情報(バスドラム、スネアドラム、ハイハットがそれぞれどの位置で鳴っているのかを示す情報)である。本実施形態では、不図示の外部装置において、既に解析済みであるものとする。
詳細判別部15は、取得した発音位置情報に基づいて、所定の発音区間(本実施形態では、楽曲の8小節)に存在する複数個の周波数スペクトログラムを、同じ打楽器種類且つ同じ鳴り方をしていることを条件としてグルーピングする。この処理により、後述する打楽器音分離部18における同期処理の精度を上げることができる。
なお、詳細判別部15は、取得した発音位置情報から、所定の発音区間に、任意のスペクトログラム(第1スペクトログラム)と同じ打楽器の周波数スペクトログラムが複数存在することが分かっている場合、当該複数の周波数スペクトログラムの、任意のスペクトログラムに対する相関値の平均値を算出し、当該平均値を超える相関値の周波数スペクトログラムを、任意のスペクトログラムと同じグループとして分類する(同じ打楽器種類且つ同じ鳴り方をしていると判定する)。詳細については、後述する。
ベロシティ特定部16は、取得した発音位置情報に基づいて、所定の発音区間における各打楽器のベロシティ情報を特定する。当該処理も、後述する打楽器音分離部18における同期処理の精度を上げるために行われる。
グルーヴ判定部17は、ベロシティ特定部16により特定された所定の発音区間における各打楽器のベロシティ情報と、取得した発音位置情報に基づいて、所定の発音区間における楽曲のグルーヴを判定する。また、その判定結果を、グルーヴ情報として出力する。なお、ベロシティ情報とは、1小節を等分割した単位時間(例えば、16分音符単位)ごとのベロシティの値を指す。詳細については後述するが、所定の発音区間(8小節)に含まれる全ての小節に共通して、単位時間(単位時間1/16〜16/16)ごとのベロシティが特定される。
打楽器音分離部18は、上記の継続音除去部12で得られた継続音除去音源を用い、詳細判別部15およびベロシティ特定部16で得られた詳細判別情報(グルーピング情報およびベロシティ情報)に基づいて、各打楽器のスペクトログラム形状を推定し、各打楽器音を分離する。また、スペクトログラム形状の推定結果を、スペクトログラム情報(バスドラム振幅情報、スネアドラム振幅情報、ハイハット振幅情報)として出力する。なお、図面では、バスドラムを「BD」、スネアドラムを「SD」、ハイハットを「HH」と略記する。
次に、図2ないし図4を参照し、詳細判別用音加工部14、ベロシティ特定部16および打楽器音分離部18の詳細な機能構成について説明する。図2は、詳細判別用音加工部14の詳細ブロック図である。詳細判別用音加工部14は、バスドラム加工部21、スネアドラム加工部22およびハイハット加工部23を含む。バスドラム加工部21は、ベース音などを排除し、バスドラム音を抽出するための加工を施す。スネアドラム加工部22は、人間の声やピアノの伴奏などを排除し、スネアドラム音を抽出するための加工を施す。ハイハット加工部23は、抽出対象のハイハット音に被っている他のハイハット音などを排除するための加工を施す。
ここで、バスドラム加工部21について、さらに詳細に説明する。バスドラム加工部21は、発音位置情報取得部21a、検索区間特定部21b、鳴り終わり判定部21c、抽出部21d、第1加工部21eおよび第2加工部21fを含む。
発音位置情報取得部21aは、外部から、任意の楽曲に含まれる任意の楽器(バスドラム、スネアドラム、ハイハット)の発音位置を示す発音位置情報を取得する。検索区間特定部21bは、取得した発音位置情報に基づき、バスドラムの発音区間を検索するための検索区間を特定する。本実施形態では、バスドラムのアタック位置を基準とした前後所定時間から成る区間を検索区間として特定する。
鳴り終わり判定部21cは、特定した検索区間内においてバスドラムの鳴り終わりを判定する。本実施形態では「平均値終了点判定法」と「新規アタック判定法」の2つの判定法を用いて鳴り終わりを判定する。前者は、検索区間において、複数フレーム分の移動平均値が、アタック位置付近の平均値である変動閾値よりも連続して下回った時点を鳴り終わりとして判定する方法である。また、後者は、判定対象となるバスドラムとは別の音が発音された場合、当該別の音が発音された時点を鳴り終わりとして判定する方法である。
抽出部21dは、鳴り終わり判定部21cにより鳴り終わりが判定されなかった場合(鳴り終わらなかった場合)、検索区間の所定位置における振幅値(以下、「振幅データ」とも称する)を抽出する。本実施形態では、検索区間の最後のフレームの振幅値を抽出するものとする。
第1加工部21eは、鳴り終わり判定部21cにより鳴り終わりが判定されなかった場合、検索区間に含まれる音声データを、抽出部21dで抽出された振幅値に基づいて加工する。本実施形態では、検索区間に含まれる全フレームから、抽出部21dで抽出された振幅値を減算する。これにより、バスドラム音とベース音が重複している場合、ベース音を排除し、バスドラム音のみを抽出することができる。一方、第2加工部21fは、鳴り終わり判定部21cにより鳴り終わりが判定された場合(鳴り終わった場合)、検索区間における当該鳴り終わり以降の振幅値をゼロにする。これにより、鳴り終わり以降の不要な音を排除することができる。
なお、詳細については後述するが、スネアドラム加工部22およびハイハット加工部23においても、バスドラム加工部21における発音位置情報取得部21a、検索区間特定部21b、抽出部21dおよび第1加工部21eと略同様の処理を行う。また、変形例として、スネアドラム加工部22およびハイハット加工部23においても、鳴り終わり判定部21cおよび第2加工部21fを含む構成としても良い。つまり、スネアドラムおよびハイハットについて検索区間内における鳴り終わりを判定し、鳴り終わり以降の振幅値をゼロにする処理を行っても良い。
続いて、図3は、ベロシティ特定部16の詳細ブロック図である。ベロシティ特定部16は、ベロシティ検出部31およびベロシティ算出部32を含む。なお、ベロシティ特定部16の各部は、打楽器ごとに処理される。
ベロシティ検出部31は、所定の発音区間内の一部区間を対象として、各打楽器のベロシティを検出する。例えば、バスドラムの場合、楽曲の8小節のうち、取得した発音位置情報から得られる2番目の発音位置から最後の発音位置までの区間を対象とする。また、スネアドラムおよびハイハットの場合、楽曲の8小節のうち、3小節目から6小節目までの区間を対象とする。そして、いずれの打楽器についても、各小節をN個(本実施形態では、16個)に等分割した単位時間ごとに各打楽器のベロシティを検出する。また、ベロシティ検出部31は、打楽器ごとに定められた周波数範囲の、打楽器ごとに定められた発音継続区間における振幅値の合計を振幅強度としたとき、所定の発音区間の中で最も大きな振幅強度で正規化した値を、対応する打楽器のベロシティとして検出する。
ベロシティ算出部32は、ベロシティ検出部31の検出結果を用いて、所定の発音区間内の上記一部区間を除いた区間における各打楽器のベロシティを算出する。具体的には、上記一部区間に含まれる各小節内の、それぞれ1番目から16番目までの各単位時間の平均値を、各打楽器のベロシティとして算出する。
続いて、図4は、打楽器音分離部18の詳細ブロック図である。打楽器音分離部18は、第1特定部41、第2特定部42、同期減算部43、同期加算部44、再アタック検出部45、鳴り終わり判定部46、音源生成部47および音源分離部48を含む。なお、打楽器音分離部18の各部も、打楽器ごとに処理される。
第1特定部41は、継続音除去部12により、入力された音声信号から継続音成分が除去された後、所定の発音区間から、任意の打楽器の周波数スペクトログラムである第1スペクトログラムを特定する。第2特定部42は、所定の発音区間から、第1スペクトログラムとの相関値に基づいて、任意の打楽器と同じグループに属する1以上の周波数スペクトログラムの中から、第1スペクトログラムと同一楽器の周波数スペクトログラムである第2スペクトログラムを特定する。ここで、特定候補となる周波数スペクトログラムが複数存在する場合は、第1スペクトログラムと最も相関値が高い周波数スペクトログラムを特定する。
同期減算部43は、特定された第1スペクトログラムと第2スペクトログラムの共通成分を抽出する。このとき、同期減算部43は、ベロシティ特定部16により特定された打楽器ごとのベロシティに基づいて、第1スペクトログラムと第2スペクトログラムの振幅値を揃えた後、共通成分を抽出する。同期加算部44は、所定の発音区間に、任意の打楽器の周波数スペクトログラムがL個(但し、Lは、L≧2となる整数)存在する場合、同期減算部43により抽出されたL個の共通成分を平均化して、共通スペクトログラムを算出する。
再アタック検出部45は、同期減算部43および同期加算部44による同期処理結果を用いてアタック検出を行う。この処理により、バスドラムやハイハットに対しスネアドラムのみ前倒しで発音されている場合も、正確にアタック位置を検出することができる。鳴り終わり判定部46は、任意の打楽器の鳴り終わりを判定し、任意の打楽器と同じ周波数帯域の他の成分を除去する。この処理より、同期処理によって除去できなかった打楽器以外の成分を除去することができ、打楽器らしい音に加工することができる。
音源生成部47は、所定の発音区間に存在する、各打楽器のL個の周波数スペクトログラムを、同期加算部44により算出された共通スペクトログラムに置き換え、且つ再アタック検出部45および鳴り終わり判定部46による処理結果に基づいて加工された同期処理済み音源を生成する。また、音源分離部48は、入力音(任意の楽曲)から、音源生成部47により生成された各打楽器の同期処理済み音源を分離する。なお、打楽器音分離部18によって実行される楽器音分離処理は、別の打楽器と同時に発音されているハイハット(以下、「複合ハイハット」と称する)、バスドラム、スネアドラム、単独で発音されているハイハット(以下、「単独ハイハット」と称する)の順に実行される。
次に、図5以降を参照し、上記の各部について具定例を挙げてさらに説明する。まず、図5〜図11を参照し、継続音除去部12による継続音除去処理について説明する。継続音除去処理は、上記のとおり「打楽器ではない成分」を取り除く処理である。図5は、音声信号処理装置1による継続音除去処理の流れを示すフローチャートである。
継続音除去処理では、FFTにより得られた振幅スペクトル情報から極小点および極大点を検出し(S11,S12)、これらの結果から極大点の突出度合いを判定する(S13)。また、その判定結果に基づいて継続カウンタの更新を行い(S14)、継続音を確定する(S15)。また、確定した継続音の中から継続音範囲を検出し(S16)、検出された継続音範囲に基づいて、誤検出された継続音を修正する(S17)。その後、原音から継続音の振幅を除去し(S18)、継続音除去処理を終了する。
図6は、極小点検出処理(図5のS11参照)の流れを示すフローチャートである。極小点検出処理では、周波数bin「0」を開始値とし、FFTサイズの半分を対象として処理を開始する(S21)。まず、対象となる周波数bin(同図、符号P1参照)の振幅値を中心として、両隣のbinの振幅値との傾きを求める(S22)。ここで、対象となる周波数binが極小である場合(両隣のbinに対する傾きが所定値以上である場合)は(S23:Yes)、極小点の周波数binとして記録する(S24)。また、対象となる周波数binが極小でない場合は(S23:No)、S24を省略する。その後、対象となる周波数binを順次インクリメントしながら、S21〜S24を繰り返す(S25)。
図7は、極大点検出処理(図5のS12参照)の流れを示すフローチャートである。極大点検出処理でも、周波数bin「0」を開始値とし、FFTサイズの半分を対象として処理を開始する(S31)。まず、対象となる周波数bin(同図、符号P2参照)の振幅値を中心として、両隣のbinの振幅値との傾きを求める(S32)。ここで、対象となる周波数binが極大である場合(両隣のbinに対する傾きが所定値以下である場合)は(S33:Yes)、極大点の周波数binとして記録する(S34)。また、対象となる周波数binが極大でない場合は(S33:No)、S34を省略する。その後、対象となる周波数binを順次インクリメントしながら、S31〜S34を繰り返す(S35)。
図8は、極大点の突出度合い判定処理(図5のS13参照)の流れを示すフローチャートである。この処理は、ノイズ成分による極大点を排除するために行われる。例えば、ホワイトノイズなどが入力されると、高域で無数の小さな極大点が発生することがある。そのため、極大点の突出度合い判定処理により、そのようなノイズ成分と、検出したい声や楽器などの極大点を区別し、周りの周波数の振幅値よりもある程度突出した極大点を残す。
突出度合い判定処理でも、周波数bin「0」を開始値とし、FFTサイズの半分を対象として処理を開始する(S41)。まず、対象となる極大点の周波数bin(同図、符号P5参照)について、両隣の極小点の振幅値(極小値,同図、符号P3およびP4)で線形補完した値(補完値,同図、符号L11参照)を求める(S42)。線形補完した値が大きい場合(補完値が所定値以上である場合)は(S43:Yes)、極大点の周波数binとして記録する(S44)。また、線形補完した値が小さい場合は(S44:No)、S44を省略する。その後、対象となる周波数binを順次インクリメントしながら、S41〜S44を繰り返す(S45)。
図9は、継続カウンタ更新処理の説明図である。この処理では、突出度合い判定処理により記録された極大点に基づいて、どの位の時間継続している音であるかを示すカウンタを更新する。具体的には、前回のフレームで極大点が同じ周波数binに存在していた、または両隣の周波数binに存在していた場合、継続中と判定し、カウンタをインクリメントする。同図の例の場合、矢印で示される0フレーム目から4フレーム目までの極大点は、継続している音としてカウントされ、5フレーム継続した音であると判定する。また、6フレーム目に存在する極大点(同図、符号P6参照)については、極大点の継続が途切れたため、新しい音としてカウントする。
図10は、継続音範囲検出処理(図5のS16参照)の流れを示すフローチャートである。この処理は、確定した継続音のうち、各フレームで最も周波数が高い周波数binを集計し、8小節内の中央値に基づいて継続音範囲を検出する処理である。
継続音範囲検出処理では、フレーム「0」を開始値とし、8小節分のフレームを対象として処理を開始する(S51)。まず、その中で最も周波数が高い周波数binを集計し(S52)、予め定められた検索範囲(例えば、0Hz〜4000Hz)を逸脱しているか否かを判別する(S53)。検索範囲を逸脱している場合は(S53:Yes)、逸脱回数を記録する(S54)。その後、対象となる周波数フレームを順次インクリメントしながら、S51〜S54を繰り返す(S55)。その後、集計した最も高い周波数の中央値を算出し、0Hz〜中央値までを継続音範囲として確定する(S56)。さらに、検索範囲を逸脱した回数(時間)が8小節中の半分以上の場合、音が詰まっていることを意味するため、サビフラグを立てる(S57)。当該サビフラグは、後述する打楽器音分離処理の鳴り終わり判定などに用いる。
図11は、継続音修正処理(図5のS17参照)の説明図である。この処理は、継続音範囲の2倍以上に存在する継続音は、オープンハイハットなどの「打楽器ではあるが、継続している音」の誤検出であるとの想定の下、継続音を修正する。例えば、同図(a)に示すように、判定した継続音範囲の2倍の周波数を超える継続音成分を誤検出とみなし、同図(b)に示すように、誤検出性分を除去する。
次に、図12〜図15を参照し、詳細判別用音加工部14による詳細判別用音加工処理について説明する。詳細判別用音加工処理は、上記のとおり、詳細判別処理の前処理として、打楽器のみの成分を生成する処理である。図12および図13は、バスドラム加工処理の説明図である。なお、両図において、符号taは、バスドラムのアタック位置(発音位置)、符号teは、バスドラムの鳴り終わり位置、符号t1は、打楽器の鳴り終わりを検索するための検索区間の開始位置、符号t2は、検索区間の終了位置を示している。本実施形態において、検索区間の開始点および終了点は、各打楽器のアタック位置から予め定められた所定時間前および所定時間後(例えば、数十ms〜数百ms前後)の時点として規定している。なお、この前後所定時間は、打楽器ごとに異なる時間であっても良い。
バスドラムの詳細判別処理は、低域のみで判別を行うため、低域の振幅情報に対して加工を施す。また、バスドラムの場合は、ベースの成分を極力取り除きたいため、バスドラムの鳴り終わりを反映した加工を行う。図12(a)は、平均値終了判定法の説明図である。この方法では、比較的時定数の大きいLPF(Low-pass filter)からアタック位置付近の低域の音量の平均値を算出し、変動閾値とする。そして、複数フレーム(例えば、4フレーム)分の移動平均を取り、変動閾値よりも移動平均値の方が連続して下回った時点(同図、te参照)を、鳴り終わりとして判定する。なお、複数フレーム分の移動平均を取るのは、FFTサイズが小さいと、周波数分解能が低く、低域の波形が乱れるためである(FFTサイズを大きくすることで、その乱れを低減できる)。また、変動閾値を用いて判定を行うのは、ベース音と誤検出することなく、バスドラム低域区間を正確に検出するためである。さらに、連続して下回ったことを条件とするのは、複数フレーム分の平均値を取ることで波形乱れを抑制しても、波形乱れを抑制しきれない場合、一瞬閾値を下回ることがあるので、そのような場合の誤判定を避けるためである。
一方、同図(b)は、新規アタック判定法の説明図である。この方法では、新しい何らかの音が発生したとき(同図、te参照)、鳴り終わりと判定する。例えば、同図に示すように、バスドラムが鳴り終わる前に次のバスドラムが鳴ってしまった場合などが考えられる。
図12(a)の平均値終了判定法、または同図(b)の新規アタック判定法により鳴り終わりが判定された場合は、同図(c)に示すように、鳴り終わり以降(te〜t2の範囲)の振幅を「0」にする。また、図13(a)に示すように、検索区間(t1〜t2の範囲)において、平均値終了判定法および新規アタック判定法のいずれの方法でも鳴り終わりが判定されなかった場合は、同図(b)に示すように、検索区間の最後のフレームの振幅データ(同図、符号51a参照)を検索区間に含まれる音声データから減算する。同図(c)は、その減算結果を示したものである。このように、ベース音が減衰していない場合、検索区間の最後のフレームの振幅データを減算することにより、ベース音の影響をなくすことができる。
なお、減算する区間(第1加工部21eの対象となる区間)は、検索区間のみに限らず、検索区間に前後所定時間を加えた区間としても良い。また、検索区間に関係なく、アタック位置を基準として減算する区間を規定しても良い。また、鳴り終わりが判定された場合の減算する区間(第2加工部21fの対象となる区間)も、検索区間の最後までではなく、検索区間の終了後も含めた区間としても良い。
図14は、スネアドラム加工処理の説明図である。同図において、符号taは、スネアドラムのアタック位置、符号t1および符号t2は、検索区間の開始位置および終了位置を示している。また、符号t3は、検索区間の終了位置から所定時間前の時点(スネアドラムのアタック位置から所定時間後の時点)であって、抽出部21d(図2参照)の抽出対象位置を示している。
スネアドラムの帯域では、主に声やピアノなどの伴奏が詳細判別の判別結果に影響を及ぼす。そこで、検索区間の終了位置から所定時間前(同図、t3参照)の振幅データ(同図、符号52参照)、すなわちスネアドラムのアタック位置(同図、ta参照)から数十ms進んだ時間(同図、t3参照)の振幅データを減算することで、これらの影響を軽減する。つまり、同図(a)に示すように、スネアドラムと重複して、声などのスネアドラム以外の音が鳴っている場合、同図(b)に示すように、時間t3のフレームの振幅データを検索区間内の全フレームから減算する。同図(c)は、その減算結果を示したものである。このように、スネアドラム以外の音が同じ音程で鳴り続けている場合、アタック位置から所定時間経過後の振幅データを減算することにより、その影響を軽減できる。
図15は、ハイハット加工処理の説明図である。同図において、符号taは、ハイハットのアタック位置、符号t1および符号t2は、検索区間の開始位置および終了位置を示している。また、符号t4は、検索区間の開始位置から所定時間後の時点(ハイハットのアタック位置から所定時間前の時点)であって、抽出部21d(図2参照)の抽出対象位置を示している。ハイハットの場合、前のハイハットが鳴り終わる前に次のハイハットが鳴るケースが多い。しかも、バスドラムやスネアドラムと異なり、別の種類のハイハットがなる可能性が高い。このため、発音が強制停止されて新しい音が発音されるのではなく、前のハイハット音が新しく発生したハイハット音に覆いかぶってしまい、詳細判別に悪影響を及ぼす。これを解消すべく、過去の振幅を減算する。つまり、同図(a)に示すように、オープンハイハットが鳴り終わる前にハイハットが鳴っている場合、同図(b)に示すように、ハイハットのアタック位置(同図、ta参照)から数十ms溯った時間(同図、t4参照)の振幅データ(同図、符号53参照)を全フレームから減算する。同図(c)は、その減算結果を示したものである。このように、オープンハイハットが鳴り終わる前にハイハットが鳴っている場合でも、ハイハットのアタックから所定時間前の振幅データを減算することにより、オープンハイハットの影響を軽減できる。
なお、図14に示したスネアドラム加工処理と、図15に示したハイハット加工処理では、必ずしも検索区間を特定する必要はない。つまり、スネアドラム加工部22およびハイハット加工部23においては、バスドラム加工部21における検索区間特定部21bを省略した構成としても良い。この場合、減算する区間は、アタック位置から前後所定時間として規定すれば良い。
次に、図16〜図18を参照し、詳細判別部15による詳細判別処理について説明する。詳細判別処理は、上記のとおり、打楽器音分離処理において必要となる「同じ種類(ハイハットとオープンハイハットは異なる種類とする)、または同じ打楽器の重ね合わせの箇所」の情報を得るために行う。具体的には、同じ打楽器種類且つ同じ鳴り方をしていることを条件としてグループ分けを行う。
図16は、音声信号処理装置1による詳細判別処理の流れを示すフローチャートである。詳細判別処理では、打楽器ごとに判別を行う(S61)・また、8小節内のアタック「0」を初期値とし、全アタックを対象として処理を行う(S62)。まず、検出したアタックが、対象の打楽器であるか否かを判別し(S63)、対象の打楽器である場合は(S63:Yes)、同種の打楽器について相関値を算出する(S64)。その結果、相関値が閾値を超えるアタックは同じグループとみなす(S65)。その後、対象となるアタックを順次インクリメントしながら、S62〜S65を繰り返す(S66)。さらに、S61〜S66を、各打楽器について繰り返す(S67)。
図17は、詳細判別処理の説明図である。同図に示すように、同じ打楽器種類且つ同じ鳴り方をしていることを調べる特徴量として、同じ打楽器同士の周波数スペクトログラムの相関値を用いる。ここでは、発音位置情報に基づいて、元々同じ打楽器同士で照合するため、基本的には高い相関値が得られるはずである。例えば、8小節の中に、同図(a)に示すように複数の周波数スペクトログラムが含まれている場合、相関をとる元となる任意の周波数スペクトログラムを決定する(同図、符号52参照,同図の例ではハイハット)。続いて、同図(b)に示すように、8小節の中に含まれるハイハットの周波数スペクトログラム全てについて、任意の周波数スペクトログラムとの相関値を求める。その結果、同図(c)に示すように、相関値が低いハイハット(オープンハイハット)を除く3つの周波数スペクトログラムが、任意の周波数スペクトログラムと同じグループ(同図の例ではHHグループ1)と判定する。グループ分けに用いられる閾値(グルーピング閾値)については、後述する。その後、グループ番号が付いていない打楽器の周波数スペクトログラムについて、同じ処理を繰り返し、全ての周波数スペクトログラムにグループ番号がついたところで、詳細判別処理を終了する。当該グループ番号は、グルーピング情報として打楽器音分離部18に出力される。
図18は、グルーピング閾値の説明図である。同じ鳴り方をしていることを判定するグルーピング閾値は、計算式「閾値=1−(相関値の最大値−相関値の平均値)×0.5」によって求める。つまり、相関値の最大値と相関値の平均値の中央値がグルーピング閾値となる。同図の例は、任意の打楽器について、8小節の中に9個の周波数スペクトログラムが存在し、その中の1の元スペクトログラムとの相関値の算出結果を示したものである。このように、グルーピング閾値を変動閾値としたことで、楽曲によらず、より正確なグループ分けを行うことができる。なお、グルーピング閾値は、打楽器ごとに決定する。
次に、図19〜図21を参照し、ベロシティ特定部16によるベロシティ特定処理について説明する。ベロシティ特定処理は、後述する打楽器音分離処理において、振幅の割合が異なる周波数スペクトログラム間で同期処理を行うと、振幅の小さい方に周波数スペクトログラムが収束してしまうため、振幅同士の強度の割合(ベロシティ情報)を得るために行う。
図19は、音声信号処理装置1によるベロシティ特定処理の流れを示すフローチャートである。ベロシティ特定処理では、打楽器ごとに判別を行う(S71)。まず、対象の打楽器について、ベロシティの検出範囲を算出する(S72)。その検出範囲内で振幅強度を検出し(S73)、振幅強度をベロシティへ変換する(S74,ベロシティ検出部31)。その後、S74で得られた情報に基づいて、検出範囲外のベロシティを算出する(S75,ベロシティ算出部32)。以降、S71〜S75を、各打楽器について繰り返す(S76)。
図20は、ベロシティ検出処理の説明図である。同図に示すように、S72で算出する検出範囲について、スネアドラムとハイハットは、3小節目〜6小節目までと算出される。これは、8小節の最初にシンバルなどが入ったり、8小節の最後にフィルインなどの不規則なリズムパターンや効果音が入ることが多いためである。また、バスドラムは、8小節内における2つ目のアタック位置〜最後のアタック位置までと算出される。これは、バスドラムの場合、1つ目のアタックだけ極端に振幅が大きい場合があるためである。
また、S73で検出する振幅強度は、各打楽器のアタック位置からの対象区間内で、所定の周波数範囲に存在する振幅値の合計を振幅強度として検出する。対象区間は、打楽器ごとに定めている(数十ms〜数百ms)。また、周波数範囲は、帯域分割部13による帯域分割と同様に、バスドラム「40〜300Hz」、スネアドラム「600〜3000Hz」、ハイハット「6000Hz〜16000Hz」と定めている。
また、S74のベロシティへの変換は、8小節内において、算出した振幅強度の中で一番大きな振幅強度で正規化した0〜1の値をベロシティとする。なお、この正規化は、詳細判別処理で判別した同じグループ内の(同じ打楽器種類且つ同じ鳴り方をしている)周波数スペクトログラム同士で行う。
図21は、ベロシティ算出処理の説明図である。S75のベロシティの算出は、グループごとに、検出範囲で検出されたベロシティ情報に基づいて、検出範囲外のベロシティを補完するものである。同図の例は、3小節目〜6小節目までを検出範囲とするスネアドラムとハイハットの場合の補完方法を示している。同図に示すように、検出範囲のベロシティは、16分音符単位で算出する。また、検出範囲に含まれる4小節(3小節目〜6小節目)について、グループごと且つ単位時間(1/16〜16/16)ごとにベロシティを平均化する。また、その平均化した値を、1,2,7,8小節内の各単位時間の補完値として補完する。なお、バスドラムについては特に図示しないが、スネアドラムやハイハットの場合と同様に、検出範囲で検出されたベロシティ情報を小節単位で平均化した値を、検出範囲外のベロシティとして補完する。
次に、図22〜図27を参照し、打楽器音分離部18による打楽器音分離処理について説明する。打楽器音分離処理は、前処理で得られた詳細判別情報(グルーピング情報およびベロシティ情報)を元に同期処理を行い、各打楽器の周波数スペクトログラム情報を生成する処理である。図22は、打楽器音分離処理の流れを示すフローチャートである。打楽器音分離処理では、まず継続音除去部12により出力された継続音除去音源から、複合ハイハットを分離する(S81)。続いて、複合ハイハット分離後の音源(1)から、バスドラムを分離し(S82)、バスドラム分離後の音源(2)から、スネアドラムを分離し(S83)、スネアドラム分離後の音源(3)から、単独ハイハットを分離する(S84)。さらに、アタック検出できなかった情報を補完し(S85)、アタックより前の振幅を除去して、最終的に各打楽器のスペクトログラム情報を生成する。なお、S81〜S84は、対象となる打楽器種類が異なるだけであり、処理内容としては、各ステップにおいて、図4に示した第1特定部41〜鳴り終わり判定部46の処理を行う。
図23(a)は、複合ハイハット分離処理(図22のS81参照)の説明図である。複合ハイハットは、8小節の中に、バスドラムやスネアドラムなど他の打楽器と同時に発音されているハイハットと、単独で発音されているハイハットが存在することを条件としている。言い換えれば、バスドラムやスネアドラムなど他の打楽器と同時に発音されているハイハットが存在していても、単独で発音されているハイハットが存在しない場合、それを複合ハイハットとは看做さない。これは、単独で発音されているハイハットが存在しない場合、同期減算処理において、バスドラムやスネアドラムを除去できないためである。同図は、「BDと同時に鳴ったHH」として示す2つのハイハット(符号56)と、「単独で鳴ったHH」として示す2つのハイハットが同じハイハットである、とグルーピングされた例である。符号56のハイハットと同時に鳴ったバスドラムの振幅成分を損なわないように、ハイハットだけを分離するため、単独で鳴ったハイハットの振幅成分を利用する。したがって、同図の例では、符号56の2つのハイハットと、単独で鳴った2つのハイハット、合計4つのハイハットを、複合ハイハットとして分離する。
一方、図23(b)は、バスドラム分離処理(図22のS82参照)の説明図である。同図に示すように、4つ打ち系の楽曲の場合、バスドラムとスネアドラムが同時に鳴ることがある。この場合、バスドラムは、スネアドラムよりも鳴る回数が多いため、単独で存在する確率が高い。つまり、バスドラムを分離しないでスネアドラムのスペクトグラム形状を推定しようとしても、バスドラムと被っていることが多いため、正しく推定できない可能性が高い。また、バスドラムの音色が残ったままでスネアドラムの音を分離すると、バスドラムの音が目立ってしまうといった問題もある。そのため、バスドラムを先に分離する必要がある。同図の例では、符号57の4つのバスドラムを分離する。
なお、スネアドラム分離処理(図22のS83参照)については、特に図示しないが、バスドラムを分離した後に処理を行うため、スペクトグラム形状の推定が容易である。また、単独ハイハット処理(図22のS84参照)についても、特に図示しないが、スネアドラムと同様に、既に被っている音が分離された後に処理を行うため、スペクトグラム形状の推定が容易である。
続いて、第1特定部41、第2特定部42および同期減算部43による同期減算処理について説明する。打楽器は、繰り返し同じ波形で鳴らされるが、打楽器以外の成分は異なる音程で鳴らされることが多い。このため、共通部分を抽出することで、打楽器のみの成分を残すことができる。まず、第1特定部41および第2特定部42による同期減算の相手を特定する方法について説明する。同期減算は、詳細判別処理で同じグループに属すると判別されたもの同士で相関値を算出し、最も相関値が高いもの同士で行う。例えば、図17(b)のように、8小節の中に、同一種類の周波数スペクトログラムが複数含まれている場合、その中の任意の周波数スペクトログラム(同図、符号52)を第1スペクトログラムとして特定する。また、第1スペクトログラムと最も相関値が高い周波数スペクトログラム(同図、符号53)を、同期減算の相手となる第2スペクトログラムとして特定する。なお、第1スペクトログラムおよび第2スペクトログラムの特定は、1のグループ内に含まれる全ての周波数スペクトログラムを対象として行う。つまり、1のグループ内にL個の周波数スペクトログラムが含まれる場合、L回のスペクトログラム特定および同期減算処理を繰り返すことになる。
図24は、同期減算部43による同期減算処理の説明図である。同図(a)は、同期減算の対象として決定された2つのスネアドラムに対し、ベロシティ情報に基づいて、スペクトグラムの大きさを揃えた後の状態を示している。例えば、同図左側が第1スペクトログラムであり、右側が第2スペクトログラムである。同図(b)に示すように、これら2つのスネアドラムの同期減算を行うと、減算元の第1スペクトログラムに含まれていない成分が、マイナス成分となる。また、スネアドラム成分以外は双方同じ大きさであるため、打楽器以外の成分を抽出できる。さらに、マイナス成分を「0」にすると、減算元の第1スペクトログラムのうち、打楽器以外の成分が残る。その後、同図(c)に示すように、減算元の第1スペクトログラムから、上記の打楽器以外の成分を減算すると、共通成分(本来のスネアドラムのスペクトログラム形状)を求めることができる。
なお、同期減算処理については、図24に示した方法ではなく、双方のスペクトログラムの振幅を各フレーム、各binで比較して、小さい方を採用する、といった単純な方法でも良い。
続いて、同期加算部44による同期加算処理について説明する。この処理は、同期減算によって求めたスペクトログラム形状の誤差を減少させるために行われる。図25は、同期加算処理の説明図である。同図に示すように、同期加算処理では、1のグループ内に存在するL個の周波数スペクトログラムの同期減算結果を、同期加算によって平均化する。同図の例では、同期加算の対象が4個の周波数スペクトログラムであったため、4個の周波数スペクトログラムについての同期減算データの合計値を4で除算し、平均値(同期処理済みデータ)を求めている。なお、同期加算処理は、1のグループ内に存在する同期減算結果が1のみの場合、省略される。
続いて、再アタック検出部45による再アタック検出処理について説明する。この処理は、アタック位置が正確でない場合や、スネアドラムのみ前倒しで発音されている場合などを考慮し、同期処理済みデータに基づいて、アタック検出を行う。図26は、再アタック検出処理までの流れを示す簡易フローチャートおよびその説明図である。
まず、不図示の拍位置解析アプリケーションより、拍位置の解析結果を取得する(S91)。なお、同図のS91およびS92は、発音位置情報(図1参照)の取得前に行われる工程である。つまり、本実施形態における発音位置情報は、拍位置解析アプリケーションの解析結果を元に生成されている。S91の説明図に示すように、拍位置の解析結果は、楽曲によってBPMが正確であっても、拍位置が遅れてしまうことがある。そこで、拍位置の遅れを回避するため、全ての拍位置を所定時間(例えば、50ms)前倒ししておく(S92)。その後、第1特定部41、第2特定部42、同期減算部43および同期加算部44による同期処理を行う(S93)。このとき、前倒しによりアタックの取り逃しは回避できるが、元々正しい拍位置が検出されていた楽曲では、前倒しによって余分な音(符号61,符号62参照)が入ってしまうことがある。このうち符号62については、鳴り終わり判定部46による鳴り終わり判定(図12参照)で除去するが、符号61についての除去が別途必要となる。そこで、同期処理後の単体の打楽器に対して改めてアタック検出を行い(S94)、図22のS86にて、アタックよりも前の音を削除する(無音にする)。このように、再アタック検出処理は、単体の打楽器に対して行うため、スネアドラムのみ前倒ししている楽曲についても、正確にそのアタック位置を検出することができる。
なお、拍位置の遅れがない場合、S91およびS92の処理を省略可能である。また、発音位置情報に、「スネアドラムのみ前倒しされている」旨の情報が含まれる場合、再アタック検出処理(S94)を省略できる。
続いて、鳴り終わり判定部46による鳴り終わり判定処理について説明する。この処理は、同期処理を行っても打楽器以外の成分を削除しきれない場合があるため、打楽器の大まかな鳴り終わりを判定し、打楽器以外の成分を削除するために行う。具体的には、図12に示した2つの方法で鳴り終わりを判定する。まず、継続音範囲検出処理(図10のS57参照)において、サビフラグが立てられている場合、全ての帯域で図12(a)に示した平均値終了判定法による終了点を用いる。これは、サビでは全帯域で継続音が定常的になっている可能性が高いため、余計な音が入りにくい平均値終了判定法を用いることが好ましいためである。また、サビフラグが立てられていない場合は、継続音範囲(継続音が存在する帯域)に対して平均値終了判定法による終了点を用い、継続音範囲以外に対しては、図12(b)に示した新規アタック判定法による終了点を用いる。これは、平均値終了判定法が、余計な音が入りにくい代わりに実際の音より短めに打ち切られてしまう特徴があり、新規アタック判定法が、余計な音が入ってしなう可能性があるものの、実際の音と同じような終了点を検出できる(打楽器の消え際まで音を出すことができる)特徴があるためである。つまり、余計な音が入ってしまうおそれのある継続音範囲に対してのみ、余計な音が入りにくい平均値終了判定法を使用し、それ以外は新規アタック判定法を使用することで、より適切に打楽器音の終了点を特定することができる。なお、図12では、バスドラムの鳴り終わり判定について例示したが、スネアドラムやハイハットについても同様に鳴り終わり判定処理を行う。
ところで、鳴り終わり判定処理では、各周波数binについて鳴り終わりを判定するため、鳴り終わり地点が周りの周波数binと比べて極端に短かったり長かったりする場合がある。このような極端な鳴り終わり地点が検出されると、分離される打楽器音が劣化してしまう。このため、鳴り終わり地点を揃える必要がある。
図27は、鳴り終わり修正処理の説明図である。この処理は、鳴り終わり判定の結果、同図(a)に示すように、極端に短い鳴り終わりや極端に長い鳴り終わりが存在する場合、同図(a)に示すように、極端に短い/長い鳴り終わりを周りに合わせる処理である。同図(c)は、鳴り終わりを周りに合わせる方法を示している。同図に示すように、全周波数帯域を1/3オクターブ幅に分割し、1/3オクターブ幅単位で鳴り終わり地点を中央値に揃えている。なお、帯域の分割数や各帯域の範囲については、設定変更可能である。
続いて、アタック検出できなかった情報を補完する方法(図22のS85)について説明する。アタックが非常に弱い打楽器の場合、再アタック検出処理(図26のS94参照)における、「アタックと看做す閾値」を超えない成分が存在する場合がある。これは、「アタックと看做す閾値」が図1の発音位置情報を検出する処理と、打楽器音分離の処理で異なるためである。そこで、拍位置解析アプリケーションから得られた拍位置が、本当のアタック位置からどの位ずれているのかを示すアタック値の最頻値を算出し、アタック検出できなかった情報を補完する。アタック検出できなかった箇所は、「アタックと看做す閾値」に満たないため、非常に弱いアタックであるが、発音位置情報から、打楽器の発音位置が分かっているため、この部分を補完する。例えば、ハイハットが5種類鳴っている場合を想定する。ハイハット1は5ms、ハイハット2は10ms、ハイハット3は10ms、ハイハット4は8ms、とアタック値(アタックのずれ時間)が算出されて、ハイハット5がアタックの閾値に満たなかったとする。このとき、5msと8msは1回しか現れていないが、10msは2回現れているため、ハイハット5のアタック値が不明である場合も、一番多く現れている10msとする。
次に、分離した各打楽器音の応用例について説明する。図28は、打楽器音の調節に関する説明図である。同図に示すように、バスドラム、スネアドラム、ハイハット、3音以外の、それぞれの音量を、ロータリー型操作子71等の操作子を用いて調節しても良い。また、音量ではなく、各打楽器音の分離率(生成率)を調節可能としても良い。この場合、調節可能な分離率の最小値を、0(ゼロ)としても良い。
その他、バスドラム、スネアドラム、ハイハット、3音以外の、それぞれの音に対し、異なるエフェクトをかけても良い。また、そのエフェクト付与率(加工処理量)を、ユーサーが調節可能としても良い。エフェクトとしては、ディレイ、リバーブ、エコーなど、DJ機器のエフェクター等で用いられる各種音響効果を適用可能である。操作方法としては、例えばバスドラムに対応したロータリー型操作子71を右側に回転させると、バスドラム音の数を徐々に増加させ(ディレイをかけて足していき)、左側に回転させると、バスドラム音の数を徐々に減衰させる、などが考えられる。なお、操作子の形態は、ロータリー型操作子71に限らず、フェーダー型操作子やタッチパネルなどその種類を問わない。
また、図29に示すように、分離した打楽器音を譜面表示しても良い。つまり、バスドラム、スネアドラム、ハイハットの判別結果をMIDI(Musical Instrument Digital Interface)化し、ドラム譜面72として用いても良い。この場合、ハイハットについては、オープンハイハットとクローズハイハットに分け、打楽器種類別(グループ別)に表示しても良い。また、スネアドラムに代えて、ハンドクラップを譜面表示しても良い。ハンドクラップは、スネアドラムと同様の処理工程により、スペクトログラム形状の推定・分離が可能である。
また、特に図示しないが、ドラムをMIDIで鳴らし、音色を切り替えても良い。つまり、各打楽器音のアタックのタイミングで、別の音(アコースティックドラムなど)を出力しても良い。また、分離した打楽器音をサンプリングし、ユーザーが入力したシーケンスにしたがって(若しくはユーザーが指定した出力タイミングで)、各打楽器音を出力しても良い。
以上説明したとおり、本実施形態によれば、打楽器音分離部18において、同期処理により周波数スペクトログラムを推定するため、テンプレートを用いる必要がない。したがって、楽曲によらず、打楽器ごとのスペクトログラム形状を正確に推定することができる。また、継続音除去部12において、所定時間以上継続している継続音成分を除去するため、打楽器音分離部18によるスペクトログラム形状をより正確に推定することができる。
また、詳細判別用音加工部14では、詳細判別処理の前処理として、打楽器別に不要な音を除去するため、詳細判別部15の判別正答率を上げることができる。また、詳細判別用音加工部14では、打楽器のアタック位置から検索区間を特定し、その検索区間の所定位置における振幅値を減算するため、簡易な処理で、不要な音を除去することができる。また、打楽器別に、振幅値の抽出方法が異なるため、目的の打楽器音をより正確に抽出することができる。また、バスドラムの加工においては、鳴り終わりを判定し、鳴り終わった場合は鳴り終わり以降をゼロにするため、不要な音を確実に除去することができる。また、詳細判別部15では、同じ打楽器種類且つ同じ鳴り方をしていることを条件として周波数スペクトログラムをグルーピングするため、後段の打楽器音分離部18における同期処理の精度を上げることができる。
また、ベロシティ特定部16では、各打楽器のベロシティを特定するため、後段のグルーヴ判定部17において、楽曲のグルーヴを正確且つ容易に判定することができる。また、ベロシティを特定するために、楽曲の8小節のうち、雑音が入りにくい一部の区間(バスドラムは、2つ目のアタック〜最後のアタック、スネアドラムとハイハットは、3小節目〜6小節目)を対象としてベロシティの検出を行うため、正確な検出結果が得られる。さらに、その検出結果をグループごと且つ単位時間ごとに平均化し、その平均化した値を、8小節のうち一部の区間以外の区間に補完するため、各打楽器の8小節における各単位時間のベロシティを正確に特定することができる。また、ベロシティを正確に特定することで、打楽器音分離部18における同期処理の精度を上げることができる。
なお、以下の変形例・応用例を採用可能である。例えば、上記の実施形態では、外部から発音位置情報を取得する構成としたが、音声信号処理装置1によって楽曲の解析を行い、発音位置情報を生成する構成としても良い。また、ユーザーが発音位置情報を手入力しても良い。
また、上記の実施形態のバスドラム加工部21は、図30(a)に示すように、検索区間(t1〜t2)の最後のフレームにおける振幅データ51aを減算する処理を行ったが、同図(b)に示すように、検索区間(t1〜t2)の最初のフレームにおける振幅データ51bを減算しても良い。前者の場合(上記の実施形態の場合)は、同図(a)に示すように、バスドラムと同時に音程が切り替わる場合に効果的である。また、後者の場合は、同図(b)に示すように、バスドラムの発音前からベース音が鳴り続けている場合に効果的である。この場合は、検索区間の最後の振幅データを減算すると、音程が変わっていたり、ベース音自体が減衰している可能性があるためである。また、減算対象となるフレームの位置(抽出部21dにより抽出する位置)を、検索区間の開始位置や終了位置またはアタック位置を基準としてユーザーが設定可能としても良いし、楽曲解析結果に応じてフレームの位置を可変しても良い。
また、バスドラム加工部21の変形例として、抽出部21dにより、検索区間の先頭から所定数(但し、2以上)のフレーム、または検索区間の最後から所定数(但し、2以上)のフレームを抽出し、第1加工部21eにより、検索区間に含まれる全フレームから、抽出された所定数のフレームの平均振幅値を減算しても良い。この場合、所定数は、オーバーラップ数と同じ数(4回オーバーラップの場合は「4」)が好ましい。
さらに、バスドラム加工部21における第1加工部21eの変形例として、減算以外の処理を行っても良い。つまり、検索区間に含まれる音声データを、抽出部21dで抽出された振幅値に基づいて加工するものであれば、その演算方法は問わない。また、減算処理を行う場合でも、減算割合を100%とするのではなく、80%または50%など所定の割合で減算しても良い。
また、詳細判別用音加工部14の応用例として、打楽器音以外の音を対象として加工処理を行っても良い。例えば、図31に示すように、ピアノの伴奏に合わせてボーカルが流れている場合、各周波数帯域において、ボーカルの基音が存在しない位置の振幅データ(例えば、符号54または符号55に示す振幅データ)を抽出して減算処理を行うことにより、ボーカルのみを抽出することができる。
また、上記の実施形態のベロシティ特定部16は、1小節を16分割した16分音符単位でベロシティを特定(検出および算出)したが、特定単位(分割数)は任意である。また、楽曲に応じて(発音位置情報をはじめ、楽曲ジャンル、楽曲BPM(Beats Per Minute)、リズムなどの情報に応じて)、特定単位を可変しても良い。
また、上記の実施形態の打楽器音分離部18は、3つの打楽器(バスドラム、スネアドラム、ハイハット)について、スペクトログラム形状の推定および打楽器音の分離を行ったが、これらの打楽器以外の打楽器にも、本実施形態を適用可能である。また、打楽器以外のリズム楽器、またはリズム楽器以外の楽器にも、本実施形態を適用可能である。
また、上記の実施形態では、所定の発音期間を8小節としたが、それより長い/短い期間としても良い。また、楽曲1曲分を、所定の発音期間としても良い。
また、上記の各実施形態に示した音声信号処理装置1における各部および各機能をプログラム(アプリケーション)として提供することが可能である。また、そのプログラムを各種記録媒体(CD−ROM、フラッシュメモリ等)に格納して提供することも可能である。すなわち、コンピューターを、音声信号処理装置1の各部として機能させるためのプログラム、およびそれを記録した記録媒体も、本発明の権利範囲に含まれる。その他、音声信号処理装置1を、ネットワーク上のサーバー(クラウドコンピューティング)で実現するなど、本発明の要旨を逸脱しない範囲で適宜変更が可能である。