Differenze tra le versioni di "Ottenere la forma d'onda di un file audio mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 11: Riga 11:
  
 
====Ottenere la forma d'onda di un file WAV====
 
====Ottenere la forma d'onda di un file WAV====
  Library "libc:6"
 
 
<FONT Color=gray>' ''void exit (int __status)''
 
' ''Terminate program execution with STATUS.''</font>
 
Private Extern exit_C(i As Integer) As Integer Exec "exit"
 
 
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, dcd, cnv, scp, vid, jpg, snk As MediaControl
 
   Dim src, dcd, cnv, scp, vid, jpg, snk As MediaControl
 +
  Dim primofile, secondi As String
 +
 
 +
  primofile = "/tmp/primofile.jpg"
 +
<FONT Color=gray>' ''Imposta la lunghezza in secondi dell'onda audio da ricavare del file audio:''</font>
 +
  secondi = "5"
 
    
 
    
 
   pl = New MediaPipeline
 
   pl = New MediaPipeline
Riga 32: Riga 30:
 
   scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
   scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
   scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
 
   scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
   vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1/</font><FONT Color=gray>''durata_del_file_audio_in_secondi''</font>")
+
   vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1" &/ secondi</font>)
 
   jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
   jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
   jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
   jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
   snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
 
   snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
   snk["<FONT Color=#B22222>location</font>"] = "/tmp/forma_onda.jpg"
+
   snk["<FONT Color=#B22222>location</font>"] = primofile
 
    
 
    
 
  <FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti ''MediaControl'' impostati:''</font>
 
  <FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti ''MediaControl'' impostati:''</font>
Riga 46: Riga 44:
 
   jpg.LinkTo(snk)
 
   jpg.LinkTo(snk)
 
      
 
      
    pl.State = Media.Playing
+
  pl.Play()
    pl.Play()
 
    Sleep 5
 
 
      
 
      
    exit_C(0)
+
  Sleep Val(secondi)
 +
 
 +
  Copy primofile To "/tmp/forma_onda.jpg"
 +
 
 +
  pl.Stop()
 +
  pl.Close()
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 56: Riga 57:
  
 
====Ottenere la forma d'onda di un file MP3====
 
====Ottenere la forma d'onda di un file MP3====
  Library "libc:6"
 
 
<FONT Color=gray>' ''void exit (int __status)''
 
' ''Terminate program execution with STATUS.''</font>
 
Private Extern exit_C(i As Integer) As Integer Exec "exit"
 
 
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, dcd, cnv, scp, vid, jpg, snk As MediaControl
 
   Dim src, dcd, cnv, scp, vid, jpg, snk As MediaControl
 +
  Dim primofile, secondi As String
 +
 
 +
  primofile = "/tmp/primofile.jpg"
 +
<FONT Color=gray>' ''Imposta la lunghezza in secondi dell'onda audio da ricavare del file audio:''</font>
 +
  secondi = "5"
 
    
 
    
 
   pl = New MediaPipeline
 
   pl = New MediaPipeline
 
    
 
    
 
   src = New MediaControl(pl, "filesrc")
 
   src = New MediaControl(pl, "filesrc")
   src["location"] = "<FONT Color=gray>''/percorso/del/file.wav''</font>"  <FONT Color=gray>' ''"location" è una proprietà del plugin "filesrc"''</font>
+
   src["location"] = "<FONT Color=gray>''/percorso/del/file.mp3''</font>"  <FONT Color=gray>' ''"location" è una proprietà del plugin "filesrc"''</font>
 
    
 
    
 
   dcd = New MediaControl(pl, "<FONT Color=#B22222>mad</font>")
 
   dcd = New MediaControl(pl, "<FONT Color=#B22222>mad</font>")
Riga 77: Riga 76:
 
   scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
   scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
   scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
 
   scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
   vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1/</font><FONT Color=gray>''durata_del_file_audio_in_secondi''</font>")
+
   vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1" &/ secondi</font>)
 
   jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
   jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
   jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
   jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
   snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
 
   snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
   snk["<FONT Color=#B22222>location</font>"] = "/tmp/forma_onda.jpg"
+
   snk["<FONT Color=#B22222>location</font>"] = primofile
 
    
 
    
 
  <FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti ''MediaControl'' impostati:''</font>
 
  <FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti ''MediaControl'' impostati:''</font>
