an open-source digital signal processing and sound synthesis language
about · links · contact

Using Python as the RTcmix Command-Language Interface

Very similar to the Perl front-end procedure for RTcmix, you will need to configure RTcmix using the --with-python configuration flag (see the installation guide for information about this). Once you do this and (re-)compile RTcmix, you're set to go with a Python front-end. As with Perl, this can be used in place of the default scorefile language Minc. You will need to use the PYCMIX command instead of CMIX to start RTcmix.

Using Python/RTcmix

This works a lot like the Perl RTcmix, but the following note is in the "RTcmix/Python" directory:
    - Namespace clashes with Python builtin functions: abs input max open pow round The cmix ones seem to have priority (because they were loaded most recently?). - The ability to kill the job and still see peak stats doesn't work, though it does work in PYCMIX. Python is nuking our signal handler (sigint_handler in main.C) somehow? Strange, because supposedly the interpreter is destroyed before we start playing score, by parse_score in Minc/parse_with_python.c. The comments in parse_score imply that this used to work with Python 1.x. - To build python on OS X, see http://www.zope.org/Members/jens/docs/zope_osx

Sample Scorefiles

Python script showing the RTcmix ability to chain several instruments together:
    # Quick translation of sample_scos_3.0/LONGCHAIN_1.sco to Python, for testing. # This score makes a wavetable synth riff and feeds it through 3 effects # in series: flange -> delay -> reverb from rtcmix import * print_off() rtsetparams(44100, 2) load("WAVETABLE") load("FLANGE") load("JDELAY") load("REVERBIT") bus_config("WAVETABLE", "aux 0-1 out") bus_config("FLANGE", "aux 0-1 in", "aux 10-11 out") bus_config("JDELAY", "aux 10-11 in", "aux 4-5 out") bus_config("REVERBIT", "aux 4-5 in", "out 0-1") totdur = 30 masteramp = 1.0 atk = 2; dcy = 4 notes = [5.00, 5.001, 5.02, 5.03, 5.05, 5.07, 5.069, 5.10, 6.00] numnotes = len(notes) transposition = 2.00 # try 7.00 also, for some cool aliasing... srand(2) # ---------------------------------------------------------------- synth --- notedur = .10 incr = notedur + .015 maxampdb = 92 minampdb = 75 ampdiff = maxampdb - minampdb control_rate(20000) # need high control rate for short synth notes setline(0,0, 1,1, 20,0) makegen(2, 10, 10000, 1, .9, .7, .5, .3, .2, .1, .05, .02) st = 0 while st < totdur: slot = int(random() * numnotes * .999999) pitch = pchoct(octpch(notes[slot]) + octpch(transposition)) amp = ampdb(minampdb + (ampdiff * random())) pctleft = random() WAVETABLE(st, notedur, amp, pitch, pctleft) st = st + incr # for the rest control_rate(500) amp = masteramp # --------------------------------------------------------------- flange --- resonance = 0.3 lowpitch = 5.00 moddepth = 90 modspeed = 0.08 wetdrymix = 0.5 flangetype = 0 gensize = 100000 makegen(2,10,gensize, 1) maxdelay = 1.0 / cpspch(lowpitch) setline(0,1,1,1) st = 0; insk = 0; inchan = 0; pctleft = 1 FLANGE(st, insk, totdur, amp, resonance, maxdelay, moddepth, modspeed, wetdrymix, flangetype, inchan, pctleft) lowpitch = lowpitch + .07 maxdelay = 1.0 / cpspch(lowpitch) makegen(2,9,gensize, 1,1,-180) st = 0; insk = 0; inchan = 1; pctleft = 0 FLANGE(st, insk, totdur, amp, resonance, maxdelay, moddepth, modspeed, wetdrymix, flangetype, inchan, pctleft) # ---------------------------------------------------------------- delay --- deltime = notedur * 2.2 regen = 0.70 wetdry = 0.12 cutoff = 0 ringdur = 2.0 setline(0,0, atk,1, totdur-dcy,1, totdur,0) st = 0; insk = 0; inchan = 0; pctleft = 1 JDELAY(st, insk, totdur, amp, deltime, regen, ringdur, cutoff, wetdry, inchan, pctleft) st = 0.02; inchan = 1; pctleft = 0 JDELAY(st, insk, totdur, amp, deltime, regen, ringdur, cutoff, wetdry, inchan, pctleft) # --------------------------------------------------------------- reverb --- revtime = 1.0 revpct = .3 rtchandel = .05 cf = 0 setline(0,1, 1,1) st = 0; insk = 0 REVERBIT(st, insk, totdur+ringdur, amp, revtime, revpct, rtchandel, cf) # john gibson, 13-feb-01