Używanie klawiatury fortepianu jako klawiatury komputera [zamknięte]

727

Mam problemy z RSI i wypróbowałem 30 różnych klawiatur komputerowych, co sprawiło mi ból. Gra na pianinie nie sprawia mi bólu. Gram na fortepianie od około 20 lat bez żadnych problemów z bólem. Chciałbym wiedzieć, czy istnieje sposób na przechwycenie MIDI z klawiatury MIDI i generowanie uderzeń klawiatury. Nic nie wiem o MIDI, ale chciałbym uzyskać wskazówki, jak przekonwertować ten sygnał na naciśnięcie klawisza.

Peter Mortensen
źródło
po co przechwytywać midi, jeśli można używać klawiatury syntezatora jako klawiatury?
shevski
@I__: Jaki system operacyjny potrzebujesz obsługiwać? To prawdopodobnie będzie miało znaczenie.
TJ Crowder
5
@Shevski: Nie próbuję nic zrobić, @I__ to osoba zadająca pytanie. On / ona nie chce konwertować dźwięku , ale raczej sygnały zdarzeń klawiatury cyfrowej wysyłane przez klawiatury elektroniczne za pomocą interfejsu cyfrowego instrumentu muzycznego . Są one bardzo podobne do zdarzeń na klawiaturze komputera: „Uwaga na” odpowiada ładnie klawiszowaniu, „Uwaga na klawiszach” itp. Możesz nawet użyć danych prędkości do wykonania różnych czynności w zależności od tego, jak „głośno” zagrano akord. Uwielbiam ten pomysł.
TJ Crowder
34
Jeśli to zadziała, możesz kodować za pomocą dowolnego urządzenia midi. Prawdopodobnie wymaga to trochę praktyki, ale używanie orkiestry jako zespołu programistów powinno być zabawne.
Toon Krijthe
1
@I__: Najbardziej pozytywna odpowiedź wskazuje na obsługę interfejsu MIDI interfejsu API dźwięku Java, który powinien skłonić Cię do odbierania danych MIDI, i szczegółowo opisuje teorię związaną z przekształcaniem tego w serie naciśnięć klawiszy. W drugim najbardziej upvoted odpowiedź mówi o bardzo opłacalny sposób można następnie połączyć, że do komputera przy użyciu Arduino, w tym ... (ciąg dalszy)
TJ Crowder

Odpowiedzi:

16

Dobra biblioteka w .NET z pełnym wsparciem midi (BASS), przejdź do http://www.un4seen.com .

Z drugiej strony, tłumacząc notatki midi z klawiatury na klawisze i więcej, wybrałbym AutoItX, interfejs ActiveX / COM i DLL do autoIt. Informacje i pobieranie, przejdź do http://www.autoitscript.com/site/autoit/

Nie trzeba pisać sterownika klawiatury.

Eln
źródło
430

Nie robiłem żadnego programowania MIDI od lat, ale twoja podstawowa idea jest bardzo dobra (bez gry słów).

MIDI to strumień „zdarzeń” (lub „komunikatów”), z których dwa najbardziej podstawowe to „uwaga włączona” i „uwaga wyłączona”, które niosą ze sobą numer nuty (0 = C pięć oktaw poniżej środkowego C, przez 127 = G pięć oktaw powyżej G powyżej środkowego C, w półtonach). Te zdarzenia niosą liczbę „prędkości” na klawiaturach wrażliwych na prędkość („wrażliwych na dotyk”), z siłą (zgadłeś) między 0 a 127.

Pomiędzy prędkością, akordowaniem i pedałami, pomyślałem, że możesz wymyślić całkiem niezły interfejs do pisania na klawiaturze fortepianu. W szczególności nagrywanie może być bardzo potężną techniką - jak wspomniałem w komentarzach, dlatego stenografowie szeregowi mogą używać maszyny do stenotypii, aby nadążać za rozmowami przez wiele godzin z rzędu, nawet jeśli maszyniści z najwyższej półki nie chcieli być w stanie przez dowolny czas za pomocą zwykłych klawiatur w stylu maszyny do pisania. Podobnie jak w przypadku stenografii maszynowej, potrzebny byłby „słownik” znaczeń akordów i ich sekwencji. (Czy możesz powiedzieć, że pracowałem po stronie oprogramowania do stenografii maszynowej?)

Aby to zrobić, podstawowe elementy to:

  • Odbieranie wejścia MIDI. Nie próbuj tego zrobić sam, skorzystaj z biblioteki. Edycja : Najwyraźniej Java Sound API obsługuje MIDI , w tym odbieranie zdarzeń od kontrolerów MIDI. Fajne. Ta strona może być również przydatna.
  • Konwertowanie tych danych na naciśnięcia klawiszy, które chcesz wysłać, np. Poprzez słownik, o którym wspomniałem powyżej.
  • Przesyłanie naciśnięć klawiszy do komputera.

Aby być jak najbardziej kompatybilnym z oprogramowaniem, musisz napisać to jako sterownik urządzenia klawiatury. Jest to wtyczka do systemu operacyjnego, która służy jako źródło zdarzeń na klawiaturze, rozmawiając z podstawowym sprzętem (w twoim przypadku z klawiaturą fortepianu). W systemach Windows i Linux prawdopodobnie będziesz chciał użyć do tego C.

Ponieważ jednak generujesz tylko naciśnięcia klawiszy (nie próbując ich przechwytywać, co próbowałem zrobić lata temu), możesz być w stanie korzystać z wszystkich funkcji systemu operacyjnego do wysyłania sztucznych naciśnięć klawiszy. Windows ma do tego interfejs (prawdopodobnie kilka, myślę o tym, SendInputale wiem, że jest jakiś interfejs „dziennika”, który robi coś podobnego), i jestem pewien, że robią to również inne systemy operacyjne. To może być wystarczające dla twoich celów - od tego chciałbym zacząć, ponieważ trasa sterownika urządzenia będzie niezręczna i prawdopodobnie będziesz musiał użyć innego języka niż Java. (Jestem wielkim fanem Javy, ale interfejsy używane przez systemy operacyjne do komunikowania się ze sterownikami urządzeń są zwykle łatwiejsze do użycia przez C i podobne).


