Írim orchestra,


About Írim

If you want to have musical ideas and think about them, the book, Advanced Music for Beginners, will teach you how. Once you have musical ideas, you will want to play with them, use them to generate more ideas, fit them together in various ways, and finally you'll want to hear them performed. The Írim software package is your playground for this.

The foundation of Írim is its orchestra, written in Csound. You give it a written score, and it will give you a soundfile, a fully produced recording that sounds like real musicians playing real (or at least plausible) instruments in a good room.

The rest of Írim will be programs (probably written in Python), to help you write scores. They will do things like generate and edit rhythms, melodies, and harmonies—with counterpoint, if you wish. These automate the theories laid out in Advanced Music for Beginners.

Version 1.0 of the orchestra is complete, and it has plenty of fancy features, like:

  • a mechanism that interprets the score and plays it in human gestures (via three virtual performers with different personalities);
  • adaptive tuning, such as good choirs do;
  • sophisticated ways of referring to pitches (by scale, mode, or chord);
  • most quantities and parameters are perceptually linear and on a standard scale of [0,100] or [-100,100], e.g., loudness is in sones and is adjusted for the sounding frequency
  • automatic strumming that figures out good fingerings for arbitrary chords and accordaturæ on the fly;
  • a variety of synthesis engines: 
    • physical models (for plucked and bowed strings),
    • subtractive synthesis (good for winds), and
    • modal synthesis (good for percussion);
  • a system of formants with fully variable registers that can be used by any of the synthesis engines—so that any instrument is potentially a consort;
  • a system for moving sound sources and the listener around in a virtual space in sophisticated ways in five different coordinate systems, controlled by simple commands;
  • output routines for arbitrary speaker arrays (using Ambisonics), or for headphones (using virtual binaural techniques);
  • mechanisms for telling the virtual performers to use special playing techniques (the sorts of things you'd normally indicate in fake Italian), and even for overriding any of their hundreds of automatic decisions—not that you need to.

I'm currently working on version 2.0 of the orchestra, which will include:

  • better sound quality (linear and minimal phase methods);
  • a new sound-in-space algorithm based on concert hall acoustics;
  • automated expressive timing, including: 
      • global definitions for meters, grooves, and tempo curves;
      • simpler timing and loudness macros with optional articulations; and
      • soundtrack-friendly features;
  • fully-controlled (expressive) impulsive instruments;
  • maybe more!

Following this, I'll work on the first and biggest compositional programs:

  • HW for generating "harmonic worlds"—databases of sonorities with measured flavors.
  • HC for writing harmony and counterpoint, according to many parameters, including the harmonization of melodies.

If anyone is interested in helping, let me know. (Honestly, I'd rather be composing than programming right now, god help me!)

There are some things I think about that I'm not going to be attempting anytime soon:

  • overhauling the orchestra to make sure it works with arbitrary intervals of equivalence and scale sizes;
  • a GUI score editor using the box notation;
  • a GUI environment integrating everything;
  • maybe an OOCL for representing musical objects more cleanly than as chunks of score.

About the Orchestra

Sorry kids. I don't have a GUI that makes writing music like a play date in cartoonland. What you get is a text-based interface that runs in batch mode. You write a score in text format using macros, probably in a Csound editor, hit a render button, wait, then play the resulting sound file (probably called "out.wav"). For example, here is a chunk of score playing a six-note phrase:

i9 $t(82'10)  $f1. $l(80) $pp(9'1) $i(00'20'6'-21.46'1)
i9 $t(92'3)   $f2. $l(60) $pp(8'7) .
i9 $t(95'6)   $f2. $l(80) $pp(8'6) .
i9 $t(101'6)  $f2. $l(70) $pp(8'5) .
i9 $t(107'7)  $f2. $l(65) $pp(8'4) .
i9 $t(114'10) $f3. $l(70) $pp(8'5) .

These are the most common kinds of statements: notes. One per line. In order, the macros are:
i9 means to use a human-like virtual performer
$t() indicates timing (start time and duration).
$f indicates phrasing (true legato {1,2,...,2,3} or single notes {0}).
$l() indicates loudness (in sones on a scale from silence (0), to clipping (100)).
$pp() indicates pitch, in this case as (octave number'modal degree).
$i() indicates the virtual performer, instrument, its tessitura, its formant, and the output channel (each output channel can be localized independently).

The text-based notation packs information onto the screen much more densely than a graphical score could, and makes editing much faster and less cumbersome than a GUI would be. Also, the data is human readable—in the Csound tradition, I've made the format as simple as it can possibly be.

The details are in two files:

  • A somewhat tidy user's manual pdf. It has all the basics. 
  • A large text file with a lot of vital addenda. All of the instruments that actually make sounds were written after the pdf was complete, so you need this for their details.

For version 2.0 I will overhaul all of this and integrate it into a nicer pdf manual. If you have questions, let me know.

Getting Started with the Orchestra

This will take a little bit of technical savvy. Frankly, I don't think I'm very good at this kind of thing, but I can do this, so I'm sure you can too.

  1. Install Csound, and get it working. I recommend the CsoundQt editor to work with it. That's all I ever use.
  2. They have a sort of "Hello world" equivalent, which is to make it beep. Make it beep.
  3. I can't help you with this. The Csound people will be glad to help you with this.
  4. Optionally, do some Csound tutorials and learn to use it. It's a wonderful thing. You won't need to know anything fancy to use my software. In particular, you won't need to edit the instruments, so you won't need to learn the Csound orchestra language. Also, mine only runs in batch mode, and has nothing to do with MIDI, so you won't need to learn any of Csound's facilities for MIDI, audio input, or realtime operation. But, it wouldn't hurt to see how the basic Csound score language works.
  5. The Írim orchestra is a big, elaborate Csound orchestra and a set of score macros for operating it. Put irim.csd and the includes directory (inc/) in your working Csound path. You'll be editing the irim.csd file below the header: this is where you put your own scores. I'll start you out with a demo score in this place (it's just the last piece I happened to be working on).
  6. Read the pdf manual, and familiarize yourself with the addenda—you'll need them both for reference.
  7. Write some tiny little phrases, and work your way up to whole pieces. I recommend rendering only one part at a time. I find having more than one output channel per run really slows things down, but then I have an ancient computer.
  8. Take heart. Version 2.0 is on the way. Things will get easier then.


The Name of the Game

I hate software/website/app names. "Írim" is a last-minute thing. At least it's not badly-spelled babytalk like an Internet company, or some meaningless reference to an unrelated composer, like Sibelius, say. It stands for "It Really Is Music", because it's not some gimmicky mathematical game that ends up making a lot of chaotic noise—it is designed to produce music. Really. The acute accent is there to remind us not to be afraid of putting diacritics on majuscules, and to make the pronunciation clear: ⁄ɪərəm⁄, suggesting a colloquial imperative, "Ear 'em"—because all that matters in music is "the ear" in the broad sense of auditory perception and the cognition that follows from it. There is no nonsense in here. You get out there and /ear 'em/ for me!

You've got to google when you name anything these days, to make sure your name isn't taken. It also amuses me to read the results like an oracle. So, I google it with the acute and find nothing proper: it's Welsh for "item", Finnish and Hungarian for "I write" or (and this also in Hebrew) "the Irish". All very encouraging. It will spur me on to write more and the diacritic keeps me from stepping on any trademarked toes. Out of curiosity, I google without the mark and find:
a Bulgarian furniture company
a "top management consulting firm"
Independent Research Institute of Mongolia
Industrial Research Investment Monitoring
Industrialized Rightshore Infrastructure Management
Interfaith Refugee and Immigration Ministries
International Research Institute of Management (Moscow)
Inter-Regional Implementation Meeting
Intensive Repairables Item Managment
Intensive Review of Internal Medicine
Institut de Recherche en Infectiologie de Montpellier
Institute for Rare Isotope Measurements
Institute for Robotics and Intelligent Machines
Institute for Youth Development and Innovativity [sic]
Institutional Research and Information Management

—none of which sound the least bit musical or interesting.

Finally, I come to this:  it's the last word of 1 Corinthians 14:2 in the Adjukru language:

"If you speak languages that others don't know, God will understand what you are saying, though no one else will know what you mean. You will be talking about mysteries that only the Spirit understands."

Golly. That's the point of the website: I'm trying to make you understand.