Differenze tra le versioni di "Conoscere la durata di un file Midi mediante le funzioni esterne del API di WildMidi"
Riga 11: | Riga 11: | ||
Public Struct _WM_Info | Public Struct _WM_Info | ||
copyright As Pointer | copyright As Pointer | ||
− | current_sample As | + | current_sample As Integer |
− | approx_total_samples As | + | approx_total_samples As Integer |
mixer_options As Short | mixer_options As Short | ||
+ | total_midi_time As Integer | ||
End Struct | End Struct | ||
Versione delle 11:19, 11 ago 2019
La libreria 'WildMidi consente, fra l'altro, di conoscere (anche se talvolta in modo approssimativo) la durata di un file Midi.
Per poter fruire in Gambas delle risorse dell'API di WildMidi, è necessario avere installata e richiamare la libreria dinamica condivisa: "libWildMidi.so.2.0.1"
Poiché per inizializzare l'interfaccia di WildMidi è necessario richiamare un file (freepats.cfg oppure wildmidi.cfg) di configurazione dei campioni audio degli strumenti musicali, qualora non sia presente alcuno dei due file patch nel nostro sistema, ne verrà creato uno fittizio, primo di dati al suo interno. Sarà ugualmente accettato dalla funzione esterna WildMidi_Init(), alla quale dovrà essere passato nel suo secondo argomento.
Mostriamo un semplice esempio:
Library "libWildMidi:2.0.1" Public Struct _WM_Info copyright As Pointer current_sample As Integer approx_total_samples As Integer mixer_options As Short total_midi_time As Integer End Struct ' WildMidi_Init (const char *config_file, unsigned short int rate, unsigned short int options): ' Intializes "libWildMidi" in preparation for playback. Private Extern WildMidi_Init(config_file As String, rate As Short, options As Short) As Integer ' midi *WildMidi_Open (const char *midifile) ' Open a MIDI file pointed to by midifile for processing. Private Extern WildMidi_Open(midifile As String) As Pointer ' struct _WM_Info * WildMidi_GetInfo (midi *handle) ' Get information on a midi. Private Extern WildMidi_GetInfo(handle As Pointer) As _WM_Info Public Sub Main() Dim frequenza, err As Integer Dim info As New _WM_Info Dim midi As Pointer ' Crea un file fittizio di impostazione di campioni audio degli strumenti musicali, ' per poter inizializzare comunque la libreria "libWildMidi": File.Save("/tmp/freepats.cfg", Null) frequenza = 44100 err = WildMidi_Init("/tmp/freepats.cfg", frequenza, 0) If err < 0 Then Error.Raise("Errore nell'inizializzazione della libreria 'libWildMidi' !") midi = WildMidi_Open("/percorso/del/file.mid") info = WildMidi_GetInfo(midi) Print "Durata del file Midi: ", Date(0, 0, 0, 0, 0, 0, (info.approx_total_samples / frequenza) * 1000) End