Differenze tra le versioni di "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.
Riga 2: Riga 2:
  
 
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.
 
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.
 +
Private bo As Boolean
 +
 +
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 8: Riga 11:
 
   Dim flt As MediaFilter
 
   Dim flt As MediaFilter
 
   Dim primofile As String
 
   Dim primofile As String
   
+
  primofile = "/tmp/primofile"
+
  primofile = Temp
 
+
  pl = New MediaPipeline
+
  pl = New MediaPipeline As "PLine"
 
+
 
  src = New MediaControl(pl, "filesrc")
+
  src = New MediaControl(pl, "filesrc")
  src["location"] = "<FONT Color=gray>''/percorso/del/file.wav''</font>"
+
  src["location"] = "<FONT Color=gray>''/percorso/del/file.wav''</font>"
  par = New MediaControl(pl, "wavparse")
+
  par = New MediaControl(pl, "wavparse")
  res = New MediaControl(pl, "audioresample")
+
  res = New MediaControl(pl, "audioresample")
  con1 = New MediaControl(pl, "audioconvert")
+
  con1 = New MediaControl(pl, "audioconvert")
  flt = New MediaFilter(pl, "<FONT Color=#B22222>audio/x-raw,rate=8000,channels=1,format=S8</font>")
+
  flt = New MediaFilter(pl, "<FONT Color=#B22222>audio/x-raw,rate=8000,channels=1,format=S8</font>")
  con2 = New MediaControl(pl, "audioconvert")
+
  con2 = New MediaControl(pl, "audioconvert")
  enc = New MediaControl(pl, "wavenc")
+
  enc = New MediaControl(pl, "wavenc")
  snk = New MediaControl(pl, "filesink")
+
  snk = New MediaControl(pl, "filesink")
  snk["location"] = primofile
+
  snk["location"] = primofile
 
+
  src.LinkTo(par)
+
  src.LinkTo(par)
  par.LinkTo(res)
+
  par.LinkTo(res)
  res.LinkTo(con1)
+
  res.LinkTo(con1)
  con1.LinkTo(flt)
+
  con1.LinkTo(flt)
  flt.LinkTo(con2)
+
  flt.LinkTo(con2)
  con2.LinkTo(enc)
+
  con2.LinkTo(enc)
  enc.LinkTo(snk)
+
  enc.LinkTo(snk)
 
+
  pl.Play()
+
  pl.Play()
  Write #File.Out, "\e[31m\e[5mAttendere: conversione in atto...\e[0m"
+
  Flush #File.Out
+
  Repeat
  Sleep (pl.Duration / 60) * 2
+
    Write "\r\e[31m\e[5mAttendere: conversione in atto...\e[0m"
 
+
    Wait 0.01
  pl.Stop()
+
  Until bo
  pl.Close()
+
  Copy primofile To "/tmp/nuovo_audio.wav"
+
  pl.Stop()
  Write "\r\e[0mConversione terminata            "
+
  pl.Close()
 
+
 +
  Copy primofile To "/tmp/nuovo_audio.wav"
 +
  Write "\r\e[0mConversione terminata            "
 +
 
 +
'''End'''
 +
 +
'''Public''' Sub PLine_End()  <FONT Color=gray>' ''Questo Evento viene sollevato, quando la conversione è terminata''</font>
 +
 +
  bo = True
 +
 
  '''End'''
 
  '''End'''

Versione delle 21:37, 15 set 2022

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.

Private bo As Boolean


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 = Temp

 pl = New MediaPipeline As "PLine"
 
 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()

 Repeat 
   Write "\r\e[31m\e[5mAttendere: conversione in atto...\e[0m"
   Wait 0.01
 Until bo

 pl.Stop()
 pl.Close()

 Copy primofile To "/tmp/nuovo_audio.wav"
 Write "\r\e[0mConversione terminata             "
 
End

Public Sub PLine_End()  ' Questo Evento viene sollevato, quando la conversione è terminata

 bo = True

End