Made gapless playback working again.

This commit is contained in:
Karim Abou Zeid 2016-03-30 16:06:57 +02:00
commit 66a676aae7

View file

@ -22,8 +22,8 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
public static final String TAG = MultiPlayer.class.getSimpleName(); public static final String TAG = MultiPlayer.class.getSimpleName();
private DoubleMediaPlayer mCurrentMediaPlayer = new DoubleMediaPlayer(); private MediaPlayer mCurrentMediaPlayer = new MediaPlayer();
private DoubleMediaPlayer mNextMediaPlayer; private MediaPlayer mNextMediaPlayer;
private Context context; private Context context;
@Nullable @Nullable
@ -116,7 +116,7 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
return; return;
} }
if (PreferenceUtil.getInstance(context).gaplessPlayback()) { if (PreferenceUtil.getInstance(context).gaplessPlayback()) {
mNextMediaPlayer = new DoubleMediaPlayer(); mNextMediaPlayer = new MediaPlayer();
mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
mNextMediaPlayer.setAudioSessionId(getAudioSessionId()); mNextMediaPlayer.setAudioSessionId(getAudioSessionId());
if (setDataSourceImpl(mNextMediaPlayer, path)) { if (setDataSourceImpl(mNextMediaPlayer, path)) {
@ -303,7 +303,7 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
public boolean onError(final MediaPlayer mp, final int what, final int extra) { public boolean onError(final MediaPlayer mp, final int what, final int extra) {
mIsInitialized = false; mIsInitialized = false;
mCurrentMediaPlayer.release(); mCurrentMediaPlayer.release();
mCurrentMediaPlayer = new DoubleMediaPlayer(); mCurrentMediaPlayer = new MediaPlayer();
mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
if (context != null) { if (context != null) {
Toast.makeText(context, context.getResources().getString(R.string.unplayable_file), Toast.LENGTH_SHORT).show(); Toast.makeText(context, context.getResources().getString(R.string.unplayable_file), Toast.LENGTH_SHORT).show();
@ -329,34 +329,4 @@ public class MultiPlayer implements Playback, MediaPlayer.OnErrorListener, Media
callbacks.onTrackEnded(); callbacks.onTrackEnded();
} }
} }
private static final class DoubleMediaPlayer extends MediaPlayer implements MediaPlayer.OnCompletionListener {
private MediaPlayer mNextPlayer;
private OnCompletionListener mCompletion;
public DoubleMediaPlayer() {
super.setOnCompletionListener(this);
}
@Override
public void setNextMediaPlayer(final MediaPlayer next) {
mNextPlayer = next;
}
@Override
public void setOnCompletionListener(final OnCompletionListener listener) {
mCompletion = listener;
}
@Override
public void onCompletion(final MediaPlayer mp) {
if (mNextPlayer != null) {
// SystemClock.sleep(25);
mNextPlayer.start();
}
if (mCompletion != null)
mCompletion.onCompletion(this);
}
}
} }