Modificare ad un file WAV la frequenza di campionamento, il numero di canali e la risoluzione bit mediante il componente gb.media

Da Gambas-it.org - Wikipedia.

Mostriamo di seguito un esempio in cui con le risorse delle Classi "MediaPipeline", "MediaControl" e "Mediafilter" si procede alla modifica della frequenza di campionamento, del numero di canali e della risoluzione in bit di un file audio di formato WAV.

In particolare nell'esempio che segue un file WAV di hz 44100, 2 canali, 16 bit viene trasformato in un file audio WAV di hz 8000, 1 canale, 8 bit.

Private bo As Boolean


Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, par, res, con1, con2, enc, snk As MediaControl
 Dim flt As MediaFilter

 pl = New MediaPipeline As "PLine"
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = "/percorso/del/file.wav"
 par = New MediaControl(pl, "wavparse")
 res = New MediaControl(pl, "audioresample")
 con1 = New MediaControl(pl, "audioconvert")
 flt = New MediaFilter(pl, "audio/x-raw,rate=8000,channels=1,format=S8")
 con2 = New MediaControl(pl, "audioconvert")
 enc = New MediaControl(pl, "wavenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/nuovo_file.wav"

 src.LinkTo(par)
 par.LinkTo(res)
 res.LinkTo(con1)
 con1.LinkTo(flt)
 flt.LinkTo(con2)
 con2.LinkTo(enc)
 enc.LinkTo(snk)

 pl.Play()

 Repeat 
   Write "\r\e[31m\e[5mAttendere: conversione in atto...\e[0m"
   Wait 0.01
 Until bo

 pl.Stop()
 pl.Close()

 Write "\r\e[0mConversione terminata             "
 
End

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

 bo = True

End