/////////////////////////////////////////////////////////////////
/// GLOBAL VARS
var window, synthDefArray, num = 2, mainGroup;
/// BUFFER VARS
var bufferArray, pathPopUpArray, volMidiArray;
////// INSTR DIRECTORY
var instrRtfs, rtfArray, rtfString;
var file, instrArray, instrNameArray;
var instrDir;
var instrProb;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SYNTHDEFS
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// LOOPER
SynthDef("slMono", {
arg bus, buffer, amp, mute = 1, rate, length, offset, slope = 0.005;
var env, sound;
env = EnvGen.kr(Env.new([0,1,1,0], [slope / 2, 1 - slope, slope / 2]),
timeScale:length, doneAction:2) * (amp * mute);
sound = PlayBuf.ar(1, buffer, rate, 1.0, offset * 44100, 1) * env;
Out.ar(bus, [sound, sound]);
}).load(s);
SynthDef("slStereo", {
arg bus, buffer, amp, mute = 1, rate, length, offset, slope = 0.005;
var env, sound;
env = EnvGen.kr(Env.new([0,1,1,0], [slope / 2, 1 - slope, slope / 2]),
timeScale:length, doneAction:2) * (amp * mute);
sound = PlayBuf.ar(2, buffer, rate, 1.0, offset * 44100, 1) * env;
Out.ar(bus, sound);
}).load(s);
SynthDef("slMonoLoop", {
arg bus, buffer, amp, mute = 1, rate, length, offset, speed;
var env, sound, offSmp;
offSmp = offset * 44100;
env = EnvGen.kr(Env.new([0,1,1,0], [0.01, 0.98, 0.01]),
timeScale:length, doneAction:2) * (amp * mute);
sound = LoopBuf.ar(1, buffer, rate, 1.0, offSmp, offSmp + (speed * 44100)) * env;
Out.ar(bus, [sound, sound]);
}).load(s);
SynthDef("slStereoLoop", {
arg bus, buffer, amp, mute = 1, rate, length, offset, speed;
var env, sound, offSmp;
offSmp = offset * 44100;
env = EnvGen.kr(Env.new([0,1,1,0], [0.01, 0.98, 0.01]),
timeScale:length, doneAction:2) * (amp * mute);
sound = LoopBuf.ar(2, buffer, rate, 1.0, offSmp, offSmp + (speed * 44100)) * env;
Out.ar(bus, sound);
}).load(s);
synthDefArray = ["slMono", "slStereo", "slMonoLoop", "slStereoLoop"];
Instr(\slInput, {arg inbus; In.ar(inbus, 2)});
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// INITIALIZATION
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// BUFFER INIT
bufferArray = Array.new;
pathPopUpArray = Array.new;
volMidiArray = Array.new;
mainGroup = Group.head(RootNode.new);
////// INSTR DIRECTORY
instrDir = "/Applications/Supercollider/Instr/";
instrRtfs = Cocoa.getPathsInDirectory(instrDir);
(instrRtfs.size - 1).do({
arg i;
file = File(instrDir ++ instrRtfs.at(i + 1), "r");
String.readNew(file).compile.value;
file.close;
});
Library.at(\Instr).at(\Effect).do({
arg file;
file.do({
arg instr;
instrArray = instrArray.add(instr.name);
});
});
instrArray.do({
arg item;
instrNameArray = instrNameArray.add(item.at(1).asString);
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GUI
////////////////////////////////////////////////////////////////////////////////////////////////////////////
window = SCWindow("6 Foot Rabbit", Rect(0, 0, (num * 105) + 5, 415), false).front;
window.view.background_(Color(0.2, 0.5, 0.2));
window.onClose_({
bufferArray.do({
arg item;
item.free;
});
volMidiArray.do({
arg item;
item.free;
});
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// INSTANCES
////////////////////////////////////////////////////////////////////////////////////////////////////////////
num.do({
arg l;
var synth, sampGroup, sampBus;
/// GUI VARS
var sampleComp, effectComp, mixComp, loopComp, beatComp, grainComp;
var pathPopUp, cutPopUp, effectCutButton,effectPopUpArray23, effectOnOffArray, mixSlider;
var pathPopUpValue = 0, cutPopUpValue =4, syncValue = 0, syncLength = 16, pitchValue = 1, revValue = 1, startValue = 0;
/// CUT METHOD VARS
var cutTask, bcBarLength = 32, bcBarOffset = 0, bcBarHigh = 32, bcTableFill, bcTally = 0;
var bcRhythmArray, bcAmpArray, bcPositionArray, bcProbArray, bcRhythmArrayCopy, bcSampleArray;
var bcLengthValue = 1, bcEntropyValue = 0, bcSampleEntropy = 0, bcRollProb = 0, bcEntropyFillValue = 0;
////// LOOP
var lLoopStart = 0, lLoopEnd = 1, loopSelect = nil, loopRange;
////// AUDIO THRU
////// BEAT CUT
////// GRAINULAR
var gPosition = 0, gPositionVar = 0.4, gDensity = 0.3, gDensityVar = 0.7, gLength = 0, gLengthVar = 1;
var gSlope = 0.4, gSlopeVar = 0.6, gAmp = 0, gAmpVar = 1;
////// EFFECTS
var effectGroup1, effectGroup2, effectGroup3, effectGroup4;
var effectPatch1, effectPatch2, effectPatch3, effectPatch4;
var effectGroupArray, effectPatchArray;
////// MIX
var ampValue = 1, panValue = 0;
/////// PATCH
var patch, patchFunction, patchGroup;
var effectOnArray, effectSocketArray;
var prevPatchArray, prevOnArray, prevArgsArray;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// INITIALIZATION
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GLOBAL INIT
sampGroup = Group.head(mainGroup);
sampBus = Bus.audio(s, 2);
patchGroup = Group.tail(mainGroup);
//sampBus = Bus.new;
effectGroup1 = Group.tail(sampGroup);
effectGroup2 = Group.tail(sampGroup);
effectGroup3 = Group.tail(sampGroup);
effectGroup4 = Group.tail(sampGroup);
/// CUT METHOD INIT
bcProbArray = [0.1, 0.2, 0.4, 0.5, 0.4];
////// OTHER
effectOnArray = Array.fill(5, {0});
effectSocketArray = Array.fill(5, {0});
prevPatchArray = Array.fill(5, {0});
prevOnArray = Array.fill(5, {0});
prevArgsArray = Array.fill(5, {0});
patch = Patch(\slInput, [sampBus.index]);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GUI
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// SAMPLE
sampleComp = SCCompositeView(window, Rect(5 + (l*105), 5, 100, 125))
.background_(Color(0.4, 0.7, 0.4));
SCButton(sampleComp, Rect(10 + (l*105), 10, 90, 15))
.states_([["Load", Color.black, Color(0.2, 0.5, 0.2)]])
.action_({
CocoaDialog.getPaths({
arg paths;
var sf, low, high, bars;
paths.do({
arg item, i;
var bundle, popUpItems;
bundle = CXBundle.new;
bufferArray = bufferArray.add(Sample.new(item));
popUpItems = pathPopUpArray.at(0).items.add(bufferArray.last.name);
pathPopUpArray.do({
arg item;
item.items_(popUpItems);
});
bufferArray.last.prepareToBundle(sampGroup, bundle);
bundle.send(s, 0);
bufferArray.last.guessBeats;
bufferArray.last.beats.postln;
});
}, {"Canceled".postln}, 20);
});
SCButton(sampleComp, Rect(10 + (l*105), 30, 15, 15))
.states_([["-", Color.black, Color(0.2, 0.5, 0.2)]])
.action_({
var items;
bufferArray.at(pathPopUpValue).free;
bufferArray.removeAt(pathPopUpValue);
items = pathPopUpArray.at(0).items;
items.postln;
items.removeAt(pathPopUpValue.asInteger);
items.postln;
pathPopUpArray.do({
arg item;
item.items_(items);
});
});
pathPopUpArray = pathPopUpArray.add(SCPopUpMenu(sampleComp, Rect(25 + (l*105), 30, 75, 15))
.action_({
arg view;
pathPopUpValue = view.value;
});
);
cutPopUp = SCPopUpMenu(sampleComp, Rect(10 + (l*105), 50, 75, 15))
.items_(["Loop", "BeatCut", "Granular"])
.action_({
arg view;
var syncFunc, viewValue;
viewValue = view.value;
if (cutPopUpValue != viewValue, {
//effectCutButton.valueAction_(0);
syncFunc = {
if (startValue == 1, {
cutTask.stop;
synth.free
});
if (viewValue == 0, {
cutTask = Task({
var length = 1, rate;
loop({
rate = ((bufferArray.wrapAt(pathPopUpValue).size / 44100) / Tempo.beats2secs(
bufferArray.wrapAt(pathPopUpValue).beats*4));
length = (lLoopEnd - lLoopStart) * (bufferArray.wrapAt(pathPopUpValue).size / 44100)
;
synth=Synth(synthDefArray.at((bufferArray.wrapAt(pathPopUpValue).numChannels-1)),[
"bus", sampBus.index,
"buffer", bufferArray.wrapAt(pathPopUpValue).bufnum,
"amp", ampValue,
"rate", rate * pitchValue *revValue,
"length", (length / rate) * (1 / pitchValue),
"offset", (bufferArray.at(pathPopUpValue).size / 44100) * lLoopStart
], sampGroup, \addToHead);
(((lLoopEnd - lLoopStart) * (bufferArray.wrapAt(pathPopUpValue).beats * 4))
* (1 / pitchValue)).wait;
});
}, TempoClock.default);
});
if (viewValue == 1, {
cutTask = Task({
var offset, dbeat, sample, length, loop;
loop({
bcBarLength.do({
arg i;
i = i + bcBarOffset;
if (bcRhythmArrayCopy.at(i) != 0, {
sample = [pathPopUpValue, bcSampleArray.at(i)].at(
windex([1 - bcSampleEntropy, bcSampleEntropy]));
offset = [
bcPositionArray.at((i % (bufferArray.wrapAt(sample).beats
* 16)).asInteger),
(bufferArray.wrapAt(sample).beats * (16.rand))
].at(windex([1 - bcEntropyValue, bcEntropyValue]));
loop = windex([1 - bcRollProb, bcRollProb]);
length =Tempo.beats2secs(0.25)
*(bcRhythmArrayCopy.at(i)*bcLengthValue).max(0.2);
if (((loop == 1) && (bcRhythmArrayCopy.at(i) < 4)), {
Synth(synthDefArray.at(bufferArray.wrapAt(sample).numChannels+1),
[
"bus", sampBus.index,
"buffer", bufferArray.wrapAt(sample).bufnum,
//"amp", bcAmpArray.at(i),
"amp", ampValue,
"rate", ((bufferArray.wrapAt(sample).size / 44100) /
Tempo.beats2secs(bufferArray.wrapAt(sample).beats*4))
* pitchValue * revValue,
"length", length,
"speed",Tempo.beats2secs([0.0625,0.125,0.25,0.33].choose),
"offset",(((bufferArray.wrapAt(sample).size / 44100) /
(bufferArray.wrapAt(sample).beats * 16))*offset)
* pitchValue
], sampGroup, \addToHead);
}, {
Synth(synthDefArray.at((bufferArray.wrapAt(sample).numChannels-1)
.min(1)),[
"bus", sampBus.index,
"buffer", bufferArray.wrapAt(sample).bufnum,
//"amp", bcAmpArray.at(i), sounds bad
"amp", ampValue,
"rate", ((bufferArray.wrapAt(sample).size / 44100) /
Tempo.beats2secs(bufferArray.wrapAt(sample).beats*4))
* pitchValue * revValue,
"length", length,
"offset",(((bufferArray.wrapAt(sample).size / 44100) /
(bufferArray.wrapAt(sample).beats * 16))*offset)
* pitchValue
], sampGroup, \addToHead);
//bufferArray.wrapAt(sample).beats.postln;
});
if (bcEntropyFillValue == 1, {
bcPositionArray.put(i, offset);
});
});
0.25.wait;
});
});
}, TempoClock.default);
});
if (viewValue == 2, {
cutTask = Task({
loop({
Synth(synthDefArray.at((bufferArray.wrapAt(pathPopUpValue).numChannels - 1)), [
"bus", sampBus.index,
"buffer", bufferArray.wrapAt(pathPopUpValue).bufnum,
"amp", rrand(gAmp, gAmpVar) * ampValue,
"rate", ((bufferArray.wrapAt(pathPopUpValue).size / 44100) /
Tempo.beats2secs(bufferArray.wrapAt(pathPopUpValue).beats * 4))
* pitchValue * revValue,
"length", rrand(gLength, gLengthVar) * 0.5,
"slope", rrand(gSlope, gSlopeVar),
"offset",(bufferArray.at(pathPopUpValue).size/
44100)*rrand(gPosition,gPositionVar)
], sampGroup, \addToHead);
(rrand(gDensity, gDensityVar) * 0.5).wait;
});
}, SystemClock);
});
if (startValue == 1, {cutTask.start});
};
if (syncValue == 0, {
TempoClock.default.schedAbs(
TempoClock.default.elapsedBeats.trunc(syncLength) + syncLength, {
syncFunc.value;
nil;
});
}, {
syncFunc.value;
});
});
cutPopUpValue = viewValue;
effectCutButton.valueAction_(0);
effectCutButton.valueAction_(1);
});
cutPopUpValue = 2;
cutPopUp.valueAction_(0);
effectCutButton = SCButton(sampleComp, Rect(85 + (l*105), 50, 15, 15))
.states_([
["p", Color.black, Color(0.2, 0.5, 0.2)],
["e", Color.black, Color(0.2, 0.5, 0.2)]
])
.action_({
arg view;
if (view.value == 0, {
effectComp.visible_(true);
loopComp.visible_(false);
beatComp.visible_(false);
grainComp.visible_(false);
}, {
effectComp.visible_(false);
loopComp.visible_(false);
beatComp.visible_(false);
grainComp.visible_(false);
if (cutPopUpValue == 0, {loopComp.visible_(true)});
if (cutPopUpValue == 1, {beatComp.visible_(true)});
if (cutPopUpValue == 2, {grainComp.visible_(true)});
});
});
SCPopUpMenu(sampleComp, Rect(10 + (l*105), 70, 75, 15))
.items_(["2 Octaves Up", "1 Octave Up", "Normal", "1 Octave Down", "2 Octaves Down"])
.action_({
arg view;
pitchValue = [4, 2, 1, 0.5, 0.25].at(view.value);
})
.value_(2);
SCButton(sampleComp, Rect(85 + (l*105), 70, 15, 15))
.states_([
["f", Color.black, Color(0.2, 0.5, 0.2)],
["r", Color.black, Color(0.2, 0.5, 0.2)]
])
.action_({
arg view;
revValue = [1, -1].at(view.value);
});
SCButton(sampleComp, Rect(10 + (l*105), 90, 45, 15))
.states_([
["Synced", Color.black, Color(0.2, 0.5, 0.2)],
["Free", Color.black, Color(0.2, 0.5, 0.2)]
])
.action_({
arg view;
syncValue = view.value;
});
SCPopUpMenu(sampleComp, Rect(55 + (l*105), 90, 45, 15))
.items_(["1 Bar", "2 Bars", "4 Bars", "8 Bars"])
.action_({
arg view;
syncLength = [4, 8, 16, 32].at(view.value);
})
.value_(2.0);
SCButton(sampleComp, Rect(10 + (l*105), 110, 90, 15))
.states_([
["Start", Color.black, Color(0.2, 0.5, 0.2)],
["Stop", Color.black, Color(0.2, 0.5, 0.2)]
])
.action_({
arg view;
var func;
startValue = view.value;
func = {
if (startValue == 1, {
cutTask.start;
patch.play(patchGroup);
}, {
cutTask.stop;
patch.stop;
synth.free;
});
};
if (syncValue == 0, {
TempoClock.default.schedAbs(
TempoClock.default.elapsedBeats.trunc(syncLength) + syncLength, {
func.value;
nil;
});
}, {
func.value;
});
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// EFFECTS
////////////////////////////////////////////////////////////////////////////////////////////////////////////
effectComp = SCCompositeView(window, Rect(5 + (l*105), 135, 100, 205))
.background_(Color(0.4, 0.7, 0.4));
5.do({
arg i;
effectGroupArray = [effectGroup1, effectGroup2, effectGroup3, effectGroup4];
effectPatchArray = [effectPatch1, effectPatch2, effectPatch3, effectPatch4];
SCButton(effectComp, Rect(10 + (l*105), 140 + (i*40), 15, 15))
.states_([
[" ", Color.black, Color(0.2, 0.5, 0.2)],
["|", Color.black, Color(0.2, 0.5, 0.2)]
])
.action_({
arg view;
effectOnArray.put(i, view.value);
patchFunction.value;
prevOnArray.put(i, view.value);
});
SCPopUpMenu(effectComp, Rect(25 + (l*105), 140 + (i*40), 60, 15))
.items_(instrNameArray)
.action_({
arg view;
effectSocketArray.put(i, view.value);
if (effectOnArray.at(i) == 1, {
patchFunction.value;
});
prevPatchArray.put(i, view.value);
});
SCButton(effectComp, Rect(85 + (l*105), 140 + (i*40), 15, 15))
.states_([["e", Color.black, Color(0.2, 0.5, 0.2)]])
.action_({
patch.gui;
});
SCSlider(effectComp, Rect(10 + (l*105), 160 + (i*40), 90, 15))
});
////// MIX
mixComp = SCCompositeView(window, Rect(5 + (l*105), 345, 100, 65))
.background_(Color(0.4, 0.7, 0.4));
mixSlider = SC2DSlider(mixComp, Rect(10 + (l*105), 350, 90, 35))
.action_({
arg view;
ampValue = \amp.asSpec.map(view.y);
sampGroup.set("amp", ampValue);
panValue = view.x;
})
.x_(0.5);
volMidiArray = volMidiArray.add(MidiSlider({
arg val;
{
mixSlider.y_(val / 127);
nil;
}.defer;
}));
window.name_(window.name ++ "-" ++ (volMidiArray.last.cc + 1).asString);
SCButton(mixComp, Rect(10 + (l*105), 390, 90, 15))
.states_([
["Mute", Color.black, Color(0.2, 0.5, 0.2)],
["UnMute", Color.black, Color(0.2, 0.5, 0.2)]
]);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// CUT EDIT COMPOSITES
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// LOOP
////////////////////////////////////////////////////////////////////////////////////////////////////////////
loopComp = SCCompositeView(window, Rect(5 + (l*105), 135, 100, 205))
.background_(Color(0.4, 0.7, 0.4))
.visible_(false);
SCStaticText(loopComp, Rect(10 + (l*105), 140, 90, 15))
.string_("Loopedit")
.align_(\center)
.background_(Color(0.2, 0.5, 0.2));
SCButton(loopComp, Rect(10 + (l*105), 160, 90, 15))
.states_([
["Free", Color.black, Color(0.2, 0.5, 0.2)],
["Synced", Color.black, Color(0.2, 0.5, 0.2)]
])
.action_({
arg view;
if (view.value == 1, {
loopRange.step_(0.125);
}, {
loopRange.step_(0.0001);
});
})
.value_(1);
SCStaticText(loopComp, Rect(10 + (l*105), 180, 90, 15))
.string_("Loop Points")
.align_(\center)
.background_(Color(0.2, 0.5, 0.2));
loopRange = SCRangeSlider(loopComp, Rect(10 + (l*105), 200, 90, 15))
.action_({
arg view;
lLoopStart = view.lo;
lLoopEnd = view.hi;
if (abs(lLoopEnd - lLoopStart) < 0.01, {
lLoopStart = lLoopStart - 0.001;
lLoopEnd = lLoopEnd + 0.001;
});
})
.lo_(lLoopStart)
.hi_(lLoopEnd)
.step_(0.125);
SCButton(loopComp, Rect(10 + (l*105), 220, 90, 15))
.states_([["Retrigger", Color.black, Color(0.2, 0.5, 0.2)]]);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////BEAT CUT
////////////////////////////////////////////////////////////////////////////////////////////////////////////
beatComp = SCCompositeView(window, Rect(5 + (l*105), 135, 100, 205))
.background_(Color(0.4, 0.7, 0.4))
.visible_(false);
SCButton(beatComp, Rect( 10 + (l*105), 140, 90, 15))
.states_([["Fill", Color.black, Color.new(0.7, 0.7, 0.9)]])
.action_({
var tally = 0;
bcTableFill.value;
(bcBarLength).do({
arg i;
if (bcRhythmArray.at(bcBarHigh - 1 - i) == 0, {
tally = tally + 1
}, {
bcRhythmArrayCopy.put((bcBarHigh -1- i), tally + 1);
tally = 0;
});
});
});
SCRangeSlider(beatComp, Rect( 10 + (l*105), 160, 90, 15))
.step_(0.25)
.hi_(bcBarHigh / 64)
.lo_(bcBarOffset)
.action_({
arg view;
var tally = 0, high;
bcBarLength = ((view.hi - view.lo) * 64).max(16).asInteger;
bcBarOffset = (view.lo * 64).asInteger;
bcBarHigh = (view.hi * 64).asInteger.max(16);
(bcBarLength).do({
arg i;
if (bcRhythmArray.at(bcBarHigh - 1 - i) == 0, {
tally = tally + 1
}, {
bcRhythmArrayCopy.put((bcBarHigh -1- i), tally + 1);
tally = 0;
});
});
});
SCStaticText(beatComp, Rect( 10 + (l*105), 180, 90, 15))
.string_("Probability")
.align_(\center)
.background_(Color.new(0.7, 0.7, 0.9));
SCMultiSliderView(beatComp, Rect(10 + (l*105), 200, 90, 35))
.gap_(0)
.thumbSize_(90 / 5)
.action_({
arg view;
bcProbArray.put(view.index, view.currentvalue);
})
.value_(bcProbArray);
SCSlider(beatComp, Rect( 10 + (l*105), 240, 90, 15))
.value_(0.5)
.action_({
arg view;
bcLengthValue = view.value;
})
.value_(bcLengthValue);
SCSlider(beatComp, Rect( 10 + (l*105), 260, 90, 15))
.value_(0.5)
.action_({
arg view;
bcEntropyValue = view.value;
})
.value_(bcEntropyValue);
SCSlider(beatComp, Rect( 10 + (l*105), 280, 90, 15))
.value_(0.5)
.action_({
arg view;
bcSampleEntropy = view.value;
})
.value_(bcSampleEntropy);
SCSlider(beatComp, Rect( 10 + (l*105), 300, 90, 15))
.value_(0.5)
.action_({
arg view;
bcRollProb = view.value;
})
.value_(bcRollProb);
SCButton(beatComp, Rect( 10 + (l*105), 320, 90, 15))
.states_([
["Entropy Write Off", Color.black, Color.new(0.7, 0.7, 0.9)],
["Entropy Write On", Color.black, Color.new(0.6, 0.6, 0.8)]
])
.action_({
arg view;
bcEntropyFillValue = view.value;
});
bcTableFill = {
var wholePlus, low, high, tally = 0, randVol;
bcRhythmArray = Array.new;
while ({bcRhythmArray.size <= 64}, {
wholePlus = [16, 20, 24, 28, 32].choose;
bcRhythmArray = bcRhythmArray ++ [
([wholePlus] ++ Array.fill(wholePlus - 1, 0)),
[8, 0, 0, 0, 0, 0, 0, 0],
[4, 0, 0, 0],
[2, 0],
[1],
].at(windex(
if (bcProbArray.normalizeSum == [0, 0, 0, 0, 1], {
bcProbArray.normalizeSum;
}, {
bcProbArray.normalizeSum + [
[0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 1.0]
].at(bcRhythmArray.size % 2).normalizeSum
});
));
});
bcRhythmArrayCopy = bcRhythmArray;
bcPositionArray = Array.fill(bcRhythmArray.size, {0});
bcRhythmArray.do({
arg item, i;
bcPositionArray.put(i, [i , bcRhythmArray.size.rand]
.at(windex([1 - bcEntropyValue, bcEntropyValue])));
});
randVol = {
arg i;
[0.9, 0.6, 0.7, 0.6, 0.8, 0.6, 0.7, 0.6].at(i % 8) + rrand(-0.2, 0.2);
};
bcAmpArray = Array.fill(bcRhythmArray.size, {0});
bcRhythmArray.do({
arg item, i;
bcAmpArray.put(i, randVol.value(i));
});
bcSampleArray = Array.fill(bcRhythmArray.size, {20.rand});
};
bcTableFill.value;
(bcBarLength).do({
arg i;
if (bcRhythmArray.at(bcBarHigh - 1 - i) == 0, {
bcTally = bcTally + 1
}, {
bcRhythmArrayCopy.put((bcBarHigh -1- i), bcTally + 1);
bcTally = 0;
});
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////GRANULAR
////////////////////////////////////////////////////////////////////////////////////////////////////////////
grainComp = SCCompositeView(window, Rect(5 + (l*105), 135, 100, 205))
.background_(Color(0.4, 0.7, 0.4))
.visible_(false);
SCStaticText(grainComp, Rect(10 + (l*105), 140, 90, 15))
.align_(\center)
.background_(Color(0.2, 0.5, 0.2))
.string_("Position");
SCRangeSlider(grainComp, Rect(10 + (l*105), 160, 90, 15))
.action_({
arg view;
gPosition = view.lo;
gPositionVar = view.hi;
})
.lo_(gPosition)
.hi_(gPositionVar);
SCStaticText(grainComp, Rect(10 + (l*105), 180, 90, 15))
.align_(\center)
.background_(Color(0.2, 0.5, 0.2))
.string_("Density");
SCRangeSlider(grainComp, Rect(10 + (l*105), 200, 90, 15))
.action_({
arg view;
gDensity = view.lo;
gDensityVar = view.hi;
})
.lo_(gDensity)
.hi_(gDensityVar);
SCStaticText(grainComp, Rect(10 + (l*105), 220, 90, 15))
.align_(\center)
.background_(Color(0.2, 0.5, 0.2))
.string_("Length");
SCRangeSlider(grainComp, Rect(10 + (l*105), 240, 90, 15))
.action_({
arg view;
gLength = view.lo;
gLengthVar = view.hi;
})
.lo_(gLength)
.hi_(gLengthVar);
SCStaticText(grainComp, Rect(10 + (l*105), 260, 90, 15))
.align_(\center)
.background_(Color(0.2, 0.5, 0.2))
.string_("Slope");
SCRangeSlider(grainComp, Rect(10 + (l*105), 280, 90, 15))
.action_({
arg view;
gSlope = view.lo;
gSlopeVar = view.hi;
})
.lo_(gSlope)
.hi_(gSlopeVar);
SCStaticText(grainComp, Rect(10 + (l*105), 300, 90, 15))
.align_(\center)
.background_(Color(0.2, 0.5, 0.2))
.string_("Amp");
SCRangeSlider(grainComp, Rect(10 + (l*105), 320, 90, 15))
.action_({
arg view;
gAmp = view.lo;
gAmpVar = view.hi;
})
.lo_(gAmp)
.hi_(gAmpVar);
//effectCutButton.valueAction_(0);
//effectCutButton.valueAction_(1);
patchFunction = {
var tempArray, index = 0, notInput;
notInput = true;
if (patch.isPlaying, {
patch.stop;
});
tempArray = Array.new;
prevArgsArray = Array.fill(5, {nil});
if (patch.instr.name.at(0) != \slInput, {
while ({patch.isKindOf(Patch) & notInput}, {
tempArray = tempArray.add(patch.args);
patch = patch.args.at(0);
if (patch.instr.name.at(0) == \slInput, {notInput = false});
});
});
prevOnArray.do({
arg item, i;
if ((item == 1) & (effectSocketArray.at(i) == prevPatchArray.at(i)), {
prevArgsArray.put(i, tempArray.pop);
});
});
patch.free;
patch = Patch(\slInput, [sampBus.index]);
effectSocketArray.do({
arg item, i;
if (effectOnArray.at(i) == 1, {
if (prevArgsArray.at(i) == nil, {
patch = Patch(instrArray.at(item.asInteger), [patch]);
}, {
prevArgsArray.at(i).do({
arg item, j;
"".postln;"".postln;
item.postln;
"".postln;"".postln;
if (item.isKindOf(KrNumberEditor) == false, {
if (item.isKindOf(SimpleNumber) || item.isKindOf(Patch), {
prevArgsArray.at(i).put(j, patch);
}, {
prevArgsArray.at(i).put(j, nil);
});
}, {
prevArgsArray.at(i).put(
j, KrNumberEditor(item.value, item.spec)
);
});
});
patch = Patch(instrArray.at(item.asInteger) ,prevArgsArray.at(i));
});
});
});
if (startValue == 1, {patch.play(patchGroup)});
};
});
******
/*authors so far: casey basichis */ |