Script de traitement avec le MIDI (5 / 12 étapes)

Etape 5: Gestionnaires de messages personnalisés

Utilisation midiMessage est OK pour les cas simples, comme avoir le croquis à faire quelque chose, n’importe quelle note est envoyé, ou peut-être en sélectionnant comportement basé sur deux ou trois notes, mais si trouver votre code remplissant avec des longues if/then ou switch/case déclarations vous devriez se méfier. Ces types de structures peuvent devenir difficiles à maintenir.

Ce qui serait plus propre qu’un ensemble croissant d’instructions conditionnelles serait une façon d’appeler une méthode basée sur la valeur de note. Voici une façon de le faire :

 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(); } } 

Lorsqu’un message MIDI arrive, midiMessage sort de la valeur de note et la vitesse. Il transmet ces valeurs sur invokeNoteHandler. C’est où le plaisir arrive.

Réflexion de Java permet au code de trouver des méthodes par nom (à l’aide de getMethod) et de les appeler. Nous voulons passer une valeur int à un mode de la forme onNote < SomeNoteValue > ; pour trouver une méthode, que vous devez à la fois le nom et un tableau des classes décrivant quels arguments cette méthode prend.

Une fois qu’une référence à une telle méthode est trouvée elle est appelée à l’aide de (surprise!) appeler.

Tout cela se passe à l’intérieur d’un bloc try/catch. Si quelque chose ne va pas (par exemple, la code essaie de trouver et appeler une méthode qui n’existe pas), l’exception est plus ou moins ignoré. L’idée ici est que nous aurons des méthodes pour certains ensembles de notes, et nous ne se soucient notes pour lesquelles il n’y a aucune méthode correspondante de la gestionnaire.

La dernière partie de cela est de définir une ou plusieurs méthodes pour faire quelque chose pour les notes spécifiques. Par exemple :

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

Pas très imaginatif, mais que cela ne fait pas change de couleur d’écran limite à juste deux notes.

Voici peut-être un meilleur exemple :

Tout d’abord, changer le type de currentColor :

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

Maintenant ont les gestionnaires Remarque définir différentes couleurs :

 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); } } 

Le point clé est que le comportement de n’importe quelle note donnée est encapsulé dans sa propre méthode au lieu d’être entassés dans une méthode de culture fourre-tout.

Nous pouvons rendre les choses plus propre mais en mettant toutes les méthodes de gestion note dans un fichier séparé (par exemple noteHandlers.pde) si vous savez exactement où regarder pour ajouter ou modifier quoi que ce soit.

Vos propres gestionnaires de messages peuvent être tout ce que vous voulez, et vous pouvez passer des autres paramètres, peut-être passer dans le message MIDI original lui-même. Toutefois, vous définissez il vous devez paramétrer votre version d’invokeNoteHandler afin qu’il localise des méthodes ayant la signature de paramètre correct.

Par exemple, si vous souhaitez utiliser des méthodes de gestionnaire qui prennent la vélocité de la note et le nom de bus, vous devez modifier le tableau de la classe utilisé avec getMethod pour indiquer les types de ces deux paramètres :

 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(); } } 

Articles Liés

Comment contrôler un croquis de traitement avec deux entrées Arduino

Comment contrôler un croquis de traitement avec deux entrées Arduino

