ir::GPDSPWaveNode class

波形ノードを表す抽象クラス

GPDSPWaveNode クラスは, さまざまな波形を合成して出力する波形ノードを表す抽象クラスです.

あらかじめ指定された解像度で波形バッファを計算しておき演算時に参照する方法と, 演算時に波形を逐次計算する方法を選択することができます.

波形を合成して出力する各種ノードを表す具象クラスは, GPDSPWaveNode クラスを継承し, getName(), getWave(), fillWave() 関数を実装します.

Base classes

class GPDSPInputtableNode
入力ターミナルを持つノードを表す抽象クラス
class GPDSPOutputtableNode
出力ターミナルを持つノードを表す抽象クラス
class GPDSPRewindableNode virtual
巻き戻し可能なノードを表すインターフェースクラス

Derived classes

class GPDSPSawtoothWaveNode
鋸波ノードを表す具象クラス
class GPDSPSinWaveNode
サイン波ノードを表す具象クラス
class GPDSPSquareWaveNode
矩形波ノードを表す具象クラス
class GPDSPTriangleWaveNode
三角波ノードを表す具象クラス

Constructors, destructors, conversion operators

GPDSPWaveNode(int rate) protected explicit noexcept
コンストラクタです.
~GPDSPWaveNode(void) noexcept protected pure virtual
デストラクタです.

Public functions

int getRate(void) const noexcept
サンプリングレートを取得します.
GPDSPError setResolution(GPDSPFloat resolution) noexcept
解像度を設定します.
GPDSPFloat getResolution(void) const noexcept
解像度を取得します.
GPDSPError fixate(void) virtual noexcept
入力ターミナルを2つと, 出力ターミナルを1つ生成します.
void invalidate(void) virtual noexcept
入出力の演算結果を無効化し, 再演算を要求します.
GPDSPError prepare(void) virtual noexcept
演算前の準備をします.
GPDSPError process(void) virtual noexcept
演算を行います.
void rewind(void) virtual noexcept
波形バッファの位相を先頭に再初期化します.
int getCountI(void) const noexcept
入力ターミナルの個数を取得します.
GPDSPError setNameI(int index, std::string const& what) noexcept
入力ターミナルの名前を設定します.
GPDSPError getNameI(int index, std::string* what) const noexcept
入力ターミナルの名前を取得します.
GPDSPError setLinkPositiveI(int index, GPDSPOutputtableNode const* from, int which) noexcept
入力ターミナルの非反転入力のノード接続を設定し, モードを GPDSPMODE_POSITIVE に変更します.
GPDSPError setLinkNegativeI(int index, GPDSPOutputtableNode const* from, int which) noexcept
入力ターミナルの反転入力のノード接続を設定し, モードを GPDSPMODE_NEGATIVE に変更します.
GPDSPError setLinkConstantI(int index, GPDSPFloat constant) noexcept
入力ターミナルの定数入力の定数値を設定し, モードを GPDSPMODE_CONSTANT に変更します.
GPDSPError getModeI(int index, GPDSPMode* mode) const noexcept
入力ターミナルのモードを取得します.
GPDSPError getLinkI(int index, GPDSPOutputtableNode const** from, int* which) const noexcept
入力ターミナルのモードが GPDSPMODE_POSITIVEGPDSPMODE_NEGATIVE の場合に, ノード接続を取得します.
GPDSPError getLinkI(int index, GPDSPFloat* constant) const noexcept
入力ターミナルのモードが GPDSPMODE_CONSTANT の場合に, 定数値を取得します.
GPDSPError clearLinkI(int index) noexcept
入力ターミナルのノード接続と定数値を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPMode mode) noexcept
入力ターミナルのノード接続と定数値を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPOutputtableNode const* from, int which) noexcept
入力ターミナルのノード接続を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPOutputtableNode const* from) noexcept
入力ターミナルのノード接続を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPFloat constant) noexcept
入力ターミナルの定数値を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(void) noexcept
すべての入力ターミナルのノード接続と定数値を解除し, モードを GPDSPMODE_NONE に変更します.
GPDSPError getValueI(int index, GPDSPFloat* value) const noexcept
入力ターミナルの値を取得します.
int findNameI(std::string const& what) const noexcept
引数に指定された名前を持つ入力ターミナルを検索します.
int findModeI(GPDSPMode mode) const noexcept
引数に指定されたモードを持つ入力ターミナルを検索します.
int findLinkI(GPDSPOutputtableNode const* from, int which) const noexcept
引数に指定されたノード接続を持つ入力ターミナルを検索します.
int findLinkI(GPDSPOutputtableNode const* from) const noexcept
引数に指定されたノード接続を持つ入力ターミナルを検索します.
int findLinkI(GPDSPFloat constant) const noexcept
引数に指定された定数値を持つ入力ターミナルを検索します.
int getCountO(void) const noexcept
出力ターミナルの個数を取得します.
GPDSPError setNameO(int index, std::string const& what) noexcept
出力ターミナルの名前を設定します.
GPDSPError getNameO(int index, std::string* what) const noexcept
出力ターミナルの名前を取得します.
GPDSPError getValueO(int index, GPDSPFloat* value) const noexcept
出力ターミナルの値を取得します.
int findNameO(std::string const& what) const noexcept
引数に指定された名前を持つ出力ターミナルを検索します.

