PYSCO.PY changelog 1-14-99: --Three new scripts: pipe-test-w.py | pipe-test-r.py ... tests timing accuracy of python time.time() and using pipes. schedtest.py ... testbed for realtime scheduler for pysco events. 1-8-99: --fixed a bug due to a language change in python 1.5.2: "It is now a syntax error to have a function argument without a default following one with a default." beat2clock() and warp_section() now set 0 as default for end_beat. 12-30-99: --added get_now() which returns Now[Track]. This is sometimes easier than specifying the track by hand. Note that Now[Track] is not accessible directly, since Track is always immutable (e.g. a number or a string), so importing it with "from pysco import *" only copies that value when it's first imported. Bleah ... smells like a kludge in here! --added rawplay() which is just like playnote() except it does no time updating. Good for ftables and the like. --renamed copy_CC() to store_CC_as() ... more descriptive? --Fixed a bug in play_Track() that was causing ftables to be printed twice. 12-21-99: --Let's call this Version 0.0.2 --a few bugfixes --renamed get_beats() to beat_range() ... more descriptive. --added tempo_map() which should work just like a csound score t-statement, but actually works by calling tempo_marker() multiple times. --added play_Track() which lets you play only one track of output. --Changed play_Out() to call play_Track(). --changed play_Out() and play_Track() to take time arguments so you can hear arbitrary bits of the whole piece. --Lots of work on song1.py... 12-12-99: --First release! Version 0.0.1 --fixed some annoying little bugs. --cleaned up warp_track() a lot, putting some of the work in other functions. Might even run faster, who knows. Seems to work well. Tested it fairly thoroughly. This is probably now the coolest feature of pysco since it enables unlimited simultaneous tempos... very cool for polyrhythms. --renamed print_all() to print_Storage() since that's what it does. Modified it to print, rather than add to Out(); seems more useful that way. --renamed warp_all() and sort_all() to warp_Out() and sort_Out() to be more descriptive. --renamed warped2 and warped3 to _warped2 and _warped3. 12-11-99: --renamed listify() to flatten() - more descriptive. --changed warp_track() to hold tempo at the last tempo given if track has beat values higher than the highest tempo_marker; this also allows tempo_marker() to be used for static tempos more easily. If if works, that is! --removed set_tempo() ... tempo_marker() is more flexible --changed beats() to get_beats() since "beats" is too likely to be desirable as a variable name. --changed comment() to timestamp the comments so they can be sorted by p2 like all other events. 12-9-99: --I now believe pysco is actually useful. --added rest() ... rests for a number of beats. --added warp_track() to explicitly time-warp a track in Out according to stuff done with tempo_marker(). First attempt at real time-warping.... IT WORKS. Wow, that was fucking hard, even having a working equation courtesy of e.s.t. Took me four hours of fiddling to figure out what wasn't working right... though the last hour was because I was comparing pysco's output to a score sorted with scsort, and it turned out I had typed "1000" in the csound score where I'd typed "10000" in my pysco test. DUH. --added beat2clock(), a utility function used by warp_track(). --added tempo_marker() as a simple way to place tempos to interpolate between. --added sort_track() to sort all items in an output track by p2. --renamed pf_time_update() to pf_beat_update() so as to avoid confusing time (seconds) with beats (arbitrary units). --Did a big search & replace for hopefully all occurences of "time" in the source that make more sense as "beat". Should help readability. --Modified chunk_new() so it can deal with multiline strings. 12-7-99: --renamed Piece to Storage, since that's what it is. --renamed play_Piece() to print_all(), since that's what it does. --changed Out into a dictionary, so it's divided into tracks. This will enable my tempo-warping ideas. --changed play_Out() to deal with changes, printing tracks in alphabetical order. --wow, not even released yet and already I got a patch. Applied eric teidemann's patch to better catch exceptions in playlines() --changed split_note() to use string.split(), got rid of kludgey gunk --changed split_note() to use a compiled regexp just for the heck of it (optimization?) 12-2-99: --added Timescale, a dict. of per-track tempos, as a simple way of implementing static tempo control. Too limited. --bugfix: changed p2_update() to pf_time_update since it needed to deal with p2 AND p3. 11-23-99: --added some doc strings and comments --added set_now() and set_track() to replace hand-mangling Now[Track] and Track. --changed some functions to print more useful comments in the score output --improved split_note() a bit --took out some unused debris --bugfix in playlines() --implemented beat selection with beats() 11-22-99: --added playlines() for selecting which lines to play --added exception-handling for dealing with stuff in output that has no p2 and/or p3 11-13-99: --added GPL notice --added some comments in case anyone actually tries to use it --changed all outputs to write to Out instead of printing to stdout. --added output() to accomplish the above. --added play_Out() to print contents of Out. --added comment() --changed a whole lot of print ";..." into comment() --moved test code into test.py previously: --too much to go back and keep track of. -------- paul winkler (slinkp@angelfire.com)