Conoscere la durata di un file Midi mediante le funzioni esterne del API di Allegro

Da Gambas-it.org - Wikipedia.

Allegro è una libreria utilizzata nella programmazione dei videogiochi e multimediale. Attualmente vi sono due versioni della libreria Allegro: la numero 4 e la numero 5. La versione 4 di Allegro è la libreria classica, la cui API è compatibile con le versioni precedenti, anche se però non è ormai più svilupata. Essa è capace di gestire anche il Midi.

Per poter fruire delle risorse della versione 4 di Allegro, dovremo usare nelle applicazioni Gambas la libreria condivisa: "liballeg.so.4.4.2 ".

Mostriamo di seguito un possibile codice per conoscere semplicemente la durata di un file Midi:

Library "liballeg:4.4.2"

Private Const SYSTEM_AUTODETECT As Integer = 0

' int install_allegro(int system_id, int *errno_ptr, int (*atexit_ptr)())
' Initialises the Allegro library.
Private Extern install_allegro(system_id As Integer, errno_ptr As Pointer, atexit_ptr As Pointer)

' int load_midi_patches()
' Forces the MIDI driver to load the entire set of patches ready for use.
' Returns non-zero if an error occurred.
Private Extern load_midi_patches() As Integer

' int, get_midi_length, (MIDI *midi))
' Determines the total playing time of a midi, in seconds.
Private Extern get_midi_length(midP As Pointer) As Integer

' void destroy_midi(MIDI *midi)
' Destroys a MIDI structure when you are done with it.
Private Extern destroy_midi(midP As Pointer)

' void allegro_exit()
' Closes down the Allegro system.
Private Extern allegro_exit()


Public Sub Main()

  Dim errP, midi As Pointer
  Dim fileMidi As String = "/percorso/del/file.mid"

  install_allegro(SYSTEM_AUTODETECT, errP, 0)

  midi = load_midi(fileMidi)

  Print "File Midi:             "; File.Name(fileMidi)
  Print "Dimensione del file:   "; Stat(fileMidi).Size; " byte"
  Print "Durata del brano Midi: "; Time(0, 0, 0, get_midi_length(midi) * 1000)

' Va in chiusura:
  destroy_midi(midi)
  
  allegro_exit()

End


Riferimenti

[1] Il sito di Allegro

[2] A game programming library