From b0b2dc46f975506e66c3cf6c8885bfe94a7f5109 Mon Sep 17 00:00:00 2001 From: Gianluca Boiano Date: Fri, 6 Feb 2026 02:50:40 +0100 Subject: [PATCH] Update player to support both 10-band and 15-band equalizers --- backend/app.go | 57 +++++++++++++++++++++++++++---------- ui/controller/controller.go | 35 +++++++++++++++++++---- 2 files changed, 71 insertions(+), 21 deletions(-) diff --git a/backend/app.go b/backend/app.go index e1e71b5..71d5e86 100644 --- a/backend/app.go +++ b/backend/app.go @@ -43,17 +43,19 @@ var ( ) type App struct { - Config *Config - ServerManager *ServerManager - LyricsManager *LyricsManager - ImageManager *ImageManager - AudioCache *AudioCache - PlaybackManager *PlaybackManager - LocalPlayer *mpv.Player - UpdateChecker UpdateChecker - MPRISHandler *MPRISHandler - WinSMTC *windows.SMTC - ipcServer ipc.IPCServer + Config *Config + ServerManager *ServerManager + LyricsManager *LyricsManager + ImageManager *ImageManager + AudioCache *AudioCache + AutoEQManager *AutoEQManager + EQPresetManager *EQPresetManager + PlaybackManager *PlaybackManager + LocalPlayer *mpv.Player + UpdateChecker UpdateChecker + MPRISHandler *MPRISHandler + WinSMTC *windows.SMTC + ipcServer ipc.IPCServer // UI callbacks to be set in main OnReactivate func() @@ -165,6 +167,11 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas fetch = NewLrcLibFetcher(a.cacheDir, a.Config.Application.CustomLrcLibUrl, timeout) } a.LyricsManager = NewLyricsManager(a.ServerManager, fetch) + a.EQPresetManager = NewEQPresetManager(confDir) + + // Initialize AutoEQ manager + autoEQTimeout := time.Duration(a.Config.Application.RequestTimeoutSeconds) * time.Second + a.AutoEQManager = NewAutoEQManager(filepath.Join(cacheDir, "autoeq"), autoEQTimeout) // Periodically scan for remote players go a.PlaybackManager.ScanRemotePlayers(a.bgrndCtx, true /*fastScan*/) @@ -386,11 +393,31 @@ func (a *App) setupMPV() error { a.LocalPlayer.SetAudioExclusive(a.Config.LocalPlayback.AudioExclusive) a.LocalPlayer.SetPauseFade(a.Config.LocalPlayback.PauseFade) - eq := &mpv.ISO15BandEqualizer{ - EQPreamp: a.Config.LocalPlayback.EqualizerPreamp, - Disabled: !a.Config.LocalPlayback.EqualizerEnabled, + // Initialize the appropriate equalizer type based on config + var eq mpv.Equalizer + if a.Config.LocalPlayback.EqualizerType == "ISO10Band" { + eq10 := &mpv.ISO10BandEqualizer{ + EQPreamp: a.Config.LocalPlayback.EqualizerPreamp, + Disabled: !a.Config.LocalPlayback.EqualizerEnabled, + } + // Copy up to 10 bands + numBands := min(len(a.Config.LocalPlayback.GraphicEqualizerBands), 10) + for i := 0; i < numBands; i++ { + eq10.BandGains[i] = a.Config.LocalPlayback.GraphicEqualizerBands[i] + } + eq = eq10 + } else { + eq15 := &mpv.ISO15BandEqualizer{ + EQPreamp: a.Config.LocalPlayback.EqualizerPreamp, + Disabled: !a.Config.LocalPlayback.EqualizerEnabled, + } + // Copy up to 15 bands + numBands := min(len(a.Config.LocalPlayback.GraphicEqualizerBands), 15) + for i := 0; i < numBands; i++ { + eq15.BandGains[i] = a.Config.LocalPlayback.GraphicEqualizerBands[i] + } + eq = eq15 } - copy(eq.BandGains[:], a.Config.LocalPlayback.GraphicEqualizerBands) a.LocalPlayer.SetEqualizer(eq) return nil diff --git a/ui/controller/controller.go b/ui/controller/controller.go index 9c9421a..0c73893 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -327,7 +327,10 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map devs, themeFiles, bands, c.App.ServerManager.Server.ClientDecidesScrobble(), isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer, canSavePlayQueue, - c.MainWindow) + c.App.EQPresetManager, + c.MainWindow, + c.App.AutoEQManager, + c.App.ImageManager) dlg.OnReplayGainSettingsChanged = func() { c.App.PlaybackManager.SetReplayGainOptions(c.App.Config.ReplayGain) } @@ -342,11 +345,31 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map } dlg.OnThemeSettingChanged = themeUpdateCallbk dlg.OnEqualizerSettingsChanged = func() { - // currently we only have one equalizer type - eq := c.App.LocalPlayer.Equalizer().(*mpv.ISO15BandEqualizer) - eq.Disabled = !c.App.Config.LocalPlayback.EqualizerEnabled - eq.EQPreamp = c.App.Config.LocalPlayback.EqualizerPreamp - copy(eq.BandGains[:], c.App.Config.LocalPlayback.GraphicEqualizerBands) + // Create the appropriate equalizer type based on config + var eq mpv.Equalizer + if c.App.Config.LocalPlayback.EqualizerType == "ISO10Band" { + eq10 := &mpv.ISO10BandEqualizer{ + Disabled: !c.App.Config.LocalPlayback.EqualizerEnabled, + EQPreamp: c.App.Config.LocalPlayback.EqualizerPreamp, + } + // Copy up to 10 bands + numBands := min(len(c.App.Config.LocalPlayback.GraphicEqualizerBands), 10) + for i := 0; i < numBands; i++ { + eq10.BandGains[i] = c.App.Config.LocalPlayback.GraphicEqualizerBands[i] + } + eq = eq10 + } else { + eq15 := &mpv.ISO15BandEqualizer{ + Disabled: !c.App.Config.LocalPlayback.EqualizerEnabled, + EQPreamp: c.App.Config.LocalPlayback.EqualizerPreamp, + } + // Copy up to 15 bands + numBands := min(len(c.App.Config.LocalPlayback.GraphicEqualizerBands), 15) + for i := 0; i < numBands; i++ { + eq15.BandGains[i] = c.App.Config.LocalPlayback.GraphicEqualizerBands[i] + } + eq = eq15 + } c.App.LocalPlayer.SetEqualizer(eq) } dlg.OnPageNeedsRefresh = c.RefreshPageFunc