Étape 2: Code
Le code de l’arduino est joint ci-dessous dans un fichier texte.
Ces valeurs doivent être personnalisés.
#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)
J’ai utilisé les valeurs indiquées dans la vidéo de démonstration. Il montre un rack Reason de Propellerhead avec 16 modules piano assignés aux 16 canaux MIDI. J’ai joué deux octaves d’une échelle de 10 TET sur un clavier commence avec la touche D ci-dessous C moyen et se termine sur la touche Bb au-dessus de c moyen.
Vous pouvez voir que chaque canal et le module sont renforcées à travers que je joue chaque note successifs. La raison pour cela est que pitchbend est un paramètre canal. Quand jouer polyphoniquement, si toutes les notes ont été envoyés à un seul canal du MIDI, puis le nouveau paramètre de pitchbend modifierait l’accordage de déjà joué mais toujours des notes de sondage. Donc je l’ai parcourir 16 canaux pour que 16 notes peuvent être joués à la fois chacun avec leurs propres valeurs pitchbend. Si vous définissez numVoices sur 1, il fonctionne très bien avec un monosynth.
Pas à pas à travers la boucle principale, l’arduino lit 3 octets--un MIDI note ON ou OFF à la fois. Ensuite, il calcule la valeur de note et pitchbend MIDI pour envoyer. Au lieu de calculer ces valeurs dynamiquement, comme je le disais plus haut je pense qu’une paire de tables de recherche pourrait être appliquée où vous précalculer les valeurs pour mapper à. Cela permettrait de mappage vers n’importe quelle échelle.
Ensuite, l’arduino vérifie si la commande est une note sur et, si oui, envoie les valeurs de note et pitchbend mappées et les incréments au prochain canal MIDI. Si la commande est une note OFF, l’arduino trouve le canal du MIDI où cette note est allumé et il s’éteint.
Profitez !
-------
Mise à jour : J’ai fait le code (v1.1 attaché) plus efficace en vérifiant si la commande est une note sur ou note OFF avant de faire le calcul.
Aussi, j’ai fait plus de recherches à l’aide de MIDI-OX et le manuel de Yamaha CP-33 dans le deuxième problème dans mes notes ci-dessous (étape 3) et trouvé qu’un flux régulier de F8 (hex) et des messages en temps réel MIDI FE (hex) sont les coupables. J’ai essayé d’écrire du code pour reconnaître rapidement et de passer comme ci-dessous, mais il semblait que l’arduino ne pouvait pas suivre. J’ai été en mesure d’obtenir une note par le biais de l’arduino seulement toutes les quelques secondes ou plus.
do { command = Serial.read(); } while (command == 248 || command == 254);