;; The first three lines of this file were inserted by DrRacket. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-beginner-reader.ss" "lang")((modname |2017|) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f () #f))) (require rsound) (require 2htdp/universe) (require 2htdp/image) ;; number -> number (define (sec s) (* s FRAME-RATE)) #;(define snd (rs-read/clip "/tmp/fool-believes.wav" 0 (sec 30))) ;; a PlayerState is (make-ps boolean number) ;; where playing indicates whether the song is playing, ;; and songpos represents the frame of playback (define-struct ps (playing? songpos)) (define INIT-STATE (make-ps #t 0)) ;; PlayerState KeyEvent -> PlayerState ;; handles a keypress (define (key-handler ps evt) (cond [(equal? evt " ") (make-ps (not (ps-playing? ps)) (ps-songpos ps))] [else ps])) (check-expect (key-handler (make-ps #t 1234) " ") (make-ps #f 1234)) (check-expect (key-handler (make-ps #f 1234) " ") (make-ps #t 1234)) (check-expect (key-handler (make-ps #f 1234) "q") (make-ps #f 1234)) ;; play some of the song, if appropriate ;; PlayerState -> PlayerState (define (maybeplay ps) ...) ;; draw an empty scene ;; PlayerState -> Image (define (draw-es ws) (empty-scene 200 200)) (define (main dc) (big-bang INIT-STATE [to-draw draw-es] [on-key key-handler] [on-tick maybe-play 1/20]))