Verwenden einer Klaviertastatur als Computertastatur [geschlossen]


727

Ich habe RSI- Probleme und habe 30 verschiedene Computertastaturen ausprobiert, die mir alle Schmerzen bereiteten. Klavier spielen macht mir keine Schmerzen. Ich spiele seit ungefähr 20 Jahren Klavier ohne Schmerzen. Ich würde gerne wissen, ob es eine Möglichkeit gibt, MIDI von einem MIDI-Keyboard aufzunehmen und Keyboard-Striche auszugeben. Ich weiß überhaupt nichts über MIDI, aber ich möchte eine Anleitung, wie man dieses Signal in einen Tastenanschlag umwandelt.


Warum Midi aufnehmen, wenn Sie eine Synthesizer-Tastatur als Tastatur verwenden können?
Shevski

@I__: Welches Betriebssystem müssen Sie unterstützen? Es wird wahrscheinlich eine Rolle spielen.
TJ Crowder

5
@shevski: Ich versuche nichts zu tun, @I__ ist die Person, die die Frage stellt. Er / sie möchte keinen Ton konvertieren , sondern die Ereignissignale der digitalen Tastatur, die von elektronischen Tastaturen über die digitale Schnittstelle des Musikinstruments gesendet werden . Dies sind sehr ähnlich zu Computertastaturereignissen: "Note on" entspricht gut dem Keydown, "Note off" dem Keyup usw. Sie können sogar Geschwindigkeitsdaten verwenden, um verschiedene Aktionen auszuführen, je nachdem, wie "laut" der Akkord gespielt wurde. Ich liebe die Idee.
TJ Crowder

34
Wenn dies funktioniert, können Sie mit jedem Midi-Gerät codieren. Es erfordert wahrscheinlich etwas Übung, aber die Verwendung eines Orchesters als Entwicklungsteam sollte Spaß machen.
Toon Krijthe

1
@I__: Die am besten bewertete Antwort verweist auf die MIDI-Unterstützung der Java-Sound-API, mit der Sie MIDI-Daten empfangen können, und beschreibt ausführlich die Theorie, die erforderlich ist, um diese in eine Reihe von Tastenanschlägen umzuwandeln. Die zweithäufigste Antwort spricht von einer sehr praktikablen Möglichkeit, diese mit einem Arduino an einen Computer anzuschließen, einschließlich ... (Fortsetzung)
TJ Crowder

Antworten:


16

Eine gute Bibliothek in .NET mit vollständiger Midi-Unterstützung (BASS) finden Sie unter http://www.un4seen.com .

Und für den anderen Teil, wenn ich Tastatur-MIDI-Noten in Tasten und mehr übersetze, würde ich mich für AutoItX, die ActiveX / COM- und DLL-Schnittstelle für AutoIt entscheiden. Informationen und Download finden Sie unter http://www.autoitscript.com/site/autoit/

Tastaturtreiber muss nicht geschrieben werden.


430

Ich habe seit Jahren keine MIDI-Programmierung mehr gemacht, aber Ihre Grundidee ist sehr solide (kein Wortspiel).

MIDI ist ein Strom von "Events" (oder "Messages"), wobei zwei der grundlegendsten "Note On" und "Note Off" sind, die die Notennummer mit sich führen (0 = C, fünf Oktaven unter dem mittleren C, bis 127 = G fünf Oktaven über dem G über dem mittleren C (in Halbtönen). Diese Ereignisse tragen eine "Geschwindigkeits" -Nummer auf Tastaturen, die geschwindigkeitsabhängig ("berührungsempfindlich") sind, mit einer Kraft von (Sie haben es erraten) zwischen 0 und 127.

Ich würde denken, dass Sie zwischen Velocity, Chording und Pedalen eine recht gute "Tipp" -Schnittstelle für die Klaviertastatur finden könnten. Insbesondere das Aufzeichnen könnte eine sehr leistungsfähige Technik sein - wie ich in den Kommentaren erwähnt habe, können einfache Stenographen eine Stenotyp-Maschine verwenden , um stundenlang hintereinander mit den Leuten Schritt zu halten, wenn selbst hochkarätige Schreibkräfte dies nicht tun würden. über normale Tastaturen im Schreibmaschinenstil für längere Zeit nicht möglich sein. Wie bei der Maschinenstenographie benötigen Sie ein "Wörterbuch" der Bedeutungen von Akkorden und Folgen von Akkorden. (Können Sie mir sagen, dass ich früher auf der Softwareseite der Maschinenstenographie gearbeitet habe?)

Dazu sind die grundlegenden Teile:

  • MIDI-Eingang empfangen. Versuchen Sie nicht, dies selbst zu tun, sondern verwenden Sie eine Bibliothek. Bearbeiten : Anscheinend unterstützt die Java Sound API MIDI , einschließlich des Empfangs von Ereignissen von MIDI-Controllern. Cool. Diese Seite kann auch nützlich sein.
  • Konvertieren dieser Daten in die Tastenanschläge, die Sie senden möchten, z. B. über das oben erwähnte Wörterbuch.
  • Ausgabe der Tastenanschläge an den Computer.

Um mit Software bestmöglich kompatibel zu sein, müssen Sie dies als Tastaturgerätetreiber schreiben. Dies ist ein Plug-In für das Betriebssystem, das als Quelle für Tastaturereignisse dient und mit der zugrunde liegenden Hardware (in Ihrem Fall der Klaviertastatur) kommuniziert. Für Windows und Linux möchten Sie wahrscheinlich C dafür verwenden.

Da Sie jedoch nur Tastenanschläge generieren (und nicht versuchen, sie abzufangen, was ich vor Jahren versucht habe), können Sie möglicherweise alle Funktionen des Betriebssystems zum Senden künstlicher Tastenanschläge verwenden. Windows hat eine Schnittstelle dafür (wahrscheinlich mehrere, an die ich denke, SendInputaber ich weiß, dass es eine "Journal" -Schnittstelle gibt, die etwas Ähnliches tut), und ich bin sicher, dass andere Betriebssysteme dies auch tun. Das könnte für Ihre Zwecke ausreichend sein - hier würde ich anfangen, da die Route des Gerätetreibers umständlich sein wird und Sie wahrscheinlich eine andere Sprache als Java verwenden müssten. (Ich bin ein großer Fan von Java, aber die Schnittstellen, über die Betriebssysteme mit Gerätetreibern kommunizieren, werden in der Regel leichter über C und ähnliches verwendet.)


Update : Mehr zum "Wörterbuch" von Akkorden zu Tastenanschlägen:

Grundsätzlich ist das Wörterbuch ein Versuch (danke, @Adam), den wir mit dem längsten Präfix suchen. Einzelheiten:

Bei der Maschinenstenographie schreibt der Stenograph, indem er mehrere Tasten gleichzeitig auf der Stenotypmaschine drückt und dann alle loslässt. Sie nennen dies einen "Strich" der Tastatur; Es ist, als würde man einen Akkord auf dem Klavier spielen. Striche entsprechen häufig (aber nicht immer) einer Silbe der gesprochenen Sprache. Wie bei Silben hat manchmal ein Strich (Akkord) eine eigene Bedeutung, manchmal hat er nur eine Bedeutung in Kombination mit folgenden Strichen. (Denken Sie "gut" gegen "gut", gefolgt von "tschüss"). Obwohl sie stark von der Schule beeinflusst werden, an der sie studiert haben, hat jeder Stenograph sein eigenes "Wörterbuch" darüber, mit welchen Strichen sie was meinen, ein Wörterbuch, das sie im Laufe ihres Arbeitslebens kontinuierlich verbessern werden. Das Wörterbuch enthält Einträge, bei denen der stenografische Teil (kurz "Steno") einen Strich lang oder mehrere Striche lang ist. Häufig gibt es mehrere Einträge mit demselben Starthub, die sich durch ihre Länge und die nachfolgenden Striche unterscheiden. Zum Beispiel (und ich werde hier kein echtes Steno verwenden, sondern nur Platzhalter) können folgende Einträge vorhanden sein:

A = Alpha
A / B = Alphabet
A / B / C = alphabetisch
A / C = Klimaanlage
B = Biene
B / C = weil
C = Meer
D = Hund
D / D = Dee Dee

(Diese Buchstaben sind nicht als Noten gedacht, sondern nur als abstrakte Markierungen.)

Beachten Sie, dass Amehrere Einträge gestartet werden und dass die Art und Weise, wie Sie einen CStrich übersetzen, davon abhängt, ob Sie zuvor einen A, einen Boder einen neuen gesehen haben.

Beachten Sie auch, dass es (obwohl in dem sehr kleinen Beispiel oben nicht gezeigt) mehrere Möglichkeiten gibt, dasselbe Wort oder dieselbe Phrase zu "spielen" und nicht nur eine. Stenographen tun dies, um je nach Handposition den Übergang von einem vorhergehenden Wort zum nächsten zu erleichtern. Es gibt dort eine offensichtliche Analogie zur Musik, und Sie könnten diese verwenden, um Ihren Schreibfluss dem Abspielen von Musik ähnlicher zu machen, um zu verhindern, dass sich dies negativ auf Ihr Klavierspiel auswirkt, und um die Wahrscheinlichkeit zu maximieren, dass dies tatsächlich beim RSI hilft.

Bei der Übersetzung von Steno in Standardtext verwenden wir erneut eine Suche nach "Übereinstimmungen mit dem längsten Präfix": Der Übersetzungsalgorithmus beginnt mit dem ersten jemals geschriebenen Strich und sucht nach Einträgen, die mit diesem Strich beginnen. Wenn es nur einen Eintrag gibt und dieser einen Strich lang ist, können wir zuverlässig sagen "das ist der zu verwendende Eintrag", den entsprechenden Text ausgeben und dann mit dem nächsten Strich neu beginnen. Wahrscheinlicher ist jedoch, dass dieser Strich mehrere Einträge unterschiedlicher Länge startet. Wir schauen uns also den nächsten Strich an und sehen, ob es Einträge gibt, die mit diesen beiden Strichen der Reihe nach beginnen. und so weiter, bis wir ein Match bekommen.

Nehmen wir also mit dem obigen Wörterbuch an, wir hätten diese Sequenz gesehen:

ACBBCABCABD

So würden wir es übersetzen:

  1. Aist der Beginn von drei Einträgen unterschiedlicher Länge; schau auf den nächsten Schlag:C
  2. A/Cstimmt nur mit einem Eintrag überein; "Klimaanlage" ausgeben und mit dem nächsten Hub neu beginnen:B
  3. Bstartet zwei Einträge; schau auf den nächsten Schlag:B
  4. B/Bfängt nichts an; nimm das längste vorherige Match ( B) und gib das aus ("Biene")
  5. Mit output B= "bee" haben wir immer noch einen BStrich in unserem Puffer. Es werden zwei Einträge gestartet. Schauen Sie sich also den nächsten Strich an:C
  6. B/Centspricht einem Eintrag; "weil" ausgeben und mit dem nächsten Strich neu beginnen:A
  7. Astartet drei Einträge; schau dir den nächsten Strich an:B
  8. A/Bstartet zwei Einträge; schau dir den nächsten Strich an:C
  9. A/B/Cstimmt nur mit einem Eintrag überein; Geben Sie "alphabetisch" aus und beginnen Sie neu mit dem nächsten Strich:A
  10. Astartet drei Einträge; schau auf den nächsten Schlag:B
  11. A/Bstartet zwei Einträge; schau auf den nächsten Schlag:D
  12. A/B/Dpasst zu nichts, also nimm die längste vorherige Übereinstimmung ( A/B) und verwende sie, um "Alphabet" auszugeben. Das lässt uns Dnoch im Puffer.
  13. DStartet zwei Einträge, sodass wir normalerweise den nächsten Strich betrachten würden - aber wir haben alle Striche verarbeitet, betrachten Sie ihn also isoliert. Für sich bedeutet es "Hund", also geben Sie das aus.

Aspekte der oben genannten zu beachten:

  • Sie haben einen Puffer mit Strichen, die Sie gelesen, aber noch nicht übersetzt haben.
  • Sie möchten immer die meisten Striche mit einem einzelnen Eintrag abgleichen, den Sie können. A/Bsollte als "Alphabet" übersetzt werden, nicht als "Alpha" und "Biene".
  • (Oben nicht gezeigt) Möglicherweise haben Sie Strichfolgen, die Sie nicht übersetzen können, da sie mit nichts im Wörterbuch übereinstimmen. (Steno-Leute verwenden das Substantiv "untranslate" - z. B. Ewären bei unserem Wörterbuch die Striche "untranslate".)
  • (Oben nicht gezeigt) Einige Steno-Theorien erlauben, dass derselbe Satz von Strichen mehr als eine Sache bedeutet, basierend auf einem breiteren Kontext. Steno-Leute nennen diese "Konflikte". Sie möchten sie wahrscheinlich in Ihrem Projekt nicht zulassen, und als Steno vom Stenographen manuell übersetzt wurde, waren Konflikte in Ordnung, weil sie genau wussten, wo im Satz sie die richtige Wahl waren, aber mit dem Aufstieg Bei der maschinellen Übersetzung entstanden konfliktfreie Steno-Theorien, um zu vermeiden, dass der resultierende übersetzte Text durchgearbeitet und Konflikte "behoben" werden müssen.
  • In Echtzeit zu übersetzen (was Sie tun würden) bedeutet, dass Sie, wenn Sie eine Teilübereinstimmung erhalten, diese beibehalten möchten, während Sie auf den nächsten Akkord warten - aber wahrscheinlich nur bis zu einer Zeitüberschreitung, zu welchem ​​Zeitpunkt Sie dies tun würden Übersetzen Sie das, was Sie im Puffer haben, so gut Sie können. (Oder vielleicht möchten Sie keine Auszeit; es ist Ihr Anruf.)
  • Wahrscheinlich am besten einen Schlaganfall mit der Aufschrift "Ignorieren Sie den vorherigen Schlaganfall".
  • Wahrscheinlich am besten einen Strich mit der Aufschrift "Löschen Sie den Puffer vollständig, ohne etwas auszugeben".

6
@I__: Einige Programme versuchen, direkt mit dem Tastaturgerät zu kommunizieren und spielen daher nicht gut mit "sendkeys" -ähnlichen Schnittstellen. Hoffentlich ist dies jetzt noch seltener als vor einigen Jahren, als ich mich das letzte Mal damit befasst habe, und so wie ich sage, würde ich mit "sendkeys" -ähnlichen Mechanismen beginnen und mich nur dann um die anderen kümmern, wenn und wann Sie es brauchen. (Am besten testen Sie schnell das Senden von Tasten [allein, nicht durch Empfangen von MIDI] - einschließlich spezieller Tastenfolgen - und testen diese dann mit der Software, die Sie steuern möchten, bevor Sie zu weit gehen .)
TJ Crowder

7
Für diejenigen, die noch nie davon gehört haben, ist das von Ihnen beschriebene Wörterbuch im Grunde ein Trie (ausgesprochen 'try')
Adam

14
@I__: Interessant, jetzt zu schreiben, um das zu sagen. Was willst du noch? Ich denke, ich habe viele wichtige Aspekte dessen angesprochen, was Sie tun müssen. Ich habe es nicht getan und auch nicht auf jemanden hingewiesen, der es getan hat, weil ich andere Dinge zu tun habe und zufällig keine vorgefertigte Lösung kenne. Aber was die Entwicklung einer Lösung angeht, habe ich Sie in die richtige Richtung gelenkt.
TJ Crowder

2
Beachten Sie, dass Sie alle Akkorde in einem linearen Array jammen und jedes Mal, wenn Sie ein Midi-Ereignis erhalten, eine Durchquerung durchführen können, ohne dass eine merkliche Verlangsamung auftritt. Die Verwendung eines Tries riecht leicht nach vorzeitiger Optimierung.
FeepingCreature

5
@FeepingCreature: Als ich dies mit Stenographen und Gerichtsreportern tat, konnten ihre Wörterbücher leicht zu Hunderttausenden von Einträgen führen (ich erinnere mich an einen, der die Millionengrenze überschritten hat). Die Verwendung einer Optimierungsstrategie war nicht im entferntesten verfrüht. Wir hatten es mit 12-MHz-386 zu tun. In I ___s Fall, wenn er sich der Arduino-Idee anschließt (was eine wirklich coole Idee ist), wird auch er sich mit ziemlich leistungsschwacher Hardware für die moderne Ära befassen, obwohl die Dinge natürlich lächerlich schneller sind als das, was wir hatten. Ich denke, sein Wörterbuch würde tendenziell dramatisch kleiner sein, aber ...
TJ Crowder

184

Erwägen Sie, etwas in Hardware zu tun, das eine USB-Tastatur (oder PS / 2-Tastatur?) Emuliert. Sie sind nicht länger von einem bestimmten Betriebssystem oder einer bestimmten Betriebssystem-API abhängig. Eine Hardwarelösung wird den Test der Zeit bestehen. Verwenden Sie keine alte API in Windows 7, wenn alle anderen Windows 11 ausführen! Arduino ist ziemlich einfach zu lernen.

Es gibt eine Menge Informationen und Hilfe für Arduino. Es ist eine Hardware-Hacking-Plattform für Neulinge. Es wird erst größer, wenn Google Arduino vorantreibt.

BEARBEITEN: Software und Hardware für virtuelle USB-Tastaturen


Ich liebe die Idee, dafür ein Arduino zu verwenden. Der Speicher könnte jedoch ein Problem sein. Es sieht so aus, als hätten die größten vorgefertigten Boards 256 KB Flash (von denen 8 KB vom Bootloader verwendet werden). Früher haben wir die Echtzeitübersetzung / -anzeige / -bearbeitung von Maschinenkürzeln unter DOS in 1M (z. B. die üblichen 640 KB plus entweder EMS oder erweiterten Speicher) vollgestopft, aber wir haben engen C-Code und Assembly sowie das Wörterbuch geschrieben (was leicht möglich war) be> 250k alleine) war auf der Festplatte. Hier gibt es keine Anzeige oder gleichzeitige Bearbeitung, also ist das gut, aber das Wörterbuch muss klein sein ...
TJ Crowder

Oh, das ist nichts. Ich habe mich routinemäßig mit Gerichtsreportern befasst, die Wörterbücher hatten, die selbst in der von uns verwendeten sehr kompakten Form mehrere Megabyte groß waren. Das größte, das ich persönlich gesehen habe, war 4,5 MB - und das wurde wiederum in stark komprimierter Form gespeichert. Kombinieren Sie dies mit der Tatsache, dass auf einer Stenotastatur weniger Tasten als auf einer Klaviertastatur vorhanden sind. Der Arduino verfügt jedoch über einen USB-Anschluss, sodass sich das Wörterbuch möglicherweise auf einem USB-Flash-Adapter oder sogar auf einem (extern betriebenen) befindet ) SSD oder HDD.
TJ Crowder

2
@ Sie möchten möglicherweise einen Teenager anstelle eines Arduino ( pjrc.com/teensy ) als wesentlich mehr Speicher betrachten und können eine Tastatur direkt emulieren. Es ist bereits mit vielen Arduino-Bibliotheken kompatibel und die inkompatiblen erfordern nur eine Neuzuweisung der Pins. - alternativ macht atmega auch ein Demo-Board, das 16 MB eingebauten Flash hat und ungefähr 30 US-Dollar kostet (at90usbkey)
Marc

8
Das Entwerfen einer nützlichen Klavierschnittstelle für einen Computer ist keine leichte Aufgabe. Meiner Meinung nach sollte das OP es zuerst in seiner aktuellen Umgebung prototypisieren und sich dann, wenn es seine Anforderungen erfüllt, Sorgen um die Portabilität machen. Es sei denn natürlich, die tragbare Alternative ist nicht merklich schwieriger.
Emilio M Bumachar

111

Für mich klingt es so, als würden Sie weniger nach Ratschlägen suchen, wie Sie dies selbst erstellen können, als vielmehr zu fragen, welche Ressourcen bereits vorhanden sind, um das zu erreichen, was Sie wollen. Abhängig von Ihrem Betriebssystem gibt es viele Möglichkeiten, dies zu erreichen, ohne dass Sie Ihr eigenes Programm von Grund auf neu schreiben müssen:

MIDI Stroke

Kostenlos. Für Mac OS X 10.3 und höher . Dieser ist speziell mit "der Möglichkeit ausgestattet, jedes MIDI- Keyboard als vollständigen Ersatz für die Computertastatur zu verwenden".

Bome's MIDI Übersetzer

Free / Postcardware (es ist ein bisschen seltsam). Für Windows 2000 und höher, und Mac OS X . Es scheint zunächst eher auf die Verwendung vom AutoHotkey- Typ ausgerichtet zu sein , aber bei näherer Betrachtung denke ich, dass es das tun könnte, was Sie wollen.

Max und aka.keyboard

Kostenlos. Für Mac OS X . Nicht gerade eine "sofort einsatzbereite" Lösung, aber wenn Sie mit der grundlegenden Gerätekonfiguration vertraut sind, sollte es nicht so schlimm sein.


49

Sie können mit Quellcodebeispielen in .NET in MIDI DotNet auf die Hardware zugreifen .

Ein vollständiges Arbeitsbeispiel als Quellcode zum Erstellen eines MIDI-Noten-Datenstroms finden Sie in VB 5/6-Tipp 0521: MIDI-Töne-Funktionen (Visual Basic 6.0, irgendwo ist auch die .NET-Version)

Eine Möglichkeit, Tastaturanschläge zu simulieren, bietet VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, irgendwo auch .NET-Version)

Das Erkennen von Tastenanschlägen wird unter Tipp-Upload: VB.NET 0266: Globaler KeyHook beschrieben .

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie dann einfach eine gute Arbeitsmatrix für einen Klavierspieler Timo Böhme www.goldengel.ch

Auf dem Klavier und wenn Sie ein guter Spieler sind, können Sie 10 Finger auf der Tastatur haben, und wenn die Matrix verwendbar ist, können Sie viel schneller sein als jeder Computer-Tastaturbenutzer, den ich denke. :-)

In diesem Fall sollte es keine große Sache sein, wenn ich Ihre Frage richtig verstehe.


41

Ich habe am College Klavierperformance studiert und mich dann mit Interaktionsdesign, Programmierung und der Verwendung von Vim befasst. Daher habe ich viel Zeit damit verbracht, solche Dinge als Prototyp zu entwickeln.

Sie können dies unter Linux ziemlich schnell zum Laufen bringen, indem Sie die grafische Programmiersprache für Multimedia-Künstler " Pure Data " zusammen mit dem externen x11key von Alex Andre verwenden .

Auf einem Mac können Sie MidiStroke verwenden . Ich glaube, eine Methode unter Windows umfasste die Tools MidiOx und AutoHotKey . Zu einer anderen Zeit hatte ich eine Version, die das Java-Plugin für Max / MSP verwendete . Ich glaube, Patrice Colet hat ein externes Fenster für Pure Data erstellt, das ebenfalls funktioniert hat, aber ich kann es anscheinend nicht mehr finden. Es gibt auch ein externes für MaxMSP , das dies unter Windows tun kann. Schließlich kann der nicht kostenlose, aber großartige Oszillator tun, was Sie wollen - siehe die Funktionsseite.

Als ich es zum Laufen brachte, blieb ich nie dabei, weil ich nicht aufhören konnte, mit dem Layout zu arbeiten. Es war cool, nur meinen Monitor auf meiner elektrischen Tastatur zu haben! Viel Glück.


37

Über MIDI

Sie sagten, dass Sie "überhaupt nichts über MIDI wissen". Die MIDI-Technologie ist ziemlich einfach, wenn Sie sie erst einmal verstanden haben, aber sie kann am Anfang verwirrend sein. Eine der Ressourcen, die mir beim Verständnis der Grundlagen für MIDI (die sicherlich notwendig sind, wenn Sie MIDI-Interaktionen programmieren möchten) sehr hilfreich waren, ist ein Buch namens MIDI for the Technophobe . Es ist ein leicht zu lesendes Buch und sehr hilfreich.


Reine Daten & max

Nach meiner Erfahrung bei der Entwicklung interaktiver Multimedia-Programme sind mir zwei sehr ähnliche Programme begegnet, die das Verbinden und Zuordnen von Signalen / Eingängen von jedem Gerät aus erleichtern.

Dies sind Max für eine Mac-Umgebung und Pure Data für eine PC-Umgebung. Beide haben eine Vielzahl von Online-Dokumentationen und YouTube-Tutorials. Das Video Max / MSP Tutorial 1 - Verwenden Ihrer Computertastatur als Midikeyboard (Ableton-Stil) zeigt ein in Max integriertes Programm, das eine Computertastatur den Eingängen eines MIDI-Keyboards zuordnet (was im Grunde das genaue Gegenteil von dem ist, was Sie versuchen). Sie können Ihre beabsichtigten Ergebnisse erzielen, indem Sie dasselbe Muster verwenden, aber die Signale / Zuordnungen umkehren.


AutoHotKey

AutoHotKey ist ein kostenloses Open Source-Dienstprogramm für Windows, mit dem Sie Tasten und Schaltflächen auf Ihren Geräten Makros zuordnen können. Es unterstützt nativ QWERTZ-Tastaturen, Joysticks und Mausmakros.

Ich konnte jedoch eine Implementierung finden, die das von Ihnen gesuchte spezifische Mapping unterstützt. Diese beiden Themen erklären den Prozess:

  1. MIDI IN-Unterstützung in AutoHotkey , die Diskussion des Anwendungsfalls. Der Autor suchte nach einem Programm, das MIDI IN-Eingaben erkennen und in Tastendrücke übersetzen konnte .

  2. MIDI-Eingangsbibliothek , die Lösung für das Problem des Autors und der auf AutoHotKey veröffentlichte Code / Patch, der Ihr beabsichtigtes Ergebnis tatsächlich implementiert.

Grundsätzlich sieht es so aus, als ob AutoHotKey zusammen mit dem benutzerdefinierten Patch dieses Benutzers genau das bietet, was Sie benötigen, um eine Zuordnung von einem MIDI-Keyboard zum Eingangssignal eines QWERTZ-Keyboards zu erstellen. Sie müssten lediglich Ihre Zuordnungen installieren, konfigurieren und definieren.


Noch etwas?

Einige der anderen Antworten haben Ihnen viel umfassendere Informationen zur MIDI- und MIDI-Programmierung im Allgemeinen gegeben, aber wie in Ihrem Beitrag angegeben, scheint dies nicht ganz das zu sein, wonach Sie suchen. Ich würde Ihnen gerne mehr helfen, wenn möglich, aber es wäre einfacher, wenn Sie die Art der gesuchten Informationen genauer beschreiben könnten. Interessieren Sie sich beispielsweise mehr dafür, wie Sie die Eingangssignale eines MIDI-Keyboards in die Signale eines QWERTZ- Keyboards umwandeln können , oder suchen Sie in erster Linie nach einer sofort einsatzbereiten Lösung für Ihr spezifisches Problem? Was suchen Sie, das noch nicht angesprochen wurde?


27

Mit einem Teenys-Mikrocontroller können Sie Ihre eigene USB-Tastatur ziemlich schnell hacken.

Tatsächlich haben sie Beispielcode für die Herstellung einer USB-Tastatur .

Sie können dies auf zwei Arten angehen:

  1. Holen Sie sich ein altes Klavier und verdrahten Sie die Schalter direkt mit dem Teenager

  2. Fügen Sie die zusätzliche Logik hinzu, um eine Verbindung zum MIDI-Port herzustellen, und fügen Sie die erforderliche Decodierung hinzu.


Dies ist die vielversprechendste Antwort, da sie nach Abschluss der Geräte auf jedem Computer und jedem Betriebssystem funktioniert. Nehmen Sie es mit zur Arbeit oder freuen Sie sich, dass Sie Ihren Computer aktualisieren können, ohne sich um die Tastatur sorgen zu müssen. Ich würde zwei Teensy-Geräte verwenden und sie mit ihren E / A-Pins verbinden. Da Teensy bereits USB MIDI pjrc.com/teensy/td_midi.html unterstützt, muss sich Ihr Code nur um das Bewegen von Signalen zwischen dem Keyboard Teensy und dem Midi Teensy kümmern.
Michael Dillon

24

Eigentlich habe ich vor einiger Zeit daran gearbeitet und versucht, Rockband- Drum-Eingaben in meinen Computer zu erfassen (wodurch ein kleiner Java-Drum-Emulator erstellt wurde). Wie auch immer, ich habe hier eine Frage zu diesem Problem gestellt: Zeitverzögerungsproblem (dort ist Polling-Code zusammen mit dem, was ich versucht habe zu tun.). Und wenn ich mein Programm finde, kann ich Ihnen den Code geben, es verwendet eine Drittanbieter-API ( JInput ).

Viel Glück so oder so.


23

Probieren Sie den MIDI-Übersetzer von Bome aus .

Es funktioniert plattformübergreifend, kann jeden MIDI- Eingang einfach in einen Keystoke umwandeln, lässt sich schnell einrichten und konfigurieren und ist für den persönlichen Gebrauch kostenlos.

Es gibt ein Tutorial, Kurztipp: MIDI-Übersetzung - MIDI zu Tastenanschlägen , wie Sie es einfach einrichten können:

Grundsätzlich gibt es unendlich viele Möglichkeiten, einschließlich Chording- und Modifier-Tasten. Ich verwende es für mein Live-Audio-Rig, um meine DAW mit meinem Klavier zu steuern, und hatte noch nie ein Problem.


18

In Java können Sie JMF (Java Media Framework) verwenden, um MIDI-Signale zu konvertieren. Die Grundlagen des Tastaturdesigns sind einfach zu bedienen, dh die Benutzeroberfläche. und häufig verwendete Zeichen / Symbole griffbereit stellen.

Der Beispielcode und die API in Java Sound Resources: Beispiele: Digitale Signalverarbeitung (DSP) helfen zu verstehen, wie das Signal verarbeitet wird.

Einige weitere Referenzen:


15

Es gibt ein Programm namens GlovePIE . Sie können es in einer einfachen Skriptsprache programmieren, und ich glaube, es unterstützt MIDI. Ich bin mir nicht sicher, ob dies in die Kategorie "Java" passt, aber es ist trotzdem ein großartiges Programm. Ich habe es verwendet, um Roboter mit PS3- Controllern zu steuern. Es ist sehr mächtig.


15

Viele Keyboards verfügen über einen RS-232- Anschluss (Serial Port ), über den MIDI-Signale an den Computer gesendet werden können. Ich verwende ein Programm namens Girder , um die Kommunikation über die serielle Schnittstelle in Tastaturanschläge umzuwandeln.

Girder verfügt über eine Zuordnungsfunktion, mit der Sie jede Taste einzeln dem entsprechenden Tastenanschlag zuordnen können.

Dies könnte die einfache Lösung sein, nach der Sie suchen!


12

Lerne einfach Stenographie!

Das geht aus allen Diskussionen von Ihrer Seite hervor. Aus technischer Sicht möchten Sie keine Räder neu erfinden. Aber sobald Sie eine Verbindung hergestellt haben (was diese Frage stellt) und arbeiten, haben Sie immer noch den größten Teil der Arbeit vor sich: Sie müssen Ihr Gehirn trainieren. Sie müssen auch den klügsten und effizientesten Weg finden, um dies zu erreichen - ein Designproblem, das völlig aus dem Rhythmus der Computertechniker heraus entstanden ist. Sie oder einer von uns würde zu kurz kommen.

Glücklicherweise wurde das Problem durch Jahrhunderte der Reifung gelöst und verbessert ...

Lerne Stenographie!

Ja, das bringt dich zurück. Aber was sind Hunderte von Stunden Ihrer eigenen Zeit wert, mit am Ende einem weniger günstigen Ergebnis? Außerdem heißt es in dem Wikipedia-Artikel zur Stenografie : "Es sieht eher aus wie eine Klaviertastatur."

Es sei denn, Sie möchten natürlich einen Sideshow-Effekt erzielen. Ich würde zugeben müssen, ich hätte nie an diese Möglichkeit gedacht, es wäre wirklich unterhaltsam zu sehen, wie jemand einen Text von einer Klaviertastatur heraussprengt!

Sie könnten mit einer USB-Tastatur mit Touchpad beginnen (oder ein Zeigestab wäre ergonomischer?) Und Plover verwenden , um sie zu übersetzen (ich bin sicher, dass sie so konfiguriert werden kann, dass die Nicht-Buchstaben-Tasten ihre Funktionalität behalten, für die sie wichtig sind Programmieren), oder folgen Sie dem Thread Re: Plover-Tastatur, um Ihre eigene USB-Stenografietastatur zu rollen, oder kaufen Sie einen Stenotyp .

Viel Glück!


Wo befinden sich {und} auf der Stenografietastatur? Wie werden Sie Namen eingeben, die keine Wörter sind pthread?
Bobobobo

Der Wikipedia-Link ist falsch und sollte en.wikipedia.org/wiki/Stenography
joelhoro

11

Schauen Sie sich MAME Arcade-Spiele an. Sie haben Hardwaregeräte gebaut, um Eingaben von einer beliebigen Anzahl verschiedener Elemente zu ermöglichen. Der iPac konvertiert beispielsweise Signale von Eingabegeräten in USB, mit denen der Computer Schlüssel emulieren kann. Sie können eine beliebige Kombination von Eingabegeräten verwenden, die so angeordnet ist, dass sie ohne verrückte Programmierlogik bequem erscheint - da die Software zur Interpretation der Eingabe bereits fertig und gut getestet ist.

Ich habe Flugsimulator-Cockpit-Eingaben, benutzerdefinierte Kioske und Abstimmungssysteme gesehen, die in dieser Methode gebaut wurden ... und der Preis stimmt!


10

Um dies zu lösen, benötigen Sie einige Dinge:

  1. Eine Möglichkeit, MIDI-Daten von Ihrem Keyboard zu erfassen. Abhängig von der Schnittstelle: MIDI-Schnittstelle (klassisch) oder USB- MIDI-Schnittstelle (modern) ist die wahrscheinlichste Schnittstelle zu einem Computer, da sie die meisten Optionen bietet. USB-Host-Mikrocontroller sind nicht so einfach wie die Verwendung eines Computers.

  2. Ein Schema zum Konvertieren von MIDI-Daten in Tastenanschläge. Wie ein Benutzer betonte, sind Akkorde der richtige Weg, da die Anzahl der Tasten nicht von der Anzahl der Klaviertasten abhängt.

  3. Eine Möglichkeit, einen Schlüssel in das Betriebssystem einzufügen. Dies erfordert einen Low-Level-Treiber, um genau zu sein. Ich habe mit Anwendungen herumgespielt, die Tastatur- und Mausdaten in Anwendungen in Windows 7 einfügen. Dies kann unzuverlässig sein und davon abhängen, ob eine Anwendung derzeit im Fokus steht. Dies ist der schwierigste Teil der Schnittstelle. Möglicherweise wird ein HID- USB-Tastatur-Mikrocontroller erstellt, der auch über eine serielle Schnittstelle verfügt.

Die serielle Schnittstelle würde eine virtuelle serielle Schnittstelle erstellen. Die Software, die die MIDI-Daten liest und die Tastenanschläge erzeugt, kann eine serielle Nachricht an die virtuelle serielle Schnittstelle senden. Der Mikrocontroller sendet einen Tastendruck, sodass er wie eine Standardtastatur aussieht. Dies würde die Verbindung von MIDI-Ports und USB-MIDI-Keyboards ermöglichen.

Hmmm, mit dieser Art von Schnittstelle können Sie auch eine Maus simulieren und einige Klaviertasten für die Mausachse und die Tasten verwenden. Der Druck könnte verwendet werden, um die Geschwindigkeit des Mauszeigers zu bestimmen. Sie können also auch die Maus entfernen. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass jede Art von Eingabegerät, das Sie verbinden, mit der virtuellen seriellen Schnittstelle kommunizieren kann, um Tastatur- und Mausereignisse zu erzeugen. Wenn Sie also andere Hardware wie Drum-Pedale oder einen Joystick hinzufügen möchten, müssen Sie das Programm anpassen, das mit der seriellen Schnittstelle kommuniziert.

Eine andere Sichtweise ist wie die oben beschriebenen, um ein Arduino zu verwenden, enthält aber auch USB Host Shield von Sparkfun für die Handhabung von USB-basierten Musiktastaturen. Dadurch kann der Arduino als Tastatur- oder Tastaturmauskombination im Bootloader-Chip programmiert werden und das Gerät kann als USB- Host für die USB-basierte Musiktastatur fungieren . Dann sind Sie für beide Typen abgesichert. Ich denke jedoch immer noch, dass die Methode der virtuellen seriellen Schnittstelle flexibler ist und auf lange Sicht einfacher zu programmieren wäre. Das Arduino-Gerät ist schwieriger zu ändern als ein Desktop-Programm oder -Dienst.

Es gibt noch eine andere Möglichkeit: Akkordierte Einhandtastaturen gibt es bereits. Ich habe Videos auf ihnen gesehen, aber Sie müssten feststellen, ob diese Ihre Hände verletzen oder nicht.


7

Es sollte ziemlich einfach sein, mit etwas wie der .NET DirectSound-Schnittstelle ein MIDI-Gerät anzuschließen. Sie müssen Ihr Ziel-MIDI-Gerät identifizieren und dann den Code erhalten, um die eingehenden Nachrichten abzuhören (es gibt Artikel dazu über Google).

Da Sie den MIDI-Eingang als Keyboard verwenden, müssen Sie grundsätzlich nur zwei MIDI-Meldungen erkennen, nämlich Note On und Note Off. Die MIDI-Nachricht besteht aus drei Datenbytes, die den Befehl, die Note und die Velocity angeben. Die Note aus ist nur die Notennummer (manchmal senden 'schlechte' MIDI-Stacks eine Note mit einer Geschwindigkeit von Null weiter, die Sie ebenfalls erwarten müssen).

Sobald Sie die Nachrichten haben, die sie übersetzen, sollte die Tastaturausgabe von .NET ziemlich einfach sein.

In den anderen Antworten gibt es viele Ratschläge zu den technischen Details. Ich wollte Ihnen nur eine Vorstellung von den tatsächlichen MIDI-Nachrichten geben. Viel Glück!


Als Randnotiz bietet das Dokument 'Universal Serial Bus Device Class Definition für MIDI-Geräte' einen sehr übersichtlichen Überblick über MIDI-Nachrichten: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns

7

Sie erhalten bessere und zufriedenere Ergebnisse (unabhängig davon, welches Betriebssystem und / oder DAW- Programm Sie verwenden möchten), wenn Sie ein externes MIDI-Keyboard als Controller über Ihre Soundkarte spielen. Leiten Sie das dann in Ihre GB-Software (oder was auch immer) und erzeugen Sie in Echtzeit die vielen Sounds, die sie Ihnen auf diese Weise geliefert haben.

Wenn Ihre Soundkarte keine MIDI-E / A (Ins / Outs / Thrus) unterstützt, ist dies kein Problem. Sie können einen externen MIDI-Tischkonverter suchen und in diesen investieren. Viele sind für die weitere Konvertierung von MIDI-Ausgängen in USB 2.0 ausgestattet (unter Umgehung einer vorhandenen Soundkarte insgesamt).

Zum Beispiel: Es ist ziemlich schwierig, über eine Z- und X-Änderungstastenoption mit einer Computertastatur und einem Bleistiftwerkzeug "menschenähnliche" Gnadennotizergebnisse zu erhalten. Wenn stattdessen Ihre eigenen Finger dies einfach mit einem MIDI-Keyboard aus den eigenen physischen Oktavregisterbereichen spielen können - sofort!

Mir ist klar, dass dies mit Budgetbeschränkungen verbunden sein kann. Einige dieser scheinbar billigen "Casio" -Typ-5-Oktav-Keyboards, die bei Radio Shack für unter 100 US-Dollar (* oder weniger) verkauft werden, sind jedoch alles, was Sie benötigen (plus einige der integrierten Sound-Patches und Sequenzer-Module klingen und handhaben erstaunlich gut auch für andere Dinge).

RadioShack MIDI-Keyboard-Optionen .

In Bezug auf externe MIDI-Konverter für vorhandene Soundkarten habe ich einige Google-Suchanfragen für Sie wie folgt durchgeführt, wobei speziell auf Mac-Plattformen eingegangen wurde:

Viele dieser externen MIDI-Konvertierungsinformationen sind für Sie zunächst möglicherweise umständlich, daher habe ich die Dinge für Ihre Überlegungen und Ihr Budget eher als "benutzerfreundlich" eingestuft:

Es ist nichts Falsches daran, virtuelle Tastaturen als VSTs zu verwenden , wenn DAW verwendet wird . Sie haben ihren Platz.

Aber Sie klingen wie ein versierter Keyboarder. Warum also nicht die externen MIDI-Konvertierungs- / Keyboard-Optionen in Betracht ziehen, die ich gerade für Sie erwähnt habe?

Viel Glück und ich hoffe, das hat Ihnen einige Ideen gegeben, die für Sie funktionieren können und werden!


6

Wenn Sie nicht selbst programmieren möchten, sondern nur das Problem lösen möchten, können Sie einfach ein USB-MIDI-Keyboard kaufen, bei dem Sie eine beliebige Taste neu zuweisen können, um ein QWERTZ-Tastaturausgangssignal anstelle eines MIDI-Ausgangs zu senden Beispiel M-Audio Axiom Pro

Diese Methode funktioniert mit jedem Betriebssystem und jedem Computer, der Standard-USB-Keyboards unterstützt, da sich das MIDI-Keyboard als Standard-QWERTZ-Keyboard identifiziert.


Wissen Sie, ob es möglich wäre, auch bestimmten Tastenanschlägen Akkorde zuzuweisen? Wenn ich zum Beispiel C MAJOR Akkord spiele, kann ich das in "Der Fuchs sprang" übersetzen lassen
l - '' '' '-' '' '' '' '' '' '' ' '

Tut mir leid, dass ich nicht so schnell geantwortet habe, ich hatte 4 Tage Urlaub;) Nein, leider können Sie nur einen QWERTZ-Code pro Taste zuweisen, so dass es so ziemlich als Standardtastatur funktioniert.
Martin Odhelius

Übrigens, wenn Sie eine kaufen, denken Sie daran, die PRO-one zu kaufen, da ich nicht glaube, dass die Nicht-PRO-Version die QWERTZ-Zuweisungsfunktionalität hat.
Martin Odhelius

Ich glaube nicht, dass es möglich ist, ASCII-Codes Akkorde zuzuweisen, nur eine Taste pro Code, aber ich werde dies heute Abend in meinem eigenen Axiom überprüfen, wenn ich von der Arbeit nach Hause komme.
Martin Odhelius

Mir ist gerade aufgefallen, dass es nur möglich ist, den Steuertasten (Funktionstasten, Drum-Pads, Zifferntasten usw.) QWERTY-Codes zuzuweisen, nicht den eigentlichen Klaviertasten auf der Tastatur. Ich besitze diese Tastatur selbst und war mir sicher, dass es möglich war, jeder Taste ASCII-Codes zuzuweisen, aber jetzt, als ich sie ausprobierte, bemerkte ich, dass das falsch war! Es tut mir sehr leid, ist es möglich, die Belohnung auf irgendeine Weise zurückzusetzen?
Martin Odhelius

6

Sie können ein einfaches AutoIt- Skript verwenden, um beide MIDI-Events zu lesen (siehe MIDI-Eingang) .

Sie benötigen außerdem MIDI UDF und simulieren Tastendrücke .

Das Lesen von MIDI-Events sollte einfach sein, aber verschiedene MIDI-Controller (Instrumente) haben unterschiedliche Funktionen. Versuchen Sie zuerst herauszufinden, was Ihr MIDI-Piano kann, und sehen Sie dann, wie Sie diese Funktionen am besten simulierten QWERTZ- Tastenpressen zuordnen können.

Wenn Sie möchten, können Sie etwas auf dem Bildschirm oder in dem Fach haben, damit Sie sehen , was Sie tun (das heißt, für Shift, Ctrlund AltSimulation).


5

Sie können sich auch akkordierte Tastaturen ansehen . Sie haben den Vorteil, dass Sie keinen Treiber für sie schreiben müssen, bevor Sie sie verwenden können, und einige ähneln dem Layout einer Klaviertastatur.


5

Wenn Sie mit Codierung in Java vertraut sind, können Sie Folgendes verwenden:

Implementieren Sie zunächst a javax.sound.midi.Receivermit einer send(..)Methode, die die "Hinweis zu" -Ereignisse den gewünschten Tastenanschlägen zuordnet.

Sie müssten den Inhalt der MidiMessage mit ihrer getMessageMethode abrufen und auf Ihre Weise interpretieren. Die Bedeutung der Nachrichtenbytes finden Sie in MIDI-Nachrichten .

Nachdem Sie für eine bestimmte Tastaturtaste eine Notiz zum Ein- oder Ausschalten erhalten haben, können Sie diese einer beliebigen Taste zuordnen, indem Sie ihr eine Konstante der KeyEvent-Klasse zuweisen, z. B. C # 4 -> KeyEvent.VK_A usw. . Dieser Schlüsselcode kann dann von java.awt.Robotden Methoden keyPress und keyRelease verwendet werden, um den Tastenanschlag tatsächlich an das Betriebssystem und damit an andere Anwendungen zu senden.


4

Ich stimme der Antwort von Brian O'Dell zu - wenn dies mein Projekt wäre, würde ich es in Hardware tun. Es hat den Vorteil, dass es plattform- und hardwareunabhängig ist - Ihre Box ersetzt eine MIDI-USB-Schnittstelle und eine PC-API.

mbed ist eine Plattform für schnelles Prototyping, die sehr einfach zu erlernen ist und gegenüber Arduino IMHO (Online-Compiler, 512 KB Flash, 96 MHz, C ++) mehrere Vorteile bietet. Es verfügt über eine USB-Tastaturschnittstelle und eine für Sie vorab geschriebene USB-Midi-Schnittstelle .

Die Community ist sehr freundlich und hilfsbereit, und es gibt viele bestehende Projekte, die sowohl MIDI- als auch USB-Hid-Emulation verwenden. Suchen Sie auf Youtube nach "mbed MIDI" oder ähnlichem.


4

Wenn Sie Linux verwenden, probieren Sie Footware aus .

Es sollte genau das sein, wonach Sie suchen - wenn Sie die MIDI-Tonhöhen auf ein Keymapping nach Ihren Wünschen einstellen ...

Ich hätte nie gedacht, dass dies für irgendjemanden außer mir nützlich sein könnte; o)


2
Bei meinem vorherigen Job als Administrator hatte ich einen Fuß-Controller unter meinem Schreibtisch - um das Verlassen der Home-Reihe in vim zu minimieren
FlashKorten


1

Das wäre nicht zu schwer.

Ich gehe davon aus, dass Sie unter Windows arbeiten , bin mir aber nicht sicher. Ich habe einen MIDI- Sequenzer, http://pianocheetah.com , in einfachem altem C ++ geschrieben , mit dem Sie Befehle über die Klaviertastatur ausführen können. Es gibt keinen Grund, warum Sie nicht dasselbe tun könnten, um Tasten in den Tastatureingabestream zu drücken.

Aber komm schon. Sie erinnern sich, wie lange Sie überhaupt gebraucht haben, um die Tastatur zu lernen, oder? Bist du bereit, das noch einmal durchzugehen? Und sind Sie bereit, Ihre gesegnete Tastatur mit einer Menge dumm aussehender Schlüsselsymbole zu verschmutzen?

Sie müssen mindestens 26 Alpha-, 10 numerische, 11 Interpunktions- und mindestens 12 Funktionstasten UND deren verschobene Zustände verwenden. Das sind also 60 Tasten plus verschobene Zustände. Das verbrennt volle 5 Oktaven Tasten. Sie werden Klavier "Hopfen" = die ganze Zeit machen. Verabschieden Sie sich vom Tippen.

Sie können sich vor RSI retten , aber Sie haben sich eine andere Art von Albtraum geschaffen.

Und viel Glück, dass Ihr Chef Ihnen bei der Arbeit ein MIDI-Keyboard kauft.

Wenn Sie gelernt haben, wirklich Klavier zu spielen, haben Sie gelernt, stressfrei zu spielen. Tun Sie das auf der QWERTZ- Tastatur. Keine Spannung. Fangen Sie langsam an.


Vielen Dank für die freundlichen Worte, aber ich habe meinen Hintern an dieser Sache herausgearbeitet und habe nicht vor, sie Open Source zu machen - sorry. Aber was Sie tun würden, ist midiInOpen () zu verwenden; Geben Sie ihm einen Rückruf, um MIDI-Eingaben zu verarbeiten. Ignoriere alles außer notierten Ereignissen, ordne die MIDI-Note einer Tastaturtaste zu und füge sie in den Tastatureingabestream ein (ich vergesse die API dafür, aber ich bin mir ziemlich sicher, dass es mindestens eine gibt).
Stephen Hazel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.