Ricevere dati grezzi Midi attraverso il subsistema RawMidi

Da Gambas-it.org - Wikipedia.
Versione del 12 lug 2013 alle 20:11 di Vuott (Discussione | contributi) (Creata pagina con 'Vediamo un esempio molto semplice per ricevere dati grezzi Midi attraverso il sibsistema '''RawMidi''' di Alsa. Library "libasound:2" <Font color=gray>' ''nt snd_rawmidi_o...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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 !