Aktualizacja : Więcej informacji na temat „słownika” akordów po naciśnięciu klawisza:

Zasadniczo słownik jest trie (dzięki, @Adam), który wyszukujemy z najdłuższym dopasowaniem prefiksu. Detale:

W stenografii maszynowej stenograf pisze przez jednoczesne naciśnięcie wielu klawiszy na maszynie stenotypowej, a następnie zwolnienie ich wszystkich. Nazywają to „uderzeniem” klawiatury; to jak grać akord na pianinie. Pociągnięcia często (ale nie zawsze) odpowiadają sylabie języka mówionego. Podobnie jak sylaby, czasami jedno uderzenie (akord) ma znaczenie samo w sobie, innym razem ma znaczenie jedynie w połączeniu z kolejnymi pociągnięciami. (Pomyśl „dobry” vs. „dobry”, a następnie „pa”). Chociaż będzie pod dużym wpływem szkoły, w której studiowali, każdy stenograf będzie miał własny „słownik”, jakich uderzeń używają, co znaczy, słownik, który będą stale doskonalili w ciągu życia zawodowego. Słownik będzie zawierał wpisy, w których część stenograficzna (w skrócie „steno”) ma długość jednego pociągnięcia lub wiele pociągnięć. Często będzie kilka wpisów o tym samym skoku początkowym, które różnią się długością i kolejnymi pociągnięciami. Na przykład (i nie użyję tutaj prawdziwego steno, tylko symbole zastępcze), mogą występować następujące wpisy:

A = alfa
A / B = alfabet
A / B / C = alfabetycznie
A / C = klimatyzacja
B = pszczoła
B / C = ponieważ
C = morze
D = pies
D / D = Dee Dee

(Te litery nie mają być nutami, a jedynie abstrakcyjnymi znacznikami).

Pamiętaj, że Arozpoczyna się wiele wpisów, a także, jak tłumaczysz Cobrys, zależy od tego, czy wcześniej widziałeś A, a B, czy zaczynasz od nowa.

Zauważ też, że (chociaż nie pokazano tego w bardzo małej próbce powyżej), może istnieć wiele sposobów „odtwarzania” tego samego słowa lub frazy, a nie tylko jednego. Stenografowie robią to, aby ułatwić przejście od poprzedniego słowa do następnego, w zależności od pozycji ręki. Istnieje oczywista analogia do muzyki i możesz jej użyć, aby Twój przepływ pisania był bardziej zbliżony do grania muzyki, aby zarówno zapobiec negatywnemu wpływowi na grę na pianinie, jak i zmaksymalizować prawdopodobieństwo, że rzeczywiście pomoże to w RSI.

Podczas tłumaczenia steno na tekst standardowy ponownie używamy wyszukiwania „dopasowanie najdłuższego prefiksu”: algorytm tłumaczenia rozpoczyna się od pierwszego napisanego skoku i szuka wpisów zaczynających się od tego skoku. Jeśli jest tylko jeden wpis i jego długość jest jednym pociągnięciem, możemy rzetelnie powiedzieć „to jest wpis do użycia”, wypisać odpowiedni tekst, a następnie zacząć od nowa od następnego pociągnięcia. Ale bardziej prawdopodobne, że obrys rozpoczyna wiele wpisów o różnej długości. Więc patrzymy na następny skok i sprawdzamy, czy są wpisy, które zaczynają się od tych dwóch pociągnięć w kolejności; i tak dalej, aż dostaniemy dopasowanie.

Załóżmy, że w powyższym słowniku widzimy następującą sekwencję:

ACBBCABCABD

Oto jak byśmy to przetłumaczyli:

  1. Ajest początkiem trzech wpisów o różnej długości; spójrz na następny skok:C
  2. A/Cdopasowuje tylko jeden wpis; wyjdź „klimatyzacja” i zacznij od nowa od następnego skoku:B
  3. Brozpoczyna dwa wpisy; spójrz na następny skok:B
  4. B/Bnic nie uruchamia; weź najdłuższy poprzedni match ( B) i wypisz, że („bee”)
  5. Mając output B= „bee”, nadal mamy Buderzenie w buforze. Rozpoczyna dwa wpisy, więc spójrz na następny skok:C
  6. B/Cpasuje do jednego wpisu; wypisz „ponieważ” i zacznij od nowa od następnego pociągnięcia:A
  7. Arozpoczyna trzy wpisy; spójrz na następny skok:B
  8. A/Brozpoczyna dwa wpisy; spójrz na następny skok:C
  9. A/B/Cpasuje tylko do jednego wpisu; wypisz „alfabetycznie” i zacznij od nowa od następnego pociągnięcia:A
  10. Arozpoczyna trzy wpisy; spójrz na następny skok:B
  11. A/Brozpoczyna dwa wpisy; spójrz na następny skok:D
  12. A/B/Dnic nie pasuje, więc weź najdłuższy poprzedni match ( A/B) i użyj go do wypisania „alfabetu”. Pozostaje nam to Dnadal w buforze.
  13. Drozpoczyna dwa wpisy, więc normalnie patrzymy na następny skok - ale przetworzyliśmy wszystkie uderzenia, więc rozważ to osobno. W izolacji tłumaczy się to jako „pies”, więc wyprowadza to.