Ce tutoriel va vous montrer comment construire un circuit de base Arduino qui permet de contrôler un fun ball couleur croquis dans le traitement.Vous aurez besoin :1 x carte Arduino (j'utilise un Uno)1 x planche à pain1 Photo de x-résistance1 x 10 k
Comment faire un synthétiseur sonore Arduino avec interface MIDI

Comment faire un synthétiseur sonore Arduino avec interface MIDI

Avec ce synthétiseur, vous pouvez faire Arduino reproduire des formes d'ondes totalement personnalisés. En raison de l'interface MIDI, il peut être connecté à n'importe quel instrument qui disposent et jouer avec le son souhaité.Étape 1: matériauxArd
Poux des volailles - quoi, pourquoi, qui, quand et où ? Traitement avec des huiles, prévention avec le régime. Poulets biologiques

Poux des volailles - quoi, pourquoi, qui, quand et où ? Traitement avec des huiles, prévention avec le régime. Poulets biologiques

J'aurais aimé avoir droit à cette pièce « beaucoup de choses que vous ne voulais pas savoir sur les poux, mais un jour peut être heureux que vous avez fait ».Par la suite instructable, j'essaie de condenser deux des articles que j'ai écrit sur le pou
Cellule photoélectrique réagit à la lumière d’un œil. un projet d’introduction pour l’utilisation de traitement avec Arduino

Cellule photoélectrique réagit à la lumière d’un œil. un projet d’introduction pour l’utilisation de traitement avec Arduino

Dans ce projet, vous pouvez voir un exemple simple d'utilisation le traitement afin de faire une représentation graphique de données qu'un arduino obtient comme un détecteur de. Dans ce cas, une cellule photoélectrique.Après obtenant une image de le
Comment couper Bullnose de perles en plaques de plâtre avec un Mider

Comment couper Bullnose de perles en plaques de plâtre avec un Mider

c'est comment nous couper des billes de cloison sèche rond qui se rencontrent dans un angle de 90 degrés. Nous allons utiliser un outil appelé un « Mider » à l'occasion de nos lignes afin d'avoir nos coins sans lacunes où ils se rencontrent. S'il exi
Gars : Comment traiter avec les filles sur internet.

Gars : Comment traiter avec les filles sur internet.

Après un membre ici s'est plaint des attaques et mesquin blagues sur le fait qu'elle était une fille sur ce site, j'ai pensé que cela pourrait être une bonne idée... Le thread d'origine.Donc voilà, un guide traitant des femmes sur l'internet, sans fa
Comment contrôler un jeu simple de traitement avec Arduino

Comment contrôler un jeu simple de traitement avec Arduino

Bonjour à tousDans ce Instructable, nous allons voir comment créer un « lien » entre une esquisse de traitement et une carte Arduino. Dans cet exemple, un module à ultrasons sera utilisé pour contrôler un avion dans un jeu simple. Encore une fois, ce
Post-traitement avec un GPS GeoExplorer3

Post-traitement avec un GPS GeoExplorer3

collecte des caractéristiques avec n'importe quelle unité de système de positionnement Global (GPS) peut être utile et intéressant. La plupart des gens rencontrent les unités de GPS après tout les collecte de données et le traitement est terminé. Nou
Voiture R/C contrôles de traitement avec les modules XBee

Voiture R/C contrôles de traitement avec les modules XBee

cette instructable est une modification de ma présentation à la communauté Processing Chicago au laboratoire de visualisation électronique (EVL), Université de l'Illinois à Chicago le 1er octobre 2012. Dans la rubrique desSérie de la bibliothèque de
À l’aide de traitement avec Ember

À l’aide de traitement avec Ember

Une des choses qui m'intéresse le plus sur braise, est le fait que les fichiers d'entrée sont une pile de png. Cela signifie que l'on peut nourrir essentiellement les images imprimante sans la nécessité d'organe solide modélisation, LSE ou trancher !
Traiter avec pâte à Pizza

Traiter avec pâte à Pizza

pâte à Pizza peut être délicat, avouons-le. Dérouler avec un rouleau à pâtisserie peut produire une pizza acceptable bien que plat, et si vous avez trop travailler la pâte sera simplement d'étirement retour comme un élastique (pas de mention avoir du
Simple astuce de Dernière Minute ou sac de bonbons traiter avec motif

Simple astuce de Dernière Minute ou sac de bonbons traiter avec motif

rendre cette dernière minute facile truc sac de bonbons en aucun temps du tout !  Utilisez ce modèle super simple, feutres, colle et un peu de couture pour concocter un sac de friandise pour votre soir de l'Halloween.  Si vous n'avez pas une machine
Traiter avec un froid

Traiter avec un froid

je me suis réveillé hier ne se sentant pas bien, et j'ai vite compris, j'ai eu un rhume. Hiver et le printemps sont les capitols froids de l'année, afin de vous préparer à ce qui est à venir, voici quelques conseils pour traiter un rhume !Étape 1: sy
Traiter avec Raw bords de tissu de toile de jute

Traiter avec Raw bords de tissu de toile de jute

si vous avez déjà travaillé avec toile de jute, vous remarquerez que parfois simplement en découpant la forme de votre chemin de table, napperon ou petit tapis toujours ne fait pas l'affaire. Parce que les bords ne sont pas cousus, ils vont être effi