Uso di una tastiera di pianoforte come tastiera di un computer [chiuso]


727

Ho problemi di RSI e ho provato 30 diverse tastiere di computer che mi hanno causato dolore. Suonare il piano non mi provoca dolore. Suono il pianoforte da circa 20 anni senza problemi di dolore. Vorrei sapere se esiste un modo per catturare il MIDI da una tastiera MIDI ed emettere dei tratti di tastiera. Non so nulla del MIDI ma vorrei una guida su come convertire questo segnale in una sequenza di tasti.


perché catturare midi, se puoi usare una tastiera sintetizzatore come tastiera?
Shevski

@I__: quale sistema operativo devi supportare? Probabilmente avrà importanza.
TJ Crowder

5
@shevski: non sto cercando di fare nulla, @I__ è la persona che pone la domanda. Non sta cercando di convertire il suono , ma piuttosto i segnali di eventi della tastiera digitale inviati da tastiere elettroniche tramite l' interfaccia digitale dello strumento musicale . Questi sono molto simili agli eventi della tastiera del computer: "Note on" corrisponde bene al keydown, "note off" al keyup, ecc. Puoi persino usare i dati di velocity per eseguire diverse azioni a seconda di quanto "ad alta voce" sia stato suonato l'accordo. Adoro l'idea.
TJ Crowder

34
Se riesci a farlo funzionare, puoi codificare usando qualsiasi tipo di dispositivo midi. Probabilmente ci vuole un po 'di pratica, ma usare un'orchestra come team di sviluppo dovrebbe essere divertente.
Toon Krijthe

1
@I__: La risposta più votata ti indirizza al supporto MIDI dell'API Java sound, che dovrebbe farti ricevere dati MIDI, e descrive in dettaglio la teoria implicata nel trasformarla in serie di sequenze di tasti. La seconda risposta più votata parla di un modo molto praticabile in cui potresti collegarlo a un computer usando un Arduino, incluso ... (continua)
TJ Crowder

Risposte:


16

Una buona libreria in .NET con supporto midi completo (BASS), vai a http://www.un4seen.com .

E per l'altra parte, traducendo le note MIDI della tastiera in tasti e altro ancora, sceglierei AutoItX, l'interfaccia ActiveX / COM e DLL in autoIt. Informazioni e download, vai su http://www.autoitscript.com/site/autoit/

Non è necessario scrivere il driver della tastiera.


430

Non ho programmato MIDI da anni, ma la tua idea fondamentale è molto solida (niente giochi di parole).

Il MIDI è un flusso di "eventi" (o "messaggi"), due dei quali fondamentali sono "note on" e "note off" che portano con sé il numero della nota (0 = C cinque ottave sotto la C centrale, attraverso 127 = G cinque ottave sopra la G sopra la metà C, in semitoni). Questi eventi portano un numero di "velocità" su tastiere sensibili alla velocità ("sensibile al tocco"), con una forza di (hai indovinato) tra 0 e 127.

Tra velocità, accordi e pedali, penso che potresti trovare un'interfaccia di "digitazione" abbastanza buona per la tastiera del piano. Gli accordi in particolare potrebbero essere una tecnica molto potente - come ho già detto nei commenti, è per questo che gli stenografi di rango e file possono utilizzare una macchina stenotipica per tenere il passo con le persone che parlano per ore di fila, quando anche i dattilografi di alto livello non vorrebbero ' essere in grado per un certo periodo di tempo tramite normali tastiere in stile macchina da scrivere. Come per la stenografia automatica, avresti bisogno di un "dizionario" dei significati degli accordi e delle sequenze degli accordi. (Puoi dire che lavoravo sul lato software della stenografia della macchina?)

Per fare questo, i pezzi fondamentali sono:

  • Ricezione dell'ingresso MIDI. Non provare a farlo da solo, usa una libreria. Modifica : Apparentemente, l'API Java Sound supporta il MIDI , inclusa la ricezione di eventi dai controller MIDI. Freddo. Questa pagina può anche essere utile.
  • Conversione di tali dati nelle sequenze di tasti che si desidera inviare, ad esempio tramite il dizionario che ho menzionato sopra.
  • Emissione dei tasti sul computer.

Per essere ampiamente compatibile con il software, dovresti scriverlo come un driver di dispositivo tastiera. Questo è un plug-in per il sistema operativo che funge da sorgente per gli eventi della tastiera, parlando con l'hardware sottostante (nel tuo caso, la tastiera del piano). Per Windows e Linux, probabilmente vorrai usare C per questo.

Tuttavia, poiché stai solo generando sequenze di tasti (non provando a intercettarli, cosa che stavo provando a fare anni fa), potresti essere in grado di utilizzare qualsiasi funzione del sistema operativo per inviare sequenze di tasti artificiali. Windows ha un'interfaccia per farlo (probabilmente diversi, quello a cui sto pensando è SendInputma so che esiste un'interfaccia "journal" che fa qualcosa di simile), e sono sicuro che anche altri sistemi operativi lo fanno. Potrebbe essere sufficiente per i tuoi scopi - è da dove cominciare, perché il percorso del driver del dispositivo sarà imbarazzante e probabilmente dovresti usare una lingua diversa da quella di Java. (Sono un grande fan di Java, ma le interfacce utilizzate dai sistemi operativi per comunicare con i driver di dispositivo tendono a essere più facilmente consumate tramite C e simili.)


