Differenze tra le versioni di "Ottenere un file audio da un file MIDI mediante il Componente gb.media"
Da Gambas-it.org - Wikipedia.
Riga 7: | Riga 7: | ||
Mostriamo di seguito un esempio pratico, nel quale si otterrà un file WAV da un file MIDI: | Mostriamo di seguito un esempio pratico, nel quale si otterrà un file WAV da un file MIDI: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
− | Dim src, | + | Dim src, par, fdc, cnv, enc, snk As MediaControl |
− | + | ||
− | + | pl = New MediaPipeline | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | src = New MediaControl(pl, "<FONT color=#B22222>filesrc</font>") | ||
+ | src["location"] = "<FONT color=gray>''/percorso/del/file.mid''</font>" <FONT color=gray>' ''"location" è una proprietà del plugin "filesrc"''</font> | ||
+ | |||
+ | par = New MediaControl(pl, "<FONT color=#B22222>midiparse</font>") | ||
+ | fdc = New MediaControl(pl, "<FONT color=#B22222>fluiddec</font>") | ||
+ | cnv = New MediaControl(pl, "<FONT color=#B22222>audioconvert</font>") | ||
+ | enc = New MediaControl(pl, "<FONT color=#B22222>wavenc</font>") | ||
+ | snk = New MediaControl(pl, "<FONT color=#B22222>filesink</font>") | ||
+ | snk["location"] = "/tmp/midi.mid" <FONT color=gray>' ''"location" è una proprietà del plugin "filesink"''</font> | ||
+ | |||
+ | src.LinkTo(par) | ||
+ | par.LinkTo(fdc) | ||
+ | fdc.LinkTo(cnv) | ||
+ | cnv.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''' | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | =Riferimenti= | ||
+ | * https://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/random/uraeus/gstreamer_and_midi.txt |
Versione delle 07:41, 1 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, cnv, enc, snk As MediaControl 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") cnv = New MediaControl(pl, "audioconvert") enc = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/midi.mid" ' "location" è una proprietà del plugin "filesink" src.LinkTo(par) par.LinkTo(fdc) fdc.LinkTo(cnv) cnv.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