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


j'ai RSI problèmes et ont essayé 30 claviers d'ordinateur différents qui m'ont tous causé de la douleur. Jouer du piano ne me cause pas de douleur. J'ai joué du piano pendant 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 produire des frappes de clavier. Je ne sais rien du MIDI mais je voudrais des conseils sur la façon de convertir ce signal en une frappe.


727


origine


Réponses:


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

Et pour l'autre partie, la traduction des notes MIDI clavier en touches et plus, je voudrais AutoItX, l'interface ActiveX / COM et DLL pour autoIt. Infos et téléchargement, allez à http://www.autoitscript.com/site/autoit/

Pas besoin d'écrire un pilote de clavier.


16



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", dont deux des plus fondamentaux sont "note on" et "note off" qui portent avec eux le numéro de note (0 = C cinq octaves en dessous du centre C, en passant par 127 = G cinq octaves au-dessus du G au-dessus du C moyen, en demi-tons). Ces événements portent un nombre de "vélocité" sur les claviers qui sont sensibles à la vélocité ("sensible au toucher"), avec une force de (vous l'avez deviné) entre 0 et 127.

Entre la vélocité, l'accord et les pédales, je pense que vous pourriez trouver une très bonne interface de "frappe" pour le clavier de piano. L'accord en particulier pourrait être une technique très puissante - comme je l'ai mentionné dans les commentaires, c'est pourquoi les sténographes de la base peuvent utiliser un machine de sténotypie pour rester en contact avec des gens qui parlent pendant des heures d'affilée, alors que même les dactylos de haut vol ne pourraient pas le faire pendant un certain temps via les claviers normaux de type machine à écrire. Comme avec la sténographie de la 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 logiciel de la sténographie de la machine?)

Pour ce faire, les pièces fondamentales sont:

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

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

