2.3 はじめての音源分離

Problem

HARK を使って特定の方向からくる音響信号だけを分離したい.

Solution

HARK を用いて音源分離を行う場合には,ネットワークファイルと 分離を行う GHDSS モジュールで使用する伝達関数(HGTFバイナリ形式) のファイルもしくはマイク配置(HARKテキスト形式)が必要である.

音源分離を行うためのネットワークを作成するためには,大きく分けて 以下が 4 点が必要となる.

音響信号を入力する

:
音響信号を入力するためには,AudioStreamFromMic もしくは AudioStreamFromWave モジュールを使う.

分離したい方向を指定する

:
分離したい方向を指定するためには,ConstantLocalization ,LoadSourceLocation , LocalizeMUSIC モジュールを使用する.とりあえず分離を行いたい場合は ConstantLocalization モジュールを使用するのが簡単である.オンラインで定位しながら分離を行うためには LocalizeMUSIC モジュールを使用する.

分離を行う

:
分離を行うのは,GHDSS モジュールである.上記の音響信号と方向の情報を入力とし 分離音を出力する.この分離には,実測したインパルス応答から作成した伝達 関数もしくはマイクロホンアレイの配置から計算した伝達関数を使用する.

分離音を保存する

:
分離音は周波数領域で出力されるため,Synthesize モジュールを用いて時間領域に 戻してから SaveRawPCM もしくは SaveWavePCM モジュールを用いて保存する.

HARK では分離音に対する後処理を行うことができる. この処理は必ずしも必要というわけではないので,使用環境・目的 などに応じて使用するかどうかを判断する.

後処理を行う

:
分離音に対して,HRLE モジュールなどを用いてノイズを推定し,除去を行う. これには,PowerCalcForMap ,HRLE ,CalcSpecSubGain ,EstimateLeak , CalcSpecAddPower ,SpectralGainFilter モジュールを用いる.

2.102.11 2.12 は音源分離のためのネットワークのサンプルであり, 図 2.11 は後処理を行わない例を, 図 2.12 は後処理を行う例を示す. 「はじめての音源定位」まで で作成したネットワークファイルに対し,GHDSS モジュールを 接続し,モジュールのパラメータに伝達関数もしくはマイク配置 のファイルを指定することにより,音源分離が可能である.ただし, 分離音は周波数領域であるため,分離音を聞いてみたい場合などは, Synthesize モジュールを用いて時間領域に変換してから録音する.

\includegraphics[width=6.0cm]{fig/recipes/LearningHARK-separation-main.png}
Figure 2.10: MAIN
\includegraphics[width=\textwidth ]{fig/recipes/LearningHARK-separation-ghdss.png}
Figure 2.11: MAIN_LOOP (後処理なし)
\includegraphics[width=\textwidth ]{fig/recipes/LearningHARK-separation-hrle.png}
Figure 2.12: MAIN_LOOP (後処理あり)

このネットワークファイルを実行すると,2話者(正面,左45度)を 分離し sep_0.wav,sep_1.wav の様にインデックス付きの ファイル名で保存していく.

Discussion

以下に目的別のネットワーク作成方法を示す.

オフライン・オンライン

:
オンラインで分離処理を行いたい場合には,音声の入力を AudioStreamFromWave モジュールから AudioStreamFromMic モジュールへ変更すれば良い.

音源方向を推定する・指定する

:
GHDSS モジュールの INPUT_SOURCES に LocalizeMUSIC モジュールの 出力を接続すれば音源方向の推定結果を用いた音源分離を行う. ConstantLocalization モジュールの出力を接続すれば指定した 方向にある音源の音のみを分離することができる.なお,LocalizeMUSIC の出力を SaveSourceLocation モジュールを使ってファイルに保存して おけば, LoadSourceLocation モジュールでそのファイルを読み込むこと もできる.

実測の伝達関数・マイク位置から計算した伝達関数

:
実測の伝達関数を用いる場合は,TF_CONJ を DATABASE にして, TF_CONJ_FILENAME に伝達関数のファイル名を指定する. マイク位置から計算した伝達関数を用いる場合は TF_CONJ を CALC にして, MIC_FILENAME にマイク位置を記述したファイル名を指定する. Kinect 以外のデバイスに変更するなど マイクロホンアレイのマイク配置が変更になる場合には,定位用・ 分離用伝達関数を別途用意する必要がある.

サンプルはあらかじめ各パラメータをチューニングしてあるため, 異なる環境では音源分離性能が劣化する可能性がある.チューニングの 方法については,「音源分離」 を参照されたい.

See Also

伝達関数やマイク配置を記述したファイルについては, HARK ドキュメントのファイルフォーマットの章を参照されたい. うまく分離できない場合には, 「うまく分離できていないけどどうすればいいの?」 を参照されたい. 音源分離は音源定位のあとに行われるため,録音や音源定位など 前の段階がきちんと動作しているかを確認することが重要である. 録音や音源定位に関しては, 「はじめての録音」, 「はじめての音源定位」や 「うまく録音できない」, 「うまく定位できない」 が役に立つだろう.