Inhoudsopgave:
- Stap 1: Wat is dit precies (en wat niet…)
- Stap 2: De "verborgen" 16 Steps Sequencer
- Stap 3: Benodigde hardware en bouwen
- Stap 4: Bedrading
- Stap 5: Software - Enige link naar theorie
- Stap 6: Software - de schets
- Stap 7: Gerelateerde projecten
Video: (bijna) Universal MIDI SysEx CC Programmer (en Sequencer): 7 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Halverwege de jaren tachtig begonnen synths-fabrikanten een "minder is beter"-proces dat leidde tot barebones-synths. Dit zorgde voor een verlaging van de kosten aan de kant van de fabrikant, maar maakte het patchproces eentonig, zo niet onmogelijk voor de eindgebruiker.
Fabrikanten zelf en externe bedrijven hebben optionele dozen vol knoppen en/of schuifregelaars gerealiseerd om je echt met je synths-klanken te laten "spelen", maar deze zijn tegenwoordig belachelijk duur en, zoals altijd, zijn we gedwongen om zelf goedkope oplossingen te vinden;)
Dit project kwam voort uit mijn behoefte om gemakkelijk patches te programmeren op enkele van mijn nieuwste synths-aankopen: een Roland Alpha Juno 2 en JX8P. Het begon als een eenvoudige SysEx-controller, groeide bij mij op en werd iets complexer, met onderweg ondersteuning van andere synths (Korg DW8000, Oberheim Matrix 6/6R, SCI MAX) en een ingebouwde sequencer.
In deze instructable laat ik je zien hoe je je eigen controller kunt realiseren: een goedkope tool die die dure parametercontroleboxen emuleert… en meer (lees verder voor details…).
Stap 1: Wat is dit precies (en wat niet…)
De MIDI SysEx- en Control Change-controller is hier in wezen een 16-knoppen (potentiometers) en 4-knoppen MIDI-controller. De standaardschets behandelt drie "pagina's", voor een totaal van 48 synth-toonparameters.
Ik heb de controller compatibel gemaakt met MIDI-berichten voor besturingswijzigingen (een eenvoudig en "algemeen" type MIDI-bericht dat veel wordt gebruikt door synthfabrikanten, vooral uit de jaren 90) en SysEx-berichten (een ander type MIDI-bericht, veel minder algemeen en zeer synth-specifiek zwaar gebruikt in de jaren 80).
In het bijzonder is de controller standaard compatibel met:
- Roland Alpha Juno (1/2)
- Roland JX8P
-Korg DW8000
- Oberheim Matrix 6/6R (> 2.14 firmware)
- Sequentiële circuits MAX/SixTrak.
Je kunt de controller uiteindelijk laten werken op elke synth die MIDI Control Change (CC)-berichten kan ontvangen, maar deze is standaard uitgeschakeld.
Omdat het project open source is, is het heel gemakkelijk om een andere synth naar keuze te ondersteunen (zie de codestap voor details).
De lay-out van de toonparameters met al die nummers kan in het begin verwarrend zijn, maar het is niet "willekeurig" zoals het eruit zou kunnen zien: het volgt de volgorde van de MIDI-implementatiekaart van de fabrikant. Dit was een ontwerpkeuze om de code eenvoudig en "universeel" te houden.
U kunt fotobladen downloaden met de 4x4 "lay-out" die ik heb gerealiseerd voor Alpha-Junos, JX8P, DW8000, Matrix 6 en MAX/SixTrak op deze pagina: blauwe parameters zijn de parameters die u kunt aanpassen op pagina 1, zwarte die op pagina 2 en oranje die op pagina 3.
Zelfs als de controller geen scherm heeft, maakt het spelen met synths die je in realtime laten zien welke parameter wordt gestemd, het maken van een patch een plezier. De JX8P en Matrix 6 zijn hier bijvoorbeeld toe in staat; de Alpha Juno toont daarentegen niet de parameter die wordt gewijzigd en maakt het een beetje moeilijker (maar het maken van geweldige patches is zeker uitvoerbaar en gemakkelijker dan door de ingebouwde knoploze interface te gebruiken); DW8000 heeft alleen numerieke displays, maar je kunt je tweakins in realtime zien, dus het staat hier tussenin.
Hoe zit het met die knoppen daar?
Welnu, de eerste (linksboven in mijn lay-out) is voor het surfen op pagina's: spring naar de volgende parameterpagina bij elke druk op de knop. LED's geven aan op welke pagina u zich bevindt.
De tweede keer dat je erop drukt, stuur je de patch waar je aan werkte terug naar de synth (begrijp je goed: je hebt de patch van je leven gemaakt, vervolgens een programmaknop op het synth-oppervlak aangeraakt en de knopspecifieke patch is geladen … al je werk is verdwenen !). Met deze knop kunt u alle waarden verzenden die de programmeur tijdens het laatste patchproces in het geheugen had opgeslagen. Dit patch-oproepproces werkt niet als u nogmaals op de randomizer drukt (randomiseringsproces overschrijft alle parameters in het geheugen) en het is alleen effectief voor parameters die u minstens één keer hebt bewerkt. De laatste patch wordt na het afsluiten niet in het geheugen bewaard.
De derde is voor een secundaire functie: de randomizer/patcher! Draai de knoppen waarop u wilt dat de parameter waarop ze werken volledig tegen de klok in op de minimumwaarde (dwz oscillator LFO, oscillator-envelope, enz.) of draai volledig met de klok mee om de waarde te maximaliseren (dwz oscillatormixvolume, VCA-volume, enz.) en druk op de knop om het randomisatieproces voor alle andere parameters te starten.
De vierde knop is er om een paasei te activeren (soort van…) Ik plaatste de code nadat ik merkte dat de lay-out perfect was voor… een 16 stappen MIDI-sequencer! Precies: druk op de vierde knop (MODE-knop), de controller gaat naar de "sequencermodus" en je mag noten triggeren op dezelfde manier als die oude analoge sequencer. Leuk hè!
Druk nogmaals op de MODE-knop om terug te gaan naar de controller/patcher-modus.
Hoe zit het met die LED's?
Er zijn 4 LED's in overeenstemming met elke knop (rechts van elke knop in mijn lay-out); deze LED's hebben meerdere schenktuiten:
1) ze vertellen u op welke parameterpagina u zich bevindt (bovenste LED brandt als u zich op pagina 1 bevindt, LED onderaan brandt wanneer pagina 2 actief is, LED 3 brandt… u hebt het zelf bedacht). We zijn beperkt tot 3 pagina's ATM, maar de code kan eenvoudig worden aangepast om meer pagina's te verwerken;
2) de tweede LED geeft parameters pagina 2 aan EN brandt wanneer de microcontroller de vorige patch verzendt (patch recall);
3) de derde LED geeft parameters pagina 3 aan EN brandt tijdens het randomisatieproces.
De vierde LED doet niets in de MIDI-controllermodus en wordt gebruikt voor globale MODE-wijziging.
Al deze functies worden verzonden als MIDI-berichten, dus om effectief te zijn, moet uw synth in staat zijn om dit soort berichten te ontvangen en te interpreteren
Stap 2: De "verborgen" 16 Steps Sequencer
Zoals gezegd, realiseerde ik me tijdens het testen van de controller dat het geweldig zou zijn om een reeks noten te laten lopen, zodat ik de synth-parameters kon aanpassen en een beter idee zou krijgen van het uiteindelijke effect op de toon. Ik heb een software sequencer (ik vind seq24 zo leuk!), maar deze hardware is een bijna PERFECTE 16-steps sequencer! Daarna was het alleen nog een kwestie van code om het te implementeren.
U kunt schakelen tussen controllermodus en sequencermodus door op knop #4 (MODE-knop) te drukken.
In de sequencermodus werken de knoppen anders en geven LED's nieuwe informatie:
- de eerste knop (SHIFT-knop) wanneer ingedrukt, zorgt voor wijziging van tempo, nootlengte, kanalen en octaaf; de tempowaarde wordt gegeven door de positie van de eerste potentiometer, de nootlengte wordt berekend vanaf de tweede potentiometerpositie, MIDI-kanalen van de derde en vierde potentiometerposities en octaaf (-1 o tot +2) vanaf de vijfde pot. U kunt het tempo regelen van 40 BPM (draai potentiometer #1 volledig tegen de klok in terwijl u knop #1 ingedrukt houdt) tot bijna 240 BPM (draai potentiometer #1 volledig met de klok mee terwijl u knop #1 ingedrukt houdt). U kunt de lengte van de noten instellen op halve noot, kwartnoot, achtste noot, zestiende noot door pot #2 te draaien terwijl u de SHIFT-knop ingedrukt houdt. U kunt MIDI-kanalen (primair kanaal en secundair kanaal) instellen van 1 tot 16. Het bereik van de basisnoten (van C2 tot F#4) kan met één octaaf worden verlaagd of met één of twee octaven worden verhoogd.
Standaard is het tempo ingesteld op 120 BPM en de nootlengte op kwartnoten.
- de tweede knop start en stopt de notenreeks. Zoals gezegd, als u van modus verandert door op knop #4 (MODE) te drukken terwijl u de reeks uitvoert, gaat u naar de controllermodus, maar de reeks blijft lopen.
- de derde knop is een PANIEK! Door deze in te drukken worden alle noten uitgeschakeld.
- de vierde wordt gebruikt om te schakelen tussen globale modi (pather of sequencer) wanneer knop #1 niet wordt ingedrukt, of tussen sequentiemodi (zie hieronder) wanneer #1 wordt ingedrukt.
Als u in de sequencermodus op de modusselectieknop drukt terwijl u knop #1 (SHIFT) ingedrukt houdt, kunt u tussen 3 verschillende sequentiemodi schakelen:
1 - 16 stappen monosequentie
2 - 16 stappen poly-sequence: noten die een octaaf lager zijn dan die gedefinieerd door potten worden ook getriggerd (dit verbruikt 2 stemmen per tel)
3 - 8 stappen poly sequentie, tweekanaals: twee parallelle 8 stappen sequenties worden naar twee verschillende kanalen gestuurd (standaard CH1 en CH2); door dezelfde kanaalwaarde in te stellen op zowel het primaire als het secundaire kanaal, kunt u twee parallelle reeksen van 8 stappen door dezelfde (polyfone) synthesizer laten afspelen.
Over LED's: zodra u in de sequencer-modus komt, gaan alle vier de lampjes branden. Wanneer u de reeks start, zullen LED's de reeks (of de reeksen) volgen. Ik heb om de vier potmeters een LED geplaatst en dat is goed genoeg voor mij. Het zou eenvoudig zijn om de schets aan te passen om 16 LED's aan te kunnen, één voor elke stap.
De step sequencer mist functies die iemand nodig zou kunnen vinden: MIDI sync IN, steps hold (je kunt alleen een step uitschakelen), CV out.
Ik heb klok OUT geïmplementeerd, maar is op de een of andere manier buggy. Ik heb hiervoor twee benaderingen geprobeerd (een met en een zonder timeronderbrekingen), maar ze waren allebei onvolmaakt (of een totale mislukking). MIDI-klok moet strikt perfect zijn om op de lange termijn te werken. Er wordt sowieso een kloksignaal verzonden en u kunt dit direct op de schets uitschakelen (zie later voor details).
Merk op dat deze step sequencer MIDI is, of digitaal als je dat liever hebt, dus om te werken moet hij zijn aangesloten op een synth die ingeschakeld is om dit soort berichten te ontvangen en te interpreteren
Stap 3: Benodigde hardware en bouwen
Laten we na al deze woorden wat plezier hebben!
We gaan op de gebruikelijke Arduino-manier. Ik heb een Arduino MEGA gebruikt vanwege het grote aantal analoge ingangen (we willen een doos vol knobbelige knoppen, nietwaar?!:)).
In het bijzonder kan Arduino MEGA 16 analoge inputs aan (met wat hardware tweaken, d.w.z. door muxing, kun je dit verhogen, maar we gaan hier niet deze route), dus we gaan de 48 MIDI-berichten verzenden via 16 potentiometers. Elke potentiometer regelt dan drie parameters, één voor elke "pagina"; pagina's worden geselecteerd door een schakelknop.
Hardwarelijst:
- 1x Arduino MEGA
- 16x lineaire, enkele slag 10 K ohm potentiometers
- 16x potknoppen
- 4x kortstondige drukknoppen
- 4x LED
- 6x 220 ohm weerstand
- 1x MIDI-aansluiting
- 1x ABS projecten doos
Wat kabel, soldeerdraad en zes tot acht uur vrije tijd.
Ik gebruikte een perfboard en enkele pin-headers om een soort schild te realiseren waarop ik de weerstanden heb gesoldeerd en de kabels heb geleid. Dit heeft het voordeel dat je je Arduino eruit kunt halen en voor andere projecten kunt gebruiken (we hebben allemaal op een gegeven moment weinig Arduino-boards!). Het is sowieso niet verplicht en een andere goede aanpak zou kunnen zijn om de Arduino MEGA-pinheaders te desolderen en kabels direct op hun plaats te solderen.
Ik heb 200 ohm weerstanden gebruikt in plaats van 220 ohm weerstanden en ze werken toch perfect; ik durf te wedden dat zelfs weerstanden van 150 ohm geweldig zouden werken (voor zowel MIDI-communicatie als LED's).
Om de doos vorm te geven, heb ik eerst wat lijm op het oppervlak van de doos aangebracht, gemeten waar de gaten moesten worden geboord (ik had 3 cm van gat tot gat om alle potten te laten passen) de geleidegaten gemaakt en vervolgens naar rechts vergroot maat om potten te laten rijgen of knopen door te rijgen met een miniboor. Ik heb min of meer 2 uur besteed aan het afmaken van de doos. Ik realiseerde ook kleine gaatjes en lijmde LED's op hun plaats.
Ik heb ook een gat geboord voor de MIDI OUT-connector en een andere voor de arduino-stroomconnector (ik gebruikte rechtstreeks de ingebouwde USB-stroomconnector en vergrendelde de arduino MEGA stevig op zijn plaats).
WAARSCHUWING: draag ALTIJD oog- en handbescherming tijdens het boren, ongeacht het materiaal waarmee u werkt (kunststof, hout, metalen, composieten… het maakt niet uit: u loopt risico zowel met betrekking tot elektrisch gereedschap als met schilfers van geërodeerd/afgebrand materiaal van het bewegende gereedschap).
Vervolgens heb ik alle potten en knoppen geplaatst en de componenten gesoldeerd volgens de bijgevoegde afbeelding. Een effectieve manier om het gewicht van het uiteindelijke object (en de lengte van de kabels) te verminderen, is om alle potten op zowel de 5V-lijn als de GND-lijn in serie te schakelen.
En voordat iemand het vraagt: ik weet het, die doos die ik heb gebruikt is lelijk! Maar het was gratis en er gaat niets boven gratis:)
Stap 4: Bedrading
Bedrading is eenvoudig door een potentiometer (x16), een drukknop (x4) en LED (x4) aan te sluiten op een Arduino-microcontrollerbord. Alle basisprincipes van Arduino komen hier aan bod:)
Bijgevoegd is de bedrading. Let erop dat:
- Alle analoge pinnen worden gebruikt (van A0 tot A15), één voor elke potentiometer;
- Er worden 4 digitale pinnen (ingangen) gebruikt (van D51, D49, D47, D45), één voor elke knop;
- andere 4 digitale pinnen (uitgangen) worden gebruikt voor LED's (D43, D41, D39, D37);
- MIDI out aansluiting is heel eenvoudig en vraagt om twee 220 ohm weerstanden (maar tot 150 ohm werkt ook)
- Knoppen vragen niet om pulldown-weerstanden, omdat de sketch de interne Arduino's pullup-weerstanden activeert.
- Elke LED vraagt om een stroombegrenzingsweerstand (200-220 ohm is ok voor groene LED's).
Ik heb de vermelde digitale pinnen gebruikt voor comodity, maar het zijn geen "speciale" pinnen (we gebruiken hier niet de pwm-mogelijkheid van sommige pinnen of een andere pin-specifieke functie): u kunt uw favoriete digitale pinnen instellen, maar vergeet niet om te wijzigen de code dienovereenkomstig of uw knoppen/LED's zullen niet werken!
Houd er rekening mee dat de MIDI OUT-aansluiting in de afbeelding VOORaanzicht is (niet achteraanzicht).
Stap 5: Software - Enige link naar theorie
Ik ga niet de volledige theorie achter System Exclusive- of Control Change-berichten uitleggen, omdat er veel goede artikelen zijn en het dwaas is om te herschrijven wat al is geschreven.
Gewoon een snelle link voor de implementatie van Roland SysEx:
- https://erha.se/~ronny/juno2/Roland%20Juno%20MIDI%2… (NEDERLANDS)
- https://www.2writers.com/eddie/tutsysex.htm (ENGELS)
- https://www.chromakinetics.com/handsonic/rolSysEx.h… (NEDERLANDS)
- https://www.audiocentralmagazine.com/system-exclusi… (ITALIANO)
en een link voor MIDI in het algemeen:
-
-
Stap 6: Software - de schets
Hier bijgevoegd is de schets die u moet uploaden naar uw Arduino Mega.
Ik heb geprobeerd de programmer zo "universeel" mogelijk te houden, wat inhoudt dat ik synth-specifieke stukjes code heb proberen te verminderen. Ik heb geprobeerd de code zo eenvoudig mogelijk te houden. Het toevoegen van de step sequencer maakte de zaken complexer en de code rommeliger, hoe dan ook, het was het voor mij waard. Door de code "universeel" te houden, is de lay-out van de controller zo "willekeurig": het volgt de parametervolgorde van de MIDI-implementatie die de synthfabrikant in de handleiding heeft gedefinieerd. In het begin kan het verwarrend zijn, maar je zult er heel snel aan gewend zijn.
De standaardcode/schets/firmware ondersteunt "slechts" 48 parameters (drie pagina's van elk 16 knoppen), dus het kan niet mogelijk zijn om alle MIDI-berichten die door uw synth worden ondersteund te besturen (denk aan een Access Virus of Novation Supernova: ze accepteren meer of minder 110 MIDI-compatibele parameters). U kunt de schets indien nodig eenvoudig wijzigen om meer berichten te ondersteunen.
Eigenlijk worden SysEx-berichten die compatibel zijn met Roland Alpha-Juno, JX8P, Korg DW8000 en Oberheim Matrix 6 ondersteund. Ik heb de code achtergelaten voor Juno 106-compatibele berichten voor het geval je dat nodig hebt.
Voor Matrix 6 moest ik de parameters selecteren om te regelen. Ik heb de derde envelop, de tweede helling en nog iets weggelaten. De matrix kan sowieso niet via MIDI worden aangestuurd, dus hij is ook uit. U hebt de bijgewerkte firmware nodig (ver. 2.14 of hoger) en u moet de parameter "Master -> Sysex Enable" instellen op "3".
Clock-out is op de een of andere manier buggy (klok moet strikt perfect zijn om te werken zoals het hoort en waarschijnlijk waren de twee benaderingen die ik heb aangenomen niet effectief). Standaard is deze uitgeschakeld.
De code bevat opmerkingen, dus het is niet nodig om hier verder commentaar te geven.
Zoals altijd: onthoud dat ik in het echte leven geen programmeur ben en er zijn zeker betere manieren om te coderen wat we hier nodig hebben. Als je een codeur bent en een suggestie hebt, ben je welkom! Stuur me alstublieft elke variatie die de efficiëntie/effectiviteit van de code kan verhogen en ik zal deze opnemen in de hoofdschets (uiteraard met vermelding van de bijdrager!).
Ik leer altijd iets nieuws door de code van een goede codeur te lezen;)
Stap 7: Gerelateerde projecten
Voor zover ik weet, is er geen MIDI-parametercontroller en sequencer (misschien de oude Behringer BCR2000 met een aangepaste firmware?)
hoe dan ook, als je niet geneigd bent om zo'n box te realiseren, maar erg geïnteresseerd bent in goedkope oplossingen om je synth-parameters op afstand te bedienen, overweeg dan deze andere alternatieven:
- CTRL MIDI-editor: dit is een briljant, gratis open source-programma dat draait op win/Linux/mac en dat je pc kan veranderen in een volledige controller voor SysEx-synths
- David Konsumer's "junosex" CC-converter: dit project vraagt om klein hardwarewerk aan uw zijde en het idee is geweldig - een op arduino gebaseerde CC naar SysEx-converter waarmee u een gewone niet-SysEx MIDI-controller kunt gebruiken (dwz een AKAI MPK-masterkeyboard) om met uw SysEx-ready synth te spreken
Aanbevolen:
Parallel Sequencer Synth: 17 stappen (met afbeeldingen)
Parallel Sequencer Synth: Dit is een handleiding voor het maken van een eenvoudige sequencer. Een sequencer is een apparaat dat cyclisch een reeks stappen produceert die vervolgens een oscillator aansturen. Elke stap kan aan een andere toon worden toegewezen en zo interessante sequenties of audio-effecten creëren
Simple Sequencer: 16 stappen (met afbeeldingen)
Simple Sequencer: Een van de sleutels tot het maken van goede muziek is hersenloze herhaling. Dat is waar de simpele sequencer goed in is. Het doet steeds weer hetzelfde in een reeks van acht noten. U kunt de frequentie van de noot, de duur van de noot en
Verander bijna alles in een luidspreker: 13 stappen (met afbeeldingen)
Verander bijna alles in een luidspreker: je kunt bijna elk object in een luidspreker veranderen door een piëzo-schijf en een handvol extra componenten te gebruiken. Hoewel dit misschien magisch lijkt, is er eigenlijk een vrij eenvoudige technische verklaring. Door een piëzoschijf aan te drijven met behulp van een versterker, wordt de schijf
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
Programmeerbare RGB LED-sequencer (met Arduino en Adafruit Trellis): 7 stappen (met afbeeldingen)
Programmeerbare RGB LED-sequencer (met Arduino en Adafruit Trellis): mijn zonen wilden gekleurde LED-strips om hun bureau te verlichten, en ik wilde geen ingeblikte RGB-stripcontroller gebruiken, omdat ik wist dat ze zich zouden vervelen met de vaste patronen deze regelaars hebben. Ik dacht ook dat het een geweldige kans zou zijn om