Verificare l'integrità dei dati del blocco d'intestazione di un file Midi
Vai alla navigazione
Vai alla ricerca
Il blocco d'intestazione del file Midi (Header Chunk) è costituito da 14 byte e contiene informazioni generali sul file medesimo.
Il particolare esso è composto da dai seguenti dati:
- l'identificatore del blocco medesimo;
- la lunghezza della sua parte contenente i byte delle informazioni generali;
- il tipo di file Midi;
- il numero di Tracce Midi presenti nel file;
- la risoluzione del Tempo-Delta.
Per sapere se il blocco d'intestazione è integro, ed anche per conoscere i suddetti cinque tipi di dati, possiamo utilizzare il seguente codice:
Public Sub Main()
Dim midi, s As String
Dim fl As File
Dim sh As Short
midi = "/percorso/del/file.mid"
Print "File Midi: "; midi
fl = Open midi For Read
Print "\n==== Analisi del blocco d'intestazione ====\n"
Read #fl, s, 4
If s <> "MThd" Then Error.Raise("Identificatore 'MThd' del blocco d'intestazione mancante !")
Print "Identificativo del blocco..... "; s
sh = Legge_Big_Endian(fl, 4)
If sh <> 6 Then Error.Raise("Lunghezza blocco MThd non valida !")
Print "Lunghezza del blocco MThd..... "; sh
sh = Legge_Big_Endian(fl, 2)
If (sh < 0) Or (sh > 2) Then Error.Raise("Formato di file non valido !")
Print "Formato del file.............. "; sh
sh = Legge_Big_Endian(fl, 2)
If sh == 0 Then Error.Raise("Numero di Tracce Midi non valido !")
Print "Numero di Tracce Midi......... "; Format(sh, "##")
sh = Legge_Big_Endian(fl, 2)
If sh Mod 8 <> 0 Then Error.Raise("Risoluzione del Tempo Delta non valido !")
Print "Risoluzione del Tempo Delta... "; Format(sh, "###")
Print "\nIl blocco d'intestazione 'MThd' appare essere corretto."
fl.Close
End
Private Function Legge_Big_Endian(md As File, n As Byte) As Short
Dim b As Byte
Dim c As Short
Repeat
Read #md, b
c = (c * CInt(2 ^ 8)) Or b
Dec n
Until n == 0
Return c
End