Differenze tra le versioni di "Verificare la corrispondenza fra il numero di tracce dichiarato nel file Midi e quelle effettive"

Da Gambas-it.org - Wikipedia.
Riga 11: Riga 11:
 
   Dim ii As New Integer[]
 
   Dim ii As New Integer[]
 
    
 
    
  fl = Open "<FONT Color=gray>''/percorso/del/file.mid''</font>" For Read
+
  fl = Open "<FONT Color=gray>''/percorso/del/file.mid''</font>" For Read
 
    
 
    
  With bb = New Byte[Lof(fl)]
+
  With bb = New Byte[Lof(fl)]
    .Read(fl, 0, bb.Count)
+
    .Read(fl, 0, bb.Count)
    s = .ToString(0, bb.Count)
+
    s = .ToString(0, bb.Count)
  End With
+
  End With
 
    
 
    
  fl.Close
+
  fl.Close
 
    
 
    
  Repeat
+
  Repeat
    i = InStr(s, "MTrk", i + 1)
+
    i = InStr(s, "MTrk", i + 1)
    ii.Push(i)
+
    ii.Push(i)
  Until i = 0
+
  Until i == 0
 
    
 
    
  ii.Remove(ii.Max, 1)
+
  ii.Remove(ii.Max, 1)
 
    
 
    
  If bb[11] <> ii.Count Then
+
  If bb[11] <> ii.Count Then
    Error.Raise("Numero di Tracce dichiarato nel file Midi diverso dalle Tracce effettivamente trovate !")
+
    Error.Raise("Numero di Tracce dichiarato nel file Midi diverso dalle Tracce effettivamente trovate !")
  Endif
+
  Endif
 
    
 
    
  Print "Sono state trovate "; ii.Count; " Tracce ai byte di indice:"
+
  Print "Sono state trovate \e[1m"; ii.Count; " \e[0mTracce ai byte di indice:"
 
+
 
  For i = 0 To ii.Max
+
  For i = 0 To ii.Max
    Print String$(i, "\x20"); ii[i] - 1
+
    Print i + 1, String(i, "\x20"); ii[i] - 1
  Next
+
  Next
 
      
 
      
 
  '''End'''
 
  '''End'''

Versione delle 16:30, 21 lug 2020

La quantità delle tracce Midi, ciascuna individuata dall'identificativo MTrk, è riportata in ordine Little-Endian dai byte di indice 10 e 11 del file Midi, ossia dal 11° e dal 12° byte del blocco d'intestazione del file medesimo.


Per verificare la corrispondenza fra il numero di tracce dichiarato nel predetto blocco header del file Midi e quelle effettivamente esistenti, si potrà adottare il seguente codice:

Public Sub Main()
 
 Dim fl As File
 Dim bb As Byte[]
 Dim s As String
 Dim i As Integer
 Dim ii As New Integer[]
 
 fl = Open "/percorso/del/file.mid" For Read
  
 With bb = New Byte[Lof(fl)]
   .Read(fl, 0, bb.Count)
   s = .ToString(0, bb.Count)
 End With
  
 fl.Close
  
 Repeat
   i = InStr(s, "MTrk", i + 1)
   ii.Push(i)
 Until i == 0
  
 ii.Remove(ii.Max, 1)
  
 If bb[11] <> ii.Count Then
   Error.Raise("Numero di Tracce dichiarato nel file Midi diverso dalle Tracce effettivamente trovate !")
 Endif
  
 Print "Sono state trovate \e[1m"; ii.Count; " \e[0mTracce ai byte di indice:"
 
 For i = 0 To ii.Max
   Print i + 1, String(i, "\x20"); ii[i] - 1
 Next
   
End