Paso 2: Un bosquejo simple
Se trata de un simple bosquejo demuestran comportamiento básico y comprobar que funcionan las cosas.
// SimpleMidi.pde import themidibus.*; //Import the library import javax.sound.midi.MidiMessage; MidiBus myBus; int currentColor = 0; int midiDevice = 3; void setup() { size(480, 320); MidiBus.list(); myBus = new MidiBus(this, midiDevice, 1); } void draw() { background(currentColor); } void midiMessage(MidiMessage message, long timestamp, String bus_name) { int note = (int)(message.getMessage()[1] & 0xFF) ; int vel = (int)(message.getMessage()[2] & 0xFF); println("Bus " + bus_name + ": Note "+ note + ", vel " + vel); if (vel > 0 ) { currentColor = vel*2; } }
Primero un repaso rápido: cuando ejecutas esto debería ver (en la ventana de mensaje de procesamiento IDE, o en una ventana de terminal, dependiendo de cómo se ejecuta) una lista de salidas y entradas MIDI disponibles. En mi caso yo he conectado un teclado MIDI de QuNexus que le sucede a dado como entrada número 3, por lo que es el valor que asigna a midiDevice. (No importa qué dispositivo de salida seleccionado para solo lo establece en 1.)
El dibujo aparece una ventana que va a cambiar tonos de gris basado en la velocidad de cualquier MIDI no lo envía.
Si no está utilizando el dispositivo que envía velocidad variable y los efectos visuales no es terriblemente interesantes. Seguirá viendo aunque los detalles de una variedad println.
Lo que está sucediendo en este sketch
Primero para arriba necesita importar la biblioteca de MidiBus (themidibus) pero también una librería de Java (javax.sound.midi.MidiMessage) para que su código puede hacer referencia a objetos de MidiMessage (como ocurre en este dibujo).
Dependiendo de qué desea hacer con los métodos disponibles a través de MidiBus necesita importar otros archivos Java MIDI, pero para este ejemplo solo que uno va a hacer.
En la configuración el bosquejo inicializa el MidiBus instancia myBus. Cuando se crea una nueva instancia de una clase de MidiBus debe pasar en una referencia al dibujo actual (también conocido como esto), el índice del aparato para escuchar y el índice del dispositivo para enviar a.
Si quieres ver qué dispositivos están disponibles puede llamar MidiBus.list() que imprime (a STDOUT) las listas de MIDI de entrada y salida de dispositivos. El número que aparece a la izquierda de un elemento es el número de índice que se utiliza al crear la instancia del MidiBus.
Si quería ser realmente inteligente usted podría envolver esta en una especie de GUI (tal vez usando ControlP5) para que los dispositivos puedan establecer o cambiados después de que el bosquejo se inicia. En la práctica, sin embargo, los dispositivos están probable que cambiar de una carrera a la siguiente y les código basta probablemente para la mayoría de los casos. Otra opción es que tu bosquejo cargar estos valores desde un archivo de configuración de modo que si necesita cambiarlas es un poco más fácil de hacer.
Una vez que se ha creado una instancia de MidiBus y una ventana de dibujo adecuado, es tiempo para esperar algún MIDI de entrada.
Una variable global, currentColor, está en lugar para mantener el valor de escala de grises para el fondo del dibujo. Sorteo todos hace es utilizar este valor en la ventana de color. Sin embargo, si va a enviar notas MIDI el dibujo de los cambios de la ventana. ¿Dónde está ocurriendo el cambio?
MidiBus proporciona unos métodos de devolución de llamada. Estos son métodos que se invocan automáticamente bajo varias condiciones. Este esquema utiliza midiMessage, que se llama automáticamente cada vez que llega un mensaje MIDI.
Hay dos versiones de midiMessage; el otro tiene sólo un argumento para el mensaje MIDI. Este esquema utiliza una versión que incluye el sello de tiempo y el MIDI bus nombre para mostrar algunos de los detalles de MIDI que usted puede conseguir.
Tú decides lo que ocurre en este método. Para este boceto el código agarra algo de información acerca del mensaje de MIDI imprime y luego mira a la velocidad de nota. Si la velocidad es mayor que cero entonces ese valor se duplicó y asignado a currentColor.
¿Por qué omitir valores de cero? La especificación MIDI define mensajes para "Nota sobre" y "note off". Pero algunos dispositivos no molesten con "note off", en lugar de otro envía una "Nota sobre" el mensaje con una velocidad de cero.
Cuando primero estaba escribiendo este esbozo simplemente agarré la velocidad y utilizarla y vio que la pantalla fue negro a cuanto saqué mis dedos de las teclas de QuNexus. Viendo el println salida vi lo que estaba sucediendo: cero velocidad para "note off".
Cómo manejar esto depende de usted; sólo ten en cuenta que puede suceder.
Así que esto es absolutamente el bosquejo simple pero demuestra una idea clave: el bosquejo espera señales externas, responde a esas señales mediante la actualización de algunas variables, y cada pasada de sorteo utiliza el estado actual de las variables para hacer algo.