State: Early Feb 2011.
Moviemaker is intended for the purpose of frame generation (for video making). The functionality is:
The following prerequisites are necessary to use moviemaker2:
The first version of moviemaker used in the beginning static classes for each event. This turned out to cause:
A second attemt, using functional programming, revealed:
Thus functional events provide the full functionality needed like an event class, with the code length of only the instantiation. Since the objects under consideration do not exchange messages except being called, no object orientation is needed.
The approach works out by calling the objects generating the frames with appropriate arguments. Due to the syntacical similarity of instantiating classes and calling functions, code turns out to be beautiful and elegant (see Composed Functions).
The design of moviemaker1 is only mentionend when a comparison is educating for the user. Moviemaker2 uses similar concepts as moviemaker1.
Ingredients of moviemaker2:
Parameter objects and parameters. (Parameter Objects.) This allows for e.g. tracking different timelines in a single parameter collection.
A functional programming framework. (Functions.) This comprises abstract Functions, a way to interpret non-functional arguments as Functions, basic Function classes with numerical and operational overloads.
An elegant solution for altering the parameters on call time. (Extensions.) This is used to do e.g. arithmetics with parameters.
A transformation framework for transforming meshes between coordinate systems. (Transforms.)
Layering from the beginning. (Layers and Stacks.) This comprises:
(new in moviemaker2; moviemaker1 used Event classes instead of Stacks. Events could be added to other Events. This lead to less readable and counterintuitive coding practice, because the innermost events had to be created first, wrapping them in modification Events. In moviemaker2, it is up to the user in what order to create modification and “source” Layers.)
Different effects. This comprises:
See some other doc TODOC
A graphical render display (frame snapshot and status bar), conversion to PIL images, storage on HDD. The graphical system is completely optional and decoupled. See <some other doc TODOC>
moviemaker1 has already been used for several video projects:
The refactor of moviemaker1 into moviemaker2 started after finishing these videos, and the most difficult thing was to get the new design right. In fact, the current moviemaker2 version is the fourth attempt to get it right. There were two attempts in each version so far. Most specialised events from moviemaker1 are not yet ported, but it is expected to be feasible much more effortless than the design transformation. The events present in moviemaker1 are:
Besides moviemaker, the Gabor analysis for sound analysis and parts of the music visualisation code has been implemented in an independent project, which is not covered here. This project, the quotavis project, is comparable in size to moviemaker2.
I’m deeply satisfied with the Functional approach in moviemaker and how it works out (Functions and Parameters), and I think it is feasible to use the concepts to provide vector rendering functionality. The by far largest part in this project is the polygon generation, intersection and modification code. This is in planning phase, and concrete ideas how polygon intersection can work out already exist.
In the far future, moviemaker2 shall become a scientific plotting tool. This might be an extension package, containing multiple extensions to moviemaker2, which add to the built-in extensions. It seems, that moviemaker2 might have several advantages over other plotting tools:
You might read the Elements of Moviemaker2 or switch over to the Tutorials.