2 summary:: Mark Polishook tutorial (JP)
3 categories:: Tutorials>Mark_Polishook_tutorial>Japanese_version
4 related:: Tutorials/Mark_Polishook_tutorial/00_Introductory_tutorial
8 1つのUGenの後にオペレータとオペランドが続く2項演算は、通常は、単項演算によって生成されるよりもより複雑なシンセシス・プロセスを作り出します。
10 2項演算の例としては、ほんのいくつか例を挙げると、加算、乗算、減算、割算といったものがあります。
15 ## OBJECT || OPERATOR || OPERAND
26 オブジェクト、2項演算子、オペランド、となります。
28 UGenに対して適用することのできる2項演算の多くのリストを見るには、SuperColliderのヘルプ・システムでHelp/BinaryOpsを参照して下さい。
30 ////////////////////////////////////////////////////////////////////////////////////////////////////
34 2つ、またはそれ以上のUGenをミックスするには加算します。
40 Saw.ar(500, 0.05) // オブジェクト
42 Saw.ar(600, 0.06) // オペランド
47 加算の結果は1つのBinaryOpUGenになります。
49 ////////////////////////////////////////////////////////////////////////////////////////////////////
51 次の例は、3つのUGenが加算を通して合体することによって何が起きるのかを示します。最初に、2つのUGenが1つのBinarOpUGenに合体します。その結果に加算演算子ともう1つのUGen(オペランド)が続き、もう1つのBinaryOpUGenを生成します。
56 // 最初の2つのUGenは1つのBinaryOpUGenに合体する
61 // このUGenはBinaryOpUGenに対するオペランドと‘+’オペレータ
67 ////////////////////////////////////////////////////////////////////////////////////////////////////
69 MixというUGenを用いることで前の例と同じ結果になります。
74 // ミックスしたいUGenを配列の中に入れる
86 ////////////////////////////////////////////////////////////////////////////////////////////////////
88 もしくは、Mix.arFillを使って似た様な結果を生成することもできます。この関数が実行される時には毎回、アーギュメントiはインクリメントされます。つまり、1回目に関数が実行される時にはiは0に等しく、2回目には1、3回目には2、という様になります。
91 { Mix.arFill(3, { arg i; Saw.ar(500 + ((i+1) * 100), 0.05) }) }.scope;
94 ////////////////////////////////////////////////////////////////////////////////////////////////////
98 低い周波数のオシレータを用いる次の例は、WhiteNoiseジェネレータに対してエンベロープを適用します。これは、1つのUGenを他のUGenと掛算することにより、双方をスケーリングするということをデモするものです。
101 { WhiteNoise.ar(0.1) * SinOsc.kr(1, 1) }.scope;
104 次の例は、2つのノイズを生成するUgenがサイン波でスケーリングされてBinaryOpUGenを生成し、それがまた別のBinaryOpUGenに加算されるというものです。
110 (WhiteNoise.ar(0.1) * SinOsc.kr(1, 1))
112 (BrownNoise.ar(0.1) * SinOsc.kr(2, 1))
117 ////////////////////////////////////////////////////////////////////////////////////////////////////
121 UGenの任意のアスペクト、例えば、周波数、位相、振幅といったものをダイナミックに変調するにはエンベロープを使います。
125 { SinOsc.ar(440, 0, 0.1) * EnvGen.kr(Env.sine(1), doneAction: 2) }.scope;
128 doneActionアーギュメント(コントロール)を2にセットすると、SuperColliderはSinOscとEnvGenのインスタンスを保持するために要求されていたメモリを解放することを確約します。アーギュメントがキーワードのスタイルで与えられていることに注意して下さい。キーワードのスタイルとは、アーギュメントの名前の後にコロン(‘:’)が続き、コロンの後に値が続く、というものです。
130 キーワードはコードをより読みやすいものにします。また、これによってアーギュメントを任意の順番で書くことができる様になります。
132 ////////////////////////////////////////////////////////////////////////////////////////////////////
134 EnvGenのtimeScaleアーギュメント(コントロール)は、エンベロープの継続時間を変調します。
138 SynthDef("timeScale", { arg ts = 1;
141 SinOsc.ar(440, 0, 0.4) * EnvGen.kr(Env.sine(1), doneAction: 2, timeScale: ts)
146 Synth("timeScale", [\ts, 0.1]); // timeScaleコントロールはエンベロープの継続時間
149 ////////////////////////////////////////////////////////////////////////////////////////////////////
152 // ... エンベロープの時間をシンセが作られるたびに毎回違ったものにスケーリングする
156 Synth("timeScale", [\ts, 0.01.rrand(0.3)]);
164 ////////////////////////////////////////////////////////////////////////////////////////////////////
168 加算合成とはその名が示す通りのものです。コンポーネントはお互いに加えられ(または合計され)ます。
178 [67.0.rrand(2000), 67.0.rrand(2000)],
185 EnvGen.kr(Env.perc(11, 6), doneAction: 2)
190 ////////////////////////////////////////////////////////////////////////////////////////////////////
192 section::それぞれのコンポーネントにエンベロープを与える
194 加算合成に期待されて来たこととは、求められる周波数成分に従ってサイン波を加算することで、想像しうるサウンドを生成または再現することができるということでした。
196 加算合成の問題点とは、サウンドの正確な周波数成分を知る必要があるということで、それには必要とされる数のサイン波のそれぞれが理想的なエンベロープで制御されることによって初めて可能になるのです。
198 どちらにせよ、前の例のそれぞれのコンポーネントに別々のエンベロープを与えることによって、より微妙なテクスチャーを生成することができます。
207 SinOsc.ar( // それぞれがlow.rrand(high)の範囲内で起こりうる周波数
208 [67.0.rrand(2000), 67.0.rrand(2000)], // ... 実数の値
210 n.reciprocal // それぞれのサイン波の振幅をスケーリングする
214 EnvGen.kr( // サイン波のそれぞれにエンベロープを与える
215 Env.sine(2.0.rrand(17)),
216 doneAction: 0 // サウンド全体が完了した時にだけ
221 * // パッチ全体に対してエンベロープを与える
232 (もしくはlink::Classes/Klang:: ugenを用いることで同じ様な結果が得られます)
234 ////////////////////////////////////////////////////////////////////////////////////////////////////
238 2つのUGenを掛算することでリング変調を生成します。
241 // キャリアの振幅を低周波オシレータ(LFO)で変調
242 { SinOsc.ar(440, 0, 0.571) * SinOsc.kr(2.reciprocal) }.scope
244 // LFOの周波数を可聴帯域にすることで追加の周波数成分を生成する
245 { SinOsc.ar(440, 0, 0.571) * SinOsc.kr(880) }.scope
247 // 低周波のオシレータ(lfo)でモジュレータの振幅を変調する
250 SinOsc.ar(440, 0, 0.571)
252 (SinOsc.kr(880) // モジュレータとlfoを括弧の中に包み込む
254 SinOsc.kr([6.99, 8.01].reciprocal)
260 ////////////////////////////////////////////////////////////////////////////////////////////////////
264 2つのUGenを掛算する際にモジュレータの値を正の値に制限することで、Charles Dodgeが「クラシック」振幅変調と呼ぶものを生成します。
266 モジュレーター、もし低周波のオシレータである場合には、その出力が正の値に制限されているか正の値に制限されていないかの違いは、変調の振幅のみに表れます。UGenを正の値のみに制限するために.absメッセージを使っています。
269 // 低周波のオシレータ(lfo)でキャリアの振幅を変調する
270 { SinOsc.ar(440, 0, 0.571) * SinOsc.kr(2.reciprocal).abs }.scope
272 // lfoを用いてモジュレータの振幅を変調する
275 SinOsc.ar(440, 0, 0.571)
277 (SinOsc.kr(880).abs // モジュレータとlfoを括弧の中に包み込む
279 SinOsc.kr([6.99, 8.01].reciprocal)
285 ////////////////////////////////////////////////////////////////////////////////////////////////////
287 モジュレータの出力を正の値に制限して低周波のオシレータの周波数を上げることにより、(サイドバンドを生成することによって)著しく音色が変化させます。
290 // lfoの周波数を可聴帯域にして.absメッセージをモジュレータに適用する
291 { SinOsc.ar(440, 0, 0.571) * SinOsc.kr(880).abs }.scope
293 // 前の例をリング変調(.absメッセージの無いもの)と比較せよ
295 { SinOsc.ar(440, 0, 0.571) * SinOsc.kr(880) }.scope
298 ////////////////////////////////////////////////////////////////////////////////////////////////////
300 go to link::Tutorials/Mark_Polishook_tutorial/Japanese_version/10::