https://foro.gambas-es.org/show_post.php?p=39354
he realizado este pequeño y simplicisimo ecualizador por 10 bandas con los recursos del Componente gb.media.
Este simple ejemplo puede ser usado para ejecutar solo archivos audio WAV y MP3.
Private dl As Dial
Private dd As New Dial[]
Private llcc As New LCDLabel[]
Private tb As ToggleButton
Private pl As MediaPipeline
Private equ As MediaControl
Public Sub Form_Open()
Dim b As Byte
Dim lcd As LCDLabel
Dim src, dcd, con, snk As MediaControl
Dim audio, ext As String
audio = "/ruta/del/archivo/audio"
With Me
.W = 700
.H = 200
End With
For b = 0 To 9
With dl = New Dial(Me) As "Dl"
.X = (b + 1) * 60
.Y = 100
.W = 60
.H = 60
.MaxValue = 12.00
.MinValue = -24.00
.Value = 0
.Name = CStr(b)
.Background = Color.Black
End With
dd.Push(dl)
With lcd = New LCDLabel(Me)
.X = (b + 1) * 60
.Y = 60
.W = 60
.H = 20
.Alignment = Align.Center
.Foreground = Color.Yellow
.Value = 0.00
.Background = Color.Black
End With
llcc.Push(lcd)
Next
With tb = New ToggleButton(Me) As "Toggle"
.X = 16
.Y = 100
.W = 30
.H = 60
.Font.Size = 18
.Font.Bold = True
.Foreground = Color.Red
.Text = String.Chr(&23E3)
End With
Select Case File.Ext(audio)
Case "wav"
ext = "wavparse"
Case "mp3"
ext = "mad"
End Select
pl = New MediaPipeline
src = New MediaControl(pl, "filesrc")
src["location"] = audio
dcd = New MediaControl(pl, ext)
con = New MediaControl(pl, "audioconvert")
equ = New MediaControl(pl, "equalizer-10bands")
snk = New MediaControl(pl, "alsasink")
src.LinkTo(dcd)
dcd.LinkTo(con)
con.LinkTo(equ)
equ.LinkTo(snk)
End
Public Sub Dl_Change()
If pl.State <> Media.Playing Then Return
equ["band" & Last.Name] = Last.Value
llcc[Val(Last.Name)].Value = Last.Value
End
Public Sub Toggle_Click()
Dim d As Dial
Dim lc As LCDLabel
If tb.Value Then
tb.Foreground = Color.Green
pl.Play()
Else
tb.Foreground = Color.Red
pl.Stop()
For Each d In dd
d.Value = 0
Next
For Each lc In llcc
lc.Value = 0
Next
Endif
End
Private dd As New Dial[]
Private llcc As New LCDLabel[]
Private tb As ToggleButton
Private pl As MediaPipeline
Private equ As MediaControl
Public Sub Form_Open()
Dim b As Byte
Dim lcd As LCDLabel
Dim src, dcd, con, snk As MediaControl
Dim audio, ext As String
audio = "/ruta/del/archivo/audio"
With Me
.W = 700
.H = 200
End With
For b = 0 To 9
With dl = New Dial(Me) As "Dl"
.X = (b + 1) * 60
.Y = 100
.W = 60
.H = 60
.MaxValue = 12.00
.MinValue = -24.00
.Value = 0
.Name = CStr(b)
.Background = Color.Black
End With
dd.Push(dl)
With lcd = New LCDLabel(Me)
.X = (b + 1) * 60
.Y = 60
.W = 60
.H = 20
.Alignment = Align.Center
.Foreground = Color.Yellow
.Value = 0.00
.Background = Color.Black
End With
llcc.Push(lcd)
Next
With tb = New ToggleButton(Me) As "Toggle"
.X = 16
.Y = 100
.W = 30
.H = 60
.Font.Size = 18
.Font.Bold = True
.Foreground = Color.Red
.Text = String.Chr(&23E3)
End With
Select Case File.Ext(audio)
Case "wav"
ext = "wavparse"
Case "mp3"
ext = "mad"
End Select
pl = New MediaPipeline
src = New MediaControl(pl, "filesrc")
src["location"] = audio
dcd = New MediaControl(pl, ext)
con = New MediaControl(pl, "audioconvert")
equ = New MediaControl(pl, "equalizer-10bands")
snk = New MediaControl(pl, "alsasink")
src.LinkTo(dcd)
dcd.LinkTo(con)
con.LinkTo(equ)
equ.LinkTo(snk)
End
Public Sub Dl_Change()
If pl.State <> Media.Playing Then Return
equ["band" & Last.Name] = Last.Value
llcc[Val(Last.Name)].Value = Last.Value
End
Public Sub Toggle_Click()
Dim d As Dial
Dim lc As LCDLabel
If tb.Value Then
tb.Foreground = Color.Green
pl.Play()
Else
tb.Foreground = Color.Red
pl.Stop()
For Each d In dd
d.Value = 0
Next
For Each lc In llcc
lc.Value = 0
Next
Endif
End