Metronome: Difference between revisions

Content added Content deleted
m ({{omit from|TPP}})
Line 750: Line 750:
eClick:
eClick:
EndDataSection
EndDataSection
</lang>

=={{header|Racket}}==
<lang Racket>
#lang racket

(require racket/gui)

(define msec 500)
(define sounds '("c:/home/stuff/sounds/Clicked.wav"
"c:/home/stuff/sounds/Bink.wav"))
(define colors '("red" "green"))

(define f
(new frame% [label "Metronome"] [width 200] [height 200]))
(define c
(new (class canvas%
(define brushes
(map (λ(c) (new brush% [color c] [style 'solid])) colors))
(define cur 0)
(define/override (on-paint)
(send* (send this get-dc)
(clear)
(set-brush (list-ref brushes cur))
(draw-rectangle 0 0 200 200)))
(define/public (flip!)
(set! cur (modulo (add1 cur) (length sounds)))
(play-sound (list-ref sounds cur) #f)
(on-paint))
(super-new))
[parent f]))

(define (flip)
(define init (current-inexact-milliseconds))
(define next (+ msec init))
(define ticks 1)
(let loop ()
(when (> (current-inexact-milliseconds) next)
(set! ticks (add1 ticks))
(set! next (+ init (* msec ticks)))
(queue-callback (λ() (send c flip!))))
(sleep 0.01)
(loop)))

(send* f (center) (show #t))
(void (thread flip))
</lang>
</lang>