Software » Cosy
Cosy is a COmpact Sequencing sYntax. It is a "domain specific language" (DSL) for composing musical patterns and general purpose sequencing. It generates sequential patterns of arbitrary symbols. It was designed to be generic enough for use in any context where a controllable sequence of symbols is needed. I expect it to be particularly useful for exploratory composition (audio or visual) and live coding. Currently a lot of effort is being put into making it compatible with MIDI standard for interfacing with audio software and hardware.
Cosy is under heavy development and not ready for general public consumption just yet. I'm going to try to have a real release sometime in 2009 (hopefully by Q2). In the meantime, it is quite functional and you can either:
- Try it out in your browser. This is the easiest way to take Cosy for a spin.
- Download Cosy from github. This option requires you have Ruby and Gems installed on your computer and aren't afraid of using the command line terminal to install a few gems and run Cosy with a command line interface. Cosy currently supports rendering to a midi file and directly outputting to your sound card or any MIDI-compatible audio software.
The primary goal of this software is to allow for expressing and generating complex patterns with a minimal amount of typing. I have found that GUI sequencing applications for music (step sequencers, piano rolls, trackers) impose too many limitations due to their equivalency of time and space in a simple flat structure. Intricate patterns, especially in music, involve hierarchical relationships that are not easily expressed using current GUI conventions for sequencing. (Ok, Buzz is semi-hierarchical, but it only goes one level deep and requires too much jumping around to lay down complex patterns). Some text-based programming languages address these issues, but I have found their syntax to be overly verbose. Thus, Cosy was born.
To learn more about what's under the hood, read the technical details.
And some notes on how I am defining the symbols for Cosy.
Update October 23, 2008
I added some new features in the last couple weeks:
- The "for each" construct. See this post for an explanation. This is an important hierarchical construct in Cosy.
- Duration multipliers now support ratios, which makes it easier to do things like quintuplets.
- Tempo changes are now supported.
- Octaves are optional for pitches. That means less typing, since this is supposed to be a compact syntax.
Update November 27, 2008
More new features:
- A free form type of metadata called a "label" was introduced to provide control over arbitrary parameters.
- Interval symbols were introduced to support sequencing using relative pitch changes.
- Parallel sequences are now supported to allow for counterpoint.
Examples for all these new features are now on the Cosy online preview.