Scripting verwerking met MIDI (5 / 12 stap)

Stap 5: Aangepaste bericht handlers

Met behulp van midiMessage is OK voor eenvoudige zaken, zoals met de schets doen iets ongeacht welke opmerking wordt verzonden, of misschien selecteren van gedrag op basis van twee of drie opmerkingen, maar als uw code vullen met lange als/dan vinden of switch/case verklaringen moet u voorzichtig. Dit soort structuren kunnen worden moeilijk te handhaven.

Wat zou schoner dan een groeiend aantal conditionals zou een manier om een methode op basis van de waarde van de notitie te starten. Hier is een manier om het te doen:

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

Als een MIDI-bericht ontvangt, trekt midiMessage de Nootwaarde en snelheid. Deze waarden naar invokeNoteHandler worden doorgegeven. Dat is waar het plezier gebeurt.

Java reflectie kan code methoden vinden door naam (met getMethod) te noemen. Wij willen een int waarde doorgeven aan een bepaalde methode van het formulier onNote < SomeNoteValue >; om te zoeken naar een methode u moet zowel de naam als een array van klassen met een beschrijving van wat argumenten die methode neemt.

Zodra een verwijzing naar een dergelijke methode is gevonden is aangeroepen met behulp van (verrassing!) aanroepen.

Dit alles gebeurt binnen een try/catch-blok. Als er iets mis gaat (bijvoorbeeld de code probeert te vinden en het aanroepen van een methode die niet bestaat) de uitzondering is meer of minder genegeerd. Het idee hier is dat er methoden voor enige verzameling van notities, en we niet schelen notities waarvoor er geen bijbehorende handler-methode is.

Het laatste deel van dit is om te definiëren van een of meer methoden om iets voor specifieke notities te doen. Bijvoorbeeld:

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

Niet vreselijk fantasierijke, maar wat dit doet is limiet scherm-kleur verandert in slechts twee opmerkingen.

Hier is misschien een beter voorbeeld:

Eerst, wijzigt u het type van currentColor:

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

Nu hebben de opmerking handlers verschillende kleuren instellen:

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

Het belangrijkste punt is dat het gedrag voor een bepaalde opmerking is ingekapseld in een eigen methode in plaats van in een groeiende catch-all-methode worden gepropt.

Kunnen we dingen schoner, maar door alle methoden van de opmerking aangestuurde brengen in een afzonderlijk bestand (bv noteHandlers.pde) zodat u weet precies waar hij moet zoeken als u wilt toevoegen of wijzigen om het even wat.

Uw eigen bericht handlers kunnen alles wat die je wilt, en u wilt misschien in andere parameters doorgeven, misschien doorgeven in het oorspronkelijke bericht van de MIDI zelf. Maar u moet het op u uw versie van invokeNoteHandler zo instellen dat wordt gezocht naar methoden met de juiste parameter handtekening.

Bijvoorbeeld, als u gebruik wilt maken handler methoden, die de opmerking snelheid en de naam van de bus nemen, wilt u wijzigen van de klasse array gebruikt met getMethod om aan te geven welke van deze twee parameter:

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

Gerelateerde Artikelen

Hoe maak je een Arduino sound synthesizer met MIDI-interface

Hoe maak je een Arduino sound synthesizer met MIDI-interface

