Eseguire una traccia di un CD audio mediante le risorse del Componente gb.media
E' possibile eseguire una traccia di un CD audio mediante il Componente gb.media di Gambas, utilizzando alcune sue risorse.
Indice
Uso della sola Classe MediaPlayer
L'utilizzo della sola Classe MediaPipeline del Componente gb.media prevede l'uso del plug-in "playbin"
Mostriamo un semplice esempio, nel quale imposteremo l'esecuzione della traccia num. 10 del CD audio:
Private bo As Boolean Public Sub Main() Dim mp As MediaPlayer With mp = New MediaPlayer .URL = "cdda://10" .Play End With Do ' Mostra in console la posizione, espressa in secondi, all'interno dei dati audio processati: Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000)) Wait 0.01 Loop Until (mp.Position >= mp.Duration) Or (bo = True) mp.Stop Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera, si arresta il programma bo = True End
Uso della sola Classe MediaPipeline
L'utilizzo della sola Classe MediaPipeline del Componente gb.media prevede l'uso del plug-in "playbin".
Mostriamo un semplice esempio, nel quale imposteremo l'esecuzione della traccia num. 10 del CD audio:
Public Sub Main() Dim pl As MediaPipeline pl = New MediaPipeline(Null, "playbin") pl["uri"] = "cdda://10" pl.Play() Do ' Mostra in console la posizione, espressa in secondi, all'interno dei dati audio processati: Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)) Wait 0.01 Loop Until (pl.Position >= pl.Duration) End
Uso della Classe MediaPipeline e della Classe MediaControl
L'esecuzione di una traccia può essere effettuata anche utilizzando le Classi MediaPipeline e MediaControl del Componente gb.media.
Uso del plug-in "playbin"
E' possibile utilizzare il plug-in "playbin" per la letura ed esecuzione della traccia audio prescelta.
Mostriamo un semplice esempio, nel quale imposteremo l'esecuzione della traccia num. 10 del CD audio:
Public Sub Main() Dim pl As MediaPipeline Dim src As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "playbin") src["uri"] = "cdda://10" pl.Play() Do ' Mostra in console la posizione, espressa in secondi, all'interno dei dati audio processati: Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)) Wait 0.01 Loop Until (pl.Position >= pl.Duration) End
Uso del plug-in "cdiocddasrc"
Volendo evitare il plug-in playbin, è possibile utilizzare il plug-in "cdiocddasrc" per la lettura ed esecuzione della traccia audio prescelta.
Mostriamo un semplice esempio, nel quale imposteremo l'esecuzione della traccia num. 10 del CD audio:
Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "cdiocddasrc") src["track"] = 10 cnv = New MediaControl(pl, "audioconvert") snk = New MediaControl(pl, "alsasink") src.LinkTo(cnv) cnv.LinkTo(snk) pl.Play() Do ' Mostra in console la posizione, espressa in secondi, all'interno dei dati audio processati: Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)) Wait 0.01 Loop Until (pl.Position >= pl.Duration) pl.Stop() pl.Close() End
Impostazione della frequenza di campionamento (rate) e dei canali, nonché modifica della tonalità e del tempo di esecuzione
E' possibile impostare i valori della frequenza di campionamento (rate) e dei canali, nonché modificare la tonalità e il tempo di esecuzione. Quest'ultime due impostazione verranno effettuate con il plugin "pitch", considerando che:
- per impostare la tonalità si userà l'omonima proprietà "pitch": il valore di partenza predefinito è 1.0;
- per impostare la velocità del tempo di esecuzione si userà la proprietà "tempo": il valore di partenza predefinito è 1.0.
Private pl As MediaPipeline Public Sub Form_Open() Dim src, cnv, res, enc, pit, cnv2, snk As MediaControl Dim flt As MediaFilter pl = New MediaPipeline src = New MediaControl(pl, "cdiocddasrc") src["track"] = 2 cnv = New MediaControl(pl, "audioconvert") res = New MediaControl(pl, "audioresample") flt = New MediaFilter(pl, "audio/x-raw,rate=44100,channels=2") pit = New MediaControl(pl, "pitch") pit["pitch"] = 0.9 pit["tempo"] = 1.1 cnv2 = New MediaControl(pl, "audioconvert") snk = New MediaControl(pl, "alsasink") src.LinkTo(cnv) cnv.LinkTo(res) res.LinkTo(flt) flt.LinkTo(pit) pit.LinkTo(cnv2) cnv2.LinkTo(snk) End Public Sub Button1_Click() pl.Play() Do Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)) Wait 0.01 Loop Until (pl.Position >= pl.Duration) End Public Sub Button2_Click() pl.Stop() pl.Close() End
Uso del plug-in "cdparanoiasrc"
E' possibile anche utilizzare il plug-in "cdparanoiasrc" per la lettura ed esecuzione della traccia audio prescelta.
Mostriamo un semplice esempio, nel quale imposteremo l'esecuzione della traccia num. 10 del CD audio:
Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "cdparanoiasrc") src["track"] = 10 cnv = New MediaControl(pl, "audioconvert") snk = New MediaControl(pl, "alsasink") src.LinkTo(cnv) cnv.LinkTo(snk) pl.Play() Do ' Mostra in console la posizione, espressa in secondi, all'interno dei dati audio processati: Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, pl.Position * 1000)) Wait 0.01 Loop Until (pl.Position >= pl.Duration) pl.Stop() pl.Close() End
Uso delle Classi MediaPlayer e MediaControl e del plug-in jackaudiosink
L'uso delle Classi MediaPlayer e MediaControl e del plug-in jackaudiosink richiede che sia preliminarmente avviato il programma server Jack.
Mostriamo un esempio questa volta in ambiente grafico:
Private bo As Boolean Public Sub Form_Open() Dim mp As MediaPlayer Dim usc As MediaControl Me.Show With mp = New MediaPlayer .URL = "cdda://10" End With usc = New MediaControl(mp, "jackaudiosink") mp.Audio.Output = usc mp.Play() Do ' Mostra in console la posizione, espressa in secondi, all'interno dei dati audio processati: Write #File.Out, "\rDurata del brano: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Duration * 1000)) & " - Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000)) Wait 0.01 Loop Until (mp.Position >= mp.Duration) Or (bo = True) mp.Stop Me.Close End Public Sub Button1_Click() bo = True End