Riga 91: Riga 90:
 
   jpg.LinkTo(snk)
 
   jpg.LinkTo(snk)
 
      
 
      
    pl.State = Media.Playing
+
  pl.Play()
    pl.Play()
 
    Sleep 5
 
 
      
 
      
    exit_C(0)
+
  Sleep Val(secondi)
 +
 
 +
  Copy primofile To "/tmp/forma_onda.jpg"
 +
 
 +
  pl.Stop()
 +
  pl.Close()
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 101: Riga 103:
  
 
====Ottenere la forma d'onda di un file FLAC====
 
====Ottenere la forma d'onda di un file FLAC====
  Library "libc:6"
 
 
<FONT Color=gray>' ''void exit (int __status)''
 
' ''Terminate program execution with STATUS.''</font>
 
Private Extern exit_C(i As Integer) As Integer Exec "exit"
 
 
 
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, fpa, fde, cnv, scp, vid, jpg, snk As MediaControl
 
   Dim src, fpa, fde, cnv, scp, vid, jpg, snk As MediaControl
 +
  Dim primofile, secondi As String
 +
 
 +
  primofile = "/tmp/primofile.jpg"
 +
<FONT Color=gray>' ''Imposta la lunghezza in secondi dell'onda audio da ricavare del file audio:''</font>
 +
  secondi = "5"
 
    
 
    
 
   pl = New MediaPipeline
 
   pl = New MediaPipeline
Riga 123: Riga 123:
 
   scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
   scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
   scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
 
   scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
   vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1/</font><FONT Color=gray>''durata_del_file_audio_in_secondi''</font>")
+
   vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1" &/ secondi</font>)
 
   jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
   jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
   jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
   jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
   snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
 
   snk = New MediaControl(pl, "<FONT Color=#B22222>filesink</font>")
   snk["<FONT Color=#B22222>location</font>"] = "/tmp/forma_onda.jpg"
+
   snk["<FONT Color=#B22222>location</font>"] = primofile
 
    
 
    
 
  <FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti ''MediaControl'' impostati:''</font>
 
  <FONT Color=gray>' ''Colleghiamo fra loro all'interno della pipeline gli oggetti ''MediaControl'' impostati:''</font>
Riga 138: Riga 138:
 
   jpg.LinkTo(snk)
 
   jpg.LinkTo(snk)
 
      
 
      
    pl.State = Media.Playing
+
  pl.Play()
    pl.Play()
 
    Sleep 5
 
 
      
 
      
    exit_C(0)
+
  Sleep Val(secondi)
 +
 
 +
  Copy primofile To "/tmp/forma_onda.jpg"
 +
 
 +
  pl.Stop()
 +
  pl.Close()
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 04:19, 9 ago 2017

Mediante opportuni plugin di GStreamer utilizzati con la Classe MediaControl del Componente gb.media unitamente alla Classe MediaPipeline, è possibile ottenere in un file immagine JPEG la forma d'onda di un file audio.

La creazione della forma d'onda dell'audio è gestita dal plugin "wavescope". Questo pluin dispone di una proprietà, chiamata style, che fornisce diversi aspetti della forma d'onda audio a seconda del valore impostato (0 - 3).

Va precisato che il valore del dettaglio "framerate" è composto da una frazione il cui denominatore rappresenta i secondi di durata rappresentati nella/dalla forma d'onda. Pertanto se si vuole ottenere la forma d'onda dell'intero file audio, la frazione da assegnare sarà: 1/durata_del_file_audio_in_secondi.

Il tipo di file immagine va impostato verso la fine al'interno di un oggetto MediaControl mediante apposito plugin, prevedendo nel caso anche il valore della qualità di risoluzione dell'immagine.


Mostriamo di seguito un esempio pratico per ottenere in un file immagine .jpg la forma d'onda di alcuni formati di file audio:

Ottenere la forma d'onda di un file WAV

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, dcd, cnv, scp, vid, jpg, snk As MediaControl
 Dim primofile, secondi As String
  
  primofile = "/tmp/primofile.jpg"
