
#027 Kontroler do Melodics
Co to Melodics?
Od tego zaczne, bo to specyficzny wpis na tym blogu + target to społeczność tej aplikacji stąd też angielska wersja wpisu.
W skrócie to aplikacja do nauki gry na keyboardzie MIDI, padach lub perkusji eletkronicznej. Takie trochę “guitar hero” nastawione na naukę.
Więcej informacji na stronie producenta - https://melodics.com/.
Dlaczego dodatkowy kontroler?
Ponieważ nienawidzę obracać się i przeklikiwać przez opcje na PC.
Melodics oferuje tylko jeden skrót dostępny z perkusji i służy on tylko jako “repeat”/”play”, a to zdecydowanie za mało. Są też dostępne skróty z klawiatury - https://melodics.com/support-articles/support-keyboard-shortcuts.
Tak wygląda mój setup (tak - w szafie :/ bo sąsiadce z dołu się trochę nie podobało):
Widać tam “DNA EasyPad” - kontroler MIDI zamontowany na ściance - to jest mój kontroler do Melodics.
Generalnie pierwszy pomysł to było zbudowanie czegoś takiego samemu - ale bardziej uniwersalnym rozwiązaniem jest wykorzystanie gotowego hardware.
Teraz mam dostęp do wielu opcji używając pałek perkusyjnych.
Jak?
W tle działa dodatkowa aplikacja, która konwertuje otrzymane sygnały MIDI na:
- wciśnięcia przycisków
- kliknięcia myszy w określonych pozycjach
- “skrypty” - czyli wielokrotne kliknięcia w różnych pozycjach
Co mogę tym zrobić?
Aktualnie mogę symulować kliknięcia:
- “spacji” - do wejścia w piosenkę/restart
- “esc” - do wyjścia
- w przycisk “retry” po utworze
- w przycisk “exit” po utworze
- w przycisk “play lesson” na ekranie “kursów”
- strzałek do poruszania się po menu
- skrypt kliknięć do wejścia w “practice mode” z określoną ilością gwiazdek
- w przycisk “performace mode”
- zwiększać/zmniejszać bpm
I bez problemu można dodawać kolejne opcje
Instrukcja
Podstawowa instalacja i mapowanie przycisków
Pobierze i zainstaluj aplikację AHK (AutoHotKey) - https://www.autohotkey.com/ - to ona jest wykorzystywana do konwersji MIDI na klawisze itp.
Pobierz skrypty do AHK: https://gitlab.com/embedownik/melodicscontroller. Nie jest to moje dzieło od zera, jest bazowane na “ogólnym” skrypcie konwertera do MIDI - strona autora: https://github.com/genmce/AHK_Midi2Keypress
Musimy sprawdzić, czy nasze urządzenie jest poprawnie wykrywane + utworzyć listę “identyfikatorów” przycisków.
Podłącz urządzenie do PC.
Uruchom w AHK plik “Midi2Keypress_1.0.ahk”. W przypadku pierwszego uruchomienia należy wybrać urządzenie które ma być kontrolerem.
Wybierz urządzenie z listy + kliknij “Done - Reload” - w moim przypadku jest to “W-PAD”.
Po restarcie zobaczymy okno “MidiMonitor” - teraz można kliknąć na pady i zobaczyć, czy są wykrywane:
Teraz należy spisać numery przypisane do konkretnych padów/przycisków - jest to pole “data1”.
Ważna kwestia - są 2 typy przycisków/eventów - “NoteOn” i “CC” (kontrolne). Informacje o tym też spisujemy.
Maping dla mojego urządzenia:
Utworzenie danych dla Melodics
Informacje o akcjach po sygnale MIDI znajdują się w pliku “userKeysActions.ahk” - nie należy modyfikować pozostałych plików - dlatego zostało to wydzielone.
Pliki ahk można edytować w notatniku/notepad++ itp.
Najpierw zacznijmy od podstawowego testu - demonstracja jak dodać reakcję na pojedyncze kliknięcie. Wklej poniższy text do pliku “userKeysActions.ahk” zastępując domyślną zawartość i zrestartuj aplikację “Midi2Keypress_1.0.ahk”:
; "wrapper" - simple logic to get only "pressed" events
; and separate to Pads/Control buttons
userKeysActions(stb, data1, data2)
{
if(stb = "NoteOn" and data2 != "0")
{
MsgBox % "TEST - button numer " . data1 . " clicked!"
}
}
Oczekiwany wynik testu:
Okienko z wiadomością o wciśniętym przycisku
Test + symulacja kliknięcia
Teraz zamień kolejny raz treść “userKeysActions.ahk”:
; buttons IDs:
testSpacePadId := 39
; "wrapper" - simple logic to get only "pressed" events
; and separate to Pads/Control buttons
userKeysActions(stb, data1, data2)
{
/*
Availaible variables:
stb -> "NoteOn"/"NoteOff"/"PC"
data1 -> button indicator
data2 -> in case of Note - "VELEOCITY"
in case of CC - 127 means pressed
0 means released
*/
; only when melodics is started
#If WinActive("ahk_exe Melodics.exe")
{
if(stb = "NoteOn" and data2 != "0")
{
clickPads(data1)
}
}
}
clickPads(button)
{
global testSpacePadId
switch button
{
case testSpacePadId:
{
send, {space}
return
}
}
}
To jest “ready to use” skrypt z tylko jedną opcją - symulowaniem wciśnięcia spacji. Należy zmienić numer “39” na twój numer pada do testów. Pozostała część pliku to “formatka”, aby wydzielić rzeczy do modyfikacji i uprościć to.
Linijka “send, {space}” to nasza akcja do wykonania.
Więc dla dodania kolejnych akcji potrzebna jest tylko prosta modyfikacja w taki sposób:
; buttons IDs:
testSpacePadId := 39
testEscPadId := 40
; "wrapper" - simple logic to get only "pressed" events
; and separate to Pads/Control buttons
userKeysActions(stb, data1, data2)
{
/*
Availaible variables:
stb -> "NoteOn"/"NoteOff"/"PC"
data1 -> button indicator
data2 -> in case of Note - "VELEOCITY"
in case of CC - 127 means pressed
0 means released
*/
; only when melodics is started
#If WinActive("ahk_exe Melodics.exe")
{
if(stb = "NoteOn" and data2 != "0")
{
clickPads(data1)
}
}
}
clickPads(button)
{
global testSpacePadId, testEscPadId
switch button
{
case testSpacePadId:
{
send, {space}
return
}
case testEscPadId:
{
send, {Esc}
return
}
}
}
Wydaje się proste.
Symulowanie kliknięć myszy
W przypadku kliknięć myszą należy wskazać konkretną pozycję na ekranie w pikselach.
W AHK istnieje dodatkowa aplikacja “Window Spy”, aby zdobyć tego typu informacje.
Aby otworzyć “Window Spy” - kliknij prawym klawiszem myszy na ikonkę “AHK” w trayu i wybierz “Window Spy”:
Teraz otwórz Melodics i sprawdź pozycję przycisku - w tym przypadku “playground mode”:
Spisz dane z pozycji “MousePosition”.
Przykładowa zawartość pliku “userKeysActions.ahk” z pojedynczym kliknięciem:
; buttons IDs:
testClickPadId := 39
; "wrapper" - simple logic to get only "pressed" events
; and separate to Pads/Control buttons
userKeysActions(stb, data1, data2)
{
/*
Availaible variables:
stb -> "NoteOn"/"NoteOff"/"PC"
data1 -> button indicator
data2 -> in case of Note - "VELEOCITY"
in case of CC - 127 means pressed
0 means released
*/
; only when melodics is started
#If WinActive("ahk_exe Melodics.exe")
{
if(stb = "NoteOn" and data2 != "0")
{
clickPads(data1)
}
}
}
clickPads(button)
{
global testClickPadId
switch button
{
case testClickPadId:
{
Click, 1710 117
return
}
}
}
Symulacja wielu kliknięć
Sprawdź pozycję dla kilku przycisków, dodaj je do skryptu z dodatkowym oczekiwaniem jako “delay”. Dla przykładu kilkukrotne kliknięcie w ten sam przycisk to:
clickPads(button)
{
switch button
{
case testClickPadId:
{
Click, 1710 117
sleep, 1000
Click, 1710 117
sleep, 1000
Click, 1710 117
sleep, 1000
Click, 1710 117
sleep, 1000
return
}
}
}
Liczba po “sleep” to czas oczekiwania w milisekundach - jest to wymagane aby Melodics miał czas na dokonczenie akcji.
Przyciski kontrolne
W przypadku akcji na kliknięcie przycisków “CC” jest mała różnica - zamiast funkcji “clickPads” a pliku ahk używamy funkcji “clickControl” - czyli w innym miejscu wpisujemy co ma się wydarzyć. Sprawdź jak wygląda mój plik jako przykład.
Podsumowanie
To jest mój sposób na “ułatwienie” i zdecydowanie usprawdnienie pracy/nauki z Melodics.
Prosty filmik jak melodics reaguje na moje komendy z padów: https://youtu.be/Xiy68o9aUl4.
Niestety - nie wiem jak używać tego samego urządzenia jednocześnie do komend i do gry w Melodics.
Podpowiedź - w moim przypadku 12 padów (2x6) wystarczyło na podstawowe funkcjonalności. Coś co można dodać - sterowanie taktami w “set loop” - w planach mam przejścia na coś z 20padami w przyszłości.