Ottenere un file audio da un file MIDI mediante il Componente gb.media

Da Gambas-it.org - Wikipedia.

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.

Library "libc:6"

' void exit (int __status)
' Terminate program execution with STATUS.
Private Extern exit_C(i As Integer) As Integer Exec "exit"


Public Sub Main()
 
 Dim pl As MediaPipeline
 Dim src, mprs, fdc, cnv, wenc, snk As MediaControl
 
   pl = New MediaPipeline 
   
   src = New MediaControl(pl, "filesrc")
   src["location"] = "/percorso/del/file.mid"   ' "location" è una proprietà del plugin "filesrc"
   
   mprs = New MediaControl(pl, "midiparse")
   fdc = New MediaControl(pl, "fluiddec")
   cnv = New MediaControl(pl, "audioconvert")
   wenc = New MediaControl(pl, "wavenc")
   alsa = New MediaControl(pl, "alsasink")
   
   src.LinkTo(mprs)
   mprs.LinkTo(fcd)
   fcd.LinkTo(cnv)
   cnv.LinkTo(wenc)
   wenc.LinkTo(snk)
   
   pl.State = Media.Playing
   pl.Play()
   
   Sleep 1
   
   While pl.Duration > pl.Position
     Write #File.Out, "\rDurata: " & Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000) &
                      "    Tempo trascorso: " & Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)
   Wend
   
   exit_C(0)
   
End