Aggiornamento : ulteriori informazioni sul "dizionario" degli accordi per i tasti:

Fondamentalmente, il dizionario è un trie (grazie, @Adam) che cerchiamo con la corrispondenza del prefisso più lungo. Dettagli:

Nella stenografia della macchina, lo stenografo scrive premendo contemporaneamente più tasti sulla macchina dello stenotipo, quindi rilasciandoli tutti. Lo chiamano "colpo" della tastiera; è come suonare un accordo al pianoforte. I tratti frequenti (ma non sempre) corrispondono a una sillaba della lingua parlata. Come le sillabe, a volte un tratto (accordo) ha un significato tutto suo, altre volte ha solo un significato combinato con i seguenti tratti. (Pensa "bene" contro "bene" seguito da "ciao"). Sebbene saranno fortemente influenzati dalla scuola in cui hanno studiato, ogni stenografo avrà il proprio "dizionario" di ciò che i colpi usano per significare cosa, un dizionario che affineranno continuamente nel corso della loro vita lavorativa. Il dizionario avrà voci in cui la parte stenografica ("steno", in breve) è lunga un tratto o più tratti. Spesso ci saranno più voci con lo stesso tratto iniziale che si differenziano per la loro lunghezza e per i tratti successivi. Ad esempio (e non userò il vero steno qui, solo i segnaposto), potrebbero esserci queste voci:

A = alfa
A / B = alfabeto
A / B / C = alfabetico
A / C = aria condizionata
B = ape
B / C = perché
C = mare
D = cane
D / D = Dee Dee

(Quelle lettere non sono pensate per essere note musicali, solo pennarelli astratti.)

Nota che Aavvia più voci e nota anche come il modo in cui traduci un Ctratto dipende dal fatto che tu abbia precedentemente visto un A, a Bo che inizi di nuovo.

Si noti inoltre che (sebbene non mostrato nel piccolo esempio sopra), potrebbero esserci più modi per "riprodurre" la stessa parola o frase, anziché solo una. Gli stenografi lo fanno per rendere più semplice il passaggio da una parola precedente alla successiva a seconda della posizione della mano. C'è un'ovvia analogia con la musica lì, e potresti usarla per rendere il tuo flusso di battitura più simile alla musica, al fine di impedire che ciò influisca negativamente sul tuo piano e massimizzare la probabilità che ciò aiuti effettivamente con l'RSI.

Quando traduciamo steno in testo standard, usiamo di nuovo una ricerca con "prefisso più lungo": l'algoritmo di traduzione inizia con il primo tratto mai scritto e cerca le voci che iniziano con quel tratto. Se c'è solo una voce, ed è lunga una traccia, allora possiamo dire con certezza "questa è la voce da usare", produrre il testo corrispondente e ricominciare da capo con la traccia successiva. Ma più probabilmente, quel tratto inizia più voci di varie lunghezze. Quindi guardiamo il prossimo tratto e vediamo se ci sono voci che iniziano con quei due tratti in ordine; e così via fino a quando non avremo una partita.

Quindi, con il dizionario sopra, supponiamo di aver visto questa sequenza:

ACBBCABCABD

Ecco come lo tradurremmo:

  1. Aè l'inizio di tre voci di diversa lunghezza; guarda il prossimo colpo:C
  2. A/Ccorrisponde a una sola voce; uscita "aria condizionata" e ricominciare da capo con il colpo successivo:B
  3. Binizia due voci; guarda il prossimo colpo:B
  4. B/Bnon inizia nulla; prende la corrispondenza precedente più lunga ( B) e produce quella ("ape")
  5. Avendo output B= "ape", abbiamo ancora un Btratto nel nostro buffer. Inizia due voci, quindi guarda il prossimo tratto:C
  6. B/Ccorrisponde a una voce; output "because" e ricominciare con il prossimo tratto:A
  7. Ainizia tre voci; guarda il prossimo colpo:B
  8. A/Binizia due voci; guarda il prossimo colpo:C
  9. A/B/Ccorrisponde solo a una voce; output "alfabetico" e ricominciare con il colpo successivo:A
  10. Ainizia tre voci; guarda il prossimo colpo:B
  11. A/Binizia due voci; guarda il prossimo colpo:D
  12. A/B/Dnon corrisponde a nulla, quindi prendi la corrispondenza precedente più lunga ( A/B) e usala per generare "alfabeto". Questo ci lascia Dancora nel buffer.
  13. Dinizia due voci, quindi normalmente guarderemmo il tratto successivo, ma abbiamo elaborato tutti i tratti, quindi consideriamolo in isolamento. In isolamento, si traduce come "cane" in modo che output.

Aspetti di quanto sopra da notare:

  • Hai un buffer di tratti che hai letto ma che non hai ancora tradotto.
  • Devi sempre abbinare il maggior numero di tratti a una singola voce che puoi. A/Bdovrebbe essere tradotto come "alfabeto", non "alfa" e "ape".
  • (Non mostrato sopra) Potresti avere sequenze di tratti che non puoi tradurre, perché non corrispondono a nulla nel dizionario. (Le persone di Steno usano il nome "untranslate" - ad esempio, con il nostro dizionario, i tratti Esarebbero un "untranslate".)
  • (Non mostrato sopra) Alcune teorie di steno consentono allo stesso insieme di colpi di significare più di una cosa, in base a un contesto più ampio. La gente di Steno chiama questi "conflitti". Probabilmente vorrai impedirli nel tuo progetto, e infatti quando steno era tradotta manualmente dallo stenografo, i conflitti andavano bene perché sapevano proprio da dove nella frase erano la scelta giusta, ma con l'ascesa della traduzione automatica, sorsero teorie prive di conflitti per evitare di dover passare attraverso il testo tradotto risultante e "risolvere" i conflitti.
  • Tradurre in tempo reale (cosa che faresti) significa che se ricevi una corrispondenza parziale, ti consigliamo di tenerlo in attesa durante l'accordo successivo, ma probabilmente fino a un timeout, a quel punto traduci ciò che hai nel buffer nel miglior modo possibile. (O forse non vuoi un timeout; è la tua chiamata.)
  • Probabilmente è meglio avere un ictus che dice "ignora il precedente"
  • Probabilmente è meglio avere un tratto che dice "cancella completamente il buffer senza emettere nulla"

6
@I__: Alcuni programmi provano a parlare direttamente con il dispositivo a tastiera e quindi non giocano bene con interfacce simili a "sendkeys". Spero che questo sia ancora meno comune ora rispetto ad alcuni anni fa, quando ho affrontato l'ultima volta questo, e quindi, come ho detto, inizierei con meccanismi simili a "mazze" e mi preoccuperei solo dell'altro se e quando fosse necessario. (Probabilmente è meglio fare un programma rapido testando l'invio di chiavi [da solo, non ricevendole dal MIDI] - incluse sequenze di tasti speciali - e quindi testandolo con il software che vuoi controllare prima di andare troppo avanti nel percorso .)
TJ Crowder,

7
Per coloro che non ne hanno mai sentito parlare, il dizionario che descrivi è fondamentalmente un Trie (pronunciato "prova")
Adam

14
@I__: interessante scrivere ora per dirlo. Che cosa vuoi di più? Penso di aver affrontato molti degli aspetti importanti di ciò che devi fare. Non l'ho fatto , né ho indicato nessuno che lo abbia fatto, perché ho altre cose da fare e non mi capita di conoscere una soluzione pre-costruita. Ma in termini di costruzione di una soluzione, penso di averti indicato nella giusta direzione.
TJ Crowder,

2
Si noti che è possibile inceppare tutti gli accordi in un array lineare e eseguire l'attraversamento ogni volta che si riceve un evento MIDI e non si verifica ancora alcun rallentamento evidente. L'uso di un trie ha un leggero odore di ottimizzazione prematura.
FeepingCreature

5
@FeepingCreature: quando stavo facendo questo con stenografi e giornalisti di corte, i loro dizionari potevano facilmente arrivare alle centinaia di migliaia di voci (ricordo una di quelle che ha superato il milione). Non c'era nulla di prematuro nell'uso di una strategia di ottimizzazione, avevamo a che fare con i 386 a 12 MHz. Nel caso I ___, se segue l'idea di Arduino (che è un'idea davvero interessante), anche lui avrà a che fare con hardware abbastanza poco potente per l'era moderna, anche se ovviamente roba ridicolmente più veloce di quella che avevamo. Penso che il suo dizionario tenderebbe ad essere drammaticamente più piccolo, ma ...
TJ Crowder

184

Valuta di fare qualcosa nell'hardware che emuli una tastiera usb (o ps / 2?). Non sarai più dipendente da un sistema operativo specifico o da un'API specifica del sistema operativo. Una soluzione hardware resisterà alla prova del tempo. Non rimanere bloccato usando una vecchia API in Windows 7 quando tutti gli altri eseguono Windows 11! Arduino è abbastanza facile da imparare.

Ci sono moltissime informazioni e aiuto per Arduino. È una piattaforma di hacking hardware creata per i neofiti. Diventerà più grande solo ora che Google sta spingendo Arduino.

EDIT: software e hardware della tastiera USB virtuale


Adoro l'idea di usare un Arduino per questo. La memoria potrebbe essere un problema, però. Sembra che le più grandi schede pre-progettate abbiano 256k di Flash (di cui 8k è usato dal bootloader). In passato, abbiamo stipato traduzione / visualizzazione / modifica in tempo reale della scorciatoia della macchina in 1M sotto DOS (ad esempio, il solito 640k più EMS o memoria estesa), ma stavamo scrivendo codice C stretto e assembly e il dizionario (che potevano facilmente be> 250k da solo) era su disco. Qui non ci sono display o modifiche simultanee, quindi va bene, ma il dizionario dovrà essere piccolo ...
TJ Crowder

Oh, non è niente. Mi occupavo abitualmente di giornalisti giudiziari che avevano dizionari che, anche se conservati nella forma molto compatta che usavamo, avevano dimensioni di più megabyte. Il più grande che ho visto personalmente è stato di 4,5 MB e, di nuovo, è stato archiviato in una forma altamente compressa. Combinalo con il fatto che ci sono meno tasti su una tastiera steno rispetto a una tastiera per pianoforte ... Tuttavia, Arduino ha una porta USB, quindi il dizionario potrebbe essere su un adattatore flash USB o anche un (alimentato esternamente ) SSD o HDD.
TJ Crowder,

2
@You potrebbe voler considerare un adolescente invece di un arduino ( pjrc.com/teensy ) significativamente più memoria e può emulare direttamente una tastiera. È già compatibile con molte librerie Arduino e quelle incompatibili richiedono solo una riassegnazione dei pin. - in alternativa, atmega crea anche una scheda demo con 16 MB di flash incorporato e costa circa $ 30 (at90usbkey)
Marc

8
Progettare un'interfaccia utile per pianoforte per un computer non è un compito facile. IMHO, l'OP dovrebbe prima prototiparlo nel suo ambiente attuale, quindi, SE soddisfa i suoi bisogni, preoccuparsi della portabilità. A meno che, naturalmente, l'alternativa portatile non sia notevolmente più difficile.
Emilio M Bumachar,

111

Mi sembra che tu stia cercando meno consigli su come costruirlo da solo e più chiedendo quali risorse sono già là fuori per realizzare ciò che desideri. A seconda del tuo sistema operativo, ci sono molti modi per farlo senza dover scrivere il tuo programma da zero:

Tratto MIDI

Gratuito. Per Mac OS X 10.3 e versioni successive . Questo include in particolare "la possibilità di utilizzare qualsiasi tastiera MIDI come una sostituzione completa della tastiera del computer".

Traduttore MIDI di Bome

Free / Postcardware (è un po 'strano). Per Windows 2000 e su, e Mac OS X . Inizialmente sembra essere più orientato all'utilizzo di AutoHotkey di tipo, ma guardando oltre penso che potrebbe fare quello che vuoi bene.

Max e aka.keyboard

Gratuito. Per Mac OS X . Non esattamente una soluzione "pronta all'uso", ma se ti senti a tuo agio con la configurazione di base del dispositivo, non dovrebbe essere troppo male.


49

Puoi accedere all'hardware con esempi di codice sorgente in .NET in MIDI DotNet .

Un esempio completo di funzionamento come codice sorgente per creare il flusso di dati delle note MIDI è in VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, da qualche parte è anche la versione .NET)

Un modo per simulare i tratti della tastiera è in VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, da qualche parte è anche la versione .NET)

E riconoscere i tasti premuti è descritto in Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Inserisci qui la descrizione dell'immagine

Quindi, basta usare una buona matrice funzionante per un pianista Timo Boehme www.goldengel.ch

Al pianoforte e quando sei un bravo musicista, puoi avere 10 dita sulla tastiera e se la matrice è utilizzabile puoi essere molto più veloce di qualsiasi utente di tastiera del computer, penso. :-)

In tal caso, se capisco bene la tua domanda, non dovrebbe essere una grande cosa.


41

Ho studiato performance pianistica al college e poi mi sono occupato di progettazione dell'interazione, programmazione e utilizzo di Vim , quindi ho trascorso molto tempo a prototipare cose come questa.

Puoi farlo funzionare abbastanza rapidamente in Linux usando il linguaggio di programmazione grafico per artisti multimediali, " Pure Data ", insieme al tasto x11 esterno di Alex Andre .

Su Mac, puoi usare MidiStroke . Credo che un metodo su Windows riguardasse gli strumenti MidiOx e AutoHotKey . In un altro momento ho avuto una versione andando utilizzando il plug-in Java per Max / MSP . Credo che Patrice Colet abbia creato una finestra esterna per Pure Data che ha funzionato allo stesso modo, ma non riesco più a individuarla. Inoltre, c'è un esterno per MaxMSP che può farlo su Windows. Infine, l' oscillatore non gratuito ma fantastico può fare quello che vuoi - vedi la pagina delle caratteristiche.

Quando l'ho fatto funzionare, non mi sono mai bloccato, perché non riuscivo a smettere di attrezzare con il layout. Comunque è stato bello avere il mio monitor sulla tastiera elettrica! In bocca al lupo.


37

A proposito di MIDI

Hai dichiarato di "non sapere nulla del MIDI". La tecnologia MIDI è abbastanza semplice una volta afferrata, ma all'inizio può essere fonte di confusione. Una delle risorse che mi è stata di enorme aiuto per comprendere le basi del MIDI (che sono certamente necessarie se si desidera programmare le interazioni MIDI), è un libro chiamato MIDI per il Technophobe . È un libro facile da leggere ed è molto utile.


Dati puri e max

Nella mia esperienza nello sviluppo di contenuti multimediali interattivi, ho riscontrato due programmi molto simili che facilitano il collegamento e la mappatura di segnali / ingressi da qualsiasi dispositivo.

Questi sono Max per un ambiente Mac e Pure Data per un ambiente PC. Entrambi hanno una pletora di documentazione online e tutorial di YouTube. Il video Max / MSP Tutorial 1 - l'uso della tastiera del computer come midikeyboard (stile ableton) mostra un programma incorporato in Max che associa la tastiera di un computer agli ingressi di una tastiera MIDI (che è sostanzialmente l'esatto contrario di ciò che stai cercando di fare). È possibile ottenere i risultati previsti utilizzando lo stesso modello, ma invertendo i segnali / i mapping.


AutoHotKey

AutoHotKey è un'utilità open source gratuita per Windows che ti consente di rimappare le chiavi e i pulsanti sui tuoi dispositivi alle macro. Supporta nativamente tastiere, joystick e macro del mouse QWERTY.

Tuttavia, sono stato in grado di trovare un'implementazione a supporto della mappatura specifica che stai cercando. Questi due thread spiegano il processo:

  1. Supporto MIDI IN in AutoHotkey , discussione del caso d'uso. L'autore stava cercando un programma in grado di rilevare l'ingresso MIDI IN e tradurlo in tasti premuti .

  2. Libreria di input MIDI , la soluzione al problema dell'autore e il codice / patch pubblicato su AutoHotKey che implementa effettivamente il risultato desiderato.

Fondamentalmente, sembra che AutoHotKey, insieme alla patch personalizzata di questo utente, fornirà esattamente ciò di cui hai bisogno per creare un mapping da una tastiera MIDI al segnale di input di una tastiera QWERTY. Tutto quello che dovresti fare è installare, configurare e definire i tuoi mapping.


Qualunque altra cosa?

Alcune delle altre risposte ti hanno dato informazioni molto più ampie sulla programmazione MIDI e MIDI, in generale, ma come afferma il tuo post che non sembra essere proprio quello che stai cercando. Vorrei aiutarti di più, se possibile, ma sarebbe più facile se tu potessi essere più specifico sul tipo di informazioni che stai cercando. Ad esempio, sei più interessato a come convertire i segnali di input di una tastiera MIDI in segnali di una tastiera QWERTY o il tuo interesse principale è trovare una soluzione pronta all'uso per il tuo problema specifico? Cosa stai cercando che non è stato ancora affrontato?


27

Puoi hackerare la tua tastiera USB abbastanza rapidamente usando un micro controller Teenys.

In realtà, hanno un codice di esempio per come creare una tastiera USB .

Potresti avvicinarti a questi due modi:

  1. Prendi un vecchio pianoforte e collega gli interruttori direttamente al ragazzo

  2. Aggiungi la logica aggiuntiva per collegarti alla porta MIDI e la decodifica necessaria.


Questa è la risposta più promettente perché una volta completati i dispositivi, funzionerà su qualsiasi computer e sistema operativo. Accettalo per funzionare o semplicemente sii felice di poter aggiornare il tuo computer senza preoccuparti della tastiera. Vorrei usare due dispositivi Teensy e collegarli insieme con i loro pin I / O. Poiché Teensy supporta già USB MIDI pjrc.com/teensy/td_midi.html, il tuo codice deve solo occuparsi di spostare i segnali tra la tastiera e il midi teensy.
Michael Dillon,

24

In realtà, ci ho lavorato un po 'di tempo fa, cercando di catturare input di batteria Rock Band nel mio computer (creando un piccolo emulatore di batteria fatto in casa Java) Comunque, ho fatto una domanda qui a riguardo, Problema di ritardo (c'è un codice di polling lì dentro , insieme a quello che stavo tentando di fare.). E se riesco a trovare il mio programma, posso darti il ​​codice, utilizza un'API di terze parti ( JInput ).

Buona fortuna in entrambi i casi.


23

Prova il traduttore MIDI di Bome .

Funziona su più piattaforme, può convertire qualsiasi MIDI input in una sequenza di tasti, veloce da installare e configurare, inoltre è gratuito per uso personale.

C'è un tutorial, Suggerimento rapido: traduzione MIDI - da MIDI a sequenze di tasti , su come configurarlo facilmente:

Fondamentalmente, ci sono infinite possibilità di ciò che puoi fare, inclusi i tasti di accordo e modificatore. Lo uso per il mio impianto audio dal vivo per controllare il mio DAW usando il mio piano e non ho mai avuto problemi.


18

In Java, è possibile utilizzare JMF (Java Media framework) per convertire i segnali MIDI. La base della progettazione della tastiera è facile da usare, cioè l'interfaccia utente; e posizionare a portata di mano il simbolo / carattere utilizzato di frequente.

Il codice di esempio e l'API in Java Sound Resources: Esempi: Digital Signal Processing (DSP) aiuta a capire come elaborare il segnale.

Alcuni altri riferimenti:


15

C'è un programma chiamato GlovePIE . Puoi programmarlo in un semplice linguaggio di scripting e credo che supporti il ​​MIDI. Non sono sicuro che questo rientri nella categoria "Java", ma è comunque un ottimo programma. L'ho usato per controllare i robot usando i controller PS3 . È molto potente.


15

Molte tastiere dispongono di un connettore della porta seriale ( RS-232 ) per inviare segnali MIDI al computer. Uso un programma chiamato Girder per convertire la comunicazione della porta seriale in colpi di tastiera.

Girder ha una funzione di "mappatura" che ti consente di mappare ogni tasto, uno per uno, alla sequenza di tasti corrispondente.

Questa potrebbe essere la soluzione semplice che stai cercando!


12

Basta imparare la stenografia!

