Compare commits

...

3 Commits

Author SHA1 Message Date
Rob Canning 0c81b6db25 spatialisation updates to SC and interface 2022-09-12 08:46:12 +02:00
Rob Canning 156ebc1b2a added startup scripts 2022-09-07 13:55:44 +02:00
Rob Canning a9a86fbe59 replaced grains with trgrains for multichannel granulation 2022-09-07 13:54:15 +02:00
6 changed files with 289 additions and 174 deletions

View File

@ -0,0 +1 @@
sudo rfcomm bind 0 10:97:BD:36:D6:4E

51
go.sh 100755
View File

@ -0,0 +1,51 @@
#! /bin/bash
BTDEV=/dev/rfcomm0;
# kill any exsisting jack ghosts
#killall -9 jackd qjackctl
# turn on bluetooth device
blueman-manager;
## bind bluetooth to /dev/rfcomm0
## requires password / sudo
if test -e $BTDEV ; then
echo "BLUETOOTH ALREADY BOUND!"
else gnome-terminal --title=BLUDETOOTHBIND -- ./bind_bluetooth.sh;
fi;
# start jackd
if [ $(pidof jackd) ] ; then
echo "jackd ALREADY RUNNING"
else echo "starting jackd"; gnome-terminal --title=JACKD SERVER -- ./start_jackd.sh;
fi;
sleep 2;
# start node server
gnome-terminal --title=NODE SERVER -- node wavey-wind/server.js /dev/rfcomm0 &&
# start supercollider
#scide gtr.scd &
# start guitarix
if [ $(pidof guitarix) ] ; then
echo "GUITARIX ALREADY RUNNING"
else echo "starting guitarix"; guitarix;
fi;
sleep 4;
jack_connect system:capture_1 gx_head_amp:in_0 &&
jack_connect gx_head_fx:out_0 SuperCollider:in_1

406
gtr.scd
View File

