You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
315 lines
8.9 KiB
Markdown
315 lines
8.9 KiB
Markdown
(/*
|
|
Copyright (c) 2018 Luka Prinčič, All rights reserved.
|
|
This program is free software distributed under
|
|
GNU General Public Licence. See COPYING for more info.
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*/
|
|
// Be nice. Say hi!
|
|
postln("\n\n
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
>>> Hello. <<<
|
|
|
|
|
|
█████╗ ███╗ ██╗████████╗██╗ ██████╗ ██████╗ ███╗ ██╗███████╗
|
|
██╔══██╗████╗ ██║╚══██╔══╝██║██╔════╝ ██╔═══██╗████╗ ██║██╔════╝
|
|
███████║██╔██╗ ██║ ██║ ██║██║ ███╗██║ ██║██╔██╗ ██║█████╗
|
|
██╔══██║██║╚██╗██║ ██║ ██║██║ ██║██║ ██║██║╚██╗██║██╔══╝
|
|
██║ ██║██║ ╚████║ ██║ ██║╚██████╔╝╚██████╔╝██║ ╚████║███████╗
|
|
╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
|
|
|
|
|
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
");
|
|
|
|
Server.default.waitForBoot {
|
|
|
|
|
|
// home folder of current script
|
|
var dir = PathName(thisProcess.nowExecutingPath).pathOnly;
|
|
|
|
// load samples
|
|
~granSmp = PathName(dir +/+ "smp/").files;
|
|
~granBfrList = List();
|
|
~granBfr = List();
|
|
|
|
postln(" \n~~~ Loading samples for granular synthesis ..." );
|
|
~granSmp.do({ |item, i|
|
|
postln(" " + i + "" + item.folderName +/+ item.fileName);
|
|
~granBfrList.add(item.fileName);
|
|
~granBfr.add(Buffer.readChannel(s, item.fullPath, channels:[0])); // [0] forces mono!
|
|
});
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// granulator "Granny" definition
|
|
|
|
SynthDef(\Granny, {
|
|
|
|
arg bufnum,
|
|
freq = 200, fvar = 0.05,
|
|
dur = 0.3, durvar = 0.01,
|
|
pitch = 1, pitchvar = 0.001,
|
|
width = 0.4,
|
|
gain = 0.2,
|
|
reverb = 0.5,
|
|
posvar = 0.05,
|
|
|
|
lpfLFOSpeed = 0.013,
|
|
lpfLFOSpeedVar = 0.1,
|
|
lpfLFOMin = 400,
|
|
lpfLFOMax = 5000,
|
|
|
|
posLFOSpeed = 0.005,
|
|
posLFOSpeedVar = 0.1,
|
|
posLFOMin = 0,
|
|
posLFOMax = 1
|
|
;
|
|
|
|
// variables
|
|
var signal,
|
|
lpfFreq = SinOsc.kr(freq:lpfLFOSpeed * SinOsc.kr(freq:lpfLFOSpeedVar, mul:0.5, add:1)).linlin(
|
|
inMin:-1, inMax:1, outMin:lpfLFOMin, outMax:lpfLFOMax),
|
|
pos = SinOsc.kr(freq:posLFOSpeed * SinOsc.kr(freq:posLFOSpeedVar, mul:0.5, add:1)).linlin(
|
|
inMin:-1, inMax:1, outMin:posLFOMin, outMax:posLFOMax),
|
|
|
|
// envelopes
|
|
gainEnv = Env.newClear(4),
|
|
gainEnvCtl = \gainEnv.kr(gainEnv.asArray),
|
|
|
|
lpfEnv = Env.newClear(4),
|
|
lpfEnvCtl = \lpfEnv.kr(lpfEnv.asArray)
|
|
;
|
|
|
|
// main granular synthesis generator: GrainBuf uGen
|
|
signal = GrainBuf.ar(
|
|
numChannels: 2, // stereo
|
|
trigger: Impulse.kr(freq + (freq * (fvar * LFNoise2.kr(freq)))), // a UGen
|
|
dur: dur + (durvar * LFNoise2.kr(freq)), // in seconds
|
|
sndbuf: bufnum,
|
|
rate: pitch + (pitchvar * LFNoise2.kr(5)), // pitch
|
|
pos: pos + (posvar * LFNoise2.kr(freq)), // position 0-1
|
|
interp: 2, // interpolation for pitchshifting
|
|
pan: LFNoise1.kr(10).range(width.neg, width),
|
|
maxGrains: 512,
|
|
mul: gain,
|
|
add: 0
|
|
);
|
|
|
|
// low pass filter
|
|
signal = LPF.ar(
|
|
in: signal,
|
|
// prevent filter clicks by lagging low pass filter freq changes
|
|
freq: Lag.kr(lpfFreq, 0.2)
|
|
* EnvGen.kr(envelope: lpfEnvCtl, gate: 1)); // filter frequency envelope
|
|
|
|
// fade in, sustain, fade out
|
|
signal = signal * EnvGen.kr(envelope: gainEnvCtl, gate: 1, doneAction: 2);
|
|
|
|
// reverb
|
|
signal = GVerb.ar(
|
|
in: signal,
|
|
roomsize: 243,
|
|
revtime: 6,
|
|
damping: 1,
|
|
inputbw: 1,
|
|
drylevel: -6.dbamp,
|
|
earlyreflevel: reverb,
|
|
taillevel: 0.dbamp
|
|
);
|
|
|
|
Out.ar(0, signal);
|
|
|
|
postln("~~~ adding SynthDef: Granny ...");
|
|
|
|
}).add;
|
|
|
|
|
|
}
|
|
)
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// Synths
|
|
|
|
|
|
|
|
// ACT I
|
|
(
|
|
~act_I = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(21), // "09 - PART II - Chorus.7.wav"
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [20,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.023, \lpfLFOSpeedVar, 0.041, \lpfLFOMin, 1000, \lpfLFOMax, 8000,
|
|
\posLFOSpeed, 0.020, \posLFOSpeedVar, 0.089, \posLFOMin, 0.56, \posLFOMax, 0.92
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
( // ACT II --------------------------------------------------------------------------
|
|
~act_II = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(43), // "23 - The Mother.6.wav"
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.013, \lpfLFOSpeedVar, 0.041, \lpfLFOMin, 1000, \lpfLFOMax, 4000,
|
|
\posLFOSpeed, 0.020, \posLFOSpeedVar, 0.089, \posLFOMin, 0.25, \posLFOMax, 0.90 ,
|
|
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
( // ACT IIb --------------------------------------------------------------------------
|
|
~act_IIb = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(28), // "13 - Chorus Of The Self-Righteous.7.wav"
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.013, \lpfLFOSpeedVar, 0.054, \lpfLFOMin, 1000, \lpfLFOMax, 2000,
|
|
\posLFOSpeed, 0.057, \posLFOSpeedVar, 0.033, \posLFOMin, 0.1, \posLFOMax, 0.6,
|
|
|
|
]
|
|
);
|
|
)
|
|
|
|
( // ACT III (and ACT VII) ------------------------------------------------------------
|
|
~act_III = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(25), // "11 - Chorus Of The Persecutors And Persecuted.8.wav"
|
|
\pitch, 0.95,
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.063, \lpfLFOSpeedVar, 0.054, \lpfLFOMin, 1500, \lpfLFOMax, 6000,
|
|
\posLFOSpeed, 0.037, \posLFOSpeedVar, 0.033, \posLFOMin, 0.1, \posLFOMax, 0.8,
|
|
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
( // ACT IV --------------------------------------------------------------------------
|
|
~act_IV = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(45), // "26 - Part III - Chorus.1.wav"
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.009, \lpfLFOSpeedVar, 0.054, \lpfLFOMin, 1000, \lpfLFOMax, 6000,
|
|
\posLFOSpeed, 0.037, \posLFOSpeedVar, 0.033, \posLFOMin, 0.35, \posLFOMax, 0.95,
|
|
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
( // ACT V --------------------------------------------------------------------------
|
|
~act_V = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(51), // "29 - PRELUDIUM - General Ensemble.7.wav"
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.009, \lpfLFOSpeedVar, 0.054, \lpfLFOMin, 2000, \lpfLFOMax, 9000,
|
|
\posLFOSpeed, 0.037, \posLFOSpeedVar, 0.033, \posLFOMin, 0.05, \posLFOMax, 0.55,
|
|
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
( // ACT VI --------------------------------------------------------------------------
|
|
~act_VI = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(48), // "28 - Scena (Bass Solo & Chorus).8.wav"
|
|
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeed, 0.031, \lpfLFOSpeedVar, 0.054, \lpfLFOMin, 700, \lpfLFOMax, 1500,
|
|
\posLFOSpeed, 0.037, \posLFOSpeedVar, 0.033, \posLFOMin, 0.15, \posLFOMax, 0.9,
|
|
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
( // --------------------------------------------------------------------------
|
|
~number38 = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(38), // "21 - A Spiritual Of Anger (Chorus & Bass Solo).3.wav"
|
|
\lpfLFOSpeed, 0.041, \lpfLFOMin, 700, \lpfLFOMax, 6500,
|
|
\posLFOSpeed, 0.037, \posLFOMin, 0.15, \posLFOMax, 0.9,
|
|
|
|
// fade-in, fade-out
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeedVar, 0.054, \posLFOSpeedVar, 0.033,
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
|
|
( // --------------------------------------------------------------------------
|
|
~number0 = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(0), // "01 - PART I - Chorus.10.wav"
|
|
\lpfLFOSpeed, 0.021, \lpfLFOMin, 700, \lpfLFOMax, 6500,
|
|
\posLFOSpeed, 0.017, \posLFOMin, 0.09, \posLFOMax, 0.91,
|
|
\gain, 0.15,
|
|
|
|
// fade-in, fade-out
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeedVar, 0.054, \posLFOSpeedVar, 0.033,
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
( // --------------------------------------------------------------------------
|
|
~number1 = Synth(\Granny,
|
|
[
|
|
\bufnum, ~granBfr.at(1), // "01 - PART I - Chorus.12.wav"
|
|
\lpfLFOSpeed, 0.021, \lpfLFOMin, 700, \lpfLFOMax, 6500,
|
|
\posLFOSpeed, 0.017, \posLFOMin, 0.09, \posLFOMax, 0.91,
|
|
\gain, 0.15,
|
|
|
|
// fade-in, fade-out
|
|
\gainEnv, Env([0, 1, 1, 0], [1,320,40], \lin),
|
|
\lpfEnv, Env([0.001, 1, 1, 0.001], [19,301,30], \exp),
|
|
|
|
\lpfLFOSpeedVar, 0.054, \posLFOSpeedVar, 0.033,
|
|
]
|
|
);
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|