Phosphenes: Interactive Sound Performance
Phosphenes: Interactive Sound Performance
//INSTRUCTIONS: The following code is to be run in SuperCollider. In addition, the work requires an iPad running the
TouchOSC app.
//Run the following three chunks in order, labeled 1 through 3. Then, open the interface on TouchOSC on the iPad to begin.
//The iPad interface reads the iPad’s position in three-dimensional space along the x, y, and z axes. It recognizes two
different types of gestures along all three axes: tilting, which is a slow, steady movement, and flicking, a sharp, fast
movement.
//Each gesture controls the sound in a different way, but as certain thresholds or requirements are met, such as number of
times to trigger a certain gesture, the functionalities change, thus progressing the piece. The composer’s performance
([Link] is a good way to get acquainted to the general idea of the work and what to
expect, but performers are encouraged to experiment with different combinations or sequences of gestures during rehearsal
and discover their own path through the soundscape.
//This PDF is meant for representative purposes only. For executable code, relevant interface files, detailed
instructions, and troubleshooting, contact the composer at zhengvic@[Link].
(
[Link](\jagged, {
arg freq = 440, freqLag = 2, freqRandLo = 4, freqRandHi = 8, freqAmpLow = 0,
amp = 0.2, ampLag = 2,
panRand = 10, left = -1, right = 1, panLag = 2, out;
var sig;
freq = [Link](freqLag);
amp = [Link](ampLag);
left = [Link](panLag);
right = [Link](panLag);
sig = [Link](freq);
sig = sig * amp;
sig = sig * [Link]([Link](4).range(freqRandLo, freqRandHi)).range(freqAmpLow, 1);
sig = [Link](sig, [Link](panRand).range(left, right));
[Link](out, sig);
}).add;
);
(
[Link](\jaggedBass, {
arg freq = 440, freqLag = 2,
pulseFreq = 10, pulseModFreq = 1.3,
amp = 0.2, ampLag = 2,
panRand = 10, left = -1, right = 1, panLag = 2,
out = 0;
var sig, modSig;
freq = [Link](freqLag);
amp = [Link](ampLag);
// pan = [Link](panLag);
sig = [Link](freq) + [Link](freq);
modSig = [Link](pulseFreq)*[Link](pulseModFreq*[Link](2).range(0.5, 2));
sig = sig * modSig;
sig = sig * amp;
sig = [Link](sig, [Link](panRand).range(left, right));
[Link](out, sig);
}).add;
);
(
[Link](\blast, {
arg freq = 440, freqLag = 2,
amp = 0.05, ampLag = 2,
pan = 0, panEnd = 0, panTime = 2,
susTime = 1,
out = 0;
var sig, env;
sig = [Link]({
arg i;
[Link](freq*Rand(0.99, 1.01))*[Link]([Link](0.5).range(0.5, 2), Rand(-2pi, 2pi)).range(0, 1);
});
env = [Link]([Link]([0, 1, 1, 0], [0.01, susTime, 0.5], \sqr), doneAction:2);
sig = [Link];
sig = sig * env;
sig = sig * amp;
sig = [Link](sig, [Link](pan, panEnd, panTime));
[Link](out, sig);
}).add;
);
(
[Link](\bleep, {
arg freq = 440, freqLag,
amp = 0.2, ampLag = 20,
fmFreq = 10, fmPhase = 0, fmLo = 0, fmHi = 0,
amFreq = 10, amPhase = 0, amLo = 1, amHi = 1,
pan = 0, panLag = 2,
out = 0, auxOut,
ampBus;
var sig, auxSig;
freq = [Link](freqLag);
amp = [Link](ampLag);
pan = [Link](panLag);
freq = freq + [Link](fmFreq, fmPhase).range(fmLo, fmHi);
sig = [Link](freq, mul:0.5) + [Link](freq, mul:0.2) + [Link](freq, mul:0.1);
auxSig = [Link](freq/2, mul:0.5) + [Link](freq/2, mul:0.2) + [Link](freq/2, mul:0.1);
sig = sig * amp;
auxSig = auxSig * amp;
sig = sig * [Link](amFreq, amPhase).range(amLo, amHi);
auxSig = auxSig * [Link](amFreq, amPhase).range(amLo, amHi);
sig = [Link](sig, pan);
auxSig = [Link](auxSig, pan);
[Link](out, sig);
[Link](auxOut, auxSig);
// [Link](amp, ampBus);
}).add;
);
(
[Link](\ping, {
arg freq = 440, amp = 0.2,
pan = 0, panEnd = 0, panSpeed = 0.5,
out;
var sig, env;
sig = [Link](freq, mul:0.5) + [Link](freq, mul:0.2) + [Link](freq, mul:0.1);
env = [Link]([Link](), doneAction:2);
sig = sig * env;
sig = sig * amp;
sig = [Link](sig, [Link](pan, panEnd, panSpeed));
[Link](out, sig);
}).add;
);
(
[Link](\delay, {
arg in, out,
rate0 = 0.4, rate1 = 0.6,
amp = 1,
decay0 = 2, decay1 = 2,
dry0 = 1, dry1 = 1,
amp0 = 1, amp1 = 1,
pan = 0;
var inSig, sigL, sigR, sig;
rate0 = [Link](5);
rate1 = [Link](5);
inSig = [Link](in, 2);
// sig = inSig;
// inSig = [[Link](mul:0.2), [Link](freq: 220, mul:0.2)];
sigL = [Link](inSig[0], 8, rate0, decay0, amp0);
sigR = [Link](inSig[1], 8, rate1, decay1, amp1);
// sig = [inSig + sigL, inSig + sigR];
sig = [Link](sigL+(inSig[0]*dry0), sigR+(inSig[1]*dry1), pan);
sig = sig * amp;
// sig = [sigL, sigR];
// sig = [[Link](inSig, 1, rate0, 2, amp0), [Link](inSig, 1, rate1, 2, amp1)];
[Link](out, sig);
}).add;
);
(
[Link](\filter, {
arg in, out,
hiFreq = 20000, hiLag = 2, loFreq = 20, loLag = 2,
amp = 1,
pan = 0;
var inSig, sig;
inSig = [Link](in, 2);
sig = [Link](inSig, loFreq);
sig = [Link](sig, hiFreq);
sig = sig * amp;
sig = [Link](sig, pan);
[Link](out, sig);
}).add;
);
(
[Link](\reverb, {
arg in, out,
mix = 0.33, mixLag = 2,
room = 0.5, roomLag = 2,
damp = 0.5, dampLag = 2,
bal = 0, balLag = 2;
var inSig, dry, wet, sig;
mix = [Link](mixLag);
room = [Link](roomLag);
damp = [Link](dampLag);
bal = [Link](balLag);
inSig = [Link](in, 2);
dry = inSig;
wet = [Link](inSig, mix, room, damp);
sig = [Link](dry, wet, bal);
[Link](out, sig);
}).add;
);
(
[Link](\eq, {
arg in, out,
hiFreq = 1200, midFreq = 600, loFreq = 300,
hidB = 0, middB = 1, lodB = 3,
amp = 1;
var sig;
sig = [Link](in, 2);
sig = [Link](sig, hiFreq, rq: 4, db:hidB);
sig = [Link](sig, midFreq, rq: 4, db:middB);
sig = [Link](sig, loFreq, rq: 4, db:lodB);
sig = sig * amp;
[Link](out, sig);
}).add;
)
})
)
//7. inverted, bubbling swell, chaos, z gyro messes with room size
(\aX: 0, \aY: 5, \aZ: 1, \gX: 2, \gY: 6, \gZ: 1),
//9. flip back over, reverb goes into chaos? change fund periodically with bubbling, blasts get higher
(\aX: 0, \aY: 5, \aZ: 2, \gX: 3, \gY: 7, \gZ: 2),
//11. tilt forward to resume, room breathing, jaggedbass in spec, blasts in spec, am/fm modulation in swells
(\aX: 4, \aY: 5, \aZ: 0, \gX: 4, \gY: 8, \gZ: 0),
//13. only jagged left, restore swells as beginning, fade out jagged
(\aX: 6, \aY: 6, \aZ: 0, \gX: 5, \gY: 0, \gZ: 0),
];
(
~aXFunc = [
{
},
{
arg val;
if(val > 0.6, {
~aXCounter = ~aXCounter + 1;
if(~aXCounter == 1, {
~jagged[0].set(\amp, 0.01);
});
if(~aXCounter%200 == 0, {
var ind;
ind = ~[Link](200);
~jagged[ind].set(\amp, 0.01*([Link](ind)));
});
});
if(val < 0.4, {
~aXCounter = ~aXCounter - 1;
if(~aXCounter%200 == 0, {
var ind;
ind = ~[Link](200);
~jagged[ind].set(\amp, 0);
});
});
if(~aXCounter == 800, {
if(~stepIndex < 1, {
~stepIndex = 1;
~[Link];
~[Link];
// ~[Link];
});
});
if(~aXCounter == 1400, {
if(~stepIndex < 2, {
~stepIndex = 2;
// ~[Link](\out, ~delayBus);
~[Link];
~[Link](\amp, 1);
// ~[Link]({
// arg synth, i;
// var amFreq, amHi, amLo;
// amFreq = exprand(5, 10);
// amHi = exprand(0.8, 1);
// amLo = exprand(0.5, 0.6);
// });
});
});
if(~aXCounter == 1500, {
if(~stepIndex < 3, {
~stepIndex = 3;
~[Link];
});
});
if(val < 0.05, {
if (~stepIndex == 4, {
~stepIndex = 5;
~[Link];
});
});
},
{
arg val;
if(val > 0.3, {
~jaggedFreqs = ~[Link]({
arg i;
var freq;
freq = (i*1.01).clip(20, 5000);
});
~[Link]({
arg synth, i;
var freq;
freq = ~jaggedFreqs[i];
[Link](\freq, freq, \freqLag, 5, \out, ~delayBus);
});
~swellFreqs = ~[Link]({
arg i;
var freq;
freq = (i*1.01).clip(20, 5000);
});
~[Link]({
arg synth, i;
var freq;
freq = ~swellFreqs[i];
[Link](\freq, freq, \freqLag, 5);
});
});
if(val < 0.1, {
~jaggedFreqs = ~[Link]({
arg i;
var freq;
freq = (i*0.99).clip(20, 5000);
});
~[Link]({
arg synth, i;
var freq;
// [Link];
freq = ~jaggedFreqs[i];
[Link](\freq, freq, \freqLag, 5, \out, ~delayBus);
});
~swellFreqs = ~[Link]({
arg i;
var freq;
freq = (i*0.99).clip(20, 5000);
});
~[Link]({
arg synth, i;
var freq;
freq = ~swellFreqs[i];
[Link](\freq, freq, \freqLag, 5);
});
~fund = ~jaggedFreqs[0];
});
~[Link](\mix, 1, \mixLag, 5, \damp, 0, \dampLag, 5, \room, 1, \roomLag, 5);
if ([Link](0.1) == 0.5, {
if(~stepIndex < 6, {
~stepIndex = 6;
~[Link];
~[Link](\freqLag, 0);
});
});
},
{
arg val;
if (val > 0.8, {
if (~stepIndex < 11, {
~stepIndex = 11;
~[Link];
~[Link];
// ~[Link];
~[Link]({
arg synth, i;
var freq;
freq = (~fund*(i+1))/8;
[Link](\freq, freq);
~jaggedBassFreqs[i] = freq;
});
});
});
},
{
arg val;
if (val > 0.7, {
~[Link](\amLo, 0, \amFreq, exprand(200, 400));
});
if (val < 0.3, {
~[Link](\fmHi, 100, \fmLo, -100, \fmFreq, exprand(200, 400));
});
if (val > 0.3, {
if (val < 0.7, {
~[Link](\amLo, 1, \fmHi, 0, \fmLo, 0);
});
});
},
{
arg val;
if (val < 0.4, {
~hiFreq = ~hiFreq*0.99;
~[Link](\hiFreq, ~hiFreq);
});
},
{
arg val;
var index;
index = ~[Link] - 1;
if (val < 0.4, {
~aXCounter2 = ~aXCounter2 + 1;
// ~[Link];
if (~aXCounter2%10 == 0, {
// \[Link];
~jagged[index].set(\amp, 0);
});
if (~aXCounter2 == 800, {
{
~[Link](\amp, 0);
[Link];
~[Link](\amp, 0);
[Link];
~[Link](\amp, 0);
[Link];
}.fork;
if (~stepIndex < 14, {
~stepIndex = 14;
~[Link];
\[Link];
~stepIndex = "theEnd";
});
});
});
}
]
);
(
~aYFunc = [
{
},
{
arg val;
// var amp;
if (val > 0.7, {
~swell[0].set(\amp, 0.1, \ampLag, 20, \pan, 1, \panLag, 10);
});
if (val < 0.3, {
~swell[0].set(\amp, 0.1, \ampLag, 20, \pan, -1, \panLag, 10);
});
if (val < 0.7, {
if (val > 0.3, {
~swell[0].set(\amp, 0, \ampLag, 2, \pan, 0, \panLag, 10);
});
});
},
{
arg val;
var index;
index = ~[Link](500) + 1;
if (val > 0.7, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.3, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, -1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.7, {
if (val > 0.3, {
[Link]({
arg i;
~swell[i].set(\amp, 0, \ampLag, {rrand(10, 20)}, \pan, 0, \panLag, 10);
});
});
});
if ([Link](0.1) == 0.5, {
~[Link]({
arg synth, i;
var freq, top;
top = 16;
if(i == 0, {
freq = ~fund*top;
});
if(i > 0, {
freq = ~fund*(top-(i+rrand(2, 4)));
});
~swellFreqs[i] = freq;
[Link](\freq, freq);
});
});
},
{
arg val;
var index;
index = ~[Link](500) + 1;
if (val > 0.7, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
~aYCounter = ~aYCounter + 1;
});
if (val < 0.3, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, -1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
~aYCounter = ~aYCounter + 1;
//!!!????
// ~[Link];
});
if (val < 0.7, {
if (val > 0.3, {
[Link]({
arg i;
~swell[i].set(\amp, 0, \ampLag, {rrand(10, 20)}, \pan, 0, \panLag, 10);
});
});
~aYCounter = (~aYCounter - 1).clip(0, 1000);
});
if ([Link](0.1) == 0.5, {
~[Link]({
arg synth, i;
var freq, top;
top = rrand(12, 16);
if(i == 0, {
freq = ~fund*top;
});
if(i > 0, {
freq = ~fund*(top-(i+rrand(4, 8)));
});
~swellFreqs[i] = freq;
[Link](\freq, freq);
});
});
if (~aYCounter > 400, {
if (~stepIndex < 4, {
~stepIndex = 4;
~[Link];
});
});
},
{
arg val;
var index;
index = ~[Link](500) + 1;
if (val > 0.7, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.3, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, -1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.7, {
if (val > 0.3, {
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 0, \panLag, 10);
});
});
});
},
{
arg val;
var index;
index = ~[Link](500) + 1;
if (val > 0.7, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.3, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, -1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.7, {
if (val > 0.3, {
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 0, \panLag, 10);
});
});
});
~[Link]({
arg synth, i;
var freq, top;
top = rrand(12, 16);
if(i == 0, {
freq = ~fund*top;
});
if(i > 0, {
freq = ~fund*(top-(i+rrand(4, 8)));
});
~swellFreqs[i] = freq;
[Link](\freq, freq);
});
},
{
arg val;
var index;
index = 20;
if (val > 0.7, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, 1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.3, {
{
[Link]({
arg i;
~swell[i].set(\amp, 0.05, \ampLag, {rrand(10, 20)}, \pan, -1, \panLag, {rrand(8, 12)});
rrand(0.1, 0.5).wait;
});
}.fork;
});
if (val < 0.7, {
if (val > 0.3, {
[Link]({
arg i;
~swell[i].set(\amp, 0, \ampLag, {rrand(10, 20)}, \pan, 0, \panLag, 10);
});
});
});
}
];
);
(
~aZFunc = [
{
},
{
arg val;
if (val > 0.9, {
if(~stepIndex < 7, {
~stepIndex = 7;
~[Link];
~[Link];
});
});
},
{
arg val;
if (val < 0.1, {
if(~stepIndex < 9, {
~stepIndex = 9;
~[Link];
// ~[Link];
});
});
}
]
);
(
~gXFunc = [
{
},
{
arg val;
var pitch, pan, amp;
pitch = [Link](0, 1, -1, 1);
pan = rrand(-0.2, 0.2);
if(~stepIndex >= 4, {
amp = 0.3;
}, {
amp = 0.1;
}
);
if (pitch == -1, {
Synth(\ping, [\freq, ~varPingFreq, \amp, amp, \pan, pan, \out, ~reverbBus]);
~varPingFreq = ~varPingFreq+(~fund*rrand(-3, 1));
});
if (pitch == 1, {
Synth(\ping, [\freq, ~varPingFreq, \amp, amp, \pan, pan, \out, ~delayBus]);
~varPingFreq = ~fund*rrand(12, 16);
});
},
{
arg val;
var pitch, pan, panEnd;
pitch = [Link](0, 1, -1, 1);
pan = rrand(-0.2, 0.2);
panEnd = pan*(-1);
Synth(\blast, [\freq, exprand(40, 80), \pan, pan, \panEnd, panEnd, \susTime, rrand(3, 5), \panTime, rrand(2, 4), \out,
~reverbBus]);
~blastCounter = ~blastCounter + 1;
if(~blastCounter >= 7, {
if(~stepIndex < 8, {
~stepIndex = 8;
~[Link];
~[Link](\amp, 0.05);
});
});
},
{
arg val;
var freq, amp, pan, panEnd;
freq = exprand(230, 400);
amp = 0.05;
pan = rrand(-0.2, 0.2);
panEnd = rrand(0, pan*(-1));
Synth(\blast, [\freq, freq, \amp, amp, \pan, pan, \panEnd, panEnd, \susTime, rrand(5, 8), \panTime, rrand(2, 4), \out,
~delayBus]);
},
{
arg val;
var freq, amp, pan, panEnd;
freq = ~fund*rrand(2, 5)/([Link](rrand(3, 5)));
amp = 0.05;
pan = rrand(-0.2, 0.2);
panEnd = rrand(0, pan*(-1));
Synth(\blast, [\freq, freq, \amp, amp, \pan, pan, \panEnd, panEnd, \susTime, rrand(3, 5), \panTime, rrand(2, 4), \out,
~reverbBus]);
~blastCounter2 = ~blastCounter2 + 1;
if(~blastCounter2 == 3, {
if(~stepIndex < 12, {
~stepIndex = 12;
~[Link];
// ~[Link];
~[Link](\mix, 1, \mixLag, 8, \damp, 0, \dampLag, 8, \room, 1, \roomLag, 8);
~[Link](\out, ~filtBus);
~[Link](\out, ~filtBus);
});
});
},
{
arg val;
var freq, amp, pan, panEnd;
freq = ~fund*rrand(2, 5)/([Link](rrand(3, 5)));
amp = 0.05;
pan = rrand(-0.2, 0.2);
panEnd = rrand(0, pan*(-1));
Synth(\blast, [\freq, freq, \amp, amp, \pan, pan, \panEnd, panEnd, \susTime, rrand(3, 5), \panTime, rrand(2, 4), \out,
~delayBus]);
~blastCounter2 = ~blastCounter2 + 1;
if(~blastCounter2 == 10, {
{
if(~stepIndex < 13, {
~stepIndex = 13;
~[Link];
~[Link]({
arg synth, i;
var freq, top;
top = rrand(12, 16);
if(i == 0, {
freq = ~fund*top;
});
if(i > 0, {
freq = ~fund*(top-(i+rrand(4, 8)));
});
~swellFreqs[i] = freq;
[Link](\freq, freq);
});
[Link];
~[Link](\out, ~reverbBus);
~[Link];
});
}.fork;
});
}
];
);
(
~gYFunc = [
{
},
{
arg val;
var pan;
pan = [Link](0, 1, 1, -1);
~swell[0].set(\amp, 0, \ampLag, 0);
Synth(\ping, [\freq, ~fund*16, \amp, 0.1, \pan, pan, \out, ~delayBus]);
},
{
arg val;
var pan, out;
pan = [Link](0, 1, 1, -1);
if(~counter == ((~[Link])-1), {
out = ~delayBus;
~gY1Vals = [10, 8, 6, 5, 4]+rrand(-1, 3);
~counter = 0;
}, {
out = ~reverbBus;
}
);
Synth(\ping, [\freq, ~fund*(~gY1Vals[~counter]), \pan, pan, \out, out]);
~counter = ~counter+1;
},
{
arg val, len;
var panStart, out;
panStart = [Link](0, 1, 1, -1);
out = ~reverbBus;
{
[Link]({
arg i;
var freq, panStep, pan;
panStep = 2/len;
if(val == 0, {
panStep = panStep*(-1);
});
pan = panStart-(panStep*(i+1));
// [Link];
// [Link];
freq = ~fund*(17-(i*(rrand(1, 2))));
Synth(\ping, [\freq, freq, \amp, 0.1, \pan, pan, \out, out]);
rrand(0.6, 1.2).wait;
});
}.fork;
},
{
arg val;
var panStart;
panStart = [Link](0, 1, 1, -1);
{
~[Link]({
arg synth, i;
if (i%2 == 0, {
[Link](\amp, 0.2, \ampLag, 2, \pan, panStart);
});
});
[Link];
~[Link]({
arg synth, i;
[Link](\amp, 0, \ampLag, 2, \pan, panStart*(-1), \panLag, 4);
});
}.fork;
},
{
arg val;
var pitch, pan, amp;
pan = [Link](0, 1, 1, -1);
if (~stepIndex >= 4, {
amp = 0.3;
}, {
amp = 0.1;
});
Synth(\ping, [\freq, ~varPingFreq, \amp, amp, \pan, pan, \panEnd, pan*(-1), \out, ~reverbBus]);
~varPingFreq = ~varPingFreq+(~fund*rrand(-3, 1));
},
{
arg val;
var freq, amp, pan, panEnd;
freq = exprand(40, 80);
amp = 0.1;
pan = [Link](0, 1, 1.0, -1.0);
pan = rrand(0, pan);
panEnd = rrand(0, pan*(-1));
Synth(\blast, [\freq, freq, \amp, amp, \pan, pan, \panEnd, panEnd, \susTime, rrand(3, 5), \panTime, rrand(2, 4), \out,
~reverbBus]);
~blastCounter = ~blastCounter + 1;
if(~blastCounter >= 7, {
if(~stepIndex < 8, {
~stepIndex = 8;
~[Link];
~[Link](\amp, 0.05);
});
});
},
{
arg val;
var freq, amp, pan, panEnd;
freq = exprand(230, 400);
amp = 0.05;
pan = [Link](0, 1, 1.0, -1.0);
pan = rrand(0, pan);
panEnd = rrand(0, pan*(-1));
Synth(\blast, [\freq, freq, \amp, amp, \pan, pan, \panEnd, panEnd, \susTime, rrand(3, 5), \panTime, rrand(2, 4), \out,
~reverbBus]);
},
{
arg val;
var freq, amp, pan, panEnd;
freq = ~fund*rrand(2, 5)/([Link](rrand(3, 5)));
amp = 0.05;
pan = [Link](0, 1, 1.0, -1.0);
pan = rrand(0, pan);
panEnd = rrand(0, pan*(-1));
Synth(\blast, [\freq, freq, \amp, amp, \pan, pan, \panEnd, panEnd, \susTime, rrand(3, 5), \panTime, rrand(2, 4), \out,
~reverbBus]);
}
];
// ~gYFunc[2].(0, 3);
~rateChange = [Link]({
{
var rate0, rate1;
rate0 = rrand(0.3, 0.8);
rate1 = rrand(0.3, 0.8);
~[Link](\rate0, rate0, \rate1, rate1);
rrand(0.2, 0.5).wait;
}.loop;
});
~jaggedMorph = [Link]({
var index;
{
index = ~[Link](500) + 1;
[Link]({
arg i;
~jagged[i].set(\amp, exprand(0.005, 0.01), \ampLag, rrand(4, 8), \left, rrand(-1, 0), \right, rrand(0, 1), \panLag,
rrand(4, 8));
rrand(3, 5).wait;
// ("Jagged" + [Link]).postln;
});
}.loop;
});
~roomChaos = [Link]({
{
var mix, mixLag, damp, dampLag, room, roomLag;
mix = rrand(0.0, 1.0);
mixLag = rrand(3.0, 6.0);
damp = rrand(0.0, 1.0);
dampLag = rrand(3.0, 6.0);
room = rrand(0.0, 1.0);
roomLag = rrand(3.0, 6.0);
~[Link](\mix, mix, \mixLag, mixLag, \damp, damp, \dampLag, dampLag, \room, room, \roomLag, roomLag);
rrand(3.0, 5.0).wait;
}.loop;
});
~roomBreathe = [Link]({
{
var expandTime, contractTime;
expandTime = rrand(5.0, 8.0);
contractTime = rrand(3.0, 5.0);
~[Link](\mix, 0, \mixLag, contractTime, \damp, 1, \dampLag, contractTime, \room, 0, \roomLag, contractTime);
rrand(3.0, 5.0).wait;
~[Link](\mix, 1, \mixLag, expandTime, \damp, 0, \dampLag, expandTime, \room, 1, \roomLag, expandTime);
rrand(3.0, 5.0).wait;
}.loop;
});
~stepIndex = 0;
~gY1Vals = [10, 8, 6, 5, 4]+rrand(-1, 3);
~counter = 0;
~pingGroup = [Link]();
~jaggedGroup = [Link]();
~swellGroup = [Link]();
~wooshGroup = [Link]();
~jaggedBassGroup = [Link]();
~effectGroup = [Link](addAction:\addToTail);
~aXCounter = 0;
~aYCounter = 0;
~aXCounter2 = 0;
~blastCounter = 0;
~warpCounter = 0;
~blastCounter2 = 0;
~hiFreq = 20000;
~pingFreq = ~fund*16;
~varPingFreq = ~fund*rrand(13, 16);
~jaggedFreqs = [Link](20, nil);
~swellFreqs = [Link](5, nil);
~wooshFreqs = [Link](5, nil);
~jaggedBassFreqs = [Link](5, nil);
~jagged = [Link]({
arg i;
var freq, left, right;
if(i == 0, {
freq = ~fund*18;
});
if(i > 0, {
freq = ~fund*(18-(i+rrand(0, 2)));
left = rrand(-1.0, 0.0);
right = rrand(0.0, 1.0);
});
~jaggedFreqs[i] = freq;
Synth(\jagged, [\freq, freq, \freqRandLo, 4+(i*0.2), \freqRandHi, 8+(i*0.4), \panRand, 10+(i*2), \left, left, \right,
right, \amp, 0, \out, ~reverbBus], ~jaggedGroup);
});
~swell = [Link]({
arg i;
var freq;
if(i == 0, {
freq = ~fund*16;
});
if(i > 0, {
freq = ~fund*(16-(i+rrand(0, 2)));
});
~swellFreqs[i] = freq;
Synth(\bleep, [\freq, freq, \fmFreq, 0.4, \fmPhase, rrand(-2pi, 2pi), \amFreq, rrand(0.1, 0.3), \amPhase, rrand(-2pi,
2pi), \amLo, 0.8, \amHi, 1.2, \amp, 0, \out, ~reverbBus, \auxOut, ~largeDelayBus], ~swellGroup);
});
~woosh = [Link]({
arg i;
var freq;
freq = ~fund*(10-(i+rrand(0, 2)));
~wooshFreqs[i] = freq;
Synth(\filt, [\freq, freq, \amp, 0, \out, ~delayBus], ~wooshGroup);
});
~jaggedBass = [Link]({
arg i;
var freq;
freq = ~fund+(~fund*0.32*i);
~jaggedBassFreqs[i] = freq;
Synth(\jaggedBass, [\freq, freq, \amp, 0, \out, ~reverbBus], ~jaggedBassGroup);
});
(
[Link](\accelX, {
arg input;
var val, func;
val = input[1];
func = ~steps[~stepIndex][\aX];
~aXFunc[func].(val: val);
// [Link];
// ~[Link];
}, "/accelerometer/x");
);
(
[Link](\accelY, {
arg input;
var val, func;
val = input[1];
func = ~steps[~stepIndex][\aY];
~aYFunc[func].(val: val);
}, "/accelerometer/y");
);
(
[Link](\accelZ, {
arg input;
var val, func;
val = input[1];
func = ~steps[~stepIndex][\aZ];
~aZFunc[func].(val: val);
}, "/accelerometer/z");
);
//
(
[Link](\gyroX, {
arg input;
var val, func;
val = input[1];
// [Link];
// ~[Link];
func = ~steps[~stepIndex][\gX];
if(~[Link] > 20, {
~[Link](0);
});
if(val < 1.0, {
if(val > 0.0, {
~gyroXVals = ~[Link](val);
});
});
// "left".postln;
});
});
}, "/gyro/y");
);
//For some god-awful reason the OSC swapped the X and Y axes between the gyro and the accel. Swapped the names of the
OSCdefs. I am NOT reprogramming the OSC.
(
[Link](\gyroY, {
arg input;
var val, func;
val = input[1];
// [Link];
// ~[Link];
func = ~steps[~stepIndex][\gY];
if(~[Link] > 20, {
~[Link](0);
});
if(val < 1.0, {
if(val > 0.0, {
~gyroYVals = ~[Link](val);
});
});
if(val >= 31, {
if(~[Link](\) == false, {
~gyroYVals = ~[Link](\);
~gYFunc[func].(val: 1,
// len:~[Link](200) + 2
);
// "front".postln;
// Synth (\bleep, [\freq, exprand(2000, 4000), \amp, 0.01]);
});
});
if(val <= 0, {
if(~[Link](\) == false, {
~gyroYVals = ~[Link](\);
~gYFunc[func].(val: 0,
// len:~[Link]( 200) + 2
);
// Synth(\bleep, [\freq, exprand(2000, 4000), \amp, 0.01]);
});
});
}, "/gyro/x");
);
(
[Link](\gyroZ, {
arg input;
// [Link];
var val, func;
val = input[1];
func = ~steps[~stepIndex][\gZ];
~gZFunc[func].(val: val);
}, "/gyro/z");
);
w = [Link]("Phosphenes", Rect(200, 200, 500, 500))
.layout_(
HLayout(
~status = [Link](w, Rect(0, 0, 100, 100))
.string_(~[Link])
.font_(Font(size:200))
)
);
[Link];
~setGui = [Link]({
{
~status.string_(~[Link]);
[Link];
}.loop;
});
[Link](~setGui);
)