Cependant, puisque vous êtes juste générateur des frappes au clavier (sans essayer de les intercepter, ce que j'essayais de faire il y a des années), vous pourrez peut-être utiliser toutes les fonctions du système d'exploitation pour envoyer des frappes artificielles. Windows a une interface pour le faire (probablement plusieurs, celui auquel je pense est SendInputmais je sais qu'il y a une interface "journal" qui fait quelque chose de similaire), et je suis sûr que d'autres systèmes d'exploitation le font aussi. Cela peut suffire à vos besoins - c'est là que je commencerai, car la route du pilote de périphérique va être difficile et vous devrez probablement utiliser un langage différent de celui de Java. (Je suis un grand fan de Java, mais les interfaces que les systèmes d'exploitation utilisent pour communiquer avec les pilotes de périphériques tendent à être plus facilement consommées via C et similaires.)


Mettre à jour: Plus sur le "dictionnaire" des accords aux frappes:

Fondamentalement, le dictionnaire est un Trie (merci, @Adam) que nous cherchons avec le plus long préfixe correspondant. Détails:

En sténographie de la machine, le sténographe écrit en appuyant simultanément sur plusieurs touches de la machine à sténotyper, puis les relâche toutes. Ils appellent cela un "coup" du clavier; c'est comme jouer un accord au piano. Les traits fréquemment (mais pas toujours) correspondent à une syllabe du langage parlé. Comme les syllabes, parfois un coup (accord) a un sens tout seul, d'autres fois il n'a de sens que combiné avec les traits suivants. (Pensez "bon" vs "bon" 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" de ce que les traits qu'ils utilisent pour signifier quoi, un dictionnaire qu'ils vont continuellement affiner au cours de leur vie professionnelle. Le dictionnaire aura des entrées où la partie sténographique ("steno", pour faire court) est d'un coup de long, ou plusieurs coups de long. 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 ne vais pas utiliser de véritables sténotypes 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 que
C = mer
D = chien
D / D = Dee Dee

(Ces lettres ne sont pas destinées à être des notes de musique, seulement des marqueurs abstraits.)

Notez que A commence plusieurs entrées, et notez également comment vous traduisez un C AVC dépend de si vous avez déjà vu un A, une Bou vous commencez frais.

Notez également que (bien que cela ne soit pas montré dans le très petit échantillon ci-dessus), il peut y avoir plusieurs façons de "jouer" le même mot ou la même phrase, plutôt qu'un seul. Les sténographes le font pour faciliter le passage d'un mot précédent à l'autre en fonction de la position de la main. Il y a une analogie évidente avec la musique, et vous pourriez l'utiliser pour faire en sorte que votre flux de dactylographie s'apparente davantage à de la musique, afin d'éviter que cela n'affecte négativement votre piano et maximise la probabilité que cela aide réellement le RSI.

Lors de la traduction de steno en texte standard, nous utilisons de nouveau la recherche "correspondance de 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'il s'agit d'une course, alors nous pouvons dire de manière fiable "c'est l'entrée à utiliser", afficher le texte correspondant, puis recommencer à zéro avec le prochain trait. Mais plus probable, ce trait commence 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 traits dans l'ordre; et ainsi de suite jusqu'à ce que nous obtenions un match.

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

A C B B C A B C A B D

Voici comment nous le traduisons:

  1. A est le début de trois entrées de longueurs variables; regarde le coup suivant: C
  2. A/C correspond à une seule entrée; sortie "climatisation" et commencer frais avec le coup suivant: B
  3. B commence deux entrées; regarde le coup suivant: B
  4. B/B ne démarre rien; prendre le plus long match précédent (B) et sortie ("abeille")
  5. Ayant une sortie B = "abeille", nous avons encore un B coup dans notre tampon. Il commence deux entrées, alors regardez le coup suivant: C
  6. B/C correspond à une entrée; sortie "parce que" et commencer frais avec le coup suivant: A
  7. A commence trois entrées; regarde le coup suivant: B
  8. A/B commence deux entrées; regarde le coup suivant: C
  9. A/B/C ne correspond qu'à une entrée; sortie "alphabétique" et commencer frais avec le coup suivant: A
  10. A commence trois entrées; regarde le coup suivant: B
  11. A/B commence deux entrées; regarde le coup suivant: D
  12. A/B/D ne correspond à rien, alors prenez le plus ancien match précédent (A/B) et l'utiliser pour sortir "alphabet". Cela nous laisse avec D toujours dans le tampon.
  13. D commence deux entrées, donc nous devrions normalement regarder le coup suivant - mais nous avons traité tous les traits, alors considérez-le en isolation. Dans l'isolement, il se traduit par "chien" donc sortir 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 contre une seule entrée que vous pouvez. A/B devrait être traduit par "alphabet", pas "alpha" et "abeille".
  • (Pas montré 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 E serait un "non traduit".)
  • (Pas montré ci-dessus) Certaines théories de steno permettent au même ensemble de traits de signifier plus d'une chose, basée sur un contexte plus large. Les gens Steno appellent ces "conflits". Vous voulez probablement les interdire dans votre projet, et en fait, lorsque le sténographe les traduisait manuellement, les conflits étaient corrects, car ils savaient par où, dans la phrase, ils étaient le bon choix, mais avec la hausse de la traduction automatique, des théories sans conflit de steno sont apparues spécifiquement pour éviter d'avoir à traverser le texte traduit résultant et résoudre les conflits.
  • Traduire en temps réel (ce que vous feriez) signifie que si vous recevez une correspondance partielle, vous voudrez la conserver en attendant l'accord suivant - mais probablement jusqu'à un certain délai, à quel moment traduire ce que vous avez dans la mémoire tampon du mieux que vous le pouvez. (Ou peut-être que vous ne voulez pas un délai d'attente, c'est votre appel.)
  • Probablement préférable d'avoir un accident vasculaire cérébral qui dit «ne pas tenir compte du coup précédent»
  • Probablement préférable d'avoir un accident vasculaire cérébral qui dit "complètement effacer le tampon sans sortir quoi que ce soit"

430



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

Il y a une tonne d'infos et d'aide pour Arduino. C'est une plate-forme de piratage de matériel construite pour les débutants. Cela ne fera que grossir maintenant Google pousse Arduino.

EDIT: Clavier USB virtuel Logiciel  et Matériel


184



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

Coup MIDI

Gratuit. Pour Mac OS X 10.3 et plus. Celui-ci vient spécifiquement avec "la possibilité d'utiliser MIDI clavier comme un remplacement complet du clavier d'ordinateur. "

Traducteur MIDI de Bome

Gratuit / Postcardware (c'est un peu bizarre). Pour Windows 2000 et plus, et Mac OS X. Il semble initialement être plus orienté vers AutoHotkeyJe pense que cela pourrait faire ce que vous voulez bien.

Max et aka.keyboard

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


111



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 est en VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, quelque part est la version .NET)

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

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

Enter image description here 

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

Au piano et quand 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 n'importe quel utilisateur de clavier d'ordinateur je pense. :-)

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


49



J'ai étudié la performance au piano à l'université, puis je suis entré dans le design d'interaction, la programmation et l'utilisation VimJ'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 les artistes multimédia "Données pures, "avec le x11key externe par Alex Andre.

Sur Mac, vous pouvez utiliser MidiStroke. Je crois qu'une méthode sur Windows impliqué le MidiOx et AutoHotKey outils. À un autre moment, j'ai eu une version en utilisant le plugin Java pour Max / MSP. Je crois Patrice Colet fait une fenêtre externe pour Pure Data qui a aussi bien fonctionné, mais je n'arrive plus à la localiser. En outre, il y a un externe pour MaxMSP cela peut le faire sur Windows. Enfin, le non-libre mais génial Osculator peut faire ce que vous voulez - voir la page des caractéristiques.

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


41



À propos du MIDI

Vous avez déclaré que vous "ne savez rien du tout sur le MIDI". La technologie MIDI est assez simple une fois que vous l'avez saisie, mais elle peut être déroutante au départ. Une des ressources qui m'a énormément aidé à comprendre les bases du MIDI (qui sont certainement nécessaires si vous voulez programmer des interactions MIDI), c'est un livre intitulé MIDI pour le Technophobe. C'est un livre facile à lire et très utile.


Pure Data & Max

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

Ceux-ci sont Max pour un environnement Mac et Données pures pour un environnement PC. Les deux ont une pléthore de documentation en ligne et des tutoriels YouTube. La vidéo Max / MSP Tutorial 1 - utiliser votre clavier d'ordinateur comme midikeyboard (style ableton) montre un programme intégré dans Max qui mappe un clavier d'ordinateur aux entrées d'un clavier MIDI (ce qui est fondamentalement le contraire de ce que vous essayez de faire). Vous pouvez obtenir les résultats souhaité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 reconfigurer les touches et les boutons de vos appareils en macros. Il prend en charge nativement les claviers QWERTY, les manettes de jeu et les macros de souris.

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

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

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

Fondamentalement, il semble que AutoHotKey, avec le patch personnalisé de cet utilisateur, fournira exactement ce dont vous avez besoin pour créer un mapping à partir d'un clavier MIDI au signal d'entrée d'un clavier QWERTY. Tout ce que vous auriez à faire est 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 votre article l'indique, cela ne semble pas être ce que vous cherchez. Je voudrais vous aider plus si possible, mais ce serait plus facile si vous pouviez être plus précis sur le type d'information que vous recherchez. Par exemple, êtes-vous plus intéressé par comment convertir les signaux d'entrée d'un clavier MIDI en QWERTY les signaux du clavierou est votre principal intérêt trouver une solution prête à l'emploi à votre problème spécifique? Que recherchez-vous qui n'a pas encore été adressé?


37