Stap 2: Een eenvoudige schets
Dit is een eenvoudige schets wilt weergeven van fundamentele gedrag en wilt controleren of de dingen werken.
// SimpleMidi.pde import themidibus.*; //Import the library import javax.sound.midi.MidiMessage; MidiBus myBus; int currentColor = 0; int midiDevice = 3; void setup() { size(480, 320); MidiBus.list(); myBus = new MidiBus(this, midiDevice, 1); } 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; } }
Eerste een snelle run-through: wanneer u stormloop zulks u zien moeten (in het berichtvenster verwerking IDE, of in een terminal-venster, afhankelijk van hoe u draaien) een lijst van beschikbare MIDI-ingangen en uitgangen. In mijn geval heb ik een QuNexus MIDI-keyboard dat gebeurt te komen als input nummer 3, dus dat is de waarde die ik toegewezen aan midiDevice gekoppeld. (Kan me niet schelen wat uitvoerapparaat is geselecteerd ik gewoon kunt instellen op 1.)
De schets ijslollie opwaarts een venster dat zal veranderen grijstinten op basis van de snelheid van welke MIDI niet u het verzendt.
Als u geen apparaat gebruikt dat met variabele snelheid stuurt vervolgens de visuals worden niet vreselijk interessant. U ziet wel nog de details van de diverse println.
Wat er gebeurt in deze schets
Eerst moet omhoog u importeren de MidiBus bibliotheek (themidibus) maar ook een Java-bibliotheek (javax.sound.midi.MidiMessage) zodat uw code naar MidiMessage-objecten verwijzen kan (zoals gebeurt in deze schets).
Afhankelijk van wat u wilt doen met de methoden beschikbaar via MidiBus moet u wellicht andere Java-MIDI-bestanden te importeren, maar voor dit voorbeeld net die ene zal doen.
In setup initialiseert de schets de MidiBus aanleg myBus. Wanneer u een nieuw exemplaar van een klasse MidiBus maakt die u wilt doorgeven in een verwijzing naar de huidige schets (AKA dit), de index van het apparaat om te luisteren naar, en de index van het apparaat te verzenden.
Als u wilt zien welke apparaten beschikbaar zijn kunt u bellen MidiBus.list() waarmee wordt afgedrukt (naar STDOUT) van de lijsten van beschikbare MIDI input en output apparaten. Het nummer dat wordt weergegeven aan de linkerkant van een item is het indexnummer dat u gebruikt bij het maken van uw MidiBus exemplaar.
Als je wilde echt slim misschien u wikkel deze om in een soort GUI (misschien met behulp van ControlP5) zodat de apparaten kunnen worden ingesteld of gewijzigd nadat de schets is gestart. In de praktijk echter de apparaten zijn waarschijnlijk overstappen van een run op de volgende en hard te coderen hen is waarschijnlijk goed genoeg voor de meeste gevallen. Een andere optie is om uw schets deze waarden uit een configuratiebestand te laden, zodat wanneer u nodig hebt om ze te veranderen het is een beetje makkelijker te doen.
Zodra een MidiBus exemplaar is gemaakt, en een geschikte schets venster, is het tijd om te wachten op sommige MIDI ingang.
Een globale variabele, currentColor, is op zijn plaats te houden de grijstinten waarde voor de achtergrond van de schets. Alle tekenen doet is gebruik deze waarde om te kleuren van het venster. Maar als u MIDI notities aan de schets het webvenster verandert stuurt. Waar is de wijziging optreedt?
MidiBus biedt een paar callback-methoden. Dit zijn de methoden die automatisch onder verschillende omstandigheden aangeroepen worden. Deze sketch maakt gebruik van midiMessage, die automatisch wordt aangeroepen wanneer een MIDI-bericht binnenkomt.
Er zijn twee versies van midiMessage; de andere heeft slechts één argument voor de MIDI-bericht. Deze sketch gebruikt een versie met de tijdstempel en MIDI bus naam enkel te tonen enkele van de details van de MIDI die kunt u.
U bepaalt wat er gebeurt in deze methode. Voor deze schets de code pakt één of andere info over de MIDI-bericht afgedrukt en vervolgens kijkt naar de snelheid van de opmerking. Als de snelheid groter dan nul is dan die waarde is verdubbeld en aan currentColor toegewezen.
Waarom waarden van nul niet overslaan? De MIDI-specificatie definieert berichten voor zowel "Let op" en "Let". Maar sommige apparaten geen moeite met "note af", in plaats daarvan bericht verzenden een "nota over" met een snelheid van nul.
Toen ik eerst het schrijven deze schets ik gewoon pakte de snelheid gebruikt het en zag dat het scherm zwart ging een zodra ik nam mijn vingers van de sleutels van de QuNexus. Kijken naar de println uitgang ik zag wat er gebeurde: nul snelheid voor "note af".
Hoe je omgaat met dit is aan jou; Wees ervan bewust dat het kan gebeuren.
Dus dit heel de eenvoudige schets is, maar een belangrijke idee toont: de schets wacht op externe signalen, reageert op deze signalen door bijwerking van sommige variabelen, en elke keer voor draw maakt gebruik van de huidige stand van deze variabelen om iets te doen.