Public static functions

static GPDSPFloat defaultResolution(void) noexcept
デフォルトの解像度を取得します.

Protected functions

char const * getName(void) const noexcept pure virtual
波形バッファの名前を取得します.
GPDSPFloat getWave(GPDSPFloat phase) const noexcept pure virtual
引数に指定された位相に対応する, 波形の値を取得します.
void fillWave(std::vector<std::pair<GPDSPFloat, GPDSPFloat>>* wave) const noexcept pure virtual
引数に指定された波形バッファに対して, 1波長分の波形の値を計算して書き込みます.
GPDSPError setCountI(int count, std::string const& what) noexcept
入力ターミナルの個数と名前を設定します.
GPDSPError appendI(std::string const& what) noexcept
引数に指定された名前を持つ入力ターミナルを追加します.
GPDSPError insertI(int index, std::string const& what) noexcept
引数に指定された名前を持つ入力ターミナルを挿入します.
GPDSPError removeI(int index) noexcept
入力ターミナルを削除します.
void clearI(void) noexcept
すべての入力ターミナルを削除します.
GPDSPError setCountO(int count, std::string const& what) noexcept
出力ターミナルの個数と名前を設定します.
GPDSPError setValueO(int index, GPDSPFloat value) noexcept
出力ターミナルの値を設定します.
GPDSPError appendO(std::string const& what) noexcept
引数に指定された名前を持つ出力ターミナルを追加します.
GPDSPError insertO(int index, std::string const& what) noexcept
引数に指定された名前を持つ出力ターミナルを挿入します.
GPDSPError removeO(int index) noexcept
出力ターミナルを削除します.
void clearO(void) noexcept
すべての出力ターミナルを削除します.

Function documentation

ir::GPDSPWaveNode::GPDSPWaveNode(int rate) explicit protected noexcept

コンストラクタです.

解像度を defaultResolution() に設定し, リソースを初期化します.

Parameters
rate in サンプリングレート > 0

ir::GPDSPWaveNode::~GPDSPWaveNode(void) noexcept pure virtual protected

デストラクタです.

何もしません.

int ir::GPDSPWaveNode::getRate(void) const noexcept

サンプリングレートを取得します.

Returns 現在のサンプリングレート

GPDSPError ir::GPDSPWaveNode::setResolution(GPDSPFloat resolution) noexcept

解像度を設定します.

resolution 引数に (0.0, +INFINITY) の範囲の値を設定すると, サンプリングレートと解像度に応じた波形バッファがあらかじめ作成され, 演算時には波形バッファを参照し直線補完にて値を求めます.

resolution 引数に +INFINITY を設定すると波形バッファを作成することなく, 演算時に値を逐次計算して求めます.

コンストラクタのサンプリングレート引数に 0 以下の値が設定されているとき, この関数は失敗します.

Parameters
resolution in 設定する解像度 (0.0, +INFINITY]
Returns
GPDSPERROR_OK 正常
GPDSPERROR_NO_MEMORY メモリが不足している
GPDSPERROR_INVALID_STATE 不正な状態
GPDSPERROR_INVALID_PARAM 不正なパラメータ
GPDSPERROR_FAILED 失敗

GPDSPFloat ir::GPDSPWaveNode::getResolution(void) const noexcept

解像度を取得します.

Returns 現在の解像度

GPDSPError ir::GPDSPWaveNode::fixate(void) virtual noexcept

入力ターミナルを2つと, 出力ターミナルを1つ生成します.

Returns
GPDSPERROR_OK 正常
GPDSPERROR_NO_MEMORY メモリが不足している

GPDSPError ir::GPDSPWaveNode::prepare(void) virtual noexcept

演算前の準備をします.

何もしません.

Returns
GPDSPERROR_OK 正常 (準備を完了)

GPDSPError ir::GPDSPWaveNode::process(void) virtual noexcept

演算を行います.

Returns
GPDSPERROR_OK 正常 (演算を完了)
GPDSPERROR_WAIT データフロー入力待ち
GPDSPERROR_INVALID_RANGE 範囲外のパラメータ

static GPDSPFloat ir::GPDSPWaveNode::defaultResolution(void) noexcept

デフォルトの解像度を取得します.

Returns
+INFINITY デフォルトの解像度

char const * ir::GPDSPWaveNode::getName(void) const noexcept pure virtual protected

波形バッファの名前を取得します.

Returns
NULL [返却禁止]
"" [返却禁止]
その他 波形バッファの名前

GPDSPFloat ir::GPDSPWaveNode::getWave(GPDSPFloat phase) const noexcept pure virtual protected

引数に指定された位相に対応する, 波形の値を取得します.

Parameters
phase in 位相 [0.0, 1.0)
Returns 波形の値 [-1.0, +1.0]

void ir::GPDSPWaveNode::fillWave(std::vector<std::pair<GPDSPFloat, GPDSPFloat>>* wave) const noexcept pure virtual protected

引数に指定された波形バッファに対して, 1波長分の波形の値を計算して書き込みます.

(*wave)[N].first に対して波形の値を設定し, (*wave)[N].second は変更してはいけません. また, *wave のサイズを変更したり, *wave を解放してはいけません.

Parameters
wave in/out 波形バッファ