Log in Register

Login to your account

Username *
Password *
Synthonia • imput MIDI in windows

imput MIDI in windows

Il "prima" e il "dopo" dell' essere tastieristi

imput MIDI in windows

Postby giorgevich » Wed Sep 01, 2010 2:17 pm

vorrei trovare il modo di gestire il midi con programmi creati da me (in linguaggi di programmazione come C++, java o AutoIt), quello che ho capito è che tutto il traffico midi è gestito da un dll di windows (Winmm.dll), e collegandosi ad esso è possibile utilizzarlo.

in pratica vorrei usare la tastiera (musicale) come... non so... una tastiera da computer, tanto sono byte no? e creare programmi per farci quello che voglio (visualizzazioni Midi in tempo reale come il programma MidiLive, comandi vari, macro).

qualcuno qua nel forum ha conoscenze al riguardo? sarei molto grato se mi illuminaste

grazie, e scusate se la domanda è poco inerente al forum... ma i tastieristi sono un po anche programmatori, quindi chiedo : Chessygrin :
Korg x50, Gem prp700, Ribbon R2M Doepfer, M-audio MidAir37
giorgevich
 
Posts: 51
Joined: Tue Aug 10, 2010 8:47 am

Re: imput MIDI in windows

Postby vincenzoerre » Wed Sep 01, 2010 2:24 pm

tempo fa mi sono cimentato anch'io ma non ci ho concluso niente per via dell'università ecc...
prova a vedere se riesci a interfacciarlo al Flash
http://board.flashkit.com/board/archive/index.php/t-644434.html
http://sourceforge.net/projects/flashmidi/files/SDK/
http://www.alexisisaac.net/products/flashMidi/

Visual Basic
http://www.codeguru.com/vb/gen/vb_multi ... .php/c1095
Image
User avatar
vincenzoerre
Junior Member
 
Posts: 411
Joined: Fri Mar 20, 2009 1:41 pm
Location: Bari

Re: imput MIDI in windows

Postby giorgevich » Wed Sep 01, 2010 2:56 pm

purtroppo non ho grande esperienza, me la cavo a tentativi e testardaggine, attualmente preferisco usare AutoIt, (è un C++ modificato) che è facile da usare nonostante abbia molte potenzialità. in pratica tutto ciò che è da fare è richiamare una funzione di windows (perchè bene o male in windows i segnali midi passano dal sistema operativo : Chessygrin : ) che mi dia quello che cerco, qui ->http://msdn.microsoft.com/en-us/library/dd798495%28v=VS.85%29.aspx è la lista di funzioni Midi predefinite in windows, tutte contenute nella stessa libreria e dll. e ci sono un sacco di cose interessanti, ma non trovo nulla che mi dia semplicemente l'imput midi : WallBash : . probabilmente è la cosa più semplice del mondo ma non ci arrivo : Andry :
Korg x50, Gem prp700, Ribbon R2M Doepfer, M-audio MidAir37
giorgevich
 
Posts: 51
Joined: Tue Aug 10, 2010 8:47 am

Re: imput MIDI in windows

Postby giorgevich » Sat Oct 02, 2010 6:07 pm

siiiiiiiiiiiiiiiiiiiiiii : Yahooo : : Yahooo : : Yahooo :

ritornando sul problema, scervellandomi e cercando in internet per un pomeriggio sono riuscito a creare un programma in AutoIt che lista tutti i dispositivi midi del sistema e ne da le specifiche midi, poi sono riuscito a creare e inviare un pacchetto midi ad una tastiera collegata al pc (ho mandato segnali di noteon, noteoff, cambio parametro CC). questo significa che si posso creare programmi personalizzati per dare sequenze di comandi midi, volendo richiamati da HotKey o altro. continuerò la mia ricerca nel midi, ora proverò a decifrare il segnale in input.

comunque, se a qualcuno potesse interessare, sappia che con un computer può mandare sequenze midi personalizzate richiamabili da un semplice tasto... come un sequencer, ma con tutti i parametri midi possibili. spiegherò poi come fare se a qualcuno interessa.
Korg x50, Gem prp700, Ribbon R2M Doepfer, M-audio MidAir37
giorgevich
 
Posts: 51
Joined: Tue Aug 10, 2010 8:47 am

Re: imput MIDI in windows

Postby vincenzoerre » Sat Oct 02, 2010 6:14 pm

a me interessa ;) intanto complimenti per il risultato : Captain :
Image
User avatar
vincenzoerre
Junior Member
 
Posts: 411
Joined: Fri Mar 20, 2009 1:41 pm
Location: Bari

Re: imput MIDI in windows

Postby giorgevich » Wed Oct 06, 2010 8:56 am

non riesco ad andare oltre per ora. posto quello a cui sono arrivato:

