Ottenere un unico file audio da due o più file audio mediante il componente gb.media

Da Gambas-it.org - Wikipedia.

Mostriamo di seguito un esempio pratico per ottenere un unico file audio mediante alcune risorse del Componente gb.media.

I due file audio utilizzati devono avere la medesima frequenza di campionamento !

Ottenere da due file WAV un unico file MP3

Private Const BITRATE As String = "bitrate"
Private bo As Boolean


Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, wap, res, con, vol, pan As MediaControl
 Dim src2, wap2, res2, con2, vol2, pan2 As MediaControl
 Dim flt As MediaFilter
 Dim mix, lam, snk As MediaControl

 pl = New MediaPipeline As "PLine"

' Primo file audio wav:
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/primo/file.wav"
 wap = New MediaControl(pl, "wavparse")
 res = New MediaControl(pl, "audioresample")
 con = New MediaControl(pl, "audioconvert")
 vol = New MediaControl(pl, "volume")
 vol["volume"] = 0.8
 pan = New MediaControl(pl, "audiopanorama")
 pan["panorama"] = 1.00     ' Pan a destra
 
' Secondo file audio wav:
 src2 = New MediaControl(pl, "filesrc") 
 src2["location"] = "/percorso/del/secondo/file.wav"
 wap2 = New MediaControl(pl, "wavparse")
 res2 = New MediaControl(pl, "audioresample")
 con2 = New MediaControl(pl, "audioconvert")
 vol2 = New MediaControl(pl, "volume")
 vol2["volume"] = 0.2
 pan2 = New MediaControl(pl, "audiopanorama")
 pan2["panorama"] = -1.00    ' Pan a sinistra
 
 mix = New MediaControl(pl, "audiomixer")
' Garantisce nel nuovo file l'impostazione stereo del "pan":
 flt = New MediaFilter(pl, "audio/x-raw, channels=2")
 lam = New MediaControl(pl, "lamemp3enc")
 lam["target"] = BITRATE   ' Imposta il BItrate.
 lam["cbr"] = True         ' Imposta il BItrate "Costante".
 lam["bitrate"] = 192      ' Imposta il valore del BItrate "Costante".
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/fileMP3.mp3"

 src.LinkTo(wap)
 wap.LinkTo(res)
 res.LinkTo(con)
 con.LinkTo(vol)
 vol.LinkTo(pan)
 pan.LinkTo(mix)   ' La prima sorgente audio alla fine converge nel mixer audio:

 src2.LinkTo(wap2)
 wap2.LinkTo(res2)
 res2.LinkTo(con2)
 con2.LinkTo(vol2)
 vol2.LinkTo(pan2)
 pan2.LinkTo(mix)   ' La seconda sorgente audio alla fine converge nel mixer audio:

 mix.LinkTo(flt)
 flt.LinkTo(lam)
 lam.LinkTo(snk)

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

 pl.Stop
 pl.Close

 Print "\n\e[0mOperazione terminata !"

End


Public Sub PLine_End() ' Questo Evento viene sollevato, quando la conversione è terminata

 bo = True

End


Ottenere da due file WAV un unico file OGG

Private bo As Boolean


Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, wap, res, con, vol, pan As MediaControl
 Dim src2, wap2, res2, con2, vol2, pan2 As MediaControl
 Dim flt As MediaFilter
 Dim mix, vor, mux, snk As MediaControl

 pl = New MediaPipeline As "PLine"

' Primo file audio wav:
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/primo/file.wav"
 wap = New MediaControl(pl, "wavparse")
 res = New MediaControl(pl, "audioresample")
 con = New MediaControl(pl, "audioconvert")
 vol = New MediaControl(pl, "volume")
 vol["volume"] = 0.8
 pan = New MediaControl(pl, "audiopanorama")
 pan["panorama"] = 1.00     ' Pan a destra
 
' Secondo file audio wav:
 src2 = New MediaControl(pl, "filesrc") 
 src2["location"] = "/percorso/del/secondo/file.wav"
 wap2 = New MediaControl(pl, "wavparse")
 res2 = New MediaControl(pl, "audioresample")
 con2 = New MediaControl(pl, "audioconvert")
 vol2 = New MediaControl(pl, "volume")
 vol2["volume"] = 0.2
 pan2 = New MediaControl(pl, "audiopanorama")
 pan2["panorama"] = -1.00    ' Pan a sinistra
 
 mix = New MediaControl(pl, "audiomixer")
