Okey i think i do have everything... look at it :
Last login: Fri Nov 29 00:34:02 on ttys000
MacBook-Pro-de-Tommy:~ tommyheisler$ ls -ld /Users/tommyheisler/Library/Application\ Support/SuperCollider/Extensions/mi-UGens
drwxr-xr-x@ 15 tommyheisler staff 480 11 avr 2024 /Users/tommyheisler/Library/Application Support/SuperCollider/Extensions/mi-UGens
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$ ls -la /Users/tommyheisler/Library/Application\ Support/SuperCollider/Extensions/mi-UGens/
total 14376
drwxr-xr-x@ 15 tommyheisler staff 480 11 avr 2024 .
drwxr-xr-x 4 tommyheisler staff 128 28 nov 07:18 ..
drwxr-xr-x@ 14 tommyheisler staff 448 11 avr 2024 Classes
drwxr-xr-x@ 3 tommyheisler staff 96 11 avr 2024 HelpSource
-rwxr-xr-x@ 1 tommyheisler staff 3337721 11 avr 2024 MiBraids.scx
-rwxr-xr-x@ 1 tommyheisler staff 355369 11 avr 2024 MiClouds.scx
-rwxr-xr-x@ 1 tommyheisler staff 944299 11 avr 2024 MiElements.scx
-rwxr-xr-x@ 1 tommyheisler staff 134616 11 avr 2024 MiGrids.scx
-rwxr-xr-x@ 1 tommyheisler staff 99221 11 avr 2024 MiMu.scx
-rwxr-xr-x@ 1 tommyheisler staff 891894 11 avr 2024 MiOmi.scx
-rwxr-xr-x@ 1 tommyheisler staff 578377 11 avr 2024 MiPlaits.scx
-rwxr-xr-x@ 1 tommyheisler staff 251432 11 avr 2024 MiRings.scx
-rwxr-xr-x@ 1 tommyheisler staff 327400 11 avr 2024 MiTides.scx
-rwxr-xr-x@ 1 tommyheisler staff 99431 11 avr 2024 MiVerb.scx
-rwxr-xr-x@ 1 tommyheisler staff 321064 11 avr 2024 MiWarps.scx
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$ cat /Users/tommyheisler/Library/Application\ Support/SuperCollider/synthdefs/mi-ugens.scd
// https://github.com/v7b1/mi-UGens
(
SynthDef(\braids, {|out=0,freq=440,sustain=1,pan=0,begin=0,end=1,speed=1,accelerate=0,timbre=0.5,color=0.5,model=0|
var envLength = sustain*(end-begin)/speed;
var line = Line.ar(begin, end, envLength, doneAction: Done.freeSelf);
var env = Env.asr;
var volume = IEnvGen.ar(env, line);
var sig;
freq = max(0, freq * speed * (1 + (accelerate * line)));
sig = MiBraids.ar(pitch: freq.cpsmidi, timbre: timbre, color: color, model: model);
Out.ar(out, DirtPan.ar(sig * volume, ~dirt.numChannels, pan));
}).add;
);
(
SynthDef(\omi, {|out=0,freq=440,sustain=1,pan=0,begin=0,end=1,speed=1,accelerate=0|
var envLength = sustain*(end-begin)/speed;
var line = Line.ar(begin, end, envLength, doneAction: Done.freeSelf);
var env = Env.asr;
var volume = IEnvGen.ar(env, line);
var sig;
freq = max(0, freq * speed * (1 + (accelerate * line)));
sig = MiOmi.ar(pit: freq.cpsmidi);
Out.ar(out, DirtPan.ar(sig * volume, ~dirt.numChannels, pan));
}).add;
);
(
SynthDef(\plaits, {|out=0,freq=440,sustain=1,pan=0,begin=0,end=1,speed=1,accelerate=0,
timbre=0.5,engine=0,harm=0.5,morph=0.5,level=1,lpgdecay=0,lpgcolour=0,mode=0|
var envLength = sustain*(end-begin)/speed;
var line = Line.ar(begin, end, envLength, doneAction: Done.freeSelf);
var env = Env.asr;
var volume = IEnvGen.ar(env, line);
var sig;
freq = max(0, freq * speed * (1 + (accelerate * line)));
sig = MiPlaits.ar(
pitch: freq.cpsmidi,
timbre: timbre,
harm: harm,
engine: engine,
morph: morph,
level: level,
decay: lpgdecay,
lpg_colour: lpgcolour,
);
sig = Select.ar(mode, sig);
Out.ar(out, DirtPan.ar(sig * volume, ~dirt.numChannels, pan));
}).add;
);
(
SynthDef(\tides, {|out=0,freq=440,sustain=1,pan=0,begin=0,end=1,speed=1,accelerate=0,tidesshape=0.5,slope=0.5,tidessmooth=0.5,shift=0.5,mode=2|
var envLength = sustain*(end-begin)/speed;
var line = Line.ar(begin, end, envLength, doneAction: Done.freeSelf);
var env = Env.asr;
var volume = IEnvGen.ar(env, line);
var sig;
freq = max(0, freq * speed * (1 + (accelerate * line)));
sig = MiTides.ar(
freq: freq,
shape: tidesshape,
slope: slope,
smooth: tidessmooth,
shift: shift,
output_mode: mode,
ramp_mode: 1,
rate: 1
);
Out.ar(out, DirtPan.ar(sig * volume, ~dirt.numChannels, pan));
}).add;
);
(
~dirt.addModule('elements', { |dirtEvent|
dirtEvent.sendSynth('elements' ++ ~dirt.numChannels,
[
elementspitch: ~elementspitch,
elementsstrength: ~elementsstrength,
elementscontour: ~elementscontour,
elementsbowlevel: ~elementsbowlevel,
elementsblowlevel: ~elementsblowlevel,
elementsstrikelevel: ~elementsstrikelevel,
elementsflow: ~elementsflow,
elementsmallet: ~elementsmallet,
elementsbowtimb: ~elementsbowtimb,
elementsblowtimb: ~elementsblowtimb,
elementsstriketimb: ~elementsstriketimb,
elementsgeom: ~elementsgeom,
elementsbright: ~elementsbright,
elementsdamp: ~elementsdamp,
elementspos: ~elementspos,
elementsspace: ~elementsspace,
elementsmodel: ~elementsmodel,
elementseasteregg: ~elementseasteregg,
out: ~out
]
)
}, {~elementsstrength.notNil});
);
(
SynthDef("elements" ++ ~dirt.numChannels, {|out,freq=440,sustain=1,pan=0,begin=0,end=1,speed=1,accelerate=0,
elementspitch=48, elementsstrength=0.5, elementscontour=0.2, elementsbowlevel=0,elementsblowlevel=0, elementsstrikelevel=0,
elementsflow=0.5, elementsmallet=0.5, elementsbowtimb=0.5, elementsblowtimb=0.5,
elementsstriketimb=0.5, elementsgeom=0.25, elementsbright=0.5, elementsdamp=0.7, elementspos=0.2, elementsspace=0.3, elementsmodel=0,
elementseasteregg=0|
var signal = In.ar(out, ~dirt.numChannels);
ReplaceOut.ar(out, MiElements.ar(
blow_in: signal,
strike_in: signal,
gate: 1,
pit: elementspitch,
strength: elementsstrength,
contour: elementscontour,
bow_level: elementsbowlevel,
blow_level: elementsblowlevel,
strike_level: elementsstrikelevel,
flow: elementsflow,
mallet: elementsmallet,
bow_timb: elementsbowtimb,
blow_timb: elementsblowtimb,
strike_timb: elementsstriketimb,
geom: elementsgeom,
bright: elementsbright,
damp: elementsdamp,
pos: elementspos,
space: elementsspace,
model: elementsmodel,
easteregg: elementseasteregg
));
}).add;
);
(
~dirt.addModule('mu', { |dirtEvent|
dirtEvent.sendSynth('mu' ++ ~dirt.numChannels,
[ mu: ~mu, out: ~out ]
)
}, {~mu.notNil});
);
(
SynthDef("mu" ++ ~dirt.numChannels, {|out,mu=0|
var signal = In.ar(out, ~dirt.numChannels);
ReplaceOut.ar(out, MiMu.ar(signal, mu));
}).add;
);
(
~dirt.addModule('rings', { |dirtEvent|
dirtEvent.sendSynth('rings' ++ ~dirt.numChannels,
[
ringstrig: ~ringstrig,
ringsfreq: ~ringsfreq,
ringsstruct: ~ringsstruct,
ringsbright: ~ringsbright,
ringsdamp: ~ringsdamp,
ringspos: ~ringspos,
ringsmodel: ~ringsmodel,
ringspoly: ~ringspoly,
ringsinternal: ~ringsinternal,
ringseasteregg: ~ringseasteregg,
out: ~out
]
)
}, {~ringsbright.notNil});
);
(
SynthDef("rings" ++ ~dirt.numChannels, { |out, ringsfreq=440,ringsstruct=0,ringsbright=0,ringsdamp=0.5,ringspos=0,ringsmodel=0,ringspoly=0,ringsinternal=0,ringseasteregg=0,ringsbypass=0|
var signal = In.ar(out, ~dirt.numChannels);
signal = MiRings.ar(
signal,
trig: ringsinternal,
pit: ringsfreq.cpsmidi,
struct: ringsstruct,
bright: ringsbright,
damp: ringsdamp,
pos: ringspos,
model: ringsmodel,
poly: ringspoly,
intern_exciter: ringsinternal,
easteregg: ringseasteregg
);
ReplaceOut.ar(out, signal)
}).add;
);
(
~dirt.addModule('ripples', { |dirtEvent|
dirtEvent.sendSynth('ripples' ++ ~dirt.numChannels,
[
ripplescf: ~ripplescf,
ripplesreson: ~ripplesreson,
ripplesdrive: ~ripplesdrive,
out: ~out
]
)
}, {~ripplescf.notNil});
);
(
SynthDef("ripples" ++ ~dirt.numChannels, { |out, ripplescf=0, ripplesreson=0, ripplesdrive=1|
var signal = In.ar(out, ~dirt.numChannels);
signal = MiRipples.ar(
signal,
cf: ripplescf,
reson: ripplesreson,
drive: ripplesdrive,
);
ReplaceOut.ar(out, signal)
}).add;
);
(
~dirt.addModule('warps', { |dirtEvent|
dirtEvent.sendSynth('warps' ++ ~dirt.numChannels,
[
warpsalgo: ~warpsalgo,
warpstimb: ~warpstimb,
warpsosc: ~warpsosc,
warpsfreq: ~warpsfreq,
warpsvgain: ~warpsvgain,
warpseasteregg: ~warpseasteregg,
out: ~out
]
)
}, {~warpsalgo.notNil});
);
(
SynthDef("warps" ++ ~dirt.numChannels, { |out, warpsalgo=0, warpstimb=0, warpsosc=1, warpsfreq=440, warpsvgain=1, warpseasteregg=0|
var signal = In.ar(out, ~dirt.numChannels);
signal = MiWarps.ar(
modulator: signal,
algo: warpsalgo,
lev1: 1,
lev2: 1,
timb: warpstimb,
osc: warpsosc,
freq: warpsfreq,
vgain: warpsvgain,
easteregg: warpseasteregg
);
ReplaceOut.ar(out, signal)
}).add;
);
(
(1..SuperDirt.maxSampleNumChannels).do { |numChannels|
SynthDef("global_mi_verb" ++ numChannels, { |dryBus, effectBus, verbwet=0, verbtime=0, verbdamp=0, verbhp=0, verbfreeze=0, verbdiff=0.625, verbgain=0|
var signal = In.ar(dryBus, ~dirt.numChannels);
Out.ar(effectBus, MiVerb.ar(
signal,
verbtime,
verbwet,
verbdamp,
verbhp,
verbfreeze,
verbdiff
) * verbgain);
}, [\ir, \ir]).add;
SynthDef("global_mi_clouds" ++ numChannels, { |dryBus, effectBus, cloudspitch=0, cloudspos=0, cloudssize=0, cloudsdens=0, cloudstex=0, cloudswet=0, cloudsgain=0, cloudsspread=0, cloudsrvb=0, cloudsfb=0, cloudsfreeze=0, cloudsmode=0, cloudslofi=0|
var signal = In.ar(dryBus, ~dirt.numChannels);
Out.ar(effectBus, MiClouds.ar(
inputArray: signal,
pit: cloudspitch,
pos: cloudspos,
size: cloudssize,
dens: cloudsdens,
tex: cloudstex,
drywet: cloudswet,
in_gain: cloudsgain,
spread: cloudsspread,
rvb: cloudsrvb,
fb: cloudsfb,
freeze: cloudsfreeze,
mode: cloudsmode,
lofi: cloudslofi
));
}, [\ir, \ir]).add;
};
);
{ MiBraids.ar(440) }.play;
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$ cat /Users/tommyheisler/Library/Application\ Support/SuperCollider/synthdefs/mi-ugens-params.hs
let
-- mutable synths
timbre = pF "timbre"
color = pF "color"
model = pI "model"
mode = pI "mode"
tidesshape = pF "tidesshape"
tidessmooth = pF "tidessmooth"
slope = pF "slope"
shift = pF "shift"
engine = pI "engine"
harm = pF "harm"
morph = pF "morph"
level = pF "level"
lpgdecay = pF "lpgdecay"
lpgcolour = pF "lpgcolour"
lpg d c = lpgdecay d # lpgcolour c
-- mutable effects
cloudspitch = pF "cloudspitch"
cloudspos = pF "cloudspos"
cloudssize = pF "cloudssize"
cloudsdens = pF "cloudsdens"
cloudstex = pF "cloudstex"
cloudswet = pF "cloudswet"
cloudsgain = pF "cloudsgain"
cloudsspread = pF "cloudsspread"
cloudsrvb = pF "cloudsrvb"
cloudsfb = pF "cloudsfb"
cloudsfreeze = pI "cloudsfreeze"
cloudsmode = pI "cloudsmode"
cloudslofi = pF "cloudslofi"
clouds p s d t = cloudsgain 1 # cloudspos p # cloudssize s # cloudsdens d # cloudstex t
cloudsblend w s f r = cloudsgain 1 # cloudswet w # cloudsspread s # cloudsfb f # cloudsrvb r
elementspitch = pF "elementspitch"
elementsstrength = pF "elementsstrength"
elementscontour = pF "elementscontour"
elementsbowlevel = pF "elementsbowlevel"
elementsblowlevel = pF "elementsblowlevel"
elementsstrikelevel = pF "elementsstrikelevel"
elementsflow = pF "elementsflow"
elementsmallet = pF "elementsmallet"
elementsbowtimb = pF "elementsbowtimb"
elementsblowtimb = pF "elementsblowtimb"
elementsstriketimb = pF "elementsstriketimb"
elementsgeom = pF "elementsgeom"
elementsbright = pF "elementsbright"
elementsdamp = pF "elementsdamp"
elementspos = pF "elementspos"
elementsspace = pF "elementsspace"
elementsmodel = pI "elementsmodel"
elementseasteregg = pI "elementseasteregg"
mu = pF "mu"
ringsfreq = pF "ringsfreq"
ringsstruct = pF "ringsstruct"
ringsbright = pF "ringsbright"
ringsdamp = pF "ringsdamp"
ringspos = pF "ringspos"
ringsmodel = pF "ringsmodel"
ringspoly = pI "ringspoly"
ringsinternal = pI "ringsinternal"
ringseasteregg = pI "ringseasteregg"
rings f s b d p = ringsfreq f # ringsstruct s # ringsbright b # ringsdamp d # ringspos p
ripplescf = pF "ripplescf"
ripplesreson = pF "ripplesreson"
ripplesdrive = pF "ripplesdrive"
ripples c r d = ripplescf c # ripplesreson r # ripplesdrive d
verbgain = pF "verbgain"
verbwet = pF "verbwet"
verbtime = pF "verbtime"
verbdamp = pF "verbdamp"
verbhp = pF "verbhp"
verbfreeze = pI "verbfreeze"
verbdiff = pF "verbdiff"
verb w t d h = verbgain 1 # verbwet w # verbtime t # verbdamp d # verbhp h
warpsalgo = pI "warpsalgo"
warpstimb = pF "warpstimb"
warpsosc = pI "warpsosc"
warpsfreq = pF "warpsfreq"
warpsvgain = pF "warpsvgain"
warpseasteregg = pI "warpseasteregg"
MacBook-Pro-de-Tommy:~ tommyheisler$
MacBook-Pro-de-Tommy:~ tommyheisler$ cat /Users/tommyheisler/Library/Application\ Support/SuperCollider/startup.scd
/*
This is an example startup file.
If you want to modify it, best copy it elsewhere to keep the git repository clean.
You can then load it by calling
"path/to/my/superdirt_startup.scd".load
from the supercollider startup file
The supercollider startup file is to be found in
Platform.userAppSupportDir +/+ "startup.scd",
or via the menu File > Open startup file
*/
s.reboot { // server options are only updated on reboot
// configure the sound server: here you could add hardware specific options
// see http://doc.sccode.org/Classes/ServerOptions.html
s.options.numBuffers = 1024 * 256; // increase this if you need to load more samples
s.options.memSize = 8192 * 32; // increase this if you get "alloc failed" messages
s.options.numWireBufs = 2048; // increase this if you get "exceeded number of interconnect buffers" messages
s.options.maxNodes = 1024 * 32; // increase this if you are getting drop outs and the message "too many nodes"
s.options.numOutputBusChannels = 2; // set this to your hardware output channel size, if necessary
s.options.numInputBusChannels = 2; // set this to your hardware output channel size, if necessary
// boot the server and start SuperDirt
s.waitForBoot {
~dirt.stop; // stop any old ones, avoid duplicate dirt (if it is nil, this won't do anything)
~dirt = SuperDirt(2, s); // two output channels, increase if you want to pan across more channels
// load mi-ugens.scd synthdefs
load("/home/tommyheisler/Library/Application Support/SuperCollider/synthdefs/mi-ugens.scd");
// end load mi-ugens.scd synthdefs
~dirt.loadSoundFiles("/Users/tommyheisler/Library/Application Support/SuperCollider/downloaded-quarks/Dirt-Samples/sample_tom/*");
~dirt.loadSoundFiles("/Users/tommyheisler/Desktop/RECUP\ SAMPLE\ USB/PRISM\ Retro\ Pop\ Tool\ Kit\ -\ BONUS\ Files/01\ -\ Organic/*");
~dirt.loadSoundFiles; // load samples (path containing a wildcard can be passed in)
// for example: ~dirt.loadSoundFiles("/Users/myUserName/Dirt/samples/*");
// s.sync; // optionally: wait for samples to be read
~dirt.start(57120, 0 ! 12); // start listening on port 57120, create two busses each sending audio to channel 0
SuperDirt.default = ~dirt; // make this instance available in sclang (optional)
// optional, needed for convenient access from sclang:
(
~d1 = ~dirt.orbits[0]; ~d2 = ~dirt.orbits[1]; ~d3 = ~dirt.orbits[2];
~d4 = ~dirt.orbits[3]; ~d5 = ~dirt.orbits[4]; ~d6 = ~dirt.orbits[5];
~d7 = ~dirt.orbits[6]; ~d8 = ~dirt.orbits[7]; ~d9 = ~dirt.orbits[8];
~d10 = ~dirt.orbits[9]; ~d11 = ~dirt.orbits[10]; ~d12 = ~dirt.orbits[11];
);
// define global effects for mutable instruments effects
~dirt.orbits.do { |x|
var clouds = GlobalDirtEffect(\global_mi_clouds, [\cloudspitch, \cloudspos, \cloudssize, \cloudsdens, \cloudstex, \cloudswet, \cloudsgain, \cloudsspread, \cloudsrvb, \cloudsfb, \cloudsfreeze, \cloudsmode, \cloudslofi]);
var verb = GlobalDirtEffect(\global_mi_verb, [\verbwet, \verbtime, \verbdamp, \verbhp, \verbfreeze, \verbdiff, \verbgain]);
x.globalEffects = x.globalEffects
.addFirst(clouds)
.addFirst(verb);
x.initNodeTree;
};
// end define global effects for mutable instruments effects
// directly below here, in your own copy of this file, you could add further code that you want to call on startup
// this makes sure the server and ~dirt are running
// you can keep this separate and make it easier to switch between setups
// by using "path/to/my/file.scd".load and if necessary commenting out different load statements
// ...
};
s.latency = 0.3; // increase this if you get "late" messages
};