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.

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, par, res, con1, con2, enc, snk As MediaControl
 Dim flt As MediaFilter
 Dim primofile As String
   
  primofile = "/tmp/primofile"
  
  pl = New MediaPipeline
  
  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"] = primofile
  
  src.LinkTo(par)
  par.LinkTo(res)
  res.LinkTo(con1)
  con1.LinkTo(flt)
  flt.LinkTo(con2)
  con2.LinkTo(enc)
  enc.LinkTo(snk)
  
  pl.Play()
  Write #File.Out, "\e[31m\e[5mAttendere: conversione in atto...\e[0m"
  Flush #File.Out
  Sleep (pl.Duration / 60) * 2
  
  pl.Stop()
  pl.Close()
  Copy primofile To "/tmp/nuovo_audio.wav"
  Write "\r\e[0mConversione terminata             "
  
End