RTC-lib 5.0 for Maxreleased: 10 January 2010
This software library - a collection of patches and externals for Max/MSP (an interactive graphical programming environment for multimedia, music, and MIDI running on a Macintosh; © by IRCAM / Cycling74) - offers the possibility to experiment with a number of compositional techniques, such as serial procedures, permutations and controlled randomness. Most of these objects are geared towards straightforward processing of data. By using these specialized objects together in a patch, programming becomes much more clear and easy. Many functions that are often useful in algorithmic composition are provided with this library - therefore the composer could concentrate rather on the composition than the programming aspects.
The Real Time Composition Library (RTC-lib) was developed during my extensive work on Lexikon-Sonate (1992 ff.), an interactive realtime composition for computer-controlled piano.
Regardless the fact that it was conceived for a specific project it became more and more obvious that its functionalities are open and generic enough to be used by other composers in different compositional contexts. Based on paradigms which have been extracted from serial thinking (cf. Gottfried Michael Koenig and Karlheinz Stockhausen) and its further development until nowadays it does not force towards a certain aesthetic, but provides a programming environment for testing and developing compositional strategies.
The Real Time Composition Library comes with a Hypertext-like on-line help which allows to have a perfect overview on the library objects and their multiple relationships.
At the very beginning of 2010, a new version of RTC-lib for Max5 has been released which runs on PPC and Intel processors under Mac OS X 10.4 or later (including Snow Leopard). In this release, most of the former externals have been rewritten as abstractions which makes it much easier to maintain the library and to port it to other platforms. Thanks to David Zicarelli and his zl object, most of the indispensable list externals of James McCartney and Serge Lemouton are now already part of Max. For backwards compatibility, I kept the original names of the former externals, but they are replaced by abstractions built around zl.
The RTC-lib is composed of different categories of objects: Toolbox, Chance, Lists, Harmony, Rhythms, Envelopes, MSP objects, Jitter objects.
Content of the RTC-lib 5.0
The library consists mainly of "abstractions" (Max patches that appear as objects) and a few so-called externals programmed in C. Most of them have been written by myself, with some contributions from other authors like Gerhard Eckel (GMD, St. Augustin) and Serge Lemouton (IRCAM, Paris), James McCartney (namely his generic list objects), and Peter Elsea's (UCSC) selected list objects from his Lobjects library. Other contributions came from Gary Lee Nelson, Les Stuck, Chris Dobrian, Timothy Place, Orm Finnendahl, Trond Lossius and jasch. Because the library objects are highly dependent on each other, it is recommended not to take them apart.
16step-seq Abstraction rhythmical sequencer @ Abstraction Scales a standard slider (ranging from 0 to 127) between min and max. add% Abstraction Adds a certain percentage <int, float> to values <int, float> in left inlet. alea Abstraction random based object alea-rhythm Abstraction rhythm generator anti-bis Abstraction Filters out immediate repetitions of integers. Right output sends a bang whenever this occurs. anti-bis&osc Abstraction Filters out direct repetitions and when a number has occured the penultimate time anti-interval Abstraction Filters out a certain interval anti-octave Abstraction Filters out octaves between two consecutive notes anti-octave&prime Abstraction Filters out octaves and primes anti-osc Abstraction Filters out an integer which has occured the penultimate time. banger External An object to bang outlets sequentially. between Abstraction random based object between-lin Abstraction random based object between-lin-urn Abstraction random based object between-log Abstraction random based object between-log-urn Abstraction random based object block-bang Abstraction Filters out bangs that arrive before a certain time span ("blocking time") is over. BPM2ms Abstraction Converts beats per minute (BPM) into milliseconds. brown-melody Abstraction Generates a brownian-mouvement-like melody brown-rhythm Abstraction Generates a brownian-movement-like rhythm brownian Abstraction random based object butfirst Abstraction Outputs the input list without its first element. butlast Abstraction Outputs the input list without its last element. check-octaves Abstraction Checks whether an interval list sums up to an octave check-row Abstraction dodecaphonic based object choice-rhythm Abstraction rhythm generator choose-intervals Abstraction Chooses a supply between one to five different intervals. collect Abstraction Collects numbers contrario Abstraction A number <int, float> in left inlet outputs a complimentary number. cos-slider Abstraction Transforms a linear slider into a cosine function. count-bang Abstraction Counts the number of received bangs. countdown Abstraction countdown object cp-pan~ Abstraction constant power panner cresc-decresc Abstraction crescendo / decescendo generator crossfade~ Abstraction Crossfades two input signals according to a sine function which guarantees that loudness of the result is constant. dB2lin Abstraction Converts dB into linear values. DblBang Patch Detects single or double bang del-fb~ Abstraction Delay line with feedback. divmod Abstraction divmod is the same as / and % for positive left operands. dur-from-ED Abstraction Calculates note durations from entry delays (ED) and a duration factor. ED-rhythm Abstraction rhythm generator ED-trans Abstraction produces a ritardando or an accelerando ED2EP Abstraction Converts ED (= entry delays) into EP (= entry points) first Abstraction Outputs the first element of a list. first-bang Abstraction Outputs only the first bang of a stream of bangs first-shot Abstraction Outputs only the first message of a stream of messages (bangs, ints, floats, symbols, lists) until the right inlet receives a (reset) bang. frq2note Abstraction Converts frequency into a note geom Abstraction Int in right inlet outputs the nth member of a geometrical row. grid-rhythm Abstraction rhythm generator group Abstraction groups numbers received in succession into a list. group-rhythm Abstraction rhythm generator group-rhythm2 Abstraction rhythm generator groups Abstraction random based object inc-dec Abstraction Functional implementation of the graphical user interface object Inc-Dec. infinity-row Abstraction pitch generator insert Abstraction Inserts an element after a position (= index) in the list integ Abstraction Accumulates input values <int, float> until a bang (or any input) is sent to the right inlet. intv2ratio Abstraction Converts an interval into a ratio. inv Abstraction Calculates the inversion of a number. join Abstraction Joins two lists together. key-bang Abstraction Sends out a bang whenever a certain key is pressed. Ladd External An object to add two lists, member by member. last Abstraction Outputs the last element of a list. Ldiv External An object to divide one list by another, member by member. lin2dB Abstraction Converts linear values into dB. listreg Abstraction this is for lists what the int object is for integers. listlen Abstraction listlen - outputs the length of a list or anything arriving at its inlet. Lmult External An object to multiply two lists, member by member. loop-sf~ Abstraction Loops a selected mono sndfile. Lpow External An object to raise the members of a list to the powers set in another list. Lrem External An object to divide one list by another, member by member and output a list of the remainders. Lround External Rounds off members of a list to desired precision. Lsub External An object to subtract two lists, member by member. make-choice-list Abstraction random based object make-choice-list Abstraction random based object make-ED-scale Abstraction list generator make-scale Abstraction list generator make-trans-scale Abstraction list generator markov Abstraction probability based object markov-harmony Abstraction pitch generator markov-rhythm Abstraction rhythm generator matrix12 External dodecaphonic row manipulations max-cursor Abstraction 1 or 0 send to the inlet (or given as an argument) shows or hides the mouse cursor. max-menubar Abstraction 1 or 0 send to the inlet (or given as the argument) switches MAX's menubar on or off. max-overdrive Abstraction 1 or 0 send to the inlet max-quit Abstraction Quits MAX immediately - BEWARE! member Abstraction list based object metro-dev% Abstraction rhythm generator minus Abstraction Simply makes the negative of an int sent to the input. ms2sec Abstraction Converts milliseconds into seconds. MSP-iovs~ Abstraction select I/O vector size MSP-sigvs~ Abstraction select signal vector size MSP-sr~ Abstraction Sets the sampling rate of MSP. MSP-takeover~ Abstraction MSP takeover multiple Abstraction list based object neutral-harmony Abstraction pitch generator normalize-row Abstraction Normalization of a twelve-tone row note2cents Abstraction Shows how many cents a microtonal note <float> is deviating from a tempered one. note2frq Abstraction Converts a note into frequency. note2pitch Abstraction Outputs the pitch class of a note note2st Abstraction Outputs the intervals of an incoming stream of notes nth Abstraction outputs the nths element of a list panning Abstraction Equal power panning based on John Chowning's paper "Simulation of Moving Sound Sources". pass Abstraction Let a certain percentage of bangs pass. pass-bang Abstraction Let every nth bang pass. per2pass Abstraction Converts a periodicity factor <float between 0 and 1> into a percentage value <int between 0 and 100> for the pass-object. periodic Abstraction random based object permutate Abstraction random based object permutate-row Abstraction dodecaphonic based object permute External returns the nth permutation of a list piece Abstraction list based object pitch-from-intervals Abstraction pitch generator pitch-from-row Abstraction pitch generator pitch-from-row Abstraction pitch generator pitch-from-row-mod Abstraction pitch generator pitch-from-row-mod Abstraction pitch generator pitch2note Abstraction Combines pitch class and register into a note play Abstraction Plays a note whenever a key number is sent to the left inlet. play-samp~ Abstraction Plays one sample. play2 Abstraction Plays a note whenever a key number is sent to the left inlet. position External position - sorts a list in the left inlet using the index numbers in the right inlet. QT-PercPlayer Abstraction Plays General MIDI percussion instruments directly from Quicktime QT-SndPlayer Abstraction Plays General MIDI instruments directly from Quicktime random-norep Abstraction random based object random-pan~ Abstraction random pan random-ramp Abstraction Generates randomly fluctuating envelope shapes of a given dynamic scale random-row Abstraction random and dodecaphonic based object RandomSeeder Abstraction random based object ratio Abstraction Chooses elements from a supply <int list> which are repeated according to a multiple list <int list> by using the "series" selection principle. ratio2intv Abstraction Converts a ratio into an interval reanimate Abstraction Sends out a bang on right outlet after x miliseconds if there has been no input bang in left inlet during x miliseconds. remove Abstraction Removes the nth element of a list. remove-dc~ Abstraction Removes the DC offset of an audio signal. repchord-rhythm Abstraction rhythm generator repeat-ED Abstraction sends out a certain number of rhythm bangs replace Abstraction Replaces an element of a list reverse Abstraction reverses a list of numbers. rit-acc Abstraction Generates a ritardando or an accelerando rota Abstraction random based object rotate Abstraction cyclically rotate a list round Abstraction round to next higher integer roundto Abstraction A number sent to right inlet is rounded onto a certain "grid" <int, float> sent to right inlet. row-modus Abstraction dodecaphonic based object rtc.fullscreen Abstraction toggles between full screen and window view samp10~ Abstraction Allows a polyphony of up to 10 samples at the same time. scale-changer Abstraction scale changer schweller Abstraction decrescendo-crescendo envelopes generator scramble Abstraction scrambles the order of a list of numbers. sect Abstraction outputs a list which contains only atoms that appear in both input lists. sel-princ Abstraction random based object sequence Abstraction outputs the next element of a list serial-rhythm Abstraction rhythm generator series Abstraction random based object show Abstraction Displays a list in a message box. showchord Abstraction Shows the pitch of a chord of MIDI note numbers. shownote Abstraction Shows the pitch of a MIDI note number. slice Abstraction divides a list in two. smooth-line Abstraction Interpolates smoothly between successive input values. sneak Abstraction random based object sneak-random Abstraction random based object sneak-rhythm Abstraction rhythm generator sort Abstraction sorts a list. sqrt-pan~ Abstraction square root panner st2pitch Abstraction Accumulates incoming intervals and outputs pitch classes sum Abstraction Sums up a numerical list containing integers and/or floats. super-rhythm Abstraction rhythm generator trans Abstraction transition trans-exp External exponential transition trans-lin Abstraction linear transition trans-log Abstraction logarithmical transition transp-pitch Abstraction Transposes pitch classes by a certain interval. transpose-row Abstraction dodecaphonic based object union Abstraction outputs a list which contains all atoms that appear in either or both input lists. unique Abstraction unique puts out a list comprised of those items in the left input list that are not contained in the right input list. VolAmb Abstraction Controls the ambitus between minimum and maximum dynamic by a single controller. xrandom Abstraction random based object
The development of the RTC-lib started in 1992 when I was working at IRCAM on a commission - Entsagung for ensemble and live-electronics. Having worked with computer-aided composition algorithms before on an Atari using an experimental LOGO implementation I came across Max. I immediately felt in love with it for it offered the possibility of realtime processing and interactivity. (In LOGO, it took many hours to calculate a score list which I had to transcribe into of musical notation in order to analyze it - a very time-consuming procedure).
At this time, Max appeared as programming environment mainly optimized for MIDI processing. List operations (which are crucial for my own compositional thinking which stems from serialism) have not been implemented yet. Higher-level compositional tools were not available, only customized solutions for specific problems which were not geneneric enough to be used in different contexts.
In order to create an evironment which enables one to concentrate rather on high-level compositional questions than on low-level technical problems, Gerhard Eckel and I started to develop a set of tools which became the corner stones of the RTC-lib. At the this time, Serge Lemouton (my musical assistant at IRCAM) wrote "nth" according to my indications, James McCartney released his "list objects", and a few years later Peter Elsea developed his "LObjects" (inspired by RTC-lib, as he told me). Some externals from these packages were included into the RTC-lib, and Peter Elsea was nice enough to port some of my abstractions (like trans-log) to C-externals.
On this basis, I developed a large number of higher-level compositional algorithms written as "abstractions" (objects, coded in Max): rhythm generators, harmony generators, chance operations, ramp generators, MSP functions etc. which are often based on those primordial externals that have been implemented by other authors.
Those externals (the low-level side of the RTC-lib) need to be re-compiled for each operation system. We had to make the shift from 68k processors to PPC, and now to OSX. Thanks to Peter Elsea and Thomas Grill most of the externals has been ported to Windows XP and I transformed some Macintosh specific externals back to abstractions. Thanks also to Frank Barknecht who made a version for Pd.
In 2008, the RTC-lib had to be updated in order to run on the new Intel processors. In order to ease the future maintenance, I reformulated most (but not all!) of the externals to abstractions.
As of 10 Jan 2010, a new version of RTC-lib for Max5 has been released with completely rewritten help files. Here, most of the remaining C-externals have been eliminated in order to run the library independent of computer platforms and operating systems.
On Nov 29th, 2007 I released a new beta version of the RTC-lib for Windows XP version for download. Please note that I don't have the chance to test it myself for I am not working on a PC.
Thanks to Frank Barknecht and others, RTC-lib is available for Pd (Pure Data). Download from khz96.org.
On April 1st, 2008 Karlheinz Essl has released a tutorial for his RTC-lib. It includes elaborated examples for algorithmic composition in real time. As of January 10th, 2010 an update of this tutorial for Max5 is also available.
This tutorial shows how selected compositorial issues such as harmony, rhythm, and random can be mastered with the aid of the RTC-lib. Furthermore it contains several especially adapted and documented structure generators from Karlheinz Essl's Lexikon-Sonate such as Triller, MeloChord, and Esprit.
The RTC-lib Tutorial can be downloaded as a ZIP archive of text-only Max patches and also in the new Max5 format which can be opened under MacOS and Windows OS. Please note that you have to install the latest version of the RTC-lib in order to use the patches!
© 1995-2008 by Karlheinz Essl
Lecture on Realtime Composition
Karlheinz Essl talking to music students of the University of Montana
Essl Museum, Klosterneuburg/Vienna (10 Jun 2010)
This software is copyrighted by Karlheinz Essl and others. The following terms apply to all files associated with the software unless explicitly disclaimed in individual files.
The authors hereby grant permission to use, copy, modify, distribute, and license this software and its documentation for any purpose, provided that existing copyright notices are retained in all copies and that this notice is included verbatim in any distributions. No written agreement, license, or royalty fee is required for any of the authorized uses. Modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated on the first page of each file where they apply.
IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
RESTRICTED RIGHTS: Use, duplication or disclosure by the government is subject to the restrictions as set forth in subparagraph (c) (1) (ii) of the Rights in Technical Data and Computer Software Clause as DFARS 252.227-7013 and FAR 52.227-19.
|RTC-lib 5.0 for Mac OS X
for Max5/Max6 and Mac OS X 10.4 or later; PPC or Intel processors
released 10 Jan 2010: ZIP archive for Mac (940 kB)
|RTC-lib 4.7 for Mac OS X (Universal Binaries)
for MaxMSP 4.6 and Mac OS X 10.4; PPC or Intel processors
released 2 Apr 2008: ZIP archive for Mac (740 kB)
|RTC-lib 4.0.2 for Mac OS X
for MaxMSP 4.5 and Mac OS X 10.2 (or higher); PPC processors only
released 26 Jan 2004: binhexed stuffit archive (636 kB)
|RTC-lib 4.1.1 beta for Windows XP
uploaded 5 Dec 2007: ZIP archive for PC (850 kB)
|RTC-lib 1.0 for Pd
uploaded 15 Nov 2010: ZIP archive (172 kB)
Thanks to Frank Barknecht for porting to Pd!
Updated: 22 Dec 2012