0% found this document useful (0 votes)
5 views18 pages

Phosphenes: Interactive Sound Performance

The document provides instructions for a musical piece titled 'Phosphenes' by Victor Zheng, which involves running code in SuperCollider and using the TouchOSC app on an iPad to control sound through gestures. It outlines the setup process, including loading SynthDefs and defining functions that respond to the iPad's position and gestures, affecting the soundscape dynamically. Performers are encouraged to explore and experiment with different gestures to create their unique interpretations of the piece.

Uploaded by

Victor Zheng
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views18 pages

Phosphenes: Interactive Sound Performance

The document provides instructions for a musical piece titled 'Phosphenes' by Victor Zheng, which involves running code in SuperCollider and using the TouchOSC app on an iPad to control sound through gestures. It outlines the setup process, including loading SynthDefs and defining functions that respond to the iPad's position and gestures, affecting the soundscape dynamically. Performers are encouraged to explore and experiment with different gestures to create their unique interpretations of the piece.

Uploaded by

Victor Zheng
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

//Title: Phosphenes (2024)

//Composer: Victor Zheng

//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].

//1/3 - Load SynthDefs


(
[Link] = 8192*128;
[Link]({
(
[Link](\filt, {
arg freq = 440, amp = 0.2, ampLag, rq = 0.001, pan = 0, panLag = 2, out;
var sig;
rq = [Link](8);
amp = [Link](ampLag);
pan = [Link](panLag);
sig = [Link]([Link](), freq, rq, 1/sqrt(rq));
sig = sig * amp;
sig = [Link](sig, pan);
[Link](out, sig);
}).add;
);

(
[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;
)
})
)

//2/3 - Load functions


(
~steps = [
//0. high jagged freqs, tipping forward, slow swell and pings
(\aX: 1, \aY: 1, \aZ: 1, \gX: 0, \gY: 1, \gZ: 1),

//1. moving forward, densifying jagged freqs, distorting swell


(\aX: 1, \aY: 2, \aZ: 1, \gX: 1, \gY: 5, \gZ: 1),

//2. lower swell, busywork setting in the middle


(\aX: 1, \aY: 3, \aZ: 1, \gX: 1, \gY: 5, \gZ: 1),

//3. increase density of jagged, gradually strengthen swell


(\aX: 1, \aY: 3, \aZ: 1, \gX: 1, \gY: 5, \gZ: 1),
//4. swell stays, finish developing jagged
(\aX: 1, \aY: 4, \aZ: 1, \gX: 1, \gY: 5, \gZ: 1),

//5. false vacuum event


(\aX: 2, \aY: 0, \aZ: 0, \gX: 0, \gY: 0, \gZ: 0),

//6. settle on new freq zone


(\aX: 0, \aY: 0, \aZ: 1, \gX: 0, \gY: 0, \gZ: 0),

//7. inverted, bubbling swell, chaos, z gyro messes with room size
(\aX: 0, \aY: 5, \aZ: 1, \gX: 2, \gY: 6, \gZ: 1),

//8. several blasts, jagged bass rhythm enters


(\aX: 0, \aY: 5, \aZ: 2, \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),

//10. restore spectrum, freeze


(\aX: 3, \aY: 0, \aZ: 0, \gX: 0, \gY: 0, \gZ: 0),

//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),

//12. slowly filter out jaggedbass, swells; restore large room


(\aX: 5, \aY: 5, \aZ: 0, \gX: 5, \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),

//14. the end!


(\aX: 0, \aY: 0, \aZ: 0, \gX: 0, \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]);
}
];

//turn left is 0, turn right is 1


~gZFunc = [
{
},
{
arg val;
if(abs(0.5 - val) > 0.3, {
// ~[Link](\mix, rrand(0.5, 0.8), \room, rrand(0.5, 0.8), \damp, rrand(0.2, 0.4), \bal, rrand(0.2, 0.4));
})
},
{
arg val;
var offset, warp;
offset = 0.5 - val;
warp = [Link](-0.5, 0.5, 0.95, 1.05);
// [Link];
// [Link];
// [Link];
warp = warp*rrand(0.95, 1.05);
if (abs(offset) > 0.3, {
// [Link];
// [Link];
~fund = ~fund * warp;
~warpCounter = ~warpCounter + 1;
if(~warpCounter == 30, {
~[Link]({
arg synth, 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;
[Link](\freq, freq, \out, ~reverbBus);
});
if(~stepIndex < 10, {
~stepIndex = 10;
~[Link];
});
});
});
}
]
);

// ~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;
});

//3/3 - Initialize piece


(
~fund = 110;
~gyroXVals = [];
~gyroYVals = [];

~stepIndex = 0;
~gY1Vals = [10, 8, 6, 5, 4]+rrand(-1, 3);
~counter = 0;

~largeDelayBus = [Link](s, 2);


~delayBus = [Link](s, 2);
~reverbBus = [Link](s, 2);
~filtBus = [Link](s, 2);
~eqBus = [Link](s, 2);

// ~swellAmpBus = [Link](s, 1);

~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);
});

~delay = Synth(\delay, [\in, ~delayBus, \out, ~reverbBus], ~effectGroup);


~largeDelay = Synth(\delay, [\in, ~largeDelayBus, \out, ~reverbBus, \rate0, 3, \rate1, 4, \decay0, 5, \decay1, 5, \dry0,
0, \dry1, 0, \amp, 0], ~effectGroup);
~filter = Synth(\filter, [\in, ~filtBus, \out, ~reverbBus, \hiFreq, ~hiFreq], ~effectGroup);
~reverb = Synth(\reverb, [\in, ~reverbBus, \mix, 0.5, \out, ~eqBus], ~effectGroup, \addToTail);
~eq = Synth(\eq, [\in, ~eqBus, \out, 0, \hidB, 0, \middB, 1, \lodB, 3, \amp, 1], ~effectGroup, \addToTail);

~[Link](\middB, 2, \lodB, 3);

(
[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);
});
});

if(val >= 1.0, {


if(~[Link](\) == false, {
~gyroXVals = ~[Link](\);
~gXFunc[func].(val: 1);
// ~[Link](\pan, 0, \panLag, 0);
// Synth(\bleep, [\freq, exprand(2000, 4000), \pan, rrand(0.5, 1)]);
// "right".postln;
// ~[Link];
});
});
if(val <= 0.0, {
if(~[Link](\) == false, {
~gyroXVals = ~[Link](\);
~gXFunc[func].(val: -1);
// Synth(\bleep, [\freq, exprand(2000, 4000), \pan, rrand(-0.5, -1)]);

// "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);
)

You might also like