È chiaro da tutte le discussioni da parte tua. Non vuoi reinventare nessuna ruota, dal punto di vista tecnico. Ma una volta stabilita una connessione (cosa si pone questa domanda) e funzionante, hai ancora gran parte del lavoro davanti a te: devi allenare il tuo cervello. Devi anche inventare il modo più intelligente ed efficiente per farlo: un problema di progettazione totalmente fuori dal ronzio dei tecnici informatici. Tu o qualcuno di noi non saresti all'altezza.

Fortunatamente, il problema è stato risolto e affinato nonostante secoli di maturazione ...

Impara la stenografia!

Sì, questo ti farà tornare indietro. Ma cosa valgono centinaia di ore del tuo tempo, con un risultato meno favorevole alla fine? Inoltre, l'articolo di Wikipedia sulla stenografia dice "sembra più una tastiera di piano".

A meno che, naturalmente, non si desideri ottenere un effetto secondario. Devo ammetterlo, non ho mai pensato a questa possibilità, sarebbe davvero divertente vedere qualcuno estrarre un testo dalla tastiera di un pianoforte!

Potresti iniziare con una tastiera USB con touchpad (o una levetta di puntamento sarebbe più ergonomica?), Usare Plover per tradurlo (sono sicuro che può essere configurato per consentire ai tasti senza lettera di conservare la loro funzionalità in quanto sono fondamentali per programmazione) oppure segui il thread Ri: Tastiera di Plover per ruotare la tua tastiera per stenografia USB oppure acquista uno stenotipo .

In bocca al lupo!


Dove sono {e} sulla tastiera per stenografia? Come hai intenzione di digitare nomi che non sono parole, come pthread?
Bobobobo,

Il link di Wikipedia è sbagliato e dovrebbe essere en.wikipedia.org/wiki/Stenography
joelhoro

11

Dai un'occhiata ai giochi arcade MAME . Hanno costruito dispositivi hardware per consentire l'input da un numero qualsiasi di elementi diversi. L' iPac , ad esempio, converte i segnali dai dispositivi di input in USB che il computer può quindi utilizzare per emulare le chiavi. È possibile utilizzare qualsiasi combinazione di dispositivi di input disposti in un modo che sembri a proprio agio senza che sia necessaria una logica di programmazione folle, poiché il software per interpretare l'input è già stato eseguito e testato.

Ho visto input del cockpit del simulatore di volo, chioschi personalizzati e sistemi di voto integrati in questo metodo ..... e il prezzo è giusto!


10

Per risolvere questo, avrai bisogno di alcune cose:

  1. Un modo per acquisire dati MIDI dalla tastiera. A seconda dell'interfaccia: interfaccia MIDI (classica) o USB MIDI (moderna) l'interfaccia più probabile è quella di un computer in quanto fornisce la maggior parte delle opzioni. I microcontrollori host USB non sono così semplici come usare un computer.

  2. Uno schema per convertire i dati MIDI in sequenze di tasti. Come ha sottolineato un utente, gli accordi sono la strada da percorrere poiché il numero di tasti non dipenderà dal numero di tasti del piano.

  3. Un modo per iniettare una chiave nel sistema operativo. Ciò richiederà un driver di basso livello per essere precisi. Ho giocato con applicazioni che iniettano dati di tastiera e mouse in applicazioni in Windows 7, e può essere traballante e dipendere dal fatto che un'applicazione sia attualmente al centro dell'attenzione. Questa è la parte più difficile dell'interfaccia. Ciò che potrebbe funzionare è creare un microcontrollore per tastiera USB HID che ha anche un'interfaccia seriale.

L'interfaccia seriale creerebbe una porta seriale virtuale. Il software che legge i dati MIDI e produce i tasti potrebbe inviare un messaggio seriale alla porta seriale virtuale. Il microcontrollore invierebbe una sequenza di tasti in modo da sembrare un input da tastiera standard. Ciò consentirebbe di interfacciare entrambe le porte MIDI e le tastiere MIDI USB.

Hmmm, con questo tipo di interfaccia potresti anche simulare un mouse e usare alcune impostazioni dei tasti del piano per l'asse e i pulsanti del mouse. La pressione potrebbe essere utilizzata per determinare la velocità del puntatore del mouse. Quindi potresti anche eliminare il mouse. Un altro vantaggio di questo approccio è che qualsiasi tipo di dispositivo di input collegato può comunicare con la porta seriale virtuale per produrre eventi di tastiera e mouse. Quindi, se si desidera aggiungere altro hardware come pedali per batteria o un joystick, si tratterebbe di regolare il programma che comunica con l'interfaccia seriale.

Un'altra interpretazione di quanto sopra è come alcuni pubblicati sopra per utilizzare un Arduino, ma include anche USB Host Shield di Sparkfun per gestire tastiere musicali basate su USB. Ciò consente ad Arduino di essere programmato come una combinazione di tastiera o mouse della tastiera nel chip del caricatore di avvio e consente al dispositivo di agire su una porta USB host per la tastiera musicale basata su USB. Quindi sei coperto per entrambi i tipi. Tuttavia, penso ancora che il metodo della porta seriale virtuale sia più flessibile e sarebbe più facile da programmare a lungo termine. Il dispositivo Arduino sarà più difficile da modificare rispetto a un programma o servizio desktop.

