Ricevere dati grezzi Midi attraverso il subsistema RawMidi
Vai alla navigazione
Vai alla ricerca
Vediamo un esempio molto semplice per ricevere dati grezzi Midi attraverso il sibsistema RawMidi di Alsa.
Library "libasound:2"
' nt snd_rawmidi_open (snd_rawmidi_t **in_rmidi, snd_rawmidi_t **out_rmidi, const char *name, int mode) --> Apre una nuova connessione al'interfaccia "RawMidi"
Private Extern snd_rawmidi_open(in_rmidi As Pointer, out_rmidi As Pointer, name As String, mode As Integer) As Integer
' ssize_t snd_rawmidi_read (snd_rawmidi_t *rmidi, void *buffer, size_t size) --> Legge dati Midi grezzi da un flusso Midi
Private Extern snd_rawmidi_read(in_rmidi As Pointer, buffer As Pointer, size As Integer) As Integer
' const char * snd_strerror (int errnum) --> Ritorna il messaggio per un codice Errore
Private Extern snd_strerror(errore As Integer) As String
Public Sub Form_Open()
Dim err As Integer
Dim SND_RAWMIDI_SYNC As Integer = 4 ' 0x0004 -> Flag per la modalità di apertura: "Write sync mode"
Dim EAGAIN As Integer = 11 ' Try again
Dim midiin, buffer, status As Pointer
Dim nome_porta As String = "hw:2,0,0"
Dim bufStr As Stream
Dim dato As Byte
err = snd_rawmidi_open(VarPtr(midiin), Null, nome_porta, SND_RAWMIDI_SYNC)
If err < 0 Then Error("Impossibile aprire il MIDI input: %s", snd_strerror(err))
buffer = Alloc(SizeOf(gb.Byte))
bufStr = Memory buffer For Read
While (err <> - EAGAIN)
err = snd_rawmidi_read(midiin, buffer, 1)
If err < 0 Then
Error("Impossibile leggere dal MIDI input: %s", snd_strerror(err))
Else
If err >= 0 Then
Seek #bufStr, 0
Read #bufStr, dato
' Vediamo in console i dati Midi grezzi ricevuti (compreso in questo caso il dato relativo all'evento "Active Sensing":
Print dato
Endif
Endif
Wend
End
Pagina in costruzione !