From ee68e7ffe941bce1491fdb9f878d34980816c2ba Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Thu, 11 Aug 2022 11:41:52 -0600 Subject: [PATCH] playback: make replaygain always-on Remove the "Off" ReplayGain setting, as it is mostly meaningless. Users who don't want ReplayGain can remove the tags from their files. No efficiency benefits either since the audio processor is always disabled without replaygain tags. It is better not to confuse users who do have ReplayGain but wonder why it is not working on their files because the setting is off. --- CHANGELOG.md | 4 ++++ app/src/main/java/org/oxycblt/auxio/IntegerTable.kt | 4 ++-- .../org/oxycblt/auxio/music/system/ExoPlayerBackend.kt | 2 ++ .../oxycblt/auxio/playback/replaygain/ReplayGain.kt | 3 --- .../playback/replaygain/ReplayGainAudioProcessor.kt | 10 +--------- .../oxycblt/auxio/playback/system/PlaybackService.kt | 2 ++ .../main/java/org/oxycblt/auxio/settings/Settings.kt | 2 +- app/src/main/res/values/settings.xml | 3 --- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/prefs_main.xml | 4 +--- 10 files changed, 14 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dab8d604b..3871ad7f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## dev +#### What's Changed +- ReplayGain can now no longer be disabled. Remove ReplayGain tags from +files if such functionality is not desired. + ## 2.6.1 #### What's New diff --git a/app/src/main/java/org/oxycblt/auxio/IntegerTable.kt b/app/src/main/java/org/oxycblt/auxio/IntegerTable.kt index 2ea54a26e..1b084a8dc 100644 --- a/app/src/main/java/org/oxycblt/auxio/IntegerTable.kt +++ b/app/src/main/java/org/oxycblt/auxio/IntegerTable.kt @@ -108,8 +108,8 @@ object IntegerTable { /** Sort.ByDateAdded */ const val SORT_BY_DATE_ADDED = 0xA118 - /** ReplayGainMode.Off */ - const val REPLAY_GAIN_MODE_OFF = 0xA110 + /** ReplayGainMode.Off (No longer used but still reserved) */ + // const val REPLAY_GAIN_MODE_OFF = 0xA110 /** ReplayGainMode.Track */ const val REPLAY_GAIN_MODE_TRACK = 0xA111 /** ReplayGainMode.Album */ diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/ExoPlayerBackend.kt b/app/src/main/java/org/oxycblt/auxio/music/system/ExoPlayerBackend.kt index 78fd42247..3fe77837c 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/ExoPlayerBackend.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/ExoPlayerBackend.kt @@ -67,6 +67,8 @@ class ExoPlayerBackend(private val inner: MediaStoreBackend) : Indexer.Backend { val songs = mutableListOf() val total = cursor.count + // LEFTOFF: Make logic more consistent? + while (cursor.moveToNext()) { // Note: This call to buildAudio does not populate the genre field. This is // because indexing genres is quite slow with MediaStore, and so keeping the diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt index fd73db7f2..06ea2ce0c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGain.kt @@ -21,8 +21,6 @@ import org.oxycblt.auxio.IntegerTable /** Represents the current setting for ReplayGain. */ enum class ReplayGainMode { - /** Do not apply ReplayGain. */ - OFF, /** Apply the track gain, falling back to the album gain if the track gain is not found. */ TRACK, /** Apply the album gain, falling back to the track gain if the album gain is not found. */ @@ -34,7 +32,6 @@ enum class ReplayGainMode { /** Convert an int [code] into an instance, or null if it isn't valid. */ fun fromIntCode(code: Int): ReplayGainMode? { return when (code) { - IntegerTable.REPLAY_GAIN_MODE_OFF -> OFF IntegerTable.REPLAY_GAIN_MODE_TRACK -> TRACK IntegerTable.REPLAY_GAIN_MODE_ALBUM -> ALBUM IntegerTable.REPLAY_GAIN_MODE_DYNAMIC -> DYNAMIC diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt index 8ee20cc71..76894dd4f 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt @@ -65,12 +65,6 @@ class ReplayGainAudioProcessor(context: Context) : BaseAudioProcessor() { * based off Vanilla Music's implementation, but has diverged to a significant extent. */ fun applyReplayGain(metadata: Metadata?) { - if (settings.replayGainMode == ReplayGainMode.OFF) { - logD("ReplayGain not enabled") - volume = 1f - return - } - val gain = metadata?.let(::parseReplayGain) val preAmp = settings.replayGainPreAmp @@ -79,8 +73,6 @@ class ReplayGainAudioProcessor(context: Context) : BaseAudioProcessor() { // ReplayGain is configurable, so determine what to do based off of the mode. val useAlbumGain = when (settings.replayGainMode) { - ReplayGainMode.OFF -> throw IllegalStateException() - // User wants track gain to be preferred. Default to album gain only if // there is no track gain. ReplayGainMode.TRACK -> gain.track == 0f @@ -109,7 +101,7 @@ class ReplayGainAudioProcessor(context: Context) : BaseAudioProcessor() { } else { // No ReplayGain tags existed, or no tags were parsable, or there was no metadata // in the first place. Return the gain to use when there is no ReplayGain value. - logD("No ReplayGain tags present ") + logD("No ReplayGain tags present") preAmp.without } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 02b9c0d71..1d8cd9275 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -265,6 +265,8 @@ class PlaybackService : return } + C.ENCODING_PCM_32BIT + logD("Loading ${song.rawName}") player.setMediaItem(MediaItem.fromUri(song.uri)) player.prepare() diff --git a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt index aebff02a3..5d4047d24 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt @@ -140,7 +140,7 @@ class Settings(private val context: Context, private val callback: Callback? = n get() = ReplayGainMode.fromIntCode( inner.getInt(context.getString(R.string.set_key_replay_gain), Int.MIN_VALUE)) - ?: ReplayGainMode.OFF + ?: ReplayGainMode.DYNAMIC /** The current ReplayGain pre-amp configuration */ var replayGainPreAmp: ReplayGainPreAmp diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml index 49f20c66e..af188e1b3 100644 --- a/app/src/main/res/values/settings.xml +++ b/app/src/main/res/values/settings.xml @@ -107,14 +107,12 @@ - @string/set_replay_gain_off @string/set_replay_gain_track @string/set_replay_gain_album @string/set_replay_gain_dynamic - @integer/replay_gain_off @integer/replay_gain_track @integer/replay_gain_album @integer/replay_gain_dynamic @@ -134,7 +132,6 @@ 0xA105 0xA106 - 0xA110 0xA111 0xA112 0xA113 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e20ee9733..7a31e94d6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -181,7 +181,7 @@ Audio Headset autoplay Always start playing when a headset is connected (may not work on all devices) - ReplayGain + ReplayGain strategy Off Prefer track Prefer album diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index 6878b09f7..d55a942ad 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -75,15 +75,13 @@ app:title="@string/set_headset_autoplay" />