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

Da Gambas-it.org - Wikipedia.
(Creata pagina con "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 p...")
 
Riga 45: Riga 45:
 
                       "    Tempo trascorso: " & Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)
 
                       "    Tempo trascorso: " & Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)
 
     Wend
 
     Wend
 +
   
 +
    exit_C(0)
 
      
 
      
 
  '''End'''
 
  '''End'''

Versione delle 06:59, 29 set 2016

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