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> |
||