Estrarre una traccia di un CD audio convertendola in un file WAV con il Componente gb.media
Indice
Uso del plugin cdiocddasrc
Per estrarre una traccia di un CD audio e convertirla conseguentemente in un file WAV mediante il Componente gb.media, è possibile utilizzare il plugin "cdiocddasrc" di GStreamer.
Mostriamo un semplice esempio pratico:
Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, enc, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "cdiocddasrc") src["track"] = 10 cnv = New MediaControl(pl, "audioconvert") enc = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/audio.wav" src.LinkTo(cnv) cnv.LinkTo(enc) enc.LinkTo(snk) ' Avvia la procedura di estrazione dei dati audio della traccia e della successiva conversione nel file WAV: 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
Per impostare preliminarmente i valori della frequenza di campionamento (rate) e dei canali, che il file WAV assumerà, si può operare come segue:
Private pl As MediaPipeline Public Sub Form_Open() Dim src, cnv, res, enc, 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") ' Imposta la frequenza di campionamento ed il numero dei canali del file audio WAV che sarà creato: flt = New MediaFilter(pl, "audio/x-raw,rate=11025,channels=2") enc = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/audio.wav" src.LinkTo(cnv) cnv.LinkTo(res) res.LinkTo(flt) flt.LinkTo(enc) enc.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
Impostazione della frequenza di campionamento (rate) e dei canali, nonché modifica della tonalità e del tempo di esecuzione
Mediante l'uso del plugin "pitch" è possibile impostare preliminarmente anche i valori della tonalità e del tempo di esecuzione che il file WAV assumerà, 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, pit, enc, 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") ' Imposta la frequenza di campionamento ed il numero dei canali del file audio WAV che sarà creato: flt = New MediaFilter(pl, "audio/x-raw,rate=11025,channels=2") pit = New MediaControl(pl, "pitch") pit["pitch"] = 0.9 pit["tempo"] = 1.1 enc = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/audio.wav" src.LinkTo(cnv) cnv.LinkTo(res) res.LinkTo(flt) flt.LinkTo(pit) pit.LinkTo(enc) enc.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 plugin cdparanoiasrc
Analogamente possiamo utilizzare anche il plugin "cdparanoiasrc" di GStreamer.
Mostriamo un semplice esempio pratico:
Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, enc, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "cdparanoiasrc") src["track"] = 10 cnv = New MediaControl(pl, "audioconvert") enc = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/audio.wav" src.LinkTo(cnv) cnv.LinkTo(enc) enc.LinkTo(snk) ' Avvia la procedura di estrazione dei dati audio della traccia e della successiva conversione nel file WAV: 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 pl.Stop() pl.Close() End
Per l'impostazione dei valori della frequenza di campionamento (rate) e dei canali, nonché della tonalità e del tempo di esecuzione, che il file WAV assumerà, il codice avrà la medesima costituzione di quello visto appena sopra per il plugin cdiocddasrc.