Android-如何在不停止的情况下在TimerTask中静音SoundPool

时间:2019-02-12 23:45:58

标签: android timer timertask soundpool android-sound

我正在尝试创建节拍器声音,但是,无法使它静音的功能。我希望能够在不停止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 :(得分:0)

弄清楚了。当我使用静态方法和变量时,它可以工作。

class RGBColor
{
    public:
        union{
          struct {
            unsigned blue:8;
            unsigned green:8;
            unsigned red:8;
          };
          struct {
            unsigned b:8;
            unsigned g:8;
            unsigned r:8;
          };
          unsigned long hex:24;
        };
        RGBColor(unsigned _r, unsigned _g, unsigned _b) : r(_r), g(_g), b(_b) {};
        RGBColor(unsigned _hex = 0x000000) : hex(_hex) {};
        void operator=(unsigned _hex)
        {
            hex = _hex;
        }
        void operator=(unsigned a[3])
        {
            r = a[0];
            g = a[1];
            b = a[2];
        }
};