Differenze tra le versioni di "Alsa e Gambas: Il Tempo della coda"

Da Gambas-it.org - Wikipedia.
(La scrittura del codice in Gambas)
Riga 1: Riga 1:
 
ALSA dispone di varie funzioni per poter gestire il Tempo di un brano musicale, ossia la velocità di una coda di eventi. Il Tempo pianificato degli eventi può essere definito in:
 
ALSA dispone di varie funzioni per poter gestire il Tempo di un brano musicale, ossia la velocità di una coda di eventi. Il Tempo pianificato degli eventi può essere definito in:
* ''Tempo reale'' (Midi tempo), che determina il tempo in microsecondi;
+
* ''Tempo reale'' (evento di tempo Midi), che determina il tempo in microsecondi;
 
* ''Tick'' (PPQ - pulse per quarter note) che determina il Tempo per ''tick''.
 
* ''Tick'' (PPQ - pulse per quarter note) che determina il Tempo per ''tick''.
  
 
<p>L'impostazione del Tempo in ''Tick'' (PPQ) definisce la risoluzione dei tick. Esso è impostato di default a 96 tick per quarto; ossia per ogni quarto (corrispondente al valore temporale in musica di una semiminima) vi sono 96 tick. Inoltre, ALSA imposta di default il valore dei movimenti per minuto (bpm - beat per minute) a 120.</p>
 
<p>L'impostazione del Tempo in ''Tick'' (PPQ) definisce la risoluzione dei tick. Esso è impostato di default a 96 tick per quarto; ossia per ogni quarto (corrispondente al valore temporale in musica di una semiminima) vi sono 96 tick. Inoltre, ALSA imposta di default il valore dei movimenti per minuto (bpm - beat per minute) a 120.</p>
 
<P>Il Tempo viene gestito in microsecondi per tick mediante la funzione di ALSA ''snd_seq_queue_tempo_set_tempo()''; mentre la funzione ''snd_seq_queue_tempo_set_ppq()'' imposta i tick per quarti. Solitamente, si preferisce impostare il Tempo in battute per minuto (bmp). Così, la prima funzione, sopra indicata, calcola il tempo preciso, la seconda contiene i valori per gestire il tempo sulla base delle movimenti per minuto .</p>
 
<P>Il Tempo viene gestito in microsecondi per tick mediante la funzione di ALSA ''snd_seq_queue_tempo_set_tempo()''; mentre la funzione ''snd_seq_queue_tempo_set_ppq()'' imposta i tick per quarti. Solitamente, si preferisce impostare il Tempo in battute per minuto (bmp). Così, la prima funzione, sopra indicata, calcola il tempo preciso, la seconda contiene i valori per gestire il tempo sulla base delle movimenti per minuto .</p>
<P>Da notare che l'impostazione in PPQ non può essere modificata mentre la coda sta scorrendo, pertanto quel parametro deve essere impostato prima della partenza della coda.</p>
+
<P>Da notare che l'impostazione in PPQ non può essere modificata mentre la coda sta scorrendo, pertanto quel parametro deve essere impostato prima della partenza della coda. Per modificare, invece, il tempo della coda, mentre sta scorrendo, si dovrà operare mediante la funzione di ALSA ''snd_seq_set_queue_tempo()'' oppure inviare un evento di tempo Midi in caso di modalità in ''real-time''.</p>
 
+
''As default, 96 PPQ and 120 BPM are used, respectively. That is, the tempo is set to 500000 (= 60 * 1000000 / 120). Note that PPQ cannot be changed while the queue is running. It must be set before the queue is started.''
As default, 96 PPQ and 120 BPM are used, respectively. That is, the tempo is set to 500000 (= 60 * 1000000 / 120). Note that PPQ cannot be changed while the queue is running. It must be set before the queue is started.
 
  
 
Nel caso la coda sia stata impostata in ''real-time'', allora la risoluzione, come sappiamo, è definita in nanosecondi.
 
Nel caso la coda sia stata impostata in ''real-time'', allora la risoluzione, come sappiamo, è definita in nanosecondi.
  
For setting these tempo parameters, use snd_seq_queue_tempo_t record. For example, to set the tempo of the queue q to 48 PPQ, 60 BPM,
 
  
 
====La scrittura del codice in Gambas====
 