Aspekty powyższego, na które należy zwrócić uwagę:

  • Masz bufor pociągnięć, które przeczytałeś, ale jeszcze nie tłumaczyłeś.
  • Zawsze chcesz dopasować jak najwięcej uderzeń do jednego wpisu, jaki możesz. A/Bnależy tłumaczyć jako „alfabet”, a nie „alfa” i „pszczoła”.
  • (Nie pokazano powyżej) Możesz mieć sekwencje pociągnięć, których nie możesz przetłumaczyć, ponieważ nie pasują one do niczego w słowniku. (Ludzie Steno używają rzeczownika „nieprzetłumaczone” - np. W naszym słowniku pociągnięcia Ebyłyby „nieprzetłumaczone”.)
  • (Nie pokazano powyżej) Niektóre teorie steno pozwalają, aby ten sam zestaw uderzeń oznaczał więcej niż jedną rzecz w oparciu o szerszy kontekst. Ludzie Steno nazywają te „konflikty”. Prawdopodobnie chcesz je odrzucić w swoim projekcie, a w rzeczywistości, gdy stenograf był tłumaczony ręcznie przez stenografa, konflikty były w porządku, ponieważ wiedziałyby, gdzie w zdaniu są właściwym wyborem, ale wraz ze wzrostem tłumaczenia maszynowego, bezkonfliktowe teorie steno powstały specjalnie po to, aby uniknąć konieczności przeglądania powstałego przetłumaczonego tekstu i rozwiązywania konfliktów.
  • Tłumaczenie w czasie rzeczywistym (co robisz) oznacza, że ​​jeśli otrzymasz częściowe dopasowanie, będziesz chciał go przytrzymać, czekając na następny akord - ale prawdopodobnie tylko do limitu czasu, w którym to momencie przetłumacz to, co masz w buforze, najlepiej jak potrafisz. (A może nie chcesz mieć limitu czasu; to twój telefon.)
  • Prawdopodobnie najlepiej mieć udar, który mówi „zignoruj ​​poprzedni udar”
  • Prawdopodobnie najlepiej mieć obrys, który mówi „całkowicie wyczyść bufor bez wysyłania czegokolwiek”
TJ Crowder
źródło
6
@I__: Niektóre programy próbują rozmawiać bezpośrednio z klawiaturą, więc nie grają ładnie z interfejsami podobnymi do „sendkeys”. Mam nadzieję, że teraz jest to jeszcze mniej powszechne niż kilka lat temu, kiedy ostatnio się tym zajmowałem, i tak jak mówię, zacznę od „kluczy wysyłkowych”, takich jak mechanizmy i martwię się o inne, jeśli i kiedy trzeba. (Prawdopodobnie najlepiej zrobić szybki program testujący wysyłanie kluczy [samemu, nie otrzymując ich z MIDI] - w tym specjalnych sekwencji klawiszy - a następnie testowanie tego za pomocą oprogramowania, którym chcesz sterować, zanim zejdziesz zbyt daleko na ścieżkę .)
TJ Crowder
7
Dla tych, którzy nigdy o tym nie słyszeli, opisywany słownik jest w zasadzie Trie (wymawiane jako „spróbuj”)
Adam
14
@I__: Ciekawe, żeby to teraz napisać . Czego jeszcze chcesz? Myślę, że omówiłem wiele ważnych aspektów tego, co musisz zrobić. Nie zrobiłem tego, ani nie wskazałem nikomu, kto to zrobił, ponieważ mam inne rzeczy do zrobienia i nie wiem o gotowym rozwiązaniu. Ale jeśli chodzi o budowanie rozwiązania, myślę, że wskazałem ci właściwy kierunek.
TJ Crowder
2
Pamiętaj, że możesz zablokować wszystkie akordy w szyku liniowym i wykonywać przejścia za każdym razem, gdy otrzymasz zdarzenie midi, i nadal nie odczuwasz zauważalnego spowolnienia. Korzystanie z trie pachnie nieco przedwczesną optymalizacją.
FeepingCreature
5
@ FeeCreature: Kiedy robiłem to ze stenografami i reporterami sądowymi, ich słowniki mogły z łatwością przejść do setek tysięcy wpisów (pamiętam jednego, który pobił milion znaków). Używanie strategii optymalizacyjnej nie było wcale przedwczesne, mieliśmy do czynienia z częstotliwością 386 MHz. W przypadku I ___, jeśli pójdzie on z pomysłem Arduino (co jest naprawdę fajnym pomysłem), on również będzie miał do czynienia z dość słabo wyposażonym sprzętem dla współczesnej epoki, choć oczywiście rzeczy będą absurdalnie szybsze niż to, co mieliśmy. Myślę, że jego słownik byłby znacznie mniejszy, ale ...
TJ Crowder
184

Zastanów się nad zrobieniem czegoś, co emuluje klawiaturę USB (lub PS / 2?). Nie będziesz już zależny od konkretnego systemu operacyjnego lub konkretnego interfejsu API systemu operacyjnego. Rozwiązanie sprzętowe wytrzyma próbę czasu. Nie utknij przy użyciu starego interfejsu API w systemie Windows 7, gdy wszyscy inni korzystają z systemu Windows 11! Arduino jest dość łatwy do nauczenia.

Istnieje mnóstwo informacji i pomocy dla Arduino. Jest to platforma do hakowania sprzętu stworzona dla początkujących. Stanie się większy tylko teraz, gdy Google naciska na Arduino.

EDYCJA: Oprogramowanie i sprzęt wirtualnej klawiatury USB

