Secuencias de comandos de procesamiento con MIDI (5 / 12 paso)

Paso 5: Controladores de mensaje personalizados

Usando midiMessage es aceptable para casos sencillos, tales como tener el bosquejo hacer algo no importa de qué nota se envía, o tal vez seleccionar comportamiento basado en dos o tres notas, pero si encontrar el código para llenar largos if/then o switch/case declaraciones usted debe tener cuidado. Este tipo de estructuras puede ser difícil de mantener.

Qué sería más limpio que un creciente conjunto de condicionales sería una manera de invocar un método basado en el valor de la nota. Aquí está una manera de hacerlo:

 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); invokeNoteHandler(note, vel); } void invokeNoteHandler(int note, int velocity) { try { Class[] cls = new Class[1]; cls[0] = int.class; Method handler = this.getClass().getMethod( "onNote" + note, cls ); handler.invoke(this, velocity); } catch (Exception e) { e.printStackTrace(); } } 

Cuando llega un mensaje MIDI, midiMessage saca el valor de la nota y la velocidad. Pasa los valores a invokeNoteHandler. Es donde sucede la diversión.

Reflexión de Java permite que código encontrar métodos por nombre (usando getMethod) y llamarlos. Queremos pasar un valor int a algún método de la forma onNote < SomeNoteValue >; para encontrar un método que necesita el nombre y un conjunto de clases que describe qué argumentos eso método de la toma.

Una vez se encontró una referencia a un método es invocado usando (¡ sorpresa!) invoca.

Todo esto sucede dentro de un bloque try/catch. Si algo sale mal (por ejemplo, el código intenta encontrar y llamar a un método que no existe) la excepción es más o menos ignorado. La idea aquí es que tenemos métodos para un conjunto de notas, y no nos importa notas que existe ningún método de controlador correspondiente.

La última parte de esta debe definir uno o más métodos para hacer algo de notas específicas. Por ejemplo:

 void onNote48(int vel) { if (vel > 0 ) { currentColor = vel*2; } } void onNote50(int vel) { if (vel > 0 ) { currentColor = vel*2; } } 

No terriblemente imaginativo, pero lo que hace esto es límite color de la pantalla cambia a sólo dos notas.

Tal vez aquí hay un ejemplo mejor:

En primer lugar, cambiar el tipo de currentColor:

 color currentColor = new color(0,0,0); 

Ahora tienen los controladores Nota establecer diferentes colores:

 void onNote48(int vel) { if (vel > 0 ) { currentColor = color(255, vel*2, vel*2); } } void onNote50(int vel) { if (vel > 0 ) { currentColor = color(vel*2, 255, vel*2 ); } } void onNote52(int vel) { if (vel > 0 ) { currentColor = color(vel*2, vel*2, 255); } } 

El punto clave es que el comportamiento de cualquier nota dada se encapsula en su propio método en vez de estar hacinados en un método cada vez más de todo.

Podemos hacer cosas más limpio aún poniendo todos los métodos de manejo de la nota en un archivo separado (e.g. noteHandlers.pde) así que usted sabe exactamente dónde buscar para agregar o cambiar cualquier cosa.

Sus propios controladores de mensaje pueden ser cualquier cosa que desee, y puede pasar en otros parámetros, tal vez pasar en el mensaje MIDI original sí mismo. Sin embargo se establece lo necesita configurar su versión de invokeNoteHandler que localiza métodos con la firma del parámetro correcto.

Por ejemplo, si desea utilizar métodos de control que la velocidad de nota y el nombre de bus, debe cambiar la matriz de clase usada con getMethod para indicar los tipos de estos dos parámetros:

 void invokeNoteHandler(int note, int velocity, String busName) { try { // An array of size 2 since we are looking for a method that // takes two arguments Class[] cls = new Class[2]; cls[0] = int.class; cls[1] = String.class; Method handler = this.getClass().getMethod( "onNote" + note, cls ); // Now call the located method with the two arguments handler.invoke(this, velocity, busName); } catch (Exception e) { e.printStackTrace(); } } 

Artículos Relacionados

Fotocélula de reaccionar a la luz como un ojo. un proyecto de introducción para el uso de procesamiento con Arduino

Fotocélula de reaccionar a la luz como un ojo. un proyecto de introducción para el uso de procesamiento con Arduino

En este proyecto se puede ver un ejemplo sencillo del uso de procesamiento para hacer una representación gráfica de los datos que un arduino recibe como entrada de un sensor. En este caso una célula fotoeléctrica.Después de obtener una imagen de ojo
¿No coser bufanda de secuencia de comandos

¿No coser bufanda de secuencia de comandos

coser es genial y divertido y maravilloso y todo eso, pero a veces, no sólo desea preparar algo rápido y fácil, sin preocuparse si vas a coser sus costuras al revés y revés? Porque todos tenemos esos días. Diseñar algo bonito siempre no requiere cose
Pasos de instalación de servidor para ejecutar PHP medios compartir secuencias de comandos en 2015

Pasos de instalación de servidor para ejecutar PHP medios compartir secuencias de comandos en 2015

¿Gustaría que tener un Youtube como sitio de los medios de comunicación? Hay un puñado de scripts PHP que hacer precisamente eso. Algunos o algunas o libre. Sin embargo estos scripts todos dependen más vieja versión del software y Linux para funciona
Cómo utilizar autohotkey y escribir secuencias de comandos básicos para él.

Cómo utilizar autohotkey y escribir secuencias de comandos básicos para él.

En este instructable, usted aprenderá cómo utilizar autohotkey y cómo crear secuencias de comandos básicos.Paso 1: Descargar e instalar Autohotkey En primer lugar, debe ir aquí y descargar Autohotkey. Instalación y puesta en marcha.Paso 2: Vamos a ap
Ilustrador de secuencias de comandos para un láser de corte gira cartera

Ilustrador de secuencias de comandos para un láser de corte gira cartera

Adobe Illustrator no es sólo una interfaz gráfica. también puede aceptar scripts en un lenguaje llamado JSX, que es muy similar a Javascript. Para este proyecto, tomamos ventaja de las capacidades de secuencias de comandos de Javascript para hacer un
Cómo agregar secuencias de comandos a RSBot

Cómo agregar secuencias de comandos a RSBot

Hola,hoy mostrará usted cómo agregar un script a RSBot.Esto es muy simple y no tendrá ese tiempo.Paso 1:1) se reúnen artículos necesarios Se necesita lo siguiente:1) Java Development Kit - DL -
Secuencias de comandos de visual basic trucos (2)

Secuencias de comandos de visual basic trucos (2)

visual basic scripting de secuencia de comandos que tiene el potencial para hacer cualquier función física que cuenta con una computadora. voy mostrando dos trucos de vbsVBS por cierto, son guardados como w/e.vbs (en el sentido de w/e decirlo que qui
Edison de Intel ejecutar secuencia de comandos Python

Edison de Intel ejecutar secuencia de comandos Python

Bienvenida,En este instructable te enseñaré cómo conectarse a la placa Intel Edison por SSH y cómo crear y ejecutar un script de Python básico. Así que vamos a empezar!Paso 1: Componentes necesariosHardware:Necesita un equipo que ejecuta Windows 7 o
Cómo editar secuencias de comandos en la parte de la nube

Cómo editar secuencias de comandos en la parte de la nube

este instructable cubrirá los conceptos básicos de cómo hacer que un objeto e Inserte un guión existente.Paso 1: Construcción básica Parte de nube scripts están escritos en Javascript y actualmente se colocan en cualquier objeto creado mediante las h
Juego de guerra de secuencia de comandos por lotes

Juego de guerra de secuencia de comandos por lotes

Este es un juego de guerra de secuencia de comandos por lotes.Usted juega como un soldado en misiones¡ ACTUALIZACIÓN!Ahora se trata de la versión 1.2.Actualizaciones:. Añadido nivel 2.. Capacidad agregada a nombre de uno mismo.Se actualizarlo una vez
Procesamiento con un GPS GeoExplorer3 post

Procesamiento con un GPS GeoExplorer3 post

recoger características con cualquier sistema de posicionamiento Global (GPS) puede ser beneficiosa e interesante. Mayoría de la gente encuentre unidades GPS después de todo los recogida de datos y el procesamiento es completa. Estamos aquí para most
Control de dispositivos por comando de voz con arduino y android

Control de dispositivos por comando de voz con arduino y android

Este ible servirá preguntas como, cómo a los dispositivos de control por comandos de voz, reconocimiento de voz disponible en android.Todos los dispositivos androides viene con el reconocimiento de voz incorporado. Esto puede ser usado para convertir
¿Cómo? Bluetooth HC-05 módulo de comandos AT. Con botón y sin botón.

¿Cómo? Bluetooth HC-05 módulo de comandos AT. Con botón y sin botón.

¡ Hola mundo! Hoy hice un Tutorial sobre el módulo de Bluetooth HC-05 de múltiples fuentes.Porque hay diferentes tipos de módulos de HC-05. Y para algunos les funciona y para algunos no.Así que intento que mi mejor hacer uno que funcione para todos.P
Cómo controlar un juego sencillo de procesamiento con Arduino

Cómo controlar un juego sencillo de procesamiento con Arduino

Hola a todosEn este Instructable, veremos cómo crear un "enlace" entre un esquema de procesamiento y una tarjeta de Arduino. En este ejemplo, se utilizará un módulo de ultrasonidos para el control de un avión en un simple juego. De nuevo, este t