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

Versione attuale delle 18:03, 17 gen 2024

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

 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"] = "/tmp/nuovo_file.wav"

 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()

 Write "\r\e[0mConversione terminata             "
 
End

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

 bo = True

End