Differenze tra le versioni di "Convertire i formati audio mediante il Componente gb.media"
Da Gambas-it.org - Wikipedia.
Riga 9: | Riga 9: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim fileaudio, | + | Dim fileaudio, appoggio As String |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, wprs, cnv, lam, snk As MediaControl | Dim src, wprs, cnv, lam, snk As MediaControl | ||
Riga 15: | Riga 15: | ||
fileaudio = "<FONT Color=gray>''/percorso/del/file.wav''</font>" | fileaudio = "<FONT Color=gray>''/percorso/del/file.wav''</font>" | ||
− | + | appoggio = Temp | |
pl = New MediaPipeline As "PLine" | pl = New MediaPipeline As "PLine" | ||
Riga 26: | Riga 26: | ||
lam = New MediaControl(pl, "<FONT Color=#B22222>lamemp3enc</font>") | lam = New MediaControl(pl, "<FONT Color=#B22222>lamemp3enc</font>") | ||
snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | ||
− | snk["location"] = | + | snk["location"] = appoggio |
<FONT Color=gray>' ''Collega fra loro all'interno della pipeline gli oggetti MediaControl impostati:''</font> | <FONT Color=gray>' ''Collega fra loro all'interno della pipeline gli oggetti MediaControl impostati:''</font> | ||
Riga 39: | Riga 39: | ||
Repeat | Repeat | ||
− | Write | + | Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) |
− | |||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | Copy | + | Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".mp3" |
pl.Stop | pl.Stop | ||
Riga 68: | Riga 67: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim fileaudio, | + | Dim fileaudio, appoggio As String |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, wprs, cnv, vor, mux, snk As MediaControl | Dim src, wprs, cnv, vor, mux, snk As MediaControl | ||
Riga 74: | Riga 73: | ||
fileaudio = "<FONT Color=gray>''/percorso/del/file.wav''</font>" | fileaudio = "<FONT Color=gray>''/percorso/del/file.wav''</font>" | ||
− | + | appoggio = Temp | |
pl = New MediaPipeline As "PLine" | pl = New MediaPipeline As "PLine" | ||
Riga 86: | Riga 85: | ||
mux = New MediaControl(pl, "<FONT Color=#B22222>oggmux</font>") | mux = New MediaControl(pl, "<FONT Color=#B22222>oggmux</font>") | ||
snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | ||
− | snk["location"] = | + | snk["location"] = appoggio |
src.LinkTo(wprs) | src.LinkTo(wprs) | ||
Riga 98: | Riga 97: | ||
Print "Durata del file wav: "; Time(0, 0, 0, pl.Duration * 1000) | Print "Durata del file wav: "; Time(0, 0, 0, pl.Duration * 1000) | ||
Repeat | Repeat | ||
− | Write | + | Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) |
− | |||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | Copy | + | Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".ogg" |
pl.Stop | pl.Stop | ||
pl.Close | pl.Close | ||
Riga 126: | Riga 124: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim fileaudio, | + | Dim fileaudio, appoggio As String |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, map, mad, vor, mux, snk As MediaControl | Dim src, map, mad, vor, mux, snk As MediaControl | ||
Riga 132: | Riga 130: | ||
fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>" | fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>" | ||
− | + | appoggio = Temp | |
pl = New MediaPipeline As "PLine" | pl = New MediaPipeline As "PLine" | ||
Riga 144: | Riga 142: | ||
mux = New MediaControl(pl, "<FONT Color=#B22222>oggmux</font>") | mux = New MediaControl(pl, "<FONT Color=#B22222>oggmux</font>") | ||
snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | ||
− | snk["location"] = | + | snk["location"] = appoggio |
src.LinkTo(map) | src.LinkTo(map) | ||
Riga 156: | Riga 154: | ||
Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) | Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) | ||
Repeat | Repeat | ||
− | Write | + | Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) |
− | |||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | Copy | + | Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".ogg" |
+ | |||
pl.Stop | pl.Stop | ||
pl.Close | pl.Close | ||
Riga 184: | Riga 182: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim fileaudio, | + | Dim fileaudio, appoggio As String |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, map, mad, wav, snk As MediaControl | Dim src, map, mad, wav, snk As MediaControl | ||
Riga 190: | Riga 188: | ||
fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>" | fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>" | ||
− | + | appoggio = Temp | |
pl = New MediaPipeline As "PLine" | pl = New MediaPipeline As "PLine" | ||
Riga 201: | Riga 199: | ||
wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>") | wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>") | ||
snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | ||
− | snk["location"] = | + | snk["location"] = appoggio |
src.LinkTo(map) | src.LinkTo(map) | ||
Riga 212: | Riga 210: | ||
Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) | Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) | ||
Repeat | Repeat | ||
− | Write | + | Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) |
− | |||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | Copy | + | Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".wav" |
+ | |||
pl.Stop | pl.Stop | ||
pl.Close | pl.Close | ||
Riga 241: | Riga 239: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim fileaudio, | + | Dim fileaudio, appoggio As String |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, par, dcd, snk As MediaControl | Dim src, par, dcd, snk As MediaControl | ||
Riga 248: | Riga 246: | ||
fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>" | fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>" | ||
− | + | appoggio = Temp | |
pl = New MediaPipeline As "PLine" | pl = New MediaPipeline As "PLine" | ||
Riga 259: | Riga 257: | ||
fil = New MediaFilter(pl, "<FONT Color=#B22222>audio/x-raw, format=S16LE, rate=44100, channels=2, endianness=1234, width=16, depth=16</font>") | fil = New MediaFilter(pl, "<FONT Color=#B22222>audio/x-raw, format=S16LE, rate=44100, channels=2, endianness=1234, width=16, depth=16</font>") | ||
snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | ||
− | snk["location"] = | + | snk["location"] = appoggio |
src.LinkTo(par) | src.LinkTo(par) | ||
Riga 270: | Riga 268: | ||
Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) | Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) | ||
Repeat | Repeat | ||
− | Write | + | Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) |
− | |||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | Copy | + | Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".raw" |
+ | |||
pl.Stop | pl.Stop | ||
pl.Close | pl.Close | ||
Riga 300: | Riga 298: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim fileaudio, | + | Dim fileaudio, appoggio As String |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, dcb, con, wav, snk As MediaControl | Dim src, dcb, con, wav, snk As MediaControl | ||
Riga 306: | Riga 304: | ||
fileaudio = "<FONT Color=gray>''/percorso/del/file.ogg''</font>" | fileaudio = "<FONT Color=gray>''/percorso/del/file.ogg''</font>" | ||
− | + | appoggio = Temp | |
pl = New MediaPipeline As "PLine" | pl = New MediaPipeline As "PLine" | ||
Riga 317: | Riga 315: | ||
wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>") | wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>") | ||
snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>") | ||
− | snk["location"] = | + | snk["location"] = appoggio |
src.LinkTo(dcb) | src.LinkTo(dcb) | ||
Riga 328: | Riga 326: | ||
Print "Durata del file ogg: "; Time(0, 0, 0, pl.Duration * 1000) | Print "Durata del file ogg: "; Time(0, 0, 0, pl.Duration * 1000) | ||
Repeat | Repeat | ||
− | Write | + | Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) |
− | |||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | Copy | + | Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".wav" |
+ | |||
pl.Stop | pl.Stop | ||
pl.Close | pl.Close |
Versione delle 20:29, 15 set 2022
Utilizzando i plugin di GStreamer con le Classi MediaControl e MediaPipeline del Componente gb.media, è possibile effettuare diverse conversioni di file audio da un formato ad un altro.
Mostriamo di seguito qualche esempio pratico.
Indice
- 1 Conversione audio dal formato WAV al formato MP3
- 2 Conversione audio dal formato WAV al formato OGG
- 3 Conversione audio dal formato MP3 al formato OGG
- 4 Conversione audio dal formato MP3 al formato WAV
- 5 Conversione audio dal formato MP3 al formato RAW
- 6 Conversione audio con il plugin "decodebin"
Conversione audio dal formato WAV al formato MP3
Private bo As Boolean Public Sub Main() Dim fileaudio, appoggio As String Dim pl As MediaPipeline Dim src, wprs, cnv, lam, snk As MediaControl fileaudio = "/percorso/del/file.wav" appoggio = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = fileaudio wprs = New MediaControl(pl, "wavparse") cnv = New MediaControl(pl, "audioconvert") lam = New MediaControl(pl, "lamemp3enc") snk = New MediaControl(pl, "filesink") snk["location"] = appoggio ' Collega fra loro all'interno della pipeline gli oggetti MediaControl impostati: src.LinkTo(wprs) wprs.LinkTo(cnv) cnv.LinkTo(lam) lam.LinkTo(snk) pl.Play() Print "Durata del file wav: "; Time(0, 0, 0, pl.Duration * 1000) Repeat Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) Wait 0.01 Until bo = True Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".mp3" pl.Stop pl.Close Print "\n\e[0mConversione terminata !" Quit End Public Sub PLine_End() ' Questo Evento viene sollevato, quando la conversione è terminata bo = True End
Conversione audio dal formato WAV al formato OGG
Private bo As Boolean Public Sub Main() Dim fileaudio, appoggio As String Dim pl As MediaPipeline Dim src, wprs, cnv, vor, mux, snk As MediaControl fileaudio = "/percorso/del/file.wav" appoggio = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = fileaudio wprs = New MediaControl(pl, "wavparse") cnv = New MediaControl(pl, "audioconvert") vor = New MediaControl(pl, "vorbisenc") mux = New MediaControl(pl, "oggmux") snk = New MediaControl(pl, "filesink") snk["location"] = appoggio src.LinkTo(wprs) wprs.LinkTo(cnv) cnv.LinkTo(vor) vor.LinkTo(mux) mux.LinkTo(snk) pl.Play() Print "Durata del file wav: "; Time(0, 0, 0, pl.Duration * 1000) Repeat Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) Wait 0.01 Until bo = True Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".ogg" pl.Stop pl.Close Print "\n\e[0mConversione terminata !" Quit End Public Sub PLine_End() bo = True End
Conversione audio dal formato MP3 al formato OGG
Private bo As Boolean Public Sub Main() Dim fileaudio, appoggio As String Dim pl As MediaPipeline Dim src, map, mad, vor, mux, snk As MediaControl fileaudio = "/percorso/del/file.mp3" appoggio = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = fileaudio map = New MediaControl(pl, "mpegaudioparse") mad = New MediaControl(pl, "mpg123audiodec") vor = New MediaControl(pl, "vorbisenc") mux = New MediaControl(pl, "oggmux") snk = New MediaControl(pl, "filesink") snk["location"] = appoggio src.LinkTo(map) map.LinkTo(mad) mad.LinkTo(vor) vor.LinkTo(mux) mux.LinkTo(snk) pl.Play() Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) Repeat Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) Wait 0.01 Until bo = True Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".ogg" pl.Stop pl.Close Print "\n\e[0mConversione terminata !" Quit End Public Sub PLine_End() bo = True End
Conversione audio dal formato MP3 al formato WAV
Private bo As Boolean Public Sub Main() Dim fileaudio, appoggio As String Dim pl As MediaPipeline Dim src, map, mad, wav, snk As MediaControl fileaudio = "/percorso/del/file.mp3" appoggio = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = fileaudio map = New MediaControl(pl, "mpegaudioparse") mad = New MediaControl(pl, "mpg123audiodec") wav = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = appoggio src.LinkTo(map) map.LinkTo(mad) mad.LinkTo(wav) wav.LinkTo(snk) pl.Play() Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) Repeat Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) Wait 0.01 Until bo = True Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".wav" pl.Stop pl.Close Print "\n\e[0mConversione terminata !" Quit End Public Sub PLine_End() bo = True End
Conversione audio dal formato MP3 al formato RAW
Con il seguente codice si otterranno da un file MP3 i dati audio grezzi nel formato: frequenza di campionamento = 44100, risoluzione = 16 bit, canali = 2.
Private bo As Boolean Public Sub Main() Dim fileaudio, appoggio As String Dim pl As MediaPipeline Dim src, par, dcd, snk As MediaControl Dim fil As MediaFilter fileaudio = "/percorso/del/file.mp3" appoggio = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = fileaudio par = New MediaControl(pl, "mpegaudioparse") dcd = New MediaControl(pl, "mpg123audiodec") fil = New MediaFilter(pl, "audio/x-raw, format=S16LE, rate=44100, channels=2, endianness=1234, width=16, depth=16") snk = New MediaControl(pl, "filesink") snk["location"] = appoggio src.LinkTo(par) par.LinkTo(dcd) dcd.LinkTo(fil) fil.LinkTo(snk) pl.Play() Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000) Repeat Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) Wait 0.01 Until bo = True Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".raw" pl.Stop pl.Close Print "\n\e[0mConversione terminata !" Quit End Public Sub PLine_End() bo = True End
Conversione audio con il plugin "decodebin"
Usando il plugin "decodebin" è possibile convertire qualsiasi formato audio in un altro desiderato.
Mostriamo un esempio, nel quale sarà convertito un file audio "OGG" in un file audio "WAV":
Private bo As Boolean Public Sub Main() Dim fileaudio, appoggio As String Dim pl As MediaPipeline Dim src, dcb, con, wav, snk As MediaControl fileaudio = "/percorso/del/file.ogg" appoggio = Temp pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = fileaudio dcb = New MediaControl(pl, "decodebin") con = New MediaControl(pl, "audioconvert") wav = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = appoggio src.LinkTo(dcb) dcb.LinkLaterTo(con) con.LinkTo(wav) wav.LinkTo(snk) pl.Play() Print "Durata del file ogg: "; Time(0, 0, 0, pl.Duration * 1000) Repeat Write "\r\e[0mTempo convertito: \e[31m" & Time(0, 0, 0, pl.Position * 1000) Wait 0.01 Until bo = True Copy appoggio To "/tmp" &/ File.BaseName(fileaudio) & ".wav" pl.Stop pl.Close Print "\n\e[0mConversione terminata !" Quit End Public Sub PLine_End() bo = True End