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 {
|
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()
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue