Skip to content

Instantly share code, notes, and snippets.

@jbclements
Created November 15, 2012 00:41
Show Gist options
  • Save jbclements/4075883 to your computer and use it in GitHub Desktop.
Save jbclements/4075883 to your computer and use it in GitHub Desktop.
Code from class, 2012-11-14
(require (planet clements/rsound:4))
(require "event-channel.rkt")
(require 2htdp/image)
(require 2htdp/universe)
(define ec (make-event-channel))
(send-event ec 400)
;; an event is either
;; - (make-note-start number)
;; - (make-note-stop)
(define-struct note-start (pitch))
(define-struct note-stop ())
;; latch : remember the last non-false value
(define (latch input old)
(cond [(false? input) old]
[else input]))
(check-expect (latch 34 49) 34)
(check-expect (latch false 49) 49)
(define (env-fun last-evt old)
(cond [(note-start? last-evt) 0.5]
[else
(max 0.0 (- old (/ 1 44100)))]))
(signal-play
(network ()
[last-evt (latch (try-get-event ec)
(prev last-evt
(make-note-stop)))]
[env-amp (env-fun last-evt (prev env-amp 0.0))]
[tone (sine-wave 440)]
[out (* tone env-amp)]))
;; a world is false
;; keh : world key -> world
(define (keh w k)
(cond [(key=? "1" k)
(begin (send-event ec (make-note-start 440.0))
w)]
[(key=? "2" k)
(begin (send-event ec (make-note-start 920.0))
w)]
[else w]))
;; kreh : world key -> world
(define (kreh w k)
(begin
(send-event ec (make-note-stop))
w))
(define (fake-draw w) (empty-scene 100 100))
(big-bang #f
[on-draw fake-draw]
[on-key keh]
[on-release kreh])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment