Differenze tra le versioni di "Eseguire una traccia di un CD audio mediante le risorse del Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 124: Riga 124:
 
* per impostare la tonalità si userà l'omonima proprietà "pitch": il valore di partenza predefinito è 1.0;
 
* 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.
 
* per impostare la velocità del tempo di esecuzione si userà la proprietà "tempo": il valore di partenza predefinito è 1.0.
 +
 +
Nell'esempio che segue sarà possibile modificare in "''tempo reale''" i valori della tonalità e del tempo mediante due ''Slider'':
 
  Private pl As MediaPipeline
 
  Private pl As MediaPipeline
 +
Private pit As MediaControl
 +
Private pitch As Float = 1.00
 +
Private tempo As Float = 1.00
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
    
 
    
   Dim src, cnv, res, enc, pit, cnv2, snk As MediaControl
+
   Dim src, cnv, res, enc, cnv2, snk As MediaControl
 
   Dim flt As MediaFilter
 
   Dim flt As MediaFilter
 
    
 
    
Riga 151: Riga 156:
 
   pit.LinkTo(cnv2)
 
   pit.LinkTo(cnv2)
 
   cnv2.LinkTo(snk)
 
   cnv2.LinkTo(snk)
 +
 
 +
<FONT Color=gray>' ''Imposta alcuni valori dei due "Slider":''</font>
 +
  With Slider1
 +
    .MinValue = 0
 +
    .MaxValue = 1000
 +
    .Value = 100
 +
  End With
 +
 
 +
  With Slider2
 +
    .MinValue = 0
 +
    .MaxValue = 1000
 +
    .Value = 100
 +
  End With
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 171: Riga 189:
 
   pl.Stop()
 
   pl.Stop()
 
   pl.Close()
 
   pl.Close()
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub Slider1_Change()
 +
 
 +
  pitch = Slider1.Value / 100
 +
  pit["pitch"] = pitch
 +
  ValueBox1.Value = pitch
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub Slider2_Change()
 +
 
 +
  tempo = Slider2.Value / 100
 +
  pit["tempo"] = tempo
 +
  ValueBox2.Value = tempo
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 18:49, 30 giu 2017

E' possibile eseguire una traccia di un CD audio mediante il Componente gb.media di Gambas, utilizzando alcune sue risorse.


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.

Nell'esempio che segue sarà possibile modificare in "tempo reale" i valori della tonalità e del tempo mediante due Slider:

Private pl As MediaPipeline
Private pit As MediaControl
Private pitch As Float = 1.00
Private tempo As Float = 1.00


Public Sub Form_Open()
 
 Dim src, cnv, res, enc, 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)
  
' Imposta alcuni valori dei due "Slider":
  With Slider1
    .MinValue = 0
    .MaxValue = 1000
    .Value = 100
  End With
 
  With Slider2
    .MinValue = 0
    .MaxValue = 1000
    .Value = 100
  End With
  
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


Public Sub Slider1_Change()
 
 pitch = Slider1.Value / 100
 pit["pitch"] = pitch
 ValueBox1.Value = pitch
  
End


Public Sub Slider2_Change()
 
 tempo = Slider2.Value / 100
 pit["tempo"] = tempo
 ValueBox2.Value = tempo
  
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


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.


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