Brian O'Dell
źródło
Podoba mi się pomysł użycia do tego Arduino. Problemem może być pamięć. Wygląda na to, że największe wstępnie zaprojektowane płyty mają 256 KB pamięci Flash (z czego 8 KB jest używane przez bootloader). Wcześniej tłoczyliśmy tłumaczenie / wyświetlanie / edycję skróconej maszyny w czasie rzeczywistym do 1M w systemie DOS (np. Zwykły 640k plus EMS lub pamięć rozszerzona), ale pisaliśmy ścisły kod C i asembler oraz słownik (który z łatwością mógł be> 250k na własną rękę) był na dysku. Tutaj nie ma wyświetlania ani jednoczesnej edycji, więc to dobrze, ale słownik będzie musiał być mały ...
TJ Crowder
Och, to nic. Rutynowo miałem do czynienia z reporterami sądowymi, którzy mieli słowniki, które, nawet przechowywane w bardzo kompaktowej formie, której używaliśmy, miały rozmiar wielu megabajtów. Największa, którą osobiście widziałem, miała 4,5 MB - i znowu była przechowywana w bardzo skompresowanej formie. Połącz to z faktem, że na klawiaturze steno jest mniej klawiszy niż na klawiaturze fortepianu ... Arduino ma jednak port USB, więc słownik może znajdować się na przejściówce USB flash, a nawet (zasilanej zewnętrznie ) SSD lub HDD.
TJ Crowder
2
@ Możesz rozważyć rozważenie nastolatka zamiast arduino ( pjrc.com/teensy ) znacznie więcej pamięci i możesz bezpośrednio emulować klawiaturę. Jest kompatybilny z wieloma bibliotekami Arduino, a te niekompatybilne wymagają jedynie zmiany przypisania pinów. - naprzemiennie, atmega tworzy również płytę demo, która ma 16 MB wbudowanej pamięci flash i kosztuje około 30 USD (at90usbkey)
Marc
8
Zaprojektowanie przydatnego interfejsu pianina na komputer nie jest łatwym zadaniem. IMHO, OP powinien najpierw wykonać prototyp w swoim obecnym środowisku, a następnie, JEŚLI zaspokoi to jego potrzeby, martw się o przenośność. Chyba, że ​​oczywiście przenośna alternatywa nie jest zauważalnie trudniejsza.
Emilio M Bumachar,
111

Wydaje mi się, że mniej szukasz porady na temat tego, jak to zbudować, a więcej pytasz, jakie zasoby są już dostępne, aby osiągnąć to, czego chcesz. W zależności od systemu operacyjnego istnieje wiele sposobów na osiągnięcie tego bez konieczności pisania własnego programu od zera:

MIDI Stroke

Wolny. W systemie Mac OS X 10.3 i nowszych . Ta w szczególności ma „możliwość używania dowolnej klawiatury MIDI jako zamiennika pełnej klawiatury komputerowej”.

Bome's MIDI Translator

Free / Postcardware (to trochę dziwne). Dla Windows 2000 i do góry i Mac OS X . Początkowo wydaje się, że jest bardziej ukierunkowany na użycie typu AutoHotkey , ale przy dalszym patrzeniu myślę, że mógłby zrobić to, co chcesz.

Max i aka. Klawiatura

Wolny. Dla systemu Mac OS X . Nie do końca gotowe rozwiązanie, ale jeśli nie masz nic przeciwko podstawowej konfiguracji urządzenia, nie powinno być źle.

kathryn
źródło
49

Dostęp do sprzętu można uzyskać za pomocą próbek kodu źródłowego w .NET w MIDI DotNet .

Kompletny przykładowy kod źródłowy do tworzenia strumienia danych notatek MIDI znajduje się w VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, gdzieś też jest wersja .NET)

Sposób symulowania uderzeń klawiatury jest w VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, gdzieś też jest wersja .NET)

Rozpoznawanie naciśnięć klawiszy opisano w Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Wpisz opis zdjęcia tutaj

Następnie użyj dobrej matrycy roboczej dla pianisty Timo Boehme www.goldengel.ch

Na fortepianie i gdy jesteś dobrym graczem, możesz mieć 10 palców na klawiaturze, a jeśli matryca jest użyteczna, możesz być znacznie szybszy niż jakikolwiek użytkownik klawiatury komputera. :-)

W takim przypadku, jeśli dobrze rozumiem twoje pytanie, nie powinno to być duże.

Nasenbaer
źródło
41

Studiowałem grę na fortepianie na studiach, a potem zająłem się projektowaniem interakcji, programowaniem i używaniem Vima , więc spędziłem dużo czasu na prototypowaniu takich rzeczy.

Możesz sprawić, by działało to dość szybko w systemie Linux, używając graficznego języka programowania dla artystów multimedialnych „ Pure Data ” wraz z zewnętrznym x11key autorstwa Alexa Andre .

Na Macu możesz użyć MidiStroke . Wierzę, że metoda w systemie Windows obejmowała narzędzia MidiOx i AutoHotKey . Innym razem miałem wersję korzystającą z wtyczki Java dla Max / MSP . Uważam, że Patrice Colet stworzył okno zewnętrzne dla Pure Data, które również działało, ale nie mogę już tego zlokalizować. Istnieje również zewnętrzny dla MaxMSP, który może to zrobić w systemie Windows. Wreszcie niewolny, ale niesamowity Osculator może robić, co chcesz - patrz strona funkcji.

Kiedy go uruchomiłem, nigdy się z tym nie utknąłem, ponieważ nie mogłem przestać używać narzędzi z układem. Fajnie było mieć monitor na klawiaturze elektrycznej! Powodzenia.

Peter Nore
źródło
37

O MIDI

Stwierdziłeś, że „nic nie wiesz o MIDI”. Po opanowaniu technologia MIDI jest dość prosta, ale na początku może być myląca. Jednym z zasobów, który był dla mnie niezwykle pomocny w zrozumieniu podstaw MIDI (które są z pewnością konieczne, jeśli chcesz zaprogramować interakcje MIDI), jest książka o nazwie MIDI dla Technophobe . Jest to łatwa do przeczytania książka i bardzo pomocna.


Pure Data & Max

Z mojego doświadczenia w tworzeniu interaktywnych multimediów wiążę dwa bardzo podobne programy, które ułatwiają podłączanie i mapowanie sygnałów / sygnałów wejściowych z dowolnego urządzenia.

Są to Max dla środowiska Mac i Pure Data dla środowiska PC. Oba mają mnóstwo dokumentacji online i samouczków na YouTube. Samouczek wideo Max / MSP 1 - używanie klawiatury komputera jako midikeyboard (styl ableton) pokazuje program wbudowany w Max, który mapuje klawiaturę komputera na wejścia klawiatury MIDI (co jest w zasadzie dokładnym przeciwieństwem tego, co próbujesz zrobić). Możesz uzyskać zamierzone wyniki, stosując ten sam wzór, ale odwracając sygnały / odwzorowania.


