Differenze tra le versioni di "Estrarre informazioni da un file Midi con le sole funzioni di Gambas"
Da Gambas-it.org - Wikipedia.
Riga 13: | Riga 13: | ||
Dim bb As Byte[] | Dim bb As Byte[] | ||
Dim i As Integer | Dim i As Integer | ||
+ | Dim j, b As Byte | ||
Dim t As Short | Dim t As Short | ||
Riga 39: | Riga 40: | ||
<FONT color=gray>' ''Verifica la risoluzione PPQN del file Midi:''</font> | <FONT color=gray>' ''Verifica la risoluzione PPQN del file Midi:''</font> | ||
− | Print "Risoluzione PPQN: "; | + | Seek #fl, 12 |
+ | For j = 1 To 2 | ||
+ | Read #fl, b | ||
+ | t = (t * CInt(2 ^ 8)) Or b | ||
+ | Next | ||
+ | Print "Risoluzione PPQN: "; t | ||
<FONT color=gray>' ''Verifica il Tempo metronomico iniziale del file Midi:''</font> | <FONT color=gray>' ''Verifica il Tempo metronomico iniziale del file Midi:''</font> |
Versione delle 13:43, 18 ago 2014
Mostreremo un possibile codice per ottenere da un file Midi le seguenti informazioni:
- Nome;
- Dimensione;
- Tipo;
- Quantità di tracce presenti;
- Risoluzione PPQN;
- Tempo metronomico iniziale.
Public Sub Main() Dim file_midi As String = "/percorso/del/file.mid" Dim fl As File Dim bb As Byte[] Dim i As Integer Dim j, b As Byte Dim t As Short fl = Open file_midi For Read ' Mostra il nome del file Midi: Print "Nome del file Midi: "; File.Name(file_midi) ' Verifica la dimensione del file Midi: Print "Dimensione del file Midi: "; Lof(fl); " byte" ' Legge l'intero file Midi e carica i dati nella variabile "bb": With bb = New Byte[Lof(fl)] .Read(fl) End With ' Verifica che il file caricato sia un file Midi standard: If bb.ToString(0, 4) <> "MThd" Then Error.Raise("Il file caricato non è un file Midi !") ' Verifica il tipo di file Midi: Print "Tipo di file Midi: "; CStr(bb[9]) ' Verifica la quantità di tracce presenti nel File Midi: Print "Numero tracce presenti: "; CStr(bb[11]) ' Verifica la risoluzione PPQN del file Midi: Seek #fl, 12 For j = 1 To 2 Read #fl, b t = (t * CInt(2 ^ 8)) Or b Next Print "Risoluzione PPQN: "; t ' Verifica il Tempo metronomico iniziale del file Midi: i = InStr(bb.ToString(0, Lof(fl)), Chr(&FF) & Chr(&51) & Chr(&03)) If i > 0 Then t = 60000000 \ Val("&" & Hex(bb[i + 2]) & Hex(bb[i + 3]) & Hex(bb[i + 4])) Else t = 120 Endif Print "Tempo metronomico: "; t; " bpm" End