14.3.2 オンライン音源定位

14.3.2.1 実行方法

まずは, Microcone を計算機の USB ポートに接続しよう。 そして次のコマンドを実行しよう。

> cat /proc/asound/cards 
 0 [AudioPCI       ]: ENS1371 - Ensoniq AudioPCI
                      Ensoniq AudioPCI ENS1371 at 0x2080, irq 16
 1 [Microcone      ]: USB-Audio - Microcone
                      DEV-AUDIO Microcone at usb-0000:02:03.0-1, high speed

上記のように Microcone と表示されれば、正しく接続されている。 Microcone の左側が 1 なので、この場合のデバイス名は plughw:1 である。 localization_online_microcone.n を flowdesigner で開き、 AudioStreamFromMic の DEVICE を plughw:1 に設定しよう。

音源定位の実行は以下のコマンドで行える。

> ./demo.sh online

14.9 に示すような出力と, 音源定位結果が表示されるはずだ.

 UINodeRepository::Scan()
 Scanning def /usr/lib/flowdesigner/toolbox
 done loading def files
 loading XML document from memory
 done!
 Building network  :MAIN
 TF was loaded by libharkio2.
 1 heights, 72 directions,1 ranges,7 microphones,512 points
 Source 0 is created.
 Source 0 is removed.
  以下略
Figure 14.10: オンライン音源定位の実行例.

14.3.2.2 実行結果の確認

うまく定位できないときは, オフライン音源定位の場合と同じファイルのチェックを行おう。 ほかにも,レシピ: うまく定位できない を 見て問題を調べよう.

14.3.2.3 ネットワークの解説

本サンプルに含まれるモジュールは,7 個である. MAIN (subnet) に 1 個 MAIN_LOOP (iterator) に 6 個のモジュールがある. MAIN (subnet) と MAIN_LOOP (iterator) を 図 14.11,14.11 に示す. AudioStreamFromMic で音声波形を取り込む。 その出力は SaveWavePCM で音声ファイルに保存される。 同時に MultiFFT でスペクトルに変換もされ,LocalizeMUSIC がフレームごとに音源定位を行う。 それを, SourceTracker で 時間的連続性などを用いてトラッキングし、 DisplayLocalization で音源定位結果を表示する.

\includegraphics{fig/recipes/demo-LocalizationWS8ch-MAIN.png}
Figure 14.11: MAIN (subnet)
\includegraphics{fig/recipes/demo-LocalizationWS8ch-MAIN_LOOP.png}
Figure 14.12: MAIN_LOOP (iterator)

14.11 に主要なパラメータを示す.

Table 14.12: パラメータ表

ノード名

パラメータ名

設定値

MAIN_LOOP

LENGTH

int 

512

 

ADVANCE

int 

160

 

SAMPLING_RATE

int 

16000

 

A_MATRIX

string 

ARG1

 

DOWHILE

bool 

(空欄)

LocalizeMUSIC 

NUM_CHANNELS

int 

8

 

LENGTH

subnet_param 

LENGTH

 

SAMPLING_RATE

subnet_param 

SAMPRING_RATE

 

A_MATRIX

subnet_param 

A_MATRIX

 

PERIOD

int 

50

 

NUM_SOURCE

int 

1

 

MIN_DEG

int 

-180

 

MAX_DEG

int 

180

 

LOWER_BOUND_FREQUENCY

int 

500

 

HIGHER_BOUND_FREQUENCY

int 

2800

 

DEBUG

bool 

false