From SuperCollider to Slippery Chicken by trial-and-error

In the last 72 hours I used the trial-and-error (mostly error) method of composition to write a disklavier piece in Slippery Chicken. I had never used a lisp type language before and mostly discovered that this is nothing like SuperCollider (which I’ve been having a love-hate relationship with for the last decade) and it isn’t possible (at least for me) to learn enough to get creative with it in 3 days.

The result of this endeavour was a suite of six pieces: your-title-here1-6, which reflect various stages of learning to wrangle slippery bits of chicken code into new arrangements and executing it to work out what I’ve just changed. I quickly learned that to make anything more than minor changes between checking the code output would result in confusion and frustration as I tried to work out which brackets don’t match up or what coding concept my SuperCollider shaped brain has misunderstood.

This process of course wasn’t exactly aided by my aversion to reading manuals and inability to concentrate on watching five minute long videos which probably contain all the answers to everything in the slippery chickenverse.

My composition process ended, mostly because time-til-concert reached zero before piece seven –  which may have engaged more deeply with dynamics – was finished, but here’s some things I learned which might help future SuperCollider->Slippery Chicken converts get going a bit quicker than I did:

  • everything in Slippery Chicken happens in bars (although apparently this can be bypassed by working in lisp directly…). Your bars need a time signature, and if you have 4 durations in the bar then you also need 4 pitches. This was probably the biggest shock to my system after spending the last 10 years liberally shoving any number of pitches and durations in arrays and letting Pbinds work out the rest.
  • if your number of durations and number of pitches aren’t the same the code wont run.
  • you can’t actually specify the exact pitches you want to use. You specify pitch sets and then approximate points in the pitch set where you want to choose a pitch from.
  • you also can’t specify pitches or intervals in chords (i think?).
  • the chords are generated by chord functions which are specified per instrument not at the place you want to use the chord.
  • each rhythm sequence and pitch set gets some kind of name and that name could be a single integer.
  • but tempo is specified by bar number, which could look the same as your rhythm seq/pitch set naming, but is unrelated.
  • there’s no modularity in slippery chicken – the bar based structure means that all the parts of the code need to have the same number of bars match up to other bits of the code, so most of the time copy and pasting bits of code in from other examples in the manual will probably just break your code.

Of course all of these things are explained in the manual, so if you have more time/patience and a longer concentration span than me, then that’s a good place to start.

One thought on “From SuperCollider to Slippery Chicken by trial-and-error”

  1. Most of what you write Shelly does apply to the “orthodox” use of slippery
    chicken but that’s just one way of using it. You can bypass bars and have
    exactly the pitches you want but that would mean another way of working than
    perhaps the example(s) you looked at.

    Labelling data (like harmonic sets) is fundamental to the reuse of material and
    mapping structures. Labels (IDs) can be numbers, strings, or symbols. Lots of
    other functionality though is referenced via bar numbers, for convenience. So
    yes, numbers can refer to many things.

    slippery chicken is in fact highly modular, hence its object-oriented design. But
    perhaps you mean modular in a supercollider way, rather than as the computer
    science term?

    Here’s an example of making a piece without a call to
    make-slippery-chicken (so no rthm-seq-maps or set-maps):
    don’t flinch

Leave a Reply

Your email address will not be published. Required fields are marked *