Update player to support both 10-band and 15-band equalizers

This commit is contained in:
Gianluca Boiano
2026-02-06 02:50:40 +01:00
parent 0097b0a052
commit b0b2dc46f9
2 changed files with 71 additions and 21 deletions
+42 -15
View File
@@ -43,17 +43,19 @@ var (
) )
type App struct { type App struct {
Config *Config Config *Config
ServerManager *ServerManager ServerManager *ServerManager
LyricsManager *LyricsManager LyricsManager *LyricsManager
ImageManager *ImageManager ImageManager *ImageManager
AudioCache *AudioCache AudioCache *AudioCache
PlaybackManager *PlaybackManager AutoEQManager *AutoEQManager
LocalPlayer *mpv.Player EQPresetManager *EQPresetManager
UpdateChecker UpdateChecker PlaybackManager *PlaybackManager
MPRISHandler *MPRISHandler LocalPlayer *mpv.Player
WinSMTC *windows.SMTC UpdateChecker UpdateChecker
ipcServer ipc.IPCServer MPRISHandler *MPRISHandler
WinSMTC *windows.SMTC
ipcServer ipc.IPCServer
// UI callbacks to be set in main // UI callbacks to be set in main
OnReactivate func() OnReactivate func()
@@ -165,6 +167,11 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
fetch = NewLrcLibFetcher(a.cacheDir, a.Config.Application.CustomLrcLibUrl, timeout) fetch = NewLrcLibFetcher(a.cacheDir, a.Config.Application.CustomLrcLibUrl, timeout)
} }
a.LyricsManager = NewLyricsManager(a.ServerManager, fetch) 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 // Periodically scan for remote players
go a.PlaybackManager.ScanRemotePlayers(a.bgrndCtx, true /*fastScan*/) 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.SetAudioExclusive(a.Config.LocalPlayback.AudioExclusive)
a.LocalPlayer.SetPauseFade(a.Config.LocalPlayback.PauseFade) a.LocalPlayer.SetPauseFade(a.Config.LocalPlayback.PauseFade)
eq := &mpv.ISO15BandEqualizer{ // Initialize the appropriate equalizer type based on config
EQPreamp: a.Config.LocalPlayback.EqualizerPreamp, var eq mpv.Equalizer
Disabled: !a.Config.LocalPlayback.EqualizerEnabled, 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) a.LocalPlayer.SetEqualizer(eq)
return nil return nil
+29 -6
View File
@@ -327,7 +327,10 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
devs, themeFiles, bands, devs, themeFiles, bands,
c.App.ServerManager.Server.ClientDecidesScrobble(), c.App.ServerManager.Server.ClientDecidesScrobble(),
isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer, canSavePlayQueue, isLocalPlayer, isReplayGainPlayer, isEqualizerPlayer, canSavePlayQueue,
c.MainWindow) c.App.EQPresetManager,
c.MainWindow,
c.App.AutoEQManager,
c.App.ImageManager)
dlg.OnReplayGainSettingsChanged = func() { dlg.OnReplayGainSettingsChanged = func() {
c.App.PlaybackManager.SetReplayGainOptions(c.App.Config.ReplayGain) c.App.PlaybackManager.SetReplayGainOptions(c.App.Config.ReplayGain)
} }
@@ -342,11 +345,31 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
} }
dlg.OnThemeSettingChanged = themeUpdateCallbk dlg.OnThemeSettingChanged = themeUpdateCallbk
dlg.OnEqualizerSettingsChanged = func() { dlg.OnEqualizerSettingsChanged = func() {
// currently we only have one equalizer type // Create the appropriate equalizer type based on config
eq := c.App.LocalPlayer.Equalizer().(*mpv.ISO15BandEqualizer) var eq mpv.Equalizer
eq.Disabled = !c.App.Config.LocalPlayback.EqualizerEnabled if c.App.Config.LocalPlayback.EqualizerType == "ISO10Band" {
eq.EQPreamp = c.App.Config.LocalPlayback.EqualizerPreamp eq10 := &mpv.ISO10BandEqualizer{
copy(eq.BandGains[:], c.App.Config.LocalPlayback.GraphicEqualizerBands) 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) c.App.LocalPlayer.SetEqualizer(eq)
} }
dlg.OnPageNeedsRefresh = c.RefreshPageFunc dlg.OnPageNeedsRefresh = c.RefreshPageFunc