Last active
November 5, 2019 20:32
-
-
Save wh0am1-dev/0ae4ebcdcbc3103ec2ca to your computer and use it in GitHub Desktop.
Theremin using a photoresist in Arduino !
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import ddf.minim.*; | |
import ddf.minim.signals.*; | |
import processing.serial.*; | |
import cc.arduino.*; | |
final float A1 = 55.000; | |
final float AS1 = 58.270; | |
final float B1 = 61.735; | |
final float C1 = 65.406; | |
final float CS1 = 69.296; | |
final float D1 = 73.416; | |
final float DS1 = 77.782; | |
final float E1 = 82.407; | |
final float F1 = 87.307; | |
final float FS1 = 92.499; | |
final float G1 = 97.999; | |
final float GS1 = 103.826; | |
final float A2 = 110.000; | |
final float AS2 = 116.541; | |
final float B2 = 123.471; | |
final float C2 = 130.813; | |
final float CS2 = 138.591; | |
final float D2 = 146.832; | |
final float DS2 = 155.563; | |
final float E2 = 164.814; | |
final float F2 = 174.614; | |
final float FS2 = 184.997; | |
final float G2 = 195.998; | |
final float GS2 = 207.652; | |
final float A3 = 220.000; | |
final float AS3 = 233.082; | |
final float B3 = 246.942; | |
final float C3 = 261.626; | |
final float CS3 = 277.183; | |
final float D3 = 293.665; | |
final float DS3 = 311.127; | |
final float E3 = 329.628; | |
final float F3 = 349.228; | |
final float FS3 = 369.994; | |
final float G3 = 391.995; | |
final float GS3 = 415.305; | |
final float A4 = 440.000; | |
final float AS4 = 466.164; | |
final float B4 = 493.883; | |
final float C4 = 523.251; | |
final float CS4 = 554.365; | |
final float D4 = 587.330; | |
final float DS4 = 622.254; | |
final float E4 = 659.255; | |
final float F4 = 698.456; | |
final float FS4 = 739.989; | |
final float G4 = 783.991; | |
final float GS4 = 830.609; | |
final float A5 = 880.000; | |
final float AS5 = 932.328; | |
final float B5 = 987.767; | |
final float C5 = 1046.502; | |
final float CS5 = 1108.731; | |
final float D5 = 1174.659; | |
final float DS5 = 1244.508; | |
final float E5 = 1318.510; | |
final float F5 = 1396.913; | |
final float FS5 = 1479.978; | |
final float G5 = 1567.982; | |
final float GS5 = 1661.219; | |
final float A6 = 1760.000; | |
final float AS6 = 1864.655; | |
final float B6 = 1975.533; | |
final float C6 = 2093.005; | |
final float CS6 = 2217.461; | |
final float D6 = 2349.318; | |
final float DS6 = 2489.016; | |
final float E6 = 2637.020; | |
final float F6 = 2793.826; | |
final float FS6 = 2959.955; | |
final float G6 = 3135.963; | |
final float GS6 = 3322.438; | |
Minim minim; | |
AudioOutput out; | |
Arduino arduino; | |
float luz; | |
float frecuencia = 0; | |
int mayorOut = 0, menorOut = 1000; | |
// ========================== | |
// | Opciones | | |
// ========================== | |
float menor = 50.0, mayor = 800.0; | |
// Cambiar por el tipo de sintetizador a usar | |
// PinkNoise nota; | |
// PulseWave nota; | |
SawWave nota; | |
// SineWave nota; | |
// SquareWave nota; | |
// TriangleWave nota; | |
// WhiteNoise nota; | |
// ========================== | |
void setup() { | |
println(Arduino.list()); | |
size(100, 100); | |
arduino = new Arduino(this, Arduino.list()[0], 57600); | |
minim = new Minim(this); | |
out = minim.getLineOut(); | |
// ========================== | |
// | Opciones | | |
// ========================== | |
// Cambiar por el tipo de sintetizador a usar | |
// nota = new PinkNoise(0.5); | |
// nota = new PulseWave(440, 0.5, out.sampleRate()); | |
nota = new SawWave(440, 0.5, out.sampleRate()); | |
// nota = new SineWave(440, 0.5, out.sampleRate()); | |
// nota = new SquareWave(440, 0.5, out.sampleRate()); | |
// nota = new TriangleWave(440, 0.5, out.sampleRate()); | |
// nota = new WhiteNoise(0.5); | |
// ========================== | |
nota.portamento(20); | |
out.addSignal(nota); | |
} | |
void draw() { | |
if (arduino.analogRead(0) > mayorOut) { | |
mayorOut = arduino.analogRead(0); | |
} | |
if (arduino.analogRead(0) < menorOut) { | |
menorOut = arduino.analogRead(0); | |
} | |
println("Mayor >>> " + mayorOut + "\nMenor >>> " + menorOut | |
+ "\nActual >>> " + arduino.analogRead(0) + "\n"); | |
luz = arduino.analogRead(0); | |
// frecuencia = map(luz, 800, 25, 55, 3520); | |
frecuencia = blues(luz, G3); | |
// frecuencia = egyptian(luz); | |
nota.setFreq(frecuencia); | |
} | |
float blues(float luz, float base) { | |
if (luz >= (menor + (6.0 / 7.0 * 750.0))) { | |
return base; | |
} else if (luz >= (menor + (5.0 / 7.0 * (mayor - menor)))) { | |
return 6.0 / 5.0 * base; | |
} else if (luz >= (menor + (4.0 / 7.0 * (mayor - menor)))) { | |
return 4.0 / 3.0 * base; | |
} else if (luz >= (menor + (3.0 / 7.0 * (mayor - menor)))) { | |
return 45.0 / 32.0 * base; | |
} else if (luz >= (menor + (2.0 / 7.0 * (mayor - menor)))) { | |
return 3.0 / 2.0 * base; | |
} else if (luz >= (menor + (1.0 / 7.0 * (mayor - menor)))) { | |
return 9.0 / 5.0 * base; | |
} else if (luz >= menor) { | |
return 2.0 * base; | |
} | |
return 2.0 * base; | |
} | |
float egyptianC3(float luz) { | |
if (luz >= (menor + (5.0 / 6.0 * (mayor - menor)))) { | |
return C3; | |
} else if (luz >= (menor + (4.0 / 6.0 * (mayor - menor)))) { | |
return D3; | |
} else if (luz >= (menor + (3.0 / 6.0 * (mayor - menor)))) { | |
return F3; | |
} else if (luz >= (menor + (2.0 / 6.0 * (mayor - menor)))) { | |
return G3; | |
} else if (luz >= (menor + (1.0 / 6.0 * (mayor - menor)))) { | |
return AS3; | |
} else if (luz >= menor) { | |
return C4; | |
} | |
return C4; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment