Aangepaste Arduino MIDI Controller (13 / 14 stap)

Stap 13: De bibliotheek


In de intro van dit Instructable beloofde ik u een gemakkelijke manier om uw eigen MIDI-controller program. Nou, is hier het!

Dit is een bibliotheek die probeert te compromis tussen grote aanpasbaarheid en gebruiksvriendelijke code, toegankelijk voor Arduino beginners.

Het momenteel ondersteunt potentiometers, faders, switches, knoppen, rotary encoders, en heeft een eenvoudige functies voor het verzenden van MIDI commando's.
Ik ben van plan om toe te voegen meer LED uitvoer, en Pitch Bend Control ondersteuning in de nabije toekomst.

Installeren van de MIDI_controller-bibliotheek

Deze bibliotheek is afhankelijk van de MIDI-functionaliteiten van de software die we eerder geïnstalleerd (Teensyduino, TeeOnArdu, HIDUINO etc.) zo hoofd terug naar stap 6 & 8 en insalleren. Raak niet ontmoedigd door de schijnbaar lange installatie-procedure, als u de instructies, u zou fijn moeten zijn. Zodra alles is ingesteld, is het werkelijk makkelijk te gebruiken!

De MIDI_controller bibliotheek zelf is geïnstalleerd als elke andere Arduino library.

Dit zijn de instructies voor Arduino IDE 1.0.6:

  1. Download de bibliotheek hier.
  2. Klik in het menu "Sketch" "ImportLibrary..." en vervolgens ' bibliotheek toe te voegen...'.
  3. Blader naar uw map Downloads, dubbelklikt u erop en selecteer MIDI_controller.zip in de rechterkolom.
  4. Klik op 'Ok'.
  5. Opnieuw opstarten van de IDE voor het laden van de zoekwoorden (zodat u de oranje kleur voor functies enz.)

Thats it.

Hoe het te gebruiken

Eerst de bibliotheek aan uw tekening toevoegen door simpelweg te typen van deze lijn bij de bovenkant van uw dossier:

De bibliotheek heeft momenteel 4 klassen: analoog, digitaal, DigitalLatch en Encoder.

Een klasse heeft een aantal functies en een reeks variabelen. Sommige zijn privé en worden gebruikt binnen de klasse, anderen zijn openbaar en kunnen worden aangeroepen vanuit buiten de klas. Meer over klassen hier.

De eerste stap bij het gebruik van een klasse is het creëren van een lid van de klasse. Dit wordt meestal gedaan voorafgaand aan de setup, zodat u de lidstaten overal in het programma kunt.

U kunt bijvoorbeeld een lid 'potmeter' van de klasse analoge toevoegen:
Analoge potentiometer (blah, blah, blah...);
(Negeer de nonsens voor nu)

Nu dat de afgevaardigde is gemaakt, kunnen we de functies van analoge gebruiken op het, bijvoorbeeld, de functie vernieuwen:
potentiometer.refresh();
Net als de Arduino functies zoals digitalWrite, kunt u deze functies buiten de setup of de lus niet gebruiken.

Lees voor een uitleg van wat de functies doen en wat ze zijn gemaakt voor, na verwijzing.

Analoog

De analoge klasse is bedoeld voor analoge ingangen, zoals potentiometers en faders (of analoge sensoren die een waarde tussen 0 en 5V output). Een ongeldige pincode zal resulteren in de LED op pin 13 knippert 1 Hz.

Lid maken

  • Analoog (byte pin, byte controller, byte kanaal, byte resolutie);

pin is de analoge pin om van te lezen. Het verbonden met de Wisser van de potentiometer.

controller is de MIDI-controllernummer (gegevens 1 in de MIDI-bericht). Dit is hoe het eruit zal zien in uw MIDI-software, zoals een uniek adres.

kanaal is het MIDI kanaal selecteren.

