Differenze tra le versioni di "Convertire i formati audio mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 36: Riga 36:
 
   pl.Play()
 
   pl.Play()
 
    
 
    
   Print "Durata del file audio: "; Time(0, 0, 0, pl.Duration * 1000)
+
   Print "Durata del file wav: "; Time(0, 0, 0, pl.Duration * 1000)
 
   
 
   
 
   Repeat
 
   Repeat
Riga 55: Riga 55:
 
  '''End'''
 
  '''End'''
 
   
 
   
  '''Public''' Sub PLine_End()
+
  '''Public''' Sub PLine_End() <FONT Color=gray>' ''Questo Evento viene sollevato, quando la conversione è terminata:''</font>
 
   
 
   
 
   bo = True
 
   bo = True
Riga 96: Riga 96:
 
   pl.Play()
 
   pl.Play()
 
   
 
   
   Print "Durata del file Midi: "; Time(0, 0, 0, pl.Duration * 1000)
+
   Print "Durata del file wav: "; Time(0, 0, 0, pl.Duration * 1000)
 
   Repeat
 
   Repeat
 
     Write #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
 
     Write #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
Riga 133: Riga 133:
 
   
 
   
 
   datigrezzi = Temp
 
   datigrezzi = Temp
 
+
 
   pl = New MediaPipeline As "PLine"
 
   pl = New MediaPipeline As "PLine"
 
   
 
   
Riga 154: Riga 154:
 
   pl.Play()
 
   pl.Play()
 
    
 
    
   Print "Durata del file Midi: "; Time(0, 0, 0, pl.Duration * 1000)
+
   Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000)
 
   Repeat
 
   Repeat
 
     Write #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
 
     Write #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
Riga 179: Riga 179:
  
 
===Conversione audio dal formato MP3 al formato WAV===
 
===Conversione audio dal formato MP3 al formato WAV===
 +
Private bo As Boolean
 +
 +
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 +
 +
  Dim fileaudio, datigrezzi As String
 +
  Dim pl As MediaPipeline
 +
  Dim src, map, mad, wav, snk As MediaControl
 +
 +
  fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"
 +
 +
  datigrezzi = Temp
 +
 +
  pl = New MediaPipeline As "PLine"
 +
 
 +
  src = New MediaControl(pl, "filesrc")
 +
  src["location"] = fileaudio
 
    
 
    
  Dim pl As MediaPipeline
+
  map = New MediaControl(pl, "<FONT Color=#B22222>mpegaudioparse</font>")
  Dim src, map, mad, wav, snk As MediaControl
+
  mad = New MediaControl(pl, "<FONT Color=#B22222>mpg123audiodec</font>")
  Dim primofile As String
+
  wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>")
  Dim i As Integer
+
  snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
 
+
  snk["location"] = datigrezzi
  primofile = "/tmp/primofile"
+
 
 
+
  src.LinkTo(map)
  pl = New MediaPipeline
+
  map.LinkTo(mad)
 
+
  mad.LinkTo(wav)
  src = New MediaControl(pl, "filesrc")
+
  wav.LinkTo(snk)
  src["location"] = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"
+
 
 
+
  pl.Play()
  map = New MediaControl(pl, "<FONT Color=#B22222>mpegaudioparse</font>")
+
  mad = New MediaControl(pl, "<FONT Color=#B22222>mpg123audiodec</font>")
+
  Print "Durata del file mp3: "; Time(0, 0, 0, pl.Duration * 1000)
  wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>")
+
  Repeat
  snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
+
    Write #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
  snk["location"] = primofile
+
    Flush #File.Out
 
+
    Wait 0.01
  src.LinkTo(map)
+
  Until bo = True
  map.LinkTo(mad)
+
  mad.LinkTo(wav)
+
  Copy datigrezzi To "/tmp" &/ File.BaseName(fileaudio) & ".wav"
  wav.LinkTo(snk)
+
  pl.Stop
 
+
  pl.Close
  pl.Play()
+
 
+
  Print "\n\e[0mConversione terminata !"
  Repeat
+
    i = Stat(primofile).Size
+
  Quit
    Wait 0.7
+
  Until Stat(primofile).Size == i
+
'''End'''
 
+
  Copy primofile To "/tmp/file.wav"
+
'''Public''' Sub PLine_End()
  pl.Stop
+
  pl.Close
+
  bo = True
 
+
 
  '''End'''
 
  '''End'''
  
  
====Conversione audio dal formato MP3 al formato RAW====
+
===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.  
+
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()
 
  '''Public''' Sub Main()
 
    
 
    
  Dim pl As MediaPipeline
