I’ve had an interest in CSound for a while now — the computer music program which can do just about anything, as long as you describe your instruments and melodies in its programming language. I have a special interest in playing with different tuning systems, especially the harmonic series.
A lot of CSounders seem to be more interested in sonic textures than in melodies, but at this point I really want to concentrate on constructing melodies and counterpoint in the scales I’m interested in. This is really difficult to do without some sort of graphical front end, of which there are a number — but none which really suit me.
I’ve pretty much decided I need something in the “piano roll” style: rectangular bars to represent each note, laid out on a grid with high notes towards the top and low notes toward the bottom, with time going from left to right and the whole grid scrolling to the right as time progresses. This is a common idiom, found for example in GarageBand for the Mac or Rosegarden for Linux. Those are MIDI-friendly music programs and would take some effort to use outside of the standard 12-tone equal temperament scale. I particularly liked an old MIDI program I had for the Amiga, Music-X. At the bottom of the piano roll, it had vertical bars representing the volume (actually, MIDI velocity) of each note. I found that looping a section of music while adjusting the volume of each note was invaluable for getting a level of expressiveness that I want to bring to my non-equal-temperament music.
Of the existing tools for CSound, blue has a piano roll widget which accepts different scales, albeit ones that are the same for each octave. That would still work for me, but a couple of other things make it less than ideal: one is that the piano roll widget isn’t the main composition environment, the fragments you develop in piano rolls and all sorts of other widgets are represented as bars in a timeline. That is geared more to a different style of composition, but still plenty usable and perhaps even useful. But the real deal-breaker with blue, for me, is the inability inside the piano roll widget to adjust the volume of each note.
Then there is Rationale, a CSound front end built with a sort of piano roll as the main interface, which is built with just intonation in mind and allows for the volume of each note to be adjusted. The problem I found with it is that it has a different way of thinking about notes than I do: instead of representing a chord as a set of harmonic numbers like 10:12:15, I have to represent that as 1:1 6:5 3:2, changing the denominators all the time.
I could probably dig into Rationale’s source code and make it work for me, there’s a lot of code there and it does a lot of what I want. But it’s written in Python, and despite that being the favorite scripting language in the CSound community, I just can’t get too excited about diving into it.
I’ve decided to write my own GUI front end for CSound, and to incorporate another interest of mine in doing so by writing it in Haskell, a functional programming language that is growing in popularity. I don’t know Haskell or functional programming, so it may be a while before I can get even the simplest thing working, but I’m determined now and that’s the plan. I’ve started reading the book in earnest and doing the exercises.
It all fits together.