Usar un teclado de piano como teclado de computadora [cerrado]

727

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

Peter Mortensen
fuente
¿Por qué capturar midi, si puedes usar un teclado sintetizador como teclado?
shevski
@I__: ¿Qué sistema operativo necesitas soportar? Probablemente importará.
TJ Crowder
55
@shevski: No estoy tratando de hacer nada, @I__ es la persona que hace la pregunta. Él / ella no está buscando convertir el sonido , sino las señales de eventos del teclado digital enviadas por teclados electrónicos a través de la interfaz digital de instrumentos musicales . Estos son muy parecidos a los eventos del teclado de la computadora: "Note on" corresponde muy bien al keydown, "note off" al keyup, etc. Incluso podría usar datos de velocidad para realizar diferentes acciones dependiendo de qué tan "fuerte" se haya tocado el acorde. Me encanta la idea
TJ Crowder
34
Si logra que esto funcione, puede codificar utilizando cualquier tipo de dispositivo midi. Probablemente requiere algo de práctica, pero usar una orquesta como equipo de desarrollo debería ser divertido.
Toon Krijthe
1
@I__: La respuesta más votada lo lleva al soporte MIDI de la API de sonido Java, que debería ayudarlo a recibir datos MIDI, y describe con cierto detalle la teoría involucrada en convertir eso en series de pulsaciones de teclas. La segunda respuesta más votada habla de una forma muy viable de conectarlo a una computadora usando un Arduino, incluyendo ... (continuación)
TJ Crowder

Respuestas:

16

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

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

No es necesario escribir el controlador del teclado.

el N
fuente
430

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

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

Entre la velocidad, los acordes y los pedales, creo que podrías encontrar una interfaz de "tipeo" bastante buena para el teclado del piano. El cordaje en particular podría ser una técnica muy poderosa: como mencioné en los comentarios, es por eso que los taquígrafos de base pueden usar una máquina de estenotipos para mantenerse al día con las personas que hablan durante horas seguidas, cuando incluso los mecanógrafos de alto nivel no lo harían No podrá hacerlo por ningún período de tiempo a través de teclados de estilo de máquina de escribir normales. 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 intentes hacer esto tú mismo, usa una biblioteca. Editar : Aparentemente, la API de sonido Java admite MIDI , incluida la recepción de eventos desde controladores MIDI. Frio. Esta página también puede ser útil.
  • Convertir esos datos en las pulsaciones de teclas que desea enviar, por ejemplo, a través del diccionario que mencioné anteriormente.
  • Salida de las pulsaciones de teclas a la computadora.

Para ser más ampliamente compatible con el software, tendría que escribir esto como un controlador de dispositivo de teclado. Este es un complemento para el sistema operativo que sirve como fuente para los eventos del 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, dado que solo está generando pulsaciones de teclas (no tratando de interceptarlas, lo que intentaba hacer hace años), es posible que pueda usar cualquier función que tenga el sistema operativo para enviar pulsaciones de teclas artificiales. Windows tiene una interfaz para hacerlo (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 utilizan los sistemas operativos para comunicarse con los controladores de dispositivos tienden a consumirse más fácilmente a través de C y similares).


Actualización : Más sobre el "diccionario" de acordes a 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 la máquina, el taquígrafo escribe presionando varias teclas en la máquina de estenotipos al mismo tiempo, luego soltándolas 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í solo, otras veces solo tiene un significado combinado con los siguientes trazos. (Piense "bueno" versus "bueno" seguido de "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 usan para decir qué, un diccionario que perfeccionarán continuamente a lo largo de su vida laboral. El diccionario tendrá entradas en las que la parte estenográfica ("steno", para abreviar) tiene una longitud de un trazo o múltiples trazos. Con frecuencia, habrá varias entradas con el mismo trazo de inicio 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 Acomienza varias entradas, y también tenga en cuenta que la forma en que traduce un Ctrazo depende de si ha visto previamente un A, un Bo si está comenzando de nuevo.

También tenga en cuenta que (aunque no se muestra en la pequeña muestra anterior), puede haber múltiples 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 según la posición de la mano. Hay una analogía obvia con la música allí, y podría usarla para hacer que su escritura fluya más parecida a la reproducción de música, a fin de evitar que esto afecte negativamente su piano y maximizar la probabilidad de que esto realmente ayude con el RSI.

Cuando traducimos steno en texto estándar, nuevamente utilizamos una búsqueda de "coincidencia de prefijo más largo": el algoritmo de traducción comienza con el primer trazo escrito y busca entradas que comiencen con ese trazo. Si solo hay una entrada, y es un trazo largo, entonces podemos decir "esa es la entrada a usar", generar el texto correspondiente y luego comenzar de nuevo con el siguiente trazo. Pero lo más probable es que ese trazo inicie múltiples entradas de diferentes longitudes. Así que 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:

ACBBCABCABD

Así es como lo traduciríamos:

  1. Aes el comienzo de tres entradas de diferentes longitudes; mira el siguiente golpe:C
  2. A/Csolo coincide con una entrada; salida "aire acondicionado" y comenzar de nuevo con el siguiente golpe:B
  3. Bcomienza dos entradas; mira el siguiente golpe:B
  4. B/Bno comienza nada; tomar la coincidencia anterior más larga ( B) y generar esa ("abeja")
  5. Tener salida B= "abeja", todavía tenemos un Btrazo en nuestro búfer. Comienza dos entradas, así que mira el siguiente trazo:C
  6. B/Ccoincide con una entrada; salida "porque" y comenzar de nuevo con el siguiente golpe:A
  7. Acomienza tres entradas; mira el siguiente golpe:B
  8. A/Bcomienza dos entradas; mira el siguiente golpe:C
  9. A/B/Csolo coincide con una entrada; salida "alfabético" y comenzar de nuevo con el siguiente trazo:A
  10. Acomienza tres entradas; mira el siguiente golpe:B
  11. A/Bcomienza dos entradas; mira el siguiente golpe:D
  12. A/B/Dno coincide con nada, así que toma la coincidencia anterior más larga ( A/B) y úsala para generar "alfabeto". Eso nos deja con Dtodavía en el búfer.
  13. Dcomienza dos entradas, por lo que normalmente miraríamos el siguiente trazo, pero hemos procesado todos los trazos, así que considérelo de forma aislada. En forma aislada, se traduce como "perro", por lo que da como resultado.

Aspectos de lo anterior a tener en cuenta:

  • Tiene un búfer de trazos que ha leído pero que aún no ha traducido.
  • Siempre desea hacer coincidir la mayor cantidad de golpes contra una sola entrada que pueda. A/Bdebe 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 "no traducir" - por ejemplo, con nuestro diccionario, los trazos Eserían un "no traducir").
  • (No se muestra arriba) Algunas teorías de steno permiten que el mismo conjunto de trazos signifique más de una cosa, según un contexto más amplio. La gente de Steno llama a estos "conflictos". Probablemente desee no permitirlos en su proyecto, y de hecho, cuando steno solía ser traducido manualmente por el taquígrafo, los conflictos estaban bien porque sabían exactamente en qué parte de la oración eran cuál era la opción correcta, pero con el aumento de la traducción automática, surgieron teorías de steno libres de conflictos específicamente para evitar tener que pasar por el texto traducido resultante y "solucionar" los conflictos.
  • La traducción en tiempo real (que estaría haciendo) significa que si recibe una coincidencia parcial, querrá retenerla mientras espera el próximo acorde, pero probablemente solo hasta un tiempo de espera, momento en el que traduce lo que tienes en el búfer lo mejor que puedas. (O tal vez no quieres un tiempo de espera; es tu decisión).
  • Probablemente sea mejor tener un derrame cerebral que diga "ignorar el derrame cerebral anterior"
  • Probablemente sea mejor tener un trazo que diga "borrar completamente el búfer sin generar nada"
TJ Crowder
fuente
66
@I__: Algunos programas intentan comunicarse directamente con el dispositivo del teclado y, por lo tanto, no funcionan bien con interfaces similares a "sendkeys". Espero que esto sea aún menos común ahora que hace algunos años cuando traté esto por última vez, y así como digo, comenzaría con "sendkeys" como mecanismos y solo me preocuparía por el otro si fuera necesario. (Probablemente sea mejor hacer un programa rápido probando el envío de claves [por sí solo, no al recibirlas desde MIDI], incluidas las secuencias de teclas especiales, y luego probar eso con el software que desea controlar antes de llegar demasiado lejos en el camino .)
TJ Crowder
77
Para aquellos que nunca escucharon sobre esto, el diccionario que usted describe es básicamente un Trie (pronunciado 'probar')
Adam
14
@I__: Interesante escribir ahora para decir eso. ¿Qué más quieres? Creo que he abordado muchos de los aspectos importantes de lo que debe hacer. No lo he hecho , ni he señalado a nadie que lo haya hecho, porque tengo otras cosas que hacer y no sé de una solución preconstruida. Pero en términos de construir una solución, creo que te he señalado en la dirección correcta.
TJ Crowder
2
Tenga en cuenta que puede atascar todos los acordes en una matriz lineal y hacer un recorrido cada vez que reciba un evento midi, y aún así no experimentar ninguna desaceleración notable. Usar un trie huele un poco a optimización prematura.
FeepingCreature
55
@FeepingCreature: Cuando estaba haciendo esto con taquígrafos y reporteros de la corte, sus diccionarios podían llegar fácilmente a los cientos de miles de entradas (recuerdo una que rompió la marca del millón). No había nada remotamente prematuro sobre el uso de una estrategia de optimización, estábamos tratando con 386s de 12 MHz. En el caso de I ___, si va con la idea de Arduino (que es una idea realmente genial), él también se enfrentará a un hardware bastante poco potente para la era moderna, aunque, por supuesto, las cosas son ridículamente más rápidas de lo que teníamos. Creo que su diccionario tenderá a ser dramáticamente más pequeño, pero ...
TJ Crowder
184

Considere hacer algo en hardware que emule un teclado usb (o ps / 2?). Ya no dependerá de un sistema operativo específico o de una API específica del sistema operativo. Una solución de hardware resistirá la prueba del tiempo. ¡No se quede atascado usando una API antigua 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 creada para novatos. Solo crecerá ahora que Google está presionando a Arduino.

EDITAR: software y hardware de teclado USB virtual

Brian O'Dell
fuente
Me encanta la idea de usar un Arduino para esto. Sin embargo, la memoria podría ser un problema. Parece que las placas prediseñadas más grandes tienen 256k de Flash (de los cuales 8k son utilizados por el gestor de arranque). En el pasado, introdujimos la traducción / visualización / edición en tiempo real de la taquigrafía de la máquina en 1M en DOS (por ejemplo, el 640k habitual más EMS o memoria extendida), pero estábamos escribiendo código C y ensamblado apretados y el diccionario (que podría fácilmente estar> 250k solo) estaba en el disco. Aquí no hay visualización ni edición simultánea, así que está bien, pero el diccionario tendrá que ser pequeño ...
TJ Crowder
Oh, eso no es nada. Traté rutinariamente con reporteros de la corte que tenían diccionarios que, incluso almacenados en la forma muy compacta que usamos, tenían varios megabytes de tamaño. Lo más grande que vi personalmente fue 4.5MB, y nuevamente, eso estaba almacenado en una forma altamente comprimida. Combine eso con el hecho de que hay menos teclas en un teclado steno que en un teclado de piano ... Sin embargo, el Arduino tiene un puerto USB, por lo que el diccionario podría estar en un adaptador de flash USB o incluso en un (fuente de alimentación externa ) SSD o HDD.
TJ Crowder
2
Es posible que desee considerar que un adolescente en lugar de un arduino ( pjrc.com/teensy ) tenga mucha más memoria y pueda emular directamente un teclado. Ya es compatible con muchas bibliotecas arduino y las incompatibles solo requieren reasignación de pines. - alternativamente, atmega también hace una placa de demostración que tiene 16 MB de memoria flash incorporada y cuesta alrededor de $ 30 (at90usbkey)
Marc
8
Diseñar una interfaz de piano útil para una computadora no es una tarea fácil. En mi humilde opinión, el OP debe prototiparlo primero en su entorno actual, luego, SI satisface sus necesidades, preocúpese por la portabilidad. A menos, por supuesto, que la alternativa portátil no sea notablemente más difícil.
Emilio M Bumachar
111

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

Carrera MIDI

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

Traductor MIDI de Bome

Gratis / Postcardware (es un poco extraño). Para Windows 2000 y arriba, y Mac OS X . Inicialmente parece estar más orientado hacia el uso del tipo AutoHotkey , pero al mirar más allá, creo que podría hacer lo que desea muy bien.

Max y aka.keyboard

Gratis. Para 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.

kathryn
fuente
49

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

Una muestra de trabajo completa como código fuente para crear flujo de datos de notas MIDI se encuentra en VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, en algún lugar también está la versión .NET)

Una forma de simular golpes de teclado es en VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, en algún lugar también está la versión .NET)

Y reconocer pulsaciones de teclas se describe en Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Ingrese la descripción de la imagen aquí

Luego, solo use 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 es utilizable, puedes ser mucho más rápido que cualquier usuario de teclado de computadora, creo. :-)

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

Nasenbaer
fuente
41

Estudié interpretación de piano en la universidad y luego me metí en el diseño de interacción, la programación y el uso de Vim , por lo que de hecho pasé mucho tiempo creando prototipos de este tipo de cosas.

Puede hacer que esto funcione bastante rápido en Linux utilizando el lenguaje de programación gráfico para artistas multimedia, " Pure Data ", junto con la clave x11key de Alex Andre .

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

Cuando lo puse a trabajar, nunca me quedé con él, porque no podía dejar de utilizar el diseño. ¡Sin embargo, fue genial tener mi monitor en mi teclado eléctrico! Buena suerte.

Peter Nore
fuente
37

Sobre MIDI

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


Datos puros 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 mapeo de señales / entradas desde cualquier dispositivo.

Estos son Max para un entorno Mac y Pure Data para un entorno de PC. Ambos tienen una gran cantidad de documentación en línea y tutoriales de YouTube. El video Max / MSP Tutorial 1: el uso del teclado de su computadora como midikeyboard (estilo ableton) muestra un programa integrado en Max que asigna un teclado de computadora a las entradas de un teclado MIDI (que es básicamente exactamente lo contrario de lo que está tratando de hacer). Puede obtener los resultados deseados utilizando el mismo patrón, pero invirtiendo las señales / asignaciones.


AutoHotKey

AutoHotKey es una utilidad gratuita de código abierto para Windows que le permite reasignar teclas 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 compatible con 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 un programa que pudiera detectar la entrada MIDI IN y traducirla a pulsaciones de 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 le han dado información mucho más extensa sobre programación MIDI y MIDI, en general, pero como su publicación dice que no parece ser lo que está buscando. Me gustaría ayudarlo más si es posible, pero sería más fácil si pudiera ser más específico sobre el tipo de información que está buscando. Por ejemplo, ¿está más interesado en cómo convertir las señales de entrada de un teclado MIDI en las señales de un teclado QWERTY , o es su interés principal encontrar una solución inmediata a su problema específico? ¿Qué buscas que aún no se ha abordado?

smartcaveman
fuente
27

Puede hackear su propio teclado USB con bastante rapidez utilizando un microcontrolador Teenys.

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

Podría abordar esto de dos maneras:

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

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

cmcginty
fuente
Esta es la respuesta más prometedora porque una vez que complete los dispositivos, funcionará en cualquier computadora y cualquier sistema operativo. Llévelo al trabajo o simplemente esté feliz de poder actualizar su computadora sin preocuparse por el teclado. Usaría dos dispositivos Teensy y los conectaría con sus pines de E / S. Dado que Teensy ya es compatible con USB MIDI pjrc.com/teensy/td_midi.html, su código solo debe ocuparse de las señales de movimiento entre el teclado teensy y el midi teensy.
Michael Dillon
24

En realidad, trabajé en esto hace un tiempo, tratando de capturar entradas de batería de Rock Band en mi computadora (haciendo un pequeño emulador de batería casero de Java) De todos modos, hice una pregunta aquí sobre eso, problema de retraso de tiempo (hay código de sondeo allí , junto con lo que intentaba hacer). Y si puedo encontrar mi programa, puedo darle el código, utiliza una API de terceros ( JInput ).

Buena suerte de cualquier manera.

Brendan
fuente
23

Prueba el traductor MIDI de Bome .

Funciona multiplataforma, puede convertir cualquier entrada MIDI en un teclado para tocar fácilmente, configurar y configurar rápidamente, además es gratis para uso personal.

Hay un tutorial, Consejo rápido: Traducción MIDI - MIDI a pulsaciones de teclas , sobre cómo configurarlo fácilmente:

Básicamente, hay infinitas posibilidades de lo que puede hacer, incluidas las teclas de chording y modificador. Lo uso para mi equipo de audio en vivo para controlar mi DAW usando mi piano y nunca he tenido un problema.

stepheninohio
fuente
18

En Java, puede usar JMF (marco de Java Media) para convertir señales MIDI. El diseño básico del teclado es fácil de usar, es decir, la interfaz de usuario; y coloque el carácter / símbolo frecuentemente utilizado a mano.

El código de muestra y la API en Java Sound Resources: Ejemplos: el procesamiento de señal digital (DSP) ayuda a comprender cómo procesar la señal.

Algunas referencias más:

Kamahire
fuente
15

Hay un programa llamado GlovePIE . Puede programarlo en un lenguaje de script simple y creo que es compatible con MIDI. No estoy seguro si esto encaja en la categoría "Java", pero aún así, es un gran programa. Lo he usado para controlar robots usando controladores PS3 . Es muy poderoso.

Peter Mortensen
fuente
15

Muchos teclados tienen un conector de puerto serie ( RS-232 ) para enviar señales MIDI a la computadora. Utilizo un programa llamado Girder para convertir la comunicación del puerto serie en golpes de teclado.

La viga tiene una función de "mapeo" que le permite mapear cada tecla, una por una, a la pulsación correspondiente.

¡Esta podría ser la solución simple que estás buscando!

Scott Rippey
fuente
12

¡Solo aprende estenografía!

Está claro por toda la discusión de su parte. No desea reinventar ninguna rueda, desde un punto de vista técnico. Pero una vez que haya hecho una conexión (lo que esta pregunta está haciendo) y esté funcionando, todavía tiene la mayor parte del trabajo por delante: tiene que entrenar su cerebro. Usted también tiene que inventar la manera más inteligente, más eficiente de hacer eso - un problema de diseño totalmente fuera de la rhealm de técnicos informáticos. Usted o cualquiera de nosotros se quedaría corto.

Afortunadamente, el problema se ha resuelto y perfeccionado a través de siglos de maduración ...

¡Aprende estenografía!

Sí, esto te hará retroceder un poco. Pero, ¿cuánto valen cientos de horas de su propio tiempo y, al final, un resultado menos favorable? Además, el artículo de Wikipedia sobre estenografía dice: "se parece más a un teclado de piano".

A menos, por supuesto, que desee tener un efecto secundario. Debo admitir que nunca pensé en esta posibilidad, ¡sería realmente entretenido ver a alguien sacar un texto del teclado de un piano!

Puede comenzar con un teclado USB con panel táctil (¿o un dispositivo de puntero sería más ergonómico?), Use Plover para traducirlo (estoy seguro de que se puede configurar para permitir que las teclas que no sean letras retengan su funcionalidad, ya que son críticas para programación), o, siga el hilo Re: Plover keyboard para rodar su propio teclado de estenografía USB, o compre un estenotipo .

¡Buena suerte!

FastAl
fuente
¿Dónde están {y} en el teclado de estenografía? ¿Cómo vas a escribir nombres que no son palabras, como pthread?
bobobobo
El enlace de wikipedia está mal y debería ser en.wikipedia.org/wiki/Stenography
joelhoro
11

Echa un vistazo a los juegos de arcade MAME . Han construido dispositivos de hardware para permitir la entrada de cualquier cantidad de elementos diferentes. El iPac , por ejemplo, convierte las señales de los dispositivos de entrada en USB que la computadora puede usar para emular claves. Puede usar cualquier combinación de dispositivos de entrada organizados de cualquier manera que parezca cómoda sin una lógica de programación loca, porque el software para interpretar la entrada ya está hecho y bien probado.

He visto entradas de la cabina del simulador de vuelo, quioscos personalizados y sistemas de votación integrados en este método ... ¡y el precio es correcto!

bpeterson76
fuente
10

Para resolver esto, necesitará algunas cosas:

  1. Una forma de capturar datos MIDI desde su teclado. Dependiendo de la interfaz: interfaz MIDI (clásica) o interfaz MIDI USB (moderna), la interfaz más probable es para una computadora, ya que ofrece la mayoría de las opciones. Los microcontroladores host USB no son tan simples como usar una computadora.

  2. Un esquema para convertir datos MIDI en pulsaciones de teclas. Como señaló un usuario, los acordes son el camino a seguir, ya que la cantidad de teclas no dependerá de la cantidad de teclas del piano.

  3. Una forma de inyectar una clave en el sistema operativo. Esto requerirá un controlador de bajo nivel para ser preciso. He jugado con aplicaciones que inyectan datos de teclado y mouse en aplicaciones en Windows 7, y puede ser escaso y depender de si una aplicación está actualmente en foco. Esta es la parte más difícil de la interfaz. Lo que puede funcionar es crear un microcontrolador de teclado USB HID que también tenga una interfaz en serie.

La interfaz serial crearía un puerto serial virtual. El software que lee los datos MIDI y produce las pulsaciones de teclas podría enviar un mensaje en serie al puerto en serie virtual. El microcontrolador enviaría una pulsación de tecla para que pareciera una entrada de teclado estándar. Esto permitiría la interfaz de los puertos MIDI y los teclados MIDI USB.

Hmmm, con este tipo de interfaz también puedes simular un mouse y usar algunas teclas de piano para el eje y los botones del mouse. La presión podría usarse para determinar la velocidad del puntero del mouse. Entonces también podrías eliminar el mouse. Otro beneficio de este enfoque es que cualquier tipo de dispositivo de entrada que conecte podría comunicarse con el puerto serie virtual para producir eventos de teclado y mouse. Entonces, si desea agregar otro hardware como pedales de batería o un joystick, sería cuestión de ajustar el programa que se comunica con la interfaz en serie.

Otra versión de lo anterior es como algunas publicadas anteriormente para usar un Arduino, pero también incluyen USB Host Shield de Sparkfun para manejar teclados de música basados ​​en USB. Esto permite que Arduino se programe como una combinación de teclado o mouse de teclado en el chip del cargador de arranque y permite que el dispositivo actúe como host USB para el teclado de música basado en USB. Entonces estás cubierto para ambos tipos. Aunque, sigo pensando que el método de puerto serie virtual es más flexible y sería más fácil de programar a largo plazo. El dispositivo Arduino será más difícil de cambiar que un programa o servicio de escritorio.

Hay otra posibilidad: ya existen teclados con una sola mano. He visto videos sobre ellos, pero tendrías que determinar si te duelen las manos o no.

Demolishun
fuente
7

Debería ser bastante fácil usar algo como la interfaz .NET DirectSound para conectarlo a un dispositivo MIDI. Deberá identificar su dispositivo MIDI de destino y luego obtener el código para escuchar los mensajes entrantes (hay artículos sobre cómo hacerlo a través de Google).

Dado que está utilizando el MIDI como teclado, básicamente hay dos mensajes MIDI que debe detectar, a saber, nota activada y desactivada. El mensaje MIDI tiene tres bytes de datos que especifican el comando, la nota y la velocidad. La nota desactivada es solo el número de la nota (a veces las pilas MIDI 'malas' envían una nota con velocidad cero que también debe esperar).

Una vez que tenga los mensajes traduciéndolos, la salida del teclado debería ser bastante simple desde .NET.

Hay muchos consejos en las otras respuestas sobre los tecnicismos; Solo quería darte una idea de los mensajes MIDI reales. ¡Buena suerte!

Simon Inns
fuente
Como nota al margen, el documento 'Definición de clase de dispositivo de bus serie universal para dispositivos MIDI' ofrece una visión general muy ordenada de los mensajes MIDI: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns el
7

Obtendrá resultados mejores y más felices (independientemente del sistema operativo y / o programa DAW que quiera usar) tocando cualquier teclado MIDI externo como controlador a través de su tarjeta de sonido. Luego, diríjalo a su software GB (o lo que sea) y el tono genera los muchos sonidos que le han proporcionado de esa manera en tiempo real.

Si su tarjeta de sonido no admite E / S MIDI (entradas / salidas / thrus), eso no es un problema. Puede considerar investigar e invertir en un convertidor de mesa MIDI externo. Muchos están equipados para convertir aún más las salidas MIDI a USB 2.0 (pasando por alto una tarjeta de sonido existente).

Por ejemplo: es bastante difícil obtener resultados de notas de gracia "similares a los humanos" a través de una opción de tecla de cambio Z y X usando un teclado de computadora y una herramienta de lápiz. Cuando, en cambio, sus propios dedos pueden tocar eso con un teclado MIDI desde sus propios rangos de registro de octava física, ¡inmediatamente!

Me doy cuenta de que pueden estar involucradas restricciones presupuestarias. Pero, algunos de estos teclados de octava tipo "Casio" aparentemente baratos vendidos en Radio Shack por menos de $ 100.00 dólares estadounidenses (* o menos) es todo lo que necesitaría (además, algunos de sus parches de sonido integrados y módulos de sonido y manejo de sonido increíblemente bien para otras cosas también).

Opciones de teclado MIDI RadioShack .

En cuanto a los convertidores MIDI externos para tarjetas de sonido existentes, he realizado algunas búsquedas en Google de la siguiente manera teniendo en cuenta las plataformas Mac específicamente:

Al principio, mucha de esta información de conversión MIDI externa puede ser engorrosa para usted, por lo que he desglosado las cosas como "fáciles de usar" para sus consideraciones y presupuesto:

No hay nada de malo en facilitar teclados virtuales como VST cuando se usa DAW . Ellos tienen su lugar.

Pero suenas como un tecladista consumado. Entonces, ¿por qué no considerar las opciones de conversión / teclado MIDI externo que acabo de mencionar?

¡Buena suerte y espero que esto te haya dado algunas ideas que pueden y funcionarán para ti!

Angshuman Bhattacharjee
fuente
6

Si no desea hacer ninguna programación usted mismo, pero solo desea resolver el problema, puede comprar un teclado USB-MIDI donde puede reasignar cualquier tecla para enviar una señal de salida de teclado QWERTY en lugar de una salida MIDI, para ejemplo M-Audio Axiom Pro

Este método funcionará con cualquier sistema operativo y cualquier computadora que admita teclados USB estándar, ya que el teclado MIDI se identificará como un teclado QWERTY estándar.

Martin Odhelius
fuente
¿Sabes si sería posible asignar acordes a teclas específicas también? por ejemplo, si toco el acorde C MAJOR, ¿puedo hacer que se traduzca a "el zorro saltó"
l --''''''--------- '' '' '' '' '' ' '
Perdón por no responder tan rápido, he tenido vacaciones durante 4 días;) No, desafortunadamente solo puede asignar un código QWERTY por tecla, por lo que prácticamente funciona como un teclado estándar.
Martin Odhelius
Por cierto, si compra uno, solo recuerde comprar el PRO-one, porque no creo que la versión que no sea PRO tenga la funcionalidad de asignación QWERTY.
Martin Odhelius
No creo que sea posible asignar acordes a códigos ASCII, solo una tecla por código, pero lo comprobaré en mi propio Axiom esta noche cuando llegue a casa del trabajo.
Martin Odhelius
Acabo de notar que solo es posible asignar códigos qwerty a los botones de control (teclas de función, pads de batería, teclas numéricas, etc.), no a las teclas de piano reales en el teclado. Yo mismo poseo este teclado y estaba seguro de que era posible asignar códigos ASCII a cualquier tecla, pero ahora, cuando lo probé, ¡me di cuenta de que estaba mal! Lo siento mucho por esto, ¿es posible revertir la recompensa de alguna manera?
Martin Odhelius
6

Puede usar un simple script AutoIt para leer eventos MIDI, ver Entrada MIDI .

También necesitará MIDI UDF y simular pulsaciones de teclas .

Leer eventos MIDI debería ser fácil, pero diferentes controladores MIDI (instrumentos) tienen diferentes características. Intente averiguar qué puede hacer su piano MIDI primero, luego vea cómo puede asignar mejor esas funciones a las prensas de teclado QWERTY simuladas.

Si lo desea, podría tener algo en la pantalla o en la bandeja para ayudarle a ver lo que está haciendo (es decir, para Shift, Ctrly la Altsimulación).

Martijn
fuente
5

