Differenze tra le versioni di "Eseguire e salvare un'onda sinusoidale mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "==Eseguire un'onda sinusoidale== Per solo eseguire un'onda sinusoidale mediante il Componente ''gb.media'', in questo esempio si farà uso delle Classi "MediaPipeline" e "Medi...")
 
Riga 1: Riga 1:
 +
=Usando le Classi "MediaPipeline" e "MediaControl"=
 +
Mostriamo di seguito alcune modalità usando le Classi ''MediaPipeline'' e ''MediaControl'' del Componente ''gb.media''.
 +
 
==Eseguire un'onda sinusoidale==
 
==Eseguire un'onda sinusoidale==
Per solo eseguire un'onda sinusoidale mediante il Componente ''gb.media'', in questo esempio si farà uso delle Classi "MediaPipeline" e "MediaControl":
+
Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 11: Riga 14:
 
   src["volume"] = "0.5"
 
   src["volume"] = "0.5"
 
   src["freq"] = "440"
 
   src["freq"] = "440"
   src["wave"] = 0    <FONT Color=gray>' ''Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale'' <SUP>&#091;[[#Note|nota 1]]&#093;</sup></font>
+
   src["wave"] = 0    <FONT Color=gray>' ''Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale''</font> <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 
   snk = New MediaControl(pl, "autoaudiosink")
 
   snk = New MediaControl(pl, "autoaudiosink")
 
    
 
    
Riga 35: Riga 38:
 
   src["volume"] = "0.5"
 
   src["volume"] = "0.5"
 
   src["freq"] = "440"
 
   src["freq"] = "440"
   src["wave"] = 0
+
   src["wave"] = 0     <FONT Color=gray>' ''Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale''</font> <SUP>&#091;[[#Note|nota 1]]&#093;</sup<
 
   snk = New MediaControl(pl, "jackaudiosink")
 
   snk = New MediaControl(pl, "jackaudiosink")
 
    
 
    
Riga 66: Riga 69:
 
   src["volume"] = "0.5"
 
   src["volume"] = "0.5"
 
   src["freq"] = "440"
 
   src["freq"] = "440"
   src["wave"] = 0     ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1]
+
   src["wave"] = 0         <FONT Color=gray>' ''Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale''</font> <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
   tee = New MediaControl(pl, "tee")
+
   tee = New MediaControl(pl, "tee")   <FONT Color=gray>' ''"tee" duplica il flusso di dati audio''</font> '<SUP>&#091;[[#Note|nota 2]]&#093;</sup>
 
   que = New MediaControl(pl, "queue")
 
   que = New MediaControl(pl, "queue")
 
   
 
   
Riga 93: Riga 96:
 
   
 
   
 
   Copy appoggio To "/tmp" &/ "prova.wav"
 
   Copy appoggio To "/tmp" &/ "prova.wav"
 
+
 
   pl.Stop
 
   pl.Stop
 
   pl.Close
 
   pl.Close
 
+
 
   Print "\n\e[0m Operazione terminata !"
 
   Print "\n\e[0m Operazione terminata !"
 
  <FONT Color=gray>' ''Usando l'Evento "Application_Read()", è necessario invocare "Quit" per terminare il programma:''</font>
 
  <FONT Color=gray>' ''Usando l'Evento "Application_Read()", è necessario invocare "Quit" per terminare il programma:''</font>

Versione delle 09:12, 30 set 2022

Usando le Classi "MediaPipeline" e "MediaControl"

Mostriamo di seguito alcune modalità usando le Classi MediaPipeline e MediaControl del Componente gb.media.

Eseguire un'onda sinusoidale

Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio:

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, snk As MediaControl
 
 pl = New MediaPipeline 
  
 src = New MediaControl(pl, "audiotestsrc")
 src["volume"] = "0.5"
 src["freq"] = "440"
 src["wave"] = 0     ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1]
 snk = New MediaControl(pl, "autoaudiosink")
 
 src.LinkTo(snk)
  
 pl.Play()
 
 Wait 10
  
 pl.Close
 
End

In quest'altro esempio, simile al precedente, si farà uso della connessione al Server audio "Jack" (bisogna ricordare che Jack va avviato prima di lanciare il seguente codice gambas).

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, snk As MediaControl
 
 pl = New MediaPipeline 
  
 src = New MediaControl(pl, "audiotestsrc")
 src["volume"] = "0.5"
 src["freq"] = "440"
 src["wave"] = 0     ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1]</sup<
 snk = New MediaControl(pl, "jackaudiosink")
 
 src.LinkTo(snk)
  
 pl.Play()
 
 Wait 10
 
 pl.Close
  
End

Eseguire e salvare un'onda sinusoidale

Per eseguire e contemporaneamente salvare in un file WAV un'onda sinusoidale, è possibile usare il seguente codice:

Private bo As Boolean


Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, con, tee, que, wav, snk, aas As MediaControl

 Dim appoggio As String = Temp

 pl = New MediaPipeline 
 
 src = New MediaControl(pl, "audiotestsrc")
 src["volume"] = "0.5"
 src["freq"] = "440"
 src["wave"] = 0          ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1]
 tee = New MediaControl(pl, "tee")   ' "tee" duplica il flusso di dati audio '[nota 2]
 que = New MediaControl(pl, "queue")

 con = New MediaControl(pl, "audioconvert")
 wav = New MediaControl(pl, "wavenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = appoggio
 aas = New MediaControl(pl, "autoaudiosink")

 src.LinkTo(tee)
 tee.LinkTo(que)

 que.LinkTo(con)
 con.LinkTo(wav)
 wav.LinkTo(snk)

 tee.LinkTo(aas)

 pl.Play()

 Repeat
   Write "\r\e[0mTempo trascorso:     \e[31m" & Str(Time(0, 0, 0, pl.Position * 1000))
   Wait 0.01
 Until bo = True

 Copy appoggio To "/tmp" &/ "prova.wav"

 pl.Stop
 pl.Close

 Print "\n\e[0m Operazione terminata !"
' Usando l'Evento "Application_Read()", è necessario invocare "Quit" per terminare il programma:
 Quit

End

Public Sub Application_Read()

 bo = True

End


Note

[1] Al riguardo vedere: https://gstreamer.freedesktop.org/documentation/audiotestsrc/index.html?gi-language=c

[2] Duplicare il flusso dei dati audio di una pipeline della Classe ''MediaPipeline'' del componente gb.media