¿How can I solve this Menu to work?

edited November 30 in Library Questions

(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.

Answers

  • Please format your code. Edit your post (gear on top right side of any of your posts), select your code and hit ctrl+o. Leave an empty line above and below your block of code. Details here: https://forum.processing.org/two/discussion/15473/readme-how-to-format-code-and-text

    Kf

  • Work with a state system:

    A int variable state

    In draw when it’s 0 display menue, when it’s 1 display visual one,etc.

  • Try it first and then post your attempt as entire code and tell us where you are stuck

    Then we can help

    You can have only one setup and onw draw; but different additional functions for the Visualizations

    Use state as explained

  • Answer ✓

    example for state, so you can see the idea

    //
    // states
    final int stateGame  = 0;  // consts
    final int statePause = 1;
    int state = statePause;    // current state
    
    // ---------------------------------------------------------------
    
    void setup() {
      // init (runs only once)
      size(800, 600);
    } // func 
    
    void draw() {
    
      // draw() runs on and on 
    
      switch (state) {
    
      case stateGame: 
        // Game
        handleStateGame();
        break; 
    
      case statePause:
        // Pause
        handleStatePause(); 
        break;
    
      default:
        // error
        println("Error number 939; unknown state : " 
          + state 
          + ".");
        exit();
        break;
      } // switch
      //
    } // func 
    
    // ------------------------------------------------------------
    
    // functions for states - called from draw() 
    
    void handleStateGame() {
      // Game
      background(11);
      fill(244, 3, 3); // red 
      text ("Game....", 210, 313);
      signHome(10, 100);
    } // func 
    
    void handleStatePause() {
      // Pause
      background(255);
      fill(244, 3, 3); // red 
      text ("Pause.... ", 210, 313);
      text ("Hit p to start ", 210, 385);
      signHome(width-70, 100);
    } // func 
    
    // ----------------------------------------
    // keyboard input 
    
    void keyPressed() {
    
      switch (state) {
    
      case stateGame: 
        // Game
        keyPressedForStateGame();
        break; 
    
      case statePause:
        // Pause
        keyPressedForStatePause(); 
        break;
    
      default:
        // error
        println("Error number 1039; unknown state : "
          + state 
          + ".");
        exit();
        break;
      } // switch
    } // func 
    
    // ----
    
    void keyPressedForStateGame() { 
      if (key == CODED) 
      {
        if (keyCode == UP) {
          //
        } else if (keyCode == DOWN) {
          //
        }
    
        if (keyCode == LEFT) {
          //
        } else if (keyCode == RIGHT) {
          //
        } else {
          // do nothing
        } // else
      } //  if (key == CODED) {
      else 
      {
        // not CODED ---------------------- 
        if (key == 'p') {
          // Pause 
          state = statePause;
        } else {
          // do nothing
        } // else
      } // else not CODED
    } // func
    
    void keyPressedForStatePause() { 
      if (key == CODED) 
      {
        if (keyCode == UP) {
          //
        } else if (keyCode == DOWN) {
          // none
        }
    
        if (keyCode == LEFT) {
          //
        } else if (keyCode == RIGHT) {
          //
        } else {
          // do nothing
        } // else
      } //  if (key == CODED) {
      else 
      {
        // not CODED ---------------------- 
        if (key == 'p') {
          //
          state = stateGame;
        } else {
          // do nothing
        } // else
      } // else not CODED
    } // func
    
    // -------------------------------------------------------
    // Mouse input
    
    void mousePressed() {
      //
      switch (state) {
    
      case stateGame: 
        // Game
        mousePressedForStateGame();
        break; 
    
      case statePause:
        // Pause
        mousePressedForStatePause(); 
        break;
    
      default:
        // error
        println("Error number 1139; unknown state : " + state+".");
        exit();
        break;
      } // switch
    } // func 
    
    void mousePressedForStateGame() {
      if (dist(mouseX, mouseY, 10, 100) < 30 ) { 
        println ("Hit Game.");
      }
    } // func 
    
    void mousePressedForStatePause() {
      if (dist(mouseX, mouseY, width-70, 100) < 30 ) { 
        println ("Hit Pause.");
      }
    } // func 
    
    // -------------------------------------------------------
    // Misc
    
    void signHome(int x, int y) {
      // gives a sign for a house / home sign
    
      final int width1=6;
      final int height1=8;
    
      fill( 2, 255, 0 );
      strokeWeight(1);
      stroke ( 2, 255, 0 );
      noFill();
      x+=21;
      y+=14;
      triangle ( x-width1, y, 
        x, y-height1, 
        x+width1, y );
      rect(x-width1/2, y, width1, width1);
      rect(x-width1/4+1, y+height1/4+1, width1/4, width1/3);
      strokeWeight(1);
    }
    
    // =================================================================
    
  • Thank you :D

Sign In or Register to comment.