Explicitly include a boost "windows" folder even on linux
[supercollider.git] / HelpSource / Classes / PV_ConformalMap.schelp
blobf2033b7d48bc8c123b57c3b1a16c081473ea529c
1 class:: PV_ConformalMap
2 summary:: Complex plane attack.
3 related:: Classes/FFT, Classes/IFFT
4 categories:: UGens>FFT
6 Description::
8 Applies the conformal mapping
10 code::
12 z → (z - a) / (1 - za*)
16 to the phase vocoder bins z with a given by the real and imag imputs to
17 the UGen.
20 Makes a transformation of the complex plane so the output is full of
21 phase vocoder artifacts but may be musically fun. Usually keep
23 code::
24 |a| < 1
26 but
27 you can of course try bigger values to make it really noisy.
29 code::
30 a = 0
32 should
33 give back the input mostly unperturbed.
36 See  link::http://mathworld.wolfram.com/ConformalMapping.html:: .
39 classmethods::
41 method::new
43 argument::buffer
45 FFT buffer.
48 argument::areal
50 Real part of a.
53 argument::aimag
55 Imaginary part of a.
58 Examples::
60 code::
62 //explore the effect
64 SynthDef("conformer1", {
65         var in, chain;
66         in = AudioIn.ar(1,0.5);
67         chain = FFT(LocalBuf(1024), in);
68         chain=PV_ConformalMap(chain, MouseX.kr(-1.0,1.0), MouseY.kr(-1.0,1.0));
69         Out.ar(0, Pan2.ar(IFFT(chain),0));
70 }).add;
73 a = Synth("conformer1")
74 a.free
77 SynthDef("conformer2", {
78         var in, chain, out;
79         in = Mix.ar(LFSaw.ar(SinOsc.kr(Array.rand(3,0.1,0.5),0,10,[1,1.1,1.5,1.78,2.45,6.7]*220),0,0.3));
80         chain = FFT(LocalBuf(2048), in);
81         chain=PV_ConformalMap(chain, MouseX.kr(0.01,2.0, 'exponential'), MouseY.kr(0.01,10.0, 'exponential'));
82         out=IFFT(chain);
84         Out.ar(0, Pan2.ar(CombN.ar(out, 0.1, 0.1, 10, 0.5, out), 0, 0.3));
85 }).add;
88 a = Synth("conformer2")
89 a.free