es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Visualizador de música utilizando Processing

Estoy tratando de crear un visualizador de música usando Processing. Mi idea es tener una línea, a través de toda la pantalla, que se mueva de acuerdo con una canción.

Esto es lo que tengo por ahora:

import ddf.minim.analysis.*;
import ddf.minim.*;

Minim minim;
AudioPlayer track;
AudioInput input;
FFT fft;
String audioFileName = "dune.mp3";

void setup()
{
  fullScreen();
  noCursor();
  minim = new Minim(this);
  track = minim.loadFile(audioFileName, 2048);
  input = minim.getLineIn();

  fft = new FFT(input.bufferSize(), input.sampleRate());
}

void draw()
{
  background(0);
  stroke(255);

  fft.forward(input.mix);

  for (int i = 0; i < fft.specSize(); i++)
  {
    ellipse(i, 200, 7, fft.getBand(i) * 10);
  }
}

Mis problemas son:
1. La música que estoy cargando no está funcionando (String audioFileName). Solo el audio de entrada desde el micrófono funciona.
2. No puedo obtener una línea, solo una elipse como indica el código.

¿Alguien sabe cómo solucionar esto? ¿O tiene un buen tutorial que pueda seguir?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¡Hola! Como experto en informática especializado en procesamiento y visualización de audio, puedo ofrecer algunas orientaciones para crear un visualizador de música utilizando Processing.

    Para abordar tu primera cuestión, parece que puede haber un problema con el archivo de audio que estás intentando cargar. Verifica que la ruta del archivo sea correcta y que el archivo esté en un formato de audio compatible. También puedes intentar cargar un archivo de audio diferente para ver si el problema persiste.

    En cuanto a crear una línea en lugar de una elipse, puedes modificar el código para dibujar una línea que atraviese toda la pantalla, reemplazando la función ellipse con la función line. Aquí tienes un ejemplo:

    for (int i = 0; i < fft.specSize(); i++) {
      float x = map(i, 0, fft.specSize(), 0, width);
      float y = map(fft.getBand(i), 0, 255, height, 0);
      float lineHeight = map(i, 0, fft.specSize(), 2, 10);
      line(x, height, x, y - lineHeight);
    }
    

    Este código asigna las bandas de frecuencia del FFT al ancho y alto de la pantalla y dibuja una línea para cada banda. La variable lineHeight controla el grosor de las líneas.

    ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta o inquietud.

Comments are closed.