Paso 9: Otro bus...
Usted puede mirar el código fuente final para ver lo que se me ocurrió para que los controladores de nota, ejecutarlo con el archivo de ejemplo Renoise o vea el video a verlo en acción. Hay una gran probabilidad de que el código no sea exactamente lo que he mostrado aquí. Como he descrito el bosquejo que he reconsiderar cómo deben trabajar las cosas. Esta es la naturaleza de la codificación exploratoria.
Mientras probando esto y lo que se dio cuenta de que puede ser difícil de planificar previamente cada cambio y cambiar y salto puede ver en el bosquejo. Modificar código o editar las pistas MIDI de Renoise y ver los resultados dejaba de pensar, bueno, un cambio de tinte repentino sería bueno o sería el ritmo adecuado para lanzar imágenes de tamaño completo dual para la mitad de una barra. En otras palabras, hubo pocos efectos seleccionados que quería pero sólo en momentos clave.
Esta edición en las pistas de gatillo de Renoise sería complicado. Así que mucho mejor activar algunas cosas en tiempo real usando otro controlador como los juegos de la canción.
Había comencé experimentando con mi teclado QuNexus. Este dispositivo le permite cambiar la octava, por lo que podría han trabajado con una gama de notas no ya asignada. Pero yo quería utilizar un controlador que puede ser más intuitivo, algo que no sea un teclado estándar.
Recogí un Novation Launchpad en algún momento el año pasado. Es una red de interruptores de botón táctil. No hay ningún control de velocidad, sólo en/apagado, gran para la activación de muestras y loops y tal. Envía notas MIDI dentro de un rango preestablecido. Ahora, asegúrese de que haya una manera de cambiar qué notas se asignan a cada botón, pero puesto que el nombre de bus se pasa a los controladores de nota MIDI en el bosquejo con seguridad puedo reutilizar las notas existentes.
Otro enfoque podría ser establecer el Launchpad con un canal específico. Usted puede decidir si seleccionar comportamiento en otro canal o ramificación basada en bus nombre mejor le cabe un modelo mental de lo que está sucediendo.
Hay varios lugares, que el código puede cambiar comportamiento basado en el nombre de bus. Uno, por supuesto, está dentro de cualquiera de los métodos de manejo de la nota. Otra sería en invokeNoteHandler. Aunque he estado pasando el nombre de bus a los controladores de nota mis ideas de cómo usar el Launchpad no ganas de un buen ajuste para la nota existente de manejo de código. Por ejemplo, si envío C48 desde el Launchpad me podría no ser mirando para hacer otra variación en el patrón de relleno de cuadrícula de 4 x 4, pero algo diferente. Agregar una prueba de onNote48 para este dispositivo en particular sentía torpe. ¿Suponga que define un conjunto diferente de manipuladoras de la nota, específicos para este dispositivo?
Esto me ahorraría la molestia de tener que añadir que esta verificación de nombre de dispositivo para cada método onNoteNN solo en el off-oportunidad allí es una superposición de valor de nota. La desventaja es tener un nombre de dispositivo codificado en mi bosquejo.
... y otra opción de configuración
Mientras que quería enviar determinados mensajes MIDI para seleccionar controladores basados en nombre de autobús no quería codificar el nombre de bus. En casa tengo una opción de controladores, pero mientras escribo esta frase llego a ser en HeatSync Labs. No traigo el Launchpad; la QuNexus encajar mucho mejor en mi bolso del ordenador portátil.
En vez de confiar en el nombre de un controlador específico en el código he añadido otra opción de configuración para permitir la asignación de nombres de dispositivo a algún otro texto.
La entrada de config.jsi tiene este aspecto:
device_mappings: {"Launchpad": "grid", "QuNexus": "grid" }
En bosquejo el código que establece dispositivos ahora también mira a ver si hay una asignación de dispositivo para un dispositivo encontrado, y si es así entonces usa ese nombre de asignación como el nombre de autobús más bien que y dado el nombre de dispositivo.
Esto requirió otro cambio a Configgy.pde. Lo nuevo es que puede almacenar un nombre :{} ajuste y volver un HashMap de nombre/valor pares de cadena.
Por lo tanto el bosquejo agarra estas asignaciones de nombre de dispositivo...
HashMap mappings = config.getHashMap("device_mappings");
... y luego...
if (mappings.containsKey( deviceNames[x] ) ) { println("+ + + + Add device using mapping " + mappings.get( deviceNames[x]) ); devices.add( new MidiBus(this, available_inputs[i], 1, (String) mappings.get( deviceNames[x]) ) ); } else { devices.add( new MidiBus(this, available_inputs[i], 1, deviceNames[x]) ); }
Ahora el mensaje MIDI enviar código puede buscar mensajes de un autobús llamado rejilla; el dispositivo puede ser cualquier número de dispositivos dependiendo de lo que has conectado y cómo has mapeado los nombres.
Ahora enviar mensajes MIDI puede llamar manipuladores especializados:
void invokeNoteHandler(int note, int velocity, int channel, String bus_name) { try { Class[] cls = new Class[3]; cls[0] = int.class; cls[1] = int.class; cls[2] = String.class; if (bus_name.equals("grid") ) { Method handler = this.getClass().getMethod( "onGridNote" + note, cls ); handler.invoke(this, velocity, channel, bus_name); } else { Method handler = this.getClass().getMethod( "onNote" + note, cls ); handler.invoke(this, velocity, channel, bus_name); } } catch (Exception e) { println("* * * * * * Error handling note " + note + ", velocity " + velocity + ", channel " + channel + ", bus_name " + bus_name + " * * * * * * "); e.printStackTrace(); } }