Как воспроизвести звук при нажатии кнопки, даже если MediaPlayer уже воспроизводит звук? - PullRequest
0 голосов
/ 03 июня 2019

При нажатии кнопки я написал код для воспроизведения простого звука. Мне бы хотелось, чтобы этот звук воспроизводился даже поверх ранее созданного звука с помощью той же кнопки (например, если пользователь нажимает кнопку несколько раз и быстро.

В настоящий момент код не воспроизводит звук до тех пор, пока ранее созданный звук не будет полностью завершен.

Я попытался выполнить player.pause (), а затем player.seekTo (0) при нажатии кнопки, но затем ранее созданный звук обрезается. Это не то, что я хочу. Я бы хотел, чтобы все звуки заканчивались полностью. Если первый звук все еще воспроизводится, я хочу, чтобы звук 2 (второе быстрое нажатие кнопки) воспроизводился сверху (то же самое для звука 3, 4, (пользователь может, вероятно, щелкнуть 5-6 раз до того, как первый звук закончится). Должен ли я сделать 6 Объекты mediaPlayer и onclick проверяют, воспроизводится ли 1st, воспроизводится ли 2, воспроизводится ли 2, воспроизводится ли 3 и т. д. ... Должен быть более эффективный способ.

Этот код не воспроизводит звук до тех пор, пока предыдущий звук не будет полностью завершен:

    button = findViewById(R.id.button);
    player1 = MediaPlayer.create(this, R.raw.kick1);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player1.start();
            return;
        }
    });

Этот код отключает ранее созданный звук:

    button = findViewById(R.id.button);
    player1 = MediaPlayer.create(this, R.raw.kick1);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player1.pause();
            player1.seekTo(0);
            player1.start();
            return;
        }
    });

Как я могу воспроизводить звук при каждом щелчке и перекрывать ранее созданный звук? (если пользователь нажимает кнопку достаточно быстро там, где это необходимо)?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Ответ Динеша почти готов, только вам нужно сохранить созданный MediaPlayer.

MediaPlayer mPlayer = null;

    if (mPlayer != null && mPlayer.isPalying()) {
      mPlayer.stop();
      ...
    }
    mPlayer = MediaPlayer.create(mContext, raw);
    ...

Поскольку другой MediaPlayer создается, если вы играете в другом формате.

0 голосов
/ 03 июня 2019

Вы должны создавать новый плеер каждый раз, когда хотите воспроизвести звук, попробуйте это.Я не проверял это.

button = findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        MediaPlayer player = MediaPlayer.create(this, R.raw.kick1);
        player.start();
    }
});
...