From a455c7c3d009d0972eebc39a6b4ecc0ae25016ac Mon Sep 17 00:00:00 2001 From: gauthiier Date: Tue, 13 Nov 2018 08:10:15 +0100 Subject: [PATCH] HAHA! commit --- code/FSM/FSM.h | 172 + code/FSM/FSM.ino | 76 + code/FSM_w_deux_synths/Bizarre.ino | 88 + code/FSM_w_deux_synths/Eponge.ino | 76 + code/FSM_w_deux_synths/FSM_w_deux_synths.ino | 89 + code/FSM_w_input/FSM_w_input.ino | 98 + code/FSM_w_timer/FSM_w_timer.ino | 99 + code/WAVE_0/WAVE_0.ino | 103 + code/_XYZ/_XYZ.ino | 98 + code/bizarre/bizarre.ino | 85 + code/dashboard_v9_MFMFM.maxpat | 4677 +++++++++++++++++ code/libs/fsm/FSM.h | 210 + code/libs/fsm/MachineStates.h | 59 + code/libs/mmmath/ExpMovAvg.h | 16 + code/libs/mmmath/MinMaxLerp.cpp | 55 + code/libs/mmmath/MinMaxLerp.h | 26 + code/libs/mmmath/SpringMassDamper.cpp | 23 + code/libs/mmmath/SpringMassDamper.h | 16 + code/lux_calib/lux_calib.ino | 14 + .../spring_oscillators/spring_oscillators.ino | 60 + .../spring_oscillators_comp0.ino | 76 + .../spring_oscillators_comp1.ino | 92 + texts/Untitled.rtf | 54 + 23 files changed, 6362 insertions(+) create mode 100755 code/FSM/FSM.h create mode 100755 code/FSM/FSM.ino create mode 100755 code/FSM_w_deux_synths/Bizarre.ino create mode 100755 code/FSM_w_deux_synths/Eponge.ino create mode 100755 code/FSM_w_deux_synths/FSM_w_deux_synths.ino create mode 100755 code/FSM_w_input/FSM_w_input.ino create mode 100755 code/FSM_w_timer/FSM_w_timer.ino create mode 100755 code/WAVE_0/WAVE_0.ino create mode 100755 code/_XYZ/_XYZ.ino create mode 100755 code/bizarre/bizarre.ino create mode 100755 code/dashboard_v9_MFMFM.maxpat create mode 100755 code/libs/fsm/FSM.h create mode 100755 code/libs/fsm/MachineStates.h create mode 100755 code/libs/mmmath/ExpMovAvg.h create mode 100755 code/libs/mmmath/MinMaxLerp.cpp create mode 100755 code/libs/mmmath/MinMaxLerp.h create mode 100755 code/libs/mmmath/SpringMassDamper.cpp create mode 100755 code/libs/mmmath/SpringMassDamper.h create mode 100755 code/lux_calib/lux_calib.ino create mode 100755 code/spring_oscillators/spring_oscillators.ino create mode 100755 code/spring_oscillators_comp0/spring_oscillators_comp0.ino create mode 100755 code/spring_oscillators_comp1/spring_oscillators_comp1.ino create mode 100755 texts/Untitled.rtf diff --git a/code/FSM/FSM.h b/code/FSM/FSM.h new file mode 100755 index 0000000..2dceeca --- /dev/null +++ b/code/FSM/FSM.h @@ -0,0 +1,172 @@ + + + + + +/* +Copyright (c) 2007 Gerhard Reitmayr +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef _FSM_H +#define _FSM_H + +/// list of ints as recursive type +template struct IntList { + enum { head = HEAD }; + typedef TAIL tail; +}; + +/// end of list marker type +struct IntListEnd {}; + +/// switch statement implementation through iterating over the type list and +/// comparing it to a given state +template +struct SwitchTemplate { + template + static typename CONTEXT::ReturnType work( int state, CONTEXT & context){ + return ((STATELIST::head == state) ? + context.template operator()() : + SwitchTemplate::work( state, context )); + } +}; + +/// end of list marker specialization +template <> +struct SwitchTemplate { + template + static typename CONTEXT::ReturnType work( int state, CONTEXT & context){ + return typename CONTEXT::ReturnType(); + } +}; + +/// The actual state machine implementation +/// sub types are functors passed to the Worker class to execute the +/// right template specialization of the underlying member function of the +/// context object. +template +struct StateMachine { + + CONTEXT & context; + int state; + + template struct CallEvent { + typedef RET ReturnType; + CONTEXT & context; + DATA & data; + + template RET operator()(){ + return context.template event(data); + } + }; + + template struct CallEventConst { + typedef RET ReturnType; + CONTEXT & context; + const DATA & data; + + template RET operator()(){ + return context.template event(data); + } + }; + + template struct CallEventNoData { + typedef RET ReturnType; + CONTEXT & context; + + template RET operator()(){ + return context.template event(); + } + }; + + struct CallEnter { + typedef void ReturnType; + CONTEXT & context; + + template ReturnType operator()(){ + return context.template enter(); + } + }; + + struct CallExit { + typedef void ReturnType; + CONTEXT & context; + + template ReturnType operator()(){ + return context.template exit(); + } + }; + + struct CallTick { + typedef void ReturnType; + CONTEXT & context; + + template ReturnType operator()(){ + return context.template tick(); + } + }; + + StateMachine( CONTEXT & c ) : context(c), state(STATELIST::head) { + CallEnter cee = {context}; + SwitchTemplate::work(state, cee); + } + + void changeState(const int newstate){ + CallExit cl = {context}; + SwitchTemplate::work(state, cl); + state = newstate; + CallEnter cee = {context}; + SwitchTemplate::work(state, cee); + } + + void tick() { + CallTick ct = {context}; + SwitchTemplate::work(state, ct); + } + + void work(){ + CallEventNoData ce = {context}; + int newstate = SwitchTemplate::work(state, ce); + if(newstate != state) + changeState(newstate); + } + + template + void work( const EVENT & ev ){ + CallEventConst ce = {context, ev}; + int newstate = SwitchTemplate::work(state, ce); + if(newstate != state) + changeState(newstate); + } + + template + void work( EVENT & ev ){ + CallEvent ce = {context, ev}; + int newstate = SwitchTemplate::work(state, ce); + if(newstate != state) + changeState(newstate); + } +}; + + +/// macros for simple state list definition +#define LIST1(a) IntList +#define LIST2(a,b) IntList +#define LIST3(a,b,c) IntList +#define LIST4(a,b,c,d) IntList +#define LIST5(a,b,c,d,e) IntList +#define LIST6(a,b,c,d,e,f) IntList +#define LIST7(a,b,c,d,e,f,g) IntList +#define LIST8(a,b,c,d,e,f,g,h) IntList + +#endif // _FSM_H diff --git a/code/FSM/FSM.ino b/code/FSM/FSM.ino new file mode 100755 index 0000000..34eb16e --- /dev/null +++ b/code/FSM/FSM.ino @@ -0,0 +1,76 @@ +#include "fsm.h" + +using namespace std; + +struct Event { int state; }; +enum States { AAAA, BBBB, CCCC }; + +struct QQQQSwitch { + typedef LIST3(AAAA, BBBB, CCCC) StateList; + template int event(Event & ev) { Serial.println("undefined event -- event"); return ev.state; } + template int event() { Serial.println("undefined enter"); return 0; } + template void enter() { Serial.println("undefined enter"); } + template void exit() { Serial.println("undefined leave"); }; + + template void tick() { Serial.println("undefined enter");} +}; + +template <> void QQQQSwitch::enter() { Serial.println("enter AAAA"); } +template <> void QQQQSwitch::exit() { Serial.println("exit AAAA"); } +template <> void QQQQSwitch::tick() { Serial.println("tick AAAA"); } + +template <> void QQQQSwitch::enter() { Serial.println("enter BBBB"); } +template <> void QQQQSwitch::exit() { Serial.println("exit BBBB"); } +template <> void QQQQSwitch::tick() { Serial.println("tick BBBB"); } + +template <> void QQQQSwitch::enter() { Serial.println("enter CCCC"); } +template <> void QQQQSwitch::exit() { Serial.println("exit CCCC"); } +template <> void QQQQSwitch::tick() { Serial.println("tick CCCC"); } + +StateMachine* sm; + +Event event_AAAA = {AAAA}; +Event event_BBBB = {BBBB}; +Event event_CCCC = {CCCC}; + +void setup() { + Serial.begin(115200); + Serial.println("starts"); + + QQQQSwitch c; + sm = new StateMachine(c); + +} + +void loop() { + delay(2000); + Serial.println("..."); + + + if (Serial.available() > 0) { + char in = (char) Serial.read(); + + switch(in) { + + case 'a': + sm->work(event_AAAA); + return; + + case 'b': + sm->work(event_BBBB); + return; + + case 'c': + sm->work(event_CCCC); + return; + + default: + Serial.println('??'); + break; + + } + } + + sm->tick(); + +} diff --git a/code/FSM_w_deux_synths/Bizarre.ino b/code/FSM_w_deux_synths/Bizarre.ino new file mode 100755 index 0000000..7fc319a --- /dev/null +++ b/code/FSM_w_deux_synths/Bizarre.ino @@ -0,0 +1,88 @@ +#include + +namespace bizarre { + + int raw0 = 0; + int ema0 = 0; + ExpMovAvg exmoav(&bizarre::raw0, &bizarre::ema0); + + SpringMassDamper spring0(10.0, 19.0, 7.0); + SpringMassDamper spring1(10.0, 19.0, 7.0); + + float r = 0; + +} + +using namespace bizarre; + +machine_template void MachineStates::enter() { + + Serial.println("enter AAAA"); + + FluteEx.init(); + + pinMode(A0, INPUT); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + Music.getPreset(12); + + Music.setGain1(0.5); + Music.setGain2(0.5); + Music.setGain3(0.5); + + Music.setWaveform1(SQUARE); + Music.setWaveform2(SINE); + Music.setWaveform3(SQUARE); + +// bizarre::raw0 = 0; +// bizarre::ema0 = 0; + + } + +machine_template void MachineStates::exit() { Serial.println("exit AAAA"); } + +machine_template void MachineStates::tick() { + + int memory_junk[4]; + bizarre::raw0 = memory_junk[0] + memory_junk[1];// + memory_junk[2] + memory_junk[3]; + + bizarre::exmoav.calculate(); + + int pos0 = bizarre::spring0.position(bizarre::ema0); + int pos1 = bizarre::spring1.position(pos0); + + int t = analogRead(A1); + t = map(t, 0, 1023, 2, 575); + //t = map(t, 0, 1023, 2, 75); -- great + delay(t); + + r += 0.001; + + int q = 20000; + int minf = 50, maxf = 20000; + + float f0 = map(bizarre::ema0, -q, q, minf, maxf); //or + //float f0 = sin(r) * (float)(t*2); + Music.setFrequency1(f0); + +// Serial.println(f0); + + float f1 = map(pos0, -q, q, minf, maxf); + Music.setFrequency2(f1); + +// Serial.println(f1); + + float f2 = map(pos1, -q, q, minf, maxf); + Music.setFrequency3(f2); + +// Serial.println(f2); + + usbMIDI.read(); + +} + +machine_template int MachineStates::event() { return BBBB; } + diff --git a/code/FSM_w_deux_synths/Eponge.ino b/code/FSM_w_deux_synths/Eponge.ino new file mode 100755 index 0000000..406dd02 --- /dev/null +++ b/code/FSM_w_deux_synths/Eponge.ino @@ -0,0 +1,76 @@ + +namespace eponge { + + int raw0 = 0; + int ema0 = 0; + ExpMovAvg exmoav(&raw0, &ema0); + + MinMaxLerp minmax(&ema0, 50, 800, 10000, 1000); + + SpringMassDamper spring0(10.0, 19.0, 7.0); + SpringMassDamper spring1(10.0, 19.0, 7.0); + +} + +using namespace eponge; + +machine_template void MachineStates::enter() { + + Serial.println("enter BBBB"); + + FluteEx.init(); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + Music.getPreset(15); + +// Music.setGain1(1.0); +// Music.setGain2(1.0); +// Music.setGain3(1.0); // 1.0 for 3 oscs +// +// Music.setWaveform1(SINE); +// Music.setWaveform2(SINE); +// Music.setWaveform3(SINE); + +// eponge::raw0 = 0; +// eponge::ema0 = 0; + +} + + +machine_template void MachineStates::exit() { Serial.println("exit BBBB"); } + +machine_template void MachineStates::tick() { + + eponge::raw0 = analogRead(A1); // pot 0 + eponge::exmoav.calculate(); + eponge::minmax.lerp_min_max(); + + int pos0 = eponge::spring0.position(eponge::ema0); + int pos1 = eponge::spring1.position(pos0); + + int minf = FluteEx.luxA(); + //int minf = analogRead(A9); // pot2 + minf = map(minf, 0, 1023, 25, 75); + + int maxf = FluteEx.luxB(); +// int maxf = analogRead(A2); // pot1 + maxf = map(maxf, 0, 1023, 75, 125); + + int f0 = map(eponge::ema0, 0, 1023, minf, maxf); + Music.setFrequency1(f0); + + int f1 = map(pos0, 0, 1023, minf, maxf); + Music.setFrequency2(f1); + + int f2 = map(pos1, 0, 1023, minf, maxf); + Music.setFrequency3(f2); + + usbMIDI.read(); + +} + +machine_template int MachineStates::event() { return AAAA; } + diff --git a/code/FSM_w_deux_synths/FSM_w_deux_synths.ino b/code/FSM_w_deux_synths/FSM_w_deux_synths.ino new file mode 100755 index 0000000..56f63e2 --- /dev/null +++ b/code/FSM_w_deux_synths/FSM_w_deux_synths.ino @@ -0,0 +1,89 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#define PRINTLN(x,y) Serial.print(x); Serial.println(y); + + +/////////// include FSM lib +#include +#include + +////////////////////////////////////////////////////////////// +// STATE MACHINE DEF +//------------------------------------------------------------ + +// list of states +enum States { BBBB, AAAA }; + +class LaMachine : public MachineStates { +public: + typedef LIST2(BBBB, AAAA) StateList; +}; + +StateMachine* sm; +LaMachine ms; + +////////////////////////////////////////////////////////////// +// TIMER DEF +//------------------------------------------------------------ + + +#define one_sec 1000000 // IntervalTimer is in microseconds +#define timeout 10 * one_sec * 60 +IntervalTimer timer; + +////////////////////////////////////////////////////////////// +// USUAL SUSPECTS +//------------------------------------------------------------ + +void setup() { + + Serial.begin(115200); + Serial.println("starts"); + + Music.init(); + + sm = new StateMachine(ms); + + timer.begin(transition, timeout); + randomSeed(analogRead(A4)); + +} + +void loop() { +// delay(2000); +// Serial.print("... - "); Serial.println(sm->state); + sm->tick(); +} + +////////////////////////////////////////////////////////////// +// TRANSITIONS DEF +//------------------------------------------------------------ + +void transition() { + sm->work(); +} + +void transition_random() { + + int r = random(0, 2); + while(r == sm->state) + r = random(0, 2); + + Event ev = {r}; + sm->work(ev); // transition + +} + diff --git a/code/FSM_w_input/FSM_w_input.ino b/code/FSM_w_input/FSM_w_input.ino new file mode 100755 index 0000000..c66e562 --- /dev/null +++ b/code/FSM_w_input/FSM_w_input.ino @@ -0,0 +1,98 @@ +/////////// include FSM lib +#include +#include + +////////////////////////////////////////////////////////////// +// STATE MACHINE DEF +//------------------------------------------------------------ + +// list of states +enum States { AAAA, BBBB, CCCC }; + +// definition of the actual machine "LaMachine" inheriting from master (parent) statemachine (defined in lib) +class LaMachine : public MachineStates { +public: + //** super important -- list states in the machine + // ('LIST3' for 3 states, 'LIST4' for 4 states, ..., 'LIST8' for 8 states) + typedef LIST3(AAAA, BBBB, CCCC) StateList; +}; + + +// function definitions of state AAAA (first) +machine_template void MachineStates::enter() { Serial.println("enter AAAA"); } // when entering the state for the fist time +machine_template void MachineStates::exit() { Serial.println("exit AAAA"); } // when exiting the state for the fist time +machine_template void MachineStates::tick() { Serial.println("tick AAAA"); } // called from the loop() below +machine_template int MachineStates::event() { Serial.println("self transition AAAA"); return BBBB; } // where to transition to from here (see void transition() below) + +// function definitions of state BBBB (second) +machine_template void MachineStates::enter() { Serial.println("enter BBBB"); } +machine_template void MachineStates::exit() { Serial.println("exit BBBB"); } +machine_template void MachineStates::tick() { Serial.println("tick BBBB"); } +machine_template int MachineStates::event() { Serial.println("self transition BBBB"); return CCCC; } + +// function definitions of state CCCC (third) +machine_template void MachineStates::enter() { Serial.println("enter CCCC"); } +machine_template void MachineStates::exit() { Serial.println("exit CCCC"); } +machine_template void MachineStates::tick() { Serial.println("tick CCCC"); } + + +// declaration the master (parent) statemachine (its a pointer) +StateMachine* sm; + +// declaration the actual statemachine +LaMachine ms; + +////////////////////////////////////////////////////////////// +// EVENTS DEF +//------------------------------------------------------------ + + +Event event_AAAA = {AAAA}; +Event event_BBBB = {BBBB}; +Event event_CCCC = {CCCC}; + +////////////////////////////////////////////////////////////// +// USUAL SUSPECTS +//------------------------------------------------------------ + +void setup() { + Serial.begin(115200); + Serial.println("starts"); + sm = new StateMachine(ms); +} + +void loop() { + delay(2000); + Serial.print("... - "); Serial.println(sm->state); + + + if (Serial.available() > 0) { + char in = (char) Serial.read(); + + switch(in) { + + case 'a': + sm->work(event_AAAA); // transition to AAAA + return; + + case 'b': + sm->work(event_BBBB); // transition to BBBB + return; + + case 'c': + sm->work(event_CCCC); // transition to CCCC + return; + + case 'x': + sm->work(); // transition to next state as specified in 'event' (see MachineStates::event() above) + return; + + default: + Serial.println('??'); + break; + + } + } + + sm->tick(); /// <-------------------------------------------------- über important (see MachineStates::tick() above) +} diff --git a/code/FSM_w_timer/FSM_w_timer.ino b/code/FSM_w_timer/FSM_w_timer.ino new file mode 100755 index 0000000..dc6eb8d --- /dev/null +++ b/code/FSM_w_timer/FSM_w_timer.ino @@ -0,0 +1,99 @@ +/////////// include FSM lib +#include +#include + +////////////////////////////////////////////////////////////// +// STATE MACHINE DEF +//------------------------------------------------------------ + +// list of states +enum States { AAAA, BBBB, CCCC }; + +// definition of the actual machine "LaMachine" inheriting from master (parent) statemachine (defined in lib) +class LaMachine : public MachineStates { +public: + //** super important -- list states in the machine + // ('LIST3' for 3 states, 'LIST4' for 4 states, ..., 'LIST8' for 8 states) + typedef LIST3(AAAA, BBBB, CCCC) StateList; +}; + + +// function definitions of state AAAA (first) +machine_template void MachineStates::enter() { Serial.println("enter AAAA"); } // when entering the state for the fist time +machine_template void MachineStates::exit() { Serial.println("exit AAAA"); } // when exiting the state for the fist time +machine_template void MachineStates::tick() { Serial.println("tick AAAA"); } // called from the loop() below +machine_template int MachineStates::event() { Serial.println("self transition AAAA"); return BBBB; } // where to transition to from here (see void transition() below) + +// function definitions of state BBBB (second) +machine_template void MachineStates::enter() { Serial.println("enter BBBB"); } +machine_template void MachineStates::exit() { Serial.println("exit BBBB"); } +machine_template void MachineStates::tick() { Serial.println("tick BBBB"); } +machine_template int MachineStates::event() { Serial.println("self transition BBBB"); return CCCC; } + +// function definitions of state CCCC (third) +machine_template void MachineStates::enter() { Serial.println("enter CCCC"); } +machine_template void MachineStates::exit() { Serial.println("exit CCCC"); } +machine_template void MachineStates::tick() { Serial.println("tick CCCC"); } + + +// declaration the master (parent) statemachine (its a pointer) +StateMachine* sm; + +// declaration the actual statemachine +LaMachine ms; + +////////////////////////////////////////////////////////////// +// TIMER DEF +//------------------------------------------------------------ + + +#define one_sec 1000000 // IntervalTimer is in microseconds +#define timeout 0.25 * one_sec * 60 +IntervalTimer timer; + +////////////////////////////////////////////////////////////// +// USUAL SUSPECTS +//------------------------------------------------------------ + +void setup() { + Serial.begin(115200); + Serial.println("starts"); + + //instantiation of the master statemachine with actual machine as param + sm = new StateMachine(ms); + + // start the timer with callback (could be both void transition() or void transition_random() -- see below) + timer.begin(transition_random, timeout); + randomSeed(analogRead(A4)); + +} + +void loop() { + delay(2000); + Serial.print("... - "); Serial.println(sm->state); + sm->tick(); /// <-------------------------------------------------- über important (see MachineStates::tick() above) +} + +////////////////////////////////////////////////////////////// +// TRANSITIONS DEF +//------------------------------------------------------------ + +// normal transition to next state as specified in 'event' (see MachineStates::event() above) +void transition() { + sm->work(); +} + +// random transition depending on the number of states +void transition_random() { + + int r = random(0, 3); // we do indeed have three states (i.e, { AAAA, BBBB, CCCC };) + + // force new state ? (don't need this is re-entry is ok) + while(r == sm->state) + r = random(0, 3); + + Event ev = {r}; + sm->work(ev); // transition + +} + diff --git a/code/WAVE_0/WAVE_0.ino b/code/WAVE_0/WAVE_0.ino new file mode 100755 index 0000000..150ecfd --- /dev/null +++ b/code/WAVE_0/WAVE_0.ino @@ -0,0 +1,103 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#define PRINTLN(x,y) Serial.print(x); Serial.println(y); + +int raw0 = 0; +int ema0 = 0; +ExpMovAvg exmoav(&raw0, &ema0); + +//SpringMassDamper spring0(10.0, 19.0, 7.0); +//SpringMassDamper spring1(10.0, 19.0, 7.0); + +SpringMassDamper spring0(100.0, 9.0, 7.0); +SpringMassDamper spring1(100.0, 9.0, 7.0); + +const int ADC_AVG_RES = 4; +const int min_ADC = 420; +const int max_ADC = 850; +const int min_delta_t = 0; +const int max_delta_t = 25; + + +void setup() { + + //FluteEx.init(); + + pinMode(A1, INPUT); + pinMode(A9, INPUT); + pinMode(A2, INPUT); + + analogReadAveraging(ADC_AVG_RES); + + Music.init(); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + Music.getPreset(16); + + Music.setGain1(1.0); + Music.setGain2(1.0); + Music.setGain3(1.0); + + Music.setWaveform1(TRIANGLE); + Music.setWaveform2(SQUARE); + Music.setWaveform3(SINE); + + Serial.begin(115200); + +} + +float r = 0; + +void loop() { + + int memory_junk[4]; + raw0 = memory_junk[0] + memory_junk[1] + memory_junk[2] + memory_junk[3]; + + exmoav.calculate(); + + int pos0 = spring0.position(ema0); + int pos1 = spring1.position(pos0); + + int t = analogRead(A1); + if (t < min_ADC || t > max_ADC) return; + t = map(t, min_ADC, max_ADC, min_delta_t, max_delta_t); + delay(t); + + Serial.println(t); + + r += 0.001; + + int q = 10000; + int minf = 50, maxf = 20000; + +// int f0 = map(ema0, -q, q, minf, maxf); //or + float f0 = sin(r) * (float)(2*t); + Music.setFrequency1(f0); + + int f1 = map(pos0, -q, q, minf, maxf); + Music.setFrequency2(f1); + + int f2 = map(pos1, -q, q, minf, maxf); + Music.setFrequency3(f2); + + usbMIDI.read(); + + +} + diff --git a/code/_XYZ/_XYZ.ino b/code/_XYZ/_XYZ.ino new file mode 100755 index 0000000..e59e08c --- /dev/null +++ b/code/_XYZ/_XYZ.ino @@ -0,0 +1,98 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#define PRINTLN(x,y) Serial.print(x); Serial.println(y); + +int raw0 = 0; +int ema0 = 0; +ExpMovAvg exmoav(&raw0, &ema0); + +SpringMassDamper spring0(1.0, 19.0, 7.0); +SpringMassDamper spring1(10.0, 19.0, 7.0); + + +void setup() { + + FluteEx.init(); + + pinMode(A0, INPUT); + pinMode(A9, INPUT); + pinMode(A2, INPUT); + + Music.init(); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + Music.getPreset(12); + + Music.setGain1(1.0); + Music.setGain2(1.0); + Music.setGain3(1.0); + + Music.setWaveform1(SQUARE); + Music.setWaveform2(SQUARE); + Music.setWaveform3(SQUARE); + + Serial.begin(115200); + +} + +float r = 0; + +void loop() { + + + int memory_junk[4]; + raw0 = memory_junk[0] + memory_junk[1];// + memory_junk[2] + memory_junk[3]; + + exmoav.calculate(); + + int pos0 = spring0.position(ema0); + int pos1 = spring1.position(pos0); + + int t = analogRead(A0); + t = map(t, 0, 1023, 2, 167); + //t = map(t, 0, 1023, 2, 75); -- great + delay(t); + + r += 0.001; + + int q = 20000; + int minf = 50, maxf = 20000; + + int f0 = map(ema0, -q, q, minf, maxf); //or + //float f0 = sin(r) * (float)(t*2); + Music.setFrequency1(f0); + +// Serial.println(f0); + + int f1 = map(pos0, -q, q, minf, maxf); + Music.setFrequency2(f1); + +// Serial.println(f1); + + int f2 = map(pos1, -q, q, minf, maxf); + Music.setFrequency3(f2); + + Serial.println(f2); + + usbMIDI.read(); + + + +} + diff --git a/code/bizarre/bizarre.ino b/code/bizarre/bizarre.ino new file mode 100755 index 0000000..8cd8789 --- /dev/null +++ b/code/bizarre/bizarre.ino @@ -0,0 +1,85 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + + +int raw0 = 0; +int ema0 = 0; +ExpMovAvg exmoav(&raw0, &ema0); + +SpringMassDamper spring0(10.0, 19.0, 7.0); +SpringMassDamper spring1(10.0, 19.0, 7.0); + +float r = 0; + + +void setup() { + + Serial.begin(115200); + Serial.println("starts"); + + Music.init(); + + FluteEx.init(); + + pinMode(A0, INPUT); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + Music.getPreset(4); + +} + +void loop() { + + int memory_junk[4]; + raw0 = memory_junk[0] + memory_junk[1];// + memory_junk[2] + memory_junk[3]; + + exmoav.calculate(); + + int pos0 = spring0.position(ema0); + int pos1 = spring1.position(pos0); + + int t = analogRead(A1); + t = map(t, 0, 1023, 2, 200); + //t = map(t, 0, 1023, 2, 75); -- great + delay(t); + + r += 0.001; + + int q = 20000; + int minf = 50, maxf = 20000; + + float f0 = map(ema0, -q, q, minf, maxf); //or + //float f0 = sin(r) * (float)(t*2); + Music.setFrequency1(f0); + +// Serial.println(f0); + + float f1 = map(pos0, -q, q, minf, maxf); + Music.setFrequency2(f1); + +// Serial.println(f1); + + float f2 = map(pos1, -q, q, minf, maxf); + Music.setFrequency3(f2); + +// Serial.println(f2); + + usbMIDI.read(); + + +} diff --git a/code/dashboard_v9_MFMFM.maxpat b/code/dashboard_v9_MFMFM.maxpat new file mode 100755 index 0000000..f79bf29 --- /dev/null +++ b/code/dashboard_v9_MFMFM.maxpat @@ -0,0 +1,4677 @@ +{ + "patcher" : { + "fileversion" : 1, + "appversion" : { + "major" : 7, + "minor" : 3, + "revision" : 3, + "architecture" : "x86", + "modernui" : 1 + } +, + "rect" : [ 1925.0, 105.0, 979.0, 494.0 ], + "bglocked" : 0, + "openinpresentation" : 1, + "default_fontsize" : 12.0, + "default_fontface" : 0, + "default_fontname" : "Arial", + "gridonopen" : 1, + "gridsize" : [ 15.0, 15.0 ], + "gridsnaponopen" : 1, + "objectsnaponopen" : 1, + "statusbarvisible" : 2, + "toolbarvisible" : 1, + "lefttoolbarpinned" : 0, + "toptoolbarpinned" : 0, + "righttoolbarpinned" : 0, + "bottomtoolbarpinned" : 0, + "toolbars_unpinned_last_save" : 0, + "tallnewobj" : 0, + "boxanimatetime" : 200, + "enablehscroll" : 1, + "enablevscroll" : 1, + "devicewidth" : 0.0, + "description" : "", + "digest" : "", + "tags" : "", + "style" : "", + "subpatcher_template" : "", + "boxes" : [ { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-136", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 714.5, 791.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 82" + } + + } +, { + "box" : { + "automation" : "Off", + "automationon" : "On", + "id" : "obj-135", + "maxclass" : "live.text", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "" ], + "parameter_enable" : 1, + "patching_rect" : [ 714.5, 735.5, 44.0, 39.0 ], + "presentation" : 1, + "presentation_rect" : [ 703.0, 140.0, 44.0, 39.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_order" : 2, + "parameter_linknames" : 1, + "parameter_longname" : "live.text[2]", + "parameter_shortname" : "1", + "parameter_type" : 2, + "parameter_mmax" : 1.0, + "parameter_enum" : [ "Off", "On" ], + "parameter_initial_enable" : 1, + "parameter_initial" : [ 1.0 ], + "parameter_speedlim" : 0.0 + } + + } +, + "text" : "On", + "texton" : "On", + "varname" : "live.text[2]" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-290", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 244.0, 101.0, 32.5, 22.0 ], + "style" : "", + "text" : "0" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-288", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 244.0, 73.0, 60.0, 22.0 ], + "style" : "", + "text" : "loadbang" + } + + } +, { + "box" : { + "fontsize" : 13.0, + "id" : "obj-287", + "interp" : 100.0, + "maxclass" : "live.gain~", + "numinlets" : 2, + "numoutlets" : 5, + "outlettype" : [ "signal", "signal", "", "float", "list" ], + "parameter_enable" : 1, + "patching_rect" : [ 403.944458, 73.0, 77.0, 114.0 ], + "presentation" : 1, + "presentation_rect" : [ 874.939575, 62.0, 77.0, 114.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_linknames" : 1, + "parameter_longname" : "Stereo", + "parameter_shortname" : "Stereo", + "parameter_type" : 0, + "parameter_mmin" : -70.0, + "parameter_mmax" : 6.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 4 + } + + } +, + "varname" : "Stereo" + } + + } +, { + "box" : { + "id" : "obj-132", + "maxclass" : "ezdac~", + "numinlets" : 2, + "numoutlets" : 0, + "patching_rect" : [ 323.0, 149.0, 45.0, 45.0 ], + "style" : "" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-131", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 323.0, 15.0, 73.0, 22.0 ], + "presentation" : 1, + "presentation_rect" : [ 874.939575, 31.0, 73.0, 22.0 ], + "style" : "", + "text" : "setup audio" + } + + } +, { + "box" : { + "id" : "obj-125", + "maxclass" : "button", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 323.0, 42.0, 20.0, 20.0 ], + "style" : "" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-117", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 323.0, 73.0, 37.0, 22.0 ], + "style" : "", + "text" : "open" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-71", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "signal", "signal" ], + "patching_rect" : [ 323.0, 98.5, 37.0, 22.0 ], + "style" : "", + "text" : "adc~" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-115", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 106.5, 356.0, 89.0, 20.0 ], + "style" : "", + "text" : "expr $i1 + 16*$i2" + } + + } +, { + "box" : { + "id" : "obj-107", + "maxclass" : "live.tab", + "num_lines_patching" : 4, + "num_lines_presentation" : 4, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 196.944458, 285.0, 20.0, 60.0 ], + "presentation" : 1, + "presentation_rect" : [ 852.939575, 116.0, 20.0, 60.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC3 Modulation Shape[2]", + "parameter_shortname" : "FM3modShape", + "parameter_type" : 2, + "parameter_enum" : [ "U", "A", "B", "C" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[9]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-101", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 888.0, 177.0, 150.0, 18.0 ], + "presentation" : 1, + "presentation_rect" : [ 766.0, 69.5, 26.0, 18.0 ], + "style" : "", + "text" : "Out" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-94", + "maxclass" : "comment", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 888.0, 152.0, 150.0, 18.0 ], + "presentation" : 1, + "presentation_rect" : [ 766.0, 51.5, 26.0, 18.0 ], + "style" : "", + "text" : "In" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-116", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 768.5, 128.0, 62.0, 20.0 ], + "style" : "", + "text" : "controllers" + } + + } +, { + "box" : { + "id" : "obj-114", + "maxclass" : "button", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "bang" ], + "patching_rect" : [ 742.25, 117.0, 20.0, 20.0 ], + "style" : "" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-75", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 768.5, 101.0, 77.0, 22.0 ], + "presentation" : 1, + "presentation_rect" : [ 792.0, 31.0, 80.0, 22.0 ], + "style" : "", + "text" : "Update Lists" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-80", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 768.5, 149.0, 52.0, 22.0 ], + "style" : "", + "text" : "midiinfo" + } + + } +, { + "box" : { + "allowdrag" : 0, + "bgcolor" : [ 0.6, 0.6, 0.6, 1.0 ], + "bgfillcolor_angle" : 270.0, + "bgfillcolor_color" : [ 0.6, 0.6, 0.6, 1.0 ], + "bgfillcolor_color1" : [ 0.376471, 0.384314, 0.4, 1.0 ], + "bgfillcolor_color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], + "bgfillcolor_proportion" : 0.39, + "bgfillcolor_type" : "color", + "fontname" : "Arial Bold", + "fontsize" : 9.300003, + "hint" : "", + "id" : "obj-92", + "items" : [ "Teensy MIDI", ",", "to Max 1", ",", "to Max 2" ], + "maxclass" : "umenu", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "int", "", "" ], + "parameter_enable" : 0, + "patching_rect" : [ 768.5, 177.0, 116.939552, 19.0 ], + "pattrmode" : 1, + "prefix_mode" : 2, + "presentation" : 1, + "presentation_rect" : [ 792.0, 51.5, 80.939552, 19.0 ], + "prototypename" : "Arial9", + "style" : "", + "textcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "varname" : "output-devices[1]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-3", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 64, + "outlettype" : [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ], + "patching_rect" : [ 1048.5, 223.0, 869.5, 20.0 ], + "style" : "", + "text" : "gate 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-171", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 999.638916, 144.5, 32.5, 20.0 ], + "style" : "", + "text" : "- 63" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-167", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 962.444458, 168.0, 32.5, 20.0 ], + "style" : "", + "text" : "* 0" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-168", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 962.444458, 193.0, 50.0, 20.0 ], + "style" : "", + "text" : "64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-169", + "maxclass" : "number", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "bang" ], + "parameter_enable" : 0, + "patching_rect" : [ 945.944458, 117.0, 50.0, 20.0 ], + "style" : "" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-170", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 962.444458, 144.5, 36.0, 20.0 ], + "style" : "", + "text" : ">= 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-166", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 928.944458, 168.0, 32.5, 20.0 ], + "style" : "", + "text" : "* 0" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-165", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 897.944458, 193.0, 50.0, 20.0 ], + "style" : "", + "text" : "0" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-161", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 908.944458, 144.5, 32.5, 20.0 ], + "style" : "", + "text" : "< 64" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-9", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 640.5, 149.0, 52.0, 22.0 ], + "style" : "", + "text" : "midiinfo" + } + + } +, { + "box" : { + "allowdrag" : 0, + "bgcolor" : [ 0.6, 0.6, 0.6, 1.0 ], + "bgfillcolor_angle" : 270.0, + "bgfillcolor_color" : [ 0.6, 0.6, 0.6, 1.0 ], + "bgfillcolor_color1" : [ 0.376471, 0.384314, 0.4, 1.0 ], + "bgfillcolor_color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], + "bgfillcolor_proportion" : 0.39, + "bgfillcolor_type" : "color", + "fontname" : "Arial Bold", + "fontsize" : 9.300003, + "hint" : "", + "id" : "obj-270", + "items" : [ "AU DLS Synth 1", ",", "Teensy MIDI", ",", "from Max 1", ",", "from Max 2" ], + "maxclass" : "umenu", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "int", "", "" ], + "parameter_enable" : 0, + "patching_rect" : [ 640.5, 176.0, 116.939552, 19.0 ], + "pattrmode" : 1, + "prefix_mode" : 2, + "presentation" : 1, + "presentation_rect" : [ 792.0, 69.5, 80.939552, 19.0 ], + "prototypename" : "Arial9", + "style" : "", + "textcolor" : [ 0.258824, 0.258824, 0.258824, 1.0 ], + "varname" : "output-devices" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-78", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 8, + "outlettype" : [ "", "", "", "int", "int", "", "int", "" ], + "patching_rect" : [ 23.0, 588.0, 100.0, 20.0 ], + "style" : "", + "text" : "midiparse" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-77", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "int", "int", "int" ], + "patching_rect" : [ 873.5, 117.0, 46.0, 20.0 ], + "style" : "", + "text" : "ctlin" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-76", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 63, + "outlettype" : [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ], + "patching_rect" : [ 86.5, 223.0, 856.0, 20.0 ], + "style" : "", + "text" : "gate 63" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-58", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 223.944458, 446.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 70" + } + + } +, { + "box" : { + "id" : "obj-63", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 223.944458, 393.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 703.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Cutoff Modulation Amount", + "parameter_shortname" : "CutMod", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[22]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-52", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 298.0, 455.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 72" + } + + } +, { + "box" : { + "id" : "obj-55", + "maxclass" : "live.tab", + "num_lines_patching" : 3, + "num_lines_presentation" : 3, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 298.0, 409.5, 70.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 690.0, 31.0, 70.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Cutoff Modulation Source", + "parameter_shortname" : "CutModSource", + "parameter_type" : 2, + "parameter_enum" : [ "FULL", "ENV1", "ENV2", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[7]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-42", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 531.0, 722.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 124" + } + + } +, { + "box" : { + "id" : "obj-43", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 531.0, 665.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 127.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV2 Attack", + "parameter_shortname" : "A", + "parameter_type" : 1, + "parameter_initial" : [ 4.0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[9]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-44", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 534.5, 807.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 126" + } + + } +, { + "box" : { + "id" : "obj-45", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 534.5, 758.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 127.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV2 Sustain", + "parameter_shortname" : "S", + "parameter_type" : 1, + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[14]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-46", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 602.5, 722.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 125" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-47", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 602.5, 807.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 127" + } + + } +, { + "box" : { + "id" : "obj-48", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 602.5, 758.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 167.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV2 Release", + "parameter_shortname" : "R", + "parameter_type" : 1, + "parameter_initial" : [ 64.0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[15]" + } + + } +, { + "box" : { + "id" : "obj-49", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 602.5, 665.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 167.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV2 Decay", + "parameter_shortname" : "D", + "parameter_type" : 1, + "parameter_initial" : [ 47.0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[16]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-7", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 368.0, 722.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 114" + } + + } +, { + "box" : { + "id" : "obj-23", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 368.0, 665.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 23.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV1 Attack", + "parameter_shortname" : "A", + "parameter_type" : 1, + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[6]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-5", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 355.5, 811.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 116" + } + + } +, { + "box" : { + "id" : "obj-6", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 355.5, 758.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 23.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV1 Sustain", + "parameter_shortname" : "S", + "parameter_type" : 1, + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[3]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-16", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 437.0, 722.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 115" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-14", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 419.5, 811.5, 69.0, 20.0 ], + "style" : "", + "text" : "prepend 117" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-13", + "maxclass" : "newobj", + "numinlets" : 7, + "numoutlets" : 2, + "outlettype" : [ "int", "" ], + "patching_rect" : [ 23.0, 637.5, 100.0, 20.0 ], + "style" : "", + "text" : "midiformat" + } + + } +, { + "box" : { + "id" : "obj-11", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 419.5, 758.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 63.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV1 Release", + "parameter_shortname" : "R", + "parameter_type" : 1, + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[2]" + } + + } +, { + "box" : { + "id" : "obj-10", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 437.0, 665.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 63.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "ENV1 Decay", + "parameter_shortname" : "D", + "parameter_type" : 1, + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[1]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-2", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 23.0, 683.0, 47.0, 20.0 ], + "style" : "", + "text" : "midiout" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-1", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 23.0, 101.0, 40.0, 20.0 ], + "style" : "", + "text" : "midiin" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-66", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 48.0, 455.0, 50.0, 20.0 ], + "style" : "", + "text" : "0 6" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-122", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 41.0, 422.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 1" + } + + } +, { + "box" : { + "id" : "obj-121", + "maxclass" : "live.text", + "mode" : 0, + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "" ], + "parameter_enable" : 1, + "patching_rect" : [ 48.0, 277.0, 36.0, 16.0 ], + "presentation" : 1, + "presentation_rect" : [ 766.0, 97.0, 60.0, 16.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "live.text[1]", + "parameter_shortname" : "live.text[5]", + "parameter_type" : 2, + "parameter_mmax" : 1.0, + "parameter_enum" : [ "val1", "val2" ] + } + + } +, + "text" : "RECALL", + "varname" : "live.text[6]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-120", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 41.0, 399.0, 50.0, 20.0 ], + "style" : "", + "text" : "6" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-119", + "maxclass" : "message", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 106.5, 399.0, 50.0, 20.0 ], + "style" : "", + "text" : "6" + } + + } +, { + "box" : { + "id" : "obj-113", + "maxclass" : "live.text", + "mode" : 0, + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "" ], + "parameter_enable" : 1, + "patching_rect" : [ 63.0, 307.5, 36.0, 15.0 ], + "presentation" : 1, + "presentation_rect" : [ 836.0, 97.0, 36.0, 15.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "live.text[5]", + "parameter_shortname" : "live.text[5]", + "parameter_type" : 2, + "parameter_mmax" : 1.0, + "parameter_enum" : [ "val1", "val2" ] + } + + } +, + "text" : "SAVE", + "varname" : "live.text[5]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-111", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 106.5, 422.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 0" + } + + } +, { + "box" : { + "id" : "obj-112", + "maxclass" : "live.tab", + "num_lines_patching" : 4, + "num_lines_presentation" : 4, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 106.5, 285.0, 80.0, 60.0 ], + "presentation" : 1, + "presentation_rect" : [ 766.0, 116.0, 80.0, 60.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC3 Modulation Shape[1]", + "parameter_shortname" : "FM3modShape", + "parameter_type" : 2, + "parameter_enum" : [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[8]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-110", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 464.944458, 348.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 7" + } + + } +, { + "box" : { + "id" : "obj-109", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 464.944458, 294.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Resonance", + "parameter_shortname" : "Reso", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[21]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-106", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 598.944458, 383.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 9" + } + + } +, { + "box" : { + "id" : "obj-108", + "maxclass" : "live.tab", + "num_lines_patching" : 4, + "num_lines_presentation" : 4, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 598.944458, 294.0, 45.0, 80.0 ], + "presentation" : 1, + "presentation_rect" : [ 638.0, 31.0, 45.0, 80.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Filter Type", + "parameter_shortname" : "FltType", + "parameter_type" : 2, + "parameter_enum" : [ "LP", "HP", "BP", "Notch" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[6]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-105", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 282.944458, 348.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 4" + } + + } +, { + "box" : { + "id" : "obj-104", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 282.944458, 294.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 127.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Cutoff", + "parameter_shortname" : "Cutoff", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[20]" + } + + } +, { + "box" : { + "automation" : "8bit", + "automationon" : "12bit", + "id" : "obj-102", + "maxclass" : "live.text", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "" ], + "parameter_enable" : 1, + "patching_rect" : [ 216.944458, 294.0, 40.0, 20.0 ], + "presentation" : 1, + "presentation_rect" : [ 640.5, 159.0, 40.0, 20.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Set to 12 bit", + "parameter_shortname" : "is12bit", + "parameter_type" : 2, + "parameter_mmax" : 1.0, + "parameter_enum" : [ "8bit", "12bit" ], + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0.0 ] + } + + } +, + "text" : "8BIT", + "texton" : "12BIT", + "varname" : "live.text[4]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-103", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 216.944458, 321.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 3" + } + + } +, { + "box" : { + "automation" : "NORM", + "automationon" : "ZERO", + "id" : "obj-41", + "maxclass" : "live.text", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "" ], + "parameter_enable" : 1, + "patching_rect" : [ 345.944458, 294.0, 40.0, 20.0 ], + "presentation" : 1, + "presentation_rect" : [ 640.5, 132.0, 40.0, 20.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "zeroFM", + "parameter_shortname" : "zeroFM", + "parameter_type" : 2, + "parameter_mmax" : 1.0, + "parameter_enum" : [ "NORM", "ZERO" ], + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0.0 ] + } + + } +, + "text" : "NORM", + "texton" : "ZERO", + "varname" : "live.text" + } + + } +, { + "box" : { + "id" : "obj-33", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 528.944458, 294.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 23.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Portamento", + "parameter_shortname" : "Porta", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[13]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-40", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 528.944458, 347.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 8" + } + + } +, { + "box" : { + "id" : "obj-21", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 403.944458, 294.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 167.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "FM Octaves", + "parameter_shortname" : "octFM", + "parameter_type" : 1, + "parameter_enum" : [ "1", "2", "3", "4" ], + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0.0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[12]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-31", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 403.944458, 347.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 6" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-30", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 345.944458, 320.0, 58.0, 20.0 ], + "style" : "", + "text" : "prepend 5" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-172", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 778.0, 263.5, 32.5, 20.0 ], + "style" : "", + "text" : "- 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-12", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 768.5, 352.5, 32.5, 20.0 ], + "style" : "", + "text" : "+ 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-173", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 669.5, 407.5, 105.0, 20.0 ], + "style" : "", + "text" : "expr (($i1+24)*2)+16" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-174", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 669.5, 381.5, 99.0, 20.0 ], + "style" : "", + "text" : "expr (($i1-16)/2)-24" + } + + } +, { + "box" : { + "fontname" : "Arial", + "fontsize" : 12.0, + "id" : "obj-175", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 961.5, 262.5, 32.5, 22.0 ], + "style" : "", + "text" : "+ 1" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-20", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 832.5, 263.5, 32.5, 20.0 ], + "style" : "", + "text" : "- 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-99", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 704.5, 352.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 10" + } + + } +, { + "box" : { + "id" : "obj-100", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 704.5, 294.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 231.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC1 Low Frequency", + "parameter_shortname" : "LFO1", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[19]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-65", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1229.5, 367.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 18" + } + + } +, { + "box" : { + "id" : "obj-60", + "maxclass" : "live.tab", + "num_lines_patching" : 3, + "num_lines_presentation" : 3, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1229.5, 295.0, 60.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 487.0, 31.0, 60.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC1 Modulation Shape", + "parameter_shortname" : "FM1modShape", + "parameter_type" : 2, + "parameter_enum" : [ "LIN", "ENV1", "ENV2", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[3]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-53", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1133.5, 367.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 17" + } + + } +, { + "box" : { + "id" : "obj-51", + "maxclass" : "live.tab", + "num_lines_patching" : 2, + "num_lines_presentation" : 2, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1133.5, 295.0, 70.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 562.0, 31.0, 70.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC1 Modulation Source", + "parameter_shortname" : "FM1modSource", + "parameter_type" : 2, + "parameter_enum" : [ "FULL", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-39", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1048.5, 352.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 15" + } + + } +, { + "box" : { + "id" : "obj-36", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1048.5, 295.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 391.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "FM1", + "parameter_shortname" : "FM1", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[11]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-27", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 832.5, 381.5, 32.5, 20.0 ], + "style" : "", + "text" : "+ 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-24", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 961.5, 352.5, 32.5, 20.0 ], + "style" : "", + "text" : "- 1" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-22", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 961.5, 381.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 14" + } + + } +, { + "box" : { + "id" : "obj-17", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 961.5, 295.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 271.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Waveform 1", + "parameter_shortname" : "Wave1", + "parameter_type" : 1, + "parameter_mmin" : 1.0, + "parameter_mmax" : 16.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[7]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-90", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 890.5, 352.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 13" + } + + } +, { + "box" : { + "id" : "obj-91", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 890.5, 295.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 431.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Gain 1", + "parameter_shortname" : "Gain1", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 127 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[36]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-81", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 832.5, 409.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 12" + } + + } +, { + "box" : { + "id" : "obj-83", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 832.5, 295.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 351.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Detune1", + "parameter_shortname" : "Detun1", + "parameter_type" : 1, + "parameter_mmin" : -64.0, + "parameter_mmax" : 63.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 64 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[28]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-67", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 768.5, 381.5, 63.0, 20.0 ], + "style" : "", + "text" : "prepend 11" + } + + } +, { + "box" : { + "id" : "obj-70", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 768.5, 295.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 311.0, 23.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Semitone 1", + "parameter_shortname" : "Semi1", + "parameter_type" : 1, + "parameter_mmin" : -24.0, + "parameter_mmax" : 24.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[31]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-129", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 971.5, 440.0, 32.5, 20.0 ], + "style" : "", + "text" : "+ 1" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-128", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 778.5, 432.0, 32.5, 20.0 ], + "style" : "", + "text" : "- 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-32", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 842.5, 440.0, 32.5, 20.0 ], + "style" : "", + "text" : "- 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-97", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 714.5, 516.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 20" + } + + } +, { + "box" : { + "id" : "obj-98", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 714.5, 462.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 231.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC2 Low Frequency", + "parameter_shortname" : "LFO2", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[18]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-69", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1257.0, 522.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 28" + } + + } +, { + "box" : { + "id" : "obj-61", + "maxclass" : "live.tab", + "num_lines_patching" : 3, + "num_lines_presentation" : 3, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1257.0, 450.5, 60.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 487.0, 85.0, 60.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC2 Modulation Shape", + "parameter_shortname" : "FM2modShape", + "parameter_type" : 2, + "parameter_enum" : [ "LIN", "ENV1", "ENV2", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[4]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-54", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1161.0, 522.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 27" + } + + } +, { + "box" : { + "id" : "obj-56", + "maxclass" : "live.tab", + "num_lines_patching" : 2, + "num_lines_presentation" : 2, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1161.0, 450.5, 70.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 562.0, 85.0, 70.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC2 Modulation Source", + "parameter_shortname" : "FM2modSource", + "parameter_type" : 2, + "parameter_enum" : [ "FULL", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[1]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-38", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1060.0, 516.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 25" + } + + } +, { + "box" : { + "id" : "obj-35", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1060.0, 462.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 391.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "FM2", + "parameter_shortname" : "FM2", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[10]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-28", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 842.5, 539.0, 32.5, 20.0 ], + "style" : "", + "text" : "+ 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-25", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 971.5, 516.0, 32.5, 20.0 ], + "style" : "", + "text" : "- 1" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-19", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 971.5, 539.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 24" + } + + } +, { + "box" : { + "id" : "obj-15", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 971.5, 465.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 271.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Waveform 2", + "parameter_shortname" : "Wave2", + "parameter_type" : 1, + "parameter_mmin" : 1.0, + "parameter_mmax" : 16.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[5]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-8", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 778.5, 516.0, 32.5, 20.0 ], + "style" : "", + "text" : "+ 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-88", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 900.5, 516.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 23" + } + + } +, { + "box" : { + "id" : "obj-89", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 900.5, 465.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 431.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Gain 2", + "parameter_shortname" : "Gain2", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 127 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[35]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-82", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 842.5, 563.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 22" + } + + } +, { + "box" : { + "id" : "obj-84", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 842.5, 465.5, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 351.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Detune2", + "parameter_shortname" : "Detun2", + "parameter_type" : 1, + "parameter_mmin" : -64.0, + "parameter_mmax" : 63.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 64 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[29]" + } + + } +, { + "box" : { + "id" : "obj-73", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 778.5, 462.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 311.0, 79.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Semitone 2", + "parameter_shortname" : "Semi2", + "parameter_type" : 1, + "parameter_mmin" : -24.0, + "parameter_mmax" : 24.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[32]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-68", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 778.5, 539.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 21" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-141", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 971.5, 597.0, 32.5, 20.0 ], + "style" : "", + "text" : "+ 1" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-140", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 778.5, 597.0, 32.5, 20.0 ], + "style" : "", + "text" : "- 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-50", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 842.5, 597.0, 32.5, 20.0 ], + "style" : "", + "text" : "- 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-95", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 714.5, 677.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 30" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-72", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1260.5, 677.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 38" + } + + } +, { + "box" : { + "id" : "obj-62", + "maxclass" : "live.tab", + "num_lines_patching" : 3, + "num_lines_presentation" : 3, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1260.5, 605.5, 60.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 487.0, 138.0, 60.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC3 Modulation Shape", + "parameter_shortname" : "FM3modShape", + "parameter_type" : 2, + "parameter_enum" : [ "LIN", "ENV1", "ENV2", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[5]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-57", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1164.5, 677.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 37" + } + + } +, { + "box" : { + "id" : "obj-59", + "maxclass" : "live.tab", + "num_lines_patching" : 2, + "num_lines_presentation" : 2, + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1164.5, 605.5, 70.0, 40.0 ], + "presentation" : 1, + "presentation_rect" : [ 562.0, 138.0, 70.0, 40.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC3 Modulation Source", + "parameter_shortname" : "FM3modSource", + "parameter_type" : 2, + "parameter_enum" : [ "FULL", "OSC1", "OSC2", "OSC3" ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.tab[2]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-37", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 1060.0, 677.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 35" + } + + } +, { + "box" : { + "id" : "obj-34", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 1060.0, 623.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 391.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "FM3", + "parameter_shortname" : "FM3", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[8]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-29", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 842.5, 704.0, 32.5, 20.0 ], + "style" : "", + "text" : "+ 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-26", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 971.5, 677.0, 32.5, 20.0 ], + "style" : "", + "text" : "- 1" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-18", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 971.5, 704.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 34" + } + + } +, { + "box" : { + "id" : "obj-4", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 971.5, 623.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 271.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Waveform 3", + "parameter_shortname" : "Wave3", + "parameter_type" : 1, + "parameter_mmin" : 1.0, + "parameter_mmax" : 16.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[4]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-181", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 1, + "outlettype" : [ "int" ], + "patching_rect" : [ 778.5, 677.0, 32.5, 20.0 ], + "style" : "", + "text" : "+ 64" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-86", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 900.5, 677.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 33" + } + + } +, { + "box" : { + "id" : "obj-87", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 900.5, 623.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 431.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Gain 3", + "parameter_shortname" : "Gain3", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 127 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[34]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-79", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 842.5, 729.5, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 32" + } + + } +, { + "box" : { + "id" : "obj-85", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 842.5, 623.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 351.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Detune3", + "parameter_shortname" : "Detun3", + "parameter_type" : 1, + "parameter_mmin" : -64.0, + "parameter_mmax" : 63.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 64 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[30]" + } + + } +, { + "box" : { + "id" : "obj-74", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 778.5, 623.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 311.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "Semitone 3", + "parameter_shortname" : "Semi3", + "parameter_type" : 1, + "parameter_mmin" : -24.0, + "parameter_mmax" : 24.0, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 0 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[33]" + } + + } +, { + "box" : { + "fontname" : "Arial Bold", + "fontsize" : 10.0, + "id" : "obj-64", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 778.5, 704.0, 64.0, 20.0 ], + "style" : "", + "text" : "prepend 31" + } + + } +, { + "box" : { + "id" : "obj-96", + "maxclass" : "live.dial", + "numinlets" : 1, + "numoutlets" : 2, + "outlettype" : [ "", "float" ], + "parameter_enable" : 1, + "patching_rect" : [ 714.5, 623.0, 44.0, 47.0 ], + "presentation" : 1, + "presentation_rect" : [ 231.0, 132.0, 44.0, 47.0 ], + "saved_attribute_attributes" : { + "valueof" : { + "parameter_longname" : "OSC3 Low Frequency", + "parameter_shortname" : "LFO3", + "parameter_type" : 1, + "parameter_initial_enable" : 1, + "parameter_initial" : [ 127 ], + "parameter_unitstyle" : 0 + } + + } +, + "varname" : "live.dial[17]" + } + + } +, { + "box" : { + "autofit" : 1, + "background" : 1, + "id" : "obj-93", + "ignoreclick" : 1, + "maxclass" : "fpic", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "jit_matrix" ], + "patching_rect" : [ 537.0, 56.5, 119.944458, 77.0 ], + "pic" : "Macintosh HD:/Users/gauthiier/Desktop/Rough_Trolling_Port_Jackson_005.jpg", + "presentation" : 1, + "presentation_rect" : [ 0.0, -3.0, 979.0, 495.5 ] + } + + } + ], + "lines" : [ { + "patchline" : { + "destination" : [ "obj-78", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-1", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-16", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-10", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-99", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-100", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-103", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-102", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-103", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-105", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-104", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-105", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-106", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-115", 1 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-107", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-106", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-108", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-110", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-109", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-14", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-11", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-110", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-111", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-66", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-111", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-115", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-112", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-119", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-113", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-116", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-114", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-9", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-114", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-119", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-115", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-120", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-115", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-80", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-116", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-71", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-117", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-111", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-119", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-67", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-12", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-122", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-120", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-120", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-121", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-122", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-66", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-122", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-117", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-125", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-73", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-128", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-15", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-129", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-13", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-125", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-131", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-136", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-135", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-136", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-14", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-74", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-140", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-4", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-141", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-25", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-15", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-16", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-166", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-161", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-76", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-165", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-165", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-166", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-165", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-166", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-168", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-167", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-168", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-167", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-168", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-161", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 3, + "source" : [ "obj-169", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-166", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 2, + "source" : [ "obj-169", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-170", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-169", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-171", 0 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-169", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-24", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-17", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-167", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-170", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-167", 1 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-171", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-70", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-172", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-17", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-175", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-18", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-64", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-181", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-19", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-83", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-20", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-31", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-21", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-22", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-7", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-23", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-22", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-24", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-19", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-25", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-18", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-26", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-81", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-27", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-2", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-270", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-82", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-28", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-132", 1 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-287", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-132", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-287", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-290", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-288", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-79", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-29", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-132", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-290", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-10", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 51 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-11", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 53 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-23", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 50 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-43", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 60 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-45", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 62 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-48", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 63 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-49", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 61 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-55", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 8 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-6", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 52 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-63", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-3", 6 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-30", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-31", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-84", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-32", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-40", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-33", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-37", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-34", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-38", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-35", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-39", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-36", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-37", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-38", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-39", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-26", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-4", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-40", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-30", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-41", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-42", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-42", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-43", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-44", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-44", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-45", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-46", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-47", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-47", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-48", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-46", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-49", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-5", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-85", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-50", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-53", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-51", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-52", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-53", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-54", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-52", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-55", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-54", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-56", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-57", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-58", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-57", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-59", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-5", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-6", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-65", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-60", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-69", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-61", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-72", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-62", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-58", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-63", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-64", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-65", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-67", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-68", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-69", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-7", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-12", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-70", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-287", 1 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-71", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-287", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-71", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-72", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-8", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-73", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-181", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-74", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-114", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-75", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-100", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 9 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-102", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 2 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-104", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 3 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-108", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 8 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-109", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 6 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-128", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 20 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-129", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 23 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-140", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 30 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-141", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 33 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-172", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 10 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-175", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 13 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-20", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 11 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-21", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 5 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-32", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 21 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-33", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 7 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-34", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 34 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-35", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 24 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-36", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 14 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-41", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 4 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-50", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 31 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-51", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 16 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-56", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 26 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-59", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 36 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-60", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 17 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-61", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 27 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-62", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 37 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-87", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 32 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-89", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 22 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-91", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 12 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-96", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 29 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-98", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-76", 19 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-169", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-77", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-3", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 0, + "source" : [ "obj-77", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-76", 1 ], + "disabled" : 0, + "hidden" : 0, + "order" : 1, + "source" : [ "obj-77", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-78", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-79", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-68", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-8", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-92", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-80", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-81", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-82", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-27", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-83", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-28", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-84", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-29", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-85", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-86", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-86", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-87", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-88", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-88", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-89", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-270", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-9", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-90", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-90", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-91", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-77", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-92", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-95", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-95", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-96", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-97", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-97", 0 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-98", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-13", 2 ], + "disabled" : 0, + "hidden" : 0, + "source" : [ "obj-99", 0 ] + } + + } + ], + "parameters" : { + "obj-56" : [ "OSC2 Modulation Source", "FM2modSource", 0 ], + "obj-108" : [ "Filter Type", "FltType", 0 ], + "obj-6" : [ "ENV1 Sustain", "S", 0 ], + "obj-15" : [ "Waveform 2", "Wave2", 0 ], + "obj-84" : [ "Detune2", "Detun2", 0 ], + "obj-100" : [ "OSC1 Low Frequency", "LFO1", 0 ], + "obj-87" : [ "Gain 3", "Gain3", 0 ], + "obj-98" : [ "OSC2 Low Frequency", "LFO2", 0 ], + "obj-48" : [ "ENV2 Release", "R", 0 ], + "obj-49" : [ "ENV2 Decay", "D", 0 ], + "obj-96" : [ "OSC3 Low Frequency", "LFO3", 0 ], + "obj-35" : [ "FM2", "FM2", 0 ], + "obj-107" : [ "OSC3 Modulation Shape[2]", "FM3modShape", 0 ], + "obj-104" : [ "Cutoff", "Cutoff", 0 ], + "obj-59" : [ "OSC3 Modulation Source", "FM3modSource", 0 ], + "obj-33" : [ "Portamento", "Porta", 0 ], + "obj-83" : [ "Detune1", "Detun1", 0 ], + "obj-55" : [ "Cutoff Modulation Source", "CutModSource", 0 ], + "obj-113" : [ "live.text[5]", "live.text[5]", 0 ], + "obj-73" : [ "Semitone 2", "Semi2", 0 ], + "obj-112" : [ "OSC3 Modulation Shape[1]", "FM3modShape", 0 ], + "obj-51" : [ "OSC1 Modulation Source", "FM1modSource", 0 ], + "obj-17" : [ "Waveform 1", "Wave1", 0 ], + "obj-121" : [ "live.text[1]", "live.text[5]", 0 ], + "obj-4" : [ "Waveform 3", "Wave3", 0 ], + "obj-43" : [ "ENV2 Attack", "A", 0 ], + "obj-85" : [ "Detune3", "Detun3", 0 ], + "obj-135" : [ "live.text[2]", "1", 2 ], + "obj-61" : [ "OSC2 Modulation Shape", "FM2modShape", 0 ], + "obj-36" : [ "FM1", "FM1", 0 ], + "obj-41" : [ "zeroFM", "zeroFM", 0 ], + "obj-11" : [ "ENV1 Release", "R", 0 ], + "obj-63" : [ "Cutoff Modulation Amount", "CutMod", 0 ], + "obj-21" : [ "FM Octaves", "octFM", 0 ], + "obj-89" : [ "Gain 2", "Gain2", 0 ], + "obj-34" : [ "FM3", "FM3", 0 ], + "obj-10" : [ "ENV1 Decay", "D", 0 ], + "obj-70" : [ "Semitone 1", "Semi1", 0 ], + "obj-45" : [ "ENV2 Sustain", "S", 0 ], + "obj-60" : [ "OSC1 Modulation Shape", "FM1modShape", 0 ], + "obj-287" : [ "Stereo", "Stereo", 0 ], + "obj-74" : [ "Semitone 3", "Semi3", 0 ], + "obj-109" : [ "Resonance", "Reso", 0 ], + "obj-23" : [ "ENV1 Attack", "A", 0 ], + "obj-62" : [ "OSC3 Modulation Shape", "FM3modShape", 0 ], + "obj-91" : [ "Gain 1", "Gain1", 0 ], + "obj-102" : [ "Set to 12 bit", "is12bit", 0 ] + } +, + "dependency_cache" : [ { + "name" : "Rough_Trolling_Port_Jackson_005.jpg", + "bootpath" : "~/Desktop", + "type" : "JPEG", + "implicit" : 1 + } + ], + "autosave" : 0 + } + +} diff --git a/code/libs/fsm/FSM.h b/code/libs/fsm/FSM.h new file mode 100755 index 0000000..1205f0c --- /dev/null +++ b/code/libs/fsm/FSM.h @@ -0,0 +1,210 @@ + +/* +777$7II7III??+,.......:+~=7$$Z$?$OOZOZ77?$$I+??I$ZOD8DD8DD888O$7$77$Z$$$ZZZZZOOO +$$$777$$77II??~.,..,.=?777$ZZ==$OZZ$I?=+?Z+==~=7Z7Z$OO8888DDDD8ZOZ$$$7Z$ZOZ$ZZOO +$$$7ZZ$Z$$77II=~:.,.:??+IZZZ+?O$ZI+?+:~+7I~~,:~?Z$88O88D88DDDDD8OZOZ$$$ZZZZZOOZZ +$$$$ZZ$$$$777I??:::,:7ZZ8OZ$$$7?=::,:~??~:,.....7$8$IZDDD8DDDNDDOZZO$$ZZZZZOZOOO +$$$77$7$7III$II+==+$$$OOO8OZ?=:......~. ........,?ZOI$88DOD8DDN8D888$7$ZZ$$Z$$ZO +$$7$$$77I77$ZZ$7,:Z$OZOOOOOI. ...,~:.....:~~+:===$Z$7OOD8DDD88O8D888O$7$Z$$$$OZ +$$77$$77I$$ZOZI,.7Z88O88O8?. .,:~~::,,.,,,+?$ZZZZZ8OZZ$8$8NDDDD88ODO8ZZ$$$OZZZOO +Z$Z$$$77$Z$$O$~.~?$ZOOOOOZ, ,?7$7II+:..,~+$III777I77I$O8OD8DD8D8DO8D88$77$$$ZZZZ +OOOOZc$ZOZOZZ?..+??IZO8NO$I?===+=~~~,...,~II???+~:+~:+ZO8D88DOODDDDD8D88OZ77$ZZZ +ZOZOOZZZZZOZ$II.~?I$ZZO8ZO~. ..~?+~~.. .,?$I$ZO888O?~$Z88D888O8888DONDD88Z7777$ +OZZ8O8OZZOZZZZ7I7I$ZZ7$OZ7:.=7ZDO7?~.. ,::+O7$O8O78O7IOD88N8D8DD88DD8OOOO7$$7Z +OOOZ88888OOOOZZI~?I$Z$OZI+?77,?$I?:.. .,:,,~,,~+++~+I$ZZ8DDD8DNDD8DDOOOZ7?$$7$ +OOOZO88OO8OZ7=:,.?7IZZOZI,~=~. ... . ..,,.. ...=:..~I$Z8DDDD8D8DDOD88a7II777$ +$OOOOOOO8O+.,.:++:++$ZOO7 .,. .,,,.... ..:~.:$Z8DD8DDD88DDD8O$?????I7 +OO8O8O8OZ$.,:?=..::?IZZ8Z .. ..,.,=,.. ..:I??7O8DD88D888D8OOI?II77II +OOOO8OZZ7=,~7?~,,,~~?$7OZ,. .,:~=:,.,:, ..:=+:~788DDD88Z888OZ$+I?III$7 +ZOZZO$$$ZZZZ$I:~:~,,7=77$~:.. .:$$==IOO7=,.,....,:,:=+$D8DD8888D887II?7777$$ +ZOOZZZ$$ZZZZ7+::=:::::II~.:.. ..=+?+IIII:...,,..,,,:==$DDD88888DD8$ZZ$$ZOOOO +7ZO$n7I$$$Z$7I~,,:,,.,=?:,,.. . ,:::~~I?:,......,,:,:=ZO888D88D8DO88O8888888 +77777$77$$7I?~,.. .,,,=+~.. ~+=:~+:+II+=~:,:..,,::~?ZODO888D88DD8DDDD8D88N +?77???I?II?~:,.....=.:?+~. ., .:?7I:::~::=+~~...,:~=?$OOOZ888OO8OO8888D8D8D +7II??I+++~:,.. .,==$7+,. .IZ7~~~~,~:++=:..::~++7ZZODDD8D888a8OOD88D88 +I???+~:,,,... .=:=~I$$+, .$7?+++++=+==+~,,:==+?78DDDDDDDO88OZOO88O888 +??+::,,... ... .78Z7IZO=...... ,77:..:::.,~?+~::=++~?$8DDDN8D8O88O88OOOOO88 +~=~:,,,.,.... .:OO$Z$7... ?$~ .......,:=~,:++==?$88D88D8ZOZOOZOOOO8DOO +:~=+:,,.. . ..,?$$+.. =...::,... ,~::~?===+OD88888OZOOOZO$ZOOZZZ8 +,~++++==.. ....~ZZO~. .:~=~,,...:=~~$7?+?$DD8D8OOZZOZOZOOOO8O8O8 +.:=+==++,. ...,.:+8DZ...I$7:.....,~=:,....+~?I7=?=$O8DDOOZ88OOO8OOOOOZZO88 +,:~===?d, .:,:?OD8O...ZOO$$?I,...=~:,,,,~===?+?+77Z8OZ$Z$OOZZOOO8OOOOO8O8 +,:~=~~=+.. ..=Z8888$.+OZ8OOZ8O7,.::=:~~=~:+????I$$?7$$ZZZOOOOOOOOO8O8OOOOO +,,:~~~+=.. ~ZO87I7Z,:7OOZOO?OD$~,:~:+?+==+?+=+77$?IOOZZZOOOOO8OOOOOOOOO888 +..,,~=+~.. . =$OO:..+?.IZOOZOZ$OZ?=~=~=++=+:?III7$7I=7DD8ZZOO8OO88OO8ZOZ$ZOOO +..... .... . ,~?7OZ7..:~I+ZZOO$OOOZZ$+7++?+??I777$$Z7I?~Z8D8OO$Z888O8888ZOZOZOO8 +,.....,~~==:=?$ZOZ7 .,~7IZZOZZZZOOOZO$I$Z$$Z$Z$ZZ7$I+==~DDDN8DDO$O88D8DDZO8OZ888 +=+=:~::=~~:+$ZZZ$+...I77$OZ$$IIZ$?$Z7=======~=++??==,::=D8D88D8D8ZOODOOOZZ8ZOaOO +*/ + +/* + modified version of: +*/ + +/* +Copyright (c) 2007 Gerhard Reitmayr +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef _FSM_H +#define _FSM_H + +/// list of ints as recursive type +template struct IntList { + enum { head = HEAD }; + typedef TAIL tail; +}; + +/// end of list marker type +struct IntListEnd {}; + +/// switch statement implementation through iterating over the type list and +/// comparing it to a given state +template +struct SwitchTemplate { + template + static typename CONTEXT::ReturnType work( int state, CONTEXT & context){ + return ((STATELIST::head == state) ? + context.template operator()() : + SwitchTemplate::work( state, context )); + } +}; + +/// end of list marker specialization +template <> +struct SwitchTemplate { + template + static typename CONTEXT::ReturnType work( int state, CONTEXT & context){ + return typename CONTEXT::ReturnType(); + } +}; + +/// The actual state machine implementation +/// sub types are functors passed to the Worker class to execute the +/// right template specialization of the underlying member function of the +/// context object. +template +struct StateMachine { + + CONTEXT & context; + int state; + + template struct CallEvent { + typedef RET ReturnType; + CONTEXT & context; + DATA & data; + + template RET operator()(){ + return context.template event(data); + } + }; + + template struct CallEventConst { + typedef RET ReturnType; + CONTEXT & context; + const DATA & data; + + template RET operator()(){ + return context.template event(data); + } + }; + + template struct CallEventNoData { + typedef RET ReturnType; + CONTEXT & context; + + template RET operator()(){ + return context.template event(); + } + }; + + struct CallEnter { + typedef void ReturnType; + CONTEXT & context; + + template ReturnType operator()(){ + return context.template enter(); + } + }; + + struct CallExit { + typedef void ReturnType; + CONTEXT & context; + + template ReturnType operator()(){ + return context.template exit(); + } + }; + + struct CallTick { + typedef void ReturnType; + CONTEXT & context; + + template ReturnType operator()(){ + return context.template tick(); + } + }; + + StateMachine( CONTEXT & c ) : context(c), state(STATELIST::head) { + CallEnter cee = {context}; + SwitchTemplate::work(state, cee); + } + + void changeState(const int newstate){ + CallExit cl = {context}; + SwitchTemplate::work(state, cl); + state = newstate; + CallEnter cee = {context}; + SwitchTemplate::work(state, cee); + } + + void tick() { + CallTick ct = {context}; + SwitchTemplate::work(state, ct); + } + + void work(){ + CallEventNoData ce = {context}; + int newstate = SwitchTemplate::work(state, ce); + if(newstate != state) + changeState(newstate); + } + + template + void work( const EVENT & ev ){ + CallEventConst ce = {context, ev}; + int newstate = SwitchTemplate::work(state, ce); + if(newstate != state) + changeState(newstate); + } + + template + void work( EVENT & ev ){ + CallEvent ce = {context, ev}; + int newstate = SwitchTemplate::work(state, ce); + if(newstate != state) + changeState(newstate); + } +}; + + +/// macros for simple state list definition +#define LIST1(a) IntList +#define LIST2(a,b) IntList +#define LIST3(a,b,c) IntList +#define LIST4(a,b,c,d) IntList +#define LIST5(a,b,c,d,e) IntList +#define LIST6(a,b,c,d,e,f) IntList +#define LIST7(a,b,c,d,e,f,g) IntList +#define LIST8(a,b,c,d,e,f,g,h) IntList + +#endif // _FSM_H diff --git a/code/libs/fsm/MachineStates.h b/code/libs/fsm/MachineStates.h new file mode 100755 index 0000000..9759134 --- /dev/null +++ b/code/libs/fsm/MachineStates.h @@ -0,0 +1,59 @@ +/* +777$7II7III??+,.......:+~=7$$Z$?$OOZOZ77?$$I+??I$ZOD8DD8DD888O$7$77$Z$$$ZZZZZOOO +$$$777$$77II??~.,..,.=?777$ZZ==$OZZ$I?=+?Z+==~=7Z7Z$OO8888DDDD8ZOZ$$$7Z$ZOZ$ZZOO +$$$7ZZ$Z$$77II=~:.,.:??+IZZZ+?O$ZI+?+:~+7I~~,:~?Z$88O88D88DDDDD8OZOZ$$$ZZZZZOOZZ +$$$$ZZ$$$$777I??:::,:7ZZ8OZ$$$7?=::,:~??~:,.....7$8$IZDDD8DDDNDDOZZO$$ZZZZZOZOOO +$$$77$7$7III$II+==+$$$OOO8OZ?=:......~. ........,?ZOI$88DOD8DDN8D888$7$ZZ$$Z$$ZO +$$7$$$77I77$ZZ$7,:Z$OZOOOOOI. ...,~:.....:~~+:===$Z$7OOD8DDD88O8D888O$7$Z$$$$OZ +$$77$$77I$$ZOZI,.7Z88O88O8?. .,:~~::,,.,,,+?$ZZZZZ8OZZ$8$8NDDDD88ODO8ZZ$$$OZZZOO +Z$Z$$$77$Z$$O$~.~?$ZOOOOOZ, ,?7$7II+:..,~+$III777I77I$O8OD8DD8D8DO8D88$77$$$ZZZZ +OOOOZc$ZOZOZZ?..+??IZO8NO$I?===+=~~~,...,~II???+~:+~:+ZO8D88DOODDDDD8D88OZ77$ZZZ +ZOZOOZZZZZOZ$II.~?I$ZZO8ZO~. ..~?+~~.. .,?$I$ZO888O?~$Z88D888O8888DONDD88Z7777$ +OZZ8O8OZZOZZZZ7I7I$ZZ7$OZ7:.=7ZDO7?~.. ,::+O7$O8O78O7IOD88N8D8DD88DD8OOOO7$$7Z +OOOZ88888OOOOZZI~?I$Z$OZI+?77,?$I?:.. .,:,,~,,~+++~+I$ZZ8DDD8DNDD8DDOOOZ7?$$7$ +OOOZO88OO8OZ7=:,.?7IZZOZI,~=~. ... . ..,,.. ...=:..~I$Z8DDDD8D8DDOD88a7II777$ +$OOOOOOO8O+.,.:++:++$ZOO7 .,. .,,,.... ..:~.:$Z8DD8DDD88DDD8O$?????I7 +OO8O8O8OZ$.,:?=..::?IZZ8Z .. ..,.,=,.. ..:I??7O8DD88D888D8OOI?II77II +OOOO8OZZ7=,~7?~,,,~~?$7OZ,. .,:~=:,.,:, ..:=+:~788DDD88Z888OZ$+I?III$7 +ZOZZO$$$ZZZZ$I:~:~,,7=77$~:.. .:$$==IOO7=,.,....,:,:=+$D8DD8888D887II?7777$$ +ZOOZZZ$$ZZZZ7+::=:::::II~.:.. ..=+?+IIII:...,,..,,,:==$DDD88888DD8$ZZ$$ZOOOO +7ZO$n7I$$$Z$7I~,,:,,.,=?:,,.. . ,:::~~I?:,......,,:,:=ZO888D88D8DO88O8888888 +77777$77$$7I?~,.. .,,,=+~.. ~+=:~+:+II+=~:,:..,,::~?ZODO888D88DD8DDDD8D88N +?77???I?II?~:,.....=.:?+~. ., .:?7I:::~::=+~~...,:~=?$OOOZ888OO8OO8888D8D8D +7II??I+++~:,.. .,==$7+,. .IZ7~~~~,~:++=:..::~++7ZZODDD8D888a8OOD88D88 +I???+~:,,,... .=:=~I$$+, .$7?+++++=+==+~,,:==+?78DDDDDDDO88OZOO88O888 +??+::,,... ... .78Z7IZO=...... ,77:..:::.,~?+~::=++~?$8DDDN8D8O88O88OOOOO88 +~=~:,,,.,.... .:OO$Z$7... ?$~ .......,:=~,:++==?$88D88D8ZOZOOZOOOO8DOO +:~=+:,,.. . ..,?$$+.. =...::,... ,~::~?===+OD88888OZOOOZO$ZOOZZZ8 +,~++++==.. ....~ZZO~. .:~=~,,...:=~~$7?+?$DD8D8OOZZOZOZOOOO8O8O8 +.:=+==++,. ...,.:+8DZ...I$7:.....,~=:,....+~?I7=?=$O8DDOOZ88OOO8OOOOOZZO88 +,:~===?d, .:,:?OD8O...ZOO$$?I,...=~:,,,,~===?+?+77Z8OZ$Z$OOZZOOO8OOOOO8O8 +,:~=~~=+.. ..=Z8888$.+OZ8OOZ8O7,.::=:~~=~:+????I$$?7$$ZZZOOOOOOOOO8O8OOOOO +,,:~~~+=.. ~ZO87I7Z,:7OOZOO?OD$~,:~:+?+==+?+=+77$?IOOZZZOOOOO8OOOOOOOOO888 +..,,~=+~.. . =$OO:..+?.IZOOZOZ$OZ?=~=~=++=+:?III7$7I=7DD8ZZOO8OO88OO8ZOZ$ZOOO +..... .... . ,~?7OZ7..:~I+ZZOO$OOOZZ$+7++?+??I777$$Z7I?~Z8D8OO$Z888O8888ZOZOZOO8 +,.....,~~==:=?$ZOZ7 .,~7IZZOZZZZOOOZO$I$Z$$Z$Z$ZZ7$I+==~DDDN8DDO$O88D8DDZO8OZ888 +=+=:~::=~~:+$ZZZ$+...I77$OZ$$IIZ$?$Z7=======~=++??==,::=D8D88D8D8ZOODOOOZZ8ZOaOO +*/ + +#ifndef _MS_H +#define _MS_H + +#include "FSM.h" + +#define machine_template template <> + +struct Event { int state; }; + +class MachineStates { +public: + // typedef LIST3(AAAA, BBBB, CCCC) StateList; + template int event(Event & ev) { Serial.println("undefined event -- event"); return ev.state; } + template int event() { Serial.println("undefined event"); return 0; } + template void enter() { Serial.println("undefined enter"); } + template void exit() { Serial.println("undefined leave"); }; + template void tick() { Serial.println("undefined tick");} +}; + + +#endif // _MS_H diff --git a/code/libs/mmmath/ExpMovAvg.h b/code/libs/mmmath/ExpMovAvg.h new file mode 100755 index 0000000..dce7f62 --- /dev/null +++ b/code/libs/mmmath/ExpMovAvg.h @@ -0,0 +1,16 @@ +#pragma once + +class ExpMovAvg { +public: + ExpMovAvg(int* in_i, int* out_o, float lambda = 0.5) : _in_ptr(in_i), _out_ptr(out_o), _lambda(lambda) {;} + + inline void calculate() { + _ema = _lambda * (float)(*_in_ptr) + (1 - _lambda) * _ema; + *_out_ptr = _ema; + } + + int *_in_ptr, *_out_ptr; + int _ema; + float _lambda; + +}; \ No newline at end of file diff --git a/code/libs/mmmath/MinMaxLerp.cpp b/code/libs/mmmath/MinMaxLerp.cpp new file mode 100755 index 0000000..3ca8cad --- /dev/null +++ b/code/libs/mmmath/MinMaxLerp.cpp @@ -0,0 +1,55 @@ +#include "MinMaxLerp.h" + +#include "Arduino.h" + + MinMaxLerp::MinMaxLerp(int* in_i, int base_min, int base_max, long update_interval_ms, int nbr_steps) : + _in_ptr(in_i), _base_min(base_min), _base_max(base_max), _cur_min(base_min), _cur_max(base_max), + _tick_min(0), _tick_max(0), _update_interval(update_interval_ms) +{ + _tick_time = (float)update_interval_ms / (float) nbr_steps; +} + + void MinMaxLerp::lerp_min_max() { + + static float m_min = 1; + static float m_max = 1; + static int t_min = 0; + static int t_max = 0; + + int _ema = *_in_ptr; + + if(_ema < _cur_min) { + _cur_min = _ema; + _min = _ema; + _tick_min = millis(); + t_min = millis(); + + // calculate new slope + int dy = _base_min - _min; + m_min = (float) dy / (float)_update_interval; // linear + } else { + long t = millis() - _tick_min; + if(t < _update_interval && (t_min - millis()) > _tick_time) { + t_min = millis(); + _cur_min = _min + m_min * t; + } + } + + if(_ema > _cur_max) { + _cur_max = _ema; + _max = _ema; + _tick_max = millis(); + t_max = millis(); + + // calculate new slope + int dy = _base_max - _max; + m_max = (float) dy / (float)_update_interval; // linear + } else { + long t = millis() - _tick_max; + if(t < _update_interval && (t_max - millis()) > _tick_time) { + t_max = millis(); + _cur_max = _max + m_max * t; + } + } + + } diff --git a/code/libs/mmmath/MinMaxLerp.h b/code/libs/mmmath/MinMaxLerp.h new file mode 100755 index 0000000..46dc5fa --- /dev/null +++ b/code/libs/mmmath/MinMaxLerp.h @@ -0,0 +1,26 @@ +#pragma once + +class MinMaxLerp { +public: + MinMaxLerp(int* in_i, int base_min, int base_max, long update_interval_ms = 1000, int nbr_steps = 100); + + void lerp_min_max(); + + inline int lmin() { return _cur_min; } + inline int lmax() { return _cur_max; } + +protected: + + int _base_min; + int _base_max; + int _min; + int _max; + int _cur_min; + int _cur_max; + + long _tick_min, _tick_max, _tick_time; + long _update_interval; + + int* _in_ptr; + +}; \ No newline at end of file diff --git a/code/libs/mmmath/SpringMassDamper.cpp b/code/libs/mmmath/SpringMassDamper.cpp new file mode 100755 index 0000000..6deee0f --- /dev/null +++ b/code/libs/mmmath/SpringMassDamper.cpp @@ -0,0 +1,23 @@ +#include "SpringMassDamper.h" + +#include "Arduino.h" + +SpringMassDamper::SpringMassDamper(float m, float k, float d, float* out) : + _m(m), _k(k), _d(d), _out(out) {} + +float SpringMassDamper::position(int x) { + + float dt = (millis() - _tick) / 1000.0f; + + F = _k * (x - X) - (_d * V); + V += (F / _m) * dt; + X += V * dt; + + _tick = millis(); + + if(_out != NULL) + *_out = X; + + return X; + +} \ No newline at end of file diff --git a/code/libs/mmmath/SpringMassDamper.h b/code/libs/mmmath/SpringMassDamper.h new file mode 100755 index 0000000..6ba9669 --- /dev/null +++ b/code/libs/mmmath/SpringMassDamper.h @@ -0,0 +1,16 @@ +#include "Arduino.h" + +#pragma once + +class SpringMassDamper { +public: + SpringMassDamper(float m, float k, float d, float* out = NULL); + + float position(int x); + + float X, V, F; + float _m, _k, _d; + long _tick; + float* _out; + +}; \ No newline at end of file diff --git a/code/lux_calib/lux_calib.ino b/code/lux_calib/lux_calib.ino new file mode 100755 index 0000000..3c59b22 --- /dev/null +++ b/code/lux_calib/lux_calib.ino @@ -0,0 +1,14 @@ +const int pin_lux_0 = A1; +const int ADC_AVG_RES = 4; + +void setup() { + analogReadAveraging(ADC_AVG_RES); + Serial.begin(115200); + pinMode(pin_lux_0, INPUT); +} + +void loop() { + int l = analogRead(pin_lux_0); + Serial.println(l); + delay(50); +} diff --git a/code/spring_oscillators/spring_oscillators.ino b/code/spring_oscillators/spring_oscillators.ino new file mode 100755 index 0000000..b3d8574 --- /dev/null +++ b/code/spring_oscillators/spring_oscillators.ino @@ -0,0 +1,60 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include + +#include +#include + +float x = 300, y, z = 0; +SpringMassDamper springX(50.0, 275.0, 1, &x); +SpringMassDamper springY(50.0, 275.0, 1, &y); +SpringMassDamper springZ(10.0, 275.0, 10, &z); + +const int basefreq = 75; + +long tick = 0; + +void setup() { +// FluteEx.init(); + Serial.begin(115200); + Serial.println("starts"); + + Music.init(); + + Music.setGain1(1.0); + Music.setGain2(1.0); + Music.setGain3(1.0); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + tick = millis(); + +} + + +void loop() { +// if(FluteEx.push_button()) x += 1; + + springX.position(x); + springY.position(springX.X); + springZ.position(springY.X); + + int f1 = basefreq + springX.X; + int f2 = basefreq + springY.X; + int f3 = basefreq + springZ.X; + + Music.setFrequency1(f1); + Music.setFrequency2(f2); + Music.setFrequency3(f3); + + if(millis() - tick > 200) { + Serial.println(f3); + tick = millis(); + } + + usbMIDI.read(); +} diff --git a/code/spring_oscillators_comp0/spring_oscillators_comp0.ino b/code/spring_oscillators_comp0/spring_oscillators_comp0.ino new file mode 100755 index 0000000..cf4e19f --- /dev/null +++ b/code/spring_oscillators_comp0/spring_oscillators_comp0.ino @@ -0,0 +1,76 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include + +#include +#include + +float x, y, z = 0; +SpringMassDamper springX(50.0, 275.0, 1, &x); +SpringMassDamper springY(50.0, 275.0, 1, &y); +SpringMassDamper springZ(10.0, 275.0, 10, &z); + +const int basefreq = 148; + +long tick = 0; + +void setup() { + FluteEx.init(); + Serial.begin(115200); + Serial.println("starts"); + + Music.init(); + + Music.setGain1(1.0); + Music.setGain2(1.0); + Music.setGain3(1.0); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + Music.getPreset(4); ///// saved -- check max patch + + tick = millis(); + +} + + +void loop() { + if(FluteEx.push_button()) x += 1; + + springX.position(x); + springY.position(springX.X); + springZ.position(springY.X); + + int f1 = basefreq + springX.X; + int f2 = basefreq + springY.X; + int f3 = basefreq + springZ.X; + + Music.setFrequency1(f1); + Music.setFrequency2(f2); + Music.setFrequency3(f3); + + if(millis() - tick > 200) { +// Serial.println(f3); + tick = millis(); + //Serial.println(cutmod); + } + + usbMIDI.read(); + +} + +int cutmod = 90; +float cutmod_indx = 0; +float cutmod_incr = 0.00001; + +void cutoff() { + /// cutmod -- [80, .., 100] + cutmod_indx += cutmod_incr; + cutmod = 90 + (cos(cutmod_indx) * 20); + Music.setCutoffModAmount((cutmod-64) * 1024); +} + diff --git a/code/spring_oscillators_comp1/spring_oscillators_comp1.ino b/code/spring_oscillators_comp1/spring_oscillators_comp1.ino new file mode 100755 index 0000000..c9119da --- /dev/null +++ b/code/spring_oscillators_comp1/spring_oscillators_comp1.ino @@ -0,0 +1,92 @@ +#define MIDI_CHANNEL 1 + +#include +#include +#include + +#include +#include + +float x, y, z = 0; +SpringMassDamper springX(50.0, 275.0, 1, &x); +SpringMassDamper springY(50.0, 275.0, 1, &y); +SpringMassDamper springZ(10.0, 275.0, 10, &z); + +const int basefreq = 100; + +long tick = 0; + +int fm2, fm3; + +void setup() { + FluteEx.init(); + Serial.begin(115200); + Serial.println("starts"); + + Music.init(); + + Music.setGain1(1.0); + Music.setGain2(1.0); + Music.setGain3(1.0); + + usbMIDI.setHandleNoteOff(OnNoteOff); + usbMIDI.setHandleNoteOn(OnNoteOn); + usbMIDI.setHandleControlChange(OnControlChange); + + tick = millis(); + +} + + +void loop() { + if(FluteEx.push_button()) x += 1; + + springX.position(x); + springY.position(springX.X); + springZ.position(springY.X); + + int f1 = basefreq + springX.X; + int f2 = basefreq + springY.X; + int f3 = basefreq + springZ.X; + + Music.setFrequency1(f1); + Music.setFrequency2(f2); + Music.setFrequency3(f3); + + if(millis() - tick > 200) { +// Serial.println(f3); + tick = millis(); + Serial.println(fm2); + } + +// modulation1(); +// +// modulation2(); + + modulation3(); + + usbMIDI.read(); +} + +void modulation1() { + static float indx = 0; + indx += 0.00003; + Music.setDetune1(sin(indx) * 0.05126); +} + + +float fm2_indx = 0; +float fm2_incr = 0.00003; +void modulation2() { + fm2_indx += fm2_incr; + fm2 = sin(fm2_indx) * 0.05946; + Music.setDetune2(fm2); +} + +float fm3_indx = 0; +float fm3_incr = 0.00003; +void modulation3() { + fm3_indx += fm3_incr; + Music.setDetune3(cos(fm3_indx) * 0.05946); +} + diff --git a/texts/Untitled.rtf b/texts/Untitled.rtf new file mode 100755 index 0000000..d817c9e --- /dev/null +++ b/texts/Untitled.rtf @@ -0,0 +1,54 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf200 +{\fonttbl\f0\froman\fcharset0 Times-Roman;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\paperw11900\paperh16840\margl1440\margr1440\vieww18540\viewh17780\viewkind0 +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs38 \cf0 \expnd0\expndtw0\kerning0 +Cryptic Meditations: the Resonance of Ether\ +\ +\'97\'97\'97\'97\ +Introduction\ +\'97\ +\ +On the 5th of June 1995, 23 years ago, a time-matter compound called the Bose\'96Einstein condensate was produced for the first time in history. With this condensate, quantum matter stood completely still for a split of a second, as if time stopped and rendered matter motionless once and for all. In this +\i Cryptic Meditation: the Resonance of Ether +\i0 we want to mark this mythical moment by inviting you to an outdoor s\'e9ance. The main topic we will address relates to the notion of matter-as-waveform, transcendence and their arcane relation to medium-isms. So today, moving from the Salon, we are going outside\'97to meditate.\ +\ +\ +\'97\'97\ + +\b Transcendentals: The noise of meaning +\b0 \ +\'97\ +\ +Our languages have meaning [German, English, Danish, French]. Yet, this meaning transcends something. There is something beneath language. Beneath language\'97beneath all languages\'97their is sound, or rather, music. Music lives beneath meaning and before it, it is its pre-condidition and its physical medium. It is before meaning, as a pre-condition as well as standing in front of it\'97or rather beneath it. Meaning presupposes music, and could not emerge without it. Music inhabits the sensible. In fact, it carries all senses. It vibrates in this very microphone at this very time, and reverberates in the innermost secrets of our conversations. The transcendental dimension of our communication is nested in music. Before any exchange of meaning, even false meaning, deceptive utterances, and lies, music knows in advance harmonies and discords. Thus, beneath language there is a layer of music. \ +\ +Language needs music \'97 though, music doesn\'92t need language. \ +\ +Yet this music covers something else. It covers the chaos that precedes it. Music needs noise. Noise is music\'92s essential condition. While music may know harmony and discords, noise doesn\'92t know such thing. Noise is all that vibrates, may it be harmonious, discordant or otherwise. Noise makes music undifferentiated. It no longer carries any specific meaning; but carries all, or none.\ +\ +Music needs noise \'97 though noise doesn\'92t need music. While music transcends noise, noise immanates form the depths of matter. \ +\ +The transcendental dimension of music is nested in noise\'97its physical condition. There is thus a double transcendence from this global passage from noise to meaning. In other words, there are two local passages that link noise to language: (1) the first passage is the one from music to language \'97 whose corridor is guarded by the mythological figures the goddess Muse and traversed by Orpheus \'97 and (2) the tumultuous passage from noise to music \'97 whose corridor is traversed by Ulysses and populated by the mythological figures of the unknowns Sirens. \ +\ +Like Orpheus\'92 Muse, noblewomen and noblemen excelled in the French art of conversation in the +\i Salon. +\i0 With tact, taste and acuity, they mastered the art of the pitch \'97 this passage from music to meaning \'97 from the soothing layer of harmony to the subtleties of meaning.\ +\ +On the other hand, before or below these +\i s\'e9ances in the Salon +\i0 , the Sirens always control the mandatory local passage between the noisy din and the beginning of music\'97waves crashing, filtering white noise into distant, hypnotic songs. Sirens are born in sharp toothed-chaos, yet their mesmerising chant from the din, and do also have perfect pitch, which may not know harmony, yet cuts through chaos\'97only to return back to it.\ +\ +Michel Serres once wrote: \'93Eloquence begins my standing on coarse sand, facing the chaotic ocean and breaking pebbles in your teeth, and ends with the sublime. We should define sublimation as the passage from solid to gaseous, a softening.\'94\ +\ +Noise is hard \'97 meaning is soft. \'97 The soft smoothes out the sharp edges of solids, while the hard flattens out meaning. \ +\ +Serres continues:\ +\ +\'93Take a black box. To its left, before it, there is the world. To its right, or after it, travelling along certain circuits, there is what we call information. The energy of things goes in: disturbances of the air, shocks and vibrations, heat, alcohol or ether salts, photons\'85 etc. Information comes out, and even meaning. We do not always know where this box is located, nor how it alters what flows through it, nor which Sirens, Muses or Bacchantes are at work inside; it remains closed to us. However, we can say with certainty that beyond this threshold, both of ignorance and perception, energies are exchanged, on their usual scale, at the levels of the world, the group and cellular biochemistry; and that on the other side of this same threshold, information appear: signals, figures, languages, meaning. Before the box, the hard; after it, the soft.\'94\ +\ +\'97 \ +} \ No newline at end of file