func metronome (beats_per_minute = 72, beats_per_bar = 4) {
var counter = 0
var duration = 60/beats_per_minute
var base_time = Time.micro+duration
STDOUT.autoflush(true)
for next_time in (base_time..Inf `by` duration) {
if (counter++ %% beats_per_bar) {
print "\nTICK"
}
else {
print " tick"
}
Sys.sleep(next_time - Time.micro)
}
}
say metronome(ARGV.map{ Num(_) }...)