Ottenere la forma d'onda del risultato audio di un file MIDI mediante il Componente gb.media
Da Gambas-it.org - Wikipedia.
Versione del 17 gen 2024 alle 18:53 di Vuott (Discussione | contributi)
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:
Public Sub Main() Dim pl As MediaPipeline Dim src, mprs, fdc, cnv, scp, jpg, snk As MediaControl Dim flt As MediaFilter Dim secondi As String ' Imposta la lunghezza in secondi dell'onda audio da ricavare del file Midi: secondi = "5" pl = New MediaPipeline src = New MediaControl(pl, "filesrc") src["location"] = "/percorso/del/file.mid" 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 flt = New MediaFilter(pl, "video/x-raw,width=2000,heigth=600,framerate=1" &/ secondi) jpg = New MediaControl(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" ' Collega fra loro all'interno della pipeline gli Oggetti MediaControl impostati: src.LinkTo(mprs) mprs.LinkTo(fdc) fdc.LinkTo(cnv) cnv.LinkTo(scp) scp.LinkTo(flt) flt.LinkTo(jpg) jpg.LinkTo(snk)
pl.Play()
Wait Val(secondi) pl.Stop() pl.Close()
End