Problem
音源定位システムを作ったけれどもうまく定位しない.
Solution
ここでは,定位システムが動作しない場合の典型的な確認方法について述べる.
まずは,うまく録音できないを見て, 録音ができているか確認しよう.
録音ができていれば,次は波形ファイルを使って定位を試してみよう. 波形ファイルは,作成したマイクロホンアレイで録音すればよい. 例えば,10秒間録音して,その間一人で声を出しながらゆっくり マイクロホンアレイのまわりを歩いてみるとよい.
ネットワーク中の AudioStreamFromMic を AudioStreamFromWave に入れ替え れば,音声波形から定位ができる. 定位結果は,SourceTracker の出力に DisplayLocalization を 接続すれば視覚的に確認できる.
この時点でうまく動いていなければ, まずは LocalizeMUSIC の DEBUG を ON にして,MUSIC スペクトル を表示してみよう. 音声がある時間・方向で値が大きくなっているはずである. もしなっていなければ,そもそも伝達関数の計算が怪しい. うまくいっていれば, SourceTracker のパラメータ THRESH を, 音声部分よりは小さく,無音部分よりは大きく設定しよう. これで,音源が定位できる.
その他にも,次のような場合は LocalizeMUSIC のパラメータを調節してみると良い.
NUM_SOURCE を話者数に合わせる.
例えば話者が2名までしかいないと仮定するなら, NUM_SOURCE は 2にすると良い.
MIN_DEG と MAX_DEG を定める.
音源が無いのに定位結果が出る状況では, 壁からの反射やノイズ源 (PCのファンなど)が原因である可能性がある. そのとき,その方向に目的音源が無いと仮定できるなら, この二つのパラメータを使ってその方向からは定位結果が 出力されないように設定できる. 例えばロボットの後ろから話しかけることはないなら, MIN_DEG を -90,MAX_DEG を90 とすれば,正面側のみを定位対象にできる.
ここまでできれば,あとはネットワークファイルを AudioStreamFromMic に戻して,実際のシステムに使ってみよう. MUSIC スペクトルの値は,話者との距離や音量によって異なるので, SourceTracker のパラメータ THRESH の微調整が必要かもしれな い.0.1 - 0.2 ぐらいずつ上げ下げしてみよう. 誤りの定位結果が多いなら THRESH をやや増やし, 声を出しても定位結果が出ないなら THRESH をやや減らそう.
LocalizeMUSIC の伝達関数を測定した環境と音源定位を行うときの環境の 周囲の雑音レベルが異なれば, 性能は劣化してしまう。 例えば、音源定位時に近くにエアコンがある場合にそのエアコンの音源定位結果を ずっと表示してしまう。 そのような場合は,2種類の対策がある。
方向のフィルタリング:
SourceSelectorByDirection を SourceTracker の後段に接続すれば その方向の音源定位結果を捨てることができる。 あるいは、LocalizeMUSIC の MIN_DEG, MAX_DEG を 変更することでも特定方向の音源定位結果を出さないことは可能だ。 目的音源の無い方向がわかっている場合は、これが有効だろう。
雑音相関関数の作成:
事前に雑音を録音しておき、それを LocalizeMUSIC に 与えることで、その雑音による影響を排除した定位が可能となる。 特に目的音より大きなパワーの雑音がある場合などに有効だ。 詳しい方法は 定常雑音を白色化する機能を用いた音源定位 を参照。
Discussion
部屋の残響や話者の声の大きさなどで, 適切なパラメータは変わる. 現在の HARK で定位性能をあげるには, その場でチューニングを行うのが最も確実である. 最も重要なのは THRESH なので,基本的にはそれのみを調節すればよい.
See Also
定位システムを初めて作るときは はじめ ての音源定位 を参照するとよい. HARK ドキュメントの の LocalizeMUSIC と SourceTracker を参照すると,手 法の詳細が分かる. 他にも,音源定位の章には音源定位に関するノ ウハウがある.