' Garantisce nel nuovo file l'impostazione stereo del "pan":
 flt = New MediaFilter(pl, "audio/x-raw, channels=2")
 vor = New MediaControl(pl, "vorbisenc")
 mux = New MediaControl(pl, "oggmux")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/fileOGG.ogg"

 src.LinkTo(wap)
 wap.LinkTo(res)
 res.LinkTo(con)
 con.LinkTo(vol)
 vol.LinkTo(pan)
 pan.LinkTo(mix)   ' La prima sorgente audio alla fine converge nel mixer audio:

 src2.LinkTo(wap2)
 wap2.LinkTo(res2)
 res2.LinkTo(con2)
 con2.LinkTo(vol2)
 vol2.LinkTo(pan2)
 pan2.LinkTo(mix)   ' La seconda sorgente audio alla fine converge nel mixer audio:

 mix.LinkTo(flt)
 flt.LinkTo(vor)
 vor.LinkTo(mux)
 mux.LinkTo(snk)

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

 pl.Stop
 pl.Close

 Print "\n\e[0mOperazione terminata !"

End


Public Sub PLine_End() ' Questo Evento viene sollevato, quando la conversione è terminata

 bo = True

End


Ottenere da due file MP3 un unico file OGG

Private bo As Boolean


Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, par, dcd, res, con, vol, pan As MediaControl
 Dim src2, par2, dcd2, res2, con2, vol2, pan2 As MediaControl
 Dim flt As MediaFilter
 Dim mix, vor, mux, snk As MediaControl

 pl = New MediaPipeline As "PLine"

' Primo file audio wav:
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/primo/file.mp3"
 par = New MediaControl(pl, "mpegaudioparse")
 dcd = New MediaControl(pl, "mpg123audiodec")
 res = New MediaControl(pl, "audioresample")
 con = New MediaControl(pl, "audioconvert")
 vol = New MediaControl(pl, "volume")
 vol["volume"] = 0.8
 pan = New MediaControl(pl, "audiopanorama")
 pan["panorama"] = 1.00     ' Pan a destra
 
' Secondo file audio wav:
 src2 = New MediaControl(pl, "filesrc") 
 src2["location"] = "/percorso/del/secondo/file.mp3"
 par2 = New MediaControl(pl, "mpegaudioparse")
 dcd2 = New MediaControl(pl, "mpg123audiodec")
 res2 = New MediaControl(pl, "audioresample")
 con2 = New MediaControl(pl, "audioconvert")
 vol2 = New MediaControl(pl, "volume")
 vol2["volume"] = 0.4
 pan2 = New MediaControl(pl, "audiopanorama")
 pan2["panorama"] = -1.00    ' Pan a sinistra
 
 mix = New MediaControl(pl, "audiomixer")
' Garantisce nel nuovo file l'impostazione stereo del "pan":
 flt = New MediaFilter(pl, "audio/x-raw, channels=2")
 vor = New MediaControl(pl, "vorbisenc")
 mux = New MediaControl(pl, "oggmux")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/fileOGG.ogg"

 src.LinkTo(par)
 par.LinkTo(dcd)
 dcd.LinkTo(res)
 res.LinkTo(con)
 con.LinkTo(vol)
 vol.LinkTo(pan)
 pan.LinkTo(mix)   ' La prima sorgente audio alla fine converge nel mixer audio:

 src2.LinkTo(par2)
 par2.LinkTo(dcd2)
 dcd2.LinkTo(res2)
 res2.LinkTo(con2)
 con2.LinkTo(vol2)
 vol2.LinkTo(pan2)
 pan2.LinkTo(mix)   ' La seconda sorgente audio alla fine converge nel mixer audio:

 mix.LinkTo(flt)
 flt.LinkTo(vor)
 vor.LinkTo(mux)
 mux.LinkTo(snk)

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

 pl.Stop
 pl.Close

 Print "\n\e[0mOperazione terminata !"

End


Public Sub PLine_End() ' Questo Evento viene sollevato, quando la conversione è terminata

 bo = True

End