Differenze tra le versioni di "Alsa e Gambas: Registrare messaggi Midi"

Da Gambas-it.org - Wikipedia.
(Creare i valori per il Tempo Delta)
 
(66 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
In questa pagina tratteremo del caso in cui vengono ricevuti in entrata dati Midi e memorizzati, al fine di creare al termine un file Midi (.mid).
+
#REDIRECT [[ALSA_e_Gambas_-_Registrare_messaggi_Midi]]
<BR>Possiamo pensare di effettuare la registrazione dei dati Midi in entrata:
 
* attraverso l'utilizzazione di un altro specifico applicativo in C di supporto, come ad esempio ''arecordmidi'', diciamo in modalità ''demone'';
 
* oppure mediante la realizzazione in Gambas di apposito algoritmo, come parte del nostro applicativo appositamente dedicata o come applicativo a se stante.
 
 
 
===Creare i valori per il ''Tempo Delta''===
 
Come abbiamo già avuto modo di vedere nella pagina "[[Alsa_e_Gambas:_Ricevere_dati_da_smf#Il_Tempo_Delta_come_dato_a_lunghezza_variabile|''Ricevere dati da uno Standard Midi File'']]", il ''Tempo Delta'' viene definito non con i suoi valori reali, bensì con una ''rappresentazione'' di tali valori. Pertanto, nel file Midi non avremo i valori reali dei Midi ''tick'', tenuto conto della ''risoluzione'' per nota da 1/4 del Tempo Delta presente nell'Header Chunk, bensì una loro ''rappresentazione'' esadecimale.
 
Dunque, prima ancora di poter scrivere, ossia di salvare, un file Midi dovremo - fra l'altro - individuare l'algoritmo per trasformare i valori decimali "''reali''" del Tempo Delta (ossia del numero dei Midi ''tick'', tenuto conto - ripetiamo - della ''risoluzione'' per nota da 1/4 presente nell'Header Chunk) nella loro ''rappresentazione'' esadecimale:
 
 
 
Public g[4] As Byte ''<Font Color= #006400>' la variabile " g " è un array che conterrà i valori esadecimali costituenti la rappresentazione esadecimale dei Midi ''tick''</font>
 
Public h As Integer  ''<Font Color= #006400>' la variabile " h " conterrà la quantità di byte che costituiscono la rappresentazione esadecimale dei Midi ''tick''</font>
 
 
'''Public''' Sub Button2_Click()
 
 
  Dim a, b, c, d, e As Integer
 
  Dim rob As Byte
 
 
 
  h = 0
 
 
 
  a = ...''<Font Color= #006400>' la variabile " a " raccoglie il valore reale decimale dei Midi ''tick'':</font>
 
 
  b = a Mod 128
 
  d = CInt(a / 128)
 
 
 
  g[h] = b
 
 
 
  While d > 0
 
 
 
    e = d Mod 128
 
    rob = e Or 128
 
    d = CInt(d / 128)
 
   
 
  Inc h
 
 
 
    g[h] = rob
 
 
  Wend
 
 
For a = h To 0 Step -1
 
  g[a] = Hex$(g[a], 2)
 
''<Font Color= #006400>' facciamo mostrare distintamente a scopo didattico ciascun valore della "rappresentazione" esadecimale del valore dei Midi ''tick'':</font>
 
    Print g[a]
 
Next
 
 
'''End'''
 
 
 
 
 
 
 
 
 
 
 
 
 
'''<Font Color= #FF0000>< pagina in costruzione >'''
 

Versione attuale delle 16:44, 12 gen 2022