Differenze tra le versioni di "Eseguire i file audio mediante la Classe ''MediaPlayer'' del componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
  
 
Gli elementi essenziali per eseguire un file audio con la Classe ''MediaPlayer'' sono:
 
Gli elementi essenziali per eseguire un file audio con la Classe ''MediaPlayer'' sono:
* la Proprietà ".Url" per caricare il file (se il file è memorizzato su dispositivo di memoria, allora il suo percorso andrà passato mediante il Metodo ".Url" della Classe statica "Media"; se il file è eseguito da un indirizzo web, allora sarà passato direttamente l'indirizzo web);
+
* la Proprietà ".URL" per caricare il file (se il file è memorizzato su dispositivo di memoria, allora il suo percorso andrà passato mediante il Metodo ".URL()" della Classe statica "Media"; se il file è eseguito da un indirizzo web, allora l'indirizzo web sarà passato direttamente alla Proprietà ".URL");
 
* il Metodo ".Play()" per avviare l'esecuzione del file audio;
 
* il Metodo ".Play()" per avviare l'esecuzione del file audio;
 
* la Proprietà ".Duration" per far eseguire il file audio per l'intera sua durata;
 
* la Proprietà ".Duration" per far eseguire il file audio per l'intera sua durata;
Riga 50: Riga 50:
 
===Uso in un'applicazione grafica===
 
===Uso in un'applicazione grafica===
 
Vediamo un semplice codice, con il quale sarà possibile ascoltare, porre in pausa e terminare un file audio in un'applicazione grafica.
 
Vediamo un semplice codice, con il quale sarà possibile ascoltare, porre in pausa e terminare un file audio in un'applicazione grafica.
<BR>Porremo sul ''Form'' del progetto:
+
  Private mp As <FONT color=#B22222>MediaPlayer</font>
* un ''ToggleButton'' per avviare ed arrestare l'esecuzione del file audio;
 
* un ''ToggleButton'' per porre in pausa l'esecuzione del file audio;
 
* un ''Timer'' che ci consentirà di calcolare il tempo trascorso;
 
  Private mp As New <FONT color=#B22222>MediaPlayer</font>
 
 
   
 
   
 
   
 
   
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
   ToggleButton2.Enabled = False
+
   With mp = New MediaPlayer As "MediaPlayer1"
 
 
  <FONT color=gray>' ''Carica un file audio:''</font>
 
  <FONT color=gray>' ''Carica un file audio:''</font>
  mp.URL = Media.URL("<FONT color=darkgreen>''/percorso/del/file/audio''</font>")
+
    .URL = Media.URL("<FONT color=darkgreen>''/percorso/del/file/audio''</font>")
 
End
 
 
 
Public Sub ToggleButton1_Click()
 
 
  If ToggleButton1.Value Then
 
    ToggleButton2.Enabled = True
 
    Esegue()
 
  Else
 
<FONT Color=gray>' ''Chiama la funzione per arrestare l'esecuzione del file audio:''</font>
 
    Arresta()
 
    ToggleButton2.Value = False
 
    ToggleButton2.Enabled = False
 
  Endif
 
 
End
 
 
 
Public Sub Timer1_Timer()
 
 
<FONT Color=gray>' ''Mostra in console la durata dell'audio e il tempo trascorso:''</font>
 
  Write "\rDurata: " & Time(0, 0, 0, mp.Duration * 1000) &
 
        "  -  Tempo trascorso: " & Time(0, 0, 0, mp.Position * 1000)
 
 
<FONT Color=gray>' ''Se la posizione corrente è uguale o maggiore della durata complessiva del file audio, allora arresta l'esecuzione del file audio:''</font>
 
  If mp.Position >= mp.Duration Then Arresta()
 
 
End
 
 
 
Public Sub Esegue()
 
 
<FONT Color=gray>' ''Avvia l'ascolto del file audio:''</font>
 
  mp.Play
 
  While mp.Duration < 0.1
 
    Wait 0.01
 
  Wend
 
  With Timer1
 
<FONT Color=gray>' ''Il "Timer" si attiva ogni 70 millesimi di secondo:''</font>
 
    .Delay = 70
 
    .Start
 
 
   End With
 
   End With
 
   
 
   
End
+
   ToggleButton1.Text = "Avvia"
+
   ToggleButton2.Enabled = False
 
Public Sub Arresta()
 
 
<FONT Color=gray>' ''Arresta l'ascolto del file audio:''</font>
 
  mp.Stop
 
  mp.Close
 
  Timer1.Stop
 
   ToggleButton1.Value = False
 
 
End
 
 
 
Public Sub ToggleButton2_Click()
 
 
<FONT Color=gray>' ''Mette in "pausa" l'ascolto del file audio.''
 
' ''(Per continuare l'ascolto del file, si dovrà nuovamente attivare la Proprietà ".Play"):''</font>
 
   If ToggleButton2.Value Then
 
    mp.Pause
 
  Else
 
    If ToggleButton1.Value Then Esegue()
 
  Endif
 
 
End
 
In quest'altro esempio, simile al precedente, verrà utilizzato un ciclo al posto del ''Timer''.
 
<BR>Si porrà anche un Controllo ''Slider'' per poter modificare il volume.
 
Private mp As New MediaPlayer
 
 
 
Public Sub Form_Open()
 
 
   
 
   
 
   With Slider1
 
   With Slider1
Riga 144: Riga 68:
 
     .Value = 50
 
     .Value = 50
 
   End With
 
   End With
 
  ToggleButton2.Enabled = False
 
 
<FONT color=gray>' ''Carica un file audio:''</font>
 
  mp.URL = Media.URL("<FONT color=darkgreen>''/percorso/del/file/audio''</font>")
 
 
   
 
   
 
  End
 
  End
Riga 156: Riga 75:
 
   
 
   
 
   If ToggleButton1.Value Then  
 
   If ToggleButton1.Value Then  
 +
    ToggleButton1.Text = "Stop"
 
     ToggleButton2.Enabled = True
 
     ToggleButton2.Enabled = True
 +
    ToggleButton2.Text = "Pausa"
 
     Esegue()
 
     Esegue()
 
   Else  
 
   Else  
 
  <FONT color=gray>' ''Chiama la funzione per arrestare l'esecuzione del file audio:''</font>
 
  <FONT color=gray>' ''Chiama la funzione per arrestare l'esecuzione del file audio:''</font>
    Arresta()
 
 
     ToggleButton2.Value = False
 
     ToggleButton2.Value = False
 
     ToggleButton2.Enabled = False
 
     ToggleButton2.Enabled = False
 +
    Arresta()
 
   Endif  
 
   Endif  
 
   
 
   
Riga 172: Riga 93:
 
  <FONT color=gray>' ''Avvia l'ascolto del file audio:''</font>
 
  <FONT color=gray>' ''Avvia l'ascolto del file audio:''</font>
 
   mp.Play
 
   mp.Play
  While mp.Duration < 0.1
 
    Wait 0.01
 
  Wend
 
  Repeat
 
<FONT color=gray>' ''Una brevissima pausa consente di agire sugli eventuali "Controlli" posti sul Form:''</font>
 
    Wait 0.01
 
    Write "\rDurata: " & Time(0, 0, 0, mp.Duration * 1000) &
 
          "  -  Tempo trascorso: " & Time(0, 0, 0, mp.Position * 1000)
 
  Until (mp.Position >= mp.Duration)
 
 
  Arresta()
 
 
   
 
   
 
  End
 
  End
Riga 192: Riga 102:
 
   mp.Stop
 
   mp.Stop
 
   mp.Close
 
   mp.Close
   Timer1.Stop
+
   ToggleButton1.Text = "Avvia"
 +
  ToggleButton2.Text = Null
 
   ToggleButton1.Value = False
 
   ToggleButton1.Value = False
 
   
 
   
Riga 204: Riga 115:
 
   If ToggleButton2.Value Then  
 
   If ToggleButton2.Value Then  
 
     mp.Pause
 
     mp.Pause
 +
    ToggleButton2.Text = "Continua"
 
   Else  
 
   Else  
     If ToggleButton1.Value Then Esegue()
+
     If ToggleButton1.Value Then  
 +
      ToggleButton2.Text = "Pausa"
 +
      Esegue()
 +
    Endif
 
   Endif
 
   Endif
 
   
 
   
Riga 216: Riga 131:
 
   
 
   
 
  End
 
  End
 
 
===Eseguire un file dal web===
 
Per eseguire un file audio dal web, l'indirizzo sarà assegnato senza l'uso del Metodo "Media.URL()" (necessario, invece, per i file contenuti in una memoria solida.
 
 
Mostriamo di seguito un esempio pratico in ambiente grafico:
 
Private mp As New MediaPlayer
 
 
   
 
   
 
   
 
   
  Public Sub ToggleButton1_Click()
+
  Public Sub MediaPlayer1_Position()
 
  If ToggleButton1.Value Then
 
    TextArea1.Clear
 
    With mp = New MediaPlayer As "MediaPlayer1"
 
<FONT color=gray>' '''''Nel caso di un indirizzo web, non si deve usare il Metodo "Media.URL():'''''</font>
 
      .URL = "https&#058;//samples-files.com/samples/Audio/mp3/sample-file-1.mp3"
 
      .Play
 
    End With
 
  Else
 
    mp.Stop
 
    mp.Close
 
  Endif
 
 
End
 
 
   
 
   
 +
  Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 
   
 
   
Public Sub MediaPlayer1_Position()
 
 
 
  Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 
 
 
 
  End
 
  End
 
   
 
   
Riga 252: Riga 143:
 
   
 
   
 
   ToggleButton1.Value = False
 
   ToggleButton1.Value = False
 
+
 
 
  End
 
  End
 +
 +
 +
===Eseguire un file dal web===
 +
Per eseguire un file audio dal web, l'indirizzo sarà assegnato <SPAN Style="text-decoration:underline">senza</span> l'uso del Metodo "Media.URL()".
 +
<BR>Pertanto, riprendendo il codice sopra mostrato, la riga, ove sarà assegnato l'indirizzo web del file audio alla Proprietà ".URL" della Classe ''MediaPlayer'', sarà la seguente:
 +
.URL = "<FONT Color=darkgreen>''indirizzo/web/del/file/audio''</font>"
 +
Esempio pratico:
 +
.URL = "https&#058;//samples-files.com/samples/Audio/mp3/sample-file-1.mp3"
  
 
==La Proprietà ".Duration"==
 
==La Proprietà ".Duration"==

Versione delle 18:26, 8 nov 2023

La classe MediaPlayer del componente gb.media consente di gestire uno o più file audio anche contemporaneamente.

Gli elementi essenziali per eseguire un file audio con la Classe MediaPlayer sono:

  • la Proprietà ".URL" per caricare il file (se il file è memorizzato su dispositivo di memoria, allora il suo percorso andrà passato mediante il Metodo ".URL()" della Classe statica "Media"; se il file è eseguito da un indirizzo web, allora l'indirizzo web sarà passato direttamente alla Proprietà ".URL");
  • il Metodo ".Play()" per avviare l'esecuzione del file audio;
  • la Proprietà ".Duration" per far eseguire il file audio per l'intera sua durata;
  • il Metodo ".Close()" per chiudere il mediaplayer.

Uso in un'applicazione a riga di comando

Vediamo ora un semplice esempio di uso della Classe MediaPlayer in un'applicazione a riga di comando:

Private bo As Boolean


Public Sub Main()

 Dim mp As MediaPlayer
  
 With mp = New MediaPlayer
   .URL = Media.URL("/percorso/del/file/audio")
   .Play()
   While mp.Duration < 0.1
     Wait 0.01
   Wend
   Print "Durata: \e[34m"; Time(0, 0, 0, .Duration * 1000)
   Repeat
' Mostra in console la posizione, espressa in secondi, all'interno dei dati processati:
     Write "\r\e[0mTempo trascorso: \e[1m\e[31m" & Str(Time(0, 0, 0, .Position * 1000))
     Wait 0.1
   Until (mp.Position >= mp.Duration) Or bo
   .Stop
   .Close
 End With

' Avendo utilizzato l'Evento "Application_Read()", è necessario invocare l'istruzione "Quit" per terminare il programma:
 Quit

End


Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera, si arresta il programma

 bo = True
 
End

Qualora il valore della Proprietà ".Duration" venga restituito in considerevole ritardo, il processo supererà il ciclo "Repeat...Until" del codice, qui appena mostrato. Per ovviare a questo problema, si potrà porre - immediatamente dopo il Metodo "mp.Play() - un ciclo preventivo che consenta di attendere che il valore, restituito dalla Proprietà ".Duration", sia superiore a 0.0 (zero):

While mp.Duration < 0.1
  Wait 0.01
Wend

Uso in un'applicazione grafica

Vediamo un semplice codice, con il quale sarà possibile ascoltare, porre in pausa e terminare un file audio in un'applicazione grafica.

Private mp As MediaPlayer


Public Sub Form_Open()

 With mp = New MediaPlayer As "MediaPlayer1"
' Carica un file audio:
   .URL = Media.URL("/percorso/del/file/audio")
 End With

 ToggleButton1.Text = "Avvia"
 ToggleButton2.Enabled = False

 With Slider1
   .MinValue = 0
   .MaxValue = 100
   .Value = 50
 End With

End


Public Sub ToggleButton1_Click()

 If ToggleButton1.Value Then 
   ToggleButton1.Text = "Stop"
   ToggleButton2.Enabled = True
   ToggleButton2.Text = "Pausa"
   Esegue()
 Else 
' Chiama la funzione per arrestare l'esecuzione del file audio:
   ToggleButton2.Value = False
   ToggleButton2.Enabled = False
   Arresta()
 Endif 

End


Public Sub Esegue()

' Avvia l'ascolto del file audio:
 mp.Play

End


Public Sub Arresta()

' Arresta l'ascolto del file audio:
 mp.Stop
 mp.Close
 ToggleButton1.Text = "Avvia"
 ToggleButton2.Text = Null
 ToggleButton1.Value = False

End


Public Sub ToggleButton2_Click()

' Mette in "pausa" l'ascolto del file audio.
' (Per continuare l'ascolto del file, si dovrà nuovamente attivare la Proprietà ".Play"):
 If ToggleButton2.Value Then 
   mp.Pause
   ToggleButton2.Text = "Continua"
 Else 
   If ToggleButton1.Value Then 
     ToggleButton2.Text = "Pausa"
     Esegue()
   Endif
 Endif

End


Public Sub Slider1_Change()

 mp.Audio.Volume = Slider1.Value / 100

End


Public Sub MediaPlayer1_Position()

 Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))

End


Public Sub MediaPlayer1_End()

 ToggleButton1.Value = False
 
End


Eseguire un file dal web

Per eseguire un file audio dal web, l'indirizzo sarà assegnato senza l'uso del Metodo "Media.URL()".
Pertanto, riprendendo il codice sopra mostrato, la riga, ove sarà assegnato l'indirizzo web del file audio alla Proprietà ".URL" della Classe MediaPlayer, sarà la seguente:

.URL = "indirizzo/web/del/file/audio"

Esempio pratico:

.URL = "https://samples-files.com/samples/Audio/mp3/sample-file-1.mp3"

La Proprietà ".Duration"

La Proprietà ".Duration" restituisce un valore di tipo Float che rappresenta la durata del brano musicale espresso in secondi.
Poiché detta proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione del Metodo ".Play".
Va rilevato che per taluni file audio di formato MP3 MediapLayer ha difficoltà a restituire la durata del file e la Proprietà ".Duration" ritornerà il valore 0.
Di seguito mostriamo un esempio di uso della Proprietà ".Duration":

Public Sub Main()

 Dim mp As MediaPlayer

 With mp = New MediaPlayer
   .URL = Media.URL("/percorso/del/file/audio")
   .Play
   While mp.Duration < 0.1
     Wait 0.01
   Wend
   Print "Durata: \e[34m"; Time(0, 0, 0, .Duration * 1000)
   Repeat 
     Wait 0.01
     Write "\r       \e[31m" & Str(Time(0, 0, 0, .pos * 1000))
   Until .Pos >= .Duration
   .Stop
   .Close
 End With

