1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
title:: 14
summary:: Mark Polishook tutorial (JP)
categories:: Tutorials>Mark_Polishook_tutorial>Japanese_version
related:: Tutorials/Mark_Polishook_tutorial/00_Introductory_tutorial
section::キャリアとモジュレータ
最もシンプルな形式では、1980年代から有名で、ヤマハのDX7も採用した周波数変調(FM)シンセシスは、1つのオシレータを使って他のオシレータの周波数を変調するというものです。FMシンセシスでの変調をかけるためのオシレータは、通常はオーディオ・レートで動作する様に指定され、その振幅はエンベロープや他のオシレータ、すなわち低周波のオシレータ、によって形作られます。
FM合成では、音色はキャリアに対するモジュレータの効果によって異なります。このため、モジュレータは通常オーディオレートで動作する様に指定されます。
code::
(
SynthDef("fm1", { arg bus = 0, freq = 440, carPartial = 1, modPartial = 1, index = 3, mul = 0.05;
// インデックスの値は通常は0から24まで
// carPartial :: modPartial => car/mod ratio
var mod;
var car;
mod = SinOsc.ar(
freq * modPartial,
0,
freq * index * LFNoise1.kr(5.reciprocal).abs
);
car = SinOsc.ar(
(freq * carPartial) + mod,
0,
mul
);
Out.ar(
bus,
car
)
}).add;
)
(
Synth("fm1", [\bus, 0, \freq, 440, \carPartial, 1, \modPartial, 2.4]);
Synth("fm1", [\bus, 1, \freq, 442, \carPartial, 1, \modPartial, 2.401]);
)
::
////////////////////////////////////////////////////////////////////////////////////////////////////
section::周波数変調とリバーブ
code::
// これは(SC2の配布物の中の)"01 Why SuperCollider document"からのリバーブ
(
SynthDef("preDelay", { arg inbus = 2;
Out.ar(
4,
DelayN.ar(In.ar(inbus, 1), 0.048, 0.048)
)
}).add;
SynthDef("combs", {
Out.ar(
6,
Mix.arFill(7, { CombL.ar(In.ar(4, 1), 0.1, LFNoise1.kr(Rand(0, 0.1), 0.04, 0.05), 15) })
)
}).add;
SynthDef("allpass", { arg gain = 0.2;
var source;
source = In.ar(6, 1);
4.do({ source = AllpassN.ar(source, 0.050, [Rand(0, 0.05), Rand(0, 0.05)], 1) });
Out.ar(
8,
source * gain
)
}).add;
SynthDef("theMixer", { arg gain = 1;
Out.ar(
0,
Mix.ar([In.ar(2, 1), In.ar(8, 2)]) * gain
)
}).add;
)
(
Synth("fm1", [\bus, 2, \freq, 440, \carPartial, 1, \modPartial, 1.99, \mul, 0.071]);
Synth("fm1", [\bus, 2, \freq, 442, \carPartial, 1, \modPartial, 2.401, \mul, 0.071]);
Synth.tail(s, "preDelay");
Synth.tail(s, "combs");
Synth.tail(s, "allpass");
Synth.tail(s, "theMixer", [\gain, 0.64]);
)
::
////////////////////////////////////////////////////////////////////////////////////////////////////
section::コンポーネント
"fm"のSynthDefを、1つのSynthDefはモジュレータ、1つのSynthDefはキャリアという2つの部分に分割することでより機能性 が高まる。キャリアのシグナルを2つまたはそれ以上のモジュレータで加工することができる。
code::
(
SynthDef("carrier", { arg inbus = 2, outbus = 0, freq = 440, carPartial = 1, index = 3, mul = 0.2;
// インデックスの値は通常は0から24まで
// carPartial :: modPartial => car/mod ratio
var mod;
var car;
mod = In.ar(inbus, 1);
Out.ar(
outbus,
SinOsc.ar((freq * carPartial) + mod, 0, mul);
)
}).add;
SynthDef("modulator", { arg outbus = 2, freq, modPartial = 1, index = 3;
Out.ar(
outbus,
SinOsc.ar(freq * modPartial, 0, freq)
*
LFNoise1.kr(Rand(3, 6).reciprocal).abs
*
index
)
}).add;
)
(
var freq = 440;
// 左チャンネルのためのモジュレータ
Synth.head(s, "modulator", [\outbus, 2, \freq, freq, \modPartial, 0.649, \index, 2]);
Synth.head(s, "modulator", [\outbus, 2, \freq, freq, \modPartial, 1.683, \index, 2.31]);
// 右チャンネルのためのモジュレータ
Synth.head(s, "modulator", [\outbus, 4, \freq, freq, \modPartial, 0.729, \index, 1.43]);
Synth.head(s, "modulator", [\outbus, 4, \freq, freq, \modPartial, 2.19, \index, 1.76]);
// 左と右のチャンネルのためのキャリア
Synth.tail(s, "carrier", [\inbus, 2, \outbus, 0, \freq, freq, \carPartial, 1]);
Synth.tail(s, "carrier", [\inbus, 4, \outbus, 1, \freq, freq, \carPartial, 0.97]);
)
::
////////////////////////////////////////////////////////////////////////////////////////////////////
section::コンポーネントとリバーブ
この例は前に定義されたリバーブと2つのシンセ定義(モジュレータが1つのSynthDefで他方はキャリア)で説明したモデルを組み合わせています。
code::
(
var freq;
// キャリアとモジュレータのためのランダムな基本周波数を生成する
freq = 330.0.rrand(500);
// 左チャンネルのためのモジュレータ
Synth.head(s, "modulator", [\outbus, 60, \freq, freq, \modPartial, 0.649, \index, 2]);
Synth.head(s, "modulator", [\outbus, 60, \freq, freq, \modPartial, 1.683, \index, 2.31]);
// 右チャンネルのためのモジュレータ
Synth.head(s, "modulator", [\outbus, 62, \freq, freq, \modPartial, 1.11, \index, 1.43]);
Synth.head(s, "modulator", [\outbus, 62, \freq, freq, \modPartial, 0.729, \index, 1.76]);
// 左と右のチャンネルのためのキャリア
Synth.tail(s, "carrier", [\inbus, 60, \outbus, 100, \freq, freq, \carPartial, 1]);
Synth.tail(s, "carrier", [\inbus, 62, \outbus, 100, \freq, freq+1, \carPartial, 2.91]);
Synth.tail(s, "preDelay", [\inbus, 100]);
Synth.tail(s, "combs");
Synth.tail(s, "allpass");
Synth.tail(s, "theMixer", [\gain, 0.2]);
)
::
////////////////////////////////////////////////////////////////////////////////////////////////////
go to link::Tutorials/Mark_Polishook_tutorial/Japanese_version/15::
|