resolutie is de resolutie van de analoge lezen. Een resolutie van 2 zou slechts 2 mogelijke waarden (0 en 127), een resolutie van 3 3 mogelijke waarden (0, 63 en 127) zou geven. Een resolutie van 128 geeft 128 mogelijke waarden (0-127), dit is de standaardinstelling, omdat het alle 7-bits getallen. (MIDI 7-bits getallen gebruikt voor het verzenden van waarden) Gebruik een waarde lager dan 128, zoals 64, als er veel lawaai op uw input, bijvoorbeeld als de controller houdt op verzenden 0,1,0,1,0,1,0,1,... Gebruik 128 als u wilt gebruiken de maximumresolutie beschikbaar.

Functies

  • Refresh();

Deze functie controleert de input, en als het is gewijzigd sinds de laatste keer vernieuwen heette, het de nieuwe waarde verzenden via MIDI (op de vooraf gedefinieerde controllernummer en kanaal).

  • Bank (byte pin, byte controller, byte kanaal);

Met deze functie kunt u een analoge ingang (samen met een schakelaar) van meerdere besturingselementen gebruiken. Als de schakelaar in de OFF positie, de controller en kanaal zullen degenen die werden gedefinieerd tijdens het maken van de lidstaten, als de schakelaar in de ON-positie, zullen de controller en kanaal degenen die als argumenten van deze functie zijn ingevoerd.

pin is de digitale pin met de switch aangesloten. De interne pull-up weerstand zal worden ingeschakeld.

controller is de controller te gebruiken wanneer de schakelaar ingeschakeld is.

kanaal is het kanaal om te gebruiken wanneer de schakelaar ingeschakeld is.

  • detachBank();

Deze functie wordt de functionaliteit van de bank die is ingesteld met de functie bankuitgeschakeld. De controller en kanaal zullen degenen die werden gedefinieerd tijdens het maken van het lid weer, ongeacht de status van de schakelaar.
De pin van de schakelaar die is gedefinieerd in de functie van de bank wordt opnieuw ingesteld als een input zonder pull-up weerstand.

Constanten

  • Geen.

Voorbeelden

  • Analog_example
  • Analog_bank_example

Digitale

De digitale klasse is bedoeld voor gebruik met schakelaars en knoppen. Het stuurt een bericht van de noteOn wanneer de knop wordt gedrukt, en een noteOff-bericht wanneer de knop wordt losgelaten. Sluit uw switches tussen de invoer pin en de grond, de interne pull-up weerstanden worden gebruikt. Een ongeldige pincode zal resulteren in de LED op pin 13 knippert 1 Hz.

Lid maken

  • Digitale (byte pin byte opmerking, byte kanaal, byte snelheid);

pin is de digitale pin met de knop aangesloten.

Opmerking is de opmerking van de MIDI te verzenden. 60 is midden C, en elke helft noot is plus of min één. U kunt dit vergelijken met de controllernummer analoog.

kanaal is het MIDI kanaal selecteren.

snelheid is hoe hard de notitie wordt geraakt. Dit maakt niet uit voor een normale knop, zolang er geen 0. (Het maakt uit echter voor touch sensitive pads bijvoorbeeld.)

Functies

  • Refresh();

Deze functie controleert de input, en als het is gewijzigd sinds de laatste keer vernieuwen heette, het stuurt het toepasselijke bericht: noteOn wanneer de knop wordt gedrukt, noteOff wanneer de knop wordt losgelaten.

  • Bank (byte pin, byte opmerking, byte kanaal);

Met deze functie kunt u een knop (samen met een schakelaar) van meerdere besturingselementen gebruiken. Als de schakelaar in de OFF positie, de notitie en kanaal zullen degenen die werden gedefinieerd tijdens het maken van de lidstaten, als de schakelaar in de ON-positie, zullen de notitie en kanaal degenen die als argumenten van deze functie zijn ingevoerd.

pin is de digitale pin met de switch aangesloten. De interne pull-up weerstand zal worden ingeschakeld.

Opmerking is de notitie te gebruiken wanneer de schakelaar ingeschakeld is.

kanaal is het kanaal om te gebruiken wanneer de schakelaar ingeschakeld is.

  • detachBank();

Deze functie wordt de functionaliteit van de bank die is ingesteld met de functie bankuitgeschakeld. De notitie in en kanaal zullen degenen die werden gedefinieerd tijdens het maken van het lid weer, ongeacht de status van de schakelaar. De pin van de schakelaar die is gedefinieerd in de functie van de bank wordt opnieuw ingesteld als een input zonder pull-up weerstand.

