MediaPlayer: звуки играют поверх друг друга - PullRequest
0 голосов
/ 10 июля 2019

У меня есть деки с несколькими кнопками (около 17), каждая из которых связана со звуком .mp3.

Проблема в том, что когда воспроизводится звук, и я нажимаю другую кнопку, оба затем воспроизводятся в фоновом режиме.

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

Кроме того, мне не очень нравится раздел кода, который гласит: private MediaPlayer [] mPlayers = new MediaPlayer [17];

Число (в данном случае 17), определяет количество раз воспроизведения звуков.После этого никакие дальнейшие звуки не воспроизводятся.Есть ли способ сделать это неопределенным?

Вместо того, чтобы вставлять весь код из своей деятельности, я прикрепил существенный код и пронумеровал его в том порядке, в котором он указан в моем основном файле активности .java.

Спасибо за вашупомогите всем.

    private int mNextPlayer = 0;


2) a.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.startAnimation(animAlpha);

                startSound(R.raw.likethebattle);

            }

        });


3) public void onDestroy() {
        super.onDestroy(); // <---------------------- This needed to be there
        for (int i = 0; i < mPlayers.length; ++i)
            if (mPlayers[i] != null)
                try {
                    mPlayers[i].release();
                    mPlayers[i] = null;
                } catch (Exception ex) {
                    // handle...
                }
    }

4)    private void startSound(int id) {
        try {


            if (mPlayers[mNextPlayer] != null) {

                mPlayers[mNextPlayer].reset();
                mPlayers[mNextPlayer].prepare();

                mPlayers[mNextPlayer].stop();
                mPlayers[mNextPlayer].release();
                mPlayers[mNextPlayer] = null;
            }
            mPlayers[mNextPlayer] = MediaPlayer.create(this, id);
            mPlayers[mNextPlayer].start();
        } catch (Exception ex) {
            // handle
        } finally {
            ++mNextPlayer;
            mNextPlayer %= mPlayers.length;
        }

    }

1 Ответ

0 голосов
/ 10 июля 2019

Похоже, вы не прекращаете играть в MediaPlayer.startSound (id) не останавливает воспроизведение звука в данный момент.В finally { ++mNextPlayer; mNextPlayer %= mPlayers.length; } вы перемещаете свой счетчик к следующему игроку в массиве, и в следующий раз, когда вы вводите метод startSound (), ваш счетчик не указывает на ранее запущенного игрока, поэтому он не может его остановить.

...