AutoHotKey

AutoHotKey to bezpłatne narzędzie typu open source dla systemu Windows, które umożliwia mapowanie klawiszy i przycisków urządzeń na makra. Natywnie obsługuje klawiatury, joysticki i makra myszy QWERTY.

Udało mi się jednak znaleźć implementację obsługującą konkretne mapowanie, którego szukasz. Te dwa wątki wyjaśniają proces:

  1. Obsługa MIDI IN w AutoHotkey , omówienie przypadku użycia. Autor szukał programu, który mógłby wykryć wejście MIDI IN i przetłumaczyć to na naciśnięcia klawiszy .

  2. Biblioteka wejściowa MIDI , rozwiązanie problemu autora i wysłany kod / łatka do AutoHotKey, który faktycznie realizuje zamierzony wynik.

Zasadniczo wygląda na to, że AutoHotKey wraz z niestandardową łatką tego użytkownika zapewni dokładnie to, czego potrzebujesz, aby utworzyć mapowanie z klawiatury MIDI na sygnał wejściowy klawiatury QWERTY. Wszystko, co musisz zrobić, to zainstalować, skonfigurować i zdefiniować swoje mapowania.


Coś jeszcze?

Niektóre z pozostałych odpowiedzi dały ci znacznie więcej informacji na temat MIDI i programowania MIDI, ale jak pisze Twój post, nie wydaje się to, czego szukasz. Chciałbym ci pomóc, jeśli to możliwe, ale byłoby łatwiej, gdybyś mógł bardziej szczegółowo określić rodzaj informacji, której szukasz. Na przykład, czy bardziej interesuje Cię konwersja sygnałów wejściowych klawiatury MIDI na sygnały klawiatury QWERTY , czy może Twoim głównym zainteresowaniem jest znalezienie gotowego rozwiązania konkretnego problemu? Czego szukasz, że nie zostało jeszcze rozwiązane?

smartcaveman
źródło
27

Możesz szybko zhakować własną klawiaturę USB za pomocą mikrokontrolera Teenys.

W rzeczywistości mają przykładowy kod, jak zrobić klawiaturę USB .

Możesz podejść do tego na dwa sposoby:

  1. Zdobądź stary fortepian i podłącz przewody bezpośrednio do nastolatka

  2. Dodaj dodatkową logikę, aby połączyć się z portem MIDI i niezbędne dekodowanie.

cmcginty
źródło
To najbardziej obiecująca odpowiedź, ponieważ po skompletowaniu urządzeń będzie działać na dowolnym komputerze i dowolnym systemie operacyjnym. Weź to do pracy lub po prostu ciesz się, że możesz uaktualnić komputer bez martwienia się o klawiaturę. Chciałbym użyć dwóch urządzeń Teensy i połączyć je razem z ich pinami we / wy. Ponieważ Teensy już obsługuje USB MIDI pjrc.com/teensy/td_midi.html, twój kod musi tylko zadbać o przenoszenie sygnałów między teensy klawiatury i midi teensy.
Michael Dillon
24

Właściwie, pracowałem nad tym jakiś czas temu, próbując przechwycić dane wejściowe perkusji Rock Band do mojego komputera (tworząc mały domowy emulator perkusyjny Java) W każdym razie zadałem tutaj pytanie o problem z opóźnieniem czasowym (tam jest kod odpytywania , wraz z tym, co próbowałem zrobić). A jeśli mogę znaleźć mój program, mogę dać ci kod, używa interfejsu API innej firmy ( JInput ).

Powodzenia w każdym razie.

Brendan
źródło
23

Wypróbuj translator MIDI firmy Bome .

Działa na wielu platformach, może łatwo konwertować dowolne wejście MIDI na naciśnięcie klawisza, szybko konfigurować i konfigurować, a ponadto jest bezpłatny do użytku osobistego.

Istnieje samouczek, Szybka wskazówka: Tłumaczenie MIDI - MIDI na naciśnięcia klawiszy , jak łatwo to skonfigurować:

Zasadniczo istnieją nieskończone możliwości tego, co możesz zrobić, w tym klawisze akordowania i modyfikatora. Używam go do mojego zestawu audio na żywo do sterowania moim DAW za pomocą pianina i nigdy nie miałem problemu.

stepheninohio
źródło
18

W Javie możesz używać JMF (Java Media Framework) do konwersji sygnałów MIDI. Podstawowa konstrukcja klawiatury jest łatwa w użyciu, to znaczy interfejs użytkownika; i umieść często używany znak / symbol pod ręką.

Przykładowy kod i API w Java Sound Resources: Przykłady: Cyfrowe przetwarzanie sygnału (DSP) pomaga zrozumieć, jak przetwarzać sygnał.

Kilka innych referencji:

Kamahire
źródło
15

Istnieje program o nazwie GlovePIE . Możesz go zaprogramować w prostym języku skryptowym i uważam, że obsługuje MIDI. Nie jestem pewien, czy pasuje to do kategorii „Java”, ale mimo to jest to świetny program. Użyłem go do sterowania robotami za pomocą kontrolerów PS3 . Jest bardzo potężny.

Peter Mortensen
źródło
15

Wiele klawiatur ma złącze portu szeregowego ( RS-232 ) do wysyłania sygnałów MIDI do komputera. Korzystam z programu o nazwie Girder, aby przekształcić komunikację portu szeregowego w pociągnięcia klawiatury.

Girder ma funkcję „mapowania”, która umożliwia mapowanie każdego klawisza, jeden po drugim, na odpowiadające mu naciśnięcie klawisza.

To może być proste rozwiązanie, którego szukasz!

Scott Rippey
źródło
12

Po prostu naucz się stenografii!