Constanten

  • Geen.

Voorbeelden

  • Digital_example
  • Digital_bank_example

DigitalLatch

De klasse DigitalLatch is bedoeld om te gebruiken met aan-uitschakelaars, die geen kortstondige. Het stuurt zowel een noteOn en een noteOff-bericht, telkens wanneer de status verandert. De vertraging tussen de aan en uit bericht kunnen worden ingesteld. Als de status wordt gewijzigd voordat de vertraging is voltooid, toch wordt het noteOff bericht verzonden en een ander 'pulse' is begonnen: nog een noteOn-bericht wordt verzonden, en na de ingestelde vertraging, noteOff wordt het bericht ook.
Deze klasse is handig als u wilt gebruiken de 'mute' of 'solo' knoppen in uw software met niet-kortstondige toggle switches. Als u overschakelt op de switch, het juiste spoor is gedempt, wanneer u de schakeloptie weg weer, de un-gedempte, bijvoorbeeld.
Sluit uw switches tussen de invoer pin en de grond, de interne pull-up weerstanden worden gebruikt. Een ongeldige pincode zal resulteren in de LED op pin 13 knippert 1 Hz.

Lid maken

  • DigitalLatch (pin byte byte opmerking, byte kanaal, byte snelheid, int vertraging);

pin is de digitale pin met de switch aangesloten. De interne pull-up weerstand zal worden ingeschakeld.

Opmerking is de opmerking van de MIDI te verzenden. 60 is midden C, en elke helft noot is plus of min één. U kunt dit vergelijken met de controllernummer analoog.

kanaal is het MIDI kanaal selecteren.

snelheid is hoe hard de notitie wordt geraakt. Dit maakt niet uit voor een normale schakelaar, zolang er geen 0.

Delay is de vertraging tussen de noteOn en noteOff berichten, in milliseconden. 100ms werkt geweldig. Geef geen 0.

Functies

  • Refresh();

Deze functie controleert de input, en stuurt het toepasselijke bericht, zoals uitgelegd in de beschrijving uit deze klasse. (Nota: het noteOff bericht is niet verzonden, als deze functie is niet opnieuw aangeroepen na verzending van het bericht van de noteOn. Als je gewoon dit in uw lus, echter moet je wel goed.)

  • Bank (byte pin, byte opmerking, byte kanaal);

Deze functie kunt u een schakeloptie (samen met een bank-switch) voor meerdere besturingselementen. Als de bank-schakelaar in de OFF positie, de notitie en kanaal zullen degenen die werden gedefinieerd tijdens het maken van de lidstaten, als de bank-schakelaar in de ON-positie, zullen de notitie en kanaal degenen die als argumenten van deze functie zijn ingevoerd.

pin is de digitale pin met de switch aangesloten. De interne pull-up weerstand zal worden ingeschakeld.

Opmerking is de notitie te gebruiken wanneer de schakelaar ingeschakeld is.

kanaal is het kanaal om te gebruiken wanneer de schakelaar ingeschakeld is.

  • detachBank();

Deze functie wordt de functionaliteit van de bank die is ingesteld met de functie bank uitgeschakeld. De notitie in en kanaal zullen degenen die werden gedefinieerd tijdens het maken van het lid weer, ongeacht de status van de schakelaar. De pin van de schakelaar die is gedefinieerd in de functie van de bank wordt opnieuw ingesteld als een input zonder pull-up weerstand.

Constanten

  • Geen.

Voorbeelden

  • DigitalLatch_example
  • DigitalLatch_bank_example


RotaryEncoder

Deze bibliotheek is bedoeld om te gebruiken met een quadrature encoder. Het aangepast van PJRC de encoder bibliotheek. Het verzonden relatieve berichten. De manier waarop negatieve waarden zijn behandeld kan worden ingesteld. Verbinding maken met de gemeenschappelijke pin van het coderingsprogramma op de grond, de interne pull-up weerstanden zal worden gebruikt. Een ongeldige pincode zal resulteren in de LED op pin 13 knippert 1 Hz.

