|
|
(76 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 per nota da un quarto, 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 tick per nota da un quarto) nella loro ''rappresentazione'' esadecimale:
| |
− | | |
− | Public g[4] As Byte
| |
− | Private s[4] As String
| |
− | Public h As Integer ''<Font Color= #006400>' la variabile " h " è la quantità di byte che costituiscono la rappresentazione esadecimale</font>
| |
− | Public sUsc as string
| |
− |
| |
− | '''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 per nota da 1/4:</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
| |
− | s[a] = Str$(Hex$(g[a], 2))
| |
− | Next
| |
− |
| |
− | ''<Font Color= #006400>' la variabile contiene la "rappresentazione" esadecimale del valore dei Midi tick:</font>
| |
− | sUsc = s[3] & s[2] & s[1] & s[0]
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | | |
− | | |
− | | |
− | | |
− | '''<Font Color= #FF0000>< pagina in costruzione >'''
| |