Fixed CrossFade not working when Fade Audio is enabled
This commit is contained in:
parent
8e3a7a097a
commit
df382cb539
4 changed files with 18 additions and 19 deletions
|
@ -10,10 +10,10 @@ import code.name.monkey.retromusic.util.PreferenceUtil
|
|||
class AudioFader {
|
||||
companion object {
|
||||
|
||||
inline fun createFadeAnimator(
|
||||
fun createFadeAnimator(
|
||||
fadeInMp: 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? {
|
||||
val duration = PreferenceUtil.crossFadeDuration * 1000
|
||||
if (duration == 0) {
|
||||
|
@ -34,15 +34,14 @@ class AudioFader {
|
|||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun startFadeAnimator(
|
||||
playback: Playback,
|
||||
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()
|
||||
if (duration == 0L) {
|
||||
callback.run()
|
||||
callback?.run()
|
||||
return
|
||||
}
|
||||
val startValue = if (fadeIn) 0f else 1.0f
|
||||
|
@ -50,12 +49,10 @@ class AudioFader {
|
|||
val animator = ValueAnimator.ofFloat(startValue, endValue)
|
||||
animator.duration = duration
|
||||
animator.addUpdateListener { animation: ValueAnimator ->
|
||||
playback.setVolume(
|
||||
animation.animatedValue as Float
|
||||
)
|
||||
playback.setVolume(animation.animatedValue as Float)
|
||||
}
|
||||
animator.doOnEnd {
|
||||
callback.run()
|
||||
callback?.run()
|
||||
}
|
||||
animator.start()
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ class CrossFadePlayer(context: Context) : LocalPlayback(context) {
|
|||
private var crossFadeAnimator: Animator? = null
|
||||
override var callbacks: PlaybackCallbacks? = null
|
||||
private var crossFadeDuration = PreferenceUtil.crossFadeDuration
|
||||
private var isCrossFading = false
|
||||
var isCrossFading = false
|
||||
|
||||
init {
|
||||
player1.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
|
||||
|
|
|
@ -770,11 +770,10 @@ class MusicService : MediaBrowserServiceCompat(),
|
|||
|
||||
@Synchronized
|
||||
fun play() {
|
||||
playbackManager.play(onNotInitialized = { playSongAt(getPosition()) }) {
|
||||
if (notHandledMetaChangedForCurrentTrack) {
|
||||
handleChangeInternal(META_CHANGED)
|
||||
notHandledMetaChangedForCurrentTrack = false
|
||||
}
|
||||
playbackManager.play { playSongAt(getPosition()) }
|
||||
if (notHandledMetaChangedForCurrentTrack) {
|
||||
handleChangeInternal(META_CHANGED)
|
||||
notHandledMetaChangedForCurrentTrack = false
|
||||
}
|
||||
notifyChange(PLAY_STATE_CHANGED)
|
||||
}
|
||||
|
|
|
@ -47,16 +47,19 @@ class PlaybackManager(val context: Context) {
|
|||
playback?.callbacks = callbacks
|
||||
}
|
||||
|
||||
fun play(onNotInitialized: () -> Unit = {}, onPlay: () -> Unit = {}) {
|
||||
fun play(onNotInitialized: () -> Unit) {
|
||||
if (playback != null && !playback!!.isPlaying) {
|
||||
if (!playback!!.isInitialized) {
|
||||
onNotInitialized()
|
||||
} else {
|
||||
openAudioEffectSession()
|
||||
if (playbackLocation == PlaybackLocation.LOCAL) {
|
||||
AudioFader.startFadeAnimator(playback!!, true) {
|
||||
// Code when Animator Ends
|
||||
onPlay()
|
||||
if (playback is CrossFadePlayer) {
|
||||
if (!(playback as CrossFadePlayer).isCrossFading) {
|
||||
AudioFader.startFadeAnimator(playback!!, true)
|
||||
}
|
||||
} else {
|
||||
AudioFader.startFadeAnimator(playback!!, true)
|
||||
}
|
||||
}
|
||||
if (shouldSetSpeed) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue