Pregunta Usando un teclado de piano como un teclado de computadora [cerrado]


yo tengo RSI problemas y he probado 30 teclados de computadora diferentes que me causaron dolor. Tocar el piano no me causa dolor. He tocado el piano por alrededor de 20 años sin problemas de dolor. Me gustaría saber si hay una manera de capturar MIDI desde un teclado MIDI y ejecutar trazos de teclado. No sé nada sobre MIDI, pero me gustaría obtener orientación sobre cómo convertir esta señal en una pulsación de tecla.


727


origen


Respuestas:


Una buena biblioteca en .NET con soporte midi completo (BASS), vaya a http://www.un4seen.com.

Y, por otra parte, al traducir las notas midi del teclado a las teclas y más, elegiría AutoItX, la interfaz ActiveX / COM y DLL para autoIt. Información y descarga, ve a http://www.autoitscript.com/site/autoit/

No es necesario escribir el controlador del teclado.


16



No he hecho ninguna programación MIDI en años, pero su idea fundamental es muy buena (sin juego de palabras).

MIDI es una secuencia de "eventos" (o "mensajes"), dos de los más fundamentales son "nota en" y "nota desactivada" que llevan consigo el número de nota (0 = C cinco octavas por debajo del medio C, por 127 = G cinco octavas por encima de la G por encima del medio C, en semitonos). Estos eventos llevan un número de "velocidad" en los teclados que son sensibles a la velocidad ("sensible al tacto"), con una fuerza de (lo adivinaste) entre 0 y 127.

Entre la velocidad, el ajuste y los pedales, creo que podrías encontrar una buena interfaz de "mecanografía" para el teclado del piano. Chording en particular podría ser una técnica muy poderosa, como mencioné en los comentarios, es por lo que los taquimecanógrafos de rango medio pueden usar una máquina de estenotipia para mantenerse al día con personas que hablan durante horas seguidas, cuando incluso los mecanógrafos de alto vuelo no podrían por un período de tiempo a través de los teclados normales de máquina de escribir. Al igual que con la estenografía de máquina, necesitaría un "diccionario" de los significados de los acordes y secuencias de acordes. (¿Puedes decir que solía trabajar en el lado del software de la estenografía de máquina?)

Para hacer esto, las piezas fundamentales son:

  • Recibiendo entrada MIDI. No intente hacer esto usted mismo, use una biblioteca. Editar: Aparentemente, la API de Java Sound soporta MIDI, incluida la recepción de eventos desde controladores MIDI. Guay. Esta página también puede ser útil.
  • Convertir esos datos en las teclas que desea enviar, p. a través del diccionario que mencioné anteriormente.
  • Salida de las teclas a la computadora.

Para ser más compatible con el software, tendría que escribir esto como un controlador de dispositivo de teclado. Este es un complemento del sistema operativo que sirve como fuente para eventos de teclado, hablando con el hardware subyacente (en su caso, el teclado del piano). Para Windows y Linux, probablemente querrás usar C para eso.

Sin embargo, ya que solo eres generando pulsaciones de teclas (sin tratar de interceptarlas, lo que intenté hacer hace años), es posible que pueda usar las funciones que tenga el sistema operativo para enviar pulsaciones de teclas artificiales. Windows tiene una interfaz para hacer eso (probablemente varias, la que estoy pensando es SendInputpero sé que hay una interfaz de "diario" que hace algo similar), y estoy seguro de que otros sistemas operativos también lo hacen. Eso puede ser suficiente para sus propósitos, es donde comenzaría, porque la ruta del controlador del dispositivo será incómoda y probablemente tenga que usar un lenguaje diferente al de Java. (Soy un gran admirador de Java, pero las interfaces que usan los sistemas operativos para hablar con los controladores de dispositivos tienden a consumirse más fácilmente a través de C y similares).


Actualizar: Más sobre el "diccionario" de acordes para las pulsaciones de teclas:

Básicamente, el diccionario es un trie (gracias, @Adam) que buscamos con la coincidencia de prefijo más largo. Detalles:

En la estenografía de máquina, el taquígrafo escribe al presionar varias teclas en la máquina de estenotipia al mismo tiempo y luego soltarlas todas. Llaman a esto un "golpe" del teclado; es como tocar un acorde en el piano. Los trazos con frecuencia (pero no siempre) corresponden a una sílaba del lenguaje hablado. Al igual que las sílabas, a veces un trazo (acorde) tiene significado por sí mismo, otras veces solo tiene significado combinado con los siguientes trazos. (Piense en "bueno" vs. "bueno" seguido por "adiós"). Aunque estarán fuertemente influenciados por la escuela en la que estudiaron, cada taquígrafo tendrá su propio "diccionario" de los trazos que utilizan para significar qué, un diccionario que perfeccionará continuamente a lo largo de su vida laboral. El diccionario tendrá entradas donde la parte estenográfica ("steno", para abreviar) tiene un trazo largo o múltiples trazos largos. Con frecuencia, habrá varias entradas con el mismo trazo inicial que se diferencian por su longitud y por los trazos posteriores. Por ejemplo (y no usaré steno real aquí, solo marcadores de posición), puede haber estas entradas:

A = alfa
A / B = alfabeto
A / B / C = alfabético
A / C = aire acondicionado
B = abeja
B / C = porque
C = mar
D = perro
D / D = Dee Dee

(Esas letras no están destinadas a ser notas musicales, solo marcadores abstractos).

Tenga en cuenta que A inicia múltiples entradas, y también nota que la forma de traducir un C el accidente cerebrovascular depende de si ya has visto un A, un B, o estás empezando de nuevo.

También tenga en cuenta que (aunque no se muestra en la muestra muy pequeña anterior), puede haber varias formas de "reproducir" la misma palabra o frase, en lugar de solo una. Los taquígrafos hacen eso para facilitar el flujo de una palabra anterior a la siguiente dependiendo de la posición de la mano. Aquí hay una analogía obvia de la música, y podrías usarla para hacer que tu escritura sea más parecida a la reproducción de música, para evitar que esto afecte negativamente a tu ejecución de piano y para maximizar la probabilidad de que esto realmente ayude con el RSI.

Al traducir Steno al texto estándar, nuevamente usamos una búsqueda de "coincidencia de prefijo más largo": el algoritmo de traducción comienza con el primer trazo que se haya escrito, y busca las entradas que comienzan con ese trazo. Si solo hay una entrada, y es de un trazo largo, podemos decir de manera confiable "esa es la entrada para usar", mostrar el texto correspondiente y luego comenzar de cero con el siguiente trazo. Pero es más probable que ese trazo comience con entradas múltiples de diferentes longitudes. Entonces miramos el siguiente trazo y vemos si hay entradas que comienzan con esos dos trazos en orden; y así sucesivamente hasta que tengamos una coincidencia.

Entonces, con el diccionario anterior, supongamos que vimos esta secuencia:

A C B B C A B C A B D

Así es como lo traduciríamos:

  1. A es el comienzo de tres entradas de diferentes longitudes; mira el siguiente golpe: C
  2. A/C coincide solo con una entrada; salida "aire acondicionado" y comenzar de nuevo con el siguiente golpe: B
  3. B inicia dos entradas; mira el siguiente golpe: B
  4. B/B no comienza nada; tomar el partido anterior más largo (B) y salida que ("abeja")
  5. Tener salida B = "abeja", todavía tenemos un B golpe en nuestro buffer. Comienza dos entradas, así que mira el siguiente trazo: C
  6. B/C coincide con una entrada; salida "porque" y comenzar de nuevo con el siguiente trazo: A
  7. A comienza tres entradas; mira el siguiente golpe: B
  8. A/B inicia dos entradas; mira el siguiente golpe: C
  9. A/B/C solo coincide con una entrada; salida "alfabética" y comenzar de nuevo con el siguiente trazo: A
  10. A comienza tres entradas; mira el siguiente golpe: B
  11. A/B inicia dos entradas; mira el siguiente golpe: D
  12. A/B/D no coincide con nada, así que toma el partido anterior más largo (A/B) y usarlo para dar salida a "alfabeto". Eso nos deja con D todavía en el búfer.
  13. D comienza dos entradas, por lo que normalmente veríamos el siguiente trazo, pero hemos procesado todos los trazos, así que considérelo de forma aislada. De forma aislada, se traduce como "perro", por lo que da salida a eso.

Aspectos de lo anterior a tener en cuenta:

  • Tienes un búfer de trazos que has leído pero que aún no has traducido.
  • Siempre desea hacer coincidir la mayor cantidad de golpes con una sola entrada que pueda. A/B debe traducirse como "alfabeto", no "alfa" y "abeja".
  • (No se muestra arriba) Es posible que tenga secuencias de trazos que no puede traducir, porque no coinciden con nada en el diccionario. (La gente de Steno usa el sustantivo "untranslate" - por ejemplo, con nuestro diccionario, los trazos E sería un "sin traducir").
  • (No se muestra arriba) Algunas teorías de Steno permiten que el mismo conjunto de trazos signifique más de una cosa, basado en un contexto más amplio. La gente de Steno llama a estos "conflictos". Probablemente quiera deshabilitarlos en su proyecto, y de hecho cuando Stenographer solía ser traducido manualmente por el taquígrafo, los conflictos estaban bien porque ellos sabían exactamente en qué parte de la oración estaban, cuál era la opción correcta, pero con el aumento. de la traducción automática, las teorías de steno libres de conflictos surgieron específicamente para evitar tener que pasar por el texto traducido resultante y "arreglar" conflictos.
  • Traducir en tiempo real (lo que estarías haciendo) significa que si recibes una coincidencia parcial, querrás esperar mientras esperas el siguiente acorde, pero probablemente solo hasta el tiempo de espera, momento en el que lo harías traduce lo que tienes en el búfer lo mejor que puedas. (O tal vez no quiere un tiempo de espera; es su decisión).
  • Probablemente sea mejor tener un ataque que diga "no tener en cuenta el golpe anterior"
  • Probablemente sea mejor tener un trazo que diga "borrar completamente el buffer sin generar nada"

430



Considere hacer algo en hardware que emule un teclado usb (¿o ps / 2?). Ya no dependerá de un sistema operativo específico o una API de sistema operativo específica. Una solución de hardware resistirá el paso del tiempo. ¡No te quedes estancado al usar una antigua API en Windows 7 cuando todos los demás ejecutan Windows 11! Arduino es bastante fácil de aprender.

Hay un montón de información y ayuda para Arduino. Es una plataforma de piratería de hardware construida para novatos. Solo se hará más grande ahora que Google está presionando a Arduino.

EDITAR: teclado USB virtual software  y hardware


184



Me parece que estás buscando menos consejos sobre cómo construir esto por ti mismo y más preguntando qué recursos hay disponibles para lograr lo que quieres. Dependiendo de su sistema operativo, hay muchas maneras de lograr esto sin tener que escribir su propio programa desde cero:

Trazo MIDI

Gratis. por Mac OS X 10.3 y versiones posteriores. Este específicamente viene con "la capacidad de usar cualquier MIDI teclado como un reemplazo de teclado de computadora completo ".

Traductor MIDI de Bome

Gratis / Postcardware (es un poco extraño). por Windows 2000 en adelante, y Mac OS X. Al principio parece estar más orientado hacia AutoHotkey-tipo de uso, pero al seguir mirando creo que podría hacer lo que quieras muy bien.

Max y aka.keyboard

Gratis. por Mac OS X. No es exactamente una solución "lista para usar", pero si se siente cómodo con la configuración básica del dispositivo, no debería ser tan malo.


111



Puede acceder al hardware con ejemplos de código fuente en .NET en MIDI DotNet.

Una muestra de trabajo completa como código fuente para crear secuencias de datos de notas MIDI está en VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, en alguna parte también es versión .NET)

Una forma de simular golpes de teclado es VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, en alguna parte también es versión .NET)

Y reconocer las teclas se describe en Sugerencia de carga: VB.NET 0266: Globaler KeyHook.

Enter image description here 

Entonces, solo usa una buena matriz de trabajo para un pianista Timo Boehme www.goldengel.ch

En el piano y cuando eres un buen jugador, puedes tener 10 dedos en el teclado y si la matriz se puede utilizar, puedes ser mucho más rápido que cualquier usuario de teclado de computadora, creo. :-)

En ese caso, si entiendo bien tu pregunta, no debería ser una gran cosa.


49



Estudié el rendimiento del piano en la universidad y luego me metí en el diseño de interacción, programación y uso Empuje, así que de hecho pasé mucho tiempo prototipando cosas como esta.

Puedes hacer que esto funcione bastante rápido en Linux utilizando el lenguaje de programación gráfica para artistas multimedia ".Datos puros, "junto con la x11key externa por Alex Andre.

