(58)【調査した分野】(Int.Cl.,DB名)
前記位相判定ステップは、前記位相差が、前記所定の窓関数に応じて定まる基準値から所定の閾値以下である場合、前記スペクトルピークと前記近接周波数帯域の位相関係を維持すると判定することを特徴とする請求項2に記載のタイムスケーリング方法。
前記スペクトルピーク検出ステップは、前記周波数変換ステップの前回の演算結果による同じ周波数帯域または当該同じ周波数帯域に近接する近接周波数帯域の前記振幅が極大であり、且つ前記周波数変換ステップの今回の演算結果による前記振幅が極大となる前記スペクトルピークを検出することを特徴とする請求項1ないし3のいずれか1項に記載のタイムスケーリング方法。
前記位相演算処理ステップは、前記スペクトルピークと前記近接周波数帯域の位相関係を維持すると判定された場合、前記スペクトルピークに対してのみ前記位相連続処理を行い、前記近接周波数帯域は、当該スペクトルピークの前回と今回の位相連続処理による位相差に合わせて、時間伸縮後の位相を推定するピーク位相維持処理を行うことを特徴とする請求項5または6に記載のタイムスケーリング方法。
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところが、特許文献1の発明は、実周波数チャンネルと、その近傍の周波数チャンネルとの間の位相差を維持させる位相補正を、全ての音に対して行っている。つまり、位相差を維持させるべきか否かの判定を行っていない。このため、維持させるべきでない音の音質を悪化させてしまうといった問題がある。また、特許文献1の発明は、フレーム単位でFFTを行っており、時間方向の音の変化が考慮されていない。つまり、時間的に継続しない音(瞬間的に変化する音)に対しても、位相差を維持させているため、さらに音質を悪化させてしまう。
【0005】
本発明は、上記の問題点に鑑み、FFT方式を用いて位相演算処理を行う場合、条件付きで、任意の周波数帯域とその近接周波数帯域の位相関係を維持することにより、高品質な音に変換可能なタイムスケーリング方法、ピッチシフト方法、オーディオデータ処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明のタイムスケーリング方法は、
オーディオデータ処理装置のプロセッサが、デジタルオーディオデータを、周波数成分ごとの振幅と位相に変換する周波数変換ステップと、振幅が極大となるスペクトルピークを検出するスペクトルピーク検出ステップと、スペクトルピークの位相と、スペクトルピークに近接する近接周波数帯域の位相との位相差を算出する位相差算出ステップと、位相差に応じて、スペクトルピークと近接周波数帯域の位相関係を維持するか否かを判定する位相判定ステップと、
位相判定ステップの判定結果に応じてデジタルオーディオデータのタイムスケーリングのための位相演算処理を行う位相演算処理ステップと、を実行することを特徴とする。
【0007】
本発明のオーディオデータ処理装置は、デジタルオーディオデータを、周波数成分ごとの振幅と位相に変換する周波数変換手段と、振幅が極大となるスペクトルピークを検出するスペクトルピーク検出手段と、スペクトルピークの位相と、スペクトルピークに近接する近接周波数帯域の位相との位相差を算出する位相差算出手段と、位相差に応じて、スペクトルピークと近接周波数帯域の位相関係を維持するか否かを判定する位相判定手段と、
位相判定手段の判定結果に応じてデジタルオーディオデータのタイムスケーリングのための位相演算処理を行う位相演算処理手段と、を備えたことを特徴とする。
【0008】
これらの構成によれば、全ての音に対して無条件に位相差を維持させるのではなく、スペクトルピークの位相と、当該スペクトルピークに近接する近接周波数帯域の位相との位相差に応じて、これらスペクトルピークと近接周波数帯域の位相関係を維持するか否かを判定する。つまり、位相差を維持するべきか否かを適切に判定するため、高品質なタイムスケーリングが可能となる。
なお、「スペクトルピーク」とは、FFT変換で得られた周波数スペクトルの振幅が極大となる箇所の周波数を指す。
【0009】
上記のタイムスケーリング方法において、周波数変換ステップは、所定の窓関数の適用後、周波数変換を行い、位相判定ステップは、位相差が、所定の窓関数に応じて定まる基準値から所定の閾値を超える場合、スペクトルピークと近接周波数帯域の位相関係を維持しないと判定することを特徴とする。
【0010】
上記のタイムスケーリング方法において、位相判定ステップは、位相差が、所定の窓関数に応じて定まる基準値から所定の閾値以下である場合、スペクトルピークと近接周波数帯域の位相関係を維持すると判定することを特徴とする。
【0011】
これらの構成によれば、所定の閾値は、窓関数に応じて異なるため、当該窓関数に応じて定まる基準値を基準として位相差の閾値判定を行うことで、位相差を維持するべきか否かをより適切に判定することができる。この場合、位相差が基準値から所定の閾値以下である場合は、相関関係が高いことを意味するため、位相関係を維持することで、高品質な音に変換できる。一方、位相差が基準値から所定の閾値を超える場合は、相関関係が低いことを意味するため、位相関係を維持しないことで、音質の悪化を防止できる。
【0012】
上記のタイムスケーリング方法において、スペクトルピーク検出ステップは、周波数変換ステップの前回の演算結果による同じ周波数帯域または当該同じ周波数帯域に近接する近接周波数帯域の振幅が極大であり、且つ周波数変換ステップの今回の演算結果による振幅が極大となるスペクトルピークを検出することを特徴とする。
【0013】
この構成によれば、時間方向の音の変化を考慮することにより、時間的に継続しない音に対しては、位相差を維持させないため、音質の悪化を防止できる。
【0014】
上記のタイムスケーリング方法において、
プロセッサが、デジタルオーディオデータを、周波数成分ごとの振幅と位相に変換する第1の周波数変換ステップ
をさらに実行し、位相演算処理ステップは、スペクトルピークと近接周波数帯域の位相関係を維持しないと判定された場合、周波数成分ごとの位相が、第1の周波数変換ステップの前回の演算結果から時間伸縮を考慮して連続変化したものとして位相の連続化処理を行う位相連続処理を行うことを特徴とする。
【0015】
この構成によれば、スペクトルピークが時間的に継続している継続成分に対し位相連続処理を行うことで、アタック部の前後で継続して鳴っている音を途切れにくくすることができる(高音質化を図ることができる)。
【0016】
上記のタイムスケーリング方法において、位相演算処理ステップは、位相連続処理として、デジタルオーディオデータを、第1の周波数変換ステップの実行タイミングから時間伸縮長だけ異なる実行タイミングで、周波数成分ごとの振幅と位相に変換する第2の周波数変換ステップと、第1の周波数変換ステップで得られた位相と、第2の周波数変換ステップで得られた位相の差分値を、位相変化量とし、時間伸縮後の位相を推定する位相推定ステップと、を実行することを特徴とする。
【0017】
この構成によれば、第1の周波数変換ステップで得られた位相と、第2の周波数変換ステップで得られた位相の差分値から位相変化量を求め、当該位相変化量から時間伸縮後の位相を推定するため、位相の変化量から真の周波数を推定し、時間伸縮長から時間伸縮後の位相を演算する従来の位相演算処理と比較して、誤差要因が少ない。このため、FFT方式を用いた位相連続処理による音質劣化を防止できる。
【0018】
上記のタイムスケーリング方法において、位相演算処理ステップは、スペクトルピークと近接周波数帯域の位相関係を維持すると判定された場合、スペクトルピークに対してのみ位相連続処理を行い、近接周波数帯域は、当該スペクトルピークの前回と今回の位相連続処理による位相差に合わせて、時間伸縮後の位相を推定するピーク位相維持処理を行うことを特徴とする。
【0019】
この構成によれば、位相判定ステップの判定結果に応じて、位相連続処理と、ピーク位相維持処理を選択的に行うことにより、高品質なタイムスケーリングが可能となる。
【0020】
上記のタイムスケーリング方法において、
プロセッサが、位相演算処理ステップによる位相演算処理後の各周波数成分を、デジタルオーディオデータに変換する周波数逆変換ステップと、周波数逆変換ステップによる周波数逆変換処理時に、時間伸縮率に比例して周波数逆変換後のデジタルオーディオデータのデータ数を増減させる時間伸縮演算ステップと、をさらに実行することを特徴とする。
【0021】
この構成によれば、位相演算処理ステップの後、周波数逆変換ステップおよび時間伸縮演算ステップを実行することにより、デジタルオーディオデータの音高を変えずに時間軸上の長さを伸張および圧縮するタイムスケーリングを実現できる。
【0022】
本発明のピッチシフト方法は、
プロセッサが、上記のタイムスケーリング方法における各ステップと、デジタルオーディオデータのサンプリング周波数を変更することで、時間伸縮および音高変更を行うサンプリングレート変換演算ステップと、を実行し、タイムスケーリング方法の各ステップによる時間伸縮長と、サンプリングレート変換演算ステップによる時間伸縮長とが相殺され、音高のみが変更されることを特徴とする。
【0023】
従来のFFTを用いて周波数領域で周波数シフトを行なう方式のピッチシフトでは、FFTによって計算された位相は周波数シフト後には別の値に変換して用いなければならないため、周波数成分間でアタックを失わないために保つべき位相関係が失われるので位相リセット処理を正しく行なえずアタック感の消失を防止できない。これに対し、本発明の構成によれば、サンプリングレート変換法を用いることで、周波数領域で周波数シフトを行わないためFFTにより計算した位相をアタック部分においてはピッチシフト変換音の位相とすることができるので、位相リセット処理により、アタック感の消失を防止できる。また、周波数シフト処理の誤差要因が少ないため、サンプリングレート変換法を使用しない従来のFFT方式と比較すると、アタック部以外の音質低下も防止でき、高品質なピットシフトが可能となる。
【0024】
本発明のプログラムは、コンピューターに、上記のタイムスケーリング方法における各ステップを実行させることを特徴とする。
【0025】
本発明のプログラムは、コンピューターに、上記のピッチシフト方法における各ステップを実行させることを特徴とする。
【0026】
これらのプログラムを用いることにより、FFT方式を用いて位相演算処理を行う場合に、高品質な音に変換可能なタイムスケーリング方法またはピッチシフト方法を実現できる。
【発明を実施するための形態】
【0028】
以下、本発明の一実施形態に係るタイムスケーリング方法、ピッチシフト方法、オーディオデータ処理装置およびプログラムについて、添付図面を参照しながら詳細に説明する。本実施形態では、本発明のオーディオデータ処理装置を、CDプレーヤーなどの再生装置に適用した場合について例示する。
【0029】
[第1実施形態]
図1(a)は、再生装置1の簡易ブロック図である。同図に示すように、再生装置1は、再生部2と、オーディオデータ処理部3(オーディオデータ処理装置)と、バッファメモリ4と、オーディオデータ出力部5と、を備えている。再生部2は、CDなどのデバイスから楽曲・楽音を読み出して再生する。オーディオデータ処理部3は、CPU(Central Processing Unit)またはDSP(Digital Signal Processor)によって主要部が構成され、再生部2によって再生されたデジタルオーディオデータ(以下、単に「オーディオデータ」と称する)をバッファメモリ4に格納すると共に、バッファメモリ4から読み出したオーディオデータに対し、デジタル信号処理を施す。なお、バッファメモリ4は、入力用のバッファメモリ4(以下、「入力バッファ4a」と称する)と、出力用のバッファメモリ4(以下、「出力バッファ4b」と称する)と、から成る。オーディオデータ出力部5は、オーディオデータ処理部3による処理後のオーディオデータ(出力バッファ4bから読み出したオーディオデータ)を、外部(アンプおよびスピーカーを有する出力装置など)に出力する。
【0030】
図1(b)は、オーディオデータ処理部3の一例を示すブロック図である。
図1(b)のオーディオデータ処理部3は、主な機能構成として、タイムスケーリング部11を備えている。タイムスケーリング部11は、上記のバッファメモリ4(入力バッファ4a)から、処理対象となるオーディオデータを取得してタイムスケーリング(時間伸縮変換処理)を行う。なお、本実施形態では、FFT方式を用いてタイムスケーリングを行う。
【0031】
一方、
図1(c)は、オーディオデータ処理部3の他の例を示すブロック図である。
図1(c)のオーディオデータ処理部3は、主な機能構成として、SRC部12と、タイムスケーリング部11と、を備えている。つまり、
図1(b)のオーディオデータ処理部3に、SRC部12を追加した構成となっている。
【0032】
SRC部12は、タイムスケーリング部11によるタイムスケーリングの前あるいは後に、オーディオデータのサンプリング周波数を変更するSRC処理を行う(サンプリングレート変換演算ステップ)。SRC処理は本来デジタルオーディオデータのサンプリング周期を変更するために使われる技術であるが、SRC処理を施して新たに求めたサンプリングデータを、サンプリング周波数を元のままとすることで時間伸縮および音高変更が行われる。つまり、
図1(c)のオーディオデータ処理部3は、SRC部12とタイムスケーリング部11によるオーディオデータの時間伸縮長を相殺することで、時間軸上の長さを変更することなく音高のみを変更させるピッチシフトを実現できるようになっている。以下、
図1(c)に示したオーディオデータ処理部3により、主にピッチシフトを行う方法について記載する。
【0033】
図2は、オーディオデータ処理部3の詳細な機能構成を示すブロック図である。上記の通り、オーディオデータ処理部3は、SRC部12およびタイムスケーリング部11から成る。本実施形態では、最初にSRC処理を行い、その後タイムスケーリングを行うものとする。SRC部12は、原音となるオーディオデータに対してSRC処理を行う。
【0034】
一方、タイムスケーリング部11は、FFT部21、位相演算部22、逆FFT部23および時間伸縮演算部24から成る。FFT部21は、オーディオデータを、周波数成分ごとの振幅と位相に変換する(周波数変換ステップ,第1の周波数変換ステップ)。つまり、時間領域の音を、周波数領域に変換し、振幅と位相を求める。
【0035】
位相演算部22は、振幅の時間変化率の演算結果に応じて、位相演算処理を行う。具体的には、振幅の時間変化率を振幅で除算した正規化振幅差分値を用いて、異なる位相切替判別を行う複数の位相切替判別処理を行い、その判別結果に応じた位相演算処理を行う。当該複数の位相切替判別処理は、アタック部を検出するための処理である。同図に示すように、位相演算部22は、アタック検出部31、位相リセット処理部32および位相連続処理部33を備えている。さらに、アタック検出部31は、全周波数帯域検出部31a、周波数帯域別検出部(A)31bおよび周波数帯域別検出部(B)31cから成る。
【0036】
全周波数帯域検出部31aは、上記の複数の位相切替判別処理の一つである第1の位相切替判別処理により、正規化振幅差分値の合計値が所定の閾値L1(当該閾値を、以下「高閾値」と称する)以上であるか否かを判別し、前回の演算において高閾値未満であり、且つ今回の演算で高閾値以上である場合、全周波数帯域に対してリセット処理が必要なアタック部を検出したと判定する。具体的例を挙げると、バスドラ等の低音の打楽器の打撃音を検出した場合などである。低音打楽器の場合のアタック部には楽器の音の高さを特徴づける基本の低い周波数成分から上のかなり高音域までの周波数成分が含まれているため、ほぼ全周波数帯にわたるような位相のリセット処理が必要となる。
【0037】
また、周波数帯域別検出部(A)31bは、第1の位相切替判別処理により、正規化振幅差分値の合計値が、上記の高閾値未満且つ所定の閾値L2(当該閾値を、以下「低閾値」と称する)以上である場合(但し、L1>L2)、第2の位相切替判別処理を行う。当該第2の位相切替判別処理は、周波数成分ごとに正規化振幅差分値を低閾値で2値化し且つ高域限定で、周波数成分ごとにアタック部を検出する処理である。ここでは、中域から高域の打撃音(アタック)を検出可能である。
【0038】
さらに、周波数帯域別検出部(B)31cは、第1の位相切替判別処理により、正規化振幅差分値の合計値が所定の閾値L2未満であると判別した場合、第3の位相切替判別処理を行う。当該第3の位相切替判別処理は、周波数成分ごとに正規化振幅差分値を高い閾値で2値化して、周波数成分ごとにアタック部の有無を検出する処理である。ここでは、ボーカルや弦楽器などによる打撃音を検出可能である。
【0039】
位相リセット処理部32は、全周波数帯域検出部31a、周波数帯域別検出部(A)31bおよび周波数帯域別検出部(B)31cにおいてアタック部が検出された場合、周波数成分ごとの位相が、FFT部21の演算結果そのものとして位相のリセット処理(以下、「位相リセット処理」と称する)を行う。
【0040】
一方、位相連続処理部33は、全周波数帯域検出部31a、周波数帯域別検出部(A)31bおよび周波数帯域別検出部(B)31cにおいてアタック部が検出されなかった場合、周波数成分(周波数bin)ごとの位相が、FFT部21の前回の演算結果から時間伸縮を考慮して連続変化したものとして位相の連続化処理(以下、「位相連続処理」と称する)を行う。このように、本実施形態の位相演算部22は、正規化振幅差分値の合計値、および個別の周波数成分ごとの値に応じて、位相リセット処理および位相連続処理のいずれかの処理を選択的に行う。
【0041】
ところで、本実施形態の位相連続処理部33は、FFT部21によるFFTの実行タイミングから時間伸縮長だけ異なる実行タイミングで、2回目のFFTを行う(第2の周波数変換ステップ)。そして、FFT部21で得られた位相と、2回目のFFTで得られた位相の差分値を位相変化量とし、時間伸縮後の位相を推定する(位相推定ステップ)。つまり、変換前オーディオデータから直接的に時間伸縮後の位相変化量を取得する。詳細については、
図5を参照して後述する。
【0042】
逆FFT部23は、位相演算部22による位相演算処理後の各周波数成分を、オーディオデータに変換する(周波数逆変換ステップ)。つまり、周波数領域の振幅と位相を、時間領域の音に変換する。
【0043】
時間伸縮演算部24は、逆FFT部23による周波数逆変換処理時に、時間伸縮率に比例してデータ数を増減させる(時間伸縮演算ステップ)。具体的には、SRC部12によるオーディオデータの時間伸縮長を相殺するように時間伸縮する。なお、時間伸縮の方法については、逆FFT部23により演算された時間領域のオーディオデータをFFT時にずらしたサンプル数より時間伸縮率に比例して変化させたサンプル数だけずらすことにより実現する。時間伸縮演算部24による演算処理後のオーディオデータは、変換音として出力される。
【0044】
なお、ステレオ再生の場合、本実施形態では、各部(SRC部12、FFT部21、位相演算部22、逆FFT部23および時間伸縮演算部24)において、左右の音を独立して処理する。
【0045】
次に、
図3および
図4のフローチャートを参照し、第1実施形態に係るピッチシフト処理の流れについて説明する。まず、オーディオデータ処理部3は、初期化処理を行い(FFT演算回数i=1とする,S01)、入力バッファ4aからオーディオデータを取得する(S02)。続いて、SRC部12によりSRC処理を行い(S03)、その後S04以降のタイムスケーリングを開始する。
【0046】
タイムスケーリングでは、まず、入力窓関数(ハニング窓関数)を乗じ(S04)、i回目のFFTを行う(S05)。また、周波数成分、すなわちFFT周波数bin番号jをj=0とし(S06)、位相振幅計算を行う(S07)。以上、S03〜S07は、FFT部21による処理工程である。
【0047】
続いて、オーディオデータ処理部3は、位相演算部22により位相演算処理を行う(S08)。当該位相演算処理については、
図4にて後述する。オーディオデータ処理部3は、位相演算処理を終えると、振幅と位相を複素数化し(S09)、FFT周波数bin番号jが、FFTサンプル数n
FFTの半分に達したか否か、すなわち「j==n
FFT/2」に達したか否かを判別する(S10)。ここで、FFTサンプル数n
FFTの半分に達していない場合は(S10:No)、FFT周波数bin番号jをカウントアップして(S11)、S07に戻る。また、FFTサンプル数n
FFTの半分に達した場合は(S10:Yes)、複素数化したデータの共役複素数を残り半分の負の周波数成分の複素数データとしてIFFTを行う(S12)。以上、S09〜S12は、逆FFT部23による処理工程である。
【0048】
続いて、オーディオデータ処理部3は、出力窓関数(ハニング窓関数)を乗じ(S13)、SRC率をキャンセルすべく、入力オーバーラップ数に時間伸縮率(タイムストレッチ率)を乗算して、出力ポインタを移動する(S14)。また、これを出力バッファ4bに書き込んで(出力バッファ4bに加算して,S15)、変換音として出力する。以上、S13〜S15は、時間伸縮演算部24による処理工程である。なお、この実施例では出力窓関数もFFT前と同じハニング窓としたが、必ずしも同じである必要はなく、別の窓関数を選んでもよい。
【0049】
その後、オーディオデータ処理部3は、入力オーバーラップ数の入力ポインタを移動し(S16)、入力バッファ4aにオーディオデータが残っているか否かを判別する(S17)。ここで、オーディオデータが残っている場合は(S17:データあり)、FFT演算回数iをカウントアップして(S18)、S02に戻る。また、オーディオデータが残っていない場合は(S17:データなし)、ピッチシフト処理を終了する。
【0050】
次に、
図4を参照し、
図3のS08に相当する位相演算処理について説明する。オーディオデータ処理部3(位相演算部22)は、まず、振幅の差分を演算し(S21)、正規化振幅差分値を求める(S22)。すなわち、振幅の時間変化率をさらに振幅で除算することにより正規化振幅差分値を求める。但し、振幅が0であるか、非常に微小である場合は、除算できないか、除算の結果が適切でなくなる可能性があるため、例外処理として正規化振幅差分値も0とする。ここで、i回目の正規化振幅差分値の合計値(
図4では、「Σi」と表記)が、高閾値以上であるか、低閾値以上高閾値未満であるか、低閾値未満であるかを判別する(S23,第1の位相切替判別処理)。
【0051】
ここで、i回目の正規化振幅差分値の合計値Σiが高閾値以上の場合は(S23:高閾値以上)、i-1回目の正規化振幅差分値の合計値Σi-1が高閾値以上であったか否かを判別し(S24)、高閾値以上でなかった場合(S24:No)、全周波数帯域に対して位相リセット処理を行う(S30)。また、i-1回目の正規化振幅差分値の合計値Σi-1が高閾値以上であった場合は(S24:Yes)、位相連続処理を行う(S31)。つまり、全周波数帯域検出部31aにより、i-1回目演算2値化が0で、i回目演算の2値化が1の場合にアタック部が検出されたと判別し、位相リセット処理部32により、周波数成分ごとの位相を、FFT部21の演算結果そのものとして位相リセット処理を行う。また、アタック部が検出されなかった場合は、位相連続処理部33により、周波数成分ごとの位相が、FFT部21の前回の演算結果から時間伸縮を考慮して連続変化したものとして位相連続処理を行う。
【0052】
また、正規化振幅差分値の合計値が低閾値以上高閾値未満の場合は(S23:低閾値以上高閾値未満)、周波数成分ごとの正規化振幅差分値を低閾値で2値化し(S25)、さらに高域限定で(S26)、周波数別リセット(A)の要否を判別する(S27,第2の位相切替判別処理)。ここで、周波数別リセット(A)が必要と判別した場合は(S27:Yes)、周波数成分ごとに位相リセット処理を行い(S30)、周波数別リセット(A)が不要と判別した場合は(S27:No)、位相連続処理を行う(S31)。つまり、周波数帯域別検出部(A)31bにより、i-1回目演算2値化が0で、i回目演算の2値化が1の場合にアタック部が検出されたと判別し、位相リセット処理部32による位相リセット処理を行う。また、アタック部が検出されなかった場合は、位相連続処理部33による位相連続処理を行う。
【0053】
さらに、正規化振幅差分値の合計値が低閾値未満の場合は(S23:低閾値未満)、周波数成分ごとの正規化振幅差分値を高閾値で2値化し(S28)、周波数別リセット(B)の要否を判別する(S29,第3の位相切替判別処理)。ここで、周波数別リセット(B)が必要と判別した場合は(S29:Yes)、位相リセット処理を行い(S30)、周波数別リセット(B)が不要と判別した場合は(S29:No)、位相連続処理を行う(S31)。つまり、周波数帯域別検出部(B)31cにより、i-1回目演算2値化が0で、i回目演算の2値化が1の場合にアタック部が検出されたと判別し、位相リセット処理部32による位相リセット処理を行い、アタック部が検出されなかった場合は、位相連続処理部33による位相連続処理を行う。
【0054】
次に、位相連続処理の詳細について説明する。
図5は、第1実施形態に係る位相連続処理の概念図である。同図上段は、2048サンプルのFFTデータが、入力オーバーラップ数N(N=(時間伸縮率)×512)間隔で入力されることを示している。また、同図下段は、2048サンプルのIFFTデータが、出力オーバーラップ数512(固定値)間隔で出力されることを示している。また、同図において、「i」はFFT演算回数、「j」はFFT周波数bin番号を示している。また、第1実施形態に係る連続位相計算式は、同図中段の(式A)に示すとおりである。(式A)において、「
in2θ
i,j」は同図「i番目FFT2実行タイミング」で実行されたFFTにより計算された入力位相を示している。
【0055】
また、同図上段における「i番目FFT実行タイミング(現在)」とは、FFT部21による1回目のFFT実行タイミングを示している。また、同じく同図上段における「i番目FFT2実行タイミング」とは、位相連続処理部33による2回目のFFT実行タイミングを示している。なお、2回目のFFTについては、アタック検出部31によるアタック検出前(位相演算処理判別ステップ前)に行っても良い。
【0056】
一方、
図12は、従来例に係る位相連続処理の概念図である。また、従来例に係る連続位相計算式は、同図中段の(式B)に示すとおりである。(式B)において、「F
s」はサンプリング周波数を示している。
【0057】
図5と
図12を比較すると明らかであるが、第1実施形態に係る位相連続処理では、フレームごとに(i番目の周波数変換処理として)、2回のFFTを行う(従来例は、「i番目FFT実行タイミング(現在)」のみ)。また、第1実施形態に係る連続位相計算式(式A)は、従来例(式B)と比較して、単純な計算式となっている。このように、従来例では、位相の変化量から真の周波数を推定し、時間伸縮長から時間伸縮後の位相を演算しているのに対し、第1実施形態では、演算を行うのではなく、2回のFFT演算結果の位相差分値をそのまま時間伸縮後の位相としている。
【0058】
図5を参照し、本実施形態の位相連続処理についてさらに説明する。同図上段に示すように、「i番目FFT実行タイミング(現在)」は、FFT部21による「(i−1)番目FFT実行タイミング」から、入力オーバーラップ数(N)分遅れて実行される。また、「i番目FFT2実行タイミング」は、FFT部21による「(i−1)番目FFT実行タイミング」から、出力オーバーラップ数(512)分遅れて実行される。つまり、「i番目FFT2実行タイミング」は、「i番目FFT実行タイミング(現在)」から、時間伸縮変化長(512−N)分遅れて実行される。
【0059】
なお、タイムスケーリングを行う場合のユーザ操作としては、例えば「0.5倍速」から「2倍速」の間で再生速度を変更可能な場合(時間伸縮率を0.5≦N/512≦2の間で変更可能な場合)、入力オーバーラップ数を、256≦N≦1024の間で可変する操作を行うことにより、「0.5倍速」から「2倍速」のマスターテンポ(音程を変えることなく再生速度を変更すること)を実現する。したがって、時間伸縮率によって「i番目FFT2実行タイミング」と「i番目FFT実行タイミング(現在)」の間隔は512サンプルで変わることはなく、「i番目FFT実行タイミング(現在)」と前回のFFT実行タイミング「(i−1)番目FFT実行タイミング」が可変する。
【0060】
以上説明したとおり、第1実施形態によれば、正規化振幅差分値に応じて、アタック部の有無を検出し、その検出結果に応じて、FFTの演算結果そのものを利用して位相のリセット処理を行う位相リセット処理と、前回のFFTの演算結果から時間伸縮を考慮して位相の連続化処理を行う位相連続処理と、のいずれかを行うため、高品質な音の変換が可能となる。
【0061】
また、アタック部が検出されなかった場合に実行する位相連続処理において、2回のFFTで得られた位相の差分値から位相変化量を求め、当該位相変化量から時間伸縮後の位相を推定するため、従来の位相演算処理(
図12参照)と比較して、誤差要因が少ない。このため、FFT方式を用いた位相連続処理による音質劣化を防止できる。また、タイムスケーリング部11の時間伸縮長は、時間伸縮率(N/512)と、出力オーバーラップ数(512)の乗算値(N=入力オーバーラップ数)に基づいて演算されるため、入力オーバーラップ数(N)を可変することで、時間伸縮長(タイムスケーリング量)を可変できる。
【0062】
また、振幅の時間変化率を振幅で除算した正規化振幅差分値を用いてアタック部を検出するため、原音の音量が小さい場合でも正確且つ確実にアタック部を検出することができる。さらに、正規化振幅差分値を用いて、異なる周波数帯域ごとに3回の位相切替判別処理を行うため、より確実にアタック部を検出することができる。例えば、正規化振幅差分値の合計値が高閾値以上の場合は、位相リセットをするべき周波数成分が広範囲に広がっていることを意味するため、全周波数帯域に対して第1の位相演算処理を行うことで、確実にアタック部を検出できる。また、正規化振幅差分値の合計値が高閾値未満の場合は、周波数帯域ごとにアタック部の有無を検出するため、微細なアタックであっても確実に検出することができる。
【0063】
また、SRC部12により、サンプリングレート変換法を用いることで、周波数領域で周波数シフトを行わないためFFTにより計算した位相そのものをアタック部分においてはピッチシフト変換音の位相とすることができるので、位相リセット処理により、アタック感の消失を防止できる。また、周波数シフト処理の誤差要因が少ないため、サンプリングレート変換法を使用しない従来のFFT方式と比較すると、アタック部以外の音質低下も防止でき、高品質なピットシフトが可能となる。
【0064】
[第2実施形態]
次に、
図6を参照し、本発明の第2実施形態について説明する。上記の第1実施形態では、振幅の時間変化率から得られる正規化振幅差分値に基づいてアタック部を検出したが、本実施形態は、位相の時間変化率から得られる位相断層度に基づいてアタック部を検出する点で異なる。以下、第1実施形態と異なる点のみ説明する。なお、本実施形態において、第1実施形態と同様の構成部分については同様の符号を付し、詳細な説明を省略する。また、第1実施形態と同様の構成部分について適用される変形例は、本実施形態についても同様に適用される。
【0065】
本実施形態のオーディオデータ処理部3は、
図2に示した第1実施形態の機能構成から、全周波数帯域検出部31a、周波数帯域別検出部(A)31bおよび周波数帯域別検出部(B)31cを省略した構成となっている(図示省略)。当該構成により、本実施形態の位相演算部22は、位相の時間変化率の演算結果に応じて、位相演算処理を行う(位相演算ステップ)。具体的には、アタック検出部31により、位相の時間変化率である位相断層度を用いて、位相断層が生じているか否かを判別し、その判別結果に応じて位相演算処理を行う。つまり、位相断層が生じている場合は、アタック部「有」と判定し、位相リセット処理部32による位相リセット処理を行う。また、位相断層が生じていない場合は、アタック部「無」と判定し、位相連続処理部33による位相連続処理を行う。
【0066】
図6は、第2実施形態に係る位相演算処理を示すフローチャートである。なお、
図3に示したピッチシフト処理のメインフローについては、第1実施形態と同様であるため、図示を省略する。本実施形態のオーディオデータ処理部3(位相演算部22)は、まず、位相の2階差分を演算し(S41)、位相断層度を算出する(S42)。ここで、位相断層度が所定の閾値以上であるか否かに応じて、位相断層の有無(アタック部の有無)を判別する(S43)。つまり、位相断層度が所定の閾値以上である場合は(S43:あり)、位相リセット処理部32により、周波数成分ごとの位相が、FFT部21の演算結果そのものとして位相リセット処理を行う(S44)。また、位相断層度が所定の閾値未満である場合は(S43:なし)、位相連続処理部33により、周波数成分ごとの位相が、FFT部21の前回の演算結果から時間伸縮を考慮して連続変化したものとして位相連続処理を行う(S45)。
【0067】
以上説明したとおり、本実施形態によれば、位相の時間変化率を用いることで、原音の音量に拠らず、アタック部を正確に検出することができる。また、位相断層の有無で2つの処理に分岐するだけで良いため、少ない演算処理量で、高品質なタイムスケーリングおよびピッチシフトを実現できる。
【0068】
なお、上記の実施形態では、オーディオデータ処理部3の構成について、
図2に示した第1実施形態の機能構成から、全周波数帯域検出部31a、周波数帯域別検出部(A)31bおよび周波数帯域別検出部(B)31cを省略したものとしたが、第1実施形態の機能構成と同様の構成としても良い。この場合、全周波数帯域検出部31a、周波数帯域別検出部(A)31bおよび周波数帯域別検出部(B)31cにより、位相断層度を用いて、異なる位相切替判別を行う複数の位相切替判別処理を行う。また、当該複数の位相切替判別処理により位相断層が生じているか否かを判別し、その判別結果に応じて位相演算処理を行う。なお、本例における位相演算処理の流れは、
図4に示した第1実施形態の位相演算処理において、S21の「振幅差分」を「位相差分」に、またS22の「正規化振幅差分値」を「位相断層度」に変更したものと同様であるため、図示を省略する。
【0069】
また、第1実施形態の正規化振幅差分値を用いたアタック部の検出方法と、第2実施形態の位相断層度を用いたアタック部の検出方法と、を組み合わせてアタック部を検出しても良い。この構成によれば、アタック部の検出精度をより向上させることができる。
【0070】
[第3実施形態]
次に、
図7〜
図11を参照し、本発明の第3実施形態について説明する。本実施形態では、位相演算処理として、位相リセット処理と位相連続処理以外に、ピーク位相維持処理を行う。当該「ピーク位相維持処理」とは、周波数スペクトルのスペクトルピークと、当該スペクトルピークに近接する近接周波数帯域の位相関係を維持する処理を指す。以下、「ピーク位相維持処理」の対象となるスペクトルピークの決定方法、および位相関係を維持するか否かの判定方法等について、主に説明する。なお、本実施形態においても、上記の各実施形態と同様の構成部分については同様の符号を付し、詳細な説明を省略する。また、上記の各実施形態と同様の構成部分について適用される変形例は、本実施形態についても同様に適用される。
【0071】
図7は、第3実施形態に係るオーディオデータ処理部3のブロック図である。本実施形態のオーディオデータ処理部3は、
図2に示した第1実施形態の機能構成に、スペクトルピーク検出部34、位相差算出部35、位相判定部36およびピーク位相維持処理部37を追加した構成となっている。
【0072】
スペクトルピーク検出部34は、FFT部21(周波数変換ステップ,第1の周波数変換ステップ)によるFFT変換後の周波数スペクトルから、振幅が極大となるスペクトルピークを検出する(スペクトルピーク検出ステップ)。但し本実施形態では、瞬間的に振幅が極大となったものではなく、時間的に継続しているスペクトルピーク(以下、「継続音ピーク」と称する)を検出する。具体的には、FFT部21の前回の演算結果による同じ周波数帯域または当該同じ周波数帯域に近接する近接周波数帯域の振幅が極大であり、且つFFT部21の今回の演算結果による振幅が極大となるスペクトルピークを、「継続音ピーク」として検出する。なお、継続音ピーク判定に用いる「近接周波数帯域」とは、隣接する周波数帯域(両側の2つのbin)であるものとする。
【0073】
位相差算出部35は、スペクトルピーク検出部34で検出した継続音ピークの位相と、当該継続音ピークに近接する近接周波数帯域の位相との位相差を算出する(位相差算出ステップ)。
【0074】
位相判定部36は、位相差算出部35で算出された位相差に応じて、継続音ピークとその近接周波数帯域の位相関係を維持するか否かを判定する(位相判定ステップ)。具体的には、位相差が、FFT部21によるFFT前に適用した入力窓関数(
図3のS04参照)に応じて定まる基準値から所定の閾値以下である場合、スペクトルピークと近接周波数帯域の位相関係を維持すると判定する。逆に、位相差が、所定の閾値を超える場合、スペクトルピークと近接周波数帯域の位相関係を維持しないと判定する。「位相差が、所定の閾値を超える場合」とは、例えばスペクトルピークの近傍に、別の音が存在する場合(2つの音が近い場合)などが考えられる。この場合は、スペクトルピークと近接周波数帯域の関連性が低いため、位相関係を維持しないことで、音質低下を防止できる。なお、位相差を判定する際の「基準値」とは、入力窓関数がハニング窓関数の場合、逆位相(π)となる。この点について、
図8および
図9を参照して簡単に説明する。
【0075】
図8および
図9は、周波数bin「i−1」の周波数サンプル、周波数bin「i」の周波数サンプル、周波数bin「i+1」の周波数サンプルを、それぞれ上段、中段、下段に示したものである。
図8の点線楕円部に示すように、FFT計算される位相が同じであるとすると、センター位置(窓かけしたピーク位置)では、逆位相となる。そこで、
図9に示すように、窓かけした状態(センター最大)を再現するため、センター位置で位相が合うように計算すると、FFT計算される位相は、周波数bin「i」の両側のbinが逆位相となる(点線楕円部参照)。つまり、
図8に示したように、両端が「0」になる窓関数を用いた場合、スペクトルピーク(継続音ピーク)に対し、隣接周波数帯域の位相は逆位相となる。このため、位相判定部36では、「基準値」を逆位相(π)として、位相関係を維持するか否かを判定している。なお、入力窓関数として、両端が「0」とならない窓関数を用いた場合、その窓関数に応じて基準値を設定することとなる。
【0076】
図7の説明に戻る。ピーク位相維持処理部37は、位相判定部36の判定の結果、「位相関係を維持する」と判定された場合、近接周波数帯域について、ピーク位相維持処理を行う。より具体的には、継続音ピークに対して、位相連続処理を行い、近接周波数帯域に対してのみ、ピーク位相維持処理を行う。位相連続処理の位相推定方法については、第1実施形態(
図5参照)を適用可能である。一方、本実施形態の位相連続処理部33は、位相判定部36の判定の結果、「位相関係を維持しない」と判定された場合、同じく第1実施形態で示した位相連続処理を行う。
【0077】
ここで、
図10を参照し、ピーク位相維持処理の位相推定方法について説明する。
図10は、ピーク位相維持処理の概念図である。本実施形態では、継続音ピーク(周波数bin「i」)の両側それぞれ3bin(周波数bin「i−3」、周波数bin「i−2」、周波数bin「i−1」、周波数bin「i+1」、周波数bin「i+2」、周波数bin「i+3」の合計6つのbin)を、近接周波数帯域としてピーク位相維持処理を行う。なお、同図において、横方向は時間軸を示している(縦方向矢印で示される1列分のマス7個は、FFT1回分のデータを示している)。
【0078】
また、
図10では、上段に示す時間伸縮前の状態から、下段に示す時間伸縮前の状態となるように、3%時間を引き延ばすタイムスケーリングを行うことを示している。また、周波数bin「i」を示す横方向矢印上に表記された円形の中抜き矢印は、継続音ピーク(周波数bin「i」)に対してのみ位相連続処理を行った結果推定される位相変化を示している。また、縦方向矢印は、ピーク位相維持処理において、継続音ピークの位相変化を、近接周波数帯域(両側6つのbin)に対して反映することを意味している。したがって、j=iのbinが継続音ピークの場合、FFTから求まる複素データより算出されるピーク位相をθ
i、位相連続処理により算出された周波数bin「i」の時間伸縮後の位相をθ´
iとすると、隣接する周波数bin「i+1」の位相は、「θ´
i+1=θ´
i+(θ
i+1−θ
i)」で算出される。その他の5つのbinについても、同様に算出される。このように、ピーク位相維持処理では、継続音ピークの前回と今回の位相連続処理による位相差に合わせて、時間伸縮後の位相を推定する。
【0079】
次に、
図11を参照し、第3実施形態に係る位相演算処理の流れについて説明する。なお、
図3に示したピッチシフト処理のメインフローについては、第1実施形態と同様であるため、異なる部分のみ説明する。本実施形態のオーディオデータ処理部3(位相演算部22)は、まず、FFT周波数bin番号jをj=1とし(S51)、継続音ピークに該当するか否かを判定する(S52)。つまり、前回の演算時に同じ周波数binまたはその隣接するbinで振幅が極大であり、且つ現在の演算時に振幅が極大となったか否かを判別する。継続音ピークに該当すると判定した場合は(S52:Yes)、位相連続処理を行う(S53)。
【0080】
また、継続音ピークに該当しないと判定した場合は(S52:No)、位相リセットが必要か否かの判定を行う(S54)。当該判定は、第1実施形態の位相判定方法(
図4のS23〜S29参照)を適用可能である。位相リセットが必要と判定された場合は(S54:Yes)、位相リセット処理を行う(S55)。また、位相リセットが不要と判定された場合は(S54:No)、継続音ピークの近傍に該当するか否かを判別する(S56)。つまり、継続音ピークの両側それぞれ3binの近接周波数帯域に該当するか否かを判別する。
【0081】
継続音ピークの近傍に該当しないと判定した場合は(S56:No)、位相連続処理を行う(S53)。また、継続音ピークの近傍に該当すると判定した場合は(S56:Yes)、継続音ピークが単音であるか否かを判別する(S57)。つまり、継続音ピークと近接周波数帯域の位相差が、基準値(逆位相)から所定の閾値以下の場合、継続音ピークが単音であると判定する。継続音ピークが単音であると判定した場合は(S57:単音)、ピーク位相維持処理を行う(S58)。また、継続音ピークが複音であると判定した場合は(S57:複音)、位相連続処理を行う(S53)。
【0082】
なお、位相演算処理(S53、S55、S58のいずれか)の後は、
図3に示した第1実施形態の処理と同様に、振幅と位相を複素数化する(S59)。その後、FFT周波数bin番号jが、FFTサンプル数n
FFTの半分に達したか否かを判別し(S60)、達していない場合は(S60:No)、FFT周波数bin番号jをカウントアップして(S61)、S52に戻る。また、達した場合は(S60:Yes)、
図3のS12に移行する。なお、請求項における「スペクトルピーク検出ステップ」は、S52に相当し、「位相差算出ステップ」および「位相判定ステップ」はS57に相当し、「位相演算処理ステップ」は、S53,S58に相当する。
【0083】
以上説明したとおり、本実施形態によれば、位相リセット処理を行わない場合、スペクトルピークと近接周波数帯域の位相差に応じて、位相連続処理およびピーク位相維持処理のいずれかの処理を行うため、高品質なタイムスケーリングが可能となる。つまり、位相差が基準値から所定の閾値以下である場合は、相関関係が高いことを意味するため、位相関係を維持することで、高品質な音に変換できる。一方、位相差が基準値から所定の閾値を超える場合は、相関関係が低いことを意味するため、位相関係を維持しないことで、音質の悪化を防止できる。また、スペクトルピークが時間的に継続しているか否かを判別し、時間的に継続している場合のみ、その近接周波数帯域をピーク位相維持処理の対象とするため、時間的に継続しない音に対して位相差を維持させることによる、音質の悪化を防止できる。
【0084】
なお、第3実施形態では、位相連続処理として、位相連続処理部33により2回目の周波数変換を行ったが(1回目の周波数変換は、FFT部21にて周波数変換を行ったが)、FFT部21による周波数変換に加え、位相演算部22により、2回の周波数変換を行っても良い。つまり、請求項における「第1の周波数変換ステップ」をFFT部21で実行し、「周波数変換ステップ」および「第2の周波数変換ステップ」を位相演算部22で実行しても良い。
【0085】
また、第3実施形態では、位相連続処理について、第1実施形態と同様の位相推定方法(
図5参照)を適用するものとしたが、従来例の位相推定方法(
図12参照)を適用しても良い。つまり、位相の変化量から真の周波数を推定し、時間伸縮長から時間伸縮後の位相を推定しても良い。
【0086】
また、位相リセットが必要か否かの判定について(位相切替判別処理について)、第1実施形態の位相判定方法(
図4のS23〜S29参照)を適用するものとしたが、この場合、ステレオの左右の音に対する正規化振幅差分値の合算結果を用いて、複数の位相切替判別処理を行っても良い。例えば、ステレオの左右の音に音量差があった場合、同一音源からの発生音は左右同時にリセットしないと位相が左右ばらばらになってしまう。このため、合算結果を用いて判別を行うことにより、左右の音の位相リセットのタイミングを同期させ、音像(定位)の乱れを防止することができる。
【0087】
また、ステレオの左右の音に対する正規化振幅差分値の合算結果と、ステレオの左右の音それぞれの正規化振幅差分値と、の両方を用いて、複数の位相切替判別処理を行っても良い。この構成によれば、ステレオの左右の音それぞれの正規化振幅差分値を用いることで、左右の音量差なども考慮して、より確実に音像の乱れを防止することができる。
【0088】
また、変形例として、位相切替判別処理においてアタック部が検出された場合でも、スペクトルピークが時間的に継続している継続成分に対しては、位相連続処理を行っても良い。この構成によれば、スペクトルピークが時間的に継続している継続成分を位相リセット処理の対象外とすることで、アタック部の前後で継続して鳴っている音を途切れにくくすることができる。
【0089】
また、正規化振幅差分値の合計値Σiが高閾値以上である場合であってアタック部が検出された場合(
図4のS24:Noの場合)、低周波成分のみ、所定時間だけタイミングを遅らせて位相リセット処理を行っても良い。これは、低音域の音は周期が長いため、前処理で検出した位相リセットのタイミングでは位相が安定せず、位相リセット処理の効果が小さいが、タイミングを遅らせることで、位相リセット処理の効果を高めることができるためである。これにより、低音打楽器における打撃音後に継続する低周波数の音、例えばバスドラムの胴鳴りなどの高音質化を図ることができる。
【0090】
また、上記の各実施形態において、オーディオデータ処理部3は、再生部2による再生に伴ってバッファメモリ4に書き込まれるオーディオデータを解析しながらピッチシフト(タイムスケーリング)を行うものとしたが、事前に解析したデータを読み出してこれらを行っても良い。つまり、楽曲を再生しながらリアルタイムにピッチシフト(タイムスケーリング)を行う構成としても良いし、事前に解析したデータを利用して、楽曲全体または楽曲の一部をピッチシフト(タイムスケーリング)する構成としても良い。
【0091】
また、上記に示したオーディオデータ処理部3の各構成要素をプログラムとして提供することが可能である。また、そのプログラムを各種記録媒体(CD−ROM、フラッシュメモリ等)に格納して提供することも可能である。すなわち、コンピューターをオーディオデータ処理部3の各構成要素として機能させるためのプログラム、およびそれを記録した記録媒体も、本発明の権利範囲に含まれる。
【0092】
また、上記の各実施形態では、オーディオデータ処理部3を再生装置1に適用した場合を例示したが、ミキサー装置などのDJ機器、各種電子楽器およびコンピューター(PCアプリケーション、タブレット端末用アプリケーション)などに適用しても良い。また、カラオケ装置、ボイスチェンジャーおよび音声合成装置など、音高を変更する機能を有する音声処理装置への適用も有用である。例えば、本発明を適用することで、異なる楽曲を連続して再生するDJ機器において、連続再生する楽曲のキーが不協和な関係にある場合に、ピッチシフトにより親和性の高いキーに変換するハーモニックスミックスを高音質化できる。また、カラオケ装置において、ユーザの声の高さに合わせてキー変更する機能があるが、音質を落とさずにキー変更可能なように、音源を打ち込み音であるMIDIとしている場合が多いが、本発明を適用することによって、生音を音源に用いても高品質なキー変換が可能となる。
【0093】
さらに、キーを変えずに音声の時間軸長さだけを変更する場合など、タイムスケーリングのみの適用も可能である。例えば、異なる楽曲を連続して再生するDJ機器に本発明を適用することで、連続再生する楽曲のテンポのみを変更し、キー(音高)を変更しないタイムスケーリング(マスターテンポ)を高音質化できる。また、音声を録音・再生できる装置において、高速再生しても、キーを変えない早聴き機能を高音質化できる。その他、本発明の要旨を逸脱しない範囲で、適宜変更が可能である。