Lid maken

  • RotaryEncoder (byte pin1 byte PIN2-byte controller, byte kanaal, int speedMultiply, byte pulsesPerStep, byte modus);

PIN1 is de eerste interrupt pin met het coderingsprogramma verbonden.

PIN2 is de tweede interrupt pin met het coderingsprogramma verbonden.

controller is de MIDI-controllernummer (gegevens 1 in de MIDI-bericht). Dit is hoe het eruit zal zien in uw MIDI-software, zoals een uniek adres.

kanaal is het MIDI kanaal selecteren.

speedMultiply is de waarde die zal worden vermenigvuldigd met de relatieve verplaatsing, als het coderingsprogramma niet snel genoeg in uw software. Als, bijvoorbeeld, speedMultiply is ingesteld op 5, en de encoder moesten een '+ 1' boodschap, zal een '+ 5' nu worden verzonden. De standaardwaarde is 1.

pulsesPerStep is het aantal pulsen het coderingsprogramma uitgangen wanneer u zwenking op één stap of klikt u op. Op een normale roterende encoder is dit 4. Wanneer u het ingesteld op 4, verandert deze 1 eenheid in uw software per klik die u, in plaats van 4 inschakelt. Dit is meestal meer logische. Voor de jog-wielen echter kunt u instelt op 1, om te profiteren van de volledige resolutie van het wiel. 'NORMAL_ENCODER' of 'JOGGEN' gebruiken als argument.

modus is de manier die het MIDI-bericht wordt verzonden (zodat het een ondertekende nummer). Er zijn 3 modi beschikbaar. 'ADD_64', 'SIGN_BIT' of 'POS1_NEG127' gebruiken als argument.

Functies

  • Refresh();

Deze functie controleert de encoder positie, en als het is gewijzigd sinds de laatste keer, de relatieve verandering wordt verzonden via MIDI.

Constanten

  • NORMAL_ENCODER

pulsesPerStep tot en met 4, voor normale rotary encoders instellen.

  • JOG

pulsesPerStep ingesteld op 1, voor de jog-wielen.

  • ADD_64

Eerste modus voor relatieve MIDI-berichten. Dit is waarschijnlijk de eenvoudigste. Dit wijst eigenlijk 0 tot 64 (oftewel 128/2). Bijvoorbeeld, als ik wil verzenden -1, voeg ik 64, = 63 en ik stuur het. Als ik wil verzenden + 1, ik ook toevoegen 64, 65 =. Als ik stuur 64, zal de computer niets doen, omdat het weet dat er een waterverplaatsing van 0. (Aan de kant van de computer, ze gewoon aftrekken 64, en u kunt het resultaat gebruiken als niets ooit gebeurde.)

  • SIGN_BIT

Tweede modus voor relatieve MIDI-berichten. Op computers, worden ondertekende waarden meestal opgeslagen met een teken-bit. De teken-bit is de meest significante bit. Wanneer er 0, het getal gedefinieerd door de andere bits positief is, wanneer het is 1, het aantal is negatief. In een MIDI-bericht, dit is beetje 6 (de 7e bit, want het is 0 gebaseerd). Bijvoorbeeld: + 4 zou 0b00000100 en -4 zou 0b01000100.

  • POS1_NEG127

Derde modus voor relatieve MIDI-berichten. + 1 als 1 en -1 127 definiëren. Kunnen we dit blijven: + 2 = 2, en -2 = 126, etc. tot +63 = 63, en-63 = 65.

Voorbeelden

  • Encoder_example

sendMidi.h

Dit is niet een klasse, zijn slechts twee functies. Het ontdekt automatisch wat Arduino u gebruikt, en kiest de juiste instellingen voor het verzenden van een MIDI. (Nota: het is al automatisch inbegrepen als u opneemt van de MIDI_controller-bibliotheek, aangezien de klassen op het vertrouwen voor MIDI mededeling.)

Functies

  • setupMidi (byte ledPin, vertraging);

De MIDI-verbinding ingesteld. Eenmaal in setup uitvoeren.

ledPin is de pin met de aangesloten LED. Dit is meestal 13. De LED knippert telkens als een bericht wordt verzonden. Als u dit niet wilt, of als u wilt gebruiken alle uw pinnen als ingangen, gebruik 'NO_BLINK'.

Delay is de vertraging (in milliseconden) toe te voegen na elk bericht dat verzonden. 5 of 10ms werkt prima. Voor stabiliteit verhogen, verlagen voor snellere reactie. Gebruik 'NO_DELAY' voort te zetten zodra het bericht is verzonden, zonder vertraging. (Nota: het is normaal dat het 'blink led' te zeer dim als u korte of geen vertraging gebruikt, dit is gewoon omdat de on-time erg kort is geworden.)

  • sendMidi (messageType van de byte byte kanaal, byte gegevens1, byte data2);

Een MIDI-bericht verzonden.

messageType is het type van bericht, zoals noteOn, noteOff of CC. Dit is een 4-bits getal.

kanaal is het MIDI kanaal selecteren. Dit is een 4-bits getal ook.

Data1 is de eerste gegevensbyte. Dit is een 7-bits getal.

data2 is de tweede gegevensbyte. Dit is ook een 7-bits getal.

Merk op: Lees stap 6 voor meer informatie over MIDI-berichten.

  • sendMidi (byte messageType, byte kanaal, int data);

Een MIDI-signaal

messageType is het type van bericht, zoals het programma wijzigen of Pitch Bend.

kanaal is het MIDI kanaal selecteren. Dit is een 4-bits getal ook.

gegevens is de waarde die moet worden verzonden. 7-bits in het geval van een wijziging van het programma, te halen van een instrument voor een kanaal of een getal tussen-8192 en 8191 in geval van een Pitch Bend.

Constanten

  • NO_BLINK

De LED knippert niet knipperen wanneer een bericht wordt verzonden. De LED-pin zal ook niet worden ingesteld als output.

  • NO_DELAY

Geen vertraging zal worden toegevoegd nadat het bericht is verzonden.

  • NOTE_ON

Bericht type: 0x90, gebruiken om te schakelen op een noot. Gebruik van NOTE_OFF of opnieuw verzenden met snelheid = 0 weer uitschakelen.

  • NOTE_OFF

Berichttype: 0x80, gebruiken voor het uitschakelen van een notitie.

  • CC

Berichttype: 0xB0 (besturingselement aangepast), gebruiken voor het verzenden van analoge waarden, als waarden uit een potentiometers.

  • PROGRAM_CHANGE

Bericht type: 0xC0 (programma wijzigen), gebruiken om in te stellen van het instrument van een bepaalde zender. (Kanaal 10 is percussie).

  • PITCH_BEND

Bericht type: 0xE0 (Pitch Bend), gebruiken voor het verzenden van grote analoge waarden.

Debug

In de map van de bibliotheek MIDI_controller is er een bestand 'debug.h'. Als u problemen met uw MIDI-berichten ondervindt, uncomment de lijn "#define DEBUG". Dit zal alle MIDI-berichten verzenden via seriële, met 9600 baud, in HEX-notatie. U kunt ook tools zoals 'midisnoop' oplossen van problemen met MIDI-berichten.

Opmerking: Vergeet niet om commentaar van de line-out opnieuw USB‑MIDI om opnieuw te gebruiken.

Voorbeelden

  • sendMidi_example_intoxicated

Gerelateerde Artikelen

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
Arduino MIDI Controller

Arduino MIDI Controller