Ogni segnale midi è composto di 3 parti principali: il primo valore individua il tipo di messaggio midi inviato, e il canale midi sul quale è inviato, il secondo valore è il numero della nota o del parametro midiCC, ed il terzo valore è la velocity della nota o il valore del parametro midiCC.

il messaggio midi però è comunque un numero unico, per mettere insieme questi 3 valori il procedimento è il seguente:

primo valore = Canale Midi (1-16) + un valore corrispondente al tipo di messaggio da inviare: NoteOff 127; NoteOn 143; "PolyAT" 159; "CC" 175; "PChange" 191; "ChanAT" 207; "Wheel" 223. (sinceramente non so cosa significhi PolyAt e ChanAt, ma dovrebbero fare qualcosa : Chessygrin : )
Esempio: se voglio mandare un segnale di Nota on sul canale 1, il primo valore è 143+1=144; NoteOff sul canale 3= 127+3=130, ecc

secondo valore = numero della nota o del parametro CC: questo è molto semplice per ora, per esempio il do centrale è 60, i vari controlli midi hanno il loro valore.

terzo valore = velocity o nuovo valore di un CC: anche qua è semplice, l'unica precisazione è che a seconda del dispositivo midi (penso dipenda dalle diverse implemetazioni dei produttori, ma sarebbe da verificare con più prodotti) i valori possono variare da 0 a 127, oppure da 1 a 128. questo vale anche per i comandi che hanno valore solo ON e OFF (come damper, cambio preset, ecc) che possono assumere 1/128 oppure 0/127.

Creare un pacchetto midi da inviare in Output

Messaggio Midi = Primo valore + BitShift(Secondo valore, -8) + BitShift(Terzo valore, -16)

spieghiamo questi BitShift: l'operazione di Bitshifting è uno spostamento dei bit nel codice binario, per esempio se ho 0 1 1 0 0 1 1 1 e faccio BitShifting a destra di 2, ottengo 0 0 0 1 1 0 0 1.
Questa operazione è espressa nei vari linguaggi di programmazione in vari modi ("BitShift", "&", o altri operatori).
Nel nostro caso è rappresentata così: BitShift(Valore da modificare, spostamento verso destra)
A noi interessa un BitShift di 8 posti verso sinistra, quindi -8 (il segno meno, come si può intuire, inverte lo spostamento)
Vorrei far notare che questa è di fatto un'operazione matematica, che può essere effettuata anche in base decimale, ma lavorando sui calcolatori è infinitamente più facile in questo modo.

facciamo qualche esempio:
NotaON, Channel1, Do centrale, velocity 100 = (143+1)+BitShift(60, -8)+BitShift(100, -16) = 6569104
NotaOFF, channel 5, La, velocity 75 = (127+5)+BitShift(69, -8)+BitShift(75, -16) = 4932996
CC, channel 3, CC#4(foot pedal), valore 127 = 175+3+BitShift(4, -8)+BitShift(127, -16) = 8324274

Decifrare i segnali in Input

Naturalmente considerando l'input valori e logica sono gli stessi, ed è da applicare lo stesso procedimento matematico, ma al contrario(qua però c'è da fare una precisazione... leggendo in giro e procedendo un po per tentativi ho trovato un metodo che funziona, ma certi passaggi non li so giustificare nemmeno io):

ho appena ottenuto un MidiMsg:
valore1 = BitAND(MidiMsg, 255) questo è il primo valore sommato al canale midi (basta sottrargli il canale midi che troverò grazie ad esso nel prossimo passaggio per ottenere i valori specifici caratteristici)
channel = BitAND(valore1, 15) + 1 questo è il numero di canale midi nel quale il messaggio è inviato
valore2 = BitAND(BitShift(MidiMsg, 8), 255) questo è il numero della nota o del comando CC
valore3 = BitAND(BitShift(MidiMsg, 16), 255)questo è la velocity o il valore del comando CC

l'operazione di BitAND è un'operatore logico di "E" applicato su ogni bit, cioè il bit dà 1 se nei due valori in input era 1, altrimenti dà 0. questo è quello che non riesco a capire... ma, diciamocelo, Basta che funzioni

P.S., so che queste informazioni da sole sono relativamente inutili, in un prossimo post spiegherò come inviare un messaggio in output da un pc, e purtroppo con l'imput sono fermo, non essendo pratico di CallBacks in informatica, nè di C++, e fino all'altro ieri non sapevo nemmeno quello che ho appena spiegato : Chessygrin :
Korg x50, Gem prp700, Ribbon R2M Doepfer, M-audio MidAir37
giorgevich
 
Posts: 51
Joined: Tue Aug 10, 2010 8:47 am


Return to Programmazione / Utilizzo

Who is online

Users browsing this forum: No registered users and 8 guests