home | features | documentation
download | news | project page | svn

Here is a list of the features Schnolgo currently fully or partially implements, with details about what is and is not implemented:

  • Arbitrary note divisions:
    One of the main things that Schnolgo was written for is handling massively polyrhythmic compositions. This is handled by Schnolgo's TimeUnit class. Please see notes here before reading further.

    Because all time signatures and time durations are TimeUnits, it is possible to have time signatures that represent arbitrary time subdivisions. A time signature could be, for example, 13[3:1], which would represent 13 8th-note triplets. This could also be written, for example, as: TimeUnit(Rational(13,3)). That is, 13 thirds of a quarter note.

    Much like time signatures, note positions and lengths are arbitrary. This means that any number of notes of any arbitrary polyrhythm can follow any number of notes of any other arbitrary polyrhythm. A note of the length 3[5:4[7:9]] may follow a note of the length 6[7:2[13:16]] -- regardless of where they appear in a bar -- without any problems. This is something that is very difficult or (in many cases) impossible to do with conventional sequencing software.

    This feature is fully implemented.

  • Composition by manipulation of basic themes:
    For long compositions that repeatedly use recognizable motifs, Schnolgo's Theme class has quite a few useful methods. In addition, Schnolgo's handling of Themes and Bars allows the user to painlessly rearrange the order of Bars in a Song, making repetition, arrangement, and variation easy to handle.

    This feature is fully implemented.

  • Flexible framework for algorithmic composition:
    The Theme class in Schnolgo currently supports three "fill" methods (fill, fill_by_gravity, fill_by_quota), each of which allows for different possibilities in randomization methods, given a little user customization. See pydocs starting here for a bit for info. Methods of stochastic composition should generally be easy to implement, as well as methods based on fractals or chaos generators, or any other mathematical construct.

    A personality module is being worked on but is not yet complete as of 0.2.2. However, once complete, this module should provide an incredibly flexible framework for pattern recognition and complex event and pattern chaining.
    Additionally, the fact that Schnolgo is written in python should make it easy to implement a wide variety of programmatic composition techniques using the Schnolgo framework.

  • Flexible tone framework:
    As of version 0.2.2, Schnolgo has some support for basic tonal composition through the Noteset, Scale, and Chord classes. Subclasses such as Tonal(Noteset) and Major(Scale) allow fairly recognizable Western musical naming conventions ("A:2", "2#:4", etc), but they are in no way intrinsic to the Schnolgo framework, which can be used to accomodate any temperament for any scale, including experimental tonal systems.

    Though Schnolgo is not currently very "knowledgeable" about things other than literal notes and intervals in a scale, filling more details out should not be terribly difficult, at which time Schnolgo could be used for advanced techniques in tonal composition quite easily. Further refinements are planned for the future.

  • Flexible rendering system:
    Schnolgo currently supports MIDI output and a limited text output which can be used by PureData (see and the included foundation.pd file for more info). However, these outputs are only two possible methods of rendering Schnolgo's internal structure into final products.

    Providing logic for Schnolgo to render to another format should not be difficult (for example, OSC is planned for the near future). Schnolgo's internal structure should be able to accomodate any file format you desire. Help and suggestions for fleshing out Schnolgo's list of rendering possibilities are welcome.

Summing up, the Schnolgo framework is able to accomodate a very wide variety of compositional styles without much hassle. The flexibility of the overall framework makes way for many experimental possibilities, and with some familiarity may make traditional composition easier as well.

Ready to check it out for yourself? Head on over to the downloads section and have a look at the provided tutorials!