Introduction

The blue music composition environment entails the use of timelines on which SoundObjects are placed. these SoundObjects are basically lists of notes, grouped as a single perceived object. These can be as simple as a single note, or a group of notes one might handle as a "motive", the "bassline for the A phrase", "the results of an predetermined matrix of sounds and silences through 28 flippings of coins", or "the stochastic group motion of migrating birds mapped to 17 instruments that produce variable timbres", etc. but underneath it all, regardless of what SoundObject you use, ultimately the SoundObject will produce notes in which blue will add to the running score and output to a .CSD file.

Seen this way, blue represents a sort of visual note-generator scheduling system. when blue was earlier on in it's development, I realized that in creating blue, I created a simple generic temporal framwork which would allow people to create score generators and only worry about generating those scores, while easily adding them to the framework of blue which would allow the manipulation and scheduling of those score generators without the original authors having to worry about developing that aspect of it. as my imagination began to wander, I saw that things like cmask, mother, cybil, and other scoring languages that have been built over time for csound could be used in the way they've always been used, but that they could easily be integrated into blue.

for myself, the SoundObjects I've built have offered me the ability to separate my concerns: as the author of blue, I concern myself with finding new ways to organize and manipulate SoundObjects, and as a SoundObject author, I concern myself just with making objects that generate notes, leaving the scheduling of that SoundObject to the framework.

But, not everyone programs in Java, and there are also scripts and script libraries to be used in other languages already made.

Having seen that the SoundObject system and temporal framework of blue was a pretty open architecture, I decided at the time to explore the possibilities of using script within blue by creating the Python SoundObject so that i could use maurizio umberto puxeddu's Python pmask library within blue. what that allowed was for the ability to write Python scripts within blue, blue executing and bringing back in the generated notes from the Python script and integrating that with the other notes of the native Java SoundObjects.

After successfully developing and proving the possibility to myself, I continued on to build other SoundObjects as user's requested or as I desired for my own compositional explorations.

One day, some time back, a user suggested that I build a generic external SoundObject that would let you write any script within blue, provide a commandline to be used, and have blue write the script to a temporary file, run the commandline on it, and bring the generated notes back into blue. busy at the time, I later did build that SoundObject, and it opened up a world of possibilities.

With the new external SoundObject, it became possible to write script in any language within blue. this means one could use not only scripting languages like perl, Python, shell scripts, batch files, JavaScript, wscript, etc., but also run specially created text input for score generators like CMask, nGen, etc. (note: cmask does not currently work within blue, as it is unable to print to stdout; more on this and possible ways around it later). It also meant that other people's work on score generating libraries and scripts, regardless of language, now had the ability to be reused within blue.

As blue has developed the past couple of years, from its initial goals of embedding timelines within timelines, to its current state as a generic temporal framework and all-around composition environment, I've always developed with the mindset of keeping this as open and generic as possible, to build a tool that could grow as I knew I'd always be exploring new things in composition. These days, the inclusion of these two SoundObjects, the external SoundObject and the Python SoundObject, are now becoming part of my everyday use as I work with blue, allowing me to explore ideas rapidly, creating objects and functions which follow the models of my musical work, and which also serve as possible prototypes to new SoundObjects which I may later decide to create in Java and add to blue.

From my own experience, I'd highly recommend to anyone that they learn a little bit about scripting and how to use it to achieve their musical goals, as I've found the experience highly liberating and musically rewarding .