Alsa e Gambas - Dereferenziazione mediante una Classe specifica
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