@ -1,3 +1,5 @@
//////////////////////////////////////////////////// ////////////////////////////////////////////////////
/* GRANULATING SAMPLER INSTRUMENT ////////////////// /* GRANULATING SAMPLER INSTRUMENT //////////////////
////////////////////////////////////rc@kiben.net//// ////////////////////////////////////rc@kiben.net////
@ -12,6 +14,14 @@
Ljudmila OTF Hackathon, Maribor 1-6 March 2022 */ Ljudmila OTF Hackathon, Maribor 1-6 March 2022 */
// GTR MAC address: 10:97:BD:36:D6:4E // GTR MAC address: 10:97:BD:36:D6:4E
// DUMP ALL OSC MESSAGES (for debugging) ////////
OSCFunc.trace(true);
OSCFunc.trace(false);
thisProcess.openPorts;
( (
s.reboot{ s.reboot{
@ -25,13 +35,13 @@ s.reboot{
s.options.numOutputBusChannels = 4; s.options.numOutputBusChannels = 4;
} ) } )
// RUNME 0 ========================================= // RUNME 0 =========================================
s.boot(); s.boot();
// RUNME 1 ========================================= // RUNME 1 =========================================
// ------------------------------------------------- // -------------------------------------------------
( // SETUP ----------------------------------------- - ( // SETUP ----------------------------------------- -
// --------------------------------------------------- // ---------------------------------------------------
// Allocate a 4 second mono buffer // Allocate a 4 second mono buffer
@ -46,18 +56,26 @@ thisProcess.openUDPPort(57121);
// RUNME 2 ========================================== // RUNME 2 ==========================================
// ------------------------------------------------- // -------------------------------------------------
( // DEFINE SYNTHS --------------------------------- <-- ( // DEFINE SYNTHS --------------------------------- <--
// ------------------------------------------------- // -------------------------------------------------
( // direct signal + reverb ------------------------- ( // direct signal + reverb -------------------------
SynthDef("dryIn", { arg in=0, instrPanModeIndex=0, out=0, sensorInstrPan=0;
var signal, dry, wet, instrPan, instrPanMode0, instrPanMode1, instrPanMode2, instrPanMode3, instrPanMode4, instrPanMode5;
SynthDef("dryIn", { arg in=0, out=0; instrPanMode0 = 0; //LFNoise1.kr(100).range(-0.2, 0.2);
var signal, dry, wet; instrPanMode1 = 1; //LFNoise1.kr(100).range(-0.2, 0.2);
dry = SoundIn.ar(in); instrPanMode2 = SinOsc.kr(0.33).range(-0.2, 0.2);
wet = FreeVerb.ar(dry, mix:0.4, room:0.55, damp:0); instrPanMode3 = LFNoise1.kr(10).range(-0.2, 0.2);
signal = Pan2.ar(wet, 0); instrPanMode4 = LFSaw.kr(0.33).bipolar.range(-1,1);
instrPanMode5 = LFNoise1.kr(10).range(-1, 1);
instrPan = Select.kr(instrPanModeIndex,
[instrPanMode0, instrPanMode1, instrPanMode2, instrPanMode3, instrPanMode4, instrPanMode5, sensorInstrPan]);
signal = SoundIn.ar(in);
//wet = FreeVerb.ar(dry, mix:0.4, room:0.55, damp:0);
signal = PanAz.ar(4, signal, instrPan);
signal = signal * 0.9; signal = signal * 0.9;
Out.ar(0, signal); Out.ar(0, signal);
}).add; }).add;
@ -93,55 +111,60 @@ SynthDef("recBuf",{
// ~rndpos = LFNoise2.kr(0.1).range(0, 1); // ~rndpos = LFNoise2.kr(0.1).range(0, 1);
SynthDef(\buf_grain, { | out, gate = 1, amp = 0.5, SynthDef(\buf_grain, { | out, gate = 1, amp = 0.5,
sndbuf, envbuf, pan=0, imp=50, sndbuf, envbuf, pan=0, imp=50,
pitchmodeindex=0, sensorpitch=1, sensorgdur=0.1, sensorgpan=0, pitchmodeindex=0, sensorpitch=1, sensorgdur=0.1, sensorgpan=0,
positionmodeindex=1, gdurmodeindex=0, gpanmodeindex=0, positionmodeindex=0, gdurmodeindex=0, gpanmodeindex=0,
sensorposition=0, impulsemodeindex=0, sensorimpulse=0, sensorposition=0, impulsemodeindex=0, sensorimpulse=0,
signalChannelIndex=1, signalChannelIndex=1,
rlow= -1, rhigh=10 | rlow= -1, rhigh=10 |
var signal, env, freqdev, pos, var signal, env, freqdev, pos,
pitchmode0, pitchmode1, pitch, pitchmode0, pitchmode1, pitchmode2, pitch,
gdurmode0, gdurmode1, gdurmode2, gdurmode3, gdurmode4, gdurmode5, gdurmode6, gdur, gdurmode0, gdurmode1, gdurmode2, gdurmode3, gdurmode4, gdurmode5, gdurmode6, gdur,
gpanmode0, gpanmode1, gpan, gpanmode0, gpanmode1, gpanmode2, gpan,
positionmode0, positionmode1, positionmode2, position, positionmode0, positionmode1, positionmode2, positionmode3, position,
impulsemode0, impulsemode1, impulse, impulsemode0, impulsemode1, impulse,
stereosignal, quadsignalL, quadsignalR, quadsignal, signalchannels; stereosignal, quadsignalL, quadsignalR, quadsignal, signalchannels;
// grain duration mode -untransposed, random, or sensor controlled // grain duration mode -untransposed, random, or sensor controlled
gdurmode0 = 0.05; gdurmode0 = 0.2;
gdurmode1 = 0.1; gdurmode1 = 0.5;
gdurmode2 = LFNoise1.kr.range(0.1, 0.3); gdurmode2 = LFNoise1.kr.range(0.1, 0.3);
gdurmode3 = LFNoise1.kr.range(0.1, 0.6); gdurmode3 = LFNoise1.kr.range(0.1, 0.6);
gdurmode4 = LFNoise1.kr.range(0.6, 0.6); gdurmode4 = LFNoise1.kr.range(0.6, 0.6);
gdurmode5 = LFNoise1.kr.range(0.1, 2.6); gdurmode5 = LFNoise1.kr.range(0.1, 2.6);
gdurmode6 = LFNoise1.kr.range(1, 2); gdurmode6 = LFNoise1.kr.range(0.01, 4);
gdur = Select.kr(gdurmodeindex, gdur = Select.kr(gdurmodeindex,
[gdurmode0, gdurmode1, gdurmode2, gdurmode3, gdurmode4, gdurmode5, gdurmode6, sensorgdur]); [gdurmode0, gdurmode1, gdurmode2, gdurmode3, gdurmode4, gdurmode5, gdurmode6, sensorgdur]);
// grain pan mode -untransposed, random, or sensor controlled // grain pan mode STEREO, QUAD, ROTATING
gpanmode0 = 0; gpanmode0 = LFNoise1.kr(100).range(-0.2, 0.2);
gpanmode1 = LFNoise1.kr(100).range(-1, 1); gpanmode1 = LFSaw.kr(0.33).bipolar.range(-1,1);
gpanmode2 = LFNoise1.kr(100).range(-1, 1);
gpan = Select.kr(gpanmodeindex, gpan = Select.kr(gpanmodeindex,
[gpanmode0, gpanmode1, sensorgpan]); [gpanmode0, gpanmode1, gpanmode2, sensorgpan]);
// grain pitch mode -untransposed, random, or sensor controlled // grain pitch mode -untransposed, random, or sensor controlled
~dseq = Dseq([1,-1, 2, 1, -1.5, 1, 1.75, 1, -0.5, 1, 3, 1, 2.25, 1 -0.125, 1], inf);
pitchmode0 = 1; pitchmode0 = 1;
pitchmode1 = LFNoise1.kr.range(rlow, rhigh); pitchmode1 = Demand.kr(Impulse.kr(imp), 0, ~dseq);
pitchmode2 = LFNoise1.kr(imp).range(rlow, rhigh);
pitch = Select.kr(pitchmodeindex, pitch = Select.kr(pitchmodeindex,
[pitchmode0, sensorpitch, pitchmode1 ]); [pitchmode0, sensorpitch, pitchmode1, pitchmode2 ]);
// granular playhead mode - fixed random or sensor controlled // granular playhead mode - fixed random or sensor controlled
positionmode0 = 0.1; positionmode0 = 0.2;
positionmode0 = (Phasor.ar(0, 1 * BufRateScale.ir(b), 0, BufSamples.ir(b)-1) + LFNoise1.ar(100).bipolar(0.1 * SampleRate.ir) ) / BufSamples.ir(b); positionmode1 = (Phasor.ar(0.01, 1 * BufRateScale.ir(b), 0, BufSamples.ir(b)) + LFNoise1.ar(100).bipolar(0.1 * SampleRate.ir) ) / BufSamples.ir(b);
positionmode1 = LFNoise1.kr.range(0.05, 0.98); positionmode2 = LFNoise1.kr.range(0.05, (BufSamples.ir(b)-1) - 1000 );
positionmode2 = LFNoise1.kr.range(0.1, 0.2); positionmode3 = LFNoise1.kr.range(0.1, 3.8 );
position = Select.kr(positionmodeindex, position = Select.kr(positionmodeindex,
[positionmode0, positionmode1, positionmode2, sensorposition]); [positionmode0, positionmode1, positionmode2, positionmode3, sensorposition]);
// grain impulse frequency mode - random, metric or sensor based impulse modes // grain impulse frequency mode - random, metric or sensor based impulse modes
impulsemode0 = Impulse.kr(imp); impulsemode0 = Impulse.kr(imp);
@ -149,28 +172,18 @@ SynthDef(\buf_grain, { | out, gate = 1, amp = 0.5,
impulse = Select.kr(impulsemodeindex, impulse = Select.kr(impulsemodeindex,
[impulsemode0, impulsemode1, sensorimpulse]); [impulsemode0, impulsemode1, sensorimpulse]);
env = EnvGen.kr(~gpanmode=1; env = EnvGen.kr( Env([0, 1, 0], [1, 1], \sin, 1), gate, levelScale: amp, doneAction: 2);
Env([0, 1, 0], [1, 1], \sin, 1), gate, levelScale: amp, doneAction: 2);
signal = GrainBuf.ar(2, signal = TGrains.ar(4, impulse, b, pitch, position, gdur, gpan, amp, 4) * env;
impulse, // selectable between impulse.kr and dust.kr
gdur, sndbuf, pitch, position, 2, gpan, envbuf);
//signal = FreeVerb2.ar(signal[0], signal[1], mix:0.4, room:0.5, damp:0);
stereosignal = signal;
stereosignal = signal* env;
quadsignalL = PanAz.ar(4, signal[0], MouseX.kr(0,2)); quadsignalL = PanAz.ar(4, signal[0], MouseX.kr(0,2));
quadsignalR = PanAz.ar(4, signal[1], MouseX.kr(0,2).range(2,0)); quadsignalR = PanAz.ar(4, signal[1], MouseX.kr(0,2).range(2,0));
quadsignal = signal; //Mix.ar([quadsignalL, quadsignalR]); quadsignal = signal; //Mix.ar([quadsignalL, quadsignalR]);
signalchannels = Select.ar(signalChannelIndex, [stereosignal, quadsignal]); signalchannels = Select.ar(signalChannelIndex, [stereosignal, quadsignal]);
//signal = signalchannels; //signal = signalchannels;
Out.ar(0, signalchannels); Out.ar(0, signalchannels);
}).add; }).add;
@ -178,85 +191,83 @@ SynthDef(\buf_grain, { | out, gate = 1, amp = 0.5,
) )
// RUNME 3 ========================================== // RUNME 3 ==========================================
// ---------------------------------------------------- // ----------------------------------------------------
(( // START SYNTHS --------------------------------- (( // START SYNTHS ---------------------------------
// ---------------------------------------------------- // ----------------------------------------------------
// TODO NO EPRAND IN INSTR!
r = Synth(\recBuf, [\in, 0, \out, 0, \bufnum, b, \t_trig, 0]); // recorder r = Synth(\recBuf, [\in, 0, \out, 0, \bufnum, b, \t_trig, 0]); // recorder
~granulator1 = Synth(\buf_grain, [\sndbuf, b, \envbuf, -1]); // granulate ~g1 = Synth(\buf_grain, [\sndbuf, b, \amp, exprand(0.4, 0.9), \envbuf, -1, \gate, 1, doneAction: 2]); // granulate
~gtrIn = Synth(\dryIn); // dry audio signaL ~gtrIn = Synth(\dryIn); // dry audio signaL
)); ));
~gtrIn.free;
// RUNME 4 ========================================== // RUNME 4 ==========================================
// ---------------------------------------------------- // ----------------------------------------------------
(( // OSC Receivers // ENABLE SENSOR AND SWITCH VALUES <-- (( // OSC Receivers // ENABLE SENSOR AND SWITCH VALUES <--
// ---------------------------------------------------- // ----------------------------------------------------
~pitchmode = 0; ~positionmode = 0; ~impulsemode = 0; ~gdurmode=0; ~gpanmode=1; ~channelmode=0; ~pitchmode = 0; ~positionmode = 0; ~impulsemode = 1;
~gdurmode=0; ~gpanmode=0; ~channelmode=0;
~instrPanMode =0;
~btnstate = []; ~btnstate = [];
~btnsA = []; ~btnsA = [];
~btnsB = []; ~btnsB = [];
~btnsC = []; ~btnsC = [];
~btn0val = 0; ~btn1val = 0; ~btn2val = 0; ~btn3val = 0; ~btn0val = 0; ~btn1val = 0; ~btn2val = 0; ~btn3val = 0;
~btn4val = 0; ~btn5val = 0; ~btn6val = 0; ~btn7val = 0; ~btn4val = 0; ~btn5val = 0; ~btn6val = 0; ~btn7val = 0;
~btn8val = 0; // shift buttons ~btn8val = 0; // shift buttons
( // accel gyro quaternion mapping ///////////////////
// msg[1] msg[2] msg[3] X Y Z ==> ROLL, PITCH, YAW
o = OSCdef(\test, { arg msg, time, addr, recvPort, rlow, rhigh;
// PAN ------- X Roll
~g1.set(\pan, msg[1].linlin(-0.3, 0.3, -1, 1));
~g1.set(\gpanmodeindex, ~gpanmode );
( // accel gyro quaternion mapping /////////////////// // PITCH ------- Y Pitch
// msg[1] msg[2] msg[3] X Y Z ==> ROLL, PITCH, YAW ~g1.set(\sensorpitch, ( msg[3] * 5 ) + 1 );
~g1.set(\pitchmodeindex, ~pitchmode );
o = OSCdef(\test, { arg msg, time, addr, recvPort, rlow, rhigh; // POSITION ------- Z Yaw
~g1.set(\sensorposition, msg[2].linlin(-1, 1, 0.05, 3.99));
~g1.set(\positionmodeindex, ~positionmode );
// PAN ------- X Roll // RATE ------- X (roll [with PAN])
~granulator1.set(\pan, msg[1].linlin(-0.3, 0.3, -1, 1));
~granulator1.set(\panmodeindex, ~panmode );
// PITCH ------- Y Pitch ~g1.set(\sensorimpulse, msg[2].linlin(-1, 1, 5, 50));
~granulator1.set(\sensorpitch, msg[3].linlin(-1, 1, 0, 4)); ~g1.set(\impulsemodeindex, ~impulsemode );
~granulator1.set(\pitchmodeindex, ~pitchmode );
// POSITION ------- Z Yaw ~g1.set(\sensorgdur, msg[2].linlin(-1, 1, 0.1, 1));
~granulator1.set(\sensorposition, msg[2].linlin(-1, 1, 0.05, 3.99)); ~g1.set(\gdurmodeindex, ~gdurmode );
~granulator1.set(\positionmodeindex, ~positionmode );
// RATE ------- X (roll [with PAN]) ~g1.set(\sensorgpan, msg[2]);
~granulator1.set(\sensorimpulse, msg[2].linlin(-1, 1, 5, 50)); ~g1.set(\gpanmodeindex, ~gpanmode );
~granulator1.set(\impulsemodeindex, ~impulsemode );
~granulator1.set(\sensorgdur, msg[2].linlin(-1, 1, 0.1, 1));
~granulator1.set(\gdurmodeindex, ~gdurmode );
~granulator1.set(\sensorgpan, msg[2].linlin(-1, 1, -1, 1));
~granulator1.set(\gpanmodeindex, ~gpanmode );
~granulator1.set(\sensorgpan, msg[2].linlin(-1, 1, -1, 1));
~granulator1.set(\signalChannelIndex, ~channelmode );
~g1.set(\sensorgpan, msg[2].linlin(-1, 1, -1, 1));
~g1.set(\signalChannelIndex, ~channelmode );
~gtrIn.set(\instrPan, msg[2].linlin(-1, 1, -1, 1));
~gtrIn.set(\instrPanModeIndex, ~instrPanMode);
//msg.postln; //msg.postln;
}; , '/euler'); }; , '/euler');
); );
// ----------------------------------------------------
// send message back to nodejs
m = NetAddr("127.0.0.1", 57100);
// on off osconoff accelerometer data
m.sendMsg("/xyzc", 1);
m.sendMsg("/xyzc", 0);
// ---------------------------------------------------- // ----------------------------------------------------
// button press mapping /////////////////////////////// // button press mapping ///////////////////////////////
// ---------------------------------------------------- // ----------------------------------------------------
// send message back to nodejs
m = NetAddr("127.0.0.1", 57100);
m.sendMsg("/xyzc", 1);
m.sendMsg("/xyzc", 0);
p = OSCdef(\keys, { arg msg, time, addr, recvPort; p = OSCdef(\keys, { arg msg, time, addr, recvPort;
~btnsA[~btn2val, ~btn3val]; ~btnsA[~btn2val, ~btn3val];
@ -267,8 +278,6 @@ p = OSCdef(\keys, { arg msg, time, addr, recvPort;
if (msg[9] == 1 && msg[10] == 1, {~btnstate.postln;}); if (msg[9] == 1 && msg[10] == 1, {~btnstate.postln;});
//msg.println; //msg.println;
// ============================== // ==============================
// BUTTON MAPPING // BUTTON MAPPING
@ -281,7 +290,7 @@ p = OSCdef(\keys, { arg msg, time, addr, recvPort;
// BUTTON X ----- TRIGGER ONESHOT BUFFER RECORD // BUTTON X ----- TRIGGER ONESHOT BUFFER RECORD
if (msg[10] == 1, { r.set( \in, 0, \l, 0, \t_trig, 1); if (msg[10] == 1, { r.set( \in, 0, \l, 0, \t_trig, 1);
" /////////// SAMPLING!".postln }, {}); "/////////// SAMPLING!".postln }, {});
// BUTTON X ----> LOOP RECORDING MODE ON/OFF // BUTTON X ----> LOOP RECORDING MODE ON/OFF
if (msg[11]==1, if (msg[11]==1,
@ -297,76 +306,80 @@ p = OSCdef(\keys, { arg msg, time, addr, recvPort;
// BUTTON X ----> OVERDUB RECORDING MODE ON/OFF // BUTTON X ----> OVERDUB RECORDING MODE ON/OFF
if (msg[12]==1, if (msg[12]==1,
{ {
( ~btn2val = (~btn2val + 1) % 2 ) ; ( ~btn2val = (~btn2val + 1) % 5 ) ;
switch( ~btn2val, switch( ~btn2val,
0, { r.set(\overdub, 0); "SAMPLE OVERDUB OFF".postln; }, 0, { r.set(\overdub, 0); "SAMPLE OVERDUB OFF".postln; },
1, { r.set(\overdub, 1); "SAMPLE OVERDUB ON".postln; }, 1, { r.set(\overdub, 0.5); "SAMPLE OVERDUB ON 50%".postln; },
2, { r.set(\overdub, 0.75); "SAMPLE OVERDUB ON 75%".postln; },
3, { r.set(\overdub, 0.90); "SAMPLE OVERDUB ON 90%".postln; },
4, { r.set(\overdub, 1); "SAMPLE OVERDUB ON 100%".postln; },
) )
}); });
}, /// SHIFT 0 LOGIC ENDS HERE //TODO btn7 repeated counter fix
/////////////////// RESET RANDOM PITCH TO FIXED PITCH IN ONE TAP
if (msg[14]==1,
{
( ~btn6val = (~btn6val + 1) % 2 ) ;
switch( ~btn6val,
0, { ~pitchmode = 0; "PITCH RESET TO UNTRANSPOSED MODE".postln; },
1, { ~pitchmode = 1; "PITCH IN SENSOR MODE".postln; }
);
});
if (msg[15]==1,
{
( ~btn7val = (~btn7val + 1) % 8 ) ;
switch(~btn7val,
0, { ~g1.set(\imp, 0); "IMPULSE = 0".postln; },
1, { ~g1.set(\imp, 2); "IMPULSE = 2".postln; },
2, { ~g1.set(\imp, 4); "IMPULSE = 4".postln; },
3, { ~g1.set(\imp, 8); "IMPULSE = 8".postln; },
4, { ~g1.set(\imp, 16); "IMPULSE = 16".postln; },
5, { ~g1.set(\imp, 32); "IMPULSE = 32".postln; },
6, { ~g1.set(\imp, 64); "IMPULSE = 64".postln; },
7, { ~g1.set(\imp, 128); "IMPULSE = 128".postln; },
)
});
// BUTTON X ----- G PANNING MODE
if (msg[16]==1,
{
( ~btn8val = (~btn8val + 1) % 3 ) ;
switch( ~btn8val,
0, { ~gpanmode = 0 ;"PAN STEREO".postln; },
1, { ~gpanmode = 1 ; "PAN QUAD ROTATIONS".postln; },
2, { ~gpanmode = 2 ; "PAN RANDOM QUAD".postln; },
)
});
}, /// SHIFT 0 LOGIC ENDS HERE --------------------------------------------
{ {
// SHIFT IN STATE 1 ======================= ..........................
// GTR INPUT =======================
// SHIFT IN STATE 1 ======================= if (msg[11]==1,
// BUTTON X ----- GRAIN DURATION MODE
if (msg[15]==1,
{ {
( ~btn8val = (~btn8val + 1) % 7 ) ; ( ~btn2val = (~btn2val + 1) % 7 ) ;
switch(~btn8val, switch(~btn2val,
0, { ~gdurmode = 0; ~granulator1.set(\imp, 40); "DURATION MODE 0".postln; }, 0, { ~gtrIn.set(\in, 1 ); "DRY SIGNAL OFF".postln; },
1, { ~gdurmode = 1; ~granulator1.set(\imp, 0); "DURATION MODE 1".postln; }, 1, { ~gtrIn.set(\in, 0 ); ~instrPanMode=0; "DRY FRONT {STERE0}".postln; },
2, { ~gdurmode = 2; ~granulator1.set(\imp, 20); "DURATION MODE 2".postln; }, 2, { ~gtrIn.set(\in, 0 ); ~instrPanMode=1; "DRY BACK {STERE0}".postln; },
3, { ~gdurmode = 3; ~granulator1.set(\imp, 15); "DURATION MODE 3".postln; }, 3, { ~gtrIn.set(\in, 0 ); ~instrPanMode=2; "DRY RaND {STEREO}".postln; },
4, { ~gdurmode = 4; ~granulator1.set(\imp, 10); "DURATION MODE 4".postln; }, 4, { ~gtrIn.set(\in, 0 ); ~instrPanMode=3; "DRY L/R PAN {STEREO}".postln; },
5, { ~gdurmode = 5; ~granulator1.set(\imp, 5); "DURATION MODE 5".postln; }, 5, { ~gtrIn.set(\in, 0 ); ~instrPanMode=4; "DRY ROTATE {QUAD}".postln; },
6, { ~gdurmode = 6; ~granulator1.set(\imp, 3); "DURATION MODE 6".postln; }, 6, { ~gtrIn.set(\in, 0 ); ~instrPanMode=5; "DRY RaND {QUAD}".postln; },
)
});
// BUTTON X ----- GRANULAR POSITION MODE
if (msg[13]==1,
{
( ~btn3val = (~btn3val + 1) % 3 ) ;
switch(~btn3val,
0, { ~positionmode = 0; "POSITION MODE FIXED".postln; },
1, { ~positionmode = 1; "POSITION MODE RANDOM".postln; },
2, { ~positionmode = 2; "POSITION MODE SENSOR".postln; },
)
});
// BUTTON X ----- GRANULAR PITCH MODE
if (msg[14]==1,
{
( ~btn6val = (~btn6val + 1) % 7 ) ;
switch(~btn6val,
0, { ~pitchmode = 0; "PITCH MODE FIXED".postln; },
1, { ~pitchmode = 1; "PITCH MODE SENSOR".postln; },
2, { ~pitchmode = 2; ~granulator1.set(\rlow, 0.8); ~granulator1.set(\rhigh, 1.2); "PITCH RANDOM 1".postln; },
3, { ~pitchmode = 2; ~granulator1.set(\rlow, 0); ~granulator1.set(\rhigh, 1.5); "PITCH MODE RANDOM 2".postln; },
4, { ~pitchmode = 2; ~granulator1.set(\rlow, -1.5 ); ~granulator1.set(\rhigh, 0); "PITCH MODE RANDOM 3".postln; },
5, { ~pitchmode = 2; ~granulator1.set(\rlow, -5 ); ~granulator1.set(\rhigh, 5); "PITCH MODE RANDOM 4".postln; },
6, { ~pitchmode = 2; ~granulator1.set(\rlow, -30 ); ~granulator1.set(\rhigh, 30); "PITCH MODE RANDOM 5".postln; },
7, { ~pitchmode = 2; ~granulator1.set(\rlow, -100 ); ~granulator1.set(\rhigh, 100); "PITCH MODE RANDOM 6".postln; },
~granulator1.set(\rhigh, 2);
2, { },
)
});
// BUTTON X ----- GRANULAR IMPULSE MODE
if (msg[16]==1,
{
( ~btn7val = (~btn7val + 1) % 3 ) ;
switch( ~btn7val,
0, { ~granulator1.set(\impulsemodeindex, 0 ); "IMPULSE MODE FIXED".postln; },
1, { ~granulator1.set(\impulsemodeindex, 1 ); "IMPULSE MODE DUST".postln; },
2, { ~granulator1.set(\impulsemodeindex, 2 ); "IMPULSE MODE SENSOR".postln; },
) )
}); });
@ -375,28 +388,69 @@ p = OSCdef(\keys, { arg msg, time, addr, recvPort;
if (msg[12] == 1, { " ===== EULER ZEROED! =====".postln }, {}); if (msg[12] == 1, { " ===== EULER ZEROED! =====".postln }, {});
// GTR INPUT ======================= // BUTTON X ----- GRANULAR POSITION MODE
if (msg[11]==1, if (msg[13]==1,
{ {
( ~btn2val = (~btn2val + 1) % 3 ) ; ( ~btn3val = (~btn3val + 1) % 5 ) ;
switch(~btn2val, switch(~btn3val,
0, { ~gtrIn.set(\in, 1 ); "DRY SIGNAL OFF".postln; }, 0, { ~positionmode = 0; "POSITION MODE FIXED".postln; },
1, { ~gtrIn.set(\in, 0 ); "DRY SIGNAL ON".postln; }, 1, { ~positionmode = 1; "POSITION MODE LOOPING".postln; },
2, { ~gtrIn.set(\in, 1 ); "DRY + REVERB ON".postln; }, 2, { ~positionmode = 2; "POSITION MODE RANDOM".postln; },
3, { ~positionmode = 3; "POSITION CONSTRAINED RND".postln; },
4, { ~positionmode = 4; "POSITION MODE SENSOR".postln; },
) )
}); });
} // SHIFT ONE LOGIC ENDS HERE ================
); /// closes SHIFT 1 // BUTTON X ----- GRANULAR PITCH MODE
if (msg[14]==1,
{
( ~btn6val = (~btn6val + 1) % 7 ) ;
switch(~btn6val,
0, { ~pitchmode = 2; "mode 2".postln; },
1, { ~pitchmode = 2; "mode 2 reserve".postln; },
2, { ~pitchmode = 3; ~g1.set(\rlow, 0.8); ~g1.set(\rhigh, 1.2); "PITCH RANDOM 1".postln; },
3, { ~pitchmode = 3; ~g1.set(\rlow, 0.01); ~g1.set(\rhigh, 1.5); "PITCH MODE RANDOM 2".postln; },
4, { ~pitchmode = 3; ~g1.set(\rlow, -1.5 ); ~g1.set(\rhigh, 1.5); "PITCH MODE RANDOM 3".postln; },
5, { ~pitchmode = 3; ~g1.set(\rlow, -5 ); ~g1.set(\rhigh, 5); "PITCH MODE RANDOM 4".postln; },
6, { ~pitchmode = 3; ~g1.set(\rlow, -10 ); ~g1.set(\rhigh, 10); "PITCH MODE RANDOM 5".postln; },
7, { ~pitchmode = 3; ~g1.set(\rlow, -30 ); ~g1.set(\rhigh, 30); "PITCH MODE RANDOM 6".postln; },
)
});
// BUTTON X ----- GRAIN DURATION MODE
if (msg[15]==1,
{
( ~btn8val = (~btn8val + 1) % 7 ) ;
switch(~btn8val,
0, { ~gdurmode = 0; ~g1.set(\imp, 40); "DURATION MODE 0".postln; },
1, { ~gdurmode = 1; ~g1.set(\imp, 30); "DURATION MODE 1".postln; },
2, { ~gdurmode = 2; ~g1.set(\imp, 20); "DURATION MODE 2".postln; },
3, { ~gdurmode = 3; ~g1.set(\imp, 15); "DURATION MODE 3".postln; },
4, { ~gdurmode = 4; ~g1.set(\imp, 10); "DURATION MODE 4".postln; },
5, { ~gdurmode = 5; ~g1.set(\imp, 5); "DURATION MODE 5".postln; },
6, { ~gdurmode = 6; ~g1.set(\imp, 3); "DURATION MODE 6".postln; },
)
});
// BUTTON X ----- GRANULAR IMPULSE MODE
if (msg[16]==1,
{
( ~btn7val = (~btn7val + 1) % 3 ) ;
switch( ~btn7val,
0, { ~g1.set(\impulsemodeindex, 0 ); "IMPULSE MODE FIXED".postln; },
1, { ~g1.set(\impulsemodeindex, 1 ); "IMPULSE MODE DUST".postln; },
2, { ~g1.set(\impulsemodeindex, 2 ); "IMPULSE MODE SENSOR".postln; },
)
});
}); // SHIFT ONE LOGIC ENDS HERE ================
} , '/keys'); } , '/keys');
));
);
);
// ----------------------------------------------------
// ---------------------------------------------------- // ----------------------------------------------------
// PERFORMABLE PARAMETERS ///////////////////////////// // PERFORMABLE PARAMETERS /////////////////////////////
// ---------------------------------------------------- // ----------------------------------------------------
// ----------------------------------------------------
// start recording (without button) // start recording (without button)
r.set(\in, 0, \l, 0, \t_trig, 1); r.set(\in, 0, \l, 0, \t_trig, 1);
@ -409,10 +463,15 @@ r.set(\overdub, 1); // overdub mode on - MAPPED TO SWITCH 4
r.set(\overdub, 0); // off r.set(\overdub, 0); // off
/// random pitch/rate low and high values /// random pitch/rate low and high values
~granulator1.set(\rlow, -1); ~g1.set(\rlow, 1);
~granulator1.set(\rlow, 0.2); ~g1.set(\rlow, 0.2);
~granulator1.set(\rhigh, 2); ~g1.set(\rhigh, 2);
~granulator1.set(\rhigh, 1.2); ~g1.set(\rhigh, 1);
1.midiratio;
33.midiratio;
~impulsemode = 0; // impulse ~impulsemode = 0; // impulse
~impulsemode = 1; // dust ~impulsemode = 1; // dust
@ -441,17 +500,22 @@ r.set(\overdub, 0); // off
~gpanmode = 0 ; // random position ~gpanmode = 0 ; // random position
~gpanmode = 1 ; // random position ~gpanmode = 1 ; // random position
~gpanmode = 2 ; // random position ~gpanmode = 2 ; // random position
~gpanmode = 3 ; // random position
~g1.set(\gpan, -1 );
~channelmode = 1; ~channelmode = 1;
// set grain impulse rate // set grain impulse rate
~granulator1.set(\imp, 10); ~g1.set(\imp, 10);
// fix doneaction // fix doneaction
~granulator1.set(\gate, 1); // granulator on ~g1.set(\gate, 1); // granulator on
~granulator1.set(\gate, 0); // granulator off ~g1.set(\gate, 0); // granulator off
a = Scale.major;
///////////////////////////////////////////////// /////////////////////////////////////////////////
@ -459,18 +523,14 @@ r.set(\overdub, 0); // off
// ----------------------------------------------- // -----------------------------------------------
// ----------------------------------------------- // -----------------------------------------------
// DUMP ALL OSC MESSAGES (for debugging) //////// // list all open ports
OSCFunc.trace(true);
OSCFunc.trace(false);
thisProcess.openPorts; // list all open ports
// ----------------------------------------------- // -----------------------------------------------
// CODE DUMP ZONE /////////////////////////////// // CODE DUMP ZONE ///////////////////////////////
// switch to the custom env // switch to the custom env
//~granulator1.set(\envbuf, z); //~g1.set(\envbuf, z);
//~granulator1.set(\envbuf, -1); //~g1.set(\envbuf, -1);
//n = NetAddr("127.0.0.1", NetAddr.langPort); //n = NetAddr("127.0.0.1", NetAddr.langPort);
//n = NetAddr.new("224.0.1.9", 6696); //n = NetAddr.new("224.0.1.9", 6696);

1
runme.sh 100755
View File

@ -0,0 +1 @@
node wavey-wind/server.js /dev/rfcomm0

3
start_jackd.sh 100755
View File

@ -0,0 +1,3 @@
# /usr/bin/jackd -u -dalsa -dhw:USB -r44100 -p512 -n3 -S
/usr/bin/jackd -u -dalsa -r44100 -p256 -n3 -D -Chw:U192k -Phw:U192k

View File

@ -42,7 +42,6 @@ let switchHeld = [false, false, false, false]
let switchValue = [false, false, false, false] let switchValue = [false, false, false, false]
function openSerial() { function openSerial() {
console.log('opening ', tty, baudrate) console.log('opening ', tty, baudrate)