Differenze tra le versioni di "Ottenere un file audio da un file MIDI mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 20: Riga 20:
 
   par = New MediaControl(pl, "<FONT color=#B22222>midiparse</font>")
 
   par = New MediaControl(pl, "<FONT color=#B22222>midiparse</font>")
 
   fdc = New MediaControl(pl, "<FONT color=#B22222>fluiddec</font>")
 
   fdc = New MediaControl(pl, "<FONT color=#B22222>fluiddec</font>")
   res = New MediaContainer(pl, "audioresample")
+
   res = New MediaControl(pl, "<FONT color=#B22222>audioresample</font>")
  flt = New MediaFilter(pl, "audio/x-raw,rate=44100")
 
 
   cnv = New MediaControl(pl, "<FONT color=#B22222>audioconvert</font>")
 
   cnv = New MediaControl(pl, "<FONT color=#B22222>audioconvert</font>")
 +
  flt = New MediaFilter(pl, "<FONT color=#B22222>audio/x-raw,rate=44100,channels=2</font>")
 
   vol = New MediaControl(pl, "<FONT color=#B22222>volume</font>")
 
   vol = New MediaControl(pl, "<FONT color=#B22222>volume</font>")
 
   vol["volume"] = 4.0                          <FONT color=gray>' ''"volume" è una proprietà dell'omonimo plugin "volume"''</font>
 
   vol["volume"] = 4.0                          <FONT color=gray>' ''"volume" è una proprietà dell'omonimo plugin "volume"''</font>
Riga 32: Riga 32:
 
   par.LinkTo(fdc)
 
   par.LinkTo(fdc)
 
   fdc.LinkTo(res)
 
   fdc.LinkTo(res)
   res.LinkTo(flt)
+
   res.LinkTo(cnv)
   flt.LinkTo(cnv)
+
   cnv.LinkTo(flt)
   cnv.LinkTo(vol)
+
   flt.LinkTo(vol)
 
   vol.LinkTo(enc)
 
   vol.LinkTo(enc)
 
   enc.LinkTo(snk)
 
   enc.LinkTo(snk)

Versione delle 10:43, 6 lug 2017

Utilizzando i plugin di GStreamer con le Classi MediaControl e MediaPipeline del Componente gb.media, è possibile ottenere un file audio da un file MIDI.

I plugin specifici da utilizzare per il MIDI sono:

  • midiparse: interpreta i file MIDI e li converte in eventi MIDI;
  • fluiddec: effettua il render degli eventi MIDI in campioni audio grezzi.


Mostriamo di seguito un esempio pratico, nel quale si otterrà un file WAV da un file MIDI:

Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, par, fdc, res, cnv, vol, enc, snk As MediaControl
 Dim flt As MediaFilter
  
  pl = New MediaPipeline 
   
  src = New MediaControl(pl, "filesrc")
  src["location"] = "/percorso/del/file.mid"   ' "location" è una proprietà del plugin "filesrc"
  
  par = New MediaControl(pl, "midiparse")
  fdc = New MediaControl(pl, "fluiddec")
  res = New MediaControl(pl, "audioresample")
  cnv = New MediaControl(pl, "audioconvert")
  flt = New MediaFilter(pl, "audio/x-raw,rate=44100,channels=2")
  vol = New MediaControl(pl, "volume")
  vol["volume"] = 4.0                          ' "volume" è una proprietà dell'omonimo plugin "volume"
  enc = New MediaControl(pl, "wavenc")
  snk = New MediaControl(pl, "filesink")
  snk["location"] = "/tmp/audio.wav"           ' "location" è una proprietà del plugin "filesink"
  
  src.LinkTo(par)
  par.LinkTo(fdc)
  fdc.LinkTo(res)
  res.LinkTo(cnv)
  cnv.LinkTo(flt)
  flt.LinkTo(vol)
  vol.LinkTo(enc)
  enc.LinkTo(snk)
  
  pl.Play()
  
  While pl.Duration > pl.Position
    Write "\rDurata: " & Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000) &
          "    Tempo trascorso: " & Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)
  Wend
  
  pl.Stop()
  pl.Close()    

End



Riferimenti