Eseguire un file audio mediante l'oggetto MediaView del componente gb.media.form

Da Gambas-it.org - Wikipedia.

Il componente gb.media.form (da attivare congiuntamente con il componente gb.media) fornisce l'oggetto MediaView che consente di eseguire agevolmente un file audio.

Come gli altri oggetti esso può essere posto sul Form dalla scheda Media nell'area dedicata agli oggetti nell'IDE di Gambas, oppure creato da codice. Esso sarà visibile sul Form alle coordinate e con le dimensioni prescelte.

Il file audio potrà essere caricato mediante la proprietà .URL dell'oggetto MediaView, e successivamente essere eseguito, posto in pausa e fermato agendo manualmente con il puntatore del mouse sui tasti virtuali che riproducono quelli consueti di un riproduttore audio.

Mostriamo un semplicissimo esempio pratico, nel quale si presupporrà che l'oggetto MediaView sia stato posto sul Form dall'IDE di Gambas:

Public Sub Form_Open()
 
 With MediaView1
   .URL = "/percorso/del/file/audio"    
 End With

End


L'oggetto MediaView è composto, in vero, di vari oggetti, fra i quali: DrawingArea, Panel, Hbox, e qualche altro. Questi oggetti, in qualità di Figli dell'oggetto MediaView, contribuiscono a fornire le caratteristiche funzionali ed estetiche del loro oggetto Padre.

Con il codice è possibile non solo modificare molte proprietà di tali oggetti, ma anche di aggiungerne altri all'interno soprattutto di quegli oggetti, Figli dell'oggetto MediaView, che sono di per sé degli ogetti Contenitori. Quindi è possibile inserire uno o più oggetti negli oggetti Contenitori che sono a loro vollta Figli dell'oggetto MediaView.

Per poter aggiungere ulteriori oggetti all'oggetto MediaView, servendosi in vero - come abbiamo detto - dei suoi Figli Contenitori, sarà necessario individuare tali oggetti Contenitori.

In particolare, ad esempio, sarà possibile aggiungere un Button che consenta così di aprire una finestra di Dialogo, della Classe Dialog, per scegliere i file audio da far eseguire all'oggetto MediaView. In questo caso l'oggetto Contenitore, che potrà contenere adeguatamente sia dal punto di vista funzionale che estetico tale Button è a sua volta un oggetto Figlio di altro Contenitore a sua volta un oggetto Figlio di altro Contenitore.

Mostriamo di seguito un possibile codice per realizzare quanto detto:

Public Sub Form_Open()
 
 Dim ob As Object
 Dim bt As Button
  
  ob = MediaView1.Children[0]
  ob = ob.Children[0]
  ob = ob.Children[2]
  
  With bt = New Button(ob.Children[3]) As "Apri"
    .X = 10
    .Y = 5
    .W = 40
    .H = 20
    .Text = "Apri..."
  End With
  
End


Public Sub Apri_Click()
 
 Dim music1 As String
 
  With Dialog
    If .OpenFile() Then Return
    MediaView1.URL = .Path
  End With
  
End


Consentire la ripetizione dell'esecuzione del medesimo file audio

Attualmente, quando l'esecuzione di un file audio termina, non è possibile, premendo sull'apposito tasto di avvio, la ri-esecuzione del medesimo brano; si dovrà invece prima premere sul tasto di arresto e solo dopo si potrà ripetere l'esecuzione del file audio appena ascoltato. Ciò avviene, poiché la procedura di esecuzione del file non viene terminata con la fine del file audio.

Si potrà ovviare a questo problema, utilizzando il seguente codice, con il quale verrà imposto al evento _Click() del tasto di avvio il metodo .Stop() per l'arresto forzato della procedura di esecuzione del file audio.

Private bt As Button
Private plobs As Observer


Public Sub Form_Open()

 Dim ob As Object
 
  ob = MediaView1.Children[0]
  ob = ob.Children[0]
  ob = ob.Children[2]
  plobs = New Observer(ob.Children[0]) As "Play"

  With bt = New Button(ob.Children[3]) As "Aprire"
    .X = 10
    .Y = 5
    .W = 40
    .H = 20
    .Text = "Apri..."
    .Border = Border.None
 End With

End

 
Public Sub Aprire_Click()

  MediaView1.Stop

  With Dialog
    If .OpenFile() Then Return
    MediaView1.URL = .Path
  End With
 
End


Public Sub Aprire_Enter()

  bt.Border = Border.Plain
   
End


Public Sub Aprire_Leave()

  bt.Border = Border.None
 
End


Public Sub Play_Click()

  MediaView1.Stop

End