Differenze tra le versioni di "Alsa e Gambas: Accodamento di eventi"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
 
<BR>L'evento, temporizzato con il proprio valore ''timestamp'', viene innanzitutto inserito nella coda di priorità, ed indirizzato al proprio client di destinazione subito o successivamente a seconda di quanto stabilito dal ''timestamp''.
 
<BR>L'evento, temporizzato con il proprio valore ''timestamp'', viene innanzitutto inserito nella coda di priorità, ed indirizzato al proprio client di destinazione subito o successivamente a seconda di quanto stabilito dal ''timestamp''.
 
<P>Per creare una coda bisognerà utilizzare la funzione di ALSA: ''int snd_seq_alloc_queue(snd_seq_t * seq)''. La funzione ritorna il valore identificativo della coda, che potrà essere uguale o superiore a zero. Se la funzione, però, ritorna un valore minore di zero, riporterà un errore. L'identificativo della coda sarà utilizzato nella successiva funzione per far partire la coda medesima.</p>
 
<P>Per creare una coda bisognerà utilizzare la funzione di ALSA: ''int snd_seq_alloc_queue(snd_seq_t * seq)''. La funzione ritorna il valore identificativo della coda, che potrà essere uguale o superiore a zero. Se la funzione, però, ritorna un valore minore di zero, riporterà un errore. L'identificativo della coda sarà utilizzato nella successiva funzione per far partire la coda medesima.</p>
<P>Questa funzione, come ormai ben sappiamo, andrà richiamata in Gambas con la consueta voce ''Extern''. Tenendo condo delle dichiarazioni assunte nel nostro codice nei capitoli iniziali di questa guida, inseriremo detta funzione nella routine ''alsa_open()'' presente in CAlsa.class, e così scriveremo:</p>
+
<P>Questa funzione, come ormai ben sappiamo, andrà richiamata in Gambas con la consueta voce ''Extern''. Tenendo conto delle dichiarazioni assunte nel nostro codice nei capitoli iniziali di questa guida, inseriremo detta funzione nella routine ''alsa_open()'' presente in CAlsa.class, e così scriveremo:</p>
  
 
  PRIVATE Extern snd_seq_alloc_queue(seq as pointer) As Integer
 
  PRIVATE Extern snd_seq_alloc_queue(seq as pointer) As Integer
Riga 9: Riga 9:
 
   
 
   
 
  ......
 
  ......
  err = snd_seq_alloc_queue(handle as pointer)
+
 +
  err = snd_seq_alloc_queue(handle)
 
  printerr("Creazione della coda", err)
 
  printerr("Creazione della coda", err)
 
  IF err < 0 then error.Raise("Errore nella creazione di una coda")
 
  IF err < 0 then error.Raise("Errore nella creazione di una coda")
 
  outqueue = err
 
  outqueue = err
 +
 +
......
 +
 +
E' possibile dare anche un nome alla coda sostituendo la funzione di prima con la seguente: ''err = snd_seq_alloc_queue(snd_seq_t * seq, const char * name)'', che sarà così richiamata con Extern:
 +
 +
PRIVATE Extern snd_seq_alloc_queue(seq as pointer, nome_coda As String) As Integer
 +
 +
...... ''<Font Color= #006400>' ''come sopra''</font>
 +
err = snd_seq_alloc_queue(handle, "coda_eventi")
 +
...... ''<Font Color= #006400>' ''come sopra''</font>

Versione delle 15:14, 11 ott 2011

ALSA, per processare uno o più eventi, ha bisogno che sia creata una coda di eventi temporizzati. Come sappiamo, la temporizzazione degli eventi avviene mediante l'assegnazione per ciascun evento di una marcatura temporale: il Timestamp. Una coda di eventi riceverà messaggi di temporizzazione, con i quali cercherà di adattare l'invio degli eventi Midi a questa temporizzazione.
L'evento, temporizzato con il proprio valore timestamp, viene innanzitutto inserito nella coda di priorità, ed indirizzato al proprio client di destinazione subito o successivamente a seconda di quanto stabilito dal timestamp.

Per creare una coda bisognerà utilizzare la funzione di ALSA: int snd_seq_alloc_queue(snd_seq_t * seq). La funzione ritorna il valore identificativo della coda, che potrà essere uguale o superiore a zero. Se la funzione, però, ritorna un valore minore di zero, riporterà un errore. L'identificativo della coda sarà utilizzato nella successiva funzione per far partire la coda medesima.

Questa funzione, come ormai ben sappiamo, andrà richiamata in Gambas con la consueta voce Extern. Tenendo conto delle dichiarazioni assunte nel nostro codice nei capitoli iniziali di questa guida, inseriremo detta funzione nella routine alsa_open() presente in CAlsa.class, e così scriveremo:

PRIVATE Extern snd_seq_alloc_queue(seq as pointer) As Integer

Public Sub alsa_open(myname As string)

......

err = snd_seq_alloc_queue(handle)
printerr("Creazione della coda", err)
IF err < 0 then error.Raise("Errore nella creazione di una coda")
outqueue = err

......

E' possibile dare anche un nome alla coda sostituendo la funzione di prima con la seguente: err = snd_seq_alloc_queue(snd_seq_t * seq, const char * name), che sarà così richiamata con Extern:

PRIVATE Extern snd_seq_alloc_queue(seq as pointer, nome_coda As String) As Integer

...... ' come sopra
err = snd_seq_alloc_queue(handle, "coda_eventi")
...... ' come sopra