chickadee » animation

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

make-animator #!key (magnitude 10000) (frames-per-second 4) (type png) (width 1600) (height 900)procedure

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.

Contents »