Differenze tra le versioni di "Eseguire un file audio mediante l'oggetto MediaView del componente gb.media.form"

Da Gambas-it.org - Wikipedia.
 
(30 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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.
+
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 (e più in generale un file multimediale).
  
 
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.
 
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.
Riga 5: Riga 5:
 
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.
 
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:
+
Mostriamo un semplicissimo esempio astratto, nel quale si presupporrà che l'oggetto ''MediaView'' sia stato posto sul ''Form'' dall'IDE di Gambas:
  '''Public''' Sub Form_Open()
+
  Public Sub Button1_Click()
 
    
 
    
   With MediaView1
+
   MediaView1.URL = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>"
    .URL = "<FONT Color=gray>''/percorso/del/file/audio''</font>"  
+
   End With
+
End
 +
In questo caso mostriamo un esempio pratico, nel quale si caricherà un video dal web:
 +
Public Sub Button1_Click()
 +
 
 +
   MediaView1.URL = "https&#058;//files.edge.network/misc/avi/file_example_AVI_640_800kB.avi"
 
   
 
   
  '''End'''
+
  End
  
 +
====Gestire il volume dell'oggetto ''MediaView''====
 +
Per gestire il livello del volume dell'oggetto ''MediaView'' è possibile usare l'apposito ''Slider'' fornito dal medesimo Oggetto ''MediaView''.
 +
<BR>Si potrà, altresì, gestire il volume anche da codice utilizzando la proprietà "''.Volume''", alla quale può essere assegnato un valore di tipo ''Float'' compreso tra 0.00 e 1.00.
 +
MediaView1.Volume As Float
  
  
==Incorporare un ''Button'' nell'oggetto ''MediaView'' per consentire l'uso di una finestra di Dialogo==
+
=Apportare modifiche da codice al Controllo "MediaView"=
 
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''.
 
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''.
 +
<BR>Con il codice è possibile non solo modificare molte risorse di tali oggetti "Figli", ma anche aggiungerne altre all'interno soprattutto di quegli oggetti, ''Figli'' dell'oggetto ''MediaView'', che sono di per sé dei ''Contenitori'', rendendo così più completo e funzionale lo stesso "MediaView".
  
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''.
+
==Incorporare un ''Button'' nell'oggetto ''MediaView'' per consentire l'uso di una finestra di Dialogo==
 
+
Per poter aggiungere, dunque, ulteriori oggetti all'oggetto ''MediaView'', sarà necessario inserire tali Oggetti grafici negli Oggetti ''Contenitori'', già presenti e costitutivi del Controllo "MediaView" in quanto suoi Oggetti "Figli".
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''.
+
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 è un "HBox" e che potrà contenere adeguatamente sia dal punto di vista funzionale che estetico tale ''Button'', è a sua volta un oggetto ''Figlio'' di altro ''Contenitore''.
  
 
Mostriamo di seguito un possibile codice per realizzare quanto detto:
 
Mostriamo di seguito un possibile codice per realizzare quanto detto:
  '''Public''' Sub Form_Open()
+
  Private bt As Button
 
+
 +
 +
Public Sub Form_Open()
 +
 
   Dim ob As Object
 
   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'''
 
 
   
 
   
 +
  ob = MediaView1.Children[0]
 +
  ob = ob.Children[0]
 
   
 
   
  '''Public''' Sub Apri_Click()
+
  <FONT Color=gray>' ''Il 3° "Figlio" dell'Oggetto puntato da "ob" è un contenitore "HBox", nel quale sarà posto di seguito via codice un "Button":''</font>
 
+
   ob = ob.Children[2]
  Dim music1 As String
+
    
+
  <FONT Color=gray>' ''Pone nell'Oggetto "HBox" a destra un "Button":''</font>
  With Dialog
+
  With bt = New Button(ob) As "Apri"
    If .OpenFile() Then Return
+
<FONT Color=gray>' ''Imposta le dimensioni identiche a quelle del tastino di avvio presente a sinistra:''</font>
    MediaView1.URL = .Path
+
    .W = ob.Children[0].W
  End With
+
    .H = ob.Children[0].H
 
+
    .Border = Border.None
  '''End'''
+
    .Picture = Stock["16/open"]
 
+
  End With
 
 
 
 
==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
 
 
   
 
   
 +
End
 
   
 
   
'''Public''' Sub Form_Open()
 
 
   
 
   
  Dim ob As Object
+
Public Sub Apri_Click()
 
 
  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"
+
  With Dialog
    .X = 10
+
    If .OpenFile() Then Return
    .Y = 5
+
    MediaView1.URL = .Path
    .W = 40
 
    .H = 20
 
    .Text = "Apri..."
 
    .Border = Border.None
 
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End
 
   
 
   
 
 
'''Public''' Sub Aprire_Click()
 
 
   
 
   
  With Dialog
+
Public Sub Apri_Enter()
    If .OpenFile() Then Return
+
    MediaView1.URL = .Path
+
  bt.Border = Border.Plain
  End With
+
   
 
+
  End
  '''End'''
 
 
   
 
   
 
   
 
   
  '''Public''' Sub Aprire_Enter()
+
  Public Sub Apri_Leave()
 
   
 
   
  bt.Border = Border.Plain
+
  bt.Border = Border.None
   
+
 
  '''End'''
+
  End
 +
 
 +
 
 +
==Aggiungere un Evento o anche integrare quelli già posseduti da un Oggetto "Figlio" del Controllo ''MediaView''==
 +
I ''Widget'' presenti e visibili sull'Oggetto ''MediaView'', come ad esempio il tastino per avviare  e quello per arrestare l'esecuzione di un file audio, determinano appunto degli effetti ben determinati allo scatenarsi di Eventi appartenenti a quegli Oggetti grafici.
 +
 
 +
E' possibile via codice aggiungere altri Eventi o anche integrare gli Eventi già previsti.
 +
 
 +
===Integrare gli effetti di un Evento===
 +
Nel caso si debba integrare un Evento, già esistente, si utilizzerà la Classe ''Observer'', passandole al primo argomento la variabile dell'Oggetto grafico in questione. Non si utilizzerà il Metodo ''Object.Attach( )'', poiché in tal caso l'Evento originario del ''Widget'' verrebbe sostituito totalmente dal nuovo attribuito via codice.
 +
 
 +
Mostriamo un esempio pratico, nel quale viene introdotta sul ''Form'', fra gli altri ''Controlli'' grafici, anche una ''Label'' per segnare il tempo trascorso dall'inizio dell'esecuzione del file audio. Tale conteggio avviene in questo caso attraverso l'uso dell'Oggetto ''Timer''.
 +
<BR>Si prevede che nel momento in cui si premono i tastini di avvio e di arresto dell'esecuzione del file multimediale, già implementati nel''Controllo'' "MediaView", si avvii o si arresti anche il conteggio del tempo trascorso. E' evidente, pertanto, che all'Evento di avvio e a quello di arresto appartenenti ai due predetti "Button", deve essere <SPAN Style="text-decoration:underline">aggiunto</span> anche l'avvio o l'arresto del ''Timer'', appunto per avviare o per fermare il conteggio del tempo trascorso dall'inizio dell'esecuzione medesima. Per raggiungere tali risultati, dunque, bisognerà individuare ciascuno dei due tastini (che certamente sono dei "Button") quale Oggetto "Figlio" del ''Controllo'' "MediaView" o di altro Oggetto a sua volta figlio di "MediaView", quindi assegnare l'Oggetto "Figlio" tastino di avvio o di arresto ad un ulteriore Evento, nella cui routine effettuare l'avvio o l'arresto del ''Timer''.
 +
Private tempus As Timer
 +
     
 +
   
 +
Public Sub Form_Open()
 
   
 
   
 +
  Dim ob As Object
 +
  Dim obs As Observer
 +
 
 +
<FONT Color=gray>' ''Individua gli Oggetti "Ascendenti" (Padri) del tastino di avvio e di quello di arresto dell'esecuzione:''</font>
 +
  ob = MediaView1.Children[0]
 +
  ob = ob.Children[0]
 +
  ob = ob.Children[2]
 +
 
 +
<FONT Color=gray>' ''Vengono individuati i "Button" di avvio e di arresto dell'esecuzione del file multimediale, appartenenti al Controllo "MediaView", e sono assegnati ciascuno a un proprio specifico Gruppo di Eventi.''
 +
' ''Si usa la Classe "'''Observer'''" per non interferire (sostituendosi) con gli Eventi originali dei tastini di avvio e di arresto dell'esecuzione di un file audio in "MediaView".''</font>
 +
  obs = New '''Observer'''(ob.Children[0], False) As "<FONT Color=blue><B>Avvio</b></font>"
 +
  obs = New '''Observer'''(ob.Children[1], False) As "<FONT Color=red><B>Stop</b></font>"
 +
   
 +
  MediaView1.URL = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>"
 +
   
 +
End
 
   
 
   
'''Public''' Sub Aprire_Leave()
 
 
   
 
   
  bt.Border = Border.None
+
Public Sub <FONT Color=blue><B>Avvio</b></font>_Click()
 
    
 
    
  '''End'''
+
  With tempus = New Timer As "Tempus"
 +
    .Delay = 100
 +
    .Start
 +
  End With
 +
   
 +
  End
 
   
 
   
 
   
 
   
  '''Public''' Sub Play_Click()
+
  Public Sub Tempus_Timer()
 +
   
 +
  Label1.Text = Str(Time(0, 0, 0, MediaView1.Position * 1000))
 +
   
 +
End
 
   
 
   
  MediaView1.Stop
 
 
   
 
   
  '''End'''
+
  Public Sub <FONT Color=red><B>Stop</b></font>_Click()
 +
 
 +
  Label1.Text = Null
 +
  tempus.Stop
 +
   
 +
End

Versione attuale delle 07:33, 28 lug 2024

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 (e più in generale un file multimediale).

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 astratto, nel quale si presupporrà che l'oggetto MediaView sia stato posto sul Form dall'IDE di Gambas:

Public Sub Button1_Click()
 
 MediaView1.URL = "/percorso/del/file/audio"

End

In questo caso mostriamo un esempio pratico, nel quale si caricherà un video dal web:

Public Sub Button1_Click()
 
 MediaView1.URL = "https://files.edge.network/misc/avi/file_example_AVI_640_800kB.avi"

End

Gestire il volume dell'oggetto MediaView

Per gestire il livello del volume dell'oggetto MediaView è possibile usare l'apposito Slider fornito dal medesimo Oggetto MediaView.
Si potrà, altresì, gestire il volume anche da codice utilizzando la proprietà ".Volume", alla quale può essere assegnato un valore di tipo Float compreso tra 0.00 e 1.00.

MediaView1.Volume As Float


Apportare modifiche da codice al Controllo "MediaView"

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 risorse di tali oggetti "Figli", ma anche aggiungerne altre all'interno soprattutto di quegli oggetti, Figli dell'oggetto MediaView, che sono di per sé dei Contenitori, rendendo così più completo e funzionale lo stesso "MediaView".

Per poter aggiungere, dunque, ulteriori oggetti all'oggetto MediaView, sarà necessario inserire tali Oggetti grafici negli Oggetti Contenitori, già presenti e costitutivi del Controllo "MediaView" in quanto suoi Oggetti "Figli".

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 è un "HBox" e che potrà contenere adeguatamente sia dal punto di vista funzionale che estetico tale Button, è a sua volta un oggetto Figlio di altro Contenitore.

Mostriamo di seguito un possibile codice per realizzare quanto detto:

Private bt As Button


Public Sub Form_Open()

 Dim ob As Object

 ob = MediaView1.Children[0]
 ob = ob.Children[0]

' Il 3° "Figlio" dell'Oggetto puntato da "ob" è un contenitore "HBox", nel quale sarà posto di seguito via codice un "Button":
 ob = ob.Children[2]

' Pone nell'Oggetto "HBox" a destra un "Button":
 With bt = New Button(ob) As "Apri"
' Imposta le dimensioni identiche a quelle del tastino di avvio presente a sinistra:
   .W = ob.Children[0].W
   .H = ob.Children[0].H
   .Border = Border.None
   .Picture = Stock["16/open"]
 End With

End


Public Sub Apri_Click()

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

End


Public Sub Apri_Enter()

 bt.Border = Border.Plain
   
End


Public Sub Apri_Leave()

 bt.Border = Border.None
 
End


Aggiungere un Evento o anche integrare quelli già posseduti da un Oggetto "Figlio" del Controllo MediaView

I Widget presenti e visibili sull'Oggetto MediaView, come ad esempio il tastino per avviare e quello per arrestare l'esecuzione di un file audio, determinano appunto degli effetti ben determinati allo scatenarsi di Eventi appartenenti a quegli Oggetti grafici.

E' possibile via codice aggiungere altri Eventi o anche integrare gli Eventi già previsti.

Integrare gli effetti di un Evento

Nel caso si debba integrare un Evento, già esistente, si utilizzerà la Classe Observer, passandole al primo argomento la variabile dell'Oggetto grafico in questione. Non si utilizzerà il Metodo Object.Attach( ), poiché in tal caso l'Evento originario del Widget verrebbe sostituito totalmente dal nuovo attribuito via codice.

Mostriamo un esempio pratico, nel quale viene introdotta sul Form, fra gli altri Controlli grafici, anche una Label per segnare il tempo trascorso dall'inizio dell'esecuzione del file audio. Tale conteggio avviene in questo caso attraverso l'uso dell'Oggetto Timer.
Si prevede che nel momento in cui si premono i tastini di avvio e di arresto dell'esecuzione del file multimediale, già implementati nelControllo "MediaView", si avvii o si arresti anche il conteggio del tempo trascorso. E' evidente, pertanto, che all'Evento di avvio e a quello di arresto appartenenti ai due predetti "Button", deve essere aggiunto anche l'avvio o l'arresto del Timer, appunto per avviare o per fermare il conteggio del tempo trascorso dall'inizio dell'esecuzione medesima. Per raggiungere tali risultati, dunque, bisognerà individuare ciascuno dei due tastini (che certamente sono dei "Button") quale Oggetto "Figlio" del Controllo "MediaView" o di altro Oggetto a sua volta figlio di "MediaView", quindi assegnare l'Oggetto "Figlio" tastino di avvio o di arresto ad un ulteriore Evento, nella cui routine effettuare l'avvio o l'arresto del Timer.

Private tempus As Timer
     
    
Public Sub Form_Open()

 Dim ob As Object
 Dim obs As Observer
 
' Individua gli Oggetti "Ascendenti" (Padri) del tastino di avvio e di quello di arresto dell'esecuzione:
 ob = MediaView1.Children[0]
 ob = ob.Children[0]
 ob = ob.Children[2]
 
' Vengono individuati i "Button" di avvio e di arresto dell'esecuzione del file multimediale, appartenenti al Controllo "MediaView", e sono assegnati ciascuno a un proprio specifico Gruppo di Eventi.
' Si usa la Classe "Observer" per non interferire (sostituendosi) con gli Eventi originali dei tastini di avvio e di arresto dell'esecuzione di un file audio in "MediaView".
 obs = New Observer(ob.Children[0], False) As "Avvio"
 obs = New Observer(ob.Children[1], False) As "Stop"
    
 MediaView1.URL = "/percorso/del/file/audio"
    
End


Public Sub Avvio_Click()
 
 With tempus = New Timer As "Tempus"
   .Delay = 100
   .Start
 End With
    
End


Public Sub Tempus_Timer()
    
 Label1.Text = Str(Time(0, 0, 0, MediaView1.Position * 1000))
    
End


Public Sub Stop_Click()
 
 Label1.Text = Null
 tempus.Stop
    
End