3.3.1 Linux 版

3.4 に FlowDesigner の概観を示す. 以下の作業で FlowDesigner を起動できる.

> flowdesigner
\includegraphics[width=120mm]{fig/FirstStep/FlowDesignerOverview}
Figure 3.4: FlowDesigner の概観

3.3.1.1 FlowDesigner の基本操作

ノードは,データを処理する処理単位である.最初に ノードの例を図 3.5 に示す. 長方形で囲まれた緑色の部分が,ノードである. このノードの中央には,ノード名が表示される. この例では,PostFilter である.ノード下に表示 される名前 node_Postfilter_1 は,ノードの インスタンス名である.同種のノードが複数ある場合には, ノードのインスタンスを生成した順番に node_Postfilter_2, node_Postfilter_3 と名付けられる. 個々のノードを区別するのに役立つ.

ノードは,処理するデータの入力と出力の口になる ターミナルをそれぞれ複数もつことが可能である. ノードの左右にある黒い点がターミナルである. 左側のターミナルが入力ターミナルで,右側のターミナルが出力 ターミナルである.ターミナルには名前が付けられている場合と 名前が付けられていない場合がある.この例では, 全てのターミナルに名前が付けられている. ノードは,少なくとも1つの出力ターミナルがある. 入力ターミナルは1つも無いこともある.例えば FlowDesigner に 標準で含まれる constant ノードは, 入力がなく出力ターミナルを 1 つ持つ.

\includegraphics[width=120mm]{fig/FirstStep/SampleModule}
Figure 3.5: ノードの概観

複数のノードを配置し,ノードのターミナル同士を接続する ことによって,データの処理の流れを定義する. 接続されてた一連のノードをネットワーク呼ぶ. ネットワークを作成すること自体が,プログラム作成になっている. ネットワークは,ファイルの保存メニューから保存できる. 一度保存すれば,いつでも FlowDesigner でロードできる. 保存したファイルをテキストエディタで開くと XML ライクな記述を 確認できる.慣れればテキストエディタで直接ネットワークを編集する こともできるようになる.

ノードには,プロパティをもつものがあり, プロパティ値を設定することでノードの処理を詳細に指定可能である. プロパティ値の設定には,ノード上にマウスカーソルを移動させ, 左ダブルクリックする.設定ダイアログウィンドウが開き,各種 プロパティ値をキーボードで入力あるいは選択できる.

プロパティ値には値のデータ型あり,データ型と値をペアで設定する必要がある. データ型の詳細は,データ型の章を参考のこと. データ型は,プルダウンメニュー形式の中から選択する. 値は,キーボードから値を入力する場合と,プルダウンメニュー形式で 値を選択する場合がある.

\includegraphics[width=120mm]{fig/FirstStep/SampleProperty}
Figure 3.6: プロパティの概観

3.3.1.2 ノードの操作・ターミナルの接続・プロパティの設定

以下では,具体的なノードの操作方法,ターミナルの接続方法,プロパティの 設定方法を述べる.

以上で,ノードの基本操作の説明を終え,実際に音源定位ネットッワークを構築しながら, ネットワーク構築に必要な基本操作を述べる.

3.3.1.3 はじめてのネットワークの作成

はじめてネットワークを作成する人を対象に, 音源定位ネットワークを構築する例を示す. メインネットワークタブの他に Iteration 用のサブネットワークタブが必要になる. まず,メインタブで音源波形読込部分を構築し,続いて,サブネットワークを作成し, サブネットワーク内に,音源定位部,結果表示部を構築する.

音源波形読込部分のノード配置,接続,プロパティの設定について解説する. FlowDesigner を起動すると,ウィンドウ内右側に MAIN (subnet) というタブが現れる. 始めに,このタブの中で作業を進める. Constant ノードと, InputStream ノードを 図 3.7 のように配置する. タブ内の地の部分を右クリックすると,プルダウンメニューが現れる. その中の New Node 上にマウスカーソルを移動すると, FlowDesigner に 登録されているノード一覧が表示される.ここでは, General カテゴリを 選ぶ.マウスカーソルをそのまま General という表示の上まで移動さる. ここで,プルダウンメニューが 1 段展開され,General カテゴリに登録 されているノードの一覧が表示される.この中に Constant ノードがある. マウスカーソルをそのまま Constant という表示の上まで移動させると, MAIN (subnet) タブに Constant ノードを配置できる. 以後,この様にプルダウンメニューからノードを選択する操作を, 簡略化して,「New Node $\rightarrow $ General $\rightarrow $ Constant」と表記する. 同様に,InputStream ノードを New Node $\rightarrow $ IO $\rightarrow $ InputStream と 辿り,ノードを配置する.

