Spisu treści:
- Krok 1: Czym dokładnie jest ta rzecz (a czym nie jest…)
- Krok 2: „Ukryty” 16-krokowy sekwencer
- Krok 3: Potrzebny sprzęt i budowa
- Krok 4: Okablowanie
- Krok 5: Oprogramowanie - trochę odniesień do teorii
- Krok 6: Oprogramowanie - szkic
- Krok 7: Powiązane projekty
Wideo: (prawie) Universal MIDI SysEx CC Programmer (i Sequencer): 7 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
W połowie lat osiemdziesiątych producenci syntezatorów rozpoczęli proces „mniej znaczy lepiej”, który doprowadził do powstania syntezatorów typu barebone. Pozwoliło to na obniżenie kosztów po stronie producenta, ale sprawiło, że proces patchowania był uciążliwy, jeśli nie niemożliwy dla końcowego użytkownika.
Sami producenci i firmy zewnętrzne zrealizowali opcjonalne pudełka pełne pokręteł i/lub suwaków, abyś mógł „pobawić się” brzmieniami syntezatorów, ale te są w dzisiejszych czasach głupio zawyżone i jak zwykle zmuszeni jesteśmy sami szukać tanich rozwiązań;)
Ten projekt powstał z potrzeby łatwego programowania łat na niektórych z moich najnowszych syntezatorów: Roland Alpha Juno 2 i JX8P. Zaczęło się od prostego kontrolera SysEx, potem wyrosło na mnie i stało się czymś bardziej złożonym, z innymi obsługiwanymi syntezatorami (Korg DW8000, Oberheim Matrix 6/6R, SCI MAX) i wbudowanym sekwencerem.
W tej instrukcji pokażę, jak zrealizować własny kontroler: tanie narzędzie, które emuluje te drogie pola kontrolne parametrów… i więcej (czytaj dalej po szczegóły…).
Krok 1: Czym dokładnie jest ta rzecz (a czym nie jest…)
Kontroler MIDI SysEx i Control Change to w zasadzie 16 pokręteł (potencjometrów) i 4 przyciski kontrolera MIDI. Domyślny szkic obsługuje trzy „strony”, co daje łącznie 48 parametrów brzmień syntezatora.
Uczyniłem kontroler kompatybilnym z komunikatami MIDI o zmianie sterowania (prosty i "globalny" typ komunikatu MIDI powszechnie używany przez producentów syntezatorów, zwłaszcza od lat 90-tych) oraz komunikaty SysEx (inny typ komunikatu MIDI, znacznie mniej ogólny i wysoce specyficzny dla syntezatora używany w latach 80-tych).
W szczególności sterownik domyślnie jest kompatybilny z:
- Roland Alpha Juno (1/2)
- Roland JX8P
- Korg DW8000
- Oberheim Matrix 6/6R (> oprogramowanie układowe 2.14)
- Obwody sekwencyjne MAX/SixTrak.
Możesz ewentualnie umożliwić kontrolerowi działanie na dowolnym syntezatorze, który może odbierać komunikaty zmiany sterowania MIDI (CC), ale domyślnie jest to wyłączone.
Ponieważ projekt ma charakter open source, bardzo łatwo jest obsługiwać dowolny inny wybrany przez Ciebie syntezator (szczegóły znajdziesz w kroku kodu).
Układ parametrów brzmienia z tymi wszystkimi liczbami może być początkowo mylący, ale nie jest to „losowy”, jak mogłoby się wydawać: jest zgodny z kolejnością producenta w tabeli implementacji MIDI. Był to wybór projektu, aby kod był prosty i „uniwersalny”.
Możesz pobrać arkusze zdjęć z "układem" 4x4, który zrealizowałem dla Alpha-Junos, JX8P, DW8000, Matrix 6 i MAX/SixTrak na tej stronie: niebieskie parametry to te, które możesz dostosować na stronie 1, czarne te na stronie 2 i pomarańczowe te na stronie 3.
Nawet jeśli kontroler nie ma ekranu, zabawa z syntezatorami, które pokazują, jaki parametr jest strojony w czasie rzeczywistym, sprawia, że proces tworzenia łaty staje się przyjemnością. Na przykład JX8P i Matrix 6 są do tego zdolne; Alpha Juno zamiast tego nie pokazuje zmienianego parametru i sprawia, że wszystko jest trochę trudniejsze (ale tworzenie niesamowitych łatek jest zdecydowanie wykonalne i łatwiejsze niż przy użyciu wbudowanego interfejsu bez pokręteł); DW8000 ma tylko wyświetlacze numeryczne, ale możesz zobaczyć swoje poprawki w czasie rzeczywistym, więc umieszcza się pomiędzy nimi.
A co z tymi przyciskami?
Cóż, pierwszy (lewy górny róg mojego układu) służy do przeglądania stron: przeskakuj do strony z kolejnymi parametrami za każdym naciśnięciem przycisku. Diody LED wskazują, na której stronie się znajdujesz.
Drugie po naciśnięciu wysyła łatkę, w której pracujesz, z powrotem do syntezatora (wyobraź sobie: stworzyłeś łatkę swojego życia, następnie dotknąłeś przycisku programu na powierzchni syntezatora i łatka dla danego przycisku została załadowana… cała twoja praca zniknęła !). Za pomocą tego przycisku możesz przesłać wszystkie wartości, które programista zapamiętał podczas ostatniego procesu łączenia. Ten proces przywracania poprawek nie działa, jeśli ponownie naciśniesz randomizer (proces losowania nadpisuje wszystkie parametry w pamięci) i działa tylko w przypadku parametrów, które edytowałeś co najmniej raz. Najnowsza poprawka nie jest przechowywana w pamięci po wyłączeniu.
Trzecia dotyczy funkcji drugorzędnej: randomizatora/łatarki! Przekręć do końca w kierunku przeciwnym do ruchu wskazówek zegara pokrętła, na których parametr ma działać, aby zablokować do wartości minimalnej (tj. LFO oscylatora, obwiednia oscylatora itp.) lub obróć do końca w prawo, aby zmaksymalizować wartość (tj. głośność miksu oscylatora, głośność VCA itp.) i naciśnij przycisk uruchamiający proces losowania dla wszystkich pozostałych parametrów.
Czwarty przycisk służy do aktywacji easter egga (tak jakby…) umieściłem w kodzie po tym, jak zauważyłem, że układ był idealny dla… 16-stopniowego sekwencera MIDI! Dokładnie: naciśnij czwarty przycisk (przycisk MODE), kontroler wejdzie w „tryb sekwencera” i będziesz mógł wyzwalać nuty w podobny sposób, jak robił to stary sekwencer analogowy. Fajnie!
Naciśnij ponownie przycisk MODE, aby wrócić do trybu kontrolera/programatora.
A co z tymi diodami?
Do każdego przycisku odpowiadają 4 diody LED (po prawej stronie każdego przycisku w moim układzie); te diody LED mają wiele funkcji:
1) informują, na której stronie parametrów jesteś (górna dioda świeci, gdy jesteś na stronie 1, dioda pod spodem świeci, gdy strona 2 jest aktywna, dioda 3 świeci… sam to sobie wymyśliłeś). Jesteśmy ograniczeni do 3 stron ATM, ale kod można łatwo dostroić, aby obsłużyć więcej stron;
2) druga dioda LED wskazuje parametry strony 2 AND świeci się, gdy mikrokontroler wysyła poprzednią poprawkę (przywołanie łaty);
3) trzecia dioda LED wskazuje parametry na stronie 3 ORAZ świeci się podczas procesu randomizacji.
Czwarta dioda nie robi nic w trybie kontrolera MIDI i jest używana do globalnej zmiany TRYBU.
Wszystkie te funkcje są przesyłane jako komunikaty MIDI, więc aby Twój syntezator był skuteczny, musi być zdolny/włączony do odbierania i interpretowania tego rodzaju komunikatów
Krok 2: „Ukryty” 16-krokowy sekwencer
Jak powiedziałem, podczas testowania kontrolera zdałem sobie sprawę, że byłoby wspaniale pozwolić uruchomić sekwencję nut, aby móc dostosować parametry syntezatora i mieć lepsze wyobrażenie o ostatecznym efekcie brzmienia. Mam programowy sekwencer (tak bardzo lubię seq24!), ale ten sprzęt to prawie PERFEKCYJNY 16-krokowy sekwencer! Wtedy implementacja go była już tylko kwestią kodu.
Możesz przełączać się między trybem kontrolera a trybem sekwencera, naciskając przycisk #4 (przycisk MODE).
W trybie sekwencera przyciski działają inaczej, a diody LED podają nowe informacje:
- pierwszy przycisk (przycisk SHIFT) po naciśnięciu pozwala na zmianę tempa, długości nuty, kanałów i oktawy; wartość tempa określa pozycja pierwszego potencjometru, długość nuty liczona jest z pozycji drugiego potencjometru, kanały MIDI z pozycji trzeciego i czwartego potencjometru, a oktawa (-1 o do +2) z piątego potencjometru. Możesz kontrolować tempo od 40 BPM (obróć potencjometr nr 1 do końca w kierunku przeciwnym do ruchu wskazówek zegara, trzymając wciśnięty przycisk nr 1) do prawie 240 BPM (obróć potencjometr nr 1 do końca zgodnie z ruchem wskazówek zegara, trzymając wciśnięty przycisk nr 1). Możesz ustawić długość nut na półnutę, ćwierćnutę, ósemkę, szesnastkę, obracając potencjometr nr 2 trzymając wciśnięty przycisk SHIFT. Możesz ustawić kanały MIDI (kanał podstawowy i kanał pomocniczy) od 1 do 16. Zakres dźwięków podstawowych (od C2 do F#4) można obniżyć o jedną oktawę lub zwiększyć o jedną lub dwie oktawy.
Domyślnie tempo jest ustawione na 120 BPM, a długość nuty na ćwierćnuty.
- drugi przycisk uruchamia i zatrzymuje sekwencję nut. Jak wspomniano, jeśli zmienisz tryb, naciskając przycisk #4 (MODE) podczas wykonywania sekwencji, wejdziesz w tryb kontrolera, ale sekwencja będzie kontynuowana.
- trzeci przycisk to PANIKA! Naciśnięcie go spowoduje wyłączenie wszystkich nut.
- czwarty służy do przełączania między trybami globalnymi (pather lub sekwencer), gdy przycisk #1 nie jest wciśnięty, lub między trybami sekwencji (patrz poniżej), gdy #1 jest wciśnięty.
W trybie sekwencera, jeśli naciśniesz przycisk wyboru trybu, trzymając wciśnięty przycisk nr 1 (SHIFT), możesz przełączać się między 3 różnymi trybami sekwencji:
1-16 kroków mono sekwencji
2–16 kroków polisekwencji: dźwięki o oktawę niższe niż te zdefiniowane przez potencjometry są również wyzwalane (wyczerpuje to 2 głosy na beat)
3 - 8 stopniowa sekwencja poli, podwójny kanał: dwie równoległe sekwencje 8 kroków są wysyłane do dwóch różnych kanałów (domyślnie CH1 i CH2); ustawiając tę samą wartość kanału zarówno na kanale głównym, jak i wtórnym, możesz mieć dwie równoległe 8-krokowe sekwencje odtwarzane przez ten sam (polifoniczny) syntezator.
O diodach LED: jak tylko wejdziesz w tryb sekwencera, wszystkie cztery światła zaświecą się. Po uruchomieniu sekwencji diody LED będą podążać za sekwencją (lub sekwencjami). Umieściłem jedną diodę LED co cztery potencjometry i jest dla mnie wystarczająca. Łatwo byłoby zmodyfikować szkic, aby obsługiwał 16 diod LED, po jednej na każdy krok.
W sekwencerze krokowym brakuje funkcji, które ktoś może uznać za niezbędne: wejście synchronizacji MIDI, wstrzymanie kroków (można tylko wyłączyć krok), wyjście CV.
Zaimplementowałem clock OUT, ale jest w pewnym stopniu wadliwy. Próbowałem do tego dwóch podejść (jedno z przerwaniami czasowymi i jedno bez przerwań czasowych), ale oba były niedoskonałe (lub całkowicie zawiodły). Zegar MIDI musi być ściśle perfekcyjny, aby działał przez długi czas. Sygnał zegara i tak jest wysyłany i można go wyłączyć bezpośrednio na szkicu (szczegóły w dalszej części).
Zwróć uwagę, że ten sekwencer krokowy jest MIDI lub cyfrowy, jeśli wolisz, więc aby działać, musisz podłączyć syntezator umożliwiający odbieranie i interpretowanie tego rodzaju komunikatów
Krok 3: Potrzebny sprzęt i budowa
Po tych wszystkich słowach bawmy się dobrze!
Idziemy powszechną drogą Arduino. Użyłem Arduino MEGA ze względu na dużą ilość wejść analogowych (chcemy pudełko pełne pokręteł, prawda?!:)).
W szczególności Arduino MEGA może obsłużyć 16 wejść analogowych (przy pewnym podkręceniu sprzętowym, tj. przez muxing, można to zwiększyć, ale tutaj nie idziemy tą drogą), więc wyślemy 48 komunikatów MIDI przez 16 potencjometrów. Każdy potencjometr będzie wtedy sterował trzema parametrami, po jednym dla każdej „strony”; strony są wybierane za pomocą przycisku przełącznika.
Lista sprzętu:
- 1x Arduino MEGA
-16x liniowych, jednoobrotowych potencjometrów 10 K ohm
- 16x potencjometrów
- 4x przyciski chwilowe
- 4x LED
- Rezystor 6x 220 omów
- 1x złącze MIDI
-1x pudełko na projekty ABS
Trochę kabla, drut lutowniczy i sześć - osiem godzin wolnego czasu.
Użyłem płytki perforowanej i kilku nagłówków pinowych, aby zrealizować rodzaj ekranu, na którym przylutowałem rezystory i skierowałem kable. Ma to tę zaletę, że pozwala wyjąć Arduino i używać go do innych projektów (wszystkim w pewnym momencie zaczyna brakować płyt Arduino!). W każdym razie nie jest to obowiązkowe, a innym dobrym podejściem może być wylutowanie pinheadów arduino MEGA i kabli lutowniczych bezpośrednio na miejscu.
Użyłem rezystorów 200 omowych zamiast 220 omowych i i tak działają idealnie; założę się, że nawet rezystory 150 omów będą działać świetnie (zarówno dla komunikacji MIDI, jak i diod LED).
Aby ukształtować pudełko najpierw przykleiłem papier samoprzylepny na powierzchnię pudełka, zmierzyłem gdzie należy wywiercić otwory (miałem 3 cm od otworu do otworu, żeby wszystkie doniczki się zmieściły) wykonałem otwory prowadzące, a następnie powiększyłem je w prawo rozmiar, aby nić do garnków lub guzików przeszła za pomocą mini wiertarki. Spędziłem mniej więcej 2 godziny na dokończeniu pudełka. Zdałem sobie również sprawę z małych dziur i przykleiłem diody LED.
Wywierciłem też otwór pod złącze MIDI OUT i kolejny pod złącze zasilania arduino (użyłem bezpośrednio wbudowanego złącza zasilania USB i mocno zablokowałem arduino MEGA w miejscu).
UWAGA: zawsze noś ochronę oczu i rąk podczas wiercenia, niezależnie od materiału, na którym pracujesz (plastik, drewno, metale, kompozyty… to nie ma znaczenia: jesteś narażony na ryzyko zarówno w odniesieniu do elektronarzędzi, jak i wiórów materiału, który uległ erozji/wypaleniu z ruchomego narzędzia).
Następnie umieściłem wszystkie garnki i guziki i przylutowałem elementy zgodnie z załączonym zdjęciem. Skutecznym sposobem na zmniejszenie masy finalnego obiektu (i długości kabli) jest połączenie łańcuchowe wszystkich garnków zarówno na linii 5V, jak i GND.
I zanim ktokolwiek zapyta: wiem, że to pudełko, którego użyłem, jest brzydkie! Ale było za darmo i nic nie bije za darmo:)
Krok 4: Okablowanie
Okablowanie jest proste, jak podłączenie potencjometru (x16), przycisku (x4) i diody LED (x4) do płytki mikrokontrolera Arduino. Wszystkie podstawy Arduino są omówione tutaj:)
Dołączone jest okablowanie. Zauważ, że:
- Wykorzystywane są wszystkie piny analogowe (od A0 do A15), po jednym na każdy potencjometr;
- Wykorzystywane są 4 piny cyfrowe (wejścia) (od D51, D49, D47, D45), po jednym dla każdego przycisku;
- pozostałe 4 piny cyfrowe (wyjścia) są wykorzystywane do diod LED (D43, D41, D39, D37);
- Połączenie MIDI out jest bardzo proste i wymaga dwóch rezystorów 220 omów (ale do 150 omów będzie działać)
- Przyciski nie proszą o rezystory pulldown, ponieważ szkic aktywuje wewnętrzne rezystory pullup Arduino.
- Każda dioda LED prosi o rezystor ograniczający prąd (200-220 omów jest ok dla zielonych diod LED).
Użyłem wymienionych pinów cyfrowych dla towarów, ale nie są to piny „specjalne” (nie używamy tutaj możliwości pwm niektórych pinów lub innej funkcji specyficznej dla pinów): możesz ustawić swoje ulubione piny cyfrowe, ale pamiętaj o modyfikacji kod odpowiednio lub twoje przyciski/diody nie będą działać!
Proszę zauważyć, że połączenie MIDI OUT na zdjęciu to widok z przodu (nie z tyłu).
Krok 5: Oprogramowanie - trochę odniesień do teorii
Nie zamierzam wyjaśniać pełnej teorii stojącej za wiadomościami System Exclusive lub Control Change, ponieważ istnieje wiele dobrych artykułów i głupio jest przepisywać to, co już zostało napisane.
Tylko kilka szybkich linków do wdrożenia Roland SysEx:
- https://erha.se/~ronny/juno2/Roland%20Juno%20MIDI%2… (ANGIELSKI)
- https://www.2writers.com/eddie/tutsysex.htm (ANGIELSKI)
- https://www.chromakinetics.com/handsonic/rolSysEx.h… (ANGIELSKI)
- https://www.audiocentralmagazine.com/system-exclusi… (WŁOCHY)
i ogólnie trochę linku do MIDI:
-
-
Krok 6: Oprogramowanie - szkic
Tutaj załączony jest szkic, który powinieneś przesłać do swojego Arduino Mega.
Starałem się, aby programista był jak najbardziej „uniwersalny”, co oznacza, że próbowałem zredukować fragmenty kodu specyficzne dla syntezatora. Starałem się, aby kod był tak prosty, jak to tylko możliwe. Dodanie sekwencera krokowego sprawiło, że sprawy stały się bardziej złożone, a kod bardziej bałaganiarski, w każdym razie było warto. Utrzymanie kodu „uniwersalnego” powoduje, że układ kontrolera jest tak „losowy”: jest zgodny z kolejnością parametrów implementacji MIDI, którą producent syntezatora zdefiniował w instrukcji. Na początku może to być mylące, ale bardzo szybko się do tego przyzwyczaisz.
Domyślny kod/szkic/firmware obsługuje „tylko” 48 parametrów (trzy strony po 16 pokręteł każda), więc nie można kontrolować wszystkich komunikatów MIDI obsługiwanych przez twój syntezator (pomyśl o Access Virus lub Novation Supernova: akceptują więcej lub mniej 110 parametrów zgodnych z MIDI). W razie potrzeby możesz łatwo zmienić szkic, aby obsługiwał więcej wiadomości.
W rzeczywistości obsługiwane są komunikaty SysEx kompatybilne z Roland Alpha-Juno, JX8P, Korg DW8000 i Oberheim Matrix 6. Zostawiłem kod do wiadomości kompatybilnych z Juno 106 na wypadek, gdybyś tego potrzebował.
W przypadku Matrix 6 musiałem wybrać parametry do sterowania. Pominąłem trzecią kopertę, drugą rampę i coś jeszcze. Matryca i tak nie może być sterowana przez MIDI, więc też jest niedostępna. Potrzebujesz zaktualizowanego oprogramowania (wersja 2.14 lub nowsza) i powinieneś ustawić parametr „Master -> Sysex Enable” na „3”.
Wyłączenie zegara jest w pewnym stopniu wadliwe (zegar musi być ściśle idealny, aby działał tak, jak powinien, i prawdopodobnie dwa podejścia, które zastosowałem, nie były skuteczne). Domyślnie jest wyłączony.
Kod zawiera komentarze, więc nie ma potrzeby dalszego komentowania tutaj.
Jak zawsze: pamiętaj, że na co dzień nie jestem koderem i na pewno są lepsze sposoby na kodowanie tego, czego tutaj potrzebujemy. Jeśli jesteś programistą i masz sugestię, zapraszamy! Proszę o przysłanie wszelkich zmian, które mogą zwiększyć wydajność/skuteczność kodu, a ja dołączę je do głównego szkicu (oczywiście powołując się na Kontrybutora!).
Zawsze uczę się czegoś nowego czytając jakiś dobry kod kodera;)
Krok 7: Powiązane projekty
O ile wiem, nie ma tam kontrolera parametrów MIDI i sekwencera (może stary Behringer BCR2000 ze zmodyfikowanym oprogramowaniem?)
w każdym razie, jeśli nie masz skłonności do realizacji takiego pudełka, ale jesteś bardzo zainteresowany tanimi rozwiązaniami do zdalnej kontroli parametrów syntezatora, rozważ inne alternatywy:
- Edytor CTRL MIDI: jest to genialny, darmowy program open source działający na Win/Linux/mac, który może zmienić Twój komputer w pełny kontroler dla syntezatorów SysEx
- Konwerter CC "junosex" Davida Konsumera: ten projekt wymaga drobnych prac sprzętowych po twojej stronie, a pomysł jest świetny - oparty na arduino konwerter CC na SysEx, który pozwala na użycie zwykłego kontrolera MIDI innego niż SysEx (tj. głównej klawiatury AKAI MPK) rozmawiać z syntezatorem gotowym na SysEx
Zalecana:
Zamień prawie wszystko w głośnik: 13 kroków (ze zdjęciami)
Zamień prawie wszystko w głośnik: Możesz zmienić prawie każdy przedmiot w głośnik, używając dysku piezoelektrycznego i kilku dodatkowych komponentów. Chociaż może się to wydawać magią, w rzeczywistości istnieje dość proste wyjaśnienie techniczne. Napędzając płytę piezoelektryczną za pomocą wzmacniacza, płyta
Spin Coater V1 (prawie analogowy): 9 kroków (ze zdjęciami)
Spin Coater V1 (prawie analogowy): Nie wszystkie urządzenia są trwałe, jestem studentem/naukowcem badającym materiały cienkowarstwowe dla technologii słonecznej. Jeden z urządzeń, na których polegam, nazywa się powlekarką obrotową. Jest to narzędzie służące do tworzenia cienkich warstw materiału z płynnego soluti
Mechanizm rozrządu i zegar łańcucha - prawie za darmo!: 5 kroków (ze zdjęciami)
Zegar na zębatce i łańcuchu rozrządu - prawie za darmo!: Mam nadzieję, że podczas zmiany zestawu rozrządu w samochodzie nie wyrzuciłeś starych zębatek i łańcucha. Prawie to zrobiłem, ale moja żona pokazała mi to: http://www.uncommongoods.com/product/auto-timing-chain-and-gears-wall-clock 125 USD plus przesyłka.
Spraw, aby Twój monitor był niewidoczny (prawie prawie): 4 kroki
Spraw, aby Twój monitor był niewidoczny (prawie prawie): Utwórz tło pulpitu, aby bawić i zmylić znajomych i współpracowników, używając tylko aparatu cyfrowego i trochę manipulacji
Konwertuj (prawie) dowolny plik multimedialny na (prawie) dowolny inny plik multimedialny za darmo!: 4 kroki
Konwertuj (prawie) dowolny plik multimedialny na (prawie) dowolny inny plik multimedialny za darmo!: Mój pierwszy instruktażowy, pozdrawiam! W każdym razie szukałem w Google darmowego programu, który przekonwertowałby moje pliki Youtube.flv do formatu, który jest bardziej uniwersalny, jak.wmv lub.mov.Przeszukałem niezliczone fora i strony internetowe, a następnie znalazłem program o nazwie