Wynika to z całej dyskusji z twojej strony. Z technicznego punktu widzenia nie chcesz na nowo wymyślać żadnych kół. Ale kiedy już nawiążesz połączenie (o co pyta to pytanie) i zaczniesz działać, nadal masz przed sobą większość pracy: musisz wytrenować swój mózg. Musisz także wymyślić najmądrzejszy i najbardziej efektywny sposób, aby to zrobić - zagadnienie projektowe zupełnie poza realiami technologii komputerowych. Ty lub ktokolwiek z nas nie zda się.

Na szczęście problem został rozwiązany i dopracowany przez wieki dojrzewania ...

Dowiedz się stenografii!

Tak, to przywróci ci trochę jack. Ale ile warte są setki godzin własnego czasu, a na koniec mniej korzystny wynik? Poza tym artykuł Wikipedii o stenografii mówi: „wygląda bardziej jak klawiatura fortepianu”.

Chyba że oczywiście chcesz uzyskać efekt pokazu slajdów. Muszę przyznać, że nigdy nie myślałem o tej możliwości, byłoby naprawdę zabawnie, gdyby ktoś wybił tekst z klawiatury fortepianu!

Możesz zacząć od klawiatury USB z touchpadem (lub bardziej ergonomicznym urządzeniem wskazującym ?), Użyj Plover do przetłumaczenia (jestem pewien, że można go skonfigurować tak, aby klawisze nieliterowe zachowywały swoją funkcjonalność, ponieważ są krytyczne dla programowanie), lub postępuj zgodnie z wątkiem Re: Plover keyboard, aby zrolować własną klawiaturę stenograficzną USB lub kup stenotypię .

Powodzenia!

FastAl
źródło
Gdzie są {i} na klawiaturze stenograficznej? Jak zamierzasz wpisywać nazwy, które nie są słowami pthread?
bobobobo
Link do Wikipedii jest nieprawidłowy i powinien być en.wikipedia.org/wiki/Stenografia
joelhoro
11

Zobacz gry zręcznościowe MAME . Zbudowali urządzenia sprzętowe, które umożliwiają wprowadzanie danych z dowolnej liczby różnych elementów. Na przykład iPac konwertuje sygnały z urządzeń wejściowych na USB, które komputer może następnie wykorzystać do emulacji kluczy. Możesz użyć dowolnej kombinacji urządzeń wejściowych ułożonych w dowolny sposób, który wydaje się wygodny, bez szalonej logiki programowania - ponieważ oprogramowanie do interpretacji danych wejściowych jest już gotowe i dobrze przetestowane.

Widziałem dane wejściowe kokpitu symulatora lotu, niestandardowe kioski i systemy głosowania wbudowane w tę metodę ..... a cena jest odpowiednia!

bpeterson76
źródło
10

Aby rozwiązać ten problem, potrzebujesz kilku rzeczy:

  1. Sposób na przechwytywanie danych MIDI z klawiatury. W zależności od interfejsu: interfejs MIDI (klasyczny) lub interfejs USB MIDI (nowoczesny) najprawdopodobniej interfejs znajduje się na komputerze, ponieważ zapewnia najwięcej opcji. Mikrokontrolery hosta USB nie są tak proste, jak zwykły komputer.

  2. Schemat konwersji danych MIDI na naciśnięcia klawiszy. Jak zauważył jeden użytkownik, akordy są właściwą drogą, ponieważ liczba klawiszy nie będzie zależała od liczby klawiszy fortepianu.

  3. Sposób na wstrzyknięcie klucza do systemu operacyjnego. Będzie to wymagać dokładności sterownika niskiego poziomu. Bawiłem się aplikacjami, które wstrzykują dane z klawiatury i myszy do aplikacji w systemie Windows 7, i mogą być niestabilne i zależą od tego, czy aplikacja jest aktualnie w centrum uwagi. To najtrudniejsza część interfejsu. To, co może działać, to stworzenie mikrokontrolera klawiatury USB HID, który również ma interfejs szeregowy.

Interfejs szeregowy utworzyłby wirtualny port szeregowy. Oprogramowanie, które odczytuje dane MIDI i generuje naciśnięcia klawiszy, może wysłać komunikat szeregowy do wirtualnego portu szeregowego. Mikrokontroler wysyła naciśnięcie klawisza, aby wyglądało jak standardowe wejście klawiatury. Umożliwiłoby to połączenie zarówno portów MIDI, jak i klawiatur USB MIDI.

Hmmm, z tego rodzaju interfejsem można również symulować mysz i użyć ustawień klawiszy fortepianu dla osi myszy i przycisków. Nacisk można wykorzystać do określenia prędkości wskaźnika myszy. Możesz także wyeliminować mysz. Inną zaletą tego podejścia jest to, że dowolne urządzenie wejściowe, które podłączasz, może komunikować się z wirtualnym portem szeregowym w celu wygenerowania zdarzeń klawiatury i myszy. Więc jeśli chcesz dodać inny sprzęt, taki jak pedały perkusyjne lub joystick, byłoby kwestią dostosowania programu, który komunikuje się z interfejsem szeregowym.

Inne podejście do powyższego jest podobne do niektórych zamieszczonych powyżej w celu korzystania z Arduino, ale obejmuje również USB Host Shield od Sparkfun do obsługi klawiatur muzycznych opartych na USB. Dzięki temu Arduino można zaprogramować jako kombinację klawiatury lub myszy w układzie modułu ładującego i pozwala urządzeniu działać jako host USB dla klawiatury muzycznej opartej na USB. Jesteś objęty ubezpieczeniem dla obu typów. Chociaż nadal uważam, że metoda wirtualnego portu szeregowego jest bardziej elastyczna i na dłuższą metę byłaby łatwiejsza do zaprogramowania. Urządzenie Arduino będzie trudniejsze do zmiany niż program komputerowy lub usługa.

Jest jeszcze jedna możliwość: już istnieją akordowe klawiatury jednoręczne. Widziałem na nich filmy, ale musisz ustalić, czy zranią cię w ręce, czy nie.

