我是编程和颤振的新手,我只是被困住了。
我想建立一个可以以固定间隔加速的节拍器。例如,每 5 秒,计时器每分钟加快 10 次。
我使用 Timer.periodic 编写了基本节拍器;现在,我认为使用新的 Timer.periodic 每 5 秒加速前一个计时器可以工作,实际上我不知道它是否有效。
如果我取消定时器的前一个实例,修改持续时间,并启动一个新的定时器,我可以听到间隙,然后它是异步的。有没有更简单的方法可以在它仍在运行时对其进行修改?还是有其他方法?
没有办法Timer
在它运行时修改它的间隔,所以唯一的方法是像你正在做的那样用修改后的间隔触发一个新的。
但是,我是否可以建议一个替代解决方案,而不是取消以前的计时器,而是等待它完成,然后再触发一个新的计时器。这将消除形成的“差距”。(有趣的是,使用 管理这可能有点烦人Timer.periodic
,因此您可以尝试使用普通的Timer
。)
class Metronome {
double tempo;
bool active = false;
Metronome([this.tempo = 60.0]);
void start() {
active = true;
Timer(_getDuration(), _handleEvent);
}
void stop() {
active = false;
}
void _handleEvent() {
// TODO: Handle metronome event, e.g. make the tick sound
if (active) {
Timer(_getDuration(), _handleEvent);
}
}
Duration _getDuration() {
final time = 1 / tempo;
return Duration(
seconds: time.toInt(),
milliseconds: (time * 1000).toInt() % 1000,
microSeconds: (time * 1000000).toInt() % 1000,
);
}
}