本章では,FlowDesigner と HARK のノード群で使用するデータ型について述べる. HARK でデータ型を意識する必要があるのは,以下の 2 つのケースである.
ノードのプロパティ設定
ノード同士の接続(ノード間通信)
ノードのプロパティ設定で用いるデータ型
ノードのプロパティとして現状で指定できるデータ型は, 以下の 5 種類である.
型 |
意味 |
データ型レベル |
整数型 |
基本型 |
|
単精度浮動小数点型 |
基本型 |
|
文字列型 |
基本型 |
|
論理型 |
基本型 |
|
オブジェクト型 |
FlowDesigner 固有型 |
|
サブネットパラメータ型 |
FlowDesigner 固有型 |
int , float , string , bool , については,C++ の基本データ型をそのまま 利用しているので,仕様は C++ に準じる.Object ,subnet_param について は,FlowDesigner 固有のデータ型である.Object は, FlowDesigner 内部 の Object 型を継承しているクラスとして定義されるデータ型の総称となって いる.HARK では,プロパティとして指定できる Object は,Vector もしく は Matrix であるが,後述のように基本型以外は Object 型を継承している ため,Vector や Matrix のようにテキスト形式での記述が実装されていればプロパティとして指定することができる. 基本型であっても,Object 型を継承したオブジェクトを利用することで(例えば $<$Int 1 $>$など), Object として指定することも可能である.subnet_param は, 複数のノード間で一つのパラメータをラベルを用いて共有する際に用いら れる特殊なデータ型である.
ノード同士の接続の際に用いるデータ型
ノードの接続(ノード間通信)は, 異なるノードのターミナル(ノードの左右に黒点として表示される)を FlowDesigner の GUI 上で線で 結ぶことによって,実現される.この際に用いられるデータ型は,以下の通りである.
型 |
意味 |
データ型レベル |
Any 型 |
FlowDesigner 固有型 |
|
整数型 |
基本型 |
|
単精度浮動小数点実数型 |
基本型 |
|
倍精度浮動小数点実数型 |
基本型 |
|
単精度浮動小数点複素数型 |
基本型 |
|
倍精度浮動小数点複素数型 |
基本型 |
|
文字型 |
基本型 |
|
文字列型 |
基本型 |
|
論理型 |
基本型 |
|
配列型 |
FlowDesigner オブジェクト型 |
|
行列型 |
FlowDesigner オブジェクト型 |
|
整数型 |
FlowDesigner オブジェクト型 |
|
単精度浮動小数点実数型 |
FlowDesigner オブジェクト型 |
|
文字列型 |
FlowDesigner オブジェクト型 |
|
複素数型 |
FlowDesigner オブジェクト型 |
|
論理型(真) |
FlowDesigner オブジェクト型 |
|
論理型(偽) |
FlowDesigner オブジェクト型 |
|
オブジェクト型(nil) |
FlowDesigner オブジェクト型 |
|
オブジェクト参照型 |
FlowDesigner 固有型 |
|
マップ型 |
HARK 固有型 |
|
音源情報型 |
HARK 固有型 |
any はあらゆるデータ型を含む抽象的なデータ型であり,FlowDesigner 固有 で定義されている. int , float , double , complex<float> , complex<double> , char , string , bool は,C++ の基本データ型を利用している.これらの仕様は対応する C++のデータ 型の仕様に準ずる.基本型を,Object のコンテキストで使おうとすると自動 的に GenericType<T> に変換され,Int , Float のよう に,Object を継承した先頭が大文字になったクラスとして扱うことができる. ただし,String , Complex は,GenericType ではなく,それぞ れ std:string, std:complex に対するデファインとして定義されているが,同 様にstring , complex をObject 型として使う際に用いられる.このように基 本型に対して,FlowDesigner の Object を継承する形で定義されているデー タ型をFlowDesigner オブジェクト型と呼ぶものとする.TrueObject , FalseObject , nilObject もそれぞれ,true, false, nil に対応する Object とし て定義されている.FlowDesigner オブジェクト型で最もよく使われるもの は,Vector , Matrix であろう.これらは,C++ の STL を継承し た FlowDesigner オブジェクト型であり,基本的には C++ の STL の対応する データ型の仕様に準ずる.
ObjectRef は,オブジェクト型へのスマートポインタとして実現されてい る FlowDesigner 固有のデータ型であり,Vector , Matrix , Map の要素とし て用いられることが多い.
Map も,C++ の STL を継承しているが FlowDesigner ではなく,HARK 固有の データ型である.Source は,音源情報型として定義される HARK 固有のデー タ型である.
は,FlowDesigner 上で 型を知りたいノードのターミナルにカーソルをフォーカスする と, FlowDesigner の最下部に表示される.図 4.1 に,AudioStreamFromMic ノードの AUDIO ターミナルにマウスをフォーカ スした例を示す.FlowDesigner の最下部にAUDIO (Matrix<float> Windowed multi-channel sound data. A row index is a channel, and a column index is time. が表示さ れ,AUDIO ポートが Matrix<float> をサポートしていること,窓掛けされた音声波 形を出力すること,行列の行がチャネルを表し,列が時刻を表していること がわかる.
一般的に,ノードのターミナル同士は,データ型が同じである,もしくは 受け側のターミナルが,送り側のターミナルのデータ型を包含していれば, 正常に接続することができ,黒矢印で表示される.この条件を満たさないターミナル同士を 接続した場合は,警告の意味で 赤矢印で表示される.
以降の節では,上述について基本型,FlowDesigner オブジェクト型, FlowDesigner 固有型 HARK 固有型に分けて説明を行う.