Differenze tra le versioni di "Duplicare il flusso dei dati audio di una pipeline della Classe ''MediaPipeline'' del componente gb.media"
Da Gambas-it.org - Wikipedia.
Riga 4: | Riga 4: | ||
Vediamo di seguito un esempio pratico utilizzando un file audio di tipo WAV. In questo esempio le due ramificazioni del flusso di dati audio resteranno indipendenti sino alla fine, ossia sino al loro invio all'elemento di riproduzione audio. | Vediamo di seguito un esempio pratico utilizzando un file audio di tipo WAV. In questo esempio le due ramificazioni del flusso di dati audio resteranno indipendenti sino alla fine, ossia sino al loro invio all'elemento di riproduzione audio. | ||
+ | Private bo As Boolean | ||
+ | |||
+ | |||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
Riga 11: | Riga 14: | ||
Dim vor2, cnv2, res2, pan2, pit, snk2 As MediaControl | Dim vor2, cnv2, res2, pan2, pit, snk2 As MediaControl | ||
− | pl = New MediaPipeline | + | pl = New MediaPipeline As "PLine" |
src = New MediaControl(pl, "filesrc") | src = New MediaControl(pl, "filesrc") | ||
Riga 26: | Riga 29: | ||
vol["volume"] = 0.5 | vol["volume"] = 0.5 | ||
snk = New MediaControl(pl, "autoaudiosink") | snk = New MediaControl(pl, "autoaudiosink") | ||
− | + | ||
vor2 = New MediaControl(pl, "wavparse") | vor2 = New MediaControl(pl, "wavparse") | ||
cnv2 = New MediaControl(pl, "audioconvert") | cnv2 = New MediaControl(pl, "audioconvert") | ||
Riga 38: | Riga 41: | ||
<FONT Color=gray>' ''Il flusso dei dati audio viene diviso in due rami:''</font> | <FONT Color=gray>' ''Il flusso dei dati audio viene diviso in due rami:''</font> | ||
src.LinkTo(<FONT Color=#B22222>tee</font>) | src.LinkTo(<FONT Color=#B22222>tee</font>) | ||
− | + | ||
<FONT Color=gray>' ''1° ramo dei dati audio:''</font> | <FONT Color=gray>' ''1° ramo dei dati audio:''</font> | ||
<FONT Color=#B22222>tee</font>.LinkTo(que) | <FONT Color=#B22222>tee</font>.LinkTo(que) | ||
Riga 47: | Riga 50: | ||
pan.LinkTo(vol) | pan.LinkTo(vol) | ||
vol.LinkTo(snk) | vol.LinkTo(snk) | ||
− | + | ||
<FONT Color=gray>' ''2° ramo dei dati audio:''</font> | <FONT Color=gray>' ''2° ramo dei dati audio:''</font> | ||
<FONT Color=#B22222>tee</font>.LinkTo(vor2) | <FONT Color=#B22222>tee</font>.LinkTo(vor2) | ||
Riga 55: | Riga 58: | ||
pan2.LinkTo(pit) | pan2.LinkTo(pit) | ||
pit.LinkTo(snk2) | pit.LinkTo(snk2) | ||
− | + | ||
pl.Play() | pl.Play() | ||
− | + | ||
− | + | Repeat | |
− | Write "\rTempo: " & | + | Write "\rTempo Trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) |
− | Wait 0. | + | Wait 0.01 |
− | + | Until bo | |
− | + | ||
pl.Stop() | pl.Stop() | ||
pl.Close() | pl.Close() | ||
− | + | ||
+ | '''End''' | ||
+ | |||
+ | '''Public''' Sub PLine_End() | ||
+ | |||
+ | bo = True | ||
+ | |||
'''End''' | '''End''' |
Versione delle 07:55, 23 set 2022
Duplicando il flusso dei dati audio di un Oggetto pipeline della Classe MediaPipeline del componente gb.media, si ottiene una sorta di ramificazione del flusso che consente di gestire ciascun flusso di dati audio in modo del tutto autonomo.
La duplicazione del flusso audio principale è compiuta con l'elemento "Tee".
Vediamo di seguito un esempio pratico utilizzando un file audio di tipo WAV. In questo esempio le due ramificazioni del flusso di dati audio resteranno indipendenti sino alla fine, ossia sino al loro invio all'elemento di riproduzione audio.
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src, tee, que As MediaControl Dim vor, cnv, res, pan, vol, snk As MediaControl Dim vor2, cnv2, res2, pan2, pit, snk2 As MediaControl pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "filesrc") src["location"] = "/percorso/del/file/audio.wav" tee = New MediaControl(pl, "tee") que = New MediaControl(pl, "queue") vor = New MediaControl(pl, "wavparse") cnv = New MediaControl(pl, "audioconvert") res = New MediaControl(pl, "audioresample") pan = New MediaControl(pl, "audiopanorama") pan["panorama"] = 1.00 ' Pan a destra vol = New MediaControl(pl, "volume") vol["volume"] = 0.5 snk = New MediaControl(pl, "autoaudiosink") vor2 = New MediaControl(pl, "wavparse") cnv2 = New MediaControl(pl, "audioconvert") res2 = New MediaControl(pl, "audioresample") pan2 = New MediaControl(pl, "audiopanorama") pan2["panorama"] = -1.00 ' Pan a sinistra pit = New MediaControl(pl, "pitch") pit["pitch"] = 0.8 snk2 = New MediaControl(pl, "autoaudiosink") ' Il flusso dei dati audio viene diviso in due rami: src.LinkTo(tee) ' 1° ramo dei dati audio: tee.LinkTo(que) que.LinkTo(vor) vor.LinkTo(cnv) cnv.LinkTo(res) res.LinkTo(pan) pan.LinkTo(vol) vol.LinkTo(snk) ' 2° ramo dei dati audio: tee.LinkTo(vor2) vor2.LinkTo(cnv2) cnv2.LinkTo(res2) res2.LinkTo(pan2) pan2.LinkTo(pit) pit.LinkTo(snk2) pl.Play() Repeat Write "\rTempo Trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) Wait 0.01 Until bo pl.Stop() pl.Close() End Public Sub PLine_End() bo = True End