End

oppure più semplicemente:

   ......
   .Play
   While mp.Duration < 0.1
     Wait 0.01
   Wend
   Print "Durata: \e[34m"; Time(0, 0, 0, .Duration * 1000)
   Wait .Duration
   .Stop
   .Close
 End With

In entrambe le soluzioni, qualora il valore della Proprietà ".Duration" venga restituito in considerevole ritardo, il processo supererà il ciclo "Repeat...Until" del codice, qui appena mostrato. Per ovviare a questo problema, si potrà porre - immediatamente dopo il Metodo "mp.Play() - un ciclo preventio che consenta di attendere che il valore, restituito dalla Proprietà ".Duration", sia superiore a 0.0 (zero):

While mp.Duration < 0.1
  Wait 0.01
Wend

La Proprietà ".Position"

La Proprietà ".Position" restituisce un valore di tipo Float che rappresenta la posizione, espressa in secondi all'interno dei dati processati.
Imposta, altresì, la posizione di esecuzione del brano. Pertanto, essa consente di spostare il processo dei dati, e dunque l'esecuzione del brano, ad un particolare punto temporale.

Modificare il Volume

Per conoscere o modificare il livello del volume d'ascolto si dovrà utilizzare la Proprietà ".Volume" della Proprietà ".Audio" della Classe MediaPlayer. Più in particolare la Proprietà ".Volume" ritorna od imposta il volume del corrente flusso audio.

Nel primo caso restituisce un valore di tipo Float che rappresenta il volume corrente:

valore_di_tipo_Float = mp.Audio.Volume

nel secondo caso il volume è impostato mediante un valore di tipo Float, il cui ambito di valori impostabili va da 0.00 a 10.00:

mp.Audio.Volume = valore_di_tipo_Float

Annullare l'audio immediatamente

Per annullare l'audio immediatamente, senza modificare i valori del volume, si ha a disposizione la Proprietà ".Mute" della Proprietà ".Audio" della Classe MediaPlayer. Alla Proprietà ".Mute" dovrà essere assegnato il valore booleano True.

mp.Audio.Mute = True

L'evento _AboutToFinish()

L'evento "_AboutToFinish()" si scatena circa un secondo prima della fine della durata del file audio che si sta eseguendo.

L'evento _End()

L'evento "_End()" si scatena quando l'esecuzione del file audio è terminata.
Esempio:

Private bo As Boolean


Public Sub Button1_Click()

 Dim mp As MediaPlayer

 With mp = New MediaPlayer As "MediaPlayer1"
   .URL = Media.URL("/percorso/del/file/audio")
   .Play
   While mp.Duration < 0.1
     Wait 0.01
   Wend
   Print "\rDurata dell'audio: "; Str(Time(0, 0, 0, .Duration * 1000))
   Repeat
     Write "\r\e[0mTempo trascorso:   \e[31m" & Str(Time(0, 0, 0, .Position * 1000))
     Wait 0.1
   Until bo
   .Stop
   .Close
 End With

 Write "\n\e[0mEsecuzione terminata !"

