Alsa e Gambas - Dereferenziazione mediante una Classe specifica

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 Puntatore, per estrarne i dati Midi utili, mediante una variabile del tipo di una Classe specifica adatta per gestire gli Eventi Midi di ALSA.

Avremo bisogno di tre Classi distinte: una principale, la Classe spcifica per la gestione degli Eventi Midi e una Classe per la gestione delle funzioni di ALSA.

In particolare la Classe specifica per la gestione degli Eventi Midi potrà essere identica a quella illustrata nella pagina: Alsa e Gambas: Invio dati con l'uso di una Classe specifica.

Invece la Classe per la gestione delle risorse di ALSA sarà quella ove verranno intercettati i dati Midi e dove avverrà la loro dereferenziazione:

 Dim i As Integer
 Dim p As Pointer           ' La variabile da dereferenziare per raccogliere i dati degli Eventi Midi Alsa
 Dim midi As ClasseSpecifica  ' La variabile del tipo della Classe specifica

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

' Dereferenziamo il Puntatore, passato dalla funzione esterna di Alsa "snd_seq_event_input()", assegnando detto "Puntatore" alla variabile dichiarata del tipo "ClasseSpecifica":
   midi = p

' Filtra i tipi di Eventi Midi di ALSA che non interessano:
   If midi.type > 14 Then Return

' Raccoglie dunque alcuni dati:
  With midi
    Print .channel,
    Print .note,
    Print .velocity
  End With

 Loop