Differenze tra le versioni di "Ottenere la forma d'onda del risultato audio di un file MIDI mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 31: Riga 31:
 
     scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
     scp = New MediaControl(pl, "<FONT Color=#B22222>wavescope</font>")
 
     scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
 
     scp["<FONT Color=#B22222>style</font>"] = 1        <FONT Color=gray>' ''"style" è la proprietà del plugin "wavescope", che qui impostiamo a 1''</font>
     vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate=1/</font><FONT Color=gray>''durata_del_file_Midi_in_secondi''</font>")
+
     vid = New MediaControl(pl, "<FONT Color=#B22222>video/x-raw</font>,<FONT Color=#B22222>width=2000</font>,<FONT Color=#B22222>heigth=600</font>,<FONT Color=#B22222>framerate='''1'''/</font><FONT Color=darkgreen>'''''durata_del_file_Midi_in_secondi'''''</font>")
 
     jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
     jpg = New MediaFilter(pl, "<FONT Color=#B22222>jpegenc</font>")
 
     jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
 
     jpg["<FONT Color=#B22222>quality</font>"] = 50      <FONT Color=gray>' ''"quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50''</font>
Riga 40: Riga 40:
 
          
 
          
 
     src.LinkTo(mprs)
 
     src.LinkTo(mprs)
     mprs.LinkTo(fcd)
+
     mprs.LinkTo(fdc)
     fcd.LinkTo(cnv)
+
     fdc.LinkTo(cnv)
     cnv.LinkTo(wenc)
+
     cnv.LinkTo(scp)
     wenc.LinkTo(snk)
+
     scp.LinkTo(vid)
 +
    vid.LinkTo(jpg)
 +
    jpg.LinkTo(snk)
 
      
 
      
 
     pl.State = Media.Playing
 
     pl.State = Media.Playing

Versione delle 20:11, 22 ott 2016

Utilizzando i plugin di GStreamer con le Classi MediaControl e MediaPipeline del Componente gb.media, è possibile ottenere la forma d'onda del risultato audio di 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.

In sostanza, dopo aver ottenuto i campioni audio dalla conversione di un file MIDI, si potrà salvare in un file immagine di tipo JPEG la forma d'onda di tali campioni audio.


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, scp, vid, jpg, 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")
   scp = New MediaControl(pl, "wavescope")
   scp["style"] = 1         ' "style" è la proprietà del plugin "wavescope", che qui impostiamo a 1
   vid = New MediaControl(pl, "video/x-raw,width=2000,heigth=600,framerate=1/durata_del_file_Midi_in_secondi")
   jpg = New MediaFilter(pl, "jpegenc")
   jpg["quality"] = 50      ' "quality" è la proprietà del plugin "jpegenc", che qui impostiamo a 50
   snk = New MediaControl(pl, "filesink")
   snk["location"] = "/tmp/forma_onda.jpg"
  
' Colleghiamo fra loro all'interno della pipeline gli oggetti MediaControl impostati:
       
   src.LinkTo(mprs)
   mprs.LinkTo(fdc)
   fdc.LinkTo(cnv)
   cnv.LinkTo(scp)
   scp.LinkTo(vid)
   vid.LinkTo(jpg)
   jpg.LinkTo(snk)
   
   pl.State = Media.Playing
   pl.Play()
   
   Sleep 5
   
   exit_C(0)
   
End