\includegraphics[width=120mm]{fig/FirstStep/tutorial1-1}
Figure 3.7: 2 つのノードを配置した様子

次に Constant ノードと, InputStream ノードを 図 3.8 のように接続する.

\includegraphics[width=120mm]{fig/FirstStep/tutorial1-2}
Figure 3.8: 2 つのノードを接続した様子

次に ノードのプロパティの設定を行う. ここでは, Constant ノードのみ設定する. InputStream ノードには設定可能なプロパティ値がない.

Constant ノードを右クリックすると,プルダウンメニューが現れる. Properties という表示の上にマウスカーソルを移動させ Properties を 左クリックすると,プロパティ設定ダイアログが開く. ダイアログには, Parameters タブ,Comments タブ, Inputs/Ouptuts タブが ある.デフォルトでは Parameters タブが開かれている. Comments タブ, Inputs/Ouptuts タブを使用するこはない.

Parameters タブ内には,NAME,Type,Value という3つの項目がある. NAME は,プロパティ名であり, Type は,そこに設定する値の データ型を表す,Value は,属性に指定する値である. Constant ノードには,設定できるプロパティは1つしかない. VALUE という属性名である. このノードで,ファイル名を表したいので,プロパティの値に ファイル名を tutorial1.wav とする.データ型は string である. 最後にプロパティウンドウの適用を押すことで設定が反映される. 閉じるを押すと設定内容が破棄される. OK を押すと適用を押した後に,閉じると押した動作と等価な処理が 行われる. プロパティウィンドウ表示中は,FlowDesigner の別のウィンドウの操作が 無効状態になっているので,操作へ復帰するには,プロパティ設定を 終える必要がある. 以上でプロパティの設定は完了である. これで音源波形読込部分のネットワークが完成した.

続いて,サブネットワーク作成について述べる. サブネットワークは, FlowDesigner のウィンドウメニュー,Networks から add Iterator を選択して作成する. add Iterator を選択すると,ダイアログウィンドウが起動し, 追加する Iterator タブの名前の入力が促される. デフォルトの LOOP0 でよければ OK ボタンを押す. キャンセルボタンを押すとサブネットワーク作成を中止する.

LOOP0 で OK すると,MAIN (subnet) タブの隣に,LOOP0 という タブが現れ, LOOP0 タブがアクティブになる. このタブの中に音源定位部と結果表示部を構築する.

音源定位部を,ファイルの読込,FFT,MUSIC 法による音源定位,音源追従,定位結果の表示 のためのノードで構築する.以下の手順でノードを配置すると, 図 3.9 のようになる.

New Node -> HARK -> AudioIO      -> AudioStreamFromWave
New Node -> HARK -> MISC         -> MultiFFT 
New Node -> HARK -> Localization -> LocalizeMUSIC 
New Node -> HARK -> Localization -> SourceTracker 
New Node -> HARK -> Localization -> DisplayLocalization 
\includegraphics[width=120mm]{fig/FirstStep/tutorial1-3}
Figure 3.9: 音源定位部分のノードを配置した様子

これらのノードを図 3.10 の様に接続する.

\includegraphics[width=120mm]{fig/FirstStep/tutorial1-4}
Figure 3.10: 音源定位部分のノードを接続した様子

接続が終ったら,ノードのプロパティを設定する. 処理する音声ファイルが16000 [Hz] であることを前提に設定する. AudioStreamFromWave ノードには,LENGTH,ADVANCE,USE_WAIT の3個所のプロパティ値の設定場所がある.LENGTH と ADVANCE は, 音声の分析フレーム長とフレームシフト長を単位サンプルで表している. データ型は int である.デフォルト値 512,160 が設定されており, それぞれ 32 msec, 10 msec に対応している.変更する必要はない. データ型 bool の USE_WAIT にもデフォルト値が設定されており, falseが設定されている.変更する必要はない.

MultiFFT ノードには,LENGTH,WINDOW,WINDOW_LENGTH の 3個所のプロパティ値の設定場所がある.音声の分析フレーム長と 窓関数の種類,窓の長さを単位サンプルで表している. デフォルト値 512,CONJ,512 が設定されており, LENGTH と WINDOW_LENGTH は, 32 msec に対応し, データ型は, int である.CONJ は,分析窓に CONJ 窓を 使うことを指定している.データ型は,string である. これらの値を変更する必要はない.

LocalizeMUSIC ノードは, MUSIC_ALGORITHM, TF_CHANNEL_SELECTION, LENGTH, SAMPLING_RATE, A_MATRIX, ELEVATION, WINDOW, PERIOD, NUM_SOURCE, MIN_DEG, MAX_DEG, LOWER_BOUND_FREQUENCY, UPPER_BOUND_FREQUENCY, SPECTRUM_WEIGHT_TYPE, A_CHAR_SCALING, MANUAL_WEIGHT_SPLINE, MANUAL_WEIGHT_SQUARE, ENABLE_EIGENVALUE_WEIGHT, DEBUG の19個所の プロパティ値の設定場所がある.各パラメータの詳細は LocalizeMUSIC のパラメータの項を参照されたい. 以下は各パラメータの設定例を示す.

SourceTracker ノードは,THRESH,PAUSE_LENGTH,MIN_SOURCE_INTERVAL,DEBUG の 4個所のプロパティ値の設定場所がある.

DisplayLocalization ノードは,LOG_IS_PROVIDED,1個所の プロパティ値設定場所がある.

音源位置のログが欲しいときに, trueにする.データ型は, bool で デフォルト値は falseである. これを変更する必要はない. 以上で,音源定位部のプロパティ設定が完了である.

続いて,Iterator の設定を行う. Iterator は,MAIN (subnet) からサブルーチンのように 使用される.以下の設定を行い MAIN (subnet) との関係を 設定する必要がある.

Iterator に必須な項目は,ネットワークに INPUT と OUTPUT と CONDITION があることである.INPUT はデータの入力部分で, OUTPUT は,データの出力部分である.サブルーチンの入力と 出力と対応付けて考えると理解しやすい.Iterator は,サブルーチン でありながら繰り返し処理を行う構造になっている. そのため,CONDITION つまり繰り返し処理の停止条件を記述 する必要がある.

3.11 のように設定する. INPUT の設定は,入力ターミナル部分で Shift を押下しながら, 左クリックすると,ダイアログが現れ,名前を変更することができる. OK を押すと,設定され,入力部分に赤字で INPUT と表示される. OUTPUT の設定は,出力ターミナル部分で Shift を押下しながら, 左クリックすると,ダイアログが現れ,名前を変更することができる. OK を押すと,設定され,入力部分に青字で OUTPUT と表示される. CONDITION の設定は,出力ターミナル部分で Control を押下しながら, 左クリックすると,設定される.紫色で CONDITION と表示される.

意図しない場所に INPUT,OUTPUT,CONDITION を設定した場合は, これらの文字の上で Shift を押下しながら,左クリックすると, 解除できる.

\includegraphics[width=120mm]{fig/FirstStep/tutorial1-5}
Figure 3.11: 音源定位部分のノードに INPUT,OUTPUT,CONDITION を設定した様子

最後に,subnet と iterator を統合する. MAIN (subnet) タブを押し,MAIN (subnet) のネットワーク表示に戻る. 地を左クリックし, New Node 上にマウスカーソル移動させると, ノードカテゴリ名に新しく subnet という項目ができている. subnet カテゴリ上にマウスカーソル移動させると, LOOP0 という 項目が現れる.ノードを配置するのと同様に LOOP0 上で 左クリックすると, LOOP0 という 1 入力,1 出力のノードが 配置される.つまり,これまでの作業で,LOOP0 (iterator) 内に 記述したサブネットワークを仮想的なノードにしたことになる.

3.12 の様に, InputStream と LOOP0 を接続し, LOOP0 に OUTPUT を設定し, 音源定位ネットワークの完成である.

\includegraphics[width=120mm]{fig/FirstStep/tutorial1-6}
Figure 3.12: 完成した音源定位ネットワーク