Find file
Fetching contributors…
Cannot retrieve contributors at this time
88 lines (82 sloc) 3.23 KB

== animation

Utility for creating animations from a series of images toc:


<procedure>(make-animator #!key (magnitude 10000) (frames-per-second 4) (type png) (width 1600) (height 900)) → Two values: next-frame and finalize</procedure> Create an animator, which consists of two values: a frame-creator and a finalizer.

is a niladic function which returns the filename of the next frame; is a monadic function taking the name of the resultant animation (e.g. ).

: Roughly the number of animations one anticipates
: Frames per second
: The frame type; one of e.g. "png", "jpg"
: The width of the frame in pixels (#f for no scaling)
: The height of the frame (#f for no scaling)
<enscript highlight="scheme">(define (make-animator #!key (magnitude 10000) (frames-per-second 4) (type "png") (width 1600) (height 900)) (let ((directory (create-temporary-directory)) (current-frame 0) (digits (inexact->exact (ceiling (/ (log magnitude) (log 10)))))) (define (next-frame) (let ((frame (make-pathname directory (format (format "~~~a,48d" digits) current-frame) type))) (inc! current-frame) frame)) (define (finalize animation) (let ((options (option-string (append `((type unquote type) (fps unquote frames-per-second)) (if width `((w unquote width)) '()) (if height `((h unquote height)) '()))))) (run (mencoder ,(format "mf://~a" (make-pathname directory (format "*.~a" type))) -mf ,options -ovc lavc -o ,animation)))) (values next-frame finalize))) </enscript> ==== Examples In this hypothetical example, we're running a depth-first-search on a graph; outputting an animation frame every step.

 (receive (next-frame finalize) (make-animator)
   (let ((graph (make-random-graph)))
     (call-for-each-frame (depth-first-search graph)
                          (lambda (graph)
                            (write-graph-as-png graph (next-frame))))
     (finalize "graph")))

=== About this egg

==== Author

Peter Danenberg ==== Repository ==== License BSD ==== Dependencies

==== Versions
0.1 : Initial release
0.2 : Fix cock-invocation.
0.3 : Add width and height.
0.3.1 : Remove the dependency on setup-helper-cock.
0.3.2 : Remove the dependency on debug.
0.3.3 : Use hahn.
==== Colophon

Documented by hahn.