Skip to content
This repository has been archived by the owner on Feb 17, 2025. It is now read-only.

Commit

Permalink
fixed fade in/out
Browse files Browse the repository at this point in the history
  • Loading branch information
nuclearfog committed Apr 28, 2024
1 parent bfa27d6 commit 5e6bbd7
Showing 1 changed file with 30 additions and 21 deletions.
51 changes: 30 additions & 21 deletions app/src/main/java/org/nuclearfog/apollo/player/MultiPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,10 @@ public boolean onError(MediaPlayer mp, int what, int extra) {
@Override
public void onCompletion(MediaPlayer mp) {
if (mp == mPlayers[currentPlayer]) {
// switch to next player
mPlayers[currentPlayer].reset();
// reset old player to default
mp.reset();
mp.setVolume(currentVolume, currentVolume);
// select next media player
currentPlayer = (currentPlayer + 1) % mPlayers.length;
// notify playback service that track went to next
playerHandler.sendEmptyMessage(MusicPlayerHandler.MESSAGE_TRACK_WENT_TO_NEXT);
Expand Down Expand Up @@ -342,31 +344,33 @@ private boolean setDataSourceImpl(MediaPlayer player, @NonNull Uri uri) {
* called periodically while playback to detect playback changes for crossfading
*/
private void onCrossfadeTrack() {
long diff = getDuration() - getPosition();
MediaPlayer current = mPlayers[currentPlayer];
MediaPlayer next = mPlayers[(currentPlayer + 1) % mPlayers.length];
// force crossfade to next track
if (xfadeMode == XFADE) {
currentVolume = Math.max(currentVolume - FADE_STEPS, 0f);
float invert = 1f - currentVolume;
if (currentVolume < FADE_THRESHOLD) {
// crossfade both player
if (currentVolume >= FADE_THRESHOLD) {
current.setVolume(currentVolume, currentVolume);
next.setVolume(invert, invert);
}
// if crossfade finished, switch to new player
else {
currentVolume = 1f;
xfadeMode = NONE;
current.setVolume(0f, 0f);
next.setVolume(1f, 1f);
onCompletion(current);
currentVolume = 1f;
xfadeMode = NONE;
} else {
current.setVolume(currentVolume, currentVolume);
next.setVolume(invert, invert);
}
}
// fade out current playback
else if (xfadeMode == FADE_OUT) {
currentVolume = Math.max(currentVolume - FADE_STEPS, 0f);
current.setVolume(currentVolume, currentVolume);
if (currentVolume < FADE_THRESHOLD) {
xfadeMode = NONE;
pause(true);
currentVolume = 1f;
}
}
// fade in curent playback
Expand All @@ -378,17 +382,22 @@ else if (xfadeMode == FADE_IN) {
}
}
// crossfade current and next playback
else if ((getPosition() > XFADE_DELAY && diff < XFADE_DELAY)) {
// calc volume for current and next player
float volume = Math.max((float) diff / XFADE_DELAY, 0f);
float invert = 1f - volume;
// fade down current player
current.setVolume(volume, volume);
// fade up next player
next.setVolume(invert, invert);
// start next player
if (!next.isPlaying()) {
next.start();
else {
long diff = getDuration() - getPosition();
// crossfade if the end of the track is near
if ((getPosition() > XFADE_DELAY && diff < XFADE_DELAY)) {
// calc volume for current and next player
float volume = Math.max((float) diff / XFADE_DELAY, 0f);
float invert = 1f - volume;
// fade down current player
current.setVolume(volume, volume);
// fade up next player
next.setVolume(invert, invert);
// start next player
if (!next.isPlaying()) {
next.setVolume(0f, 0f);
next.start();
}
}
}
}
Expand Down

0 comments on commit 5e6bbd7

Please sign in to comment.