Fix #157: Add "Auto" ReplayGain mode to auto-choose between Track and Album
This commit is contained in:
+6
-2
@@ -230,12 +230,16 @@ func (a *App) setupMPV() error {
|
||||
}
|
||||
a.Player.SetAudioDevice(desiredDevice)
|
||||
|
||||
rgainOpts := []string{ReplayGainNone, ReplayGainAlbum, ReplayGainTrack}
|
||||
rgainOpts := []string{ReplayGainNone, ReplayGainAlbum, ReplayGainTrack, ReplayGainAuto}
|
||||
if !sharedutil.SliceContains(rgainOpts, a.Config.ReplayGain.Mode) {
|
||||
a.Config.ReplayGain.Mode = ReplayGainNone
|
||||
}
|
||||
mode := player.ReplayGainMode(a.Config.ReplayGain.Mode)
|
||||
if a.Config.ReplayGain.Mode == ReplayGainAuto {
|
||||
mode = player.ReplayGainTrack
|
||||
}
|
||||
a.Player.SetReplayGainOptions(player.ReplayGainOptions{
|
||||
Mode: player.ReplayGainMode(a.Config.ReplayGain.Mode),
|
||||
Mode: mode,
|
||||
PreventClipping: a.Config.ReplayGain.PreventClipping,
|
||||
PreampGain: a.Config.ReplayGain.PreampGainDB,
|
||||
})
|
||||
|
||||
@@ -15,6 +15,7 @@ const (
|
||||
ReplayGainNone = string(player.ReplayGainNone)
|
||||
ReplayGainAlbum = string(player.ReplayGainAlbum)
|
||||
ReplayGainTrack = string(player.ReplayGainTrack)
|
||||
ReplayGainAuto = "Auto"
|
||||
)
|
||||
|
||||
type LoopMode int
|
||||
@@ -47,6 +48,7 @@ type PlaybackManager struct {
|
||||
lastScrobbled *mediaprovider.Track
|
||||
scrobbleCfg *ScrobbleConfig
|
||||
transcodeCfg *TranscodingConfig
|
||||
replayGainCfg ReplayGainConfig
|
||||
|
||||
onSongChange []func(nowPlaying, justScrobbledIfAny *mediaprovider.Track)
|
||||
onPlayTimeUpdate []func(float64, float64)
|
||||
@@ -199,6 +201,9 @@ func (p *PlaybackManager) PlayAlbum(albumID string, firstTrack int, shuffle bool
|
||||
if err := p.LoadAlbum(albumID, false, shuffle); err != nil {
|
||||
return err
|
||||
}
|
||||
if p.replayGainCfg.Mode == ReplayGainAuto {
|
||||
p.SetReplayGainMode(player.ReplayGainAlbum)
|
||||
}
|
||||
if firstTrack <= 0 {
|
||||
return p.player.PlayFromBeginning()
|
||||
}
|
||||
@@ -209,6 +214,9 @@ func (p *PlaybackManager) PlayPlaylist(playlistID string, firstTrack int, shuffl
|
||||
if err := p.LoadPlaylist(playlistID, false, shuffle); err != nil {
|
||||
return err
|
||||
}
|
||||
if p.replayGainCfg.Mode == ReplayGainAuto {
|
||||
p.SetReplayGainMode(player.ReplayGainTrack)
|
||||
}
|
||||
if firstTrack <= 0 {
|
||||
return p.player.PlayFromBeginning()
|
||||
}
|
||||
@@ -221,6 +229,9 @@ func (p *PlaybackManager) PlayTrack(trackID string) error {
|
||||
return err
|
||||
}
|
||||
p.LoadTracks([]*mediaprovider.Track{tr}, false, false)
|
||||
if p.replayGainCfg.Mode == ReplayGainAuto {
|
||||
p.SetReplayGainMode(player.ReplayGainTrack)
|
||||
}
|
||||
return p.PlayFromBeginning()
|
||||
}
|
||||
|
||||
@@ -237,6 +248,9 @@ func (p *PlaybackManager) PlayRandomSongs(genreName string) {
|
||||
log.Printf("error getting random songs: %s", err.Error())
|
||||
} else {
|
||||
p.LoadTracks(songs, false, false)
|
||||
if p.replayGainCfg.Mode == ReplayGainAuto {
|
||||
p.SetReplayGainMode(player.ReplayGainTrack)
|
||||
}
|
||||
p.PlayFromBeginning()
|
||||
}
|
||||
}
|
||||
@@ -246,6 +260,9 @@ func (p *PlaybackManager) PlaySimilarSongs(id string) {
|
||||
log.Printf("error getting similar songs: %s", err.Error())
|
||||
} else {
|
||||
p.LoadTracks(songs, false, false)
|
||||
if p.replayGainCfg.Mode == ReplayGainAuto {
|
||||
p.SetReplayGainMode(player.ReplayGainTrack)
|
||||
}
|
||||
p.PlayFromBeginning()
|
||||
}
|
||||
}
|
||||
@@ -317,13 +334,26 @@ func (p *PlaybackManager) StopAndClearPlayQueue() {
|
||||
}
|
||||
|
||||
func (p *PlaybackManager) SetReplayGainOptions(config ReplayGainConfig) {
|
||||
p.replayGainCfg = config
|
||||
mode := player.ReplayGainMode(config.Mode)
|
||||
if config.Mode == ReplayGainAuto {
|
||||
mode = player.ReplayGainTrack
|
||||
}
|
||||
p.player.SetReplayGainOptions(player.ReplayGainOptions{
|
||||
Mode: player.ReplayGainMode(config.Mode),
|
||||
Mode: mode,
|
||||
PreventClipping: config.PreventClipping,
|
||||
PreampGain: config.PreampGainDB,
|
||||
})
|
||||
}
|
||||
|
||||
func (p *PlaybackManager) SetReplayGainMode(mode player.ReplayGainMode) {
|
||||
p.player.SetReplayGainOptions(player.ReplayGainOptions{
|
||||
PreventClipping: p.replayGainCfg.PreventClipping,
|
||||
PreampGain: p.replayGainCfg.PreampGainDB,
|
||||
Mode: mode,
|
||||
})
|
||||
}
|
||||
|
||||
// Changes the loop mode of the player to the next one.
|
||||
// Useful for toggling UI elements, to change modes without knowing the current player mode.
|
||||
func (p *PlaybackManager) SetNextLoopMode() error {
|
||||
|
||||
Reference in New Issue
Block a user