Музыкальное приложение для Android - PullRequest
0 голосов
/ 28 октября 2018

Я новичок в Android и надеюсь, что вы мне поможете.Я пытаюсь сделать небольшое музыкальное приложение.

Приложение должно делать что-то вроде этого:

  • Когда пользователь нажимает кнопку воспроизведения, аудиофайл, называемый «mainFile», должен воспроизводиться в цикле.
  • Пока воспроизводится «mainFile» и пользователь нажимает кнопку заполнения, другой аудиофайл, называемый «fillinFile», должен быть запущен сразу после окончания последнего цикла.

ПоэтомуЯ использую «LoopMediaPlayer» из На Android пока не удается добиться зацикливания звука Gapless. На самом деле он работает нормально.

Моя проблема: если я нажимаю кнопку заполнения, приложение зацикливает "mainFile "дважды до начала воспроизведения" fillinFile ".

Вот мой код:

public class SoundsFragment extends Fragment implements View.OnClickListener {

    public static String TAG = "PLAYER";
    private XButton fillIn;
    private XButton stop;
    private XButton play;
    private LoopMediaPlayer mediaPlayerMain;
    private LoopMediaPlayer mediaPlayerFillIn;
    private Taal playingTaal;

    View view;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.sounds, container, false);

        bindButtons();
        return view;
    }


    @Override
    public void onClick(View v) {
        //stop();
        XButton button = (XButton) v;
        switch (button.getId()) {
            case R.id.fillin:
                playFillIn();
                break;
            case R.id.play:
                playMain();
                break;
            default:
        }
    }

    private void playMain() {
        mediaPlayerMain = LoopMediaPlayer.create(getContext(), R.raw.d_vb_01, R.raw.d_vb_01_var);

    }

    private void playFillIn() {
        mediaPlayerMain.setStartedFollowers(true);
    }


    private void bindButtons() {
        fillIn = (XButton) view.findViewById(R.id.fillin);
        stop = (XButton) view.findViewById(R.id.stop);
        play = (XButton) view.findViewById(R.id.play);
        fillIn.setOnClickListener(this);
        stop.setOnClickListener(this);
        play.setOnClickListener(this);
    }

}

public class LoopMediaPlayer {

    public static final String TAG = LoopMediaPlayer.class.getSimpleName();

    private Context mContext = null;

    private int mFollowersResId= 0;

    private int mCounter = 1;

    private MediaPlayer mCurrentPlayer = null;
    private MediaPlayer mNextPlayer = null;

    private boolean mStartedFollowers = false;
    private boolean mStartedMain = false;
    private int mResId = 0;


    public static LoopMediaPlayer create(Context context, int mainResId, int followersResId) {
        return new LoopMediaPlayer(context, mainResId, followersResId);
    }

    private LoopMediaPlayer(Context context, int mainResId, int followersResId) {

        mContext = context;
        mResId = mainResId;

        mFollowersResId = followersResId;

        mCurrentPlayer = MediaPlayer.create(mContext, mResId);

        mCurrentPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mCurrentPlayer.start();
            }
        });

        createNextMediaPlayer(mResId);
    }

    private void createNextMediaPlayer(int id) {
        mNextPlayer = MediaPlayer.create(mContext, id);
        mCurrentPlayer.setNextMediaPlayer(mNextPlayer);
        mCurrentPlayer.setOnCompletionListener(onCompletionListener);
    }

    private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {

            if(mStartedFollowers){
                mResId = mFollowersResId;
            }

            mCurrentPlayer = mNextPlayer;
            createNextMediaPlayer(mResId);
            mediaPlayer.release();

        }
    };

    public void setStartedFollowers(boolean started){

        mStartedFollowers = started;

    }

}

1 Ответ

0 голосов
/ 28 октября 2018

попробуйте удалить этот createNextMediaPlayer(mResId); в приватном конструкторе LoopMediaPlayer ()

...