Visualizzare un oscilloscopio od uno spettroscopio durante l'esecuzione di un file Midi mediante il Componente gb.media

Da Gambas-it.org - Wikipedia.

Per visualizzare in apposita finestra, generata dalle risorse di Gstreamer, un oscilloscopio od uno spettroscopio durante l'esecuzione di un file Midi mediante il Componente gb.media, è necessario utilizzare gli appositi plugin forniti da GStreamer attraverso la Classe MediaControl.

Si imposterà il plugin "monoscope " o il plugin "wavescope " per ottenere la visualizzazione di un oscilloscopio. Si utilizzerà il plugin "spectrascope ", per ottenere la visualizzazione di uno spettroscopio.

Semplice esempio in un'applicazione a riga di comando

Private bo As Boolean


Public Sub Main()

 Dim mp As MediaPlayer

 With mp = New MediaPlayer As "MediaPlayer1"
   .URL = Media.URL("/percorso/del/file.mid")
' Attiva il Plugin grafico:
   AvviaPlugin(mp)
   .Play()
   Print "Durata del file Midi: \e[34m"; Str(Time(0, 0, 0, .Duration * 1000))
   Repeat
     Write "\r\e[0mTempo trascorso:      \e[1m\e[31m" & Str(Time(0, 0, 0, .Position * 1000))
     Wait 0.01
   Until bo
   .Stop
   .Close
 End With

 Write "\n\e[0mEsecuzione terminata !"
' Avendo utilizzato l'Evento "Application_Read()", è necessario invocare l'istruzione "Quit" per terminare il programma:
 Quit

End


Private Procedure AvviaPlugin(medpl As MediaPlayer)

 Dim plugVis As MediaControl
 Dim b As Byte
 Dim tipoPlug As String[] = ["monoscope", "spectrascope", "wavescope"]
 Dim arrplugin As MediaControl[]

' Un array di variabili di tipo "MediaControl", ossia di vari PlugIn disponibili:
 arrplugin = New MediaControl[]
 For b = 0 To tipoPlug.Max
   plugVis = New MediaControl(medpl, tipoPlug[b])
   arrplugin.Push(plugVis)
 Next

' Imposta il plug-in da utilizzare fra quelli contenuti dal vettore "arrplugin":
 medpl.Video.Visualisation = arrplugin[2]

End


Public Sub MediaPlayer1_End() ' Questo Evento viene sollevato, quando l'escuzione è terminata

 bo = True

End


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

 bo = True

End


Se si vuole far apparire l'effetto grafico del plugin in una DrawingArea

Se, avendo un'applicazione in ambiente grafico, si intende far apparire l'effetto grafico del plugin all'interno di una DrawingAea sarà sufficiente impostare tale Oggetto nel Metodo ".SetWindow()".

Riprendendo il codice precedente, fatte le dovute modifiche per l'ambiente grafico, posta una DrawingArea sul Form, si imposterà come segue:

Private bo As Boolean


Public Sub Button1_Click()

Dim mp As MediaPlayer
 
With mp = New MediaPlayer As "MediaPlayer1"
  .URL = Media.URL("/percorso/del/file.mid")
  .SetWindow(DrawingArea1)
  AvviaPlugin(mp)
  .Play()
  etc... etc...