Demolishun
źródło
7

Podłączenie do urządzenia MIDI powinno być dość łatwe przy użyciu czegoś takiego jak interfejs .NET DirectSound. Musisz zidentyfikować docelowe urządzenie MIDI, a następnie uzyskać kod do nasłuchiwania wiadomości przychodzących (są artykuły na ten temat za pośrednictwem Google).

Ponieważ używasz MIDI jako klawiatury, w zasadzie są tylko dwa komunikaty MIDI, które musisz wykryć, a mianowicie włączanie i wyłączanie notatek. Komunikat MIDI to trzy bajty danych określające polecenie, nutę i prędkość. Uwaga jest tylko numerem nuty (czasami „złe” stosy MIDI wysyłają nutę z zerową prędkością, której również należy się spodziewać).

Po przetłumaczeniu komunikatów, wyjście klawiatury powinno być dość proste z .NET.

W innych odpowiedziach na temat szczegółów technicznych jest mnóstwo porad; Chciałem tylko dać ci wyobrażenie o rzeczywistych komunikatach MIDI. Powodzenia!

Simon Inns
źródło
Na marginesie dokument „Definicja klasy urządzeń uniwersalnej magistrali szeregowej dla urządzeń MIDI” zawiera bardzo uporządkowany przegląd komunikatów MIDI: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns
7

Otrzymasz lepsze i szczęśliwsze wyniki (bez względu na to, jakiego systemu operacyjnego i / lub programu DAW chcesz używać), grając na dowolnej zewnętrznej klawiaturze MIDI jako kontroler za pomocą karty dźwiękowej. Następnie przekieruj to do oprogramowania GB (lub cokolwiek innego), a dźwięk wygeneruje wiele dźwięków, które dostarczyły w ten sposób w czasie rzeczywistym.

Jeśli twoja karta dźwiękowa nie obsługuje wejść / wyjść MIDI (wejścia / wyjścia / thrus), nie stanowi to problemu. Możesz rozważyć zbadanie i zainwestowanie w zewnętrzny konwerter stołowy MIDI. Wiele z nich jest przystosowanych do dalszej konwersji MIDI na USB 2.0 (omijając istniejącą kartę dźwiękową).

Na przykład: bardzo trudno jest uzyskać wyniki „przypominające człowieka” za pomocą klawiszy zmiany Z i X za pomocą klawiatury komputera i ołówka. Kiedy zamiast tego, twoje własne palce mogą po prostu grać na klawiaturze MIDI z własnego zakresu rejestrów fizycznych oktaw - natychmiast!

Zdaję sobie sprawę, że mogą być w to zaangażowane ograniczenia budżetowe. Ale niektóre z tych pozornie tanich klawiatur oktawowych typu „Casio” 5 sprzedawanych w Radio Shack za mniej niż 100,00 USD (* lub mniej) to wszystko, czego potrzebujesz (plus niektóre z ich wbudowanych łatek dźwiękowych i modułów sekwencera brzmią i obsługują zadziwiająco dobrze również w przypadku innych rzeczy).

Opcje klawiatury RadioShack MIDI .

Jeśli chodzi o zewnętrzne konwertery MIDI dla istniejących kart dźwiękowych, przeprowadziłem kilka wyszukiwań w Google w następujący sposób, szczególnie na platformach Mac:

Wiele z tych zewnętrznych informacji o konwersji MIDI może być na początku uciążliwe, dlatego podzieliłem się bardziej jako „przyjazny dla użytkownika” do rozważań i budżetu:

Nie ma nic złego w ułatwianiu wirtualnych klawiatur jako VST podczas korzystania z DAW . Mają swoje miejsce.

Ale brzmisz jak utalentowany klawiszowiec. Dlaczego więc nie rozważyć zewnętrznych opcji konwersji / klawiatury MIDI, o których właśnie wspomniałem?

Powodzenia i mam nadzieję, że to dało ci kilka pomysłów, które mogą i będą działać dla Ciebie!

Angshuman Bhattacharjee
źródło
6

Jeśli nie chcesz samodzielnie programować, ale po prostu chcesz rozwiązać problem, możesz po prostu kupić klawiaturę USB-MIDI, w której możesz ponownie przypisać dowolny klawisz, aby wysłać sygnał wyjściowy klawiatury QWERTY zamiast wyjścia MIDI, dla przykład M-Audio Axiom Pro

Ta metoda będzie działać z dowolnym systemem operacyjnym i dowolnym komputerem obsługującym standardowe klawiatury USB, ponieważ klawiatura MIDI rozpozna się jako standardowa klawiatura QWERTY.

Martin Odhelius
źródło
czy wiesz, czy możliwe byłoby przypisanie akordów również do określonych naciśnięć klawiszy? na przykład, jeśli gram akord C MAJOR, czy mogę go przetłumaczyć na „lis skoczył”
l - '' '' ---------- - '' „” „
Przepraszam, że nie odpowiadam tak szybko, mam wakacje od 4 dni;) Nie, niestety możesz przypisać tylko jeden kod QWERTY na klawisz, więc działa prawie jak standardowa klawiatura.
Martin Odhelius
Btw, jeśli je kupisz, pamiętaj tylko o zakupie PRO-one, ponieważ nie sądzę, że wersja inna niż PRO ma funkcję przypisywania QWERTY.
Martin Odhelius
Nie sądzę, że możliwe jest przypisanie akordów do kodów ASCII, tylko jeden klucz na kod, ale sprawdzę to na własnej Axiomie wieczorem, kiedy wrócę z pracy do domu.
Martin Odhelius
Właśnie zauważyłem, że kody qwerty można przypisać tylko do przycisków sterujących (klawiszy funkcyjnych, padów perkusyjnych, klawiszy numerycznych itp.), A nie do rzeczywistych klawiszy fortepianu na klawiaturze. Jestem właścicielem tej klawiatury i byłem pewien, że można przypisać kody ascii do dowolnego klawisza, ale teraz, gdy wypróbowałem, zauważyłem, że to źle! Bardzo mi przykro z tego powodu, czy można w jakiś sposób cofnąć nagrodę?
Martin Odhelius
6

