Android - Как отключить SoundPool в TimerTask, не останавливая его - PullRequest
0 голосов
/ 13 февраля 2019

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

public class Metronome {
    private boolean mute;
    private boolean playing = false;
    private Timer mainTimer;
    private SoundPool mSoundPool;
    int mSoundID;

    public Metronome(Context context) {
        mSoundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
        mSoundID = mSoundPool.load(context, R.raw.metronome, 1);
    }

    public void play(float pace, boolean mute) {
        mainTimer = new Timer();
        MyTimerTask mainTimerTask = new MyTimerTask();
        mainTimer.schedule(mainTimerTask, 0, Math.round(pace * 1000));
        this.mute = mute;
        playing = true;
    }

    public void stop() {
        mainTimer.cancel();
        mainTimer.purge();
        playing = false;
    }

    public boolean isPlaying() {
        return playing;
    }

    public void setMute(boolean mute) {
        this.mute = mute;
        if (mute) {
            mSoundPool.setVolume(mSoundID, 0, 0);
        } else {
            mSoundPool.setVolume(mSoundID, 1, 1);
        }
    }

    private void playSound() {
        if (!mute) {
            mSoundPool.play(mSoundID, 1, 1, 1, 0, 1);
        }
    }

    class MyTimerTask extends TimerTask {

        @Override
        public void run() {
            playSound();
        }
    }
}

Однако вызов setMute(true) не работает.Кто-нибудь знает, как я могу отключить звук в SoundPool?

1 Ответ

0 голосов
/ 13 февраля 2019

Разобрался.Это работает, когда я использую статические методы и переменные.

public class Metronome {
    public static boolean mute = false;
    public static boolean playing = false;
    private static Timer mainTimer;
    private static SoundPool soundPool;
    private static int soundID;

    public static void loadSound(Context context) {
        soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
        soundID = soundPool.load(context, R.raw.metronome, 1);
    }

    public static void play(float pace, boolean isMuted) {
        mainTimer = new Timer();
        MyTimerTask mainTimerTask = new MyTimerTask();
        mainTimer.schedule(mainTimerTask, 0, Math.round(pace * 1000));
        mute = isMuted;
        playing = true;
    }

    public static void stop() {
        mainTimer.cancel();
        mainTimer.purge();
        playing = false;
    }

    static class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            playSound();
        }

        private void playSound() {
            if (!mute) {
                soundPool.play(soundID, 1, 1, 1, 0, 1);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...