slippery chicken is documented in the form of a manual (this document: the main source of discursive information and examples), source code documentation (for details on individual methods, classes, and functions), and papers.
I'm increasingly using a wiki to document specific features of slippery chicken. It's becoming a HOWTO, with code snippets. Any users who want to contribute there should drop me a line so that I can add them as authors.
In addition there are several articles related to the use of slippery chicken on Michael Edwards's blog. Some of these explore a particular technique in detail, along with code, others are more general. Michael's miniblog is also a good resource for quick questions/info and you might find the facebook group useful.
You may also be interested in looking at the list of changes that have been made to the software between different releases. This is documented in version-history.txt
Lisp Resources
What this manual assumes is familiarity with Lisp. The following online resources should help you get up to speed with the language:
Practical Common Lisp, especially the chapter Loop for Black Belts
Also useful is a reference to all ANSI Common Lisp functions, etc., such as the Common Lisp Hyperspec from LispWorks.
Manual Table of Contents
The manual is broken down into the sections listed above. Feel free to jump into the Demo compositions first if you prefer to look at a lengthy example explained in detail; or skip the first Architecture page on the object-oriented structure of slippery chicken and dive straight into pitches and rhythms. Or skip text altogether and get an overview from the videos.
Architecture
- Objects, slots, methods, functions, and keywords
- Pitches
- Rhythms
- Instruments, players, and the ensemble
- Articulation, dynamics, performance indications, and note-heads
- Tempo
- Post-generation data editing
- slippery chicken and CLM
- Setting the output directory
- The sndfile-palette
- The call to clm-play
- How it produces the new sound files
- Start times, end times, and durations
- Base frequency
- Source sound file groups
- Other useful sndfile class slots
- Other useful clm-play arguments
- clm-play arguments for output format
- Tape parts with independent rhythmic structures
- User-defined CLM instruments with clm-play
- Score layout
Demo compositions and tutorials
- (slippery-chicken code template)
- "Primary Disposition" — Core usage
- "Second Law" —
Intra-phrasal looping
- Setting variables
- Multiple curves in one pitch-seq-palette
- Adjusting instrument attributes for one piece
- Setting tessitura for one piece
- Well-considered set palettes
- An application of fibonacci-transitions
- An application of the chop method
- Combining chop and fibonacci-transitions for intra-phrasal looping
- The rthm-seq-map and orchestration
- Assembling the rthm-seq-map from the chop fragments
- rthm-seq objects of equal length
- re-bar
- Adding a tape part using CLM
- "Nouveau Reich" — User-defined algorithms to generate and manipulate slippery-chicken data
- "Tempus Perfectum" —
Composing with L-Systems
- Defining the L-system elements
- Defining the L-system rules
- Constructing the rthm-seq-map using do-simple-lookup
- Shaping the ensemble's tessitura
- Adding separate computer players to the ensemble
- Setting up the directory and sndfile-palette for CLM output
- Generating the CLM computer parts
- Generating the MIDI and printable score output
- A tonal example — A modular approach to
composing tonal pieces
- The modules: 3- and 4-voiced improvisation patterns
- sc's pitch-selection algorithm and voice-leading
- Converting note-names to pitch-seq numbers
- Generating the set-palette with :transposition
- Using the l-for-lookup class for harmonic progressions
- An assoc-list object to store transposition rules
- Assembling the set-map from the transpositions list
- An assoc-list object to store module combinations
- Assembling the rthm-seq-map from the combos-al
- set-limits for the C-transpositions of the rthm-seqs
- Transposing the set-limits- curves
- Variables for repetition in the rthm-seqs
- The call to make-slippery-chicken
- The individual voices in the rthm-seq-palette
- Enharmonic spellings that reflect the tonality
- Inserting key changes and double-bars
- Changing staff names for same instruments
- Output
- "Reeling Trains" — Composing with
Rhythm Chains
- Functions to auto-insert dynamics and articulation
- Adjusting the chord functions
- Defining the rhythm fragments
- Setting activity and auto-insertion of rests and rhythms
- Setting up the players and adding voices
- Automatic pitch-seq-palettes
- The set-palette and the set-map
- Set-limits for each instrument and each set
- The call to make-slippery-chicken
- Post-generation placement and editing of marks
- Consolidating durations
Featured algorithms
- Fibonacci functions
- chop
- L-systems
- Rhythm Chains
- The "procession" algorithm
- The procession keyword arguments
- General attributes of the make-rthm-chain function
- Explaining make-rthm-chain through a simple example
- Using fibonacci-transitions instead of procession
- An extra level of fibonacci-transitions
- Some useful post-generation editing methods
- consolidate-notes
- consolidate-rests-max
- tie-over-notes
- map-over-bars
- re-bar
- add-voice
- Permutations
Exercises
- Core usage
- Intra-phrasal looping
- sc and CLM
- Post-generation data editing
- Score layout
- Permutations
- L-systems
- Rhythm chains