;; Impromptu-extended Logo examples ;; Load and evaluate the turtle-graphics.scm library first ;; Read the comments in that library file for details of the syntax of this implementation ;;;;;;;;;;;;;; ;; music ;;;;;;;;;;;;;; (tg:make piano (au:make-node "aumu" "dls " "appl")) (au:connect-node piano 0 *au:output-node* 0) (au:update-graph) (play-note (now) piano 60 100 10000) (tg:to (drunk-diatonic-melody pitch time) (tg:repeat 16 (play-note time piano pitch (random 50 110) 10000) (tg:make pitch-center (round (+ pitch (- (* (random) 8) 4)))) (tg:set-pos 15 (* (- pitch-center pitch) 8)) (set! pitch (pc:random (- pitch-center 2) (+ pitch-center 2) '(0 2 4 5 7 9))) (set! time (+ time 11000)))) (tg:clear-screen) (drunk-diatonic-melody 60 (now)) ;;;;;;;;;;;;;;;;;;;;; ;; voice synthesis ;;;;;;;;;;;;;;;;;;;;; (define voice1 (au:get-speech-channel)) (define voice2 (au:get-speech-channel)) (au:speak (now) voice1 "hello") (tg:to (random-choice lst) (tg:item (+ (random (tg:count lst)) 1) lst)) (tg:make nouns (list "men" "women" "wind" "moon" "forest")) (tg:make verbs (list "thinks" "runs" "laughs" "plays" "dreams")) (tg:make adjectives (list "beautiful" "magical" "blue" "silent" "large" "new")) (tg:make predicates (list "under" "over" "beside" "above" "on" "about")) (tg:make articles (list "the" "several" "one" "each")) (tg:to (haiku) (au:speak (now) voice1 (random-choice verbs)) (au:speak (+ (now) 30000) voice2 (random-choice predicates)) (au:speak (+ (now) 60000) voice1 (random-choice nouns)) (au:speak (+ (now) 110000) voice2 (random-choice articles)) (au:speak (+ (now) 140000) voice1 (random-choice adjectives)) (au:speak (+ (now) 170000) voice2 (random-choice nouns)) (au:speak (+ (now) 210000) voice1 (random-choice verbs)) (au:speak (+ (now) 240000) voice2 (random-choice predicates)) (au:speak (+ (now) 270000) voice1 (random-choice adjectives)) (au:speak (+ (now) 300000) voice2 (random-choice nouns))) (haiku) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; drawing with images ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Have a small image, about 160 pixels square,ready to use for this example ;; Replace the file path in the code with the absolute path to your image. (tg:set-bg 1 1 1 1) (tg:clear-screen) (define image (gfx:load-image "/Users/browna/Desktop/Leaves.png")) (gfx:set-image-size image 160 120) (tg:to (image-circle :size) (tg:pen-up) (tg:set-pos -260 -100) (tg:repeat 12 (gfx:draw-image (now) canvas image 0.5 (list (tg:first position) (tg:but-first position))) (tg:forward :size) (tg:right 30))) (tg:clear-screen) (image-circle 100) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; temporal recursion - Braitenberg Vehicle ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (tg:clear-screen) (tg:pen-down) (tg:make go #t) (tg:to (drive :speed) (tg:forward 6) (tg:set-pc (random) (random) (random) 1) (if (> (tg:get-x) 300) (tg:left (/ (- (tg:get-x) 300) 55)) (tg:right (/ (- (tg:get-x) 300) 35))) (if (> (tg:get-y) 300) (tg:left (/ (- (tg:get-y) 300) 30)) (tg:right (/ (- (tg:get-y) 300) 46))) (if go (callback (+ (now) (- *second* (* 500 :speed))) 'drive :speed))) ;; start - evaluate (tg:to (drive.. first. (tg:clear-screen) (tg:make go #t) (drive 80) ;; 100 kph speed limit ;; end by changing the go flag (tg:make go #f)