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