Differenze tra le versioni di "Eseguire un file MIDI mediante il componente gb.sdl.sound"

Da Gambas-it.org - Wikipedia.
Riga 18: Riga 18:
  
  
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'':
+
===Indicazione del tempo trascorso di un file Midi===
'''Public''' Sub Main()
 
 
  With <FONT color=#B22222>Music</font>
 
    .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''".
 
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''".
 
Sarà sufficiente utilizzare un ''Timer'', ed andare a vedere ogni tot millisecondi il valore che restituisce il metodo "''Pos''".
Riga 45: Riga 30:
 
   End With
 
   End With
 
   
 
   
  <FONT color=#006400>' ''Facciamo partire il Timer con ritardo di ms 300''</font>
+
  <FONT color=gray>' ''Facciamo partire il Timer con ritardo di ms 300''</font>
 
   With Timer1
 
   With Timer1
 
     .Delay = 300
 
     .Delay = 300
Riga 59: Riga 44:
 
     Print .Pos
 
     Print .Pos
 
   
 
   
  <FONT color=#006400>' ''Se "Pos" ci restituisce zero allora fermiamo il Timer:''</font>
+
  <FONT color=gray>' ''Se "Pos" ci restituisce zero allora fermiamo il Timer:''</font>
 
     If .pos = 0 Then
 
     If .pos = 0 Then
 
       Timer1.Stop
 
       Timer1.Stop
  <FONT color=#006400>' ''Fermeremo anche, se inseriti, l'avanzamento di una "ProgressiveBar" o di uno "Slider":''
+
  <FONT color=gray>' ''Fermeremo anche, se inseriti, l'avanzamento di una "ProgressiveBar" o di uno "Slider":''
 
       ''ProgressiveBar1.Value = 0''</font>
 
       ''ProgressiveBar1.Value = 0''</font>
 
     Endif
 
     Endif
Riga 75: Riga 60:
 
  Music.State As Integer
 
  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''".
 
Se il valore ritornato è 1, allora la risorsa sta eseguendo il file Midi; se il valore ritornato è zero, allora il suo ''stato'' è "''fermo''".
 +
 +
 +
==Esecuzione 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 <FONT color=#B22222>Music</font>
 +
    .Load("''percorso/del/file.mid''")
 +
    .Play()
 +
  End With
 +
 +
  Do
 +
<FONT color=gray>' ''Mostra il tempo trascorso durante l'esecuzione:''</font>
 +
    Print CStr(Date(0, 0, 0, 0, 0, 0, Music.Pos * 1000))
 +
  Loop Until Music.State = Music.Stopped
 +
 +
'''End'''

Versione delle 02:59, 31 dic 2014

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


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


Esecuzione 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
' 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