+
  Dim fileaudio, datigrezzi As String
  Dim src, par, dcd, snk As MediaControl
+
  Dim pl As MediaPipeline
  Dim fil As MediaFilter
+
  Dim src, par, dcd, snk As MediaControl
  Dim appoggio As String
+
  Dim fil As MediaFilter
  Dim i As Integer
+
 
+
  fileaudio = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"
  appoggio = Temp
+
 
+
  datigrezzi = Temp
  pl = New MediaPipeline  
+
 
+
  pl = New MediaPipeline As "PLine"
  src = New MediaControl(pl, "filesrc")
+
  src["location"] = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"
+
  src = New MediaControl(pl, "filesrc")
 
+
  src["location"] = fileaudio
  par = New MediaControl(pl, "<FONT Color=#B22222>mpegaudioparse</font>")
+
 
  dcd = New MediaControl(pl, "<FONT Color=#B22222>mpg123audiodec</font>")
+
  par = New MediaControl(pl, "<FONT Color=#B22222>mpegaudioparse</font>")
  fil = New MediaControl(pl, "<FONT Color=#B22222>audio/x-raw, format=S16LE, rate=44100, channels=2, endianness=1234, width=16, depth=16</font>")
+
  dcd = New MediaControl(pl, "<FONT Color=#B22222>mpg123audiodec</font>")
  snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</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["location"] = appoggio
+
  snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
 +
  snk["location"] = datigrezzi
 +
 +
  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 #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
 +
    Flush #File.Out
 +
    Wait 0.01
 +
  Until bo = True
 +
 +
  Copy datigrezzi To "/tmp" &/ File.BaseName(fileaudio) & ".raw"
 +
  pl.Stop
 +
  pl.Close
 +
 +
  Print "\n\e[0mConversione terminata !"
 
   
 
   
  src.LinkTo(par)
+
  Quit
  par.LinkTo(dcd)
 
  dcd.LinkTo(fil)
 
  fil.LinkTo(snk)
 
 
   
 
   
  pl.Play()
+
'''End'''
 
   
 
   
  Repeat
+
'''Public''' Sub PLine_End()
    i = Stat(appoggio).Size
 
    Wait 1
 
  Until Stat(appoggio).Size == i
 
 
 
  If Exist("/tmp/file_RAW.raw") Then Kill "/tmp/file_RAW.raw"
 
  Copy appoggio To "/tmp/file_RAW.raw"
 
 
   
 
   
  pl.Stop
+
  bo = True
  pl.Close
 
 
    
 
    
 
  '''End'''
 
  '''End'''
  
  
====Conversione audio con il plugin "decodebin"====
+
===Conversione audio con il plugin "decodebin"===
 
Usando il plugin "decodebin" è possibile convertire qualsiasi formato audio in un altro desiderato.
 
Usando il plugin "decodebin" è possibile convertire qualsiasi formato audio in un altro desiderato.
 
<BR>Mostriamo un esempio, nel quale sarà convertito un file audio "OGG" in un file audio "WAV":
 
<BR>Mostriamo un esempio, nel quale sarà convertito un file audio "OGG" in un file audio "WAV":
 +
Private bo As Boolean
 +
 +
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 +
 +
  Dim fileaudio, datigrezzi As String
 +
  Dim pl As MediaPipeline
 +
  Dim src, dcb, con, wav, snk As MediaControl
 +
 +
  fileaudio = "<FONT Color=gray>''/percorso/del/file.ogg''</font>"
 +
 +
  datigrezzi = Temp
 +
 +
  pl = New MediaPipeline As "PLine"
 +
 +
  src = New MediaControl(pl, "filesrc")
 +
  src["location"] = fileaudio
 +
 +
  dcb = New MediaControl(pl, "<FONT Color=#B22222>decodebin</font>")
 +
  con = New MediaControl(pl, "<FONT Color=#B22222>audioconvert</font>")
 +
  wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>")
 +
  snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
 +
  snk["location"] = datigrezzi
 +
 
 +
  src.LinkTo(dcb)
 +
  dcb.LinkLaterTo(con)
 +
  con.LinkTo(wav)
 +
  wav.LinkTo(snk)
 
    
 
    
  Dim pl As MediaPipeline
+
  pl.Play()
  Dim src, dcb, con, wav, snk As MediaControl
+
  Dim primofile As String
+
  Print "Durata del file ogg: "; Time(0, 0, 0, pl.Duration * 1000)
  Dim i As Integer
+
  Repeat
 
+
    Write #File.Out, "\r\e[0mTempo convertito:    \e[31m" & Time(0, 0, 0, pl.Position * 1000)
  primofile = "/tmp/primofile"
+
    Flush #File.Out
 
+
    Wait 0.01
  pl = New MediaPipeline
+
  Until bo = True
 
+
  src = New MediaControl(pl, "filesrc")
+
  Copy datigrezzi To "/tmp" &/ File.BaseName(fileaudio) & ".wav"
  src["location"] = "<FONT Color=gray>''/percorso/del/file.ogg''</font>"
+
  pl.Stop
 
+
  pl.Close
  dcb = New MediaControl(pl, "<FONT Color=#B22222>decodebin</font>")
+
  con = New MediaControl(pl, "<FONT Color=#B22222>audioconvert</font>")
+
  Print "\n\e[0mConversione terminata !"
  wav = New MediaControl(pl, "<FONT Color=#B22222>wavenc</font>")
+
  snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
+
  Quit
  snk["location"] = primofile
+
 
+
'''End'''
<FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti MediaControl impostati:''</font>
+
  src.LinkTo(dcb)
+
'''Public''' Sub PLine_End()
  dcb.LinkLaterTo(con)
+
  con.LinkTo(wav)
+
  bo = True
  wav.LinkTo(snk)
 
 
 
  pl.Play()
 
 
 
  Repeat
 
    i = Stat(primofile).Size
 
    Wait 0.7
 
  Until Stat(primofile).Size == i
 
 
 
  Copy primofile To "/tmp/file.wav"
 
  pl.Stop
 
  pl.Close
 
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 16:16, 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.

Conversione audio dal formato WAV al formato MP3

Private bo As Boolean


Public Sub Main()

 Dim fileaudio, datigrezzi As String
 Dim pl As MediaPipeline
 Dim src, wprs, cnv, lam, snk As MediaControl

 fileaudio = "/percorso/del/file.wav"

 datigrezzi = 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"] = datigrezzi
 
' 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 #File.Out, "\r\e[0mTempo convertito:     \e[31m" & Time(0, 0, 0, pl.Position * 1000)
   Flush #File.Out
   Wait 0.01
 Until bo = True

 Copy datigrezzi 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, datigrezzi As String
 Dim pl As MediaPipeline
 Dim src, wprs, cnv, vor, mux, snk As MediaControl

 fileaudio = "/percorso/del/file.wav"

 datigrezzi = 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"] = datigrezzi
 
 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 #File.Out, "\r\e[0mTempo convertito:     \e[31m" & Time(0, 0, 0, pl.Position * 1000)
   Flush #File.Out
   Wait 0.01
 Until bo = True

 Copy datigrezzi 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, datigrezzi As String
 Dim pl As MediaPipeline
 Dim src, map, mad, vor, mux, snk As MediaControl
 
 fileaudio = "/percorso/del/file.mp3"

 datigrezzi = 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"] = datigrezzi
 
 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 #File.Out, "\r\e[0mTempo convertito:     \e[31m" & Time(0, 0, 0, pl.Position * 1000)
   Flush #File.Out
   Wait 0.01
 Until bo = True

 Copy datigrezzi 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, datigrezzi As String
 Dim pl As MediaPipeline
 Dim src, map, mad, wav, snk As MediaControl

 fileaudio = "/percorso/del/file.mp3"

 datigrezzi = 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"] = datigrezzi
 
 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 #File.Out, "\r\e[0mTempo convertito:     \e[31m" & Time(0, 0, 0, pl.Position * 1000)
   Flush #File.Out
   Wait 0.01
 Until bo = True

 Copy datigrezzi 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, datigrezzi As String
 Dim pl As MediaPipeline
 Dim src, par, dcd, snk As MediaControl
 Dim fil As MediaFilter

 fileaudio = "/percorso/del/file.mp3"

 datigrezzi = 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"] = datigrezzi

 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 #File.Out, "\r\e[0mTempo convertito:     \e[31m" & Time(0, 0, 0, pl.Position * 1000)
   Flush #File.Out
   Wait 0.01
 Until bo = True

 Copy datigrezzi 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, datigrezzi As String
 Dim pl As MediaPipeline
 Dim src, dcb, con, wav, snk As MediaControl

 fileaudio = "/percorso/del/file.ogg"

 datigrezzi = 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"] = datigrezzi
 
 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 #File.Out, "\r\e[0mTempo convertito:     \e[31m" & Time(0, 0, 0, pl.Position * 1000)
   Flush #File.Out
   Wait 0.01
 Until bo = True

 Copy datigrezzi To "/tmp" &/ File.BaseName(fileaudio) & ".wav"
 pl.Stop
 pl.Close

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

 Quit

End

Public Sub PLine_End()

 bo = True
  
End