727 votes

À l'aide d'un clavier de piano comme un clavier d'ordinateur

J'ai RSI problèmes et ont essayé de 30 différents claviers d'ordinateur qui toutes m'a causé une douleur. Jouer du piano ne me cause pas de douleur. J'ai joué du piano pendant environ 20 ans, sans problèmes de douleur. Je voudrais savoir si il existe un moyen de capturer MIDI à partir d'un clavier MIDI et la sortie de touches du clavier. Je ne sais rien à propos de MIDI, mais je voudrais quelques conseils sur la façon de convertir ce signal en appuyant sur une touche.

430voto

T.J. Crowder Points 285826

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

MIDI est un courant de "événements" (ou "messages"), deux des plus fondamentaux de l'être "note on" et "note off", qui portent avec eux le numéro de la note (0 = C cinq octaves en dessous du milieu C, grâce à 127 = G cinq octaves au-dessus de la G-dessus du milieu C, en demi-tons). Ces événements porter une "vitesse" nombre sur les claviers qui sont sensibles à la vélocité ("touch sensitive"), avec une force de (vous l'aurez deviné) entre 0 et 127.

Entre la vitesse, chording, et les pédales, je pense que vous pourriez en venir à un bon "taper" de l'interface pour le clavier d'un piano. Chording, en particulier, pourrait être une technique très puissante — comme je l'ai mentionné dans les commentaires, c'est pourquoi le rang-et-fichier des sténographes pouvez utiliser un stenotype machine à garder les gens en parler pendant des heures d'affilée, quand même de haut vol dactylos ne pas être en mesure de, pour toute longueur de temps par la normale à la machine à écrire de claviers de style. Comme avec une machine de la sténographie, vous auriez besoin d'un "dictionnaire" de la signification des accords et des séquences d'accords. (Pouvez-vous dire j'ai l'habitude de travailler dans le logiciel de la machine de la sténographie?)

Pour ce faire, les pièces sont:

  • La réception de l'entrée MIDI. Ne pas essayer de le faire vous-même, utilisez une bibliothèque. Edit: Apparemment, le Java Sound API prend en charge le MIDI, y compris la réception des événements de contrôleurs MIDI. Cool. Cette page peut également être utile.
  • La conversion de données dans la séquence de touches que vous souhaitez envoyer, par exemple via le dictionnaire que j'ai mentionné ci-dessus.
  • Sortie de la séquence de touches à l'ordinateur.

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

Cependant, puisque vous êtes juste de générer des séquences de touches (ne pas essayer de les intercepter, j'ai essayé de faire il y a des années), vous pourriez être en mesure d'utiliser les fonctionnalités du système d'exploitation a pour l'envoi artificielle frappes. Windows dispose d'une interface pour le faire (probablement plusieurs, celui que je suis en train de penser est - SendInput mais je sais qu'il y a certains "journal" de l'interface qui fait la même chose), et je suis sûr que d'autres systèmes d'exploitation. Qui pourrait bien être suffisant pour vos besoins — c'est là que j'ai commencé, parce que le pilote de périphérique de la route va être difficile et vous auriez probablement utiliser un autre langage que Java. (Je suis un grand fan de Java, mais les interfaces des systèmes d'exploitation utilisent pour parler à des pilotes de périphérique ont tendance à être plus facilement consommé par C et similaire).


Mise à jour: Plus sur le "dictionnaire" des accords de touches:

Fondamentalement, le dictionnaire est un trie (merci, @Adam) que l'on recherche avec la plus longue-mise en correspondance de préfixe. Détails:

