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) .setOnAudioFocusChangeListener(this)
.build() .build()
private var previousVolume = player.volume
private var pauseWasTransient = false private var pauseWasTransient = false
/** /**
@ -105,19 +107,17 @@ class AudioReactor(
} }
private fun onDuck() { private fun onDuck() {
logD("Ducking, lowering volume") previousVolume = player.volume
player.volume = VOLUME_DUCK player.volume = VOLUME_DUCK
logD("Ducked volume to ${player.volume} [previous: $previousVolume]")
} }
private fun unduck() { private fun unduck() {
logD("Unducking, raising volume") player.volume = previousVolume
logD("Unducked volume to ${player.volume}")
player.volume = VOLUME_FULL
} }
companion object { companion object {
private const val VOLUME_DUCK = 0.2f 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) { override fun onTracksInfoChanged(tracksInfo: TracksInfo) {
super.onTracksInfoChanged(tracksInfo) super.onTracksInfoChanged(tracksInfo)
var consumed = false
for (info in tracksInfo.trackGroupInfos) { for (info in tracksInfo.trackGroupInfos) {
if (info.isSelected) { if (info.isSelected) {
for (i in 0 until info.trackGroup.length) { 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 val metadata = info.trackGroup.getFormat(i).metadata
if (metadata != null) { if (metadata != null) {
consumed = true
player.volume = calculateReplayGain(metadata) player.volume = calculateReplayGain(metadata)
logD("Applied ReplayGain adjustment: ${player.volume}") logD("Applied ReplayGain adjustment: ${player.volume}")
} }
@ -256,6 +259,12 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac
break 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 --- // --- PLAYBACK STATE CALLBACK OVERRIDES ---