Differenze tra le versioni di "Estrarre informazioni da un file Midi con le sole funzioni di Gambas"
Da Gambas-it.org - Wikipedia.
(4 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 6: | Riga 6: | ||
* Risoluzione PPQN; | * Risoluzione PPQN; | ||
* Tempo metronomico iniziale. | * Tempo metronomico iniziale. | ||
− | |||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim file_midi As String | + | Dim file_midi As String |
Dim fl As File | Dim fl As File | ||
Dim bb As Byte[] | Dim bb As Byte[] | ||
Dim i As Integer | Dim i As Integer | ||
− | |||
Dim t As Short | Dim t As Short | ||
+ | file_midi = "<FONT color=gray>''/percorso/del/file.mid''</font>" | ||
− | + | fl = Open file_midi For Read | |
<FONT color=gray>' ''Mostra il nome del file Midi:''</font> | <FONT color=gray>' ''Mostra il nome del file Midi:''</font> | ||
− | + | Print "Nome del file Midi: \e[31m"; File.Name(file_midi) | |
<FONT color=gray>' ''Verifica la dimensione del file Midi:''</font> | <FONT color=gray>' ''Verifica la dimensione del file Midi:''</font> | ||
− | + | Print "\e[0mDimensione del file Midi: "; Lof(fl); " byte" | |
<FONT color=gray>' ''Legge l'intero file Midi e carica i dati nella variabile "bb":''</font> | <FONT color=gray>' ''Legge l'intero file Midi e carica i dati nella variabile "bb":''</font> | ||
− | + | With bb = New Byte[Lof(fl)] | |
− | + | .Read(fl) | |
− | + | End With | |
− | + | ||
<FONT color=gray>' ''Verifica che il file caricato sia un file Midi standard:''</font> | <FONT color=gray>' ''Verifica che il file caricato sia un file Midi standard:''</font> | ||
− | + | If bb.ToString(0, 4) <> "MThd" Then Error.Raise("Il file caricato non è un file Midi !") | |
<FONT color=gray>' ''Verifica il tipo di file Midi:''</font> | <FONT color=gray>' ''Verifica il tipo di file Midi:''</font> | ||
− | + | Print "Tipo di file Midi: "; CStr(bb[9]) | |
<FONT color=gray>' ''Verifica la quantità di tracce presenti nel File Midi:''</font> | <FONT color=gray>' ''Verifica la quantità di tracce presenti nel File Midi:''</font> | ||
− | + | Print "Numero tracce presenti: "; CStr(bb[11]) | |
<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: "; legge_Byte(fl, 12, 2) | |
− | + | ||
− | + | <FONT color=gray>' ''Verifica il Tempo metronomico iniziale del file Midi:''</font> | |
− | + | i = InStr(bb.ToString(0, Lof(fl)), Chr(&FF) & Chr(&51) & Chr(&03)) | |
− | + | If i > 0 Then | |
− | + | t = 60000000 \ legge_Byte(fl, i + 2, 3) | |
+ | Else | ||
+ | t = 120 | ||
+ | Endif | ||
+ | Print "Tempo metronomico: "; t; " bpm" | ||
+ | |||
+ | fl.Close | ||
+ | |||
+ | '''End''' | ||
− | + | '''Private''' Function legge_Byte(f As File, s As Short, q As Byte) As Integer | |
− | + | ||
− | + | Dim ris As Integer | |
− | + | Dim b As Byte | |
− | + | ||
− | + | Seek #f, s | |
− | + | ||
− | + | Repeat | |
+ | Read #f, b | ||
+ | ris = (ris * CInt(2 ^ 8)) Or b | ||
+ | Dec q | ||
+ | Until q == 0 | ||
+ | |||
+ | Return ris | ||
'''End''' | '''End''' |
Versione attuale delle 08:38, 20 set 2022
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 Dim fl As File Dim bb As Byte[] Dim i As Integer Dim t As Short file_midi = "/percorso/del/file.mid" fl = Open file_midi For Read ' Mostra il nome del file Midi: Print "Nome del file Midi: \e[31m"; File.Name(file_midi) ' Verifica la dimensione del file Midi: Print "\e[0mDimensione 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: Print "Risoluzione PPQN: "; legge_Byte(fl, 12, 2) ' 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 \ legge_Byte(fl, i + 2, 3) Else t = 120 Endif Print "Tempo metronomico: "; t; " bpm" fl.Close End Private Function legge_Byte(f As File, s As Short, q As Byte) As Integer Dim ris As Integer Dim b As Byte Seek #f, s Repeat Read #f, b ris = (ris * CInt(2 ^ 8)) Or b Dec q Until q == 0 Return ris End