Skip to content

Commit 691c179

Browse files
authored
Merge pull request supercollider#3526 from telephon/topic-warp1-example
Improve Warp1 UGen example and some code cosmetics
2 parents 13b869d + b7675b6 commit 691c179

File tree

2 files changed

+68
-53
lines changed

2 files changed

+68
-53
lines changed

HelpSource/Classes/Warp1.schelp

+34-27
Original file line numberDiff line numberDiff line change
@@ -50,48 +50,55 @@ code::
5050
s.boot;
5151

5252
(
53-
var winenv;
54-
// a custom envelope - not a very good one, but you can hear the difference between this
55-
// and the default
56-
winenv = Env([0, 1, 0], [0.5, 0.5], [8, -8]);
5753
b = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01-44_1.aiff");
58-
z = Buffer.sendCollection(s, winenv.discretize, 1);
59-
60-
SynthDef(\warp, { |out, bufnum = 0, envbuf = -1|
61-
var sound, pointer, filelength, pitch, env, dir;
54+
x = { |envbuf = -1|
55+
var pointer, pitch;
6256
// pointer - move from beginning to end of soundfile over 15 seconds
63-
pointer = Line.kr(0, 1, 15);
57+
pointer = LFSaw.ar(1/15).range(0, 1);
6458
// control pitch with MouseX
6559
pitch = MouseX.kr(0.5, 2);
66-
env = EnvGen.kr(Env([0.001, 1, 1, 0.001], [0.1, 14, 0.9], 'exp'), doneAction: Done.freeSelf);
67-
sound = Warp1.ar(1, bufnum, pointer, pitch, 0.1, envbuf, 8, 0.1, 2);
68-
Out.ar(out, sound * env);
69-
}).add;
60+
Warp1.ar(
61+
numChannels:1,
62+
bufnum:b,
63+
pointer:pointer,
64+
freqScale:pitch,
65+
windowSize:0.1,
66+
envbufnum:envbuf,
67+
overlaps:8,
68+
windowRandRatio:0.1,
69+
interp:2
70+
)
71+
}.play
7072

7173
)
7274

73-
// use built-in env
74-
x = Synth(\warp, [\bufnum, b, \envbuf, -1])
7575

76-
// switch to the custom env
77-
x.set(\envbuf, z)
76+
(
77+
// a custom envelope - not a very good one, but you can hear the difference
78+
// between this and the default
79+
var winenv = Env([0, 1, 0], [0.5, 0.5], [8, -8]);
80+
z = Buffer.sendCollection(s, winenv.discretize, 1);
81+
x.set(\envbuf, z);
82+
)
83+
84+
// the default is -1
7885
x.set(\envbuf, -1);
7986

80-
x.free;
87+
// relase and end
88+
x.relase; z.free;
89+
8190
::
8291

8392
code::
8493
(
8594
b.free;
86-
b= Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01-44_1.aiff");
87-
SynthDef(\warp2, { |out, bufnum|
88-
var pointer = Phasor.ar(0, SampleDur.ir / BufDur.ir(bufnum) * XLine.kr(1, 0.25, 20));
89-
var sound = Warp1.ar(1, bufnum, pointer, 1, 0.3, -1, 16, Line.kr(0, 1, 40), 4);
90-
Out.ar(out, Pan2.ar(sound, pointer * 2 - 1, 0.25));
91-
}).add;
95+
b = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01-44_1.aiff");
96+
{
97+
var pointer = Phasor.ar(0, SampleDur.ir / BufDur.ir(b) * XLine.kr(1, 0.25, 20));
98+
var sound = Warp1.ar(1, b, pointer, 1, 0.3, -1, 16, Line.kr(0, 1, 40), 4);
99+
Pan2.ar(sound, pointer * 2 - 1, 0.25)
100+
}.play
92101
)
93-
x = Synth(\warp2, [\bufnum, b])
94-
x.free
95-
b.free
102+
b.free;
96103
::
97104

+34-26
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,80 @@
11
GrainSin : MultiOutUGen {
2+
23
*ar { arg numChannels = 1, trigger = 0, dur = 1, freq = 440, pan = 0, envbufnum = -1,
3-
maxGrains = 512, mul = 1, add = 0;
4+
maxGrains = 512, mul = 1, add = 0;
45
^this.multiNew('audio', numChannels, trigger, dur, freq, pan, envbufnum, maxGrains)
5-
.madd(mul, add);
6-
}
6+
.madd(mul, add)
7+
}
78

89
init { arg argNumChannels ... theInputs;
910
inputs = theInputs;
10-
^this.initOutputs(argNumChannels, rate);
11+
^this.initOutputs(argNumChannels, rate)
1112
}
13+
1214
argNamesInputsOffset { ^2 }
13-
}
15+
}
1416

1517
GrainFM : MultiOutUGen {
18+
1619
*ar { arg numChannels = 1, trigger = 0, dur = 1, carfreq = 440, modfreq = 200, index = 1,
17-
pan = 0, envbufnum = -1, maxGrains = 512, mul = 1, add = 0;
20+
pan = 0, envbufnum = -1, maxGrains = 512, mul = 1, add = 0;
1821
^this.multiNew('audio', numChannels, trigger, dur, carfreq, modfreq, index, pan, envbufnum,
19-
maxGrains).madd(mul, add);
20-
}
22+
maxGrains).madd(mul, add)
23+
}
2124

2225
init { arg argNumChannels ... theInputs;
2326
inputs = theInputs;
24-
^this.initOutputs(argNumChannels, rate);
27+
^this.initOutputs(argNumChannels, rate)
2528
}
2629

2730
argNamesInputsOffset { ^2 }
28-
}
31+
}
2932

3033
GrainBuf : MultiOutUGen {
34+
3135
*ar { arg numChannels = 1, trigger = 0, dur = 1, sndbuf, rate = 1, pos = 0, interp = 2,
32-
pan = 0, envbufnum = -1, maxGrains = 512, mul = 1, add = 0;
36+
pan = 0, envbufnum = -1, maxGrains = 512, mul = 1, add = 0;
3337
^this.multiNew('audio', numChannels, trigger, dur, sndbuf, rate, pos, interp, pan,
34-
envbufnum, maxGrains).madd(mul, add);
35-
}
38+
envbufnum, maxGrains).madd(mul, add)
39+
}
3640

3741
init { arg argNumChannels ... theInputs;
3842
inputs = theInputs;
39-
^this.initOutputs(argNumChannels, rate);
43+
^this.initOutputs(argNumChannels, rate)
4044
}
45+
4146
argNamesInputsOffset { ^2 }
42-
}
47+
}
4348

4449
GrainIn : MultiOutUGen {
50+
4551
*ar { arg numChannels = 1, trigger = 0, dur = 1, in, pan = 0, envbufnum = -1, maxGrains = 512,
46-
mul = 1, add = 0;
52+
mul = 1, add = 0;
4753
^this.multiNew('audio', numChannels, trigger, dur, in, pan, envbufnum, maxGrains)
48-
.madd(mul, add);
49-
}
54+
.madd(mul, add)
55+
}
5056

5157
init { arg argNumChannels ... theInputs;
5258
inputs = theInputs;
53-
^this.initOutputs(argNumChannels, rate);
59+
^this.initOutputs(argNumChannels, rate)
5460
}
61+
5562
argNamesInputsOffset { ^2 }
56-
}
63+
}
5764

5865
Warp1 : MultiOutUGen {
59-
*ar { arg numChannels = 1, bufnum=0, pointer=0, freqScale = 1,
60-
windowSize = 0.2, envbufnum = -1, overlaps = 8, windowRandRatio = 0.0, interp=1,
61-
mul = 1, add = 0;
66+
*ar { arg numChannels = 1, bufnum = 0, pointer = 0, freqScale = 1,
67+
windowSize = 0.2, envbufnum = -1, overlaps = 8, windowRandRatio = 0.0, interp = 1,
68+
mul = 1, add = 0;
6269
^this.multiNew('audio', numChannels, bufnum, pointer, freqScale,
63-
windowSize, envbufnum, overlaps, windowRandRatio, interp).madd(mul, add);
70+
windowSize, envbufnum, overlaps, windowRandRatio, interp).madd(mul, add)
6471
}
6572

6673
init { arg argNumChannels ... theInputs;
6774
inputs = theInputs;
68-
^this.initOutputs(argNumChannels, rate);
75+
^this.initOutputs(argNumChannels, rate)
6976
}
77+
7078
argNamesInputsOffset { ^2 }
7179

72-
}
80+
}

0 commit comments

Comments
 (0)