Eseguire un file MIDI mediante il componente gb.sdl.sound

Da Gambas-it.org - Wikipedia.

Il componente gb.sdl.sound permette di riprodurre anche i file Midi in Gambas mediante la sua Classe Music.

E' inoltre necessario aver installato il file banco di suoni di default di Timidity: "/usr/share/sounds/sf2/TimGM6mb.sf2", oppure di FluidSynth: "/usr/share/sounds/sf2/FluidR3_GM.sf2".


Uso della Classe Music

La classe Music consente di ascoltare un solo file Midi per volta.

Esempio in ambiente grafico:

Public Sub Button1_Click()

 With Music
   .Load("percorso/del/file.mid")
   .Play()
 End With

End


Esempio con applicazione a riga di comando. In questo caso bisognerà dopo il metodo .Play() della Classe Music attivare un ciclo, che avrà termine solo quando lo status della Classe Music si troverà nella situazione rappresentata dalla costante Stopped:

Public Sub Main()

 With Music
   .Load("percorso/del/file.mid")
   .Play()
 End With

 Do
   Sleep 0.01
 Loop Until Music.State = Music.Stopped

End


Indicazione del tempo trascorso di un file Midi

La classe "Music" consente di verificare il tempo trascorso dall'inizio dell'escuzione di un file Midi mediante l'uso del metodo "Pos". Sarà sufficiente utilizzare un Timer, ed andare a vedere ogni tot millisecondi il valore che restituisce il metodo "Pos". Ciò consentirà di applicare una ProgressiveBar o uno Slider per indicare, appunto, il tempo trascorso. Quando il brano sarà terminato, Pos restituirà un valore zero; e pertanto si saprà così che il brano è terminato.

Public Sub Button1_Click()

  With Music
    .Load("/percorso/del/file.mid")
    .Play()
  End With

' Facciamo partire il Timer con ritardo di ms 300
  With Timer1
    .Delay = 300
    .Start()
  End With

End


Public Sub Timer1_Timer()
 
 With Music
   Print .Pos

' Se "Pos" ci restituisce zero allora fermiamo il Timer:
   If .pos = 0 Then
     Timer1.Stop
' Fermeremo anche, se inseriti, l'avanzamento di una "ProgressiveBar" o di uno "Slider":
     ProgressiveBar1.Value = 0
   Endif
 End With
  
End


Indicazione dello Stato

La proprietà .State della Classe Music ci informa lo stato della risorsa, restituendo un intero.

Music.State As Integer

Se il valore ritornato è 1, allora la risorsa sta eseguendo il file Midi; se il valore ritornato è zero, allora il suo stato è "fermo".