Puede echar un vistazo a los teclados con acordes . Tienen la ventaja de que no necesita escribir un controlador para ellos antes de poder usarlos, y algunos son similares al diseño de un teclado de piano.

Peter Mortensen
fuente
5

Si conoce la codificación en Java, puede usarla de esta manera:

Primero, implemente a javax.sound.midi.Receivercon un send(..)método que asigne los eventos 'Nota sobre' a las pulsaciones de teclas como desee.

Necesitaría obtener el contenido de MidiMessage con su getMessagemétodo e interpretarlo a su manera. El significado de los bytes del mensaje se puede encontrar en Mensajes MIDI .

Después de recibir una 'nota activada' o 'desactivada' para una determinada tecla del teclado, puede asignarla a una tecla que desee asignándole una constante de la clase KeyEvent, algo así como C # 4 -> KeyEvent.VK_A y así sucesivamente . Este código de tecla puede ser utilizado por java.awt.Robotlos métodos keyPress y keyRelease para enviar la pulsación de tecla al sistema operativo y, por lo tanto, a otras aplicaciones.

dronus
fuente
4

Estoy de acuerdo con la respuesta de Brian O'Dell: si este fuera mi proyecto, lo haría en hardware. Tiene la ventaja de ser independiente de la plataforma y el hardware: su caja reemplaza la necesidad de una interfaz MIDI-USB y una API de PC.

mbed es una plataforma de creación rápida de prototipos que es muy fácil de aprender y tiene múltiples ventajas sobre Arduino IMHO (compilador en línea, 512 KB flash, 96 MHz, lenguaje C ++). Tiene una interfaz de teclado USB y una interfaz USB Midi preescrita para usted.

La comunidad es muy amigable y está dispuesta a ayudar, y hay muchos proyectos existentes que utilizan emulación oculta MIDI y USB: busque en YouTube "mbed MIDI" o similar.

Alex L
fuente
4

Si usa Linux, eche un vistazo a Footware .

Debe ser exactamente lo que está buscando: si ajusta los tonos MIDI a un mapeo de teclas de su agrado ...

Nunca pensé que esto podría ser útil para nadie más que para mí; o)

FlashKorten
fuente
2
En mi trabajo anterior como administrador tenía un controlador de pie debajo de mi escritorio, para minimizar dejar la fila de la casa en vim
FlashKorten
2

Intente usar un sistema basado en microcontrolador, como Arduino .

Peter Mortensen
fuente
1

Esto no sería demasiado difícil.

Supongo que estás en Windows , aunque no estoy seguro de eso. He escrito un secuenciador MIDI , http://pianocheetah.com , en C ++ antiguo y simple , y le permite usar el teclado del piano para ejecutar comandos. No hay ninguna razón por la que no pueda hacer lo mismo para introducir teclas en la secuencia de entrada del teclado.

Pero vamos ahora. Recuerdas cuánto tiempo te llevó aprender el teclado en primer lugar, ¿verdad? ¿Estás dispuesto a pasar por eso otra vez? ¿Y estás dispuesto a contaminar tu bendito teclado con un montón de símbolos de teclas estúpidos por todas partes?

Deberá usar al menos 26 alfa, 10 numéricos, 11 signos de puntuación y al menos 12 teclas de función Y sus estados desplazados. Eso es 60 teclas más estados cambiados. Eso quemará un total de 5 octavas de teclas. Estarás haciendo piano "lúpulo" = todo = el tiempo. Diga adiós a tocar escribiendo.

Puede salvarse de RSI , pero ha creado otro tipo diferente de pesadilla para usted.

Y buena suerte para que tu jefe te compre un teclado MIDI en el trabajo.

Si has aprendido a tocar el piano de verdad, has aprendido a tocar sin estrés. Hazlo en el teclado QWERTY . Sin tension. Comience despacio.

Stephen Hazel
fuente
Gracias por las amables palabras, pero he trabajado mucho en esto y no planeo hacerlo de código abierto, lo siento. Pero lo que harías es usar midiInOpen (); proporcionarle una devolución de llamada para procesar la entrada midi; ignore todo excepto los eventos de anotación, asigne la nota midi a alguna tecla del teclado e insértela en la secuencia de entrada del teclado (olvido la api para eso, pero estoy bastante seguro de que hay una, al menos).
Stephen Hazel