Alsa e Gambas - Dereferenziazione mediante i Memory-Stream

Da Gambas-it.org - Wikipedia.

Come è ormai noto, la funzione esterna di Alsa:

int  snd_seq_event_input(snd_seq_t * seq, snd_seq_event_t ** ev)

assegna alla variabile di tipo Pointer, presente come suo secondo parametro, l'indirizzo di memoria che punta ad una Struttura (esterna) contenente i dati Midi passati da Alsa.

Possiamo dereferenziare tale variabile di tipo Pointer, per estrarne i dati degli Eventi Midi di Alsa utili, mediante i Memory-Stream in modalità "For Read".

 Dim p As Pointer    ' La variabile da dereferenziare per raccogliere i dati degli Eventi Midi Alsa
 Dim i As Integer
 Dim st As Stream
 Dim b As Byte

 Do

   i = snd_seq_event_input(handle, VarPtr(po))
   If i < 0 Then Return

' Usa i "Memory-Stream":
   st = Memory po For Read

' Legge nella variabile di tipo "Memory-Stream", tenendo conto dell'organizzazione dell'evento Midi.
' In questo caso sarà letto il 1° byte dello stream (ossia: "Type"):
   Read #st, b

' Filtro per evitare l'Active Sensing:
   If b > 14 Then Return

' Il puntatore dello "Stream" si sposta sul byte di indice 16 dello stream (ossia il tipo di dato: "Channel"):
   Seek #st, 16
   Read #st, b
   Print b,

' Il puntatore dello "Stream" si sposterà automaticamente sul byte di indice 17 dello stream (ossia: "Note"):
   Read #st, b
   Print b,

' Il puntatore si sposterà automaticamente sul byte di indice 18 dello stream (ossia: "Velocity"):
   Read #st, b
   Print b

   st.Close

 Loop