見出し画像

max/msp gen~のオペレータ GenExprのメモ・まとめ

fendoapです。

Max for liveをgumroadでリリースしています。



maxmsp gen~のメモです。
gen~のオブジェクトはオペレータといいます。


cycle

cycleはインレットで周波数を入れると波形を出力
第一アウトレットから波形 第二アウトレットから読み出し位置?[0~1]を出力


while文が使える

i = 0
while (i < 10){

 i += 1;

}
out1 = i;

continue とbreakが使える

i = 0
while(i <10000){
  if(i=>100){
     break;
  }
}


>GenExprはオンザフライでコンパイルされるため、プログラミングの間違いを犯し、無限ループを作成するのは簡単です。すべてのgenオブジェクトは無限ループに対する保護を備えているため、無限ループは速度を低下させる可能性がありますが、Maxがスタックしてフリーズすることはありません。

また、多くの場合、GenExprの値は浮動小数点であり、ループカウンターでさえあることに注意してください。浮動小数点数はすべての数を正確に表すことはできません。これを説明するためのちょっとしたファッジファクターが必要になる場合があります。たとえば、次のループは次のとおりです。

浮動小数点の精度のため、<=演算子にもかかわらず、1.0に到達しない可能性があります。代わりに、次のように記述します。


val =  0 ;
for(i = 0 ; i <=  1.04 ; i + =  0.05){
   //
   val + = iを累積します;
}
out  = val;


Data 配列

配列はDataやbufferを使う。
1次元、2次元、3次元配列は次のように指定する。


共通オペレーター

neqp in1とin2が等しくないときはin1を出力 等しい時は0を出力

gt   in1>in2のときは1 そうでないときは0

eq   in1==in2 のときは1 そうでないときは0

eqp  in1==in2のときはin1 そうでないときは0

gte   in1>=in2のときは1 そうでないときは0

gtep  in1>=in2のときはin1 そうでないときは0

gtp   in1>in2のときはin1 そうでないときは0

lt     in1<in2のときは1 そうでないときは0

lte    in1<=in2のときは1 そうでないときは0

ltep   in1<=in2のときはin1 そうでないときは0

ltp    in1<in2のときはin1 そうでないときは0

max   入力された中の最大値 in1とin2の大きいほう

min   入力された中の最小値 in1とin2の小さいほう

neq   in1≠in2のときは1, そうでないときは0

step   in1<in2のときは0, そうでないときは1


Constant: 定数オペレーター


constant    定数を出力

degtorad   π/180

e             eの値

float       floatの定数 floatに変換

halfpi     π/2

int      intの定数 intに変換

invpi      1/π

ln10      ln10

ln2       ln2

log10e    log10e

log2e     log2e

phi       黄金比 (1+√5)/2=1.618…

pi         π 

radtodeg   180/π

sqrt1_2       1/√2

sqrt2         √2

twopi         2π


param   パラメータを設定する。 第一引数は名前 第二引数は初期値

expr     数式を評価する。 入力はin1 in2 in3 出力はout1 out2 out3

pass    何もせずに数字を通す。

in         入力 

out     出力

!        0のとき1 そうでないなら0

&&        in1≠0 かつ in2≠0 のとき1 そうでないなら0

bool      in1≠0のとき1 そうでないなら0

or        in1≠0 または in2≠0 のとき1 そうでないなら0

^^        in1 in2のどちらか一方だけが0でないとき1 そうでないなら0

%        in1/in2のあまり 剰余

+        加算

-               減算

/          除算

absdiff     差の絶対値

cartopol    極座標に変換

*          乗算

neg        符号の反転

poltocar    極座標をデカルト座標に変換

!/          in2/in1

!%         in2/in1のあまり

!-          in2-in1

abs       絶対値

ceil        切り上げ

floor trunc  切り捨て

fract       小数部分

sign      正なら1 負なら-1  0なら0

exp       e^in1

exp2       2^in1

ln         loge in1

log10      log10 in1

log2       log2  in1

pow       in1^in2

sqrt       √in1

clamp clip    [min max]の範囲に制限

fold       [min max]範囲を超えたら折りたたまれる

scale     maxmspオブジェクトと同様

wrap     mspのwrapと同様

switch   in1が≠0のときin2が出力 そうでないならin3を出力

mix   in1とin2をin3に応じて線形補間

smoothstep スカラ補間関数

gen    サブパッチもしくはアブストラクション

setparam サブパッチのパラメータを元パッチからセットする

acos     アークコサイン 返り値はラジアン

acosh 逆双曲線コサイン

asin アークサイン

asinh 逆双曲線サイン

atan アークタンジェント

atan2   (y,x)の座標に対するアークタンジェントを返す 

atanh 逆双曲線タンジェント

cos  コサイン

cosh 双曲線コサイン

degrees  ラジアン→度数

