Innehållsförteckning:
- Steg 1: Vad exakt är detta (och vad är inte …)
- Steg 2: Den "gömda" sekvensen med 16 steg
- Steg 3: Hårdvara som behövs och byggs
- Steg 4: Kabeldragning
- Steg 5: Programvara - Någon länk till teori
- Steg 6: Programvara - skissen
- Steg 7: Relaterade projekt
Video: (nästan) Universal MIDI SysEx CC Programmer (och Sequencer ): 7 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:42
I mitten av åttiotalet startade syntesproducenterna en "less is better" -process som ledde till syntet av barbones. Detta gjorde det möjligt att sänka kostnaderna på tillverkarens sida, men gjorde korrigeringsprocessen tediuos om inte omöjlig för den slutliga användaren.
Tillverkare själva och tredjepartsföretag insåg valfria lådor fulla med vred och/eller reglage för att låta dig faktiskt "leka" med dina synths toner, men dessa är dumt för dyra nuförtiden och som alltid är vi tvungna att hitta billiga lösningar själva;)
Detta projekt kom från mitt behov av att enkelt programmera patchar på några av mina senaste synthköp: en Roland Alpha Juno 2 och JX8P. Det började som en enkel SysEx-controller, sedan växte det upp på mig och blev något mer komplext, med andra synthar som stöds på vägen (Korg DW8000, Oberheim Matrix 6/6R, SCI MAX) och en inbyggd sequencer.
I denna instruerbara kommer jag att visa dig hur du förverkligar din egen controller: ett billigt verktyg som emulerar de högt prissatta parameterkontrollboxarna … och mer (läs vidare för detaljer …).
Steg 1: Vad exakt är detta (och vad är inte …)
MIDI SysEx och Control Change -kontrollen här är i huvudsak en 16 rattar (potentiometrar) och 4 knappar MIDI -controller. Standardskissen hanterar tre "sidor", för totalt 48 synttonparametrar.
Jag gjorde controllern kompatibel med MIDI-meddelanden för kontrolländring (en enkel och "global" typ av MIDI-meddelande som i stor utsträckning används av syntillverkare särskilt från 90-talet) och SysEx-meddelanden (en annan typ av MIDI-meddelanden, mycket mindre allmänna och mycket syntespecifika starkt använd på 80 -talet).
I synnerhet är regulatorn som standard kompatibel med:
- Roland Alpha Juno (1/2)
- Roland JX8P
- Korg DW8000
- Oberheim Matrix 6/6R (> 2.14 firmware)
- Sekventiella kretsar MAX/SixTrak.
Du kan så småningom göra det möjligt för handkontrollen att agera på vilken synt som kan ta emot MIDI -kontrolländring (CC) -meddelanden, men den är inaktiverad som standard.
Eftersom det är projektets öppen källkod är det väldigt enkelt att stödja alla andra synt som du väljer (se kodsteget för detaljer).
Tonparametrarnas layout med alla dessa nummer kan vara förvirrande först, men det är inte "slumpmässigt" som det kan se ut: det följer ordningen på tillverkarens MIDI -implementeringstabell. Detta var ett designval för att hålla koden enkel och "universell".
Du kan ladda ner bildark med 4x4 "layout" som jag insåg för Alpha-Junos, JX8P, DW8000, Matrix 6 och MAX/SixTrak på den här sidan: blåa parametrar är de du kan justera på sidan 1, svart dem på sidan 2 och orange de på sidan 3.
Även om handkontrollen inte har någon skärm, blir det en glädje att leka med synthar som visar vilken parameter som ställs in i realtid. JX8P och Matrix 6, till exempel, kan detta; Alpha Juno, istället, visar dig inte parametern som ändras och gör saker lite svårare (men att skapa fantastiska patchar är definitivt genomförbart och enklare än genom att använda det inbyggda knobless gränssnittet); DW8000 har bara numeriska displayer, men du kan se dina tweakins i realtid så att det placeras mittemellan på detta.
Hur är det med knapparna där?
Tja, den första (övre vänster i min layout) är för sidsurfing: hoppa till nästa parameters sida vid varje tryck på knappen. Lysdioder indikerar vilken sida du befinner dig på.
Den andra när du trycker på skicka plåstret där du arbetade tillbaka till synten (räkna ut det: du gjorde ditt livs lapp, tryckte sedan på en programknapp på syntytan och den knappspecifika lappen laddades … allt ditt arbete har gått !). Med den här knappen kan du skicka alla värden som programmeraren hade memorerat under den senaste korrigeringsprocessen. Denna återkallningsprocess fungerar inte om du trycker på randomiseraren igen (randomiseringsprocessen skriver över alla parametrar i minnet) och den är endast effektiv på parametrar som du redigerade minst en gång. Den senaste korrigeringen lagras inte i minnet efter avstängning.
Den tredje är för en sekundär funktion: randomiseraren/lapparen! Vrid rattarna helt moturs för att parametern de verkar på ska låsas till minimivärde (dvs oscillator LFO, oscillatorhölje etc.) eller vrid helt medurs för att maximera värdet (dvs oscillatorblandningsvolym, VCA -volym etc.) och tryck på knappen för att starta randomiseringsprocessen för alla andra parametrar.
Den fjärde knappen är där för att aktivera ett påskägg (typ …) jag placerade i koden efter att ha märkt att layouten var perfekt för … en 16 -stegs MIDI -sekvens! Exakt: tryck på den fjärde knappen (MODE -knappen), styrenheten kommer att gå in i "sequencer -läget" och du kommer att få aktivera anteckningar på samma sätt som den gamla analoga sequencern gjorde. Trevligt öh!
Tryck på MODE -knappen igen för att gå tillbaka till controller/patcher -läge.
Hur är det med dessa lysdioder?
Det finns 4 lysdioder i överensstämmelse med varje knapp (till höger om varje knapp i min layout); dessa lysdioder har flera pourpouses:
1) de berättar vilken parametersida du befinner dig i (övre lysdioden lyser när du är på sida 1, lysdioden under lyser när sida 2 är aktiv, lysdiod 3 lyser … du tänkte själv). Vi är begränsade till 3 sidors bankomat, men koden kan enkelt ställas in för att hantera fler sidor;
2) den andra lysdioden indikerar parametrarna sida 2 OCH lyser när mikrokontrollern skickar föregående patch (patchåterkallning);
3) den tredje lysdioden indikerar parametrarna sida 3 OCH lyser under randomiseringsprocessen.
Den fjärde lysdioden gör ingenting i MIDI -styrläge och används för global MODE -ändring.
Alla dessa funktioner överförs som MIDI -meddelanden, så för att vara effektiv måste din synth kunna/ta emot denna typ av meddelanden
Steg 2: Den "gömda" sekvensen med 16 steg
Som sagt, när jag testade controllern insåg jag att det skulle vara bra att låta en sekvens av toner köra så att jag kunde justera synthparametrar och få en bättre uppfattning om den slutliga effekten på tonen. Jag har en software sequencer (jag gillar seq24 så mycket!), Men denna hårdvara är en nästan PERFEKT 16-stegs sequencer! Då var det bara en fråga om kod för att implementera den.
Du kan växla mellan styrläge och sekvensläge genom att trycka på knapp #4 (MODE -knapp).
Medan knapparna i sequencer -läget fungerar annorlunda och lysdioder ger dig ny information:
- den första knappen (SHIFT -knappen) när den trycks tillåter tempo, notlängd, kanaler och oktavmodifiering; tempovärdet ges av positionen för den första potentiometern, notlängden beräknas från den andra potentiometerpositionen, MIDI-kanaler från den tredje och fjärde potentiometern och oktav (-1 o upp till +2) från den femte potten. Du kan styra tempot från 40 BPM (vrid potentiometern #1 full moturs medan knappen #1 hålls intryckt) till nästan 240 BPM (vrid potentiometern #1 medurs medan knappen #1 hålls intryckt). Du kan ställa in anteckningar längd till halvton, kvartsnot, åttondel, sextonlapp genom att vrida på kruka #2 samtidigt som du håller ned SKIFT -knappen. Du kan ställa in MIDI -kanaler (primärkanal och sekundärkanal) från 1 till 16. Grundtonernas intervall (från C2 till F#4) kan sänkas med en oktav eller ökas med en eller två oktaver.
Som standard är tempot inställt på 120 BPM och notlängden till kvartsnoter.
- den andra knappen startar och stoppar noteringssekvensen. Som sagt, om du ändrar läge genom att trycka på knappen #4 (MODE) medan du kör sekvensen kommer du in i styrläge men sekvensen fortsätter att köras.
- den tredje knappen är en PANIK! Genom att trycka ner det kommer alla toner att stängas av.
- det fjärde används för att växla mellan globala lägen (pather eller sequencer) när knapp #1 inte trycks in, eller mellan sekvenslägen (se nedan) när #1 är nedtryckt.
I sequencer -läge kan du växla mellan tre olika sekvenslägen när du trycker på knappen för lägesval medan du håller knappen #1 (SHIFT) intryckt:
1 - 16 steg monosekvens
2 - 16 steg polysekvens: noter en oktav lägre än de som definieras av krukor utlöses också (detta tömmer 2 röster per slag)
3 - 8 steg poly sekvens, dubbel kanal: två parallella 8 steg sekvenser skickas till två olika kanaler (CH1 och CH2 som standard); genom att ställa in samma kanalvärde både på primär- och sekundärkanalen kan du ha två parallella 8-stegssekvenser som spelas av samma (polyfoniska) synthesizer.
Om lysdioder: så snart du går in i sequencer -läge tänds alla fyra lamporna. När du startar sekvensen följer lysdioder sekvensen (eller sekvenserna). Jag placerade en LED var fjärde potentiometrar och är bra nog för mig. Det skulle vara enkelt att ändra skissen för att hantera 16 lysdioder, en för varje steg du.
Stegföljarens missfunktioner som någon kan hitta nödvändiga: MIDI -synkronisering IN, steg håller (du kan bara stänga av ett steg), CV ut.
Jag har implementerat klockan OUT, men är på något sätt buggig. Jag försökte två tillvägagångssätt för detta (ett med och ett utan timeravbrott), men de båda var ofullkomliga (eller totalt misslyckade). MIDI-klockan måste vara strikt perfekt för att fungera på lång sikt. En klocksignal skickas ändå och du kan inaktivera den direkt på skissen (se senare för detaljer).
Lägg märke till att denna steg -sequencer är MIDI, eller digital om du föredrar det, så för att fungera måste vara ansluten till en synth som är aktiverad för att ta emot och tolka den här typen av meddelanden
Steg 3: Hårdvara som behövs och byggs
Efter alla dessa ord, låt oss ha kul!
Vi går den gemensamma Arduino -vägen. Jag använde en Arduino MEGA på grund av den höga mängden analoga ingångar (vi vill ha en låda full av knoppknoppar, inte sant ?!:)).
I synnerhet kan Arduino MEGA hantera 16 analoga ingångar (med viss hårdvaruinställning, dvs. genom muxing, kan du öka detta men vi går inte denna väg här), så vi kommer att skicka de 48 MIDI -meddelandena via 16 potentiometrar. Varje potentiometer styr sedan tre parametrar, en för varje "sida"; sidorna väljs med en omkopplare.
Hårdvarulista:
- 1x Arduino MEGA
- 16x linjära 10 K ohm potentiometrar med en varv
- 16x grytknappar
- 4x tillfälliga tryckknappar
- 4x LED
- 6x 220 ohm motstånd
- 1x MIDI -kontakt
- 1x ABS -projektlåda
Lite kabel, lödtråd och sex - åtta timmars fritid.
Jag använde en perfboard och några stifthuvuden för att inse en slags skärm som jag lödde motstånden på och riktade kablarna. Detta har fördelen att du låter dig ta ut din Arduino och använda den för andra projekt (vi har alla låg på Arduino -brädor någon gång!). Det är inte obligatoriskt i alla fall och ett annat bra tillvägagångssätt kan vara att avlöda arduino MEGA stifthuvuden och lödkablar direkt på plats.
Jag använde 200 ohm motstånd istället för 220 ohm motstånd och de fungerar perfekt ändå; Jag skulle satsa att även 150 ohm motstånd skulle fungera bra (för både MIDI -kommunikation och lysdioder).
För att forma lådan applicerade jag först lite klisterpapper på lådans yta, mätt var hålen skulle borras (jag hade 3 cm från hål till hål för att låta alla krukor passa) gjorde styrhålen och förstorade sedan till höger storlek för att låta krukor tråd eller knappar tråden att passera med en mini borr. Jag tillbringade mer eller mindre 2 timmar för att slutföra lådan. Jag insåg också små hål och limmade lysdioder på plats.
Jag borrade också ett hål för MIDI OUT-kontakten och ett annat för arduino-strömkontakten (jag använde direkt den inbyggda USB-strömkontakten och låste arduino MEGA ordentligt på plats).
VARNING: bär alltid ALLTID ögon- och händerskydd under borrning, vilket material du än arbetar med (plast, trä, metaller, kompositer … det spelar ingen roll: du är i riskzonen både när det gäller elverktyg och spån av material som eroderas/avfyras från det rörliga verktyget).
Sedan placerade jag alla krukor och knappar och lödde komponenterna enligt bifogad bild. Ett effektivt sätt att minska vikten av det slutliga objektet (och längden på kablar) är att kedja alla krukor både på 5V -linjen och GND -linjen.
Och innan någon frågar: Jag vet, den lådan jag använde är ful! Men det var gratis och inget slår gratis:)
Steg 4: Kabeldragning
Det är enkelt att koppla upp saker som att koppla in en potentiometer (x16), en tryckknapp (x4) och en LED (x4) till ett Arduino -mikrokontrollerkort. Alla Arduino -grunderna behandlas här:)
Kopplingen är ansluten. Lägg märke till att:
- Alla analoga stift används (från A0 till A15), en för varje potentiometer;
- 4 digitala stift (ingångar) används (från D51, D49, D47, D45), en för varje knapp;
- andra 4 digitala stift (utgångar) används för lysdioder (D43, D41, D39, D37);
- MIDI out -anslutning är mycket enkel och ber om två 220 ohm motstånd (men ner till 150 ohm fungerar)
- Knappar kräver inte att nedrullningsmotstånd är att skissen aktiverar de interna Arduinos pullup -motstånd.
- Varje lysdiod ber om ett strömbegränsande motstånd (200-220 ohm är ok för gröna lysdioder).
Jag använde de listade digitala stiften för varor, men de är inte "speciella" stift (vi använder inte pwm-funktionen hos några stift här eller någon annan stiftsspecifik funktion): du kan ställa in dina favorit digitala stift, men kom ihåg att ändra koden i enlighet därmed så fungerar inte dina knappar/lysdioder!
Observera att MIDI OUT -anslutningen på bilden är FRAMVy (inte bakifrån).
Steg 5: Programvara - Någon länk till teori
Jag tänker inte förklara hela teorin bakom System Exclusive eller Control Change -meddelanden eftersom det finns gott om bra artiklar där ute och det är dumt att skriva om det som redan har skrivits.
Bara en snabb länk för implementering av Roland SysEx:
- https://erha.se/~ronny/juno2/Roland%20Juno%20MIDI%2… (ENGLISH)
- https://www.2writers.com/eddie/tutsysex.htm (ENGLISH)
- https://www.chromakinetics.com/handsonic/rolSysEx.h… (ENGLISH)
- https://www.audiocentralmagazine.com/system-exclusi… (ITALIANO)
och lite länk för MIDI i allmänhet:
-
-https://www.music-software-development.com/midi-tut…
Steg 6: Programvara - skissen
Här bifogad är skissen du ska ladda upp till din Arduino Mega.
Jag försökte hålla programmeraren så "universell" som möjligt, vilket innebär att jag försökte minska syntspecifika kodbitar. Jag försökte hålla koden så enkel som möjligt. Att lägga till step sequencer gjorde saker mer komplexa och koden mer rörig, i alla fall var det värt det för mig. Att behålla koden "universell" är varför regulatorlayouten är så "slumpmässig": den följer parameterordningen för MIDI -implementeringen som syntillverkaren definierade i manualen. Det kan vara förvirrande först, men du kommer att vara van vid det väldigt snabbt.
Standardkoden/skissen/fast programvaran stöder "bara" 48 parametrar (tre sidor med 16 rattar vardera) så det kan inte vara möjligt att styra alla MIDI -meddelanden som stöds av din synth (tänk på ett Access Virus eller Novation Supernova: de accepterar mer eller mindre 110 MIDI -kompatibla parametrar). Du kan enkelt ändra skissen för att stödja fler meddelanden om det behövs.
Egentligen stöds SysEx-meddelanden som är kompatibla med Roland Alpha-Juno, JX8P, Korg DW8000 och Oberheim Matrix 6. Jag lämnade koden för Juno 106 -kompatibla meddelanden om du skulle behöva det.
För Matrix 6 var jag tvungen att välja de parametrar som ska styras. Jag utelämnade det tredje kuvertet, den andra rampen och något annat. Matrisen kan inte styras via MIDI ändå, så den är ute också. Du behöver den uppdaterade firmware (ver. 2.14 eller senare) och du bör ställa in parametern "Master -> Sysex Enable" till "3".
Klockan är på något sätt buggig (klockan måste vara strikt perfekt för att fungera som den ska och förmodligen de två tillvägagångssätten jag antog var inte effektiva). Som standard är den inaktiverad.
Koden innehåller kommentarer, så det finns ingen anledning att kommentera ytterligare här.
Som alltid: kom ihåg att jag inte är en kodare i verkligheten och det finns säkert bättre sätt att koda vad vi behöver här. Om du är en kodare och har förslag är du välkommen! Skicka mig en variant som kan öka kodens effektivitet/effektivitet så tar jag med den till huvudskissen (med hänvisning till bidragsgivaren självklart!).
Jag lär mig alltid något nytt genom att läsa någon bra kodarkod;)
Steg 7: Relaterade projekt
Så vitt jag vet finns det ingen MIDI -parameterstyrenhet och sequencer där ute (kanske den gamla Behringer BCR2000 med en modifierad firmware?)
hur som helst, om du inte är benägen att förverkliga en sådan här låda men är mycket intresserad av billiga lösningar för att fjärrstyra dina syntparametrar, överväg dessa andra alternativ:
- CTRL MIDI -redigerare: det här är ett lysande, gratis open source -program som körs på win/Linux/mac som kan göra din dator till en fullständig controller för SysEx -syntar
- David Konsumer "junosexuella" CC -omvandlare: detta projekt kräver mindre hårdvaruarbete på din sida och idén är fantastisk - en arduino -baserad CC till SysEx -omvandlare som låter dig använda en vanlig icke -SysEx MIDI -kontroller (dvs. ett AKAI MPK -huvudtangentbord) för att prata med din SysEx-klara synth
Rekommenderad:
Förvandla nästan allt till en högtalare: 13 steg (med bilder)
Förvandla nästan vad som helst till en högtalare: Du kan göra nästan alla objekt till en högtalare med hjälp av en piezoskiva och en handfull ytterligare komponenter. Även om detta kan verka som magi, finns det faktiskt en ganska enkel teknisk förklaring. Genom att köra en piezoskiva med en förstärkare kan skivan
Patchfinder - en MIDI SysEx och Control Change Patcher Randomizer: 4 steg
Patchfinder - en MIDI SysEx och Control Change Patcher Randomizer: Nyligen köpte jag ett par gamla/vintage billiga Synths från Roland: en Alpha -Juno och en JX8P (ja, en Korg DW8000 också efter en kort stund). Som du säkert vet är de inte det lättaste att skapa en patch med på grund av avsaknaden av en " en kruka/bild
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Programmerbar RGB LED -sequencer (med Arduino och Adafruit Trellis): 7 steg (med bilder)
Programmerbar RGB LED -sequencer (med Arduino och Adafruit Trellis): Mina söner ville att färg -LED -remsor skulle lysa upp deras skrivbord, och jag ville inte använda en konserverad RGB -stripkontroll, eftersom jag visste att de skulle bli uttråkad av de fasta mönstren dessa kontroller har. Jag trodde också att det skulle vara ett utmärkt tillfälle att skapa
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid