(Srry for bad english) Well here´s the thing. My teacher wants this project about using 2D and 3D stuff. I had the idea to make a Music visualizer. But I have this problem. I did already my Main Menu code, and a couple of visualizers, but I can´t fuse them to work. Everytime I put them together my program crash. Do you have any ideas?
Here´s my code.
import processing.sound.*;
SoundFile sample; FFT fft; AudioDevice device; int scale = 5; int bands = 128; float r_width; float[] sum = new float[bands]; float smooth_factor = 0.2;
SoundFile menu;//Este conjunto de variables, manipulan los sonidos del menú. int rectX=100; // Posición de los botones con respecto a x (Como los botones estarán a la misma altura, lo asigno a constante) int largo = 50, alto=20; // Diametro de los cuadrados int opcion=1; //Parametro que controla la opción de los botones color rectColor; // Color de los botones. color rectHighlight;//Color de la iluminación de los botones al estar "En la mira"
void setup() { fullScreen(P3D); //Creo una pantalla sin "tamaño". Se adapta a la pantalla y resolucion de la pc en cuestión.
//Config de las barras //Si el BufferSize es mayor al tamaño del FFT, el FFT, fallará. //Así que, hacemos que el Buffersize sea igual a la banda device = new AudioDevice(this, 44000, bands); //Calculo el ancho de las rectas, dependiendo de cuantas bandas tenemos r_width = width/float(bands); //Cargamos y reproducimos el archivo de sonido y hacemos loop. //lo hacemos ANTES de llamar al FFT. menu = new SoundFile(this, "menu.mp3"); menu.loop(); //Cargamos el analizador de FFT fft = new FFT(this, bands); fft.input(menu);
//Config del Menu rectColor = color(0); //Elijo del color de los bloques cuando no están "En la mira" rectHighlight = color(#6CFF6D);//Elijo el color de la iluminación de los bloques, al estar "En la mira" textSize(15);//Establezco el tamaño de las letras que se encontrarán en el programa }
void draw() { Menu();//Mando llamar el método que contiene mi codigo de los botones Barras(); } void keyReleased() { if (keyCode == UP) {//Al soltar la tecla "ARRIBA", la variable "opcion" aumenta en 1. opcion++; } else if (keyCode ==DOWN) {//Al soltar la tecla "ABAJO", la variable "opcion" disminuye en 1. opcion--; } }
void Barras() { fill(#00FC1B); noStroke(); fft.analyze(); for (int i = 0; i < bands; i++) { // Smooth the FFT data by smoothing factor sum[i] += (fft.spectrum[i] - sum[i]) * smooth_factor; // Draw the rects with a scale factor rect(ir_width, height, r_width, -sum[i]height*scale); } }
void Menu() {
background(0);//Elijo el color del fondo de pantalla del reproductor, en este caso, es Azul Cielo
stroke(#03FF04);//Elijo el color de la linea
//Movimiento de los botones
if (opcion==3) {
fill(rectHighlight);//Esto cambia el color del botón, iluminandolo al estar seleccionado.
} else {
fill(rectColor);//Esto, cambia el color del botón, regresandolo a su valor original al estar des-seleccionado.
}
rect(rectX, 256, largo, alto);//Creo el rectangulo que representa el botón.
if (opcion==2) {
fill(rectHighlight);
} else {
fill(rectColor);
}
rect(rectX, 353, largo, alto);
if (opcion==1) {
fill(rectHighlight);
} else {
fill(rectColor);
}
rect(rectX, 450, largo, alto);
//Retorno de los botones(Para que los botones no salgan de los parametros del menú) if (opcion>3) { opcion=1; } if (opcion<1) { opcion=3; }
//Creación del texto de los botones. fill(#00FF01); //Declaro el texto dentro de los botones text("Caso 1", 100, 268); text("Caso 2", 100, 365); text("Caso 3", 100, 462); }
And this is what I want to put inside this Menu, at "Opcion1":
import processing.sound.*; // Se declaran las variables de sonido SoundFile sample; Amplitude rms; PImage img; // Declara un valor de escala float scale = 5.0; // Declara un valor de suavizado float smoothFactor = 0.25; // Suavizado float sum;
void setup() { fullScreen(P3D); //size(640, 360, P3D); img= loadImage("dig.jpg"); //Se carga el archivo y se hace un loop.(Se reinicia automaticamente) sample = new SoundFile(this, "digimon.mp3"); sample.loop(); // Se crea y se redirige el medidor de RMS rms = new Amplitude(this); rms.input(sample);
}
void draw() { Digimon(); }
void Digimon() {
float rmsScaled = sum * (height/2) * scale;
// rms.analyze() regresa un valo entre 0 y 1
// se escala a height/2 y luego se multiplica por el valor de escala
//Doy color al fondo de la pantalla
//background(rmsScaled,100,255);
background(0);
fill(255, 255, 255);
// Suavizo el valor tosco de rms, con el valor de suavizado sum
sum += (rms.analyze() - sum) * smoothFactor;
// Dibujo un cubo usando el valor rmsScaled para manipular su tamaño deacuerdo al sonido
translate(1366/2, 768/2);
//Esto va a rotar al cubo, tambien al ritmo de la musica.
rotateX(rmsScaled/250);
rotateY(rmsScaled/100);
lights();
beginShape();
box(rmsScaled);
texture(img);
endShape();
fill(0, 0, 0);
}
Please! Help! PD: Just use any song at the "data" folder.