Differenze tra le versioni di "Alsa e Gambas - Dereferenziazione mediante una Struttura"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "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 su...") |
|||
Riga 15: | Riga 15: | ||
tick_o_tv_sec As Integer | tick_o_tv_sec As Integer | ||
tv_nsec As Integer | tv_nsec As Integer | ||
− | + | source_client As Byte | |
source_port As Byte | source_port As Byte | ||
− | + | dest_client As Byte | |
dest_port As Byte <FONT color=gray>' ''byte indice 15''</font> | dest_port As Byte <FONT color=gray>' ''byte indice 15''</font> | ||
channel As Byte <FONT color=gray>' ''byte indice 16''</font> | channel As Byte <FONT color=gray>' ''byte indice 16''</font> | ||
Riga 35: | Riga 35: | ||
Dim midi As MidiStruttura <FONT color=gray>' ''La variabile del tipo della Struttura "MidiStruttura"''</font> | Dim midi As MidiStruttura <FONT color=gray>' ''La variabile del tipo della Struttura "MidiStruttura"''</font> | ||
− | i = snd_seq_event_input(handle, VarPtr(p)) | + | Do |
− | + | i = snd_seq_event_input(handle, VarPtr(p)) | |
+ | If i < 0 Then Return | ||
<FONT color=gray>' ''Dereferenziamo senza "Memory-Stream" il Puntatore, passato dalla funzione esterna di Alsa "snd_seq_event_input()", assegnando detto "Puntatore" alla variabile dichiarata di tipo "MidiStruttura":''</font> | <FONT color=gray>' ''Dereferenziamo senza "Memory-Stream" il Puntatore, passato dalla funzione esterna di Alsa "snd_seq_event_input()", assegnando detto "Puntatore" alla variabile dichiarata di tipo "MidiStruttura":''</font> | ||
− | + | <FONT color=#B22222>midi = p</font> | |
<FONT color=gray>' ''Filtra i tipi di Eventi Midi di ALSA che non interessano:''</font> | <FONT color=gray>' ''Filtra i tipi di Eventi Midi di ALSA che non interessano:''</font> | ||
− | + | If midi.type > 14 Then Return | |
− | + | With midi | |
− | + | Print .channel, | |
− | + | Print .note, | |
− | + | Print .velocity | |
− | + | End With | |
+ | |||
+ | Loop |
Versione delle 18:04, 20 gen 2022
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 Midi utili, mediante una variabile di tipo Struttura. Questo argomento è descritto in via generale ed astratta in questa pagina della WIKI.
Ne sviluppiamo di seguito un esempio essenziale astratto:
' All'inizio della Classe dichiariamo una "Struttura" avente i propri elementi organizzati esattamente come l'evento Midi prescritto da Alsa nella Struttura snd_seq_event_t: Public Struct MidiStruttura type As Byte ' byte indice 0 flag As Byte tag As Byte queue As Byte tick_o_tv_sec As Integer tv_nsec As Integer source_client As Byte source_port As Byte dest_client As Byte dest_port As Byte ' byte indice 15 channel As Byte ' byte indice 16 note As Byte ' byte indice 17 velocity As Byte ' byte indice 18 off_velocity As Byte param As Integer ' byte indice 20 value As Integer ' byte indice 24 End Struct ...... ...... Dim i As Integer Dim p As Pointer ' La variabile da dereferenziare per raccogliere i dati degli Eventi Midi Alsa Dim midi As MidiStruttura ' La variabile del tipo della Struttura "MidiStruttura" Do i = snd_seq_event_input(handle, VarPtr(p)) If i < 0 Then Return ' Dereferenziamo senza "Memory-Stream" il Puntatore, passato dalla funzione esterna di Alsa "snd_seq_event_input()", assegnando detto "Puntatore" alla variabile dichiarata di tipo "MidiStruttura": midi = p ' Filtra i tipi di Eventi Midi di ALSA che non interessano: If midi.type > 14 Then Return With midi Print .channel, Print .note, Print .velocity End With Loop