Étape 9: Encore un autre bus...
Vous pouvez regarder le code source finale pour voir ce que je suis venu avec des gestionnaires de remarque, exécutez-le avec l’exemple de fichier de Renoise, ou regarder la vidéo juste voir en action. Il n’y a de très bonnes chances que le code ne sera pas exactement ce que j’ai montré ici. Comme j’ai été décrivant l’esquisse que j’ai été revoir comment les choses devraient travailler. Il s’agit de la nature du codage exploratoire.
Tandis qu’essayer cela et que j’ai réalisé qu’il peut être difficile de pré-plan de chaque modification et interrupteur et sautez, vous pourriez vouloir voir dans le sketch. Comme je voudrais modifier code ou modifier les pistes MIDI en Renoise et regarder les résultats je ne cessais de penser, Hé, un changement de teinte soudaine serait une bonne chose, ou ce serait le bon rythme à vomir doubles images pleines pour la moitié d’une barre. En d’autres termes, il y avait quelques effets sélectionnez que j’ai voulu mais seulement à des moments clés.
Ce montage dans les rails de déclencheur de Renoise serait difficile. Tellement plus agréable pour activer certaines choses en temps réel en utilisant un autre contrôleur, lors de la lecture de la chanson.
J’avais a commencé à expérimenter avec mon clavier QuNexus. Ce dispositif vous permet de décaler l’octave, donc je pourrais ont travaillé avec une gamme de notes pas déjà assignés. Mais j’ai voulu utiliser un contrôleur qui pourrait être plus intuitif, autre chose qu’un clavier standard.
J’ai ramassé une Novation Launchpad quelque temps l’année dernière. C’est une grille de commutateurs de touch-pad. Il n’y a aucun contrôle de la vitesse, juste on/off, idéal pour le déclenchement des échantillons et les boucles et autres. Il envoie les notes MIDI dans une fourchette prédéfinie. Maintenant, j’ai bien sûr, il y a un moyen de changer ce que fait remarquer est attribués à chaque bouton, mais puisque le nom de bus est répercuté sur les gestionnaires de note MIDI dans le sketch que je peux réutiliser en toute sécurité les notes existantes.
Une autre approche pourrait consister à définir le Launchpad d’utiliser un canal spécifique. Vous pouvez décider par vous-même si la sélection comportement sur un autre canal ou ramification basé sur le nom de bus mieux vous s’adapte modèle mental de ce qui se passe.
Il y a divers endroits, que le code peut commuter le comportement basé sur le nom de bus. Une, bien sûr, est à l’intérieur de chacune des méthodes REMARQUE-manutention. Une autre serait en invokeNoteHandler. Bien que j’ai été passant le nom de bus sur les gestionnaires de la note mes idées pour savoir comment utiliser le tableau de bord n’a pas envie un bon ajustement pour la note existante, code de gestion. Par exemple, si j’ai envoyer C48 à partir du tableau de bord je suis pas cherchez peut-être pour faire une autre variation sur le motif de grille-remplissage de 4x4, mais quelque chose de tout à fait différent. Ajout d’un test en onNote48 pour cet appareil particulier senti maladroit. Supposons que j’ai défini un ensemble différent de gestionnaires de remarque, spécifiques à ce dispositif ?
Cela me sauverait le désagrément d’avoir à ajouter que cette vérification nom_périphérique à chaque méthode d’onNoteNN unique sur la hors-chance il y a un chevauchement de valeur de note. L’inconvénient, c’est d’avoir un nom de périphérique codées en dur dans mon esquisse.
... et encore une autre option de configuration
Alors que je voulais envoyer certains messages MIDI pour sélectionner les gestionnaires basés sur le nom de bus je ne voulais pas de coder en dur le nom d’autobus. À la maison, j’ai un choix des contrôleurs, mais que j’écris cette phrase je me trouve être HeatSyncLabs. Je n’ai pas apporté le Launchpad ; le QuNexus s’adapter beaucoup mieux dans mon sac d’ordinateur portable.
Plutôt que de compter sur le nom d’un contrôleur spécifique dans le code, j’ai ajouté une autre option de configuration pour permettre le mappage des noms de périphérique à un autre texte.
L’entrée de config.jsi ressemble à ceci :
device_mappings: {"Launchpad": "grid", "QuNexus": "grid" }
Dans esquisse le code qui met en place les dispositifs maintenant ressemble aussi pour voir si il existe un mappage de périphérique pour un périphérique trouvé, et si oui puis il utilise ce nom de cartographie sous le nom de bus plutôt que puis périphérique prénom.
Cela nécessitait encore un autre changement à Configgy.pde. Ce qui est nouveau, c’est que vous pouvez stocker un nom:{} réglage et récupérer une table de hachage du nom/valeur paires de chaînes.
Si le croquis attrape ces mappages de nom de périphérique...
HashMap mappings = config.getHashMap("device_mappings");
... et puis plus tard...
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]) ); }
Maintenant le message MIDI envoi code peut chercher des messages depuis un bus nommé grille ; le périphérique réel pourrait être n’importe quel nombre d’appareils en fonction de ce que vous avez fixé, et comment vous avez mappé les noms.
Maintenant acheminer sur messages MIDI peut appeler des gestionnaires spécialisés :
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(); } }