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 | + | res = New MediaControl(pl, "<FONT color=#B22222>audioresample</font>") |
− | |||
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( | + | res.LinkTo(cnv) |
− | + | cnv.LinkTo(flt) | |
− | + | 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