Met deze synthesizer kun je Arduino reproduceren van volledig aangepaste golfvormen. Als gevolg van de MIDI-interface, kan het worden aangesloten op alle instrumenten die dergelijke functie en spelen met het gewenste geluid.Stap 1: materialen(In dit
Verwerking met behulp van het model van de arduino proteus

Verwerking met behulp van het model van de arduino proteus

Deze toepassing nota wordt beschreven hoe u verwerking metde LabCenter Proteus-software voor het simuleren van de Arduino via een virtuele COMPoort.Hierbij wordt ervan uitgegaan dat de gebruiker vertrouwd met Proteus, de ArduinoIDE en de verwerking I
Launchpad / Sequencer met MIDI uitgang

Launchpad / Sequencer met MIDI uitgang

Voor een project dat we hadden om een instrument te maken, kwamen we met het idee een Sequencer om geschikt te maken voor het verzenden van MIDI-data naar een MIDI speler. We dit gemaakt met behulp van Arduino en Processing. Het kostte ons ongeveer 5
Hybride zes snarige bas met midi mogelijkheden

Hybride zes snarige bas met midi mogelijkheden

Deze basgitaar is gemaakt voor een beoordeling van de Universiteit waarin een oorspronkelijke instrument moest zijn ontworpen en geconstrueerd en kunnen communiceren met een computer op een bepaalde manier. Deze bas kan echter worden gemaakt zonder d
Verwerking met Ember

Verwerking met Ember

Een van de dingen die interesseert mij het meest over Ember, is het feit dat de inputdossiers een stapel PNGs. Dit betekent dat men kan in wezen het voeden van de beelden van de printer zonder de behoefte aan solide lichaam modellering, STLs of snijd
Hoe u een eenvoudig spel van de verwerking met Arduino

Hoe u een eenvoudig spel van de verwerking met Arduino

Hoi allemaalIn dit Instructable, zullen we zien hoe maak je een "link" tussen een Processing Schets en een Arduino-kaart. In dit voorbeeld worden een ultrasone module worden gebruikt voor het besturen van een vliegtuig in een eenvoudig spel. Nog
Time-Lapse fotografie verwerking met behulp van GIMP

Time-Lapse fotografie verwerking met behulp van GIMP

na het nemen van enkele foto's van wolken buiten mijn huis, ik zag dat ze op bijna dezelfde richting. Bij het bekijken van hen in snelle opeenvolging, leek ze bijna een frame-voor-frame time-lapse animatie. Ik besloot om te zetten in een GIF-bestand
MIDI-handschoen met behulp van de Arduino en lichtsensoren drummen

MIDI-handschoen met behulp van de Arduino en lichtsensoren drummen

ik zal beschrijven een leuke en gemakkelijke manier om uw eigen geluid expressie opbouwt MIDI ingeschakeld handschoen gebruikten veel van geld op MIDI Interfaces of dure sensoren zonder.Voel je vrij om contact met mij direct per mail als u suggesties
U Rock Guitar midi controller met Bluetooth BLE en oplaadbare batterij

U Rock Guitar midi controller met Bluetooth BLE en oplaadbare batterij

In deze tutorial zal ik u tonen hoe te schakelen gitaar u Rock gitaar in een midi-controller voor Bluetooth 4.0 met oplaadbare batterij. De oplossing was simpel maar moest denken.Dit systeem is getest met de iMac, iPad en iPhoneHet materiaal dat we n
Controle van een RepStrap met verwerking

Controle van een RepStrap met verwerking

dit instructable laat zien hoe u kunt vele openlijk beschikbare projecten samen een interessante en complexe systeem te bouwen. Zij is geïnspireerd op diverse communautaire projecten waaronder: RepRap, Arduino, verwerking, Linux en, natuurlijk, Instr
Verzenden en ontvangen van MIDI met Arduino

Verzenden en ontvangen van MIDI met Arduino

Dit instructable zal u tonen hoe te een Arduino gebruiken voor het verzenden en ontvangen van een verscheidenheid van MIDI-berichten, zodat u kunt beginnen met het opbouwen van uw eigen MIDI-controllers en instrumenten. Eerst ik zal praten een beetje
Converteren van een speelgoedpiano om te werken als een midi-apparaat en gebruik het met Synthesia

Converteren van een speelgoedpiano om te werken als een midi-apparaat en gebruik het met Synthesia

doel van dit project:Converteren van een goedkope speelgoedpiano om te werken als een midi-apparaat en gebruik het met Synthesia (http://www.synthesiagame.com/)Andere programma's die gebruikmaken van midi-ingangen kunnen ook worden gebruikt.Aanpak:De
Arduino Midi-controller met een ZX afstand en gebaar Sensor

Arduino Midi-controller met een ZX afstand en gebaar Sensor

Welkom bij dit instructable over het bouwen van een zeer basic Midi-Controller met de SparkFun ZX afstand en gebaar Sensor. Dit instructable is onderdeel van een schoolwerk.Opmerking: Dit is geen codering tutorial. De definitieve code zal worden opge
Verbinding maken met meerdere MIDI-apparaten, Y-kabel, SAVE $$$

Verbinding maken met meerdere MIDI-apparaten, Y-kabel, SAVE $$$

Ooit wilde doen LIVE optredens, door het aansluiten van meerdere toestellen via MIDI? Beheersing van mixer, zelfs als het andere toetsenbord niet heeft, zoals PA800 >> PA3X? zoals PSR 3000 en omhoog >> Tyros 3 +?Het is nu mogelijk! Als u de in