fastcos    おおよそのコサイン ラジアン

fastsin     おおよそのサイン ラジアン

fasttan  おおよそのタンジェント ラジアン

hypot   in1とin2のベクトルの長さを返す

radians    度数→ラジアン

sin   サイン   ラジアン

sinh  双曲線サイン

tan  タンジェント ラジアン

tanh 双曲線タンジェント

noise  ノイズ 乱数発生器

selector 
MSP selector~ オブジェクトに似ています。 Gen パッチャーでは、選択肢の数の引数を取ります (1 つがデフォルトです)。 GenExpr では、選択肢の数は引数の数によって決まります。最初の入力では、残りの入力のどれを出力に送信するかを選択できます。最初の入力にゼロ以下の値を指定すると、出力で信号がゼロになります。選択肢の数より大きい値は、最後の入力を選択します。

gen~オペレーター


buffer     

外部の名前付きbuffer〜オブジェクトを参照します。最初の引数は、gen patcherの他のオブジェクト(peekやpokeなど)でこのデータを参照するための名前を指定します。 2番目のオプションの引数は、参照する外部buffer〜オブジェクトの名前を指定します(省略した場合は、最初の引数名が使用されます)。最初のアウトレットは、バッファーの長さをサンプルで送信します。 2番目のアウトレットはチャネル数を送信します。

channels 


データ/バッファオブジェクトのチャネル数。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。

cycle

正弦波の1サイクルを繰り返し読み取る補間発振器。デフォルトでは、周波数入力によって駆動されますが、@ index属性が 'phase'に設定されている場合は、代わりに位相入力によって駆動できます。

data

サンプリング、ウェーブテーブルシンセシス、およびその他の目的に使用できるサンプルデータ(64ビットフロート)の配列を格納します。最初の引数は、gen patcherの他のオブジェクト(peekやpokeなど)でこのデータを参照するための名前を指定します。 2番目のオプションの引数は、配列の長さを指定します(デフォルトは512サンプル)。 3番目のオプションの引数はチャネル数を指定します(デフォルトは1)。最初のアウトレットは、バッファーの長さをサンプルで送信します。 2番目のアウトレットはチャネル数を送信します。

dim

データ/バッファオブジェクトの長さ(サンプル単位)。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。

index

ウェーブシェイピングのために、信号を使用してデータ/バッファオブジェクトにインデックスを付けます。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数は、出力チャネルの数を指定します。 -1から1の範囲の入力信号は、線形補間を使用して、データ/バッファのフルサイズにマッピングされます。最後の流入口はチャネルオフセットを指定します(デフォルトは0)。

nearest 

データ/バッファオブジェクトのマルチチャネルルックアップ(補間なし)。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数は、出力チャネルの数を指定します。入力位相の範囲は0〜1で、この範囲外でラップします。最後の流入口はチャネルオフセットを指定します(デフォルトは0)。

peek

データ/バッファオブジェクトから値を読み取ります。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数は、出力チャネルの数を指定します。最初の注入口は、読み取るサンプルインデックスを指定します(補間なし)。範囲外のインデックスはゼロを返します。最後の流入口はチャネルオフセットを指定します(デフォルトは0)。

poke

データ/バッファオブジェクトに値を書き込みます。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数(または省略した場合は3番目のインレット)は、使用するチャネルを指定します。最初のインレットは書き込む値を指定し、2番目のインレットはデータ/バッファー内のサンプルインデックスを指定します。インデックスが範囲外の場合、値は書き込まれません。

sample 

データ/バッファオブジェクトの線形補間マルチチャネルルックアップ。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数は、出力チャネルの数を指定します。最後の流入口はチャネルオフセットを指定します(デフォルトは0)。

splat

線形補間されたオーバーダビングを使用して、値をデータ/バッファオブジェクトにミックスします。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数(または省略した場合は3番目のインレット)は、使用するチャネルを指定します。最初のインレットは書き込む値を指定し、2番目のインレットの小数成分はデータ/バッファー内のフェーズ(0..1)を指定します(範囲外のインデックスはラップされます)。 Splatは、サンプル間の線形補間で書き込み、新しい値を既存のデータと混合します(オーバーダビング)。

wave

データ/バッファオブジェクトを使用したウェーブテーブルシンセシス。最初の引数は、genpatcherのデータまたはバッファオブジェクトの名前である必要があります。 2番目の引数は、出力チャネルの数を指定します。最初の注入口はフェーズ(0..1)を指定し、2番目と3番目の注入口はデータ/バッファー内の開始/終了サンプル位置を指定します。最後の流入口はチャネルオフセットを指定します(デフォルトは0)。

atodb  

線形振幅をデシベル値に変換します

dbtoa  

デシベル値を線形振幅に変換します

ftom

ヘルツで指定された周波数は、MIDIノート番号(0-127)に変換されます。小数の音符番号がサポートされています。 2番目の入力はチューニングベースを設定します(デフォルトは440)。

mstosamps

ミリ秒をサンプル数に変換

mtof

MIDIノート番号(0-127)は、ヘルツ単位の周波数に変換されます。小数の音符番号がサポートされています。 2番目の入力はチューニングベースを設定します(デフォルトは440)。

sampstoms

サンプル数をミリ秒に変換

定数

fftfulspect    pfft〜フルスペクトルフラグ(0/1)

ffthop                    pfft~  FFT hopサイズ

fftoffset                pfft~  FFT オフセット

fftsize                pfft FFT フレームサイズ

samplerate         サンプルレート

vectorsize          DSPベクトルサイズ


fixdenorm 

この演算子は非正規化数を検出し、それらをゼロに置き換えます。注:Max 6.0以降、x87制御フラグはゼロにフラッシュし、オーディオ処理での例外処理を無効にするように設定されているため、非正規化数の修正はエクスポートされたコードにのみ必要です。非正規化数は、ゼロに非常に近い浮動小数点値です(アンダーフローギャップを埋めます)。非正規化数を使用した計算は、最大100倍のコストがかかる可能性があるため、多くの場合、ゼロに置き換えると便利です。非正規化数は、フィルター、遅延、指数関数的減衰などの乗数を使用したフィードバックループで発生することがよくあります。非正規化数の検出は、ビットマスクに基づいています。 gen〜(delay、history)のフィードバック演算子は、デフォルトで入力信号にfixdenormを適用することに注意してください。

fixdenan

この演算子は、NaNをゼロに置き換えます。 NaN(数値ではない)は、ゼロ除算の結果など、未定義または表現できない値を表す浮動小数点データ値です。 NaNの計算では、より多くのNaNが生成されるため、NaNをゼロ値に置き換えることが望ましい場合がよくあります。 gen〜の除算演算子とモジュロ演算子は、デフォルトでNaNの生成を防ぐことに注意してください。

isdenorm

この演算子は非正規化数を検出し、入力が非正規化数の場合は1を返し、それ以外の場合は0を返します。注:Max 6.0以降、x87制御フラグはゼロにフラッシュし、オーディオ処理での例外処理を無効にするように設定されているため、非正規化数の修正はエクスポートされたコードにのみ必要です。非正規化数は、ゼロに非常に近い浮動小数点値です(アンダーフローギャップを埋めます)。非正規化数を使用した計算は、最大100倍のコストがかかる可能性があるため、多くの場合、ゼロに置き換えると便利です。非正規化数は、フィルター、遅延、指数関数的減衰などの乗数を使用したフィードバックループで発生することがよくあります。非正規化数の検出は、ビットマスクに基づいています。 gen〜(delay、history)のフィードバック演算子は、デフォルトで入力信号にfixdenormを適用することに注意してください。

isnan

この演算子はNaN値の存在を検出し、入力がNaNの場合は1を返し、それ以外の場合は0を返します。 NaN(数値ではない)は、ゼロ除算の結果など、未定義または表現できない値を表す浮動小数点データ値です。 NaNの計算では、より多くのNaNが生成されるため、NaNをゼロ値に置き換えることが望ましい場合がよくあります。 gen〜の除算演算子とモジュロ演算子は、デフォルトでNaNの生成を防ぐことに注意してください。

t60 

サンプルごとに適用される乗算係数を返します。これにより、サンプルで特定のT60時間が発生します。

t60time

指定されたサンプルレート乗数のT60時間(サンプル)を返します。 T60時間は、各サンプルに乗数を適用したときに信号が60dB減衰するのにかかる時間です。

delay

信号を特定の時間(サンプルで指定)遅延させます。最初の引数は最大遅延時間(サンプルではデフォルト512)を指定し、2番目の引数はタップインレット/アウトレットペアの数(デフォルト1)を指定します。最初のインレットは遅延する信号です。追加のインレットは、タップあたりの遅延時間を指定します(サンプル単位)。 @feedback 1を使用すると、history演算子と同様に(delay〜とは異なり)、delayの信号入力によりフィードバック接続が可能になります。非正規保護は、信号入力に自動的に適用されます。ただし、最小遅延時間は1サンプル増加します。 @interp noneまたは@interp stepを使用すると、出力で補間は行われません。 @interp線形(デフォルト)、@ interpコサイン、@ interpキュービック、または@interpスプラインを使用すると、補間が出力に適用されます。 @interpキュービックおよび@interpスプラインの場合、最小遅延時間は1サンプル増加します。

history

履歴演算子は、単一サンプルの遅延を挿入することにより、genpatcherでのフィードバックを可能にします。最初の引数は、履歴演算子のオプションの名前です。これにより、外部からも設定できます(param演算子と同じ方法で)。 2番目の引数は、保存された履歴の初期値を指定します(デフォルトはゼロ)。

