Scripting verwerking met MIDI (3 / 12 stap)

Stap 3: Configuratie en krijgen slimme

Als u genoeg Processing schetsen die afhankelijk van de eerste instellingen die u wilt aanpassen voor verschillende executies schrijven bent u waarschijnlijk te doen wat ik deed en uitwerken van een manier om deze instellingen uit een configuratiebestand te laden. Ik vermoed dat dit is het soort codering die valt in de categorie "hoe moeilijk kan het zijn?", omdat ik denk niet dat ik zelfs moeite om te zoeken naar een bestaande oplossing. In plaats daarvan ik heb iets werkelijk eenvoudig en na verloop van tijd aangepast.

Mijn eerste Config-klasse een tekstbestand geladen vanuit de gegevens / map en verdeelde naamwaarde: strings in een HashMap. Het werkte vrij goed voor de meeste dingen. Geweldig voor eenvoudige één-artikelposten, maar niet zo goed als je wilde een lijst van waarden bepalen.

Ik heb me af of ik gebruiken kon YAML of JSON zodat een tekstbestand meer complexe structuren kan vertegenwoordigen. Blijkt dat Processing u ingebouwde JSON geeft behandeling. Perfect.

Voor de MIDI schets is de configuratie aangepast voor het gebruik van JSON. Een JSON-bestand laden en krijgen bij de waarden is meestal eenvoudig, maar niet volledig transparant. Kunt u op verschillende typen gegevens met behulp van getInt, getFloat, getString, etc., maar als u wilt een lijst met items te grijpen u nodig getJSONArray en vervolgens wilt uitlichten van elk item als het juiste type.

Om deze Config besloten heb ik dat in de meeste gevallen een lijst met items van hetzelfde type zullen zijn. Dus ik toegevoegd getStrings, getFloats en getInts.

Nu in plaats van de indexcijfers van de apparaten in mijn schets kon ik gebruiken een configuratiebestand. JSON is niet zo eenvoudig als de naam: waarde, maar het is niet te ver weg van die. Een beetje overkill voor korte bestanden, erg handig voor meer complexe gestructureerde gegevens.

Ik zal niet in detail op die code hier. U kunt meer lezen over het hier.

Dat eerste schets van de demo bleek een manier om een MidiBus-object te maken. Er is een andere manier, en het is niet alleen vriendelijk, maar leent zich voor betere configuratie. MidiBus kunt u opgeven welke apparaten te gebruiken met de naam. De naam moet overeenkomen met op wat wordt weergegeven in de lijst met beschikbare apparaten, zodat u wellicht MidiBus.list om te zien wat er voor het eerst uitvoert.

Als je eenmaal de namen van dingen weet kunt het configuratiebestand leesbare tekst gebruiken in plaats van cryptische nummers.

U kunt ook een naam voor de bus doorgeven zodat later, wanneer midiMessage wordt aangeroepen, uw code (indien gewenst) zich anders op basis van de bron van het bericht gedragen kan.

De schets van de demo (minus de code voor Configgy.pde) ziet er nu als volgt:

 import java.lang.reflect.Method; import themidibus.*; import javax.sound.midi.MidiMessage; Configgy config; int currentColor = 0; ArrayList devices = new ArrayList(); void setup() { size(480, 320); config = new Configgy("config.jsi"); String[] deviceNames = config.getStrings("devices"); println("Unavailable Devices"); println( join(MidiBus.unavailableDevices(), "\n")); println("-----------------------------------------------------"); String[] available_inputs = MidiBus.availableInputs(); for (int i = 0;i < available_inputs.length;i++) { for(int x=0; x < deviceNames.length; x++) { println("Check for device " + deviceNames[x] + " against " + available_inputs[i] ); if (available_inputs[i].indexOf(deviceNames[x]) > -1 ) { println("* * * * Add device " + deviceNames[x] + " * * * * "); devices.add( new MidiBus(this, deviceNames[x], 1, deviceNames[x]) ); } } } if (devices.size() < 1 ) { println("Failed to assign any of the desired devices.\nExiting."); exit(); } } void draw() { background(currentColor); } 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); if (vel > 0 ) { currentColor = vel*2; } } 

Het config.jsi-bestand (opgeslagen in de data / map) is dit:

 devices:["QuNexus", "01. Internal MIDI"] 

Hebt u dit zich aan te passen welke apparaten dat u hebt beschikbaar om te gebruiken.

Als u de schets uitvoert, het configuratiebestand wordt geladen en de code zal proberen om in te vullen een ArrayList met MidiBus exemplaren op basis van de apparaatnamen die u hebt opgegeven.

Opmerking in dit voorbeeld het gebruik van een ArrayList betekent dat de code is niet lastig met specifieke instantievariabelen voor elke MidiBus instantie; Deze code niet ooit verwijst naar die gevallen.

De midiMessage-gebeurtenis-handler wordt aangeroepen maakt niet uit welke van deze apparaten is het verzenden van het bericht. De handler wordt doorgegeven de naam van de bus, dus je kunt, als je wilt, de code verschillende actie ondernemen afhankelijk van de bron van de MIDI-bericht.

Als je je afvraagt waarom zou je de bus exemplaren toevoegen aan een lijst, als ze nooit zullen worden gebruikt, de reden is dat zonder enige vorm van permanente toewijzing die gevallen verdwijnen zal zodra setup is voltooid. Zodra zij gegaan zijn, zal de MIDI-bericht gebeurtenis-handler niet langer krijgen genoemd.

Als u de code om te verwijzen naar een van deze exemplaren wilt dan kunt u ervan overwegen met behulp van een HashMap om hen te houden zodat u specifieke apparaten door naam kon ophalen.

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