' Imposta la lunghezza in secondi dell'onda audio da ricavare del file audio:
  secondi = "5"
  
  pl = New MediaPipeline
  
  src = New MediaControl(pl, "filesrc")
  src["location"] = "/percorso/del/file.wav"   ' "location" è una proprietà del plugin "filesrc"
  
  dcd = New MediaControl(pl, "wavparse")
  cnv = New MediaControl(pl, "audioconvert")
  scp = New MediaControl(pl, "wavescope")
  scp["style"] = 1         ' "style" è la proprietà del plugin "wavescope", che qui impostiamo a 1
  vid = New MediaControl(pl, "video/x-raw,width=2000,heigth=600,framerate=1" &/ secondi)
  jpg = New MediaFilter(pl, "jpegenc")
  jpg["quality"] = 50      ' "quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50
  snk = New MediaControl(pl, "filesink")
  snk["location"] = primofile
  
' Colleghiamo fra loro all'interno della pipeline gli oggetti MediaControl impostati:
  src.LinkTo(dcd)
  dcd.LinkTo(cnv)
  cnv.LinkTo(scp)
  scp.LinkTo(vid)
  vid.LinkTo(jpg)
  jpg.LinkTo(snk)
   
  pl.Play()
   
  Sleep Val(secondi)
  
  Copy primofile To "/tmp/forma_onda.jpg"
  
  pl.Stop()
  pl.Close()
  
End


Ottenere la forma d'onda di un file MP3

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, dcd, cnv, scp, vid, jpg, snk As MediaControl
 Dim primofile, secondi As String
  
  primofile = "/tmp/primofile.jpg"
' Imposta la lunghezza in secondi dell'onda audio da ricavare del file audio:
  secondi = "5"
  
  pl = New MediaPipeline
  
  src = New MediaControl(pl, "filesrc")
  src["location"] = "/percorso/del/file.mp3"   ' "location" è una proprietà del plugin "filesrc"
  
  dcd = New MediaControl(pl, "mad")
  cnv = New MediaControl(pl, "audioconvert")
  scp = New MediaControl(pl, "wavescope")
  scp["style"] = 1         ' "style" è la proprietà del plugin "wavescope", che qui impostiamo a 1
  vid = New MediaControl(pl, "video/x-raw,width=2000,heigth=600,framerate=1" &/ secondi)
  jpg = New MediaFilter(pl, "jpegenc")
  jpg["quality"] = 50      ' "quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50
  snk = New MediaControl(pl, "filesink")
  snk["location"] = primofile
  
' Colleghiamo fra loro all'interno della pipeline gli oggetti MediaControl impostati:
  src.LinkTo(dcd)
  dcd.LinkTo(cnv)
  cnv.LinkTo(scp)
  scp.LinkTo(vid)
  vid.LinkTo(jpg)
  jpg.LinkTo(snk)
   
  pl.Play()
   
  Sleep Val(secondi)
  
  Copy primofile To "/tmp/forma_onda.jpg"
  
  pl.Stop()
  pl.Close()
  
End


Ottenere la forma d'onda di un file FLAC

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, fpa, fde, cnv, scp, vid, jpg, snk As MediaControl
 Dim primofile, secondi As String
  
  primofile = "/tmp/primofile.jpg"
' Imposta la lunghezza in secondi dell'onda audio da ricavare del file audio:
  secondi = "5"
  
  pl = New MediaPipeline
  
  src = New MediaControl(pl, "filesrc")
  src["location"] = "/percorso/del/file.flac"   ' "location" è una proprietà del plugin "filesrc"
  
  fpa = New MediaControl(pl, "flacparse")
  fde = New MediaControl(pl, "flacdec")
  cnv = New MediaControl(pl, "audioconvert")
  scp = New MediaControl(pl, "wavescope")
  scp["style"] = 1         ' "style" è la proprietà del plugin "wavescope", che qui impostiamo a 1
  vid = New MediaControl(pl, "video/x-raw,width=2000,heigth=600,framerate=1" &/ secondi)
  jpg = New MediaFilter(pl, "jpegenc")
  jpg["quality"] = 50      ' "quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50
  snk = New MediaControl(pl, "filesink")
  snk["location"] = primofile
  
' Colleghiamo fra loro all'interno della pipeline gli oggetti MediaControl impostati:
  src.LinkTo(fpa)
  fpa.LinkTo(fde)
  fde.LinkTo(cnv)
  cnv.LinkTo(scp)
  scp.LinkTo(vid)
  vid.LinkTo(jpg)
  jpg.LinkTo(snk)
   
  pl.Play()
   
  Sleep Val(secondi)
  
  Copy primofile To "/tmp/forma_onda.jpg"
  
  pl.Stop()
  pl.Close()
  
End