You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.

Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

animation

Utility for creating animations from a series of images

make-animator

[procedure] (make-animator #!key (magnitude 10000) (frames-per-second 4) (type png) (width 1600) (height 900)) → Two values: next-frame and finalize

Create an animator, which consists of two values: a frame-creator and a finalizer.

Next-frame is a niladic function which returns the filename of the next frame; finalize is a monadic function taking the name of the resultant animation (e.g. "graph.avi").

magnitude
Roughly the number of animations one anticipates
frames-per-second
Frames per second
type
The frame type; one of e.g. "png", "jpg"
width
The width of the frame in pixels (#f for no scaling)
height
The height of the frame (#f for no scaling)
(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)))

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

https://github.com/klutometis/animation

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.