En Mac, puedes usar MidiStroke. Creo que un método en Windows implicó el MidiOx y AutoHotKey herramientas. En otro momento tenía una versión usando el plugin de Java para Max / MSP. Creo Patrice Colet hizo una ventana externa para Pure Data que también funcionó, pero parece que ya no puedo ubicarla. Además, hay un externo para MaxMSP eso puede hacer esto en Windows. Finalmente, el no libre pero impresionante Osculator puede hacer lo que quiera, vea la página de características.

Cuando lo puse en funcionamiento, nunca me quedé con él, porque no pude detener las herramientas con el diseño. Sin embargo, ¡fue genial tener mi monitor en mi teclado eléctrico! Buena suerte.


41



Acerca de MIDI

Usted afirmó que "no sabe nada sobre MIDI". La tecnología MIDI es bastante directa una vez que la captas, pero puede ser confusa desde el principio. Uno de los recursos que me ha sido tremendamente útil para comprender los fundamentos de MIDI (que ciertamente son necesarios si quieres programar interacciones MIDI), es un libro llamado MIDI para el Technophobe. Es un libro fácil de leer y es muy útil.


Pure Data y Max

En mi experiencia en el desarrollo de multimedia interactiva, hay dos programas muy similares que he encontrado que facilitan la conexión y el mapeo de señales / entradas desde cualquier dispositivo.

Estos son Max para un entorno Mac y Datos puros para un entorno de PC. Ambos tienen una plétora de documentación en línea y tutoriales de YouTube. El video Tutorial Max / MSP 1 - usando el teclado de su computadora como midikeyboard (estilo ableton) demuestra un programa construido en Max que asigna un teclado de computadora a las entradas de un teclado MIDI (que es básicamente lo contrario de lo que intenta hacer). Puede obtener los resultados deseados utilizando el mismo patrón, pero invirtiendo las señales / mapeos.


AutoHotKey

AutoHotKey es una utilidad gratuita de código abierto para Windows que le permite reasignar claves y botones en sus dispositivos a macros. Admite de forma nativa teclados QWERTY, joysticks y macros de mouse.

Sin embargo, pude encontrar una implementación que admite el mapeo específico que está buscando. Estos dos hilos explican el proceso:

  1. Soporte MIDI IN en AutoHotkey , la discusión del caso de uso. El autor estaba buscando una programa que podría detectar entrada MIDI IN y traducir eso a presionar teclas.

  2. Biblioteca de entrada MIDI , la solución al problema del autor y el código / parche publicado en AutoHotKey que realmente implementa el resultado deseado.

Básicamente, parece que AutoHotKey, junto con el parche personalizado de este usuario, proporcionará exactamente lo que necesita para crear una asignación desde un teclado MIDI a la señal de entrada de un teclado QWERTY. Todo lo que tendría que hacer es instalar, configurar y definir sus asignaciones.


¿Algo más?

Algunas de las otras respuestas te han dado mucha más información sobre programación MIDI y MIDI, en general, pero como tu publicación dice que no parece ser exactamente lo que estás buscando. Me gustaría ayudarte más si es posible, pero sería más fácil si pudieras ser más específico sobre el tipo de información que estás buscando. Por ejemplo, ¿estás más interesado en cómo convertir las señales de entrada de un teclado MIDI a QWERTY señales del tecladoo es su principal interés encontrar una solución lista para usar a su problema específico? ¿Qué estás buscando que aún no se ha abordado?


37



Podrías hackear tu propio teclado USB bastante rápido con un microcontrolador Teenys.

De hecho, tienen un código de ejemplo de cómo hacer un teclado USB.

Puedes acercarte a esto de dos maneras:

  1. Obtenga un piano viejo y conecte interruptores directamente a la teensy

  2. Agregue la lógica adicional para conectarse al puerto MIDI y la decodificación necesaria.


27



En realidad, trabajé en esto hace un tiempo, tratando de capturar Banda de rock entradas de batería en mi computadora (haciendo un pequeño emulador de batería hecho en Java) De todos modos, hice una pregunta aquí sobre eso, Problema de retraso de tiempo (hay un código de votación allí, junto con lo que estaba intentando hacer). Y si puedo encontrar mi programa, puedo darte el código, usa una API de terceros (JInput)

Buena suerte de cualquier manera.


24