Is the below really much less natural to write? I really enjoyed playing the qwerty row from left to right, or perhaps I was pressing the number keys at the same time :-)
#lang racket (require (except-in (planet clements/rsound) overlay scale) 2htdp/universe 2htdp/image) (define octave 48) (define volume .4) (define duration 22050) (define (main) (big-bang `(,octave ,volume ,duration) (to-draw my-draw) (on-key my-key))) (define (my-draw num) (place-image/align (text (format "~s" num) 11 'red) 10 50 'left 'top (empty-scene 100 100))) (define (my-key w key) (match (cons key w) [`("0" ,oct ,vol ,dur) `( 0 ,vol ,dur)] [`("1" ,oct ,vol ,dur) `(12 ,vol ,dur)] [`("2" ,oct ,vol ,dur) `(24 ,vol ,dur)] [`("3" ,oct ,vol ,dur) `(36 ,vol ,dur)] [`("4" ,oct ,vol ,dur) `(48 ,vol ,dur)] [`("5" ,oct ,vol ,dur) `(60 ,vol ,dur)] [`("6" ,oct ,vol ,dur) `(72 ,vol ,dur)] [`("7" ,oct ,vol ,dur) `(84 ,vol ,dur)] [`("8" ,oct ,vol ,dur) `(96 ,vol ,dur)] [`((or "=" "+") ,oct ,vol ,dur) `(,oct ,(if (< vol 1) (+ vol .1) vol) ,dur)] [`((or "-" "_") ,oct ,vol ,dur) `(,oct ,(if (> vol 0) (- vol .1) vol) ,dur)] [`("z" ,oct ,vol ,dur) `(,oct ,vol ,(if (> dur 11025) (- dur 11025) dur))] [`("x" ,oct ,vol ,dur) `(,oct ,vol ,(if (< dur 88200) (+ dur 11025) dur))] [`("q" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 12 oct)) vol dur)) w] [`("w" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 13 oct)) vol dur)) w] [`("e" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 14 oct)) vol dur)) w] [`("r" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 15 oct)) vol dur)) w] [`("t" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 16 oct)) vol dur)) w] [`("y" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 17 oct)) vol dur)) w] [`("u" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 18 oct)) vol dur)) w] [`("i" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 19 oct)) vol dur)) w] [`("o" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 20 oct)) vol dur)) w] [`("p" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 21 oct)) vol dur)) w] [`("[" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 22 oct)) vol dur)) w] [`("]" ,oct ,vol ,dur) (play (make-tone (midi-note-num->pitch (+ 23 oct)) vol dur)) w] [`("a" ,oct ,vol ,dur) (play c-hi-hat-1) w] [`("s" ,oct ,vol ,dur) (play c-hi-hat-2) w] [`("d" ,oct ,vol ,dur) (play o-hi-hat) w] [`("f" ,oct ,vol ,dur) (play snare) w] [`("g" ,oct ,vol ,dur) (play bassdrum) w] [`("h" ,oct ,vol ,dur) (play bassdrum) w] [`("j" ,oct ,vol ,dur) (play bassdrum-synth) w] [`("k" ,oct ,vol ,dur) (play clap-1) w] [`("l" ,oct ,vol ,dur) (play clap-2) w] [`(";" ,oct ,vol ,dur) (play crash-cymbal) w] [else w] [else (displayln `(no match ,w))])) (main) _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users