playback: minor replaygain fixes

Fix issues with the new replaygain system in the ducking system and
when there is no metadata to parse.
This commit is contained in:
OxygenCobalt 2022-01-06 11:05:40 -07:00
parent d419a4230d
commit 357184dd8d
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
2 changed files with 15 additions and 6 deletions

View file

@ -46,6 +46,8 @@ class AudioReactor(
.setOnAudioFocusChangeListener(this)
.build()
private var previousVolume = player.volume
private var pauseWasTransient = false
/**
@ -105,19 +107,17 @@ class AudioReactor(
}
private fun onDuck() {
logD("Ducking, lowering volume")
previousVolume = player.volume
player.volume = VOLUME_DUCK
logD("Ducked volume to ${player.volume} [previous: $previousVolume]")
}
private fun unduck() {
logD("Unducking, raising volume")
player.volume = VOLUME_FULL
player.volume = previousVolume
logD("Unducked volume to ${player.volume}")
}
companion object {
private const val VOLUME_DUCK = 0.2f
private const val VOLUME_FULL = 1.0f
}
}

View file

@ -238,6 +238,8 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac
override fun onTracksInfoChanged(tracksInfo: TracksInfo) {
super.onTracksInfoChanged(tracksInfo)
var consumed = false
for (info in tracksInfo.trackGroupInfos) {
if (info.isSelected) {
for (i in 0 until info.trackGroup.length) {
@ -245,6 +247,7 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac
val metadata = info.trackGroup.getFormat(i).metadata
if (metadata != null) {
consumed = true
player.volume = calculateReplayGain(metadata)
logD("Applied ReplayGain adjustment: ${player.volume}")
}
@ -256,6 +259,12 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac
break
}
}
if (!consumed) {
// Sadly we couldn't parse any ReplayGain tags. Revert to normal volume.
player.volume = 1f
logD("No parsable ReplayGain tags, returning volume to 1.")
}
}
// --- PLAYBACK STATE CALLBACK OVERRIDES ---