In general with gb.media Component, to change audio characteristics of a file, during its conversion, the MediaPipeline and MediaFilter Classes should be used.
Below is a practical example, in which we convert an MP3 file to a WAV file having sample rate = 22050 hertz and resolution = 8 bit:
Private bo As Boolean
Public Sub Main()
Dim pl As MediaPipeline
Dim src, dcb, con, res, flt, wav, snk As MediaControl
Dim temporary, audiofile As String
temporaneo = Temp
audiofile = "/path/of/audio/file/we/want/covert"
pl = New MediaPipeline As "PLine"
src = New MediaControl(pl, "filesrc")
src["location"] = audiofile
dcb = New MediaControl(pl, "decodebin")
con = New MediaControl(pl, "audioconvert")
res = New MediaControl(pl, "audioresample") ' Allows to change the characteristics of the audio file
flt = New MediaFilter(pl, "audio/x-raw,rate=22050,format=U8") ' Set the characteristics of the audio file
wav = New MediaFilter(pl, "wavenc")
snk = New MediaControl(pl, "filesink")
snk["location"] = temporary
src.LinkTo(dcb)
dcb.LinkLaterTo(con)
con.LinkTo(res)
res.LinkTo(flt)
flt.LinkTo(wav)
wav.LinkTo(snk)
pl.play
While pl.Duration < 1
Wait 0.01
Wend
Print "Duration of file: "; Time(0, 0, 0, pl.Duration * 1000)
Repeat
Write "\r\e[0mElapsed time: \e[31m" & Time(0, 0, 0, pl.Position * 1000)
Wait 0.01
Until bo
Copy temporary To "/tmp" &/ File.BaseName(audiofile) & ".wav"
pl.Close
Print "\n\e[0mEnd conversion !"
End
Public Sub PLine_End()
bo = True
End
If we want send audio data to sound card directly:
Private bo As Boolean
Public Sub Main()
Dim pl As MediaPipeline
Dim src, dcb, con, res, flt, snk As MediaControl
pl = New MediaPipeline As "PLine"
src = New MediaControl(pl, "filesrc")
src["location"] = "/path/of/audio/file/we/want/covert"
dcb = New MediaControl(pl, "decodebin")
con = New MediaControl(pl, "audioconvert")
res = New MediaControl(pl, "audioresample")
flt = New MediaFilter(pl, "audio/x-raw,rate=11025,format=U8")
snk = New MediaControl(pl, "autoaudiosink")
src.LinkTo(dcb)
dcb.LinkLaterTo(con)
con.LinkTo(res)
res.LinkTo(flt)
flt.LinkTo(snk)
pl.play
While pl.Duration < 1
Wait 0.01
Wend
Print "Duration of file: "; Time(0, 0, 0, pl.Duration * 1000)
Repeat
Write "\r\e[0mElapsed time: \e[31m" & Time(0, 0, 0, pl.Position * 1000)
Wait 0.01
Until bo
pl.Close
End
Public Sub PLine_End()
bo = True
End