Differenze tra le versioni di "Alsa e Gambas - Dai Messaggi Midi standard all'Evento Midi di ALSA"
Riga 7: | Riga 7: | ||
===Confronto fra la rappresentazione in C e quella in Gambas della ''Struttura'' di ALSA "seq_event_t"=== | ===Confronto fra la rappresentazione in C e quella in Gambas della ''Struttura'' di ALSA "seq_event_t"=== | ||
Traduciamo la ''Struttura'' di ALSA "seq_event_t", scritta in linguaggio C, nella corrispondente ''Struttura'' in linguaggio Gambas e le confrontiamo: | Traduciamo la ''Struttura'' di ALSA "seq_event_t", scritta in linguaggio C, nella corrispondente ''Struttura'' in linguaggio Gambas e le confrontiamo: | ||
− | '''struct snd_seq_event_t { Public Struct | + | '''struct snd_seq_event_t { Public Struct Snd_seq_event_t''' |
snd_seq_event_type_t type <FONT Color=red>type</font> As Byte byte di indice 0 \ | snd_seq_event_type_t type <FONT Color=red>type</font> As Byte byte di indice 0 \ |
Versione delle 20:58, 18 gen 2022
ALSA non gestisce i Messaggi Midi dai dati grezzi così come giungono, bensì li organizza preliminarmente in complessi propri Eventi Midi che si costruiscono su un'area di memoria allocata, rappresentata dalla Struttura di ALSA "seq_event_t".
Tale Struttura occupa un quantità di memoria pari a 28 byte.
Di essa i primi sette membri (che occupano i primi 16 byte dell'area di memoria allocata) contengono dati comuni a tutti gli Eventi Midi di Alsa, i restanti sono riservati a specifici Eventi Midi.
Confronto fra la rappresentazione in C e quella in Gambas della Struttura di ALSA "seq_event_t"
Traduciamo la Struttura di ALSA "seq_event_t", scritta in linguaggio C, nella corrispondente Struttura in linguaggio Gambas e le confrontiamo:
struct snd_seq_event_t { Public Struct Snd_seq_event_t snd_seq_event_type_t type type As Byte byte di indice 0 \ unsigned char flags flags As Byte \ unsigned char tag tag As Byte \ unsigned char queue queue As Byte \ dati comuni snd_seq_timestamp_t time \ ↳ snd_seq_tick_time_t tick tick_time As Integer \ a tutti ↳ struct snd_seq_real_time time real_time As Integer / snd_seq_addr_t source / i Messaggi Midi ↳ unsigned char client source_client As Byte / ↳ unsigned char port source_port As Byte / snd_seq_addr_t dest / ↳ unsigned char client dest_client As Byte / ↳ unsigned char port dest_port As Byte byte di indice 15/ snd_seq_ev_note_t note ↳ unsigned char channel channel As Byte byte di indice 16 \ ↳ unsigned char note note As Byte byte di indice 17 \ dati appartenenti ↳ unsigned char velocity velocity As Byte byte di indice 18 \ agli specifici ↳ unsigned char off_velocity off_velocity As Byte byte di indice 19 / Messaggi Midi unsigned int param param As Integer byte di indice 20 / signed int value value As Integer byte di indice 24 / } End Struct
Sia per inviare che per ricevere Eventi Midi ALSA, bisognerà rispettare rigidamente la disposizione - quindi il tipo - di ciascun dato nel rispettivo offset stabilito dal protocollo di ALSA.
Non è possibile frammentare l'area di memoria del singolo Evento Midi ALSA in due o più blocchi da inviare al subsistema "seq" separatamente (seppur magari uno dopo l'altro in immediata sequenza): i dati contenuti nelll'area di memoria, che costituisce l'Evento Midi ALSA, devono essere inviati ad ALSA - mediante le funzioni esterne "snd_seq_event_output()" e "snd_seq_drain_output()" - tutti insieme in una volta sola.
PAGINA IN COSTRUZIONE !