Etape 1: Savoir plus sur le MIDI et Arduino
Cette instructable qui couvre l’envoi et réception le MIDI avec un Arduino était un bon endroit pour commencer à apprendre à MIDI, mais il ne fait qu’effleurer la surface. Un des problèmes que j’ai rencontrés était de savoir comment gérer les messages MIDI système en temps réel qu’un de mes MIDI claviers envoie. MIDI-OX était utile pour le suivi des messages, sauf que je n’étais pas sûr au sujet de la messagerie, qu'il montre. J’ai appris plus tard qu’il masque « état d’exécution »--plus ci-dessous.
J’ai donc écrit un code qui utilise l’Arduino pour surveiller l’entrée MIDI et il écrit dans le moniteur de la série. J’ai dû utiliser un port de série de logiciels pour MIDI, puisque le taux de baud 31250 MIDI n’est pas supporté par le moniteur de la série. De cette façon, que chaque port série peut avoir un débit différent. Le code ci-dessous filtre toutes les commandes MIDI autres que "note on" ou "note off" imprimer uniquement les commandes et les données présentées ci-dessous, 160, mais il est également instructif de le construire à pas d’écran sur toutes les commandes. Voir ce Résumé des messages MIDI pour toutes les valeurs possibles de MIDI.
#include <SoftwareSerial.h>
// receive on pin 7 and transmit on pin 8 SoftwareSerial softSer(7, 8);
int data = 0;
void setup() { Serial.begin(57600); softSer.begin(31250); }
void loop() { if (softSer.available()) { data = softSer.read(); // screen out commands other than note on or note off if (data < 160) { Serial.println(data, DEC); } } }
Une autre pièce du puzzle que j’avais besoin était le concept de "statut en cours d’exécution." Cela signifie qu’une commande en double successive, comme « note on, » peut être ignorée et que les données peuvent être envoyées. Ainsi, par exemple, lors de la lecture d’un accord de 3 notes, au lieu d’envoyer 3 commandes "note on" avec 3 note correspondante et paires de vitesse--totales, 9 octets au lieu de cela commande juste 1 "note on" est envoyés et puis 3 paires de note et de vitesse--7 octets. En outre, les commandes « note on » avec une vitesse nulle peuvent être utilisées au lieu de « note off. » Cela signifie que si vous jouez uniquement les clés, un clavier MIDI pourrait envoyer seulement 1 commande « note on » et paire après paire d’octets Remarque et la vitesse. C’est pour un taux de communication série plus efficace et réduit la latence.
Mon dernier trajet afin d’améliorer la partie MIDI de mon appareil Arduino d’origine est de construire le matériel des composants plutôt que d’utiliser un bouclier Linksprite MIDI. L’avantage de faire que c’est qu’il peut être ajouté sur un proto-board avec d’autres fonctionnalités comme encodeurs et un afficheur et panneau monté ports MIDI peut être utilisé. Ci-dessus est une représentation schématique du circuit que j’ai utilisé. Pour référence, voici les spécifications électriques officielle. Notez qu’elle appelle à une résistance reliée à MIDI sur la broche 5. J’ai trouvé que la résistance diminue le niveau de tension des données transmises suffisamment que l’extrémité de réception pas pu lire l’it, donc j’ai omis la résistance.