Utilisation d'un clavier de piano comme clavier d'ordinateur [fermé]

727

J'ai des problèmes RSI et j'ai essayé 30 claviers d'ordinateur différents qui m'ont tous fait mal. Jouer du piano ne me fait pas mal. Je joue du piano depuis environ 20 ans sans aucun problème de douleur. Je voudrais savoir s'il existe un moyen de capturer du MIDI à partir d'un clavier MIDI et de générer des traits de clavier. Je ne connais rien du tout au MIDI, mais j'aimerais avoir des conseils sur la façon de convertir ce signal en une frappe.

Peter Mortensen
la source
pourquoi capturer midi, si vous pouvez utiliser un clavier synthétiseur comme clavier?
shevski
@I__: Quel système d'exploitation devez-vous prendre en charge? Cela importera probablement.
TJ Crowder
5
@shevski: Je n'essaye pas de faire quoi que ce soit, @I__ est la personne qui pose la question. Il ne cherche pas à convertir le son , mais plutôt les signaux d'événement du clavier numérique envoyés par les claviers électroniques via l' interface numérique de l'instrument de musique . Celles-ci ressemblent beaucoup aux événements du clavier de l'ordinateur: "Note on" correspond bien à la frappe au clavier, "note off" à la frappe, etc. Vous pouvez même utiliser les données de vélocité pour effectuer différentes actions en fonction de la force de l'accord joué. J'adore l'idée.
TJ Crowder
34
Si cela fonctionne, vous pouvez coder en utilisant n'importe quel type de périphérique midi. Cela prend probablement un peu de pratique, mais utiliser un orchestre comme équipe de développement devrait être amusant.
Toon Krijthe
1
@I__: La réponse la plus votée vous indique le support MIDI de l'API audio Java, qui devrait vous permettre de recevoir des données MIDI, et décrit en détail la théorie impliquée dans la transformation de cela en séries de frappes. La deuxième réponse la plus votée parle d'une manière très viable de connecter ensuite cela à un ordinateur en utilisant un Arduino, y compris ... (suite)
TJ Crowder

Réponses:

16

Une bonne bibliothèque en .NET avec un support midi complet (BASS), allez sur http://www.un4seen.com .

Et pour l'autre partie, la traduction des notes midi du clavier en touches et plus, j'irais pour AutoItX, l'interface ActiveX / COM et DLL pour autoIt. Infos et téléchargement, rendez-vous sur http://www.autoitscript.com/site/autoit/

Pas besoin d'écrire le pilote du clavier.

eln
la source
430

Je n'ai pas fait de programmation MIDI depuis des années, mais votre idée fondamentale est très saine (sans jeu de mots).

Le MIDI est un flux d '"événements" (ou "messages"), deux des plus fondamentaux étant "note on" et "note off" qui portent avec eux le numéro de note (0 = C cinq octaves en dessous du do moyen, jusqu'à 127 = G cinq octaves au-dessus du G au-dessus du do moyen, en demi-tons). Ces événements portent un numéro de "vélocité" sur les claviers sensibles à la vélocité ("tactile"), avec une force (vous l'avez deviné) comprise entre 0 et 127.

Entre la vélocité, les accords et les pédales, je pense que vous pourriez trouver une assez bonne interface de "frappe" pour le clavier de piano. Les accords en particulier pourraient être une technique très puissante - comme je l'ai mentionné dans les commentaires, c'est pourquoi les sténographes de rang peuvent utiliser une machine à sténotypes pour suivre les gens qui parlent pendant des heures d'affilée, alors que même les dactylographes de haut niveau ne le feraient pas '' t être en mesure de n'importe quelle durée via des claviers de style machine à écrire normaux. Comme pour la sténographie machine, vous auriez besoin d'un "dictionnaire" des significations des accords et des séquences d'accords. (Pouvez-vous dire que je travaillais dans le domaine logiciel de la sténographie de la machine?)

Pour ce faire, les pièces fondamentales sont:

  • Réception d'une entrée MIDI. N'essayez pas de le faire vous-même, utilisez une bibliothèque. Modifier : Apparemment, l'API Java Sound prend en charge le MIDI , y compris la réception d'événements des contrôleurs MIDI. Cool. Cette page peut également être utile.
  • Conversion de ces données dans les frappes que vous souhaitez envoyer, par exemple via le dictionnaire que j'ai mentionné ci-dessus.
  • Sortie des frappes sur l'ordinateur.

Pour être le plus largement compatible avec les logiciels, vous devez l'écrire en tant que pilote de périphérique clavier. Il s'agit d'un plug-in pour le système d'exploitation qui sert de source pour les événements de clavier, parlant au matériel sous-jacent (dans votre cas, le clavier de piano). Pour Windows et Linux, vous voudrez probablement utiliser C pour cela.

Cependant, comme vous ne faites que générer des frappes (sans essayer de les intercepter, ce que j'essayais de faire il y a des années), vous pouvez peut-être utiliser toutes les fonctionnalités du système d'exploitation pour envoyer des frappes artificielles. Windows a une interface pour le faire (probablement plusieurs, celle à laquelle je pense, SendInputmais je sais qu'il existe une interface "journal" qui fait quelque chose de similaire), et je suis sûr que d'autres systèmes d'exploitation font de même. Cela pourrait bien être suffisant pour vos besoins - c'est là que je commencerais, car la route du pilote de périphérique va être maladroite et vous devrez probablement utiliser un langage différent pour Java que Java. (Je suis un grand fan de Java, mais les interfaces que les systèmes d'exploitation utilisent pour parler aux pilotes de périphériques ont tendance à être plus facilement consommées via C et similaires.)


Mise à jour : En savoir plus sur le "dictionnaire" des accords aux frappes:

Fondamentalement, le dictionnaire est un trie (merci, @Adam) que nous recherchons avec la correspondance du préfixe le plus long. Détails:

Dans la sténographie machine, le sténographe écrit en appuyant simultanément sur plusieurs touches de la machine sténotype, puis en les relâchant toutes. Ils appellent cela un "coup" du clavier; c'est comme jouer un accord au piano. Les coups correspondent souvent (mais pas toujours) à une syllabe de la langue parlée. Comme les syllabes, parfois un trait (accord) a un sens à lui tout seul, d'autres fois il n'a qu'un sens combiné avec les traits suivants. (Pensez "bien" vs "bien" suivi de "au revoir"). Bien qu'ils soient fortement influencés par l'école dans laquelle ils ont étudié, chaque sténographe aura son propre "dictionnaire" des coups qu'ils utilisent pour signifier quoi, un dictionnaire qu'ils perfectionneront continuellement au cours de leur vie professionnelle. Le dictionnaire aura des entrées où la partie sténographique ("sténo", pour faire court) est longue d'un trait ou longue. Fréquemment, il y aura plusieurs entrées avec le même coup de départ qui sont différenciées par leur longueur et par les coups suivants. Par exemple (et je n'utiliserai pas de véritable sténo ici, juste des espaces réservés), il peut y avoir ces entrées:

A = alpha
A / B = alphabet
A / B / C = alphabétique
A / C = climatisation
B = abeille
B / C = parce
C = mer
D = chien
D / D = Dee Dee

(Ces lettres ne sont pas censées être des notes de musique, juste des marqueurs abstraits.)

Notez que Adémarre plusieurs entrées, et notez également que la façon dont vous traduisez un Ctrait dépend de si vous avez déjà vu un A, un Bou un nouveau départ.

Notez également que (bien que cela ne soit pas illustré dans le très petit exemple ci-dessus), il peut y avoir plusieurs façons de "jouer" le même mot ou la même phrase, plutôt qu'une seule. Les sténographes font cela pour faciliter le passage d'un mot précédent au suivant selon la position de la main. Il y a une analogie évidente avec la musique, et vous pouvez l'utiliser pour rendre votre flux de frappe plus proche de la lecture de musique, afin à la fois d'éviter que cela n'affecte négativement votre jeu de piano et de maximiser la probabilité que cela aide réellement avec le RSI.

Lors de la traduction de sténo en texte standard, nous utilisons à nouveau une recherche de «correspondance du préfixe le plus long»: l'algorithme de traduction commence par le premier trait jamais écrit et recherche les entrées commençant par ce trait. S'il n'y a qu'une seule entrée et qu'elle est longue d'un trait, alors nous pouvons dire de manière fiable "c'est l'entrée à utiliser", sortir le texte correspondant, puis recommencer à zéro avec le trait suivant. Mais plus probablement, ce trait démarre plusieurs entrées de longueurs variables. Nous regardons donc le coup suivant et voyons s'il y a des entrées qui commencent par ces deux coups dans l'ordre; et ainsi de suite jusqu'à ce que nous obtenions un match.

Donc, avec le dictionnaire ci-dessus, supposons que nous ayons vu cette séquence:

ACBBCABCABD

Voici comment nous le traduirions:

  1. Aest le début de trois entrées de longueurs variables; regardez le coup suivant:C
  2. A/Ccorrespond à une seule entrée; sortie "climatisation" et recommencez à zéro avec le coup suivant:B
  3. Bdémarre deux entrées; regardez le coup suivant:B
  4. B/Bne démarre rien; prendre la correspondance précédente ( B) la plus longue et la sortie ("abeille")
  5. Ayant output B= "bee", nous avons encore un Btrait dans notre tampon. Il démarre deux entrées, alors regardez le coup suivant:C
  6. B/Ccorrespond à une entrée; sortir "parce que" et recommencer à zéro avec le coup suivant:A
  7. Acommence trois entrées; regardez le coup suivant:B
  8. A/Bdémarre deux entrées; regardez le coup suivant:C
  9. A/B/Cne correspond qu'à une entrée; sortie "alphabétique" et recommencez avec le coup suivant:A
  10. Acommence trois entrées; regardez le coup suivant:B
  11. A/Bdémarre deux entrées; regardez le coup suivant:D
  12. A/B/Dne correspond à rien, alors prenez la plus longue correspondance précédente ( A/B) et utilisez-la pour sortir "alphabet". Cela nous laisse Dencore dans le tampon.
  13. Dcommence deux entrées, donc nous devrions normalement regarder le coup suivant - mais nous avons traité tous les coups, alors considérez-le isolément. Isolément, cela se traduit par "chien", donc sortez cela.

Aspects de ce qui précède à noter:

  • Vous avez un tampon de traits que vous avez lu mais que vous n'avez pas encore traduit.
  • Vous voulez toujours faire correspondre le plus de coups à une seule entrée possible. A/Bdevrait être traduit par "alphabet", pas "alpha" et "abeille".
  • (Non illustré ci-dessus) Vous pouvez très bien avoir des séquences de traits que vous ne pouvez pas traduire, car ils ne correspondent à rien dans le dictionnaire. (Les personnes sténo utilisent le nom "non traduit" - par exemple, avec notre dictionnaire, les traits Eseraient un "non traduit".)
  • (Non illustré ci-dessus) Certaines théories du sténo permettent à un même ensemble de traits de signifier plus d'une chose, en fonction d'un contexte plus large. Les Sténon appellent ces «conflits». Vous voulez probablement les interdire dans votre projet, et en fait, lorsque sténo était traduit manuellement par le sténographe, les conflits allaient bien car ils savaient exactement par où, dans la phrase, ils étaient le bon choix, mais avec la montée en puissance de la traduction automatique, des théories sans conflit sur la sténographie sont apparues spécifiquement pour éviter d'avoir à parcourir le texte traduit et à "résoudre" les conflits.
  • La traduction en temps réel (ce que vous feriez) signifie que si vous recevez une correspondance partielle, vous voudrez la conserver en attendant le prochain accord - mais probablement seulement jusqu'à un délai d'attente, auquel moment vous traduisez le mieux possible ce que vous avez dans le tampon. (Ou peut-être que vous ne voulez pas de délai d'attente; c'est votre appel.)
  • Il est probablement préférable d'avoir un accident vasculaire cérébral qui dit "ne pas tenir compte de l'accident vasculaire cérébral précédent"
  • Il est probablement préférable d'avoir un trait qui dit "effacer complètement le tampon sans rien sortir"
TJ Crowder
la source
6
@I__: Certains programmes essaient de parler directement au clavier et ne jouent donc pas bien avec les interfaces de type "sendkeys". J'espère que cela est encore moins courant maintenant qu'il y a quelques années lorsque j'ai traité cela pour la dernière fois, et comme je l'ai dit, je commencerais par des mécanismes de type "sendkeys" et ne me soucierais de l'autre que si et quand vous en auriez besoin. (Probablement mieux de faire un programme rapide pour tester l'envoi de clés [seul, pas en les recevant de MIDI] - y compris des séquences de touches spéciales - puis pour tester cela avec le logiciel que vous souhaitez contrôler avant d'aller trop loin sur le chemin .)
TJ Crowder
7
Pour ceux qui n'ont jamais entendu parler de cela, le dictionnaire que vous décrivez est essentiellement un Trie (prononcé `` essayer '')
Adam
14
@I__: Intéressant d'écrire maintenant pour le dire. Que veux-tu de plus? Je pense que j'ai abordé bon nombre des aspects importants de ce que vous devez faire. Je ne l'ai pas fait , ni pointé vers quelqu'un qui l'a fait, car j'ai d'autres choses à faire et je ne connais pas de solution préconfigurée. Mais en termes de construction d' une solution, je pense que je vous ai indiqué la bonne direction.
TJ Crowder
2
Notez que vous pouvez bloquer tous les accords dans un tableau linéaire et effectuer une traversée à chaque fois que vous recevez un événement midi, sans pour autant subir de ralentissement notable. Utiliser un trie sent légèrement l'optimisation prématurée.
FeepingCreature
5
@FeepingCreature: Lorsque je faisais cela avec des sténographes et des sténographes judiciaires, leurs dictionnaires pouvaient facilement atteindre les centaines de milliers d'entrées (je me souviens de celui qui a franchi le cap du million). Il n'y avait rien de prématuré à distance dans l'utilisation d'une stratégie d'optimisation, nous avions affaire à des 386 MHz à 12 MHz. Dans le cas de I ___, s'il va avec l'idée Arduino (qui est une idée vraiment cool), lui aussi aura affaire à du matériel assez sous-alimenté pour l'ère moderne, bien que bien sûr, des choses ridiculement plus rapides que ce que nous avions. Je pense que son dictionnaire aurait tendance à être considérablement plus petit, mais ...
TJ Crowder
184

Pensez à faire quelque chose dans le matériel qui émule un clavier USB (ou PS / 2?). Vous ne serez plus dépendant d'un système d'exploitation spécifique ou d'une API de système d'exploitation spécifique. Une solution matérielle résistera à l'épreuve du temps. Ne soyez pas bloqué en utilisant une ancienne API dans Windows 7 lorsque tout le monde exécute Windows 11! Arduino est assez facile à apprendre.

Il y a une tonne d'informations et d'aide pour Arduino. Il s'agit d'une plate-forme de piratage de matériel conçue pour les débutants. Il ne fera que s'agrandir maintenant que Google pousse Arduino.

EDIT: logiciel et matériel du clavier USB virtuel

Brian O'Dell
la source
J'adore l'idée d'utiliser un Arduino pour cela. La mémoire pourrait cependant être un problème. Il semble que les plus grandes cartes préconçues aient 256 Ko de Flash (dont 8 Ko sont utilisés par le chargeur de démarrage). À l'époque, nous avons bourré la traduction / l'affichage / l'édition en temps réel de la sténographie de la machine dans 1M sous DOS (par exemple, le 640k habituel plus EMS ou mémoire étendue), mais nous écrivions un code C et un assemblage C serrés et le dictionnaire (qui pourrait facilement être> 250k seul) était sur le disque. Ici, il n'y a pas d'affichage ou d'édition simultanée, c'est bien, mais le dictionnaire devra être petit ...
TJ Crowder
Oh, ce n'est rien. Je traitais régulièrement avec des sténographes judiciaires qui avaient des dictionnaires qui, même stockés sous la forme très compacte que nous utilisions, avaient plusieurs mégaoctets. Le plus gros que j'ai vu personnellement était 4,5 Mo - et encore une fois, il a été stocké sous une forme hautement compressée. Combinez cela avec le fait qu'il y a moins de touches sur un clavier sténo qu'un clavier de piano ... Pourtant, l'Arduino a un port USB, donc le dictionnaire pourrait être sur un adaptateur flash USB, ou même un (alimenté en externe) ) SSD ou HDD.
TJ Crowder
2
@vous voudrez peut-être envisager un teensy au lieu d'un arduino ( pjrc.com/teensy ) significativement plus de mémoire et peut émuler directement un clavier. Il est déjà compatible avec de nombreuses bibliothèques Arduino et celles incompatibles nécessitent simplement une réaffectation des broches. - alternativement, atmega fait également une carte de démonstration qui a 16 Mo de flash intégré et coûte environ 30 $ (at90usbkey)
Marc
8
Concevoir une interface de piano utile pour un ordinateur n'est pas une tâche facile. À mon humble avis, le PO devrait d'abord le prototyper dans son environnement actuel, puis, SI il répond à ses besoins, s'inquiéter de la portabilité. À moins, bien sûr, que l'alternative portable ne soit notablement plus difficile.
Emilio M Bumachar
111

Il me semble que vous cherchez moins à obtenir des conseils sur la façon de construire vous-même et plus à demander quelles ressources sont déjà disponibles pour accomplir ce que vous voulez. Selon votre système d'exploitation, il existe de nombreuses façons d'accomplir cela sans avoir à écrire votre propre programme à partir de zéro:

Course MIDI

Gratuit. Pour Mac OS X 10.3 et supérieur . Celui-ci est spécifiquement livré avec "la possibilité d'utiliser n'importe quel clavier MIDI comme un remplacement complet du clavier de l'ordinateur."

Traducteur MIDI de Bome

Gratuit / Postcardware (c'est un peu étrange). Pour Windows 2000 et, et Mac OS X . Il semble au départ être davantage axé sur l' utilisation du type AutoHotkey , mais à plus long terme, je pense qu'il pourrait faire ce que vous voulez bien.

Max et aka.keyboard

Gratuit. Pour Mac OS X . Pas exactement une solution "prête à l'emploi", mais si vous êtes à l'aise avec la configuration de base de l'appareil, cela ne devrait pas être trop mauvais.

kathryn
la source
49

Vous pouvez accéder au matériel avec des exemples de code source dans .NET dans MIDI DotNet .

Un exemple de travail complet en tant que code source pour créer un flux de données de notes MIDI se trouve dans VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, quelque part est également la version .NET)

Un moyen de simuler les coups de clavier est dans VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, quelque part est la version .NET aussi)

Et reconnaître les frappes est décrit dans Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Entrez la description de l'image ici

Ensuite, utilisez simplement une bonne matrice de travail pour un joueur de piano Timo Boehme www.goldengel.ch

Au piano et lorsque vous êtes un bon joueur, vous pouvez avoir 10 doigts sur le clavier et si la matrice est utilisable, vous pouvez être beaucoup plus rapidement que tout utilisateur de clavier d'ordinateur, je pense. :-)

Dans ce cas, si je comprends bien votre question, cela ne devrait pas être une grosse chose.

Nasenbaer
la source
41

J'ai étudié la performance de piano à l'université, puis je me suis lancée dans la conception d'interactions, la programmation et l'utilisation de Vim , j'ai donc passé beaucoup de temps à prototyper des choses comme ça.

Vous pouvez obtenir ce travail assez rapidement sous Linux en utilisant le langage de programmation graphique pour artistes multimédias, " Pure Data ", ainsi que le x11key external par Alex Andre .

Sur Mac, vous pouvez utiliser MidiStroke . Je crois qu'une méthode sur Windows impliquait les outils MidiOx et AutoHotKey . À un autre moment, j'avais une version utilisant le plugin Java pour Max / MSP . Je crois que Patrice Colet a fait une fenêtre externe pour Pure Data qui fonctionnait aussi bien, mais je n'arrive plus à la localiser. En outre, il existe un externe pour MaxMSP qui peut le faire sous Windows. Enfin, l' Osculator non gratuit mais génial peut faire ce que vous voulez - voir la page des fonctionnalités.

Quand je l'ai fait fonctionner, je ne l'ai jamais collé, car je ne pouvais pas arrêter l'outillage avec la mise en page. C'était cool d'avoir mon moniteur sur mon clavier électrique! Bonne chance.

Peter Nore
la source
37

À propos du MIDI

Vous avez déclaré que vous "ne connaissiez rien du MIDI". La technologie MIDI est assez simple une fois que vous la comprenez, mais elle peut être déroutante au départ. L'une des ressources qui m'a été extrêmement utile pour comprendre les fondements du MIDI (qui sont certainement nécessaires si vous voulez programmer des interactions MIDI), est un livre intitulé MIDI for the Technophobe . C'est un livre facile à lire et très utile.


Données pures et max

Dans mon expérience de développement de multimédia interactif, j'ai rencontré deux programmes très similaires qui facilitent la connexion et le mappage des signaux / entrées de n'importe quel appareil.

Ce sont Max pour un environnement Mac et Pure Data pour un environnement PC. Les deux ont une pléthore de documentation en ligne et de didacticiels YouTube. Le didacticiel vidéo Max / MSP 1 - Utilisation de votre clavier d'ordinateur comme midikeyboard (style ableton) montre un programme intégré à Max qui mappe un clavier d'ordinateur aux entrées d'un clavier MIDI (ce qui est fondamentalement l'opposé de ce que vous essayez de faire). Vous pouvez obtenir les résultats escomptés en utilisant le même modèle, mais en inversant les signaux / mappages.


AutoHotKey

AutoHotKey est un utilitaire open source gratuit pour Windows qui vous permet de remapper les clés et les boutons de vos appareils en macros. Il prend en charge nativement les claviers QWERTY, les joysticks et les macros de souris.

Cependant, j'ai pu trouver une implémentation prenant en charge la cartographie spécifique que vous recherchez. Ces deux fils expliquent le processus:

  1. Prise en charge MIDI IN dans AutoHotkey , la discussion du cas d'utilisation. L'auteur cherchait un programme capable de détecter l'entrée MIDI IN et de le traduire en touches .

  2. Bibliothèque d'entrée MIDI , la solution au problème de l'auteur et le code / patch publié sur AutoHotKey qui implémente réellement le résultat souhaité.

Fondamentalement, il semble que AutoHotKey, avec le patch personnalisé de cet utilisateur, fournira exactement ce dont vous avez besoin pour créer un mappage d'un clavier MIDI au signal d'entrée d'un clavier QWERTY. Il vous suffit d'installer, de configurer et de définir vos mappages.


Rien d'autre?

Certaines des autres réponses vous ont donné des informations beaucoup plus complètes sur la programmation MIDI et MIDI, en général, mais comme l'indique votre message, cela ne semble pas être tout à fait ce que vous recherchez. Je voudrais vous aider davantage si possible, mais il serait plus facile si vous pouviez être plus précis sur le type d'informations que vous recherchez. Par exemple, êtes - vous plus intéressé par la façon de convertir un des signaux d'entrée du clavier MIDI à un QWERTY signaux de clavier , ou est votre principal intérêt de trouver une solution hors de la boîte à votre problème spécifique? Que recherchez-vous qui n'a pas encore été résolu?

smartcaveman
la source
27

Vous pouvez pirater votre propre clavier USB assez rapidement en utilisant un micro contrôleur Teenys.

En fait, ils ont un exemple de code pour savoir comment fabriquer un clavier USB .

Vous pouvez aborder ces deux façons:

  1. Obtenez un vieux piano et connectez des commutateurs directement à l'adolescent

  2. Ajoutez la logique supplémentaire pour vous connecter au port MIDI et le décodage nécessaire.

cmcginty
la source
C'est la réponse la plus prometteuse car une fois que vous aurez terminé les appareils, cela fonctionnera sur n'importe quel ordinateur et n'importe quel système d'exploitation. Prenez-le au travail ou soyez simplement heureux de pouvoir mettre à niveau votre ordinateur sans vous soucier du clavier. J'utiliserais deux appareils Teensy et les connecterais avec leurs broches d'E / S. Puisque Teensy prend déjà en charge l'USB MIDI pjrc.com/teensy/td_midi.html, votre code a juste besoin de prendre soin de déplacer les signaux entre le clavier teensy et le midi teensy.
Michael Dillon
24

En fait, je travaillais sur ce il y a un moment, en essayant de capturer Rock Band entrées de batterie dans mon ordinateur (faire un petit émulateur de tambour Java maison) Quoi qu'il en soit, j'ai posé une question ici à ce sujet, problème de temporisation (il y a un code de vote là - dedans , ainsi que ce que j'essayais de faire.). Et si je peux trouver mon programme, je peux vous donner le code, il utilise une API tierce ( JInput ).

Bonne chance de toute façon.

Brendan
la source
23

Essayez le traducteur MIDI de Bome .

Il fonctionne sur plusieurs plates-formes, peut convertir n'importe quelle entrée MIDI en une frappe facile, rapide à installer et à configurer, plus il est gratuit pour un usage personnel.

Il existe un didacticiel, Astuce rapide: Traduction MIDI - MIDI to Keystrokes , sur la façon de le configurer facilement:

Fondamentalement, il existe des possibilités infinies de ce que vous pouvez faire, y compris les accords et les touches de modification. Je l'utilise pour ma plate-forme audio en direct pour contrôler ma DAW à l' aide de mon piano et je n'ai jamais eu de problème.

stepheninohio
la source
18

En Java, vous pouvez utiliser JMF (framework Java Media) pour convertir des signaux MIDI. La conception de base du clavier est facile à utiliser, c'est-à-dire l'interface utilisateur; et placez les caractères / symboles fréquemment utilisés à portée de main.

L'exemple de code et l'API dans Java Sound Resources: Exemples: Digital Signal Processing (DSP) aident à comprendre comment traiter le signal.

Quelques références supplémentaires:

Kamahire
la source
15

Il existe un programme appelé GlovePIE . Vous pouvez le programmer dans un langage de script simple, et je crois qu'il prend en charge le MIDI. Je ne sais pas si cela rentre dans la catégorie "Java", mais quand même, c'est un excellent programme. Je l'ai utilisé pour contrôler des robots à l'aide de contrôleurs PS3 . C'est très puissant.

Peter Mortensen
la source
15

De nombreux claviers ont un connecteur de port série ( RS-232 ) pour envoyer des signaux MIDI à l'ordinateur. J'utilise un programme appelé Girder pour convertir la communication du port série en touches de clavier.

Girder possède une fonction de «mappage» qui vous permet de mapper chaque touche, une par une, sur la séquence de touches correspondante.

Cela pourrait être la solution simple que vous recherchez!

Scott Rippey
la source
12

Apprenez simplement la sténographie!

Cela ressort clairement de toute la discussion de votre part. Vous ne voulez pas réinventer des roues, d'un point de vue technique. Mais une fois que vous avez établi une connexion (ce que cette question demande) et que vous êtes prêt à travailler, vous avez encore la plupart du travail devant vous: vous devez entraîner votre cerveau. Vous devez également inventer le moyen le plus intelligent et le plus efficace de le faire - un problème de conception totalement hors du domaine des techniciens informatiques. Vous ou n'importe lequel d'entre nous ne répondriez pas.

Heureusement, le problème a été résolu et affiné malgré des siècles de maturation ...

Apprenez la sténographie!

Oui, cela vous fera reculer. Mais que valent des centaines d'heures de votre temps, avec au final un résultat moins favorable? En outre, l'article de Wikipedia sur la sténographie dit: «ça ressemble plus à un clavier de piano».

À moins, bien sûr, que vous ne vouliez avoir un effet secondaire. Je dois l'admettre, je n'ai jamais pensé à cette possibilité, ce serait vraiment amusant de voir quelqu'un sortir un texte d'un clavier de piano!

Vous pouvez commencer avec un clavier USB avec pavé tactile (ou un bâton de pointage serait-il plus ergonomique?), Utilisez Plover pour le traduire (je suis sûr qu'il peut être configuré pour laisser les touches non alphabétiques conserver leur fonctionnalité car elles sont essentielles pour programmation), ou, suivez le fil Re: Plover clavier pour rouler votre propre clavier de sténographie USB, ou, achetez un sténotype .

Bonne chance!

FastAl
la source
Où sont {et} sur le clavier de sténographie? Comment allez-vous taper des noms qui ne sont pas des mots, comme pthread?
bobobobo
Le lien wikipedia est incorrect et devrait être en.wikipedia.org/wiki/Stenography
joelhoro
11

Jetez un œil au jeu d'arcade MAME . Ils ont construit des périphériques matériels pour permettre l'entrée de n'importe quel nombre d'éléments différents. L' iPac , par exemple, convertit les signaux des périphériques d'entrée en USB que l'ordinateur peut ensuite utiliser pour émuler les touches. Vous pouvez utiliser n'importe quelle combinaison de périphériques d'entrée disposés de n'importe quelle manière qui semble confortable sans logique de programmation folle requise - parce que le logiciel pour interpréter l'entrée est déjà fait et bien testé.

J'ai vu des entrées de cockpit de simulateur de vol, des kiosques personnalisés et des systèmes de vote construits dans cette méthode ..... et le prix est correct!

bpeterson76
la source
10

Pour résoudre ce problème, vous aurez besoin de quelques éléments:

  1. Un moyen de capturer des données MIDI à partir de votre clavier. Selon l'interface: interface MIDI (classique) ou interface USB MIDI (moderne), l'interface la plus probable est celle d'un ordinateur car elle offre le plus d'options. Les microcontrôleurs hôtes USB ne sont pas aussi simples que l'utilisation d'un ordinateur.

  2. Un schéma pour convertir les données MIDI en frappes. Comme l'a souligné un utilisateur, les accords sont la voie à suivre car le nombre de touches ne dépendra pas du nombre de touches de piano.

  3. Un moyen d'injecter une clé dans le système d'exploitation. Cela nécessitera un pilote de bas niveau pour être précis. J'ai joué avec des applications qui injectent des données de clavier et de souris dans des applications dans Windows 7, et cela peut être irrégulier et dépendre si une application est actuellement au point. C'est la partie la plus difficile de l'interface. Ce qui peut fonctionner est de créer un microcontrôleur à clavier USB HID qui possède également une interface série.

L'interface série créerait un port série virtuel. Le logiciel qui lit les données MIDI et produit les frappes peut envoyer un message série au port série virtuel. Le microcontrôleur enverrait une frappe afin de ressembler à une entrée clavier standard. Cela permettrait d'interfacer les ports MIDI et les claviers MIDI USB.

Hmmm, avec ce type d'interface, vous pouvez également simuler une souris et utiliser une configuration de touches de piano pour l'axe et les boutons de la souris. La pression pourrait être utilisée pour déterminer la vitesse du pointeur de la souris. Vous pouvez donc également éliminer la souris. Un autre avantage de cette approche est que tout type de périphérique d'entrée que vous connectez pourrait communiquer avec le port série virtuel pour produire des événements de clavier et de souris. Donc, si vous souhaitez ajouter d'autres matériels tels que des pédales de batterie ou un joystick, il s'agira d'ajuster le programme qui communique avec l'interface série.

Un autre point de vue sur ce qui précède est comme certains postés ci-dessus pour utiliser un Arduino, mais inclut également le bouclier hôte USB de Sparkfun pour gérer les claviers de musique basés sur USB. Cela permet à l'Arduino d'être programmé comme un clavier ou une combinaison clavier / souris dans la puce du chargeur de démarrage et permet à l'appareil d'agir comme hôte USB pour le clavier musical basé sur USB. Ensuite, vous êtes couvert pour les deux types. Cependant, je pense toujours que la méthode du port série virtuel est plus flexible et serait plus facile à programmer à long terme. Le périphérique Arduino sera plus difficile à changer qu'un programme ou un service de bureau.

Il existe une autre possibilité: des claviers accordés à une main existent déjà. J'ai vu des vidéos sur eux, mais vous devrez déterminer si ceux-ci vous blessent aux mains ou non.

Demolishun
la source
7

Il devrait être assez facile d'utiliser quelque chose comme l'interface .NET DirectSound pour se connecter à un périphérique MIDI. Vous devrez identifier votre appareil MIDI cible, puis obtenir le code pour écouter les messages entrants (il y a des articles à ce sujet via Google).

Puisque vous utilisez le MIDI in comme clavier, il n'y a essentiellement que deux messages MIDI que vous devez détecter, à savoir note on et note off. Le message MIDI est composé de trois octets de données spécifiant la commande, la note et la vélocité. La note désactivée n'est que le numéro de la note (parfois les «mauvaises» piles MIDI envoient une note avec une vélocité nulle à laquelle vous devez également vous attendre).

Une fois les messages traduits, la sortie du clavier devrait être assez simple à partir de .NET.

Il y a beaucoup de conseils dans les autres réponses sur les détails techniques; Je voulais juste vous donner une idée des messages MIDI réels. Bonne chance!

Simon Inns
la source
En guise de remarque, le document «Définition de classe de périphérique de bus série universel pour les périphériques MIDI» donne un aperçu très net
Simon Inns
7

Vous obtiendrez des résultats meilleurs et plus heureux (quel que soit le système d'exploitation et / ou le programme DAW que vous souhaitez utiliser) en jouant à n'importe quel clavier MIDI externe en tant que contrôleur via votre carte son. Ensuite, acheminez cela dans votre logiciel GB (ou autre) et la tonalité génère les nombreux sons qu'ils vous ont fournis de cette façon en temps réel.

Si votre carte son ne prend pas en charge les E / S MIDI (entrées / sorties / thrus), ce n'est pas un problème. Vous pouvez envisager de rechercher et d'investir dans un convertisseur de table MIDI externe. Beaucoup sont équipés pour convertir davantage les sorties MIDI en USB 2.0 (en contournant complètement une carte son existante).

Par exemple: il est assez difficile d'obtenir des résultats de note de grâce "comme un humain" via une option de changement de clé Z et X en utilisant un outil de clavier et de crayon d'ordinateur. Quand, au lieu de cela, vos propres doigts peuvent simplement jouer cela avec un clavier MIDI à partir de ses propres plages de registres d'octave physiques - immédiatement!

Je me rends compte que des contraintes budgétaires peuvent être impliquées. Mais, certains de ces claviers à 5 octaves de type Casio apparemment bon marché vendus chez Radio Shack pour moins de 100 $ US (* ou moins) sont tout ce dont vous auriez besoin (en plus, certains de leurs correctifs sonores et modules de séquenceur intégrés incroyablement bien pour d'autres choses aussi).

Options du clavier MIDI RadioShack .

En ce qui concerne les convertisseurs MIDI externes pour les cartes son existantes, j'ai effectué quelques recherches Google comme suit avec les plates-formes Mac spécifiquement à l'esprit:

Beaucoup de ces informations de conversion MIDI externes peuvent être lourdes pour vous au début, donc j'ai décomposé les choses plus comme "conviviales" pour vos considérations et votre budget:

Il n'y a rien de mal à faciliter les claviers virtuels comme VST lors de l'utilisation de DAW . Ils ont leur place.

Mais vous parlez comme un claviériste accompli. Alors, pourquoi ne pas considérer les options de conversion / clavier MIDI externe que je viens de mentionner par vous-même?

Bonne chance et j'espère que cela vous a donné quelques idées qui peuvent et vont fonctionner pour vous!

Angshuman Bhattacharjee
la source
6

Si vous ne voulez pas faire de programmation vous-même mais voulez juste que le problème soit résolu, vous pouvez simplement acheter un clavier USB-MIDI où vous pouvez réaffecter n'importe quelle touche pour envoyer un signal de sortie de clavier QWERTY au lieu d'une sortie MIDI, pour exemple M-Audio Axiom Pro

Cette méthode fonctionnera avec tout système d'exploitation et tout ordinateur prenant en charge les claviers USB standard, car le clavier MIDI s'identifiera comme un clavier QWERTY standard.

Martin Odhelius
la source
savez-vous s'il serait également possible d'assigner des accords à des frappes spécifiques? par exemple, si je joue un accord C MAJEUR, puis-je le faire traduire par "le renard a sauté"
l --''''''---------------- '' '' '' '' '' '' '
Désolé de ne pas avoir répondu si vite, j'ai eu des vacances pendant 4 jours;) Non, malheureusement, vous ne pouvez attribuer qu'un seul code QWERTY par touche, donc cela fonctionne à peu près comme un clavier standard.
Martin Odhelius
Btw, si vous en achetez un, n'oubliez pas d'acheter le PRO-one, car je ne pense pas que la version non-PRO ait la fonctionnalité d'affectation QWERTY.
Martin Odhelius
Je ne pense pas qu'il soit possible d'assigner des accords à des codes ASCII, une seule clé par code, mais je vérifierai cela sur mon propre Axiom ce soir quand je rentrerai du travail.
Martin Odhelius
Je viens de remarquer qu'il est uniquement possible d'attribuer des codes qwerty aux boutons de commande (touches de fonction, pads de batterie, touches numériques, etc.), pas aux touches de piano réelles du clavier. Je possède ce clavier moi-même et j'étais sûr qu'il était possible d'attribuer des codes ascii à n'importe quelle touche, mais maintenant quand je l'ai essayé, je remarque que c'était faux! Je suis vraiment désolé pour cela, est-il possible d'annuler la récompense d'une manière ou d'une autre?
Martin Odhelius
6

Vous pouvez utiliser un simple script AutoIt pour lire les événements MIDI, voir Entrée MIDI .

Vous aurez également besoin de MIDI UDF et simulez les pressions de touches .

La lecture des événements MIDI devrait être facile, mais différents contrôleurs MIDI (instruments) ont des fonctionnalités différentes. Essayez d'abord de découvrir ce que votre piano MIDI peut faire, puis voyez comment vous pouvez mieux mapper ces fonctionnalités avec des presses à clavier QWERTY simulées.

Si vous voulez, vous pourriez avoir quelque chose à l' écran ou dans le plateau pour vous aider à voir ce que vous faites (qui est, pour Shift, Ctrlet la Altsimulation).

Martijn
la source
5

Vous pourriez jeter un œil aux claviers accordés . Ils ont l'avantage que vous n'avez pas besoin d'écrire un pilote pour eux avant de pouvoir les utiliser, et certains sont similaires à la disposition d'un clavier de piano.

Peter Mortensen
la source
5

Si vous connaissez le codage en Java, vous pouvez utiliser cette méthode:

Tout d'abord, implémentez un javax.sound.midi.Receiveravec une send(..)méthode qui mappe les événements «Note sur» aux frappes comme vous le souhaitez.

Vous auriez besoin d'obtenir le contenu du MidiMessage avec sa getMessageméthode et de l'interpréter à votre façon. La signification des octets de message peut être trouvée dans les messages MIDI .

Après avoir reçu une `` note activée '' ou une `` note désactivée '' pour une certaine touche du clavier, vous pouvez la mapper à une touche que vous aimez en lui affectant une constante de la classe KeyEvent, quelque chose comme C # 4 -> KeyEvent.VK_A et ainsi de suite . Ce code clé peut ensuite être utilisé par java.awt.Robotles méthodes keyPress et keyRelease pour envoyer réellement la frappe au système d'exploitation et donc à d'autres applications.

dronus
la source
4

Je suis d'accord avec la réponse de Brian O'Dell - si c'était mon projet, je le ferais en matériel. Il a l'avantage d'être indépendant de la plate-forme et du matériel - votre boîtier remplace le besoin d'une interface MIDI-USB et d'une API PC.

mbed est une plate-forme de prototypage rapide très facile à apprendre et qui présente de multiples avantages par rapport à Arduino IMHO (compilateur en ligne, 512 Ko flash, 96 MHz, langage C ++). Il dispose d'une interface clavier USB et d'une interface USB Midi pré-écrite pour vous.

La communauté est très sympathique et prête à aider, et il existe de nombreux projets existants utilisant à la fois l'émulation MIDI et USB cachée - recherchez Youtube pour "mbed MIDI" ou similaire.

Alex L
la source
4

Si vous utilisez Linux, essayez Footware .

Cela devrait être exactement ce que vous cherchez - si vous ajustez les hauteurs MIDI à un mappage de touches à votre goût ...

Je n'ai jamais pensé que cela pourrait être utile à quelqu'un d'autre que moi; o)

FlashKorten
la source
2
Lors de mon précédent travail en tant qu'administrateur, j'avais une pédale de commande sous mon bureau - pour minimiser le fait de quitter la ligne de départ dans vim
FlashKorten
2

Essayez d'utiliser un système basé sur un microcontrôleur, comme Arduino .

Peter Mortensen
la source
1

Ce ne serait pas trop difficile.

Je suppose que vous êtes sous Windows , mais je n'en suis pas sûr. J'ai écrit un séquenceur MIDI , http://pianocheetah.com , en simple vieux C ++ , et il vous permet d'utiliser le clavier du piano pour exécuter des commandes. Il n'y a aucune raison pour laquelle vous ne pourriez pas faire la même chose pour pousser les touches dans le flux d'entrée du clavier.

Mais viens maintenant. Vous vous souvenez du temps qu'il vous a fallu pour apprendre le clavier en premier lieu, non? Êtes-vous prêt à recommencer? Et êtes-vous prêt à polluer votre clavier béni avec un tas de symboles clés à l'air stupide partout?

Vous devrez utiliser au moins 26 caractères alpha, 10 numériques, 11 signes de ponctuation et au moins 12 touches de fonction ET leurs états décalés. Cela représente donc 60 touches et des états décalés. Cela brûlera 5 octaves complètes de clés. Vous ferez du piano "houblon" = tout = le temps. Dites adieu à la saisie tactile.

Vous pouvez vous sauver de RSI , mais vous avez créé un autre type de cauchemar pour vous-même.

Et bonne chance pour que votre patron vous achète un clavier MIDI au travail.

Si vous avez vraiment appris à jouer du piano, vous avez appris à jouer sans stress. Faites cela sur le clavier QWERTY . Pas de tension. Commencez lentement.

Stephen Hazel
la source
Merci pour les aimables paroles, mais j'ai travaillé sur ce truc et je ne prévois pas de le rendre open source - désolé. Mais ce que vous feriez, c'est utiliser midiInOpen (); lui fournir un rappel pour traiter l'entrée midi; ignorer tout sauf les événements notés, mapper la note midi sur une touche du clavier et l'insérer dans le flux d'entrée du clavier (j'oublie l'api pour cela, mais je suis JOLI sûr qu'il y en a un, au moins).
Stephen Hazel