private synchronized void playNextAudio() {
    if (activeMediaPlayer != null) {
      // TODO reuse player
      activeMediaPlayer.release();
    }

    final MediaInfo mediaInfo = mediaPlayerList.get(playerIndex);
    activeMediaPlayer = MediaPlayer.create(missionActivity, mediaInfo.getResUri());

    updateMissionLog(mediaInfo);

    if (mediaInfo.isLoopUntilNext() && playerIndex + 1 < mediaPlayerList.size()) {
      activeMediaPlayer.setLooping(true);
      planNextAudioTask();
    } else {
      activeMediaPlayer.setOnCompletionListener(
          new MediaPlayer.OnCompletionListener() {
            // @Override
            public void onCompletion(MediaPlayer mp) {

              activeMediaPlayer.stop();
              activeMediaPlayer.release();
              activeMediaPlayer = null;

              if (!stopped) {
                planNextAudioTask();
              }
            }
          });
    }

    if (!paused && !stopped) {
      try {
        activeMediaPlayer.start();
      } catch (IllegalStateException e) {
        Toast.makeText(missionActivity, R.string.media_failed, Toast.LENGTH_LONG).show();
        stop();
      }
    }
  }