fftinfo

fftinfoは、pfft〜によってロードされたパッチャー内のFFTフレームに関する一定のデータを取得します。 pfft〜によってロードされないパッチャーで使用される場合、代わりにデフォルトの定数を返します。

change

現在の入力と前の入力の差の符号を返します。入力が増加している場合は1、減少している場合は-1、変化しない場合は0です。

dcblock

DC成分を除去するための1極ハイパスフィルター。

delta

現在の入力と前の入力の差を返します。

interp 

0から1(最初の注入口)の範囲の補間係数に従って、入力をスムーズに混合します。 @mode属性は、2つの追加の流入口を混合するために線形または正弦補間を選択するか、4つの追加の流入口を混合するために3次またはスプラインを選択できます。デフォルトのモードは線形です。

latch

条件付きで入力を渡すか保持します。最初のインレットは「入力」で、2番目のインレットは「コントロール」です。コントロールがゼロ以外の場合、入力値が渡されます。コントロールがゼロの場合、前の入力値が出力されます。 sah演算子よりも単純なトリガーロジックを使用して、ソース信号を定期的にサンプリングして保持するために使用できます。

phasewrap

入力を-piから+ piの範囲にラップします

sah

最初のインレットは「入力」で、2番目のインレットは「コントロール」です。コントロールがトリガー値以下からトリガーしきい値を超える状態に遷移すると、入力がサンプリングされます。サンプリングされた値は、別の制御遷移が発生するまで出力され、その時点で入力が再度サンプリングされます。デフォルトのしきい値は0ですが、最後のインレット/引数として指定できます。 @init属性は、比較する前の初期値を設定します(デフォルトは0)。

slide

スライド演算子を使用して、エンベロープ追跡とローパスフィルタリングを行います。 MSPスライド〜オブジェクトに関連

*=  mulequals

オブジェクトは内部値を乗算してから出力します。これはサンプルレートで発生するため、保存された値は非常に大きくまたは非常に小さくなり、非常に速く成長する可能性があります。乗算する値は、最初のインレットまたは引数のいずれかで指定されます。右端の注入口にゼロ以外の値を送信することにより、内部合計を最小にリセットできます。最小値はデフォルトで0ですが、@ min属性で変更できます。オプションの最大値は、@ max属性で指定できます。値は最大で折り返されます。

+= accum  pulseequals 

オブジェクトは、内部合計に追加してから出力します。これはサンプルレートで発生するため、合計は非常に大きく、非常に速く増加する可能性があります。追加する値は、最初のインレットまたは引数のいずれかで指定されます。右端の注入口にゼロ以外の値を送信することにより、内部合計を最小にリセットできます。最小値はデフォルトで0ですが、@ min属性で変更できます。オプションの最大値は、@ max属性で指定できます。値は最大で折り返されます。

counter 

Maxのカウンターオブジェクトと同様に、保存されたカウントを累積して出力しますが、サンプルレートでトリガーされます。サンプルごとに蓄積する量は、最初の入力(incr)によって設定されます。カウントは、2番目の入力のゼロ以外の値でリセットできます(リセット)。 3番目の注入口(max)は最大値を設定します。この値に達すると、カウンターはラップします。ただし、最大値が0(デフォルト)に設定されている場合、カウンターは制限を想定せず、無期限にカウントされます。最初のアウトレットは現在のカウントを出力し、2番目のアウトレットはカウントが最大でラップするときに1を出力し、それ以外の場合はゼロを出力し、3番目のアウトレットはラップ数(キャリーカウント)を出力します。

round

入力に最も近い整数値を返します。途中の場合はゼロから丸められます。

phasor

LFOオーディオ信号またはサンプル精度のタイミング/制御信号として使用できる非帯域制限のこぎり波信号発生器。

rate

レート演算子は、乗数によって入力フェーズ(フェーザからなど)をタイムスケールします。 1未満の乗数は、位相サイクルごとにいくつかのランプを作成します。

train 

train〜は、サンプルの観点から周期を指定できるパルス信号を生成します。最初の入力はパルス周期を設定します(サンプル単位)。 2番目の入力はパルス幅を設定します(デフォルトは0.5)。 3番目の注入口は、「オン」部分の位相を設定します(デフォルトは0)。

triangle 

ピーク値の位相オフセットを変更するための入力を備えたトライアングル/ランプウェーブテーブル。位相の範囲は0から1です(そしてこれらの値の外側をラップします)。デューティサイクルが0の場合、下降する鋸歯が生成されます。デューティサイクルが1の場合、上昇する鋸歯が生成されます。デューティサイクルが0.5の場合、三角波形が生成されます。出力値は常に0から1に制限されます。


よろしければサポートお願いします!