add preamp to EQ

This commit is contained in:
Drew Weymouth
2023-06-24 13:22:11 -07:00
parent 59be258e89
commit 2d38a0712c
7 changed files with 46 additions and 9 deletions
+1
View File
@@ -186,6 +186,7 @@ func (a *App) setupMPV() error {
a.Player.SetAudioExclusive(a.Config.LocalPlayback.AudioExclusive) a.Player.SetAudioExclusive(a.Config.LocalPlayback.AudioExclusive)
eq := &player.ISO15BandEqualizer{ eq := &player.ISO15BandEqualizer{
EQPreamp: a.Config.LocalPlayback.EqualizerPreamp,
Disabled: !a.Config.LocalPlayback.EqualizerEnabled, Disabled: !a.Config.LocalPlayback.EqualizerEnabled,
} }
copy(eq.BandGains[:], a.Config.LocalPlayback.GraphicEqualizerBands) copy(eq.BandGains[:], a.Config.LocalPlayback.GraphicEqualizerBands)
+2
View File
@@ -75,6 +75,7 @@ type LocalPlaybackConfig struct {
InMemoryCacheSizeMB int InMemoryCacheSizeMB int
Volume int Volume int
EqualizerEnabled bool EqualizerEnabled bool
EqualizerPreamp float64
GraphicEqualizerBands []float64 GraphicEqualizerBands []float64
} }
@@ -158,6 +159,7 @@ func DefaultConfig(appVersionTag string) *Config {
InMemoryCacheSizeMB: 30, InMemoryCacheSizeMB: 30,
Volume: 100, Volume: 100,
EqualizerEnabled: false, EqualizerEnabled: false,
EqualizerPreamp: 0,
GraphicEqualizerBands: make([]float64, 15), GraphicEqualizerBands: make([]float64, 15),
}, },
Scrobbling: ScrobbleConfig{ Scrobbling: ScrobbleConfig{
+6
View File
@@ -10,6 +10,7 @@ import (
type Equalizer interface { type Equalizer interface {
IsEnabled() bool IsEnabled() bool
Preamp() float64
Curve() EqualizerCurve Curve() EqualizerCurve
Type() string Type() string
// Returns the band frequencies as strings friendly for display // Returns the band frequencies as strings friendly for display
@@ -18,6 +19,7 @@ type Equalizer interface {
type ISO15BandEqualizer struct { type ISO15BandEqualizer struct {
Disabled bool Disabled bool
EQPreamp float64
BandGains [15]float64 BandGains [15]float64
} }
@@ -32,6 +34,10 @@ func (i *ISO15BandEqualizer) IsEnabled() bool {
return !i.Disabled return !i.Disabled
} }
func (i *ISO15BandEqualizer) Preamp() float64 {
return i.EQPreamp
}
func (i *ISO15BandEqualizer) Curve() EqualizerCurve { func (i *ISO15BandEqualizer) Curve() EqualizerCurve {
fC := float64(25) fC := float64(25)
curve := make([]EqualizerBand, 0, len(i.BandGains)) curve := make([]EqualizerBand, 0, len(i.BandGains))
+12 -1
View File
@@ -5,6 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"log" "log"
"math"
"strconv" "strconv"
"github.com/dweymouth/go-mpv" "github.com/dweymouth/go-mpv"
@@ -507,7 +508,17 @@ func (p *Player) SetEqualizer(eq Equalizer) error {
if eq == nil || !eq.IsEnabled() { if eq == nil || !eq.IsEnabled() {
return p.mpv.SetPropertyString("af", "") return p.mpv.SetPropertyString("af", "")
} }
return p.mpv.SetPropertyString("af", eq.Curve().String()) af := ""
if math.Abs(eq.Preamp()) > 0.01 {
af = fmt.Sprintf("volume=volume=%0.1fdB", eq.Preamp())
}
eqAF := eq.Curve().String()
if af == "" {
af = eqAF
} else if eqAF != "" {
af = fmt.Sprintf("%s,%s", af, eqAF)
}
return p.mpv.SetPropertyString("af", af)
} }
func (p *Player) Equalizer() Equalizer { func (p *Player) Equalizer() Equalizer {
+1
View File
@@ -464,6 +464,7 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
// currently we only have one equalizer type // currently we only have one equalizer type
eq := c.App.Player.Equalizer().(*player.ISO15BandEqualizer) eq := c.App.Player.Equalizer().(*player.ISO15BandEqualizer)
eq.Disabled = !c.App.Config.LocalPlayback.EqualizerEnabled eq.Disabled = !c.App.Config.LocalPlayback.EqualizerEnabled
eq.EQPreamp = c.App.Config.LocalPlayback.EqualizerPreamp
copy(eq.BandGains[:], c.App.Config.LocalPlayback.GraphicEqualizerBands) copy(eq.BandGains[:], c.App.Config.LocalPlayback.GraphicEqualizerBands)
c.App.Player.SetEqualizer(eq) c.App.Player.SetEqualizer(eq)
} }
+15 -5
View File
@@ -15,19 +15,20 @@ type GraphicEqualizer struct {
widget.BaseWidget widget.BaseWidget
OnChanged func(band int, gain float64) OnChanged func(band int, gain float64)
OnPreampChanged func(gain float64)
container *fyne.Container container *fyne.Container
} }
func NewGraphicEqualizer(bandFreqs []string, bandGains []float64) *GraphicEqualizer { func NewGraphicEqualizer(preamp float64, bandFreqs []string, bandGains []float64) *GraphicEqualizer {
g := &GraphicEqualizer{} g := &GraphicEqualizer{}
g.ExtendBaseWidget(g) g.ExtendBaseWidget(g)
g.buildSliders(bandFreqs, bandGains) g.buildSliders(preamp, bandFreqs, bandGains)
return g return g
} }
func (g *GraphicEqualizer) buildSliders(bands []string, bandGains []float64) { func (g *GraphicEqualizer) buildSliders(preamp float64, bands []string, bandGains []float64) {
rng := container.NewVBox( rng := container.NewVBox(
newCaptionTextSizeLabel("+12", fyne.TextAlignTrailing), newCaptionTextSizeLabel("+12", fyne.TextAlignTrailing),
layout.NewSpacer(), layout.NewSpacer(),
@@ -35,7 +36,16 @@ func (g *GraphicEqualizer) buildSliders(bands []string, bandGains []float64) {
layout.NewSpacer(), layout.NewSpacer(),
newCaptionTextSizeLabel("-12", fyne.TextAlignTrailing), newCaptionTextSizeLabel("-12", fyne.TextAlignTrailing),
) )
bandSliders := container.New(layouts.NewGridLayoutWithColumnsAndPadding(16, -16)) bandSliders := container.New(layouts.NewGridLayoutWithColumnsAndPadding(len(bands)+2, -16))
pre := newCaptionTextSizeLabel("Pre", fyne.TextAlignCenter)
preampSlider := newEQSlider()
preampSlider.SetValue(preamp)
preampSlider.OnChanged = func(f float64) {
if g.OnPreampChanged != nil {
g.OnPreampChanged(f)
}
}
bandSliders.Add(container.NewBorder(nil, pre, nil, nil, preampSlider))
bandSliders.Add(container.NewBorder(nil, widget.NewLabel(""), nil, nil, rng)) bandSliders.Add(container.NewBorder(nil, widget.NewLabel(""), nil, nil, rng))
for i, band := range bands { for i, band := range bands {
s := newEQSlider() s := newEQSlider()
@@ -55,7 +65,7 @@ func (g *GraphicEqualizer) buildSliders(bands []string, bandGains []float64) {
} }
g.container = container.NewMax( g.container = container.NewMax(
container.NewBorder(nil, widget.NewLabel(""), nil, nil, container.NewBorder(nil, widget.NewLabel(""), nil, nil,
container.NewBorder(nil, nil, util.NewHSpace(35), util.NewHSpace(5), container.NewBorder(nil, nil, util.NewHSpace(5), util.NewHSpace(5),
container.NewVBox( container.NewVBox(
layout.NewSpacer(), layout.NewSpacer(),
myTheme.NewThemedRectangle(theme.ColorNameInputBackground), myTheme.NewThemedRectangle(theme.ColorNameInputBackground),
+8 -2
View File
@@ -337,8 +337,10 @@ func (s *SettingsDialog) createEqualizerTab(eqBands []string) *container.TabItem
} }
}) })
enabled.Checked = s.config.LocalPlayback.EqualizerEnabled enabled.Checked = s.config.LocalPlayback.EqualizerEnabled
geq := NewGraphicEqualizer(eqBands, s.config.LocalPlayback.GraphicEqualizerBands) // TODO: This should probably be an argument? geq := NewGraphicEqualizer(s.config.LocalPlayback.EqualizerPreamp,
debouncer := util.NewDebouncer(200*time.Millisecond, func() { eqBands,
s.config.LocalPlayback.GraphicEqualizerBands)
debouncer := util.NewDebouncer(350*time.Millisecond, func() {
if s.OnEqualizerSettingsChanged != nil { if s.OnEqualizerSettingsChanged != nil {
s.OnEqualizerSettingsChanged() s.OnEqualizerSettingsChanged()
} }
@@ -347,6 +349,10 @@ func (s *SettingsDialog) createEqualizerTab(eqBands []string) *container.TabItem
s.config.LocalPlayback.GraphicEqualizerBands[b] = g s.config.LocalPlayback.GraphicEqualizerBands[b] = g
debouncer() debouncer()
} }
geq.OnPreampChanged = func(g float64) {
s.config.LocalPlayback.EqualizerPreamp = g
debouncer()
}
cont := container.NewBorder(container.NewHBox(enabled), nil, nil, nil, geq) cont := container.NewBorder(container.NewHBox(enabled), nil, nil, nil, geq)
return container.NewTabItem("Equalizer", cont) return container.NewTabItem("Equalizer", cont)
} }