我正在尝试创建节拍器声音,但是,无法使它静音的功能。我希望能够在不停止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静音吗?
答案 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];
}
};