Metronome: Difference between revisions

Content added Content deleted
(Scala solution added)
Line 724: Line 724:
TICK tick tick^C
TICK tick tick^C
</pre>
</pre>

=={{header|Phix}}==
<lang Phix>integer tempo = 120, -- beats per minute (max 800)
measure = 4, -- beats per bar
runsecs = 5 -- total run time (rounded up to whole bars)

integer low_freq = #200, low_duration = 20,
high_freq = #400, high_duration = 20
atom k32=0, xBeep
atom t0 = time(), count = 0
atom duration = 60/tempo,
next = time()+duration

while time()<t0+runsecs do
for j=1 to measure do
if platform()=WINDOWS then
if k32=0 then
k32 = open_dll("kernel32.dll")
xBeep = define_c_proc(k32, "Beep", {C_INT,C_INT})
end if
if j=1 then
c_proc(xBeep,{high_freq,high_duration})
if count=0 then t0 = time() end if
else
c_proc(xBeep,{low_freq,low_duration})
end if
else
puts(1,7)
end if
count += 1
puts(1,iff(j=1?"\nH":"L"))
sleep(next-time())
next += duration
end for
end while
printf(1,"\naverage %f bpm\n",{count*60/(time()-t0)})</lang>


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==