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

Da Gambas-it.org - Wikipedia.
 
(6 versioni intermedie di uno stesso utente non sono mostrate)
Riga 4: Riga 4:
 
==Eseguire un'onda sinusoidale==
 
==Eseguire un'onda sinusoidale==
 
Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio:
 
Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
Riga 25: Riga 25:
 
   pl.Close
 
   pl.Close
 
    
 
    
  '''End'''
+
  End
  
 +
====Usando la connessione al Server audio "Jack"====
 
In quest'altro esempio, simile al precedente, si farà uso della connessione al Server audio "Jack" (bisogna ricordare che ''Jack'' va avviato <SPAN Style="text-decoration:underline">prima</span> di lanciare il seguente codice gambas).
 
In quest'altro esempio, simile al precedente, si farà uso della connessione al Server audio "Jack" (bisogna ricordare che ''Jack'' va avviato <SPAN Style="text-decoration:underline">prima</span> di lanciare il seguente codice gambas).
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
Riga 38: Riga 39:
 
   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''</font> <SUP>&#091;[[#Note|nota 1]]&#093;</sup<
+
   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 49: Riga 50:
 
   pl.Close
 
   pl.Close
 
    
 
    
  '''End'''
+
  End
 +
 
  
 
==Eseguire e salvare un'onda sinusoidale==
 
==Eseguire e salvare un'onda sinusoidale==
 
 
Per eseguire e contemporaneamente salvare in un file WAV un'onda sinusoidale, è possibile usare il seguente codice:
 
Per eseguire e contemporaneamente salvare in un file WAV un'onda sinusoidale, è possibile usare il seguente codice:
 
  Private bo As Boolean
 
  Private bo As Boolean
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, con, tee, que, wav, snk, aas As MediaControl
 
   Dim src, con, tee, que, wav, snk, aas As MediaControl
 
  Dim appoggio As String = Temp
 
 
   
 
   
 
   pl = New MediaPipeline  
 
   pl = New MediaPipeline  
Riga 70: Riga 69:
 
   src["freq"] = "440"
 
   src["freq"] = "440"
 
   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>
 
   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")  <FONT Color=gray>' ''"tee" duplica il flusso di dati audio''</font> '<SUP>&#091;[[#Note|nota 2]]&#093;</sup>
+
   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 76: Riga 75:
 
   wav = New MediaControl(pl, "wavenc")
 
   wav = New MediaControl(pl, "wavenc")
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
   snk["location"] = appoggio
+
   snk["location"] = "/tmp/onda.wav"
 
   aas = New MediaControl(pl, "autoaudiosink")
 
   aas = New MediaControl(pl, "autoaudiosink")
 
   
 
   
Riga 94: Riga 93:
 
     Wait 0.01
 
     Wait 0.01
 
   Until bo = True
 
   Until bo = True
 
  Copy appoggio To "/tmp" &/ "onda.wav"
 
 
   
 
   
 
   pl.Stop
 
   pl.Stop
Riga 104: Riga 101:
 
   Quit
 
   Quit
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera, si termina il programma:''</font>
+
  Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera, si termina il programma:''</font>
 
   
 
   
 
   bo = True
 
   bo = True
 
   
 
   
  '''End'''
+
  End
  
  
Riga 117: Riga 115:
 
[1] Al riguardo vedere: https://gstreamer.freedesktop.org/documentation/audiotestsrc/index.html?gi-language=c
 
[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]]
+
[2] Vedere la seguente pagina: [[Duplicare il flusso dei dati audio di una pipeline della Classe ''MediaPipeline'' del componente gb.media]]

Versione attuale delle 17:50, 17 gen 2024

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

Usando la connessione al Server audio "Jack"

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]
 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

 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"] = "/tmp/onda.wav"
 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

 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() ' Premendo il tasto "Invio" della tastiera, si termina il programma:

 bo = True

End


Note

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

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