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 | |
− | + | 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''' | '''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