gen~ オペレータ
gen~ オペレータ
次の Gen オペレータは gen~ オブジェクト特有のもので、オーディオ領域で処理を行います。
Buffer
- buffer :外部の名前付き buffer~ オブジェクトを参照します。第1アーギュメントでは、gen パッチャー内で他のオブジェクト(peek、poke など)からデータを参照される場合に用いられる名前を指定します。第2アーギュメントはオプションで、参照したい外部の buffer~ オブジェクトの名前を指定します(第2アーギュメントがない場合、第1アーギュメントの名前がこれに用いられます)。第1アウトレットは buffer の長さ(サイズ)をサンプル数単位で出力します。第2アウトレットはチャンネル数を出力します。このオペレータは GenExpr では利用できません。
- channels : data オブジェクトや buffer オブジェクトのチャンネル数(訳注:原文では「長さ(サンプル単位)」となっていますが、誤植と思われます。gen~ のヘルプパッチでは「チャンネル数」となっています)。第1アーギュメントは Gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなくてはなりません。このオペレータは GenExpr では利用できません。
- cycle : 補間を行うオシレータで、波形の1サイクルを繰り返し読み出します。 波形として buffer または data が指定されない場合、内部のサイン波のテーブルが使用されます。デフォルトでは、これは frequency という入力で駆動されますが、 @index アトリビュートが 'phase' にセットされている場合、代わりに phase 入力で駆動することもできます。GenExpr では組み込まれたサイン波のウェーブテーブルのみ使用できます。
- data : サンプルデータの配列(64ビット浮動小数点数)を格納するもので、これをサンプリング、ウェーブテーブル・シンセシスなどのような目的で使用することができます。第1アーギュメントは、gen パッチャー内の他のオブジェクト(peek 、poke など)からデータを参照する場合に用いられる名前を指定します。第2アーギュメントでは配列の長さ(デフォルトでは 512 サンプルになります)を指定します。第3アーギュメントはオプションですが、チャンネル数を指定します(デフォルトでは 1、最大16です)。第1アウトレットはバッファの長さをサンプル数単位で出力します。第2アウトレットはチャンネル数を出力します。このオペレータは GenExpr では利用できません。
- dim : data オブジェクトや buffer オブジェクトの長さ(サンプル単位)。第1アーギュメントは gen パッチャー内になる data オブジェクト、または buffer オブジェクトの名前でなければなりません。このオペレータは GenExpr では利用できません。
- lookup : シグナルをインデックスとして data オブジェクトや buffer オブジェクトの内容を読み出し、ウェーブシェイピングを行います。第1アーギュメントは、gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメント(省略された場合には第2インレット)では、どのチャンネルを使用するかを指定します。入力シグナルの -1 〜 1 の範囲が data あるいは buffer の全体の長さに対してマッピングされます。その場合、線形補間が行われます。最後のインレットではチャンネルオフセット(デフォルトは0)を指定します。このオペレータはGenExpr では利用できません。
- nearest :data オブジェクトや buffer オブジェクトをマルチチャンネルで調べます(補間は行いません)。第1アーギュメントは gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメントでは出力チャンネルの数を指定します。入力の位相の範囲は 0 〜 1で、この範囲を超えた場合はラップされます。最後のインレットではチャンネルオフセット(デフォルトは0)を指定します。このオペレータは GenExpr では利用できません。
- peek : data オブジェクトや buffer オブジェクトから値を読み出します。第1アーギュメントは gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメント(省略された場合には第2インレット)では、どのチャンネルを使用するかを指定します。第1インレットでは、読み出しを行うサンプルのインデックスを指定します(この際、補間は行われません)。インデックスが範囲を超えた場合、0 を返します。最後のインレットではチャンネルオフセット(デフォルトは0)を指定します。このオペレータは GenExpr では利用できません。
- poke : data オブジェクトや buffer オブジェクトに値を書き込みます。第1アーギュメントは gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメント(省略された場合には第3インレット)では、どのチャンネルを使用するかを指定します(デフォルトは 1です)。第1インレットでは書き込む値を指定し、第2インレットでは書き込みを行う data あるいは buffer のサンプルのインデックスを指定します。インデックスが範囲を超えた場合、値の書き込みは行われません。このオペレータは GenExpr では利用できません。
- sample : data オブジェクトや buffer オブジェクトのマルチチャンネル・ルックアップを行います。その際、線形補間が行われます。第1アーギュメントは gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメントでは、出力チャンネルの数を指定します。最後のインレットではチャンネルオフセット(デフォルトは0)を指定します。このオペレータは GenExpr では利用できません。
- splat : data オブジェクトや buffer オブジェクトの中の値に入力値をオーバーダブ(ミキシング合成)します。その際、線形補間が行われます。第1アーギュメントは gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメント(省略された場合には第3インレット)では、どのチャンネルを使用するかを指定します(デフォルトは 1です)。第1インレットは書き込む値を指定し、第2インレットの値の小数部分はdata や buffer の位相(phase)を指定します(インデックスが領域を超えた場合、値はラップされます)。splat はサンプル間を線形補正して書き込みを行い、新しい値と既に存在する値を合算(オーバーダビング)します。このオペレータは GenExpr では利用できません。
- wave : data オブジェクトや buffer オブジェクトを使ったウェーブテーブル・シンセシスを行います。第1アーギュメントは gen パッチャー内にある data オブジェクト、または buffer オブジェクトの名前でなければなりません。第2アーギュメント(省略された場合には第3インレット)では、どのチャンネルを使用するかを指定します(デフォルトは 1です)。第1インレットは位相(0.〜1.) を指定し、第2と第3インレットでは、data あるいは buffer の中のサンプル位置の開始点と終了点を指定します。最後のインレットでは、チャンネルオフセット(デフォルトは 0 です)を指定します。このオペレータは GenExpr では利用できません。
変換
- atodb : 線形の振幅をデシベル(dB) 値に変換します。
- dbtoa : デシベル(dB) 値を線形の振幅に変換します。
- ftom : ヘルツ (Hz) 単位で与えられる周波数を MIDI ノートナンバ (0 - 127)に変換します。小数部分を含むノートナンバもサポートされます。オプションのアーギュメントを追加すると、基本となるチューニングの周波数(デフォルトは440)を設定します。
- mstosamps : ミリ秒単位の時間をサンプル数に変換します。
- mtof : MIDI ノートナンバ (0 - 127)note number (0-127) をヘルツ (Hz) 単位の周波数に変換します。小数部分を含むノートナンバもサポートされます。オプションのアーギュメントを追加すると、基本となるチューニングの周波数(デフォルトは440)を設定します。
- sampstoms : サンプル数で表される時間をミリ秒に変換します。
Dsp
- fixdenorm : このオペレータはデノーマル(非正規)な数を探索して、それを 0 に置き換えます。デノーマル、あるいはサブノーマルな値は 0 に非常に近い浮動小数点数(アンダーフローギャップを満たすもの)です。デノーマルな値の計算は最大100倍程度の付加が生じるため、これを 0 に置き換えることは、しばしば有益な結果をもたらします。デノーマルは、フィルタ、ディレイ、指数的なディケイのような乗算を伴うフィードバックループで生じやすいものです。デノーマルな数の探索は、ビットマスクに基づいて行われます。gen~ のフィードバック・オペレータ(delay、history)では、入力シグナルに対して、デフォルトでこの fixdenorm が適用されるということを覚えておいて下さい。
- fixnan : このオペレータはNaNを0で置き換えます。NaN(非数値)とは、0による除算などによって生じる未定義あるいは数値表現が不可能な浮動小数点値のことです。NaNによる計算を行ってもまたNaNになるだけです。そのため、これを0に置き換えた方が良いケースは頻繁に起こります。gen~ の 除算やモジュロ演算を行うオペレータでは、デフォルトでNaN が生じないよう保護されているということを覚えておいて下さい。
- isdenorm : このオペレータはデノーマル(非正規)な値を探索し、入力がデノーマルなら1を、そうでない場合は 0を消します。デノーマル、あるいはサブノーマルな値は 0 に非常に近い浮動小数点数(アンダーフローギャップを満たすもの)です。デノーマルな値の計算は最大100倍程度の付加が生じるため、これを 0 に置き換えることは、しばしば有益な結果をもたらします。デノーマルは、フィルタ、ディレイ、指数的なディケイのような乗算を伴うフィードバックループで生じやすいものです。デノーマルな数の探索は、ビットマスクに基づいて行われます。gen~ のフィードバック・オペレータ(delay、history)では、入力シグナルに対して、デフォルトで fixdenorm 処理が適用されるということを覚えておいて下さい。
- isnan : このオペレータは NaNの出現を監視し、入力が NaN であれば1を、そうでない場合は 0 を返します。NaN(非数値)とは、0による除算などによって生じる未定義あるいは数値表現が不可能な浮動小数点値のことです。NaNによる計算を行ってもまたNaNになるだけです。そのため、これを0に置き換えた方が良いケースは頻繁に起こります。gen~ の 除算やモジュロ演算を行うオペレータでは、デフォルトでNaN が生じないよう保護されているということを覚えておいて下さい。
- samplerate : カレント(訳注:現在の処理動作での)サンプリングレート。
フィードバック(Feedback)
- delay : シグナルを一定時間(サンプル数で指定します)だけ遅延させます。第1アーギュメントでは最大ディレイタイム(サンプル数で指定、デフォルト値は 512)を、第2アーギュメントではタップ数(インレット/アウトレットのペアの数、デフォルト値は 1 )を指定します。第1インレットではディレイされるシグナルを受け取ります。他のインレットではタップ毎にディレイタイムを指定します。@feedback が 1の場合、history オペレータのように(また、delay~とは異なり)、ディレイされたシグナル入力はフィードバック接続されます。シグナル入力にはデノーマル保護が自動的に適用されます。一方で、最小ディレイタイムは1サンプル増加することになります。@interp none あるいは @interp setp では、出力の補間は行われません。@interp linear(デフォルト値)、@interp cosine、@interp cubic、@interp spline では出力に補間が行われます。@interp cubic と @interp spline では最小ディレイタイムは1サンプル増加します。現在の所、GenExpr では delay はサポートされていない点に注意して下さい。
- history : history オペレータは 1サンプルのディレイを挿入することにより、genパッチャー内でのフィードバックを可能にします。第1アーギュメントは、オプションとして与えることができるhistory オペレータの名前で、これによりパラメータを外部から与えることができるようになります。第2アーギュメントではhistoryに格納される初期値(デフォルトは0です)を指定します。history への入力に際しては、デノーマルな値に対する保護が自動的に適用されます。
フィルタ(Filter)
- change : 入力されたサンプル値と1つ前のサンプル値の差を調べて、増減を示す値を返します。入力値が増加している場合は 1、減少している場合は -1、変化していない場合は 0 になります。
- dcblock : DC(直流成分)を取り除くための1ポールハイパスフィルタ。次のような GenExpr と等価です。
y = in1 - x1 + y1 * 0.9997;
x1 = history(in1);
y1 = history(y);
out1 = y;
- delta : 入力されたサンプル値と1つ前のサンプル値の差を返します。
- *=, mulequals : このオブジェクトは、格納された値と入力値を掛け合わせて出力し、同時にその値を内部に格納します。これはサンプルレートで処理されるため、この値がすぐに非常に大きな値、あるいは非常に小さな値になる可能性があります。掛け合わせる値は第1インレット、あるいは第1アーギュメントで指定します。右端のインレットに 0 以外の値を送信すると、内部に格納された計算結果の値を最小値(minimum)にリセットすることができます。最小値はデフォルトでは 0になっていますが、@min アトリビュートによって変更することができます。また、オプションとして @max アトリビュートを与えることにより、最大値(maximum)を指定することができます。この場合、値は最大値でラップされます。
- phasewrap :値の範囲を -pi と pi の間にラップします。
- +=, accum, plusequals : このオブジェクトは、入力値に格納された値を加算して出力し、同時にその値を内部に格納します。これはサンプルレートで処理されるため、この合計値がすぐに非常に大きな値になる可能性があります。加算する値は第1インレット、あるいはアーギュメントで指定します。右端のインレットに0以外の値を送信すると、内部に格納された値は最小値(minimum)にリセットすることができます。最小値はデフォルトでは0になっていますが、@min アトリビュートによって変更することができます。また、オプションとして @max アトリビュートで最大値(maximum)を指定することができます。この場合、値は最大値でラップされます。
- sah : 第1インレットは「インプット」として、第2インレットは「コントロール」として働きます。コントロールの値がスレッショルドの値以下からスレッショルドの値を超えるように変化した場合にインプットからの値がサンプリングされます。このサンプリングされた値は次にコントロールの変化が起きるまで持続して出力され、その時点で次のサンプリングが行われます。デフォルトのスレッショルドの値は0ですが、最終インレットまたはアーギュメントでこの値を指定することができます。@init アトリビュートは比較される値の初期値(デフォルトでは0です)を設定します。
ルーティング(Routing)
- gate : MSPの gate~ オブジェクトと同様なものです。出力の数(デフォルトは1です)を決定するためのアーギュメントを取り、右インレットからの入力シグナルを出力する場所を左インレットへの値(int:整数値)によって選択することができます。左インレットに0または負の値が与えられた場合には何も出力しません。アウトレットの数より大きい値が与えられた場合には最後のアウトレットが選択されます。gate~ と同様、選択されなかったアウトレットからは0が出力されます。このオペレータは GenExprでは使用できません。
- selector : MSPの selector~ オブエジェクとと同様なものです。Gen パッチャーの内部では、選択される入力の個数(デフォルトは1です)を決定するためのアーギュメントを取ります。GenExprでは、選択される入力の個数はアーギュメントの個数で決定されます。第1インレットで、残りのどのインレットからの入力を出力するかを選択することができます。第1インレットに0または負の値が与えられた場合には、ゼロシグナルな出力されます。選択される入力の個数より大きな値が与えられた場合には最後の入力が選択されます。
波形(Waveform)
- noise : ランダムな数値を生成します。
- phasor : 帯域を限定しないノコギリ波シグナルを生成します。これはオーディオシグナルのLFOとして、またサンプル単位での正確なタイミング/制御シグナルとして使用できます。
- train : train~ はパルスシグナルを生成し、その周期をサンプル単位で指定できます。第1の入力でパルスの周期を(サンプル数で)設定し、第2の入力でパルス幅を設定します(デフォルトでは0.5になります)、第3インレットでは「オン」になる部分の位相を設定します(デフォルトは 0. になります)。
- triangle : 三角波/傾斜ウェーブテーブルによってインプットのピーク値の位相オフセットを変化させます。位相の範囲は 0 〜 1です(この外側の値はラップされます)デューティサイクルが0の場合には減少するノコギリ波、1の場合には増加するノコギリ波、0.5の場合には三角波の波形が生成されます。出力される値は常に0と1の間に制限されます。