diff --git a/booker/booker.ino b/booker/booker.ino index f970e8a..7b7e9cd 100644 --- a/booker/booker.ino +++ b/booker/booker.ino @@ -3,6 +3,7 @@ // // Released under the Apache 2.0 License +#include "config.h" /// BOOKER /// @@ -20,7 +21,7 @@ /// /// THE LESLIE. Booker comes with a Leslie, which is on by default: -#define LESLIE_ON // To turn this off, put a // before the #define, as in //#define +// #define LESLIE_ON // To turn this off, put a // before the #define, as in //#define // Leslie changes both the amplitude and pitch at a certain rate. // You can adjust them here @@ -336,15 +337,6 @@ int8_t drawBarAmplitudes[9] = }; -#define CV_POT_IN1 A7 // Note in, Pitch Scaling -#define CV_POT_IN2 A6 // Gain -#define CV_POT3 A4 // Organ Selection -#define CV_IN3 A2 // [Unused] -#define CV_AUDIO_IN A0 // Pitch Tune -#define CV_AUDIO_OUT 9 // Out -#define CV_GATE_OUT 10 // [Unused] - - #define MEDIAN_OF_THREE(a,b,c) (((a) <= (b)) ? (((b) <= (c)) ? (b) : (((a) < (c)) ? (c) : (a))) : (((a) <= (c)) ? (a) : (((b) < (c)) ? (c) : (b)))) uint16_t pitchCV; uint16_t tuneCV; @@ -411,7 +403,7 @@ void setup() drawbars[i][j] = drawBarAmplitudes[drawbars[i][j]]; } } - initializeFrequency(CV_POT_IN1, CV_AUDIO_IN); + initializeFrequency(CVIn, Knob1); } void loop() @@ -430,7 +422,7 @@ uint16_t gain; // our current gain uint16_t counter =0; void updateControl() { - float frequency = getFrequency(CV_POT_IN1, CV_AUDIO_IN); + float frequency = getFrequency(CVIn, Knob1); // leslie! #ifdef LESLIE_ON @@ -445,7 +437,7 @@ void updateControl() } // determine the gain - gain = 1 + (mozziAnalogRead(CV_POT_IN2) >> 2) // Gain (Volume) + gain = 1 + (mozziAnalogRead(Knob3) >> 2) // Gain (Volume) #ifdef LESLIE_ON #if LESLIE_VOLUME==0 #else @@ -458,7 +450,7 @@ void updateControl() if (++counter == COUNTER_MAX) { counter = 0; - organ = (organ + (mozziAnalogRead(CV_POT3) * NUM_DRAWBAR_SELECTIONS)) >> 10; // Organ Selection + organ = (organ + (mozziAnalogRead(Knob2) * NUM_DRAWBAR_SELECTIONS)) >> 10; // Organ Selection } } diff --git a/booker/config.h b/booker/config.h new file mode 100644 index 0000000..8f3e9ca --- /dev/null +++ b/booker/config.h @@ -0,0 +1,22 @@ +//Settings +const int pitchSubSteps = 32; //set how many steps are there between semitones. set to 1 to quantize to semitones +const int driveAmount = 450; +#define MOZZI_CONTROL_RATE 1024 + +//Hardware Definitions +#define Knob1 A6 //Pitch +#define Knob2 A4 //Atonality +#define Knob3 A2 +#define Knob4 A0 +#define KnobA A5 //Attack +#define KnobDR A3 //Decay and Release +#define KnobS A1 //Sustain +#define CVIn A7 //CV input and Pitch knob +#define GateIn 10 +#define EnvSwitch 11 +#define DroneSwitch 12 +#define LED 5 + +#define MOZZI_ANALOG_READ_RESOLUTION 10 + +//MIDI_CREATE_DEFAULT_INSTANCE(); \ No newline at end of file diff --git a/byte/byte.ino b/byte/byte.ino index d83d4e8..f5d5162 100644 --- a/byte/byte.ino +++ b/byte/byte.ino @@ -120,8 +120,6 @@ t*(((t>>9)&10)|((t>>11)&24)^((t>>10)&15&(t>>15))) - - #define CV_POT_IN1 A7 // Note In, Pitch Scaling // Filter Cutoff #define CV_POT_IN2 A6 // Filter Cutoff diff --git a/pluck/config.h b/pluck/config.h new file mode 100644 index 0000000..8f3e9ca --- /dev/null +++ b/pluck/config.h @@ -0,0 +1,22 @@ +//Settings +const int pitchSubSteps = 32; //set how many steps are there between semitones. set to 1 to quantize to semitones +const int driveAmount = 450; +#define MOZZI_CONTROL_RATE 1024 + +//Hardware Definitions +#define Knob1 A6 //Pitch +#define Knob2 A4 //Atonality +#define Knob3 A2 +#define Knob4 A0 +#define KnobA A5 //Attack +#define KnobDR A3 //Decay and Release +#define KnobS A1 //Sustain +#define CVIn A7 //CV input and Pitch knob +#define GateIn 10 +#define EnvSwitch 11 +#define DroneSwitch 12 +#define LED 5 + +#define MOZZI_ANALOG_READ_RESOLUTION 10 + +//MIDI_CREATE_DEFAULT_INSTANCE(); \ No newline at end of file diff --git a/pluck/pluck.ino b/pluck/pluck.ino index db620aa..589da26 100644 --- a/pluck/pluck.ino +++ b/pluck/pluck.ino @@ -1,3 +1,9 @@ +// PLUCK by Sean Luke adapted for Sitka Instruments WS-1.0 by Oleksiy Hrachov +// TODO: +// - rework randomSeed because there's no proper RANDOM_PIN available +// - add MIDI capabilities + + // Copyright 2023 Sean Luke // (sean@cs.gmu.edu) // @@ -87,8 +93,7 @@ /// /// POT 3 Gain - - +#include "config.h" // this is literally just a deterministic random number table, stolen from arp.ino PROGMEM const uint8_t NOISE[8192] = @@ -661,22 +666,13 @@ uint8_t currentWave = 0; uint8_t wavePos[NUM_WAVES]; uint8_t waveLength[NUM_WAVES]; - - -#define CV_POT_IN1 A7 // Note In, Pitch Scaling -#define CV_POT_IN2 A6 // Atonality -#define CV_POT3 A4 // Volume -#define CV_IN3 A2 -#define CV_AUDIO_IN A0 // Pitch Tune -#define CV_AUDIO_OUT 9 // Out -#define CV_GATE_OUT 10 // Trigger #define RANDOM_PIN A5 void setup() { // some reasonable initial defaults - pinMode(CV_GATE_OUT, INPUT_PULLUP); - initializeFrequency(CV_POT_IN1, CV_AUDIO_IN); + pinMode(GateIn, INPUT_PULLUP); + initializeFrequency(CVIn, Knob1); randomSeed(RANDOM_PIN); startMozzi(); @@ -894,24 +890,24 @@ uint8_t waitCount = 0; inline void readPots() { #ifdef ATONALITY_ON_POT_2 - atonality = ATONALITY_VAL(mozziAnalogRead(CV_POT_IN2) >> 2); - uint8_t s = mozziAnalogRead(CV_IN3) >> 7; + atonality = ATONALITY_VAL(mozziAnalogRead(Knob2) >> 2); + uint8_t s = mozziAnalogRead(Knob3) >> 7; #else - atonality = ATONALITY_VAL(mozziAnalogRead(CV_IN3) >> 2); - uint8_t s = mozziAnalogRead(CV_POT_IN2) >> 7; + atonality = ATONALITY_VAL(mozziAnalogRead(Knob3) >> 2); + uint8_t s = mozziAnalogRead(Knob2) >> 7; #endif scale = scales[s]; shift = shifts[s]; - gain = mozziAnalogRead(CV_POT3) >> 6; + gain = mozziAnalogRead(Knob4) >> 6; } void updateControl() { - uint16_t pitchPos = getPitchPos(CV_POT_IN1, CV_AUDIO_IN); // we have to call this each time + uint16_t pitchPos = getPitchPos(CVIn, Knob1); // we have to call this each time //readPots(); // Check for a trigger - uint8_t tr = !digitalRead(CV_GATE_OUT); + uint8_t tr = !digitalRead(GateIn); if (!triggered && tr) { waitCount = 4;