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