1つのUGenの後にオペレータとオペランドが続く2項演算は、通常は、単項演算によって生成されるよりもより複雑なシンセシス・プロセスを作り出します。
2項演算の例としては、ほんのいくつか例を挙げると、加算、乗算、減算、割算といったものがあります。
一般的なパターンは
OBJECT | OPERATOR | OPERAND |
オブジェクト オペレータ オペランド
であり、例えば次の様に
オブジェクト、2項演算子、オペランド、となります。
UGenに対して適用することのできる2項演算の多くのリストを見るには、SuperColliderのヘルプ・システムでHelp/BinaryOpsを参照して下さい。
////////////////////////////////////////////////////////////////////////////////////////////////////
2つ、またはそれ以上のUGenをミックスするには加算します。
加算の結果は1つのBinaryOpUGenになります。
////////////////////////////////////////////////////////////////////////////////////////////////////
次の例は、3つのUGenが加算を通して合体することによって何が起きるのかを示します。最初に、2つのUGenが1つのBinarOpUGenに合体します。その結果に加算演算子ともう1つのUGen(オペランド)が続き、もう1つのBinaryOpUGenを生成します。
////////////////////////////////////////////////////////////////////////////////////////////////////
MixというUGenを用いることで前の例と同じ結果になります。
////////////////////////////////////////////////////////////////////////////////////////////////////
もしくは、Mix.arFillを使って似た様な結果を生成することもできます。この関数が実行される時には毎回、アーギュメントiはインクリメントされます。つまり、1回目に関数が実行される時にはiは0に等しく、2回目には1、3回目には2、という様になります。
////////////////////////////////////////////////////////////////////////////////////////////////////
低い周波数のオシレータを用いる次の例は、WhiteNoiseジェネレータに対してエンベロープを適用します。これは、1つのUGenを他のUGenと掛算することにより、双方をスケーリングするということをデモするものです。
次の例は、2つのノイズを生成するUgenがサイン波でスケーリングされてBinaryOpUGenを生成し、それがまた別のBinaryOpUGenに加算されるというものです。
////////////////////////////////////////////////////////////////////////////////////////////////////
UGenの任意のアスペクト、例えば、周波数、位相、振幅といったものをダイナミックに変調するにはエンベロープを使います。
doneActionアーギュメント(コントロール)を2にセットすると、SuperColliderはSinOscとEnvGenのインスタンスを保持するために要求されていたメモリを解放することを確約します。アーギュメントがキーワードのスタイルで与えられていることに注意して下さい。キーワードのスタイルとは、アーギュメントの名前の後にコロン(‘:’)が続き、コロンの後に値が続く、というものです。
キーワードはコードをより読みやすいものにします。また、これによってアーギュメントを任意の順番で書くことができる様になります。
////////////////////////////////////////////////////////////////////////////////////////////////////
EnvGenのtimeScaleアーギュメント(コントロール)は、エンベロープの継続時間を変調します。
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
加算合成とはその名が示す通りのものです。コンポーネントはお互いに加えられ(または合計され)ます。
////////////////////////////////////////////////////////////////////////////////////////////////////
加算合成に期待されて来たこととは、求められる周波数成分に従ってサイン波を加算することで、想像しうるサウンドを生成または再現することができるということでした。
加算合成の問題点とは、サウンドの正確な周波数成分を知る必要があるということで、それには必要とされる数のサイン波のそれぞれが理想的なエンベロープで制御されることによって初めて可能になるのです。
どちらにせよ、前の例のそれぞれのコンポーネントに別々のエンベロープを与えることによって、より微妙なテクスチャーを生成することができます。
(もしくはKlang ugenを用いることで同じ様な結果が得られます)
////////////////////////////////////////////////////////////////////////////////////////////////////
2つのUGenを掛算することでリング変調を生成します。
////////////////////////////////////////////////////////////////////////////////////////////////////
2つのUGenを掛算する際にモジュレータの値を正の値に制限することで、Charles Dodgeが「クラシック」振幅変調と呼ぶものを生成します。
モジュレーター、もし低周波のオシレータである場合には、その出力が正の値に制限されているか正の値に制限されていないかの違いは、変調の振幅のみに表れます。UGenを正の値のみに制限するために.absメッセージを使っています。
////////////////////////////////////////////////////////////////////////////////////////////////////
モジュレータの出力を正の値に制限して低周波のオシレータの周波数を上げることにより、(サイドバンドを生成することによって)著しく音色が変化させます。
////////////////////////////////////////////////////////////////////////////////////////////////////
go to 10