Możesz użyć prostego skryptu AutoIt do obu odczytów zdarzeń MIDI, patrz Wejście MIDI .

Będziesz także potrzebował MIDI UDF i symulować naciśnięcia klawiszy .

Odczytywanie zdarzeń MIDI powinno być łatwe, ale różne kontrolery (instrumenty) MIDI mają różne funkcje. Spróbuj najpierw dowiedzieć się, co potrafi pianino MIDI, a następnie zobacz, jak najlepiej zmapować te funkcje do symulowanych naciśnięć klawiszy QWERTY .

Jeśli chcesz, możesz mieć coś na ekranie lub w podajniku, które pomogą Ci zobaczyć, co robisz (czyli, dla Shift, Ctrli Altsymulacja).

Martijn
źródło
5

Możesz rzucić okiem na klawiatury akordowe . Mają tę zaletę, że nie trzeba pisać dla nich sterownika, zanim będzie można z nich korzystać, a niektóre są podobne do układu klawiatury fortepianu.

Peter Mortensen
źródło
5

Jeśli znasz kodowanie w Javie, możesz użyć tego w następujący sposób:

Po pierwsze, zaimplementować javax.sound.midi.Receiverza pomocą send(..)metody, która jest odwzorowywać tę „Uwaga na” zdarzeń klawiszy jak chcesz.

Musisz zdobyć treść MidiMessage za pomocą tej getMessagemetody i zinterpretować ją na swój sposób. Znaczenie bajtów wiadomości można znaleźć w Wiadomościach MIDI .

Po otrzymaniu „przypisania włączonego” lub „przypisania wyłączonego” dla określonego klawisza klawiatury, możesz zamapować go na klucz, który ci się podoba, przypisując mu stałą klasy KeyEvent, na przykład C # 4 -> KeyEvent.VK_A i tak dalej . Ten kod klucza może być następnie wykorzystany za java.awt.Robotpomocą metod keyPress i keyRelease do faktycznego wysłania naciśnięcia klawisza do systemu operacyjnego, a tym samym do innych aplikacji.

dronus
źródło
4

Zgadzam się z odpowiedzią Briana O'Della - gdyby to był mój projekt, zrobiłbym to sprzętowo. Ma tę zaletę, że jest niezależny od platformy i sprzętu - Twoje urządzenie zastępuje interfejs MIDI-USB i interfejs API komputera.

mbed to platforma szybkiego prototypowania, która jest bardzo łatwa do nauczenia i ma wiele zalet w porównaniu z Arduino IMHO (kompilator online, 512 KB flash, 96 MHz, język C ++). Ma interfejs klawiatury USB i interfejs USB Midi wstępnie napisany dla Ciebie.

Społeczność jest bardzo przyjazna i chętna do pomocy, a istnieje wiele istniejących projektów korzystających zarówno z emulacji MIDI, jak i USB - poszukaj w YouTube „mbed MIDI” lub podobnego.

Alex L.
źródło
4

Jeśli używasz Linuksa, wypróbuj Footware .

Powinno być dokładnie tym, czego szukasz - jeśli dostosujesz wysokości MIDI do mapowania swoich upodobań ...

Nigdy nie myślałem, że może to być przydatne dla kogokolwiek oprócz mnie; o)

FlashKorten
źródło
2
Podczas mojej poprzedniej pracy jako administrator miałem pod biurkiem rozrusznik nożny - aby zminimalizować opuszczanie domowego rzędu w vimie
FlashKorten
2

Spróbuj użyć systemu opartego na mikrokontrolerze, takiego jak Arduino .

Peter Mortensen
źródło
1

To nie byłoby zbyt trudne.

Zakładam, że korzystasz z systemu Windows , ale nie jestem tego pewien. Napisałem sekwencer MIDI , http://pianocheetah.com , w zwykłym starym języku C ++ i pozwala on używać klawiatury fortepianu do uruchamiania poleceń. Nie ma żadnego powodu, dla którego nie można zrobić tego samego, aby wepchnąć klawisze do strumienia wejściowego klawiatury.

Ale chodź teraz. Pamiętasz, jak długo zajęło ci nauczenie się klawiatury, prawda? Czy chcesz przejść przez to jeszcze raz? I czy chcesz zepsuć swoją błogosławioną klawiaturę bandą głupio wyglądających kluczowych symboli?

Musisz użyć co najmniej 26 znaków alfanumerycznych, 10 numerycznych, 11 interpunkcyjnych i co najmniej 12 klawiszy funkcyjnych ORAZ ich przesuniętych stanów. To 60 klawiszy plus przesunięte stany. Spali pełne 5 oktaw kluczy. Będziesz robił fortepian „chmiel” = wszystko = czas. Pożegnaj się z pisaniem na klawiaturze.

Możesz uratować się przed RSI , ale stworzyłeś dla siebie inny rodzaj koszmaru.

Powodzenia w zachęcaniu szefa do zakupu klawiatury MIDI w pracy.

Jeśli naprawdę nauczyłeś się grać na pianinie, nauczyłeś się grać bez stresu. Zrób to na klawiaturze QWERTY . Bez napięcia. Zacznij powoli.

Stephen Hazel
źródło
Dzięki za miłe słowa, ale pracowałem nad tym i nie planuję udostępnić go jako oprogramowania open source - przepraszam. Ale użyjesz midiInOpen (); zapewnić mu wywołanie zwrotne w celu przetworzenia danych wejściowych midi; zignoruj ​​wszystko oprócz znanych zdarzeń, zamapuj nutę midi na klawiszu klawiatury i włóż ją do strumienia wejściowego klawiatury (zapominam o tym api, ale JESTEM DOSTĘPNY, przynajmniej jeden).
Stephen Hazel