Dans la machine de la sténographie, le sténographe écrit en appuyant sur plusieurs touches sur le stenotype machine en même temps, puis de les libérer tous. Ils appellent cela un "coup" du clavier; c'est comme jouer un accord de piano. Les traits fréquemment (mais pas toujours) correspond à une syllabe de la langue parlée. Comme les syllabes, parfois d'un seul coup (d'accord) a un sens tout seul, d'autres fois il n'a de sens que combiné avec la suite de coups. (Pensez au "bon" et de "bonne", suivi par "au revoir"). Bien qu'ils vont être fortement influencée par l'école au cours de laquelle ils ont étudié, chaque sténographe ont leur propre "dictionnaire" de ce que les traits qu'ils utilisent pour dire quoi, un dictionnaire, ils seront continuellement perfectionner au cours de leur vie professionnelle. Le dictionnaire va avoir des entrées où la sténographie partie ("steno", pour faire court) est une course longue, ou plusieurs traits de long. Souvent, il y aura plusieurs entrées avec le même coup de départ, qui se distinguent par leur longueur et par la suite de coups. Par exemple (et je ne les utilise pas réel steno 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 = air conditionné
B = abeille
B/C = parce que
C = mer
D = chien
D/D = Dee Dee

(Ces lettres ne sont pas censés être des notes de musique, juste le résumé des marqueurs.)

Notez que A commence à entrées multiples, et à noter également que la façon dont vous traduire un C course dépend de si vous avez déjà vu un A, B, ou vous êtes débutant frais.

Aussi il faut noter que, bien que ne figurant pas dans le très petit échantillon ci-dessus), il peut y avoir plusieurs façons de "jouer" le même mot ou de la phrase, plutôt qu'une seule. Les sténographes faire pour faciliter l'écoulement à partir d'un mot précédent à l'autre selon la position de la main. Il y a une évidente analogie avec la musique, et vous pouvez l'utiliser pour faire de votre frappe de flux plus proche de jouer de la musique, afin d'éviter que cela affecte négativement votre piano et de maximiser la probabilité de ce réellement aider avec le RSI.

Lors de la traduction de steno en texte standard, encore une fois, nous utilisons un "plus long préfixe de match" de la recherche: La traduction de l'algorithme commence avec le premier coup jamais écrit, et recherche les entrées commençant par cette course. Si il y a une seule entrée, et c'est une course longue, alors on peut sûrement dire "c'est de l'entrée à utiliser", sortie le texte correspondant, puis de recommencer avec le coup suivant. Mais plus probablement, que la course commence à entrées multiples et de différentes longueurs. Si nous regardons le prochain coup, et voir si il y a des entrées qui commencent par ces deux traits, et ainsi de suite jusqu'à ce que nous obtenir une correspondance.

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 faisons pour le traduire:

  1. A est le début de trois entrées de longueurs variables; regardez prochaine course: C
  2. A/C correspond à une seule entrée, la sortie des "air conditionné" et recommencer à zéro, avec le coup suivant: B
  3. B commence à deux entrées; regardez prochaine course: B
  4. B/B n'est pas le début de quelque chose; le plus long match précédent (B) et de sortie ("abeille")
  5. Avoir de sortie B = "abeille", nous avons encore un B accident vasculaire cérébral dans notre mémoire tampon. Il commence à deux entrées, donc regardez-le coup suivant: C
  6. B/C correspond à une entrée; sortie de "parce que" et de repartir avec le coup suivant: A
  7. A le début de trois entrées; regardez le coup suivant: B
  8. A/B commence à deux entrées; regardez le coup suivant: C
  9. A/B/C seulement correspond à une entrée; sortie "alphabétique" et recommencer à zéro, avec le coup suivant: A
  10. A le début de trois entrées; regardez prochaine course: B
  11. A/B commence à deux entrées; regardez prochaine course: D
  12. A/B/D ne correspond pas à quoi que ce soit, afin de prendre le plus long match précédent (A/B) et de l'utiliser pour la sortie de "l'alphabet". Cela nous laisse avec D encore dans la mémoire tampon.
  13. D commence à deux entrées, on se serait normalement à la prochaine course — mais nous avons traité tous les coups, c'est dans l'isolement. Dans l'isolement, il traduit comme "chien", de sorte que la sortie.

Les Aspects de la ci-dessus à la note:

  • Vous avez un tampon de coups que vous avez lu mais je n'ai pas encore traduits.
  • Vous voulez toujours correspondre à la plupart des coups contre une porte d'entrée unique que vous pouvez. A/B devrait être traduit par "l'alphabet", pas "alpha" et "l'abeille".
  • (Non illustré ci-dessus), Vous pouvez bien avoir des séquences de coups que vous ne pouvez pas traduire, parce qu'ils ne correspondent à rien dans le dictionnaire. (Steno les gens utilisent le nom "untranslate" -- par exemple, avec notre dictionnaire, les traits E serait une "untranslate".)
  • (Non illustré ci-dessus), Certaines théories de steno permettre le même ensemble de traits pour signifier plus qu'une chose, basé sur un contexte plus large. Steno personnes appellent ces "conflits". Vous voulez probablement à les interdire dans votre projet, et en fait, quand steno utilisé pour traduire manuellement par le sténographe, les conflits étaient bien parce qu'ils me connaissent que par où dans la phrase, ils étaient ce que le bon choix a été, mais avec l'augmentation de la traduction automatique, libre de conflit théories de steno se pose en particulier pour éviter d'avoir à passer par l'résultant de la traduction du texte et de "résoudre" les conflits.
  • La traduction en temps réel (dont vous feriez l') signifie que si vous recevez une correspondance partielle, vous aurez envie de tenir alors que l'attente pour le prochain accord — mais seulement jusqu'à un délai d'attente, à quel point vous l'avais traduire ce que vous avez dans la mémoire tampon du mieux que vous pouvez. (Ou peut-être vous ne voulez pas un délai d'attente; c'est votre appel.)
  • Probablement mieux d'avoir un accident vasculaire cérébral qui affirme que "le mépris de la course précédente"
  • Probablement mieux d'avoir un accident vasculaire cérébral qui dit "complètement effacer le tampon sans sortie de rien"

184voto

Brian O'Dell Points 2313

Envisager de faire quelque chose de matériel qui émule un port usb (ou ps/2?) clavier. Vous ne serez plus dépendant sur un système d'exploitation spécifique, ou un système d'exploitation spécifique de l'API. Une solution matérielle résistera à l'épreuve du temps. Ne pas être collés à l'aide d'une ancienne API de Windows 7 quand tout le monde est en cours d'exécution Windows 11! Arduino est assez facile à apprendre.

Il y a une tonne d'infos et pour vous aider pour Arduino. C'est un matériel de piratage plate-forme construite pour les débutants. Il n'en sera que plus grande maintenant que Google est en poussant Arduino.

EDIT: Virtuel Clavier USB logiciel et matériel

111voto

kathryn Points 791

Il me semble que vous êtes à la recherche de moins en moins pour des conseils sur la façon de construire vous-même et de poser plus de questions que les ressources sont déjà là pour accomplir ce que vous voulez. En fonction de votre OS, il y a beaucoup de façons de le faire sans avoir à écrire votre propre programme à partir de zéro:

MIDI Avc

Gratuit. Pour Mac OS X 10.3 et jusqu'. Celui en particulier est livré avec "la capacité à utiliser tout MIDI clavier comme une véritable clavier de l'ordinateur de remplacement."

Bome MIDI du Traducteur

Gratuit/Postcardware (c'est un peu bizarre). Pour Windows 2000, Mac OS X. Au départ, il semble être plus orienté vers les AutoHotkey-type d'utilisation, mais sur la poursuite de la recherche, je pense qu'il pourrait faire ce que vous voulez bien.

Max et aka.clavier

Gratuit. Pour Mac OS X. Pas exactement un "prêt de sortir de la boîte" solution, mais si vous êtes à l'aise avec la configuration de base des appareils, il ne devrait pas être trop mauvais.

49voto

Nasenbaer Points 2156

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

Un travail complet de l'échantillon dans le code source pour créer des notes MIDI flux de données est en VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, quelque part .NET version)

Une façon de simuler des frappes sur le clavier est en VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, quelque part .NET version)

Et de reconnaître les frappes de touches est describedin Tipp-Télécharger: VB.NET 0266: Globaler KeyHook.

Enter image description here

Ensuite, il suffit d'utiliser un bon travail de la matrice pour un joueur de piano Timo Boehme www.goldengel.ch

Sur le piano, et quand tu es 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 ordinateur clavier de l'utilisateur, je pense. :-)

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

41voto

P. Myer Nore Points 1531

J'ai étudié les performances d'un piano dans le collège, puis monta dans le design d'interaction, et de la programmation à l'aide de Vim, donc en fait, j'ai passé beaucoup de temps à le prototypage des choses comme ça.

Vous pouvez vous procurer ce travail assez rapide sous Linux en utilisant le langage de programmation graphique pour les artistes multimédia, "Pure Data", le x11key externe par Alex André.

Sur Mac, vous pouvez utiliser MidiStroke. Je crois qu'une méthode sur Windows impliqué la MidiOx et AutoHotKey outils. À un autre moment, j'ai eu une version allons utiliser le plugin Java pour Max/MSP. Je crois que Patrice Collet fait un windows externe pour Pure Data qui a travaillé aussi bien, mais je n'arrive pas à les localiser plus. Aussi, il y a un externe pour MaxMSP qui peuvent le faire sur Windows. Enfin, la non-libre mais génial Osculator pouvez faire ce que vous voulez - voir la page des fonctionnalités.

Quand je l'ai eu à travailler, je n'ai jamais collé avec elle, parce que je ne pouvais pas arrêter de l'outillage avec la mise en page. C'était cool d'avoir mon écran sur mon clavier électrique, si! Bonne chance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X