Paso 2: código
El código de arduino se coloca por debajo como un archivo de texto.
Estos valores deben ser modificados para requisitos particulares.
#define pitchbendRange 2 // the pitchbend range in semitones #define octaveSteps 10 // the number of steps in an octave #define middleNote 60 // tune to this MIDI note - 60 is middle C (0-127) #define numVoices 16 // use this many MIDI channels (1-16)
Usé los valores anteriores en la demostración en vídeo. Muestra una rejilla de Propellerhead razón con 16 módulos de piano asignados los 16 canales MIDI. Jugué dos octavas de una escala de TET 10 teclado comenzando con la tecla D debajo de C media y terminando en la tecla Bb sobre C. medio
Se puede ver que cada canal y cada módulo se caminó a través de como jugar cada nota sucesiva. La razón de ello es que pitchbend, es un lugar de todo el canal. Cuando tocar polifónicamente, si cada nota fueron enviada a un solo canal de MIDI, entonces la nueva configuración de pitchbend alteraría la afinación de jugó anteriormente pero todavía notas de sonido. Así que tengo ciclo a través de 16 canales para que 16 notas pueden ser reproducidos en un momento con sus propios valores de pitchbend. Si se establece numVoices en 1 funciona bien con un monosynth.
Paso a paso por el bucle principal, arduino lee en 3 bytes--un MIDI Nota encendido o apagado al mismo tiempo. Luego calcula el valor de nota y pitchbend MIDI para enviar. En lugar de calcular estos valores dinámicamente, como he mencionado anteriormente creo que podría aplicarse un par de tablas de búsqueda donde usted precalculate los valores a asignar a. Esto permitiría cartografía a cualquier escala.
A continuación el arduino comprueba si el comando está una nota y, si es así, envía los valores asignados de nota y pitchbend e incrementos hasta el siguiente canal de MIDI. Si el comando es un note OFF, arduino encuentra el canal MIDI donde esa nota está encendido y se apaga.
¡ Disfrute!
-------
Actualización: hice el código (v1.1 adjunta) más eficiente por comprobar si el comando es una nota o nota OFF antes de hacer cualquier cálculo.
También, hice más investigaciones usando MIDI-OX y el manual de Yamaha CP-33 en el segundo problema en mis notas a continuación (paso 3) y encontró que un flujo constante de F8 (hexagonal) y (hexagonal) FE MIDI en tiempo real mensajes son el culpable. He intentado escribir algo de código para reconocerlos rápidamente y pasar como por debajo, pero me pareció que el arduino no podría continuar. Era capaz de llegar una nota a través de arduino sólo cada pocos segundos o menos.
do { command = Serial.read(); } while (command == 248 || command == 254);