Simple graphical dataflow language for algorithmic composition allowing free exploration but with courseware available for music education in world-music (high school age and up)
All calculation is demand driven. Output modules have specific actions on a mouse click or push (like play next input on click, repeatedly play next input on mouse push-hold). Timing during mouse hold is not guarenteed, but savely-timed larger musical sequences can always be assembled in the patch itself. There is one general reset button to reset the state of all modules. This button may or may not reset the random seed for reproducible results. Non-connected inputs have (user-defined) defaults. All modules can output indefinately (a end-of-stream token could be a good extension).
A simple naming system for musical data, which supports names of pitches, intervals, dynamics, and durations is assumed. The NOTE module converts data implicitly to MIDI whenever needed. The NOTE module accepts, next to these names, also raw MIDI numbers, frequencies, cents etc. The names have a textual representation (including note symbols for durations, no full CMN is foreseen) for use in CONSTANT and textual ouput modules. Musical objects (notes, sequences etc.) have a list-like internal representation which can be represented textually, mainly for debugging. A typing system could be a nice extension, disallowing connections between differently typed output and inputs. However, most choice system modules need a 'list-of-anything' as their input and return a 'anything' at their output, which makes the design of consistent type resolution not easy and a untyped or dynamically typed approach easier.
A fancy graph editor forms the front end. It allows easy creation of connections, moving modules around while maintaining graphic consistency, selection of modules from the library, cut/past/copy etc. Modules can have their own (user defined icons). There is a method for naming inputs and growing the number of inputs of a module. Compound modules can be opened (double-click) edited and closed. Their may be provisions for visualizing or inspecting a module's state and animation of the dataflow. The graphical representation given in this paper is just a quick and dirty approximation, ignoring most graphical aspects.