C'è un'altra possibilità: esistono già tastiere a una mano con accordi. Ho visto dei video su di loro, ma dovresti determinare se ti fanno male alle mani o no.


7

Dovrebbe essere abbastanza semplice usare qualcosa come l'interfaccia .NET DirectSound da agganciare a un dispositivo MIDI. Dovrai identificare il tuo dispositivo MIDI di destinazione e quindi ottenere il codice per ascoltare i messaggi in arrivo (ci sono articoli su come farlo tramite Google).

Dato che stai usando il MIDI in come tastiera ci sono fondamentalmente solo due messaggi MIDI che devi rilevare, vale a dire note on e note off. Il messaggio MIDI è di tre byte di dati che specificano il comando, la nota e la velocità. La nota spenta è solo il numero della nota (a volte stack MIDI "cattivi" inviano una nota con velocità zero che anche tu devi aspettarti).

Dopo aver tradotto i messaggi, l'output della tastiera dovrebbe essere abbastanza semplice da .NET.

Ci sono molti consigli nelle altre risposte sugli aspetti tecnici; Volevo solo darti un'idea degli attuali messaggi MIDI. In bocca al lupo!


Come nota a margine,
Simon Inns,

7

Otterrai risultati migliori e più felici (indipendentemente dal sistema operativo e / o DAW programma che desideri utilizzare) suonando qualsiasi tastiera MIDI esterna come controller tramite la tua scheda audio. Quindi instradalo nel tuo software GB (o qualsiasi altra cosa) e il tono genera i molti suoni che ti hanno fornito in quel modo in tempo reale.

Se la tua scheda audio non supporta gli I / O MIDI (ins / outs / thrus), non è un problema. Puoi prendere in considerazione la ricerca e l'investimento in un convertitore da tavolo MIDI esterno. Molti sono equipaggiati per convertire ulteriormente le uscite MIDI in USB 2.0 (ignorando del tutto una scheda audio esistente).

Ad esempio: è piuttosto difficile ottenere i risultati delle note di grazia "umani" tramite un'opzione chiave di modifica Z e X utilizzando la tastiera del computer e lo strumento matita. Quando, invece, le tue dita possono semplicemente suonarlo con una tastiera MIDI dalle proprie gamme di registro di ottave fisiche, immediatamente!

Mi rendo conto che potrebbero essere coinvolti vincoli di bilancio. Ma, alcune di queste tastiere di tipo 5 "Casio" apparentemente economiche vendute a Radio Shack per meno di $ 100,00 US Dollars (* o meno) è tutto ciò di cui hai bisogno (inoltre, alcune delle loro patch audio integrate e i moduli sequencer suonano e gestiscono sorprendentemente bene anche per altre cose).

Opzioni della tastiera MIDI di RadioShack .

Per quanto riguarda i convertitori MIDI esterni per le schede audio esistenti, ho eseguito alcune ricerche su Google per te come segue tenendo conto in particolare delle piattaforme Mac:

Molte di queste informazioni di conversione MIDI esterne potrebbero inizialmente essere scomode per te, quindi ho suddiviso le cose più come "user friendly" per le tue considerazioni e il tuo budget:

Non c'è niente di sbagliato nel facilitare le tastiere virtuali come quelle di VST quando si utilizza DAW . Hanno il loro posto.

Ma sembri un esperto tastierista. Quindi, perché non prendere in considerazione le opzioni di conversione / tastiera MIDI esterne che ho appena menzionato?

Buona fortuna e spero che questo ti abbia dato alcune idee che possano e funzioneranno per te!


6

Se non vuoi eseguire alcuna programmazione da solo ma vuoi solo risolvere il problema, puoi semplicemente acquistare una tastiera USB-MIDI in cui puoi riassegnare qualsiasi tasto per inviare un segnale di uscita della tastiera QWERTY anziché un'uscita MIDI, per esempio M-Audio Axiom Pro

Questo metodo funziona con qualsiasi sistema operativo e qualsiasi computer che supporti le tastiere USB standard poiché la tastiera MIDI si identificherà come una tastiera QWERTY standard.


sai se sarebbe possibile assegnare accordi anche a tasti specifici? per esempio, se suono l'accordo C MAJOR, posso farlo tradurre in "la volpe saltata"
l --'''''''--------- '' '' '' '' '' '' "

Ci scusiamo per non aver risposto così velocemente, ho trascorso le vacanze per 4 giorni;) No, sfortunatamente è possibile assegnare un solo codice QWERTY per tasto, quindi funziona praticamente come una tastiera standard.
Martin Odhelius,

A proposito, se ne compri uno, ricorda di acquistare il PRO-one, perché non credo che la versione non PRO abbia la funzionalità di assegnazione QWERTY.
Martin Odhelius,

Non penso che sia possibile assegnare accordi ai codici ASCII, solo una chiave per codice, ma stasera controllerò il mio Axiom quando torno a casa dal lavoro.
Martin Odhelius,

Ho appena notato che è possibile assegnare codici qwerty solo ai pulsanti di controllo (tasti funzione, drum pad, tasti numerici ecc.), Non ai tasti del piano reali sulla tastiera. Personalmente possiedo questa tastiera ed ero sicuro che fosse possibile assegnare codici ASCII a qualsiasi tasto, ma ora quando l'ho provato ho notato che era sbagliato! Mi dispiace molto per questo, è possibile in qualche modo ripristinare la ricompensa?
Martin Odhelius

6

Puoi usare un semplice script AutoIt per leggere entrambi gli eventi MIDI, vedi MIDI Input .

Avrai anche bisogno di MIDI UDF e simulare la pressione dei tasti .

Leggere gli eventi MIDI dovrebbe essere semplice, ma controller MIDI (strumenti) diversi hanno caratteristiche diverse. Prova a scoprire prima cosa può fare il tuo piano MIDI, quindi vedi come puoi mappare al meglio quelle caratteristiche con le tastiere QWERTY simulate.

Se si vuole, si potrebbe avere qualcosa sullo schermo o nella barra per aiutarvi a vedere cosa si sta facendo (che è, per Shift, Ctrle Altla simulazione).


5

Potresti dare un'occhiata alle tastiere accordate . Hanno il vantaggio che non è necessario scrivere un driver per loro prima di poterli usare, e alcuni sono simili al layout di una tastiera di pianoforte.


5

Se conosci la codifica in Java, puoi utilizzare in questo modo:

Innanzitutto, implementa a javax.sound.midi.Receivercon un send(..)metodo che sta mappando gli eventi 'Note on' sui tasti come desideri.

Dovresti ottenere il contenuto del MidiMessage con il suo getMessagemetodo e interpretarlo a modo tuo. Il significato dei byte dei messaggi può essere trovato nei messaggi MIDI .

Dopo aver ricevuto un 'note on' o 'note off' per un determinato tasto della tastiera, puoi associarlo a un tasto che ti piace assegnandogli una costante della classe KeyEvent, qualcosa come C # 4 -> KeyEvent.VK_A e così via . Questo codice chiave può quindi essere utilizzato dai java.awt.Robotmetodi keyPress e keyRelease per inviare effettivamente la sequenza di tasti al sistema operativo e quindi ad altre applicazioni.


4

Concordo con la risposta di Brian O'Dell: se questo fosse il mio progetto, lo farei con l'hardware. Ha il vantaggio di essere indipendente dalla piattaforma e dall'hardware: la tua scatola sostituisce la necessità di un'interfaccia MIDI-USB e un'API per PC.

mbed è una piattaforma di prototipazione rapida che è molto facile da imparare e presenta numerosi vantaggi rispetto a Arduino IMHO (compilatore online, 512 KB di flash, 96 MHz, linguaggio C ++). Ha un'interfaccia tastiera USB e un'interfaccia USB Midi pre-scritta per te.

La community è molto amichevole e pronta ad aiutare, e ci sono molti progetti esistenti che usano l'emulazione nascosta sia MIDI che USB - cerca su Youtube "mbed MIDI" o simili.


4

Se usi Linux dai un'occhiata a Footware .

Dovrebbe essere esattamente quello che stai cercando: se regoli le tonalità MIDI su un keymapping di tuo gradimento ...

Non avrei mai pensato che potesse essere utile per nessuno tranne me; o)


2
Nel mio precedente lavoro di amministratore avevo un foot controller sotto la mia scrivania - per ridurre al minimo il lasciare la fila di casa in vim
FlashKorten


1

Questo non sarebbe troppo difficile.

Suppongo che tu sia su Windows , non ne sono sicuro. Ho scritto un sequencer MIDI , http://pianocheetah.com , in semplice vecchio C ++ , e ti permette di usare la tastiera del piano per eseguire i comandi. Non c'è motivo per cui non si possa fare la stessa cosa per spingere i tasti nel flusso di input della tastiera.

Ma andiamo adesso. Ricordi quanto tempo hai impiegato per imparare la tastiera, giusto? Sei disposto a ripeterlo? E sei disposto a inquinare la tua tastiera benedetta con un mucchio di stupidi simboli chiave che sembrano dappertutto?

Dovrai usare almeno 26 tasti alfa, 10 numerici, 11 punteggiatura e almeno 12 tasti funzione E i loro stati spostati. Quindi sono 60 tasti più stati spostati. Questo brucerà ben 5 ottave di chiavi. Farai piano "hops" = all = the time. Dì addio al tocco digitando.

Puoi salvarti dall'RSI , ma hai creato un altro tipo di incubo per te stesso.

E buona fortuna per convincere il tuo capo a comprarti una tastiera MIDI al lavoro.

Se hai imparato a suonare veramente il piano, hai imparato a suonare senza stress. Fallo sulla tastiera QWERTY . Nessuna tensione. Inizia lentamente.


Grazie per le gentili parole, ma ho risolto il problema su questa cosa e non ho intenzione di renderlo open source - mi dispiace. Ma quello che dovresti fare è usare midiInOpen (); fornire un callback per elaborare l'input MIDI; ignora tutto tranne che per gli eventi noti, associa la nota midi a qualche tasto della tastiera e inseriscila nel flusso di input della tastiera (per questo dimentico l'api, ma sono ABBASTANZA sicuro che ce ne sia almeno uno).
Stephen Hazel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.