====La scrittura del codice in Gambas====
Riga 28: Riga 26:
 
  snd_seq_queue_tempo_malloc(varPtr(qtempo))
 
  snd_seq_queue_tempo_malloc(varPtr(qtempo))
 
   
 
   
  ' snd_seq_queue_tempo_set_ppq(queue_tempo, tpq)
+
  <Font Color= #006400>' ''snd_seq_queue_tempo_set_ppq(queue_tempo, tpq)''</font>
 
  quarti_per_minuto = CInt(6000000000 / (quarti_per_minuto * 96))
 
  quarti_per_minuto = CInt(6000000000 / (quarti_per_minuto * 96))
 
   
 
   
Riga 38: Riga 36:
 
   
 
   
 
   '''End'''
 
   '''End'''
 +
 +
La funzione di ALSA ''snd_seq_queue_tempo_malloc(

Versione delle 04:32, 12 ott 2011

ALSA dispone di varie funzioni per poter gestire il Tempo di un brano musicale, ossia la velocità di una coda di eventi. Il Tempo pianificato degli eventi può essere definito in:

  • Tempo reale (evento di tempo Midi), che determina il tempo in microsecondi;
  • Tick (PPQ - pulse per quarter note) che determina il Tempo per tick.

L'impostazione del Tempo in Tick (PPQ) definisce la risoluzione dei tick. Esso è impostato di default a 96 tick per quarto; ossia per ogni quarto (corrispondente al valore temporale in musica di una semiminima) vi sono 96 tick. Inoltre, ALSA imposta di default il valore dei movimenti per minuto (bpm - beat per minute) a 120.

Il Tempo viene gestito in microsecondi per tick mediante la funzione di ALSA snd_seq_queue_tempo_set_tempo(); mentre la funzione snd_seq_queue_tempo_set_ppq() imposta i tick per quarti. Solitamente, si preferisce impostare il Tempo in battute per minuto (bmp). Così, la prima funzione, sopra indicata, calcola il tempo preciso, la seconda contiene i valori per gestire il tempo sulla base delle movimenti per minuto .

Da notare che l'impostazione in PPQ non può essere modificata mentre la coda sta scorrendo, pertanto quel parametro deve essere impostato prima della partenza della coda. Per modificare, invece, il tempo della coda, mentre sta scorrendo, si dovrà operare mediante la funzione di ALSA snd_seq_set_queue_tempo() oppure inviare un evento di tempo Midi in caso di modalità in real-time.

As default, 96 PPQ and 120 BPM are used, respectively. That is, the tempo is set to 500000 (= 60 * 1000000 / 120). Note that PPQ cannot be changed while the queue is running. It must be set before the queue is started.

Nel caso la coda sia stata impostata in real-time, allora la risoluzione, come sappiamo, è definita in nanosecondi.


La scrittura del codice in Gambas

Nel nostro applicativo in Gambas procederemo con la necessaria scrittura del codice per la variazione del Tempo come segue. Potremo innanzitutto inserire uno Slider nella classe principale FMain.class, con il quale variare il valore del tempo desiderato, e che richiama nella classe CAlsa.class la seguente routine:

PRIVATE EXTERN snd_seq_queue_tempo_malloc(queue_tempo As Pointer) As Integer
PRIVATE EXTERN snd_seq_queue_tempo_set_tempo(qtempo As Pointer, quarti_per_minuto As Integer) As Integer
PRIVATE EXTERN snd_seq_set_queue_tempo(seq As Pointer, outq As Integer, qtempo As Pointer) As Integer
PRIVATE EXTERN snd_seq_queue_tempo_free(qtempo As Pointer) As Integer

Public Sub impostaTempo(quarti_per_minuto As Integer)
Dim qtempo As Pointer

snd_seq_queue_tempo_malloc(varPtr(qtempo))

' snd_seq_queue_tempo_set_ppq(queue_tempo, tpq)
quarti_per_minuto = CInt(6000000000 / (quarti_per_minuto * 96))

  snd_seq_queue_tempo_set_tempo(qtempo, quarti_per_minuto)

   snd_seq_set_queue_tempo(handle, outqueue, qtempo)

    snd_seq_queue_tempo_free(qtempo)

 End

La funzione di ALSA snd_seq_queue_tempo_malloc(