End


Public Sub MediaPlayer1_End()

 bo = True

End

Estrarre i Tag da un file audio

Per estrarre i Tag da un file audio si utilizzerà l'evento "_Tag()" della Classe MediaPlayer.
L'evento avrà come parametro una variabile del tipo MediaTagList, che conterrà la lista dei Tag trovati.

Private mp As MediaPlayer


Public Sub ToggleButton1_Click()

 If ToggleButton1.Value Then
   TextArea1.Clear
   With mp = New MediaPlayer As "MediaPlayer1"
' Nel caso di un indirizzo web, non si deve usare il Metodo "Media.URL():
     .URL = Media.URL("/percorso/del/file/audio")
     .Play
   End With 
 Else
   mp.Stop
   mp.Close
 Endif

End


' Se ci sono "Tag" nel file audio, verrà sollevato il seguente evento:
Public Sub MediaPlayer1_Tag(tagLista As MediaTagList)
 
 Dim tag As String
  
 TextArea1.Clear

 For Each tag In tagLista.Tags
' Vediamo nella "TextArea" i Tag trovati del file audio:
   TextArea1.Text &= tag & " -> " & tagLista[tag] & gb.NewLine
   TextArea1.Pos = 1
 Next

End


Public Sub MediaPlayer1_Position()
 
 Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 
End


Public Sub MediaPlayer1_End()

 mp.Close
 ToggleButton1.Value = False
  
End

V'è da evidenziare che l'evento "_Tag()" sarà sollevato solo con l'attivazione del Metodo ".Play".

Mostrare i Tag di un file audio presente nel web

Mostriamo un caso pratico:

Private mp As MediaPlayer


Public Sub ToggleButton1_Click()

 If ToggleButton1.Value Then
   TextArea1.Clear
   With mp = New MediaPlayer As "MediaPlayer1"