Een MIDI-controller is een stuk van apparatuur die genereert en stuurt MIDI-data naar MIDI-apparaten. Kortom, hebt u knoppen op uw MIDI-controller, kun je deze knoppen om elk geluid dat je door muzieksoftware wilt programmeren (ex.: Ableton, Garage B
Arduino MIDI-controller - techshop met scarff boarduino

Arduino MIDI-controller - techshop met scarff boarduino

ik heb gekeken rond een aantal verschillende arduino oplossingen voor MIDI. Mijn project concept omvat meer dan 100 analoge ingangen dat elk gevoel van snelheid en voorzien van MIDI-uitgang.   Met behulp van de achtergrondinfo die ik kreeg van techsh
Aangepaste gebouwd MIDI Controller

Aangepaste gebouwd MIDI Controller

Im het aangaan van deze jnstructable de wedstrijd van muziekinstrumenten, als je het gelieve stemming voor mij cos ik graag een nieuwe synth! Als een elektronische muziek producent/performer, heb ik heel wat verschillende MIDI-controllers verzameld d
Arduino Midi-controller voor e-licktronic

Arduino Midi-controller voor e-licktronic

E-licktronic maken 3 verschillende blok te bouwen uw MIDI hardwaremeer informatie http://www.e-licktronic.com/en/
Bouwen van een Basic Midi Controller deel 1 - eenvoudig 3 effecten Pot (Potentiometer) Arduino Uno Midi-Controller (Serial-USB)... Snel, gemakkelijk en goedkoop!

Bouwen van een Basic Midi Controller deel 1 - eenvoudig 3 effecten Pot (Potentiometer) Arduino Uno Midi-Controller (Serial-USB)... Snel, gemakkelijk en goedkoop!

Hallo iedereen,Ik ben relatief nieuw voor de Arduino en zo hebben te kampen met mijn manier om mijn eigen midi-controllers. Er is een enorme hoeveelheid informatie verspreid over maar ik kon het niet vinden een eenvoudige tutorial voor zulk een eenvo
Aangepaste Midi Controller

Aangepaste Midi Controller

Deze tutorial toont je hoe maak je een aangepaste midi-controller. (ervaring met midi-controllers, eenvoudige schakelingen, veronderstelt eenvoudige c codage)Stap 1: Uitzoeken wat regelt u wilt op uw domeincontrollerHoe veel/wat onderdelen wilt u op
BeatSauce - een Laptop Midi Controller hybride

BeatSauce - een Laptop Midi Controller hybride

Voor een lange tijd heb ik gezocht om te bouwen van een aangepaste Midi-controller, en hoewel dit niet precies een nieuwe controller deed ik adem nieuw leven in sommige oude hardware.Met behulp van sommige delen die ik had opgelopen en minimale geld
Maak uw eigen goedkope USB MIDI-Controller of toetsenbord

Maak uw eigen goedkope USB MIDI-Controller of toetsenbord

Ik was op zoek naar een USB MIDI controller-apparaat (of interface) voor muziek toepassingen zoals piano of orgel toetsenbord of pedalboard. Na wat onderzoek wilde ik gaan naar een meer "zelfgemaakte" oplossing. Mijn keuze is tenslotte gericht o
Sugarcube MIDI Controller

Sugarcube MIDI Controller

Dit project is een draagbare, Arduino aangedreven, grid-gebaseerde MIDI controller die zelfstart opwaarts in allerlei apps te doen veel dingen met geluid. Het heeft 16 verlichte knoppen, gebruikt als zowel in- en uitgangen te geven van de controller
Knop MIDI-Controller Arcade

Knop MIDI-Controller Arcade

met een hardware-interface naar uw favoriete muziek / DJ / VJ-software kan echt open deuren in uw creativiteit. De meest voorkomende vorm van controle van de hardware op uw PC voor dergelijke toepassingen is dat een MIDI-gebaseerde controller.Een MID
Teensy Monster v1.0 / / DIY MIDI Controller

Teensy Monster v1.0 / / DIY MIDI Controller

Welkom op de Instructable Teensy Monster!Dit Instructable zal u helpen monteren uw Teensy Monster, begrijpen hoe te programmeren, en bieden veel tips voor het bouwen van een grote DIY controller.teensymonster.CCKoop uw Teensy Monster hier.https://git
Tekenen-het-zelf - MIDI controller met de geleidende inkt

Tekenen-het-zelf - MIDI controller met de geleidende inkt

'Draw It Yourself' is een MIDI-controller met de geleidende inkt als drukknoppen. Het is gebaseerd op de Arduino, en maakt gebruik van een capacitieve sensor (twee, eigenlijk) om te bepalen of de getekende knoppen zijn geraakt of niet.http://sanidanz
MIDI-Controller met toetsenborden

MIDI-Controller met toetsenborden

We bouwen vandaag de 400 sleutel MIDI-controller met behulp van een Arduino en computer toetsenborden!Voor de budget bewuste muziekproducenten daar is dit project een geweldige manier om het bouwen van een goedkope control board voor uw digitale audi