Fixed CrossFade not working when Fade Audio is enabled

This commit is contained in:
Prathamesh More 2022-06-12 22:08:52 +05:30
parent 8e3a7a097a
commit df382cb539
4 changed files with 18 additions and 19 deletions

View file

@ -10,10 +10,10 @@ import code.name.monkey.retromusic.util.PreferenceUtil
class AudioFader { class AudioFader {
companion object { companion object {
inline fun createFadeAnimator( fun createFadeAnimator(
fadeInMp: MediaPlayer, fadeInMp: MediaPlayer,
fadeOutMp: MediaPlayer, fadeOutMp: MediaPlayer,
crossinline endAction: (animator: Animator) -> Unit, /* Code to run when Animator Ends*/ endAction: (animator: Animator) -> Unit, /* Code to run when Animator Ends*/
): Animator? { ): Animator? {
val duration = PreferenceUtil.crossFadeDuration * 1000 val duration = PreferenceUtil.crossFadeDuration * 1000
if (duration == 0) { if (duration == 0) {
@ -34,15 +34,14 @@ class AudioFader {
} }
} }
@JvmStatic
fun startFadeAnimator( fun startFadeAnimator(
playback: Playback, playback: Playback,
fadeIn: Boolean, /* fadeIn -> true fadeOut -> false*/ fadeIn: Boolean, /* fadeIn -> true fadeOut -> false*/
callback: Runnable, /* Code to run when Animator Ends*/ callback: Runnable? = null, /* Code to run when Animator Ends*/
) { ) {
val duration = PreferenceUtil.audioFadeDuration.toLong() val duration = PreferenceUtil.audioFadeDuration.toLong()
if (duration == 0L) { if (duration == 0L) {
callback.run() callback?.run()
return return
} }
val startValue = if (fadeIn) 0f else 1.0f val startValue = if (fadeIn) 0f else 1.0f
@ -50,12 +49,10 @@ class AudioFader {
val animator = ValueAnimator.ofFloat(startValue, endValue) val animator = ValueAnimator.ofFloat(startValue, endValue)
animator.duration = duration animator.duration = duration
animator.addUpdateListener { animation: ValueAnimator -> animator.addUpdateListener { animation: ValueAnimator ->
playback.setVolume( playback.setVolume(animation.animatedValue as Float)
animation.animatedValue as Float
)
} }
animator.doOnEnd { animator.doOnEnd {
callback.run() callback?.run()
} }
animator.start() animator.start()
} }

View file

@ -37,7 +37,7 @@ class CrossFadePlayer(context: Context) : LocalPlayback(context) {
private var crossFadeAnimator: Animator? = null private var crossFadeAnimator: Animator? = null
override var callbacks: PlaybackCallbacks? = null override var callbacks: PlaybackCallbacks? = null
private var crossFadeDuration = PreferenceUtil.crossFadeDuration private var crossFadeDuration = PreferenceUtil.crossFadeDuration
private var isCrossFading = false var isCrossFading = false
init { init {
player1.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) player1.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)

View file

@ -770,11 +770,10 @@ class MusicService : MediaBrowserServiceCompat(),
@Synchronized @Synchronized
fun play() { fun play() {
playbackManager.play(onNotInitialized = { playSongAt(getPosition()) }) { playbackManager.play { playSongAt(getPosition()) }
if (notHandledMetaChangedForCurrentTrack) { if (notHandledMetaChangedForCurrentTrack) {
handleChangeInternal(META_CHANGED) handleChangeInternal(META_CHANGED)
notHandledMetaChangedForCurrentTrack = false notHandledMetaChangedForCurrentTrack = false
}
} }
notifyChange(PLAY_STATE_CHANGED) notifyChange(PLAY_STATE_CHANGED)
} }

View file

@ -47,16 +47,19 @@ class PlaybackManager(val context: Context) {
playback?.callbacks = callbacks playback?.callbacks = callbacks
} }
fun play(onNotInitialized: () -> Unit = {}, onPlay: () -> Unit = {}) { fun play(onNotInitialized: () -> Unit) {
if (playback != null && !playback!!.isPlaying) { if (playback != null && !playback!!.isPlaying) {
if (!playback!!.isInitialized) { if (!playback!!.isInitialized) {
onNotInitialized() onNotInitialized()
} else { } else {
openAudioEffectSession() openAudioEffectSession()
if (playbackLocation == PlaybackLocation.LOCAL) { if (playbackLocation == PlaybackLocation.LOCAL) {
AudioFader.startFadeAnimator(playback!!, true) { if (playback is CrossFadePlayer) {
// Code when Animator Ends if (!(playback as CrossFadePlayer).isCrossFading) {
onPlay() AudioFader.startFadeAnimator(playback!!, true)
}
} else {
AudioFader.startFadeAnimator(playback!!, true)
} }
} }
if (shouldSetSpeed) { if (shouldSetSpeed) {