New live coding project 2: a day of fiddling
Posted by Gasten on December 4, 2007
I’d love to write more, but I’m too tired. Some of the results from todays fiddling is pasted at the end.
Boy, isn’t Scheme well suited for live coding? It’s very algorithmic, and you can develop fast and abstract. And it’s the most beautiful language out there (is in looking at code as if it was a picture)!
Boy, isn’t Scheme badly suited for live coding. It’s a pain to write, a pain to read, and hell of a pain to debug!
Was a lot harder than I expected, but I managed to hack a cool script for my Xbox360 which will ease joysticking. Pasted below.
I’ve also started to swap the keyboard-controls to joystick-control in the asteroids-example. Unfortunally I managed to break it a little a couple of minutes ago, so you will have to live without it for now.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; joypad
; a joypad input listener, for use with oscjoy
; (http://www.lcscanada.com/oscjoy/index.html)
;
; usage:
; (osc-source oscjoy-portnumber)
; (define my-joypad (make-object joypad%))
; ... every frame loop ...
; (send my-joypad update)
; (display (send my-joypad get-button 0))(newline)
; (display (send my-joypad get-axis 0 0))(newline) ; returns a the value
; of the axis as a float (-1 to 1)
(require (lib "class.ss"))
(define joypad%
(class object%
(public
update ;; update the joylistener
get-button ;; get the current values for a button
get-axis ;; get the current value for an axis
)
(define buttons '())
(define axes '())
(define button-state '())
(define (joypad-new)
(super-new)
(set! buttons (make-buttons 16 '()))
(set! axes (make-axes 16))
(set! button-state (make-buttons 16 '())))
(define (make-axes n)
(make-vector n 0))
(define (make-buttons n l)
(if (zero? n)
l
(make-buttons (- n 1) (cons 0 l))))
(define ax-map (vector
(vector 0 1) ; left stick
(vector 3 4) ; right stick
(vector 2 5))) ; l/r triggers
(define (get-button n)
(list-ref buttons n))
(define (button-changed n)
(list-ref button-state n))
(define (get-axis n1 n2) ; return the correct axis. Mapped in ax-map.
(vector-ref axes (vector-ref (vector-ref ax-map n1) n2)))
(define (get-axes) ; can probably be deleted pretty painless
axes)
(define (set-button! n s)
(list-set! buttons n s))
(define (update)
(define (drain path value) ; drains all osc events for a message and
(if (osc-msg path) ; only reports the last one which is ok for
(drain path (osc 0)) ; this sort of control
value))
(define (do-axes n)
(let ((value (drain (string-append "/oscjoy.0.axis." (number->string n)) #f)))
(cond
((number? value)
; get a vector of all the axes
; and set the value (make usre it's in range).
(vector-set! (get-axes)
n
(* 2 (- value 0.5) )))))
(if (zero? n)
0
(do-axes (- n 1))))
(define (do-buttons n)
(let ((value (drain (string-append "/oscjoy.0.button." (number->string n)) #f)))
(cond
((number? value)
; have we changed?
(if (not (eq? (get-button n) value))
(list-set! button-state n #t)
(list-set! button-state n #f))
(set-button! n value))))
(if (zero? n)
0
(do-buttons (- n 1))))
;(display (osc-peek)) (newline)
(do-axes 16)
(do-buttons 16))
(joypad-new)))
Night.

oscjoy update « Haunted House said
[...] they say New live coding project 2: a day of fiddling « Haunted House on New live coding projectGasten on Vim-tip #1Gasten on A walk in the valley of bugs [...]
sandrar said
Hi! I was surfing and found your blog post… nice! I love your blog. :) Cheers! Sandra. R.
jenna said
Sign: yyams Hello!!! punht and 843dhursyvpxd and 7004 My Comments: Cool!