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.

Procesando – Construyendo Metrónomo Visual – Baterista anhelando código.

Soy nuevo en el uso de Processing y estoy intentando construir un metrónomo de un tipo específico (soy baterista) que me permita crear un generador de letras aleatorias (de A a X) que elija al azar un carácter de una cadena (¿o es un arreglo?) y luego continúe generando aleatoriamente esos caracteres, mostrando también cuál fue el carácter elegido anteriormente.

Tengo asignado un determinado patrón de batería a cada letra, así que en lugar de reproducir las letras de A a X, y luego de X a A, me gustaría llevar mi práctica más lejos y tocar ese alfabeto en particular de manera aleatoria. Obviamente, podría intentar escribirlo todo en papel o encontrar alguna otra forma más fácil de crear variaciones aleatorias de todo eso, pero ¿por qué debería complicarme la vida? 😀

El “metrónomo” comenzaría con solo un carácter, digamos “D”, y luego después de 2 segundos, por ejemplo, elegiría otro al azar, digamos “X”, y así sucesivamente. Por lo tanto, la primera ejecución mostraría D, luego DX, luego XL, etc. Ya he descubierto cómo generar un carácter de esa cadena, lo cual sé que es muy básico:

// Obtener un elemento aleatorio de un arreglo
String[] palabras = {“A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”,”I”,”J”,”L”,”M”,”N”,”O”,”P”,”Q”,”R”,”S”,”T”,”U”,”V”,”W”,”X”};
int indice = int(random(palabras.length));
println(palabras[indice]); // Imprime una de las 24 letras palabras

Por lo tanto, mi objetivo es poder cambiar la cantidad de tiempo que dura el “compás” en particular.

Y al final, quiero asignar un sonido a cada cambio de nueva variación, para que suene como un metrónomo real.

Agradeceré cualquier ayuda, personas de P{rocessing}.

Saludos,
SHB

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Estimado SHB,

    Es genial saber que estás experimentando con Processing para crear un metrónomo que se ajuste a tus necesidades específicas como baterista. Como experto en IT especializado en audio, aleatorización, tiempo y procesamiento, estaré encantado de guiarte a través de los pasos necesarios para alcanzar tus objetivos.

    Para comenzar, el primer paso para crear un metrónomo que genere letras aleatorias entre A y X sería definir un arreglo de letras de donde podamos elegir:

    String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X"};
    

    Este arreglo contiene todas las letras desde la A hasta la X de las que podemos elegir.

    A continuación, necesitamos definir un intervalo de tiempo entre cada cambio de letra. Has mencionado que te gustaría poder cambiar la cantidad de tiempo entre cada cambio de letra. Vamos a definir una variable llamada intervalLength que determine la cantidad de milisegundos entre cada beat:

    int intervalLength = 2000; // Intervalo de dos segundos entre beats
    

    Luego, vamos a definir una variable para guardar la cadena actualmente mostrada y una variable para guardar el índice de la última letra elegida:

    String currentString = "D";
    int lastIndex = -1;
    

    En este ejemplo, estamos comenzando con la letra “D” y lastIndex comienza en -1 ya que aún no hemos elegido ninguna letra.

    Ahora, vamos a configurar un loop que generará una nueva letra cada intervalLength milisegundos. Para lograr esto, podemos usar la función millis() para verificar si ha pasado el período de tiempo requerido y luego generar una nueva letra:

    void draw() {
      if (millis() > intervalLength + lastIndex) {
        int newIndex = int(random(alphabet.length));
        currentString += alphabet[newIndex];
        lastIndex = millis();
        println(currentString);
      }
    }
    

    En este loop, estamos verificando si el tiempo actual es mayor que intervalLength más el tiempo del último beat. Si lo es, elegimos un nuevo índice de letra de nuestro arreglo alphabet, lo agregamos a currentString, establecemos lastIndex como el tiempo actual e imprimimos la nueva cadena en la consola.

    Finalmente, para asignar un sonido a cada cambio de variación, podemos usar la librería de Sound de Processing para reproducir un sonido cada vez que se genera una nueva letra.

    import processing.sound.*;
    
    SoundFile sound;
    
    void setup() {
      ...
      sound = new SoundFile(this, "ruta/al/sonido.wav");
    }
    
    void draw() {
      ...
      if (millis() > intervalLength + lastIndex) {
        int newIndex = int(random(alphabet.length));
        currentString += alphabet[newIndex];
        lastIndex = millis();
        println(currentString);
        sound.play();
      }
    }
    

    En este caso, estamos importando la librería de Sound de Processing, definiendo una variable sound que contiene nuestro archivo de sonido y cargando el archivo de sonido en la función setup(). Luego, en la función draw(), reproducimos el sonido cada vez que se genera una nueva letra.

    Espero que esto te ayude con tu proyecto de metrónomo. Avísame si tienes alguna pregunta o si necesitas ayuda adicional.

    Saludos,
    [Tu nombre]

Comments are closed.