Skip to content

Instantly share code, notes, and snippets.

@wh0am1-dev
Created January 23, 2015 14:41
Show Gist options
  • Save wh0am1-dev/3f1b099eb4db894bd715 to your computer and use it in GitHub Desktop.
Save wh0am1-dev/3f1b099eb4db894bd715 to your computer and use it in GitHub Desktop.
Todadiscos
import ddf.minim.*;
import ddf.minim.ugens.*;
final float A1 = 55.000f;
final float AS1 = 58.270f;
final float B1 = 61.735f;
final float C1 = 65.406f;
final float CS1 = 69.296f;
final float D1 = 73.416f;
final float DS1 = 77.782f;
final float E1 = 82.407f;
final float F1 = 87.307f;
final float FS1 = 92.499f;
final float G1 = 97.999f;
final float GS1 = 103.826f;
final float A2 = 110.000f;
final float AS2 = 116.541f;
final float B2 = 123.471f;
final float C2 = 130.813f;
final float CS2 = 138.591f;
final float D2 = 146.832f;
final float DS2 = 155.563f;
final float E2 = 164.814f;
final float F2 = 174.614f;
final float FS2 = 184.997f;
final float G2 = 195.998f;
final float GS2 = 207.652f;
final float A3 = 220.000f;
final float AS3 = 233.082f;
final float B3 = 246.942f;
final float C3 = 261.626f;
final float CS3 = 277.183f;
final float D3 = 293.665f;
final float DS3 = 311.127f;
final float E3 = 329.628f;
final float F3 = 349.228f;
final float FS3 = 369.994f;
final float G3 = 391.995f;
final float GS3 = 415.305f;
final float A4 = 440.000f;
final float AS4 = 466.164f;
final float B4 = 493.883f;
final float C4 = 523.251f;
final float CS4 = 554.365f;
final float D4 = 587.330f;
final float DS4 = 622.254f;
final float E4 = 659.255f;
final float F4 = 698.456f;
final float FS4 = 739.989f;
final float G4 = 783.991f;
final float GS4 = 830.609f;
final float A5 = 880.000f;
final float AS5 = 932.328f;
final float B5 = 987.767f;
final float C5 = 1046.502f;
final float CS5 = 1108.731f;
final float D5 = 1174.659f;
final float DS5 = 1244.508f;
final float E5 = 1318.510f;
final float F5 = 1396.913f;
final float FS5 = 1479.978f;
final float G5 = 1567.982f;
final float GS5 = 1661.219f;
final float A6 = 1760.000f;
final float AS6 = 1864.655f;
final float B6 = 1975.533f;
final float C6 = 2093.005f;
final float CS6 = 2217.461f;
final float D6 = 2349.318f;
final float DS6 = 2489.016f;
final float E6 = 2637.020f;
final float F6 = 2793.826f;
final float FS6 = 2959.955f;
final float G6 = 3135.963f;
final float GS6 = 3322.438f;
// ==========================
Minim minim;
AudioOutput out;
Oscil wave0;
Oscil wave1;
Oscil wave2;
float tempo = 250;
float startTime, actualTime, finishTime;
float frecuencia = 0.0f;
PImage art, original;
int x, y;
boolean justStarted;
boolean finished;
int song = 0;
String[] nombres = {
"Otra flor del Orinoco.png",
"Un abrazo del sol.png",
"Un bichito.png",
"Un cactus a gusto.png",
"Un don unico.png",
"Un dragon.png",
"Un elegante microorganismo.png",
"Un enves purpura.png",
"Un enves tostado.png",
"Un momento palpante.png",
"Un recuerdo de como te llamaron.png",
"Un recuerdo de tu apodo.png",
"Un reflejo transparente.png",
"Un regalo de sal.png",
"Un verde bombaiano.png",
"Una amiga.png",
"Una barbacoa.png",
"Una dura permanencia.png",
"Una escama de vil.png",
"Una escena rota.png",
"Una familia unida.png",
"Una flor del Orinoco.png",
"Una materia espejo.png",
"Una miniselva jurasica.png",
"Una personalidad usada.png",
"Una razon para llenar los pulmones.png",
"Una vista desde el hogar.png"
};
String[] originales = {
"otraflordelorinoco.png",
"unabrazodelsol.png",
"unbichito.png",
"uncactusagusto.png",
"undonunico.png",
"undragon.png",
"unelegantemicroorganismo.png",
"unenvespurpura.png",
"unenvestostado.png",
"unmomentopalpante.png",
"unrecuerdodecomotellamaron.png",
"unrecuerdodetuapodo.png",
"unreflejotransparente.png",
"unregalodesal.png",
"unverdebombaiano.png",
"unaamiga.png",
"unabarbacoa.png",
"unadurapermanencia.png",
"unaescamade-vil.png",
"unaescenarota.png",
"unafamiliaunida.png",
"unaflordelorinoco.png",
"unamateriaespejo.png",
"unaminiselvajurasica.png",
"unapersonalidadusada.png",
"unarazonparallenarlospulmones.png",
"unavistadesdeelhogar.png"
};
PFont fuente;
float pointerX, pointerY, pointerSize;
float menor = 0.0f, mayor = 255.0f;
boolean fullscreen = true;
int screenWidth = 640, screenHeight = 320;
int imageWidth = 640, imageHeight = 320;
// ==========================
void setup() {
if (fullscreen) {
size(displayWidth, displayHeight);
pointerSize = displayWidth / 24;
} else {
size(screenWidth, screenHeight);
pointerSize = 26.666f;
}
//frameRate(30);
ellipseMode(CENTER);
rectMode(CENTER);
noStroke();
if (fullscreen) {
fuente = createFont("raleway.ttf", 50, true);
} else {
fuente = createFont("raleway.ttf", 32, true);
}
textFont(fuente);
textAlign(LEFT, BOTTOM);
minim = new Minim(this);
out = minim.getLineOut();
wave0 = new Oscil(440, 0.5f, Waves.SINE);
wave1 = new Oscil(440, 0.5f, Waves.SINE);
wave2 = new Oscil(440, 0.5f, Waves.SINE);
wave0.patch(out);
wave1.patch(out);
wave2.patch(out);
newSong();
}
void draw() {
actualTime = millis();
drawArt();
drawPointer();
drawTitle();
newNote();
}
void drawArt() {
if (true && finished && actualTime - 1000 >= finishTime) {
smooth();
if (fullscreen) {
image(original, 0.0f, 0.0f, (float) displayWidth, (float) displayHeight);
} else {
image(original, 0.0f, 0.0f, (float) imageWidth, (float) imageHeight);
}
} else {
noSmooth();
if (fullscreen) {
image(art, 0.0f, 0.0f, (float) displayWidth, (float) displayHeight);
} else {
image(art, 0.0f, 0.0f, (float) imageWidth, (float) imageHeight);
}
}
}
void drawTitle() {
smooth();
fill(0, 0, 0, 50);
if (fullscreen) {
text(nombres[song].substring(0, nombres[song].length() - 4).toUpperCase(), 7, displayHeight - 3);
} else {
text(nombres[song].substring(0, nombres[song].length() - 4).toUpperCase(), 7, screenHeight - 3);
}
fill(#ffffff);
if (fullscreen) {
text(nombres[song].substring(0, nombres[song].length() - 4).toUpperCase(), 5, displayHeight - 5);
} else {
text(nombres[song].substring(0, nombres[song].length() - 4).toUpperCase(), 5, screenHeight - 5);
}
}
void drawPointer() {
float easing = 0.2f;
float targetX;
if (fullscreen) {
targetX = (displayWidth / 24) + (x * (displayWidth / 12));
} else {
targetX = 26.666f + (x * 53.333f);
}
float dx = targetX - pointerX;
if(abs(dx) > 1) {
pointerX += dx * easing;
}
float targetY;
if (fullscreen) {
targetY = (displayHeight / 12) + (y * (displayHeight / 6));
} else {
targetY = 26.666f + (y * 53.333f);
}
float dy = targetY - pointerY;
if(abs(dy) > 1) {
pointerY += dy * easing;
}
smooth();
fill(0, 0, 0, 50);
rect(pointerX, pointerY + 2, pointerSize, pointerSize);
// ellipse(pointerX, pointerY + 2, pointerSize, pointerSize);
fill(#ffffff);
rect(pointerX, pointerY, pointerSize, pointerSize);
// ellipse(pointerX, pointerY, pointerSize, pointerSize);
}
void keyReleased() {
if (key == CODED) {
if (keyCode == RIGHT) {
if (++song >= nombres.length) {
song = 0;
}
newSong();
} else if (keyCode == LEFT) {
if (--song < 0) {
song = nombres.length - 1;
}
newSong();
}
} else {
if (key == ' ') {
newSong();
}
}
}
void newNote() {
if (actualTime - startTime >= tempo && !finished) {
if (justStarted) {
justStarted = false;
wave0.setAmplitude(1.0f);
wave1.setAmplitude(1.0f);
wave2.setAmplitude(0.5f);
}
color pixel = art.get(x, y);
int r = (pixel >> 16) & 0xFF;
int g = (pixel >> 8) & 0xFF;
int b = pixel & 0xFF;
frecuencia = blues(b, A3);
wave0.setFrequency(frecuencia);
frecuencia = blues(r, A4);
wave1.setFrequency(frecuencia);
frecuencia = blues(g, A5);
wave2.setFrequency(frecuencia);
if (++x >= 12) {
x = 0;
if (++y >= 6) {
finished = true;
finishTime = millis();
wave0.setAmplitude(0);
wave1.setAmplitude(0);
wave2.setAmplitude(0);
}
}
startTime = millis();
}
}
void newSong() {
art = loadImage(nombres[song]);
original = loadImage(originales[song]);
wave0.setAmplitude(0.0f);
wave1.setAmplitude(0.0f);
wave2.setAmplitude(0.0f);
startTime = millis() + 1000;
justStarted = true;
finished = false;
x = 0;
y = 0;
if (fullscreen) {
pointerX = displayWidth / 24;
pointerY = displayHeight / 12;
} else {
pointerX = 26.666f;
pointerY = 26.666f;
}
}
float blues(float input, float base) {
if (input <= (menor + (1.0f / 13.0f * (mayor - menor)))) {
return base;
} else if (input <= (menor + (2.0f / 13.0f * (mayor - menor)))) {
return 6.0f / 5.0f * base;
} else if (input <= (menor + (3.0f / 13.0f * (mayor - menor)))) {
return 4.0f / 3.0f * base;
} else if (input <= (menor + (4.0f / 13.0f * (mayor - menor)))) {
return 45.0f / 32.0f * base;
} else if (input <= (menor + (5.0f / 13.0f * (mayor - menor)))) {
return 3.0f / 2.0f * base;
} else if (input <= (menor + (6.0f / 13.0f * (mayor - menor)))) {
return 9.0f / 5.0f * base;
} else if (input <= (menor + (7.0f / 13.0f * (mayor - menor)))) {
return 2.0f * base;
} else if (input <= (menor + (8.0f / 13.0f * (mayor - menor)))) {
return (6.0f / 5.0f) * 2.0f * base;
} else if (input <= (menor + (9.0f / 13.0f * (mayor - menor)))) {
return (4.0f / 3.0f) * 2.0f * base;
} else if (input <= (menor + (10.0f / 13.0f * (mayor - menor)))) {
return (45.0f / 32.0f) * 2.0f * base;
} else if (input <= (menor + (11.0f / 13.0f * (mayor - menor)))) {
return (3.0f / 2.0f) * 2.0f * base;
} else if (input <= (menor + (12.0f / 13.0f * (mayor - menor)))) {
return (9.0f / 5.0f) * 2.0f * base;
} else if (input <= mayor) {
return 2.0f * 2.0f * base;
}
return base;
}
boolean sketchFullScreen() {
return fullscreen;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment