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

Da Gambas-it.org - Wikipedia.

Va premesso che attualmente il componente gb.sdl.sound è obsoleto, è stato sostituito dal componente gb.sdl2.audio.


Ne riportiamo di seguito la pagina, che fu scritta quando il Componente era attivo, per una mera curiosità storica.




Il componente gb.sdl.sound permette di riprodurre anche i file Midi in Gambas mediante la sua Classe Music, consente di ascoltare un solo file Midi per volta.

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 in ambiente grafico

Mostriamo di seguito un codice essenziale per eseguire un file Midi in ambiente grafico:

Public Sub Button1_Click()

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

 Do
' Mostra il tempo trascorso durante l'esecuzione:
   Print CStr(Date(0, 0, 0, 0, 0, 0, Music.Pos * 1000))
' Un brevissima attesa consente di agire sugli eventuali oggetti posti sul Form:
   Wait 0.001
 Loop Until Music.State = Music.Stopped

End

Il ciclo, in questo caso, è applicato con il solo intento di mostrare il tempo trascorso durante l'esecuzione del file Midi.


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".

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".


Uso della Classe Music con un'applicazione a riga di comando

In questo caso è assolutamente necessario 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
' Mostra il tempo trascorso durante l'esecuzione:
   Print CStr(Date(0, 0, 0, 0, 0, 0, Music.Pos * 1000))
 Loop Until Music.State = Music.Stopped

End