I haven’t been doing much with generative music of late other than some random brainstorming. Just posting to claim this blog on Technorati. Nothing to see here!
I’ve been intrigued recently by a newer sound programming language, ChucK. I originally heard about it via an NPR piece on the Princeton Laptop Orchestra (PLOrk), which is just a cool idea in and of itself.
ChucK is, thankfully, being developed for all 3 major platforms, and there are versions of its smaller IDE, MiniAudicle, available for Linux, OS X, and Windows. Its development community is quite active, and the documentation is substantial without being overly-technical. ChucK’s concept and approach is not entirely dissimilar from that of SuperCollider. Though it is still in heavy, early development, and certain language features are broken or as-yet-unimplemented, I see a great deal of promise here. The code is released under the GPL, boding well for its ongoing development and expansion. There is a GUI control (sliders and such) package, but this only works on OS X.
I found that MiniAudicle was extremely easy to use and understand, with a crisp, simple interface. Language syntax is, to my eyes, straightforward and clear. I was modifying sample code within minutes, toying around for some time before even beginning to read its excellent documentation.
I tried to compile MiniAudicle on Ubuntu Intrepid, but this yielded only a slew of cryptic error messages. On, the other hand, there’s a working command-line-only ChucK package compiled for Jack in the repositories, so it’s no great loss.
I’ve been working on a ChucK class to generate chord progressions based on a flowchart. One attractive thing about the platform is that its midi out facilities could let me feed this kind of robo-improvisation to a VST host or Reason instrument. Or, I could use its synthesis engine and feed this to effects, via Jack.
When I reach a point at which I think the code might be of use for others, I’ll likely release this under the Creative Commons. Stay tuned.
After some sessions using JACK to route audio from SuperCollider and other programs to effects, I must say that I’ve really enjoyed using Ubuntu Studio. Setting up JACK’s sound driver parameters was the main hurdle, but the Ubuntu documentation site helped me out for the umpteenth time. I used the settings in that how-to guide as a starting point, increasing the Period and Buffer sizes until I got no XRUNS, accommodating my sound hardware at a respectably low latency.
If you want to use SuperCollider, PureData, or similar software on Linux, I strongly recommend using a generic i386 installer, as opposed to a 64-bit kernel, even if your CPU can handle 64 bits. SC’s client will not run on a 64-bit system, Pd seems to have array bugs, the Flash player may not work, and some other sound software has issues with the amd64 distros. I actually went with the amd64 Ubuntu Studio release before giving up and re-installing with 32 bits. (As an alternative, you can run these programs in a 32-bit chroot, but this will probably entail long-term maintenance/upgrade difficulties in exchange for the near-nonexistent benefit of running a 64-bit OS. I could not justify the time and compatibility problems.) Once I installed the 32-bit version of Ubuntu and the Hardy SuperCollider packages, I was ready to go, with even the internal server functions working.
One facility of JACK is the ability to route each program’s inputs and outputs to each other, much like a patch bay. With all of the audio processing tools, including LADSPA plug-ins, that come pre-installed in Ubuntu Studio, I had quite a bit of toys at my disposal. Routing the outs from SC to FreqTweak produced some particularly interesting sounds suitable for real-time manipulation.
I’ll post some audio files soon to share results.
So, after having a little time to audition Ubuntu, I decided to resize a Windows partition and install Ubuntu Studio. (I actually used the Ubuntu installer to re-partition, after some frustration with abortive efforts to create a GParted LiveUSB. Using the Ubuntu installer went off surprisingly well and easy, and, thankfully, I didn’t lose any data on the NTFS partition that donated the space.)
The installer for Studio is not nearly as slick as the Ubuntu install. It’s a text-based installer, which looks positively retro these days; as a former Slackware user, I was actually amused by this, at first.
I also had a serious problem. The Ubuntu Studio installer choked at the “scanning the mirror” stage. I waited an hour before going to bed, assuming it was working with no indication of progress. When I woke up this morning, it was still stuck at the same point. After reading a forum post about one user’s similar problem on an older release of Ubuntu, I switched to another virtual terminal and killed the installer processes (the last 3). This caused the installer to get back on track, asking what general sets of packages I’d like to install. Eventually, the install completed without further incident.
I had previously tried installing a number of the Ubuntu Studio packages, including the realtime Linux kernel, on my Ubuntu install under Wubi. Disk space quickly became an issue; though a virtual disk was in use, it seemed non-trivial to resize it, and moving
/usr to a new virtual partition seems to have failed. I was not particularly impressed at the cryptic failure messages from Synaptic; I imagine a newbie would be positively bewildered. More graceful and obvious errors would go a long way here. On the other hand, I did create a fairly small virtual partition (only 5G) in the first place.
I’ve been learning ActionScript 3 lately. It looks like Flash 10 (Astro)will have some interesting new support for doing sound synthesis that should be an improvement over the current hacks using the BitmapData class, so I’ll be on the lookout for that. At this point, I haven’t had a lot of time to work on any generative music algorithms in Flash, but I’m hoping that will change soon.
It seems that the wikified documentation for Pd objects that I posted about long ago, Pdpedia, may have never gotten very far off the ground. I believe I stumbled across it months ago, but now I can elicit nothing but an error from the staging server. Maybe this is a temporary situation. If you know otherwise, feel free to enlighten me.
I’ve been wanting to install Linux for some time, especially since I was a bit frustrated with the incomplete state of the SuperCollider port for Windows (Psycollider). I also just enjoy playing with Linux; I keep a headless web dev sever running Debian, but I have used Linux little on the desktop, at least for the last several years. The problem was that I had no free partitions on my desktop’s HD, and I didn’t want to resize any existing NTFS partitions. Then I found Wubi, which will install Ubuntu using a file on a Windows drive as its filesystem. This was remarkably easy, once I downloaded the Ubuntu ISO for the amd64 platform and dropped it in the same folder as the Wubi installer.
Once I had Ubuntu configured reasonably well, I started installing packages from the Ubuntu Studio project.
I’m still waiting for that to download and install, but I found that there is a port of the SuperCollider server for AMD64 in the form of a debian package. I have a wedding to attend today, but I’ll be installing that tonight. Hopefully I can get all the bells and whistles working, and perhaps play with puredata, Chuck, or Csound, too.
I haven’t really been doing much of late on the programmatic music tip. Instead, I’ve been collaborating with a friend, Insert36, on arranging and writing new songs in Reason 4.0. I really don’t think I could have produced this kind of musical output with the previous versions, primarily because of the ratty old sequencer. The new Reason sequencer is much easier to work with, and it keeps things infinitely more organized and workable. I used to use Ableton Live and sometimes Cubase SX to arrange anything longer than a few bars, but I can get things done now without having to slave everything to a Rewire host and have 2 sequencers running. I’ve always gotten along really well with Reason, so take this with a grain of salt, but I really think that 4.0 is the most important product the Propellerheads have put out since ReBirth or Reason 1.0.
I’m still finding a little time to tweak on Pure Data here and there, but I haven’t reached a stage where I’m really getting any particularly useful results. Interesting — yes. Useful — no.
One of the ideas I would like to implement is as follows.
The user would hold down a key on their MIDI keyboard (or possibly input a note in some other fashion). The software would choose a scale, possibly from a set constrained by the user. The algorithm would then play chord progressions chosen at random from a generalized chord progression map or flowchart, choosing embellished and inverted chords as well as common triads. These progressions would be simultaneously played through a MIDI instrument or internal synthesizer while being written to a MIDI file for later playback and editing. Meanwhile, the interface would show the user what chord it is playing, and what chords it had recently played, as well as the chosen scale and root note.
In this way, the user could audition a large number of progressions, chords, and scales in hopes of discovering a new basis for a song — whether a long progression or just a few chords that evoked a desired emotion.
The user might also be able to go back and edit which inversion and type of chord were played in a generated sequence, tweaking the temporal order or harmonics used.
I think that this could be realized in Pure Data with a relative minimum of fuss, maybe requiring that an extension be written in C. If I can dig up the code, I wrote a program in C with a subset of this functionality several years ago.
Comment if it sounds like an interesting tool, or if you have any ideas about how to realize this in PD, perhaps with a minimum of external coding.
Something that should be a boon to new and intermediate Pure Data users, a wiki of Pd objects is now up.
Marius Schebella on the Pd mailing list:
At the moment we still use the address http://wiki.puredata.info, but it
should be http://www.pdpedia.org in the next [few] days/weeks. (At the moment, pdpedia.org is linked to a test site.)
The general idea of the project is to have better documentation of Pd, mainly – but not only – its object classes. I hope it will become a useful tool to search for objects and how to do things in Pd. The search field should really work as a “how do I…”
All objects have some basic information like a short description, library, categories, but we also dumped text that we found in the
help patches to give a little help for filling in content. That is the goal, to get many people involved in sharing knowledge about how to use the objects, document features, and so on.
So far, the documentation for Pd is not nearly as bad as I was warned it would be. I think the PdPedia is a great idea — all the core and extension objects documented in one comprehensive resource. The self-documentation of the program (Help patches) is quite informative, as well.
One quirk I’ve noticed is that both the mailing list and the main documentation wiki are both heavy with Quebecois. I’m glad that some of the documentation appears in French, but this also accounts for some seriously poor and distracting English in those pages, as well as some documents being impenetrable to someone who can scarcely order soup in French.
I have no explanation for this prominent Francophone Canadian presence. Interesting curiosity I suppose, though I’m still left wondering why the userbase is concentrated there. Perhaps its just a vocal Quebecois minority.
I keep forgetting to check the Cycling ’74 docs and tutorials for Max, which I have heard are largely applicable to Pd.