Skip to content

Instantly share code, notes, and snippets.

@wh0am1-dev
Last active November 5, 2019 20:32
Show Gist options
  • Save wh0am1-dev/0ae4ebcdcbc3103ec2ca to your computer and use it in GitHub Desktop.
Save wh0am1-dev/0ae4ebcdcbc3103ec2ca to your computer and use it in GitHub Desktop.
Theremin using a photoresist in Arduino !
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