14.3.2 オンライン音源定位

14.3.2.1 実行方法

まずは, Kinect をコンピュータの USB ポートに接続しよう。 そして次のコマンドを実行しよう。

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

上記のように Kinect と表示されれば、正しく接続されている。 Kinect の左側が 1 なので、この場合のデバイス名は plughw:1 である。 もしデバイス名が plughw:1 でない場合は, demo.sh の DEVICE の行を編集しよう.

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

> ./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.10 に主要なパラメータを示す.

Table 14.11: パラメータ表

ノード名

パラメータ名

設定値

MAIN_LOOP

LENGTH

int 

512

 

ADVANCE

int 

160

 

SAMPLING_RATE

int 

16000

 

A_MATRIX

string 

ARG1

 

DOWHILE

bool 

(空欄)

LocalizeMUSIC 

NUM_CHANNELS

int 

4

 

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 

-90

 

MAX_DEG

int 

90

 

LOWER_BOUND_FREQUENCY

int 

300

 

HIGHER_BOUND_FREQUENCY

int 

2700

 

DEBUG

bool 

false