' Nel caso di un indirizzo web, non si deve usare il Metodo "Media.URL():
     .URL = "https://samples-files.com/samples/Audio/mp3/sample-file-1.mp3"
     .Play
   End With 
 Else
   mp.Stop
   mp.Close
 Endif

End


Public Sub MediaPlayer1_Tag(tagList As MediaTagList)

 Dim tag As String

 For Each tag In tagList.Tags
   TextArea1.Text &= tag & " -> " & tagList[tag] & gb.NewLine
   TextArea1.Pos = 1
   Wait 0.001
 Next

End


Public Sub MediaPlayer1_Position()
 
 Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000))
 
End


Public Sub MediaPlayer1_End()

 ToggleButton1.Value = False
  
End

Gli effetti video con i plug-in

E' possibile ottenere simpatici effetti video utilizzando i plug-in resi disposibili da GStreamer.
Gli effetti video disponibili sono i seguenti:

"goom", "monoscope", "spacescope", "spectrascope", "synaescope", "wavescope"

In tal caso si farà uso anche della Classe MediaControl che è serve per gestire appositamente i plug-in di GStreamer.

Mostreremo di seguito il codice esenziale per l'utilizzo degli effetti video con i plug-In (si inserirà anche una DrawingArea sul Form):

Private mp As New MediaPlayer


Public Sub Form_Open()
  
 Dim da As DrawingArea
  
 With da = New DrawingArea(Me)
   .X = 10
   .Y = 10
   .W = 300
   .H = 300
   .Background = Color.Black
 End With
  
 mp.URL = Media.URL("/percorso/del/file/audio")
  
 AvviaPlugin(da)
  
End


Private Procedure AvviaPlugin(drar As DrawingArea)

 Dim uscitaVideo, plugVis As MediaControl
 Dim b As Byte
 Dim tipoPlug As String[] = ["goom", "monoscope", "spacescope",
                             "spectrascope", "synaescope", "wavescope"]
 Dim arrplugin As MediaControl[]
  
' Istanzia il controllo di uscita video da usare. In questo caso sarà "ximagesink", un "videosink" basato sullo standard X, e che è esso stesso un plug-in:
 uscitaVideo = New MediaControl(mp, "ximagesink")
  
' Si dice al MediaControl di mostrare il proprio output (gli effetti video) in uno specifico controllo GUI, solitamente una DrawingArea:
 mp.SetWindow(drar)
  
' Imposta il controllo di uscita video da usare:
 mp.Video.Output = uscitaVideo
  
' Un array di variabili di tipo "MediaControl", ossia di vari PlugIn disponibili:
 arrplugin = New MediaControl[]
 For b = 0 To 5
   plugVis = New MediaControl(mp, tipoPlug[b])
   arrplugin.Push(plugVis)
 Next
 
' Imposta il plug-in da utilizzare (ad esempio il 6° fra quelli contenuti dal vettore "arrplugin"):
 mp.Video.Visualisation = arrplugin[5]
     
End


Public Sub Form_Activate()

' Esegue il file audio:
 mp.Play()
  
End

Interfacciare la Classe MediaPlayer con il plugin "jackaudiosink" di GStreamer per eseguire i file audio

Per eseguire i file audio con la Classe MediaPlayer è possibile anche effettuare un interfacciamento tra il programma Gambas e il server audio JACK. Per fare ciò, ci si servirà dell'apposito plugin di GStreamer, chiamato "jackaudiosink". [Nota 1]

Ovviamente bisognerà avere l'accortezza di avviare il server Jack (per esempio avviando il programma qjackctl) prima di lanciare il programma Gambas.

All'avvio del programma viene creata dal server Jack una connessione tra il programma sorgente Gambas e la destinazione (di default il primo canale audio d'uscita disponibile della propria scheda audio).


Mostriamo un semplice ed essenziale esempio di esecuzione di un file audio in un'applicazione a riga di comando:

Public Sub Main()

 Dim mp As MediaPlayer

 With mp = New MediaPlayer
   .URL = Media.URL("/percorso/del/file/audio")
   .Audio.Output = New MediaControl(mp, "jackaudiosink")
   .Play
   While mp.Duration < 0.1
     Wait 0.01
   Wend
   Wait .Duration
   .Stop
   .Close
 End With

End


Note

[1] La stesura di paragrafo è stata possibile anche grazie al fondamentale apporto e studio del membro allegfede del forum gambas-it.org .