*** empty log message ***
[chuck-blob.git] / notes / VERSIONS
blob9037393aab347be7076dcded4dfe1c528d0bc822
1 ---
2 1.3.1.3
3   - (added) initial support for file I/O (finally)
4             (thanks to Andrew Schran, Martin Robinson)
5   - (added) new class: IO, FileIO
6             (see examples/io/)
7   - (fixed) incorrect UGen disconnect (thanks Kassen for reporting)
10 ---
11 1.2.1.2
12   - (added) dynamic, resizable arrays
13                 .size( int ) resizes array; .size() returns current size()
14                 << operator appends new elements into array
15                 .popBack() pops the last element of the array, reducing size by 1
16                 .clear() zero's out elements of the array
17             (see examples/array/
18                 array_dyanmic.ck
19                 array_resize.ck)
20   - (added) new UAna: FeatureCollector
21             turns UAna input into a single feature vector, upon .upchuck()
22             new UAna: Flip
23             turns audio samples into frames in the UAna domain
24             new UAna: pilF
25             turns UAna frames into audio samples, via overlap add
26             new UAna: AutoCorr
27             computes the autocorrelation of UAna input
28             new UAna: XCorr
29             computes the cross correlation of the first two UAna input
30   - (added) UGen.isConnectedTo( Ugen )  // is connected to another ugen?
31   - (added) UAna.isUpConnectedTo( UAna )  // is connected to another uana via =^?
32   - (added) int Shred.done()  // is the shred done?
33             int Shred.running()  // is the shred running?
34   - (added) int Math.ensurePow2( int )
35   - (added) Math.INFINITY, Math.FLOAT_MAX, Math.FLOAT_MIN_MAG, Math.INT_MAX
36   - (added) TriOsc.width(), PulseOsc.width(), SawOsc.width(), SqrOsc.width()
37   - (added) Std.system(string) is now disabled by default, to enable: specify
38             the --caution-to-the-wind command line flag, for example:
39                 %> chuck --caution-to-the-wind --loop
40   - (removed) SqrOsc.width( float ), width is always .5
41   - (fixed) it's now (again) possible to multiply connect
42             two UGen's
43   - (fixed) OS X only: sudden-motion-sensor HID no longer 
44             introduces audio dropouts below peak CPU usage
45             due to added centralized polling;
46             added static Hid.globalPollRate( dur ) to control
47             the central SMS polling's rate
48   - (fixed) Windows only: implementation of array via STL vector::reserve()
49             has been replaced with a more compatible approach (see chuck_oo.cpp)
50   - (fixed) dac amplitude no longer halved!
51             NOTE: this increases the gain from before by
52             a factor of 2, or roughly 6 dB!!  BEWARE!!
53   - (fixed) corrected order of shred/ugen dealloc in VM destructor,
54             preventing a potential crash during shutdown
55   - (fixed) UAna can now upchuck() at now==0
56   - (fixed) STK Chorus UGen now has reasonable defaults
57             .max( dur, float ) for initializing to delay/depth limits
58             .baseDelay( dur ) sets current base delay
59   - (fixed) dur +=> now no longer crashes
60   - (fixed) ADSR now returns attackTime, decayTime, and releaseTime that corresponds
61             to the duration-based setting functions (internally multiplied by SR)
62             (thanks Eduard)
63   - (fixed) STK Mandolin no longer plays without explicit noteOn
64   - (fixed) unsporked Shred instances now given id == 0 (thanks Kassen)
65   - (fixed) typos in ugen_xxx.cpp and chuck-specific rtaudio.cpp (/moudi)
68 ---
69 1.2.1.1
70   - (fixed) ctrl-c no longer causes crash on shutdown
71             (was due to memory deallocation bug)
72   - (fixed) incorrect code generation for multiple expressions in 3rd clause 
73             of for loops (thanks to Eduard for tracking!)
74   - (fixed) Envelope now is able to ramp down (contributed by Kassen, Dr. Spankenstein, 
75             kijjaz, and others on electro-music!)
76             
78 ---
79 1.2.1.0 : codename spectral
80   - (added) Unit Analyzers (UAna: prounced U-Wanna, plural UAnae)
81               (primary creators: Rebecca and Ge)
82             provides support for spectral processing, 
83               information retrieval, generalized + precise audio analysis
85   - (added) new datatypes:
86             ---------
87             complex: (real,imaginary)
88                  example: #(3,4) is complex literal (3,4)
89                  example: #(3,4) => complex value;
90                           access components via value.re and value.im
91                  used by UAnae
93             polar: (modulus, phase)
94                  example: %(.5, pi/4) is magnitude .5 and phase pi/4
95                  example: %(.5, pi/4) => polar bear;
96                           access components via bear.mag and bear.phase
97                  used by UAnae
98             ----------
99             example: can cast between complex and polar via standard $ casting
101   - (added) new UAna's:
102             ----------
103             (authors: Rebecca and Ge)
104             FFT: Fast Fourier Transform
105                  input: from UGen (manually input float vector)
106                  output: complex spectrum (.cval()/.cvals())
107                          magnitude spectrum (.cval()/.fvals())
108                  (see examples/analysis/)
109             IFFT: Inverse FFT
110                  input: UAna/Blob complex vector (spectrum)
111                  output: to UGen (as samples)
112                  (see examples/analysis/)
113             Centroid: Centroid feature extractor
114                  input: UAna/Blob float vector (mag spectrum)
115                  output: single centroid value per frame
116                  (see examples/analysis/features/)
117             Flux: Flux feature extractor
118                  input: UAna/Blob float vector (mag spectrum)
119                  output: single flux value between current and previous frame
120                  (see examples/analysis/features/)
121             RMS: RMS feature extractor
122                  input: UAna/Blob float vector (mag spectrum)
123                  output: single RMS value of frame
124                  (see examples/analysis/features/)
125             RollOff: RollOff feature extractor
126                  input: UAna/Blob float vector (mag spectrum)
127                         percentage threshold
128                  output: single RollOff value of frame
129                  (see examples/analysis/features/)
130             ----------
132   - (added) capability to externally abort "infinite loop" shreds
133             (this deals with hanging shreds due to potentially
134             infinite loops that don't advance time)
135   - (added) OTF command: chuck --abort.shred sends network OTF
136             to server to remove current shred if there is one
137   - (added) default .toString() method to all Object's
138   - (added) adding an Object to string will first cast object to string;
139             then add the two
140   - (added) LiSa.duration() get method, and .voiceGain() set/get
141             (Dan Trueman)
142   - (added) alternate line comment: <-- same as //
143             example:
144                  SinOsc s => dac;  <-- here is a comment
145   - (fixed) NullPointerException when instantiating array of objects
146             containing arrays of objects
147                  (thanks to chuck-users!!)
148   - (fixed) Machine.remove() on parent shred id no longer crashes
149   - (fixed) Machine.remove() on 'me' now works correctly
150   - (fixed) rounding when writing files via WvOut
151                  (thanks to Chris Chafe for discovering and reporting this)
152   - (changed) default frequencies (220/440) added for various STK instruments
155 (there is no version 1.2.0.9!)
159 1.2.0.8
160   - (added) command line argument support
161             e.g. %> chuck foo.ck:1:hello bar:2.5:"with space"
162                  also works with OTF commands
163             e.g. %> chuck + foo:1:yo
164                  also works with Machine.add( ... )
165             e.g. // code
166                  Machine.add( "foo:1:2:yo" );
167             (see examples/basic/args.ck for accessing from code)
168   - (added) OS X: watchdog enabled
169             win32: watchdog implemented and enabled
170             (combats chuck infinite empty loop implosion)
171   - (added) OTF server/listener now ON by default...
172             to enable, specify --loop or --server
173             to disable, specify --standalone
174   - (added) new UGens:
175             --------
176             Dynamics: dynamics processor (compressor, expander, etc.)
177                   (author Matt Hoffman and Graham Coleman)
178                   (see examples/special/)
180             GenX: classic + new lookup table functions base class
181                   (author Dan Trueman, ported from RTCMix)
182                   (see examples/special/)
184                   float .lookup( float ) : lookup table value
185                   float[] .coeffs( float[] ) : load the table
186             Gen5 (extends GenX)
187             Gen7 (extends GenX)
188             Gen9 (extends GenX)
189             Gen10 (extends GenX)
190             Gen17 (extends GenX)
191             CurveTable (extends GenX)
192             WarpTable (extends GenX)
194             LiSa: (Li)ve (Sa)mpling!
195                   (author Dan Trueman, partly based on Dan's munger~)
197             --------
198   - (added) (prototype) string catenation
199             (for now will leak memory! use wisely!!!)
200             e.g. // expression
201                  "a" + "b"
202                  "a" + 45
203                  "a" + 5.1
204                  "postfix" +=> str;
205   - (added) string escape sequences
206             \0 \n \t \a \" \b \f \r \v \\
207             \nnn (3 digit octal ascii)
208   - (added) new Objects:
209             --------
210             StringTokenizer: uh string tokenizer (by whitespace)
211                 (use to be hidden PRC object)
212                 see examples/string/token.ck
214             ConsoleInput: interim console input (until file I/O)
215                 (use to be hidden Skot object)
216                 see examples/string/readline.ck
218             --------
220   - (api)   API additions
221             -------- (also see API modifications below)
222             ADSR: dur attackTime()
223                   dur decayTime()
224                   dur releaseTime()
225             WvOut: void closeFile()
226             Hid: void openTiltSensor()
227                  int read( int, int, HidMsg )
228             HidMsg: int isWheelMotion()
229                     (support for mouse scroll wheels)
230                     int key
231                     (cross-platform USB HID Keyboard Usage code)
232                     int ascii
233                     (ASCII value of key, where appropriate)
234             --------
235   - (api)   API modifications (sorry!)
236             --------
237             ADSR: float attackTime( float ) -> dur attackTime( dur )
238                   float decayTime( float ) -> dur decayTime( dur )
239                   float releaseTime( float ) -> dur releaseTime( dur )
240             --------
241   - (api) deprecated --> new classes
242     --------------------------
243        HidIn  -->  Hid
245   - (fixed) adc.last() now returns correct value (was returning 0)
246   - (fixed) array is now subclass of Object
247   - (fixed) accessing null array no longer crashes (instead: exception)
248   - (fixed) allow: 0 length float arrays
249   - (fixed) check for negative array size
250   - (fixed) accessing null map no longer crashes (instead: exception)
251   - (fixed) connecting null UGen references no longer crashes
252   - (fixed) trivial (null == null) no longer evaluated as string
253   - (fixed) strict (x,y) => z type checking
254   - (fixed) UGens no longer able to make duplicate connections
255   - (fixed) && now terminates early if an operand evaluates to 0
256             || terminates early if an operand evaluates to 1
257   - (fixed) bug accessing static members of built-in classes
258   - (fixed) OscSend.startMsg no longer silently fails when 
259             using a single string message specification
260   - (fixed) Math.atan2 now accepts the proper arguments
261   - (fixed) increased OTF command network fail-safe measures
262   - (fixed) STK BlitSquare now produces correct frequency
263             (applied fix from STK release)
264   - (fixed) no longer spontaneously crashes when HidIn and 
265             other event based input mechanisms are firing rapidly
266   - (fixed) using non-static variables from inside static functions
267   - (fixed) variables must be declared before being used
271 1.2.0.7b
272   - added: (all) HidIn.name() now returns meaningful device name
273   - fixed: (all) fixed STK Envelope bug
274   - fixed: (osx) mouse motion now correctly returns delta Y
275   - fixed: (win32) joystick hat messages now properly reported
276   - fixed: (win32) fixed bug where joysticks of same model/product
277            id would send messages through the same HidIn object
278   - fixed: (all) seg fault in OSCSend.startMsg() with single 
279            string message specification
283 1.2.0.7
284   - (api) deprecated --> new classes
285     --------------------------
286        sinosc  -->  SinOsc
287        triosc  -->  TriOsc
288        sqrosc  -->  SqrOsc
289        sawosc  -->  SawOsc
290      pulseosc  -->  PulseOsc
291        phasor  -->  Phasor
292           osc  -->  Osc
293         noise  -->  Noise
294        cnoise  -->  CNoise
295       impulse  -->  Impulse
296          step  -->  Step
297      halfrect  -->  HalfRect
298      fullrect  -->  FullRect
299          gain  -->  Gain
300         zerox  -->  ZeroX
301        delayp  -->  DelayP
302        sndbuf  -->  SndBuf
303          pan2  -->  Pan2
304          mix2  -->  Mix2
305       onepole  -->  OnePole
306       onezero  -->  OneZero
307      polezero  -->  PoleZero
308       twopole  -->  TwoPole
309       twozero  -->  TwoZero
310        biquad  -->  BiQuad
311          ****  -->  ****
312           std  -->  Std
313          math  -->  Math
314       machine  -->  Machine
315     --------------------------
316   - (added) --deprecate:X flag
317             X can be stop, warn, or ignore - default is warn
318   - (added) STK BiQuad get functions pfreq, prad, zfreq, zrad
319   - (added) ADSR functions:
320             void .set( dur a, dur d, float s, dur r );
321             void .set( float a, float d, float s, float r );
322   - (added) new UGens (adapted from SC3 Server, Pure Data, CSound)
323     --------------------------
324           LPF : resonant lowpass filter (2nd order butterworth)
325           HPF : resonant highpass filter (2nd order butterworth)
326           BPF : bandpass filter (2nd order butterworth)
327           BRF : bandreject filter (2nd order butterworth)
328        ResonZ : resonant filter (BiQuad with equal-gain zeros)
329   FilterBasic : base class to above filters
330     --------------------------
331   - (added) new HidIn static variables for HidMsg message and device types
332   - (added) HidMsg fields to determine device type and number
333   - (added) HidMsg functions with capitalization rather than underscores 
334             (underscored functions deprecated)
335   - (added) .period for all oscillators
336   - (fixed) floating point denormals no longer cause potentially
337             massive CPU usage on intel processors, this includes
338             BiQuad, OnePole, TwoPole, PoleZero, JCRev, PRCRev, NRev
339   - (fixed) STK Echo.max no longer gives incorrect warnings
340   - (fixed) linux makefiles now respects CC/CFLAGS/CXX (Cedric Krier)
341   - (fixed) SinOsc/TriOsc/PulseOsc/SqrOsc/Phasor.sync now unified:
342             .sync == 0 : sync frequency to input
343             .sync == 1 : sync phase to input
344             .sync == 2 : fm synth
345             |
346       NOTE: the above changes may break/affect existing patches
347             using TriOsc, PulseOsc, or SqrOsc
348   - (fixed) TriOsc/PulseOsc/SqrOsc phase consistent with convention
349   - (fixed) ADSR now handles keyOff() before sustain state
350   - (fixed) ADSR now correctly inherits Envelope
354 1.2.0.6 (more)
355   - (added) support for Mac OS X universal binary
356   - (added) executable now reports targets:
358   > chuck --version
360     chuck version: 1.2.0.6 (dracula)
361        exe target: mac os x : universal binary
362        http://chuck.cs.princeton.edu/
365 1.2.0.6
366   - (added) support for Mac OS X on Intel: (make osx-intel)
367   - (added) win32 - boost thread priority default from 0 to 5
368   - (added) Mandolin.bodyIR( string path ): set body impulse response
369   - (added) HID: support for mouse input on OS X, Windows, Linux 
370               through 'HidIn' class
371   - (added) HID: support for keyboard input on OS X, Windows
372               through 'HidIn' class
373   - (added) new HID examples:
374               hid/mouse-fm.ck
375                  /keyboard-flute.ck
376   - (added) OS X: --probe human-readable MIDI names
377               (thanks to Bruce Murphy)
378   - (fixed) multiple declarations now behave correctly:
379                 (example: int a, b, c;)
380   - (fixed) now possible to spork non-static member functions
381                 (example: Foo foo; spork ~ foo.go();)
382   - (fixed) sporking fixed in general
383   - (fixed) pre/post ++/-- now work correctly
384                 (example: int i; <<< i++ + i++ * ++i >>>;)
385   - (fixed) public classes can now internally reference non-public
386             classes in the same file
387   - (fixed) obj @=> obj now ref counts correctly
388   - (fixed) STK Mandolin.detune( float f ) changed
389   - (fixed) STK Mandolin.damping( float f ) changed
393 1.2.0.5b
394   - (fixed) adc bug
395   - (fixed) %=> bug
399 1.2.0.5
400   - (added) multi-channel audio
401             - use --channels<N> or -c<N> set number of channels
402               for both input and output
403             - use --out<N>/-o<N> and --in<N>/-i<N> to request
404               # of input and output channels separately
405             - stereo is default (for now)
406   - (added) UGen.channels()
407   - (added) class UGen -> class UGen_Multi -> class UGen_Stereo
408   - (added) UGen UGen_Multi.chan( int )
409             use this to address individual channels
410   - (added) examples in examples/multi
411             - n.ck : n channels detuned sine
412             - i.ck : n channels impulse
413   - (added) HID support (author: Spencer Salazar)
414   - (added) 'HidIn' event class (see examples/hid/*.ck)
415   - (added) Terminal Keyboard Input (immediate mode, separate from HID)
416   - (added) 'KBHit' event class (see examples/event/kb*.ck)
417   - (added) sndbuf.chunks : better real-time behavior
418             - can be set to arbitrary integers
419               (before the .read happens)
420             - default is 0 frames (no chunk)
421             - set .chunks to 0 to read in entire file
422               (previous behavior)
423   - (added) int math.isinf( float ) // infinity test
424   - (added) int math.isnan( float ) // NaN test
425             (see examples/basic/infnan.ck)
426   - (added) sndbuf.valueAt( int ) for returning sample at arbitrary pos
427             (see examples/basic/valueat.ck)
428   - (added) MASSIVE STK UPDATE
429   - (added) 'StkInstrument' class
430               .noteOn( float )
431               .noteOff( float )
432               .freq( float ) / .freq()
433               .controlChange( int, float )
434   - (added) the following now extend 'StkInstrument'
435             (most of them have additional parameters)
436               - BandedWG
437               - BlowBotl
438               - BlowHole
439               - Bowed
440               - Brass
441               - Clarinet
442               - Flute
443               - FM (and all its subclasses: BeeThree, FMVoices,
444                     HevyMetl, PercFlut, Rhodey, TubeBell, Wurley)
445               - Mandolin
446               - ModalBar
447               - Moog
448               - Saxofony
449               - Shakers
450               - Sitar
451               - StifKarp
452               - VoicForm
453   - (added) better STK documentation
454             http://chuck.cs.princeton.edu/doc/program/ugen.html
455   - (added) examples/stk/modulate.ck
456   - (added) --watchdog and --nowatchdog flags
457             (very experiment watchdog for real-time audio)
458   - (added) () => function; // calls function();
459             (thanks to Mike McGonagle for reporting)
460   - (added) if exp: ( cond ? if_cond : else_cond )
461             (thanks to Mike McGonagle for reporting)
462   - (added) math.abs( int ), math.fabs( float ), math.sgn( float )
463             (std version unchanged)
464   - (added) new examples
465               - basic/infnan.ck
466                      /fm.ck fm2.ck fm3.ck
467                      /valueat.ck
468               - event/kb.ck kb2.ck
469               - hid/joy.ck
470                    /joy-fm.ck
471                    /joy-noise.ck
472                    /joy-shake.ck
473               - multi/i.ck
474                      /n.ck
475                      /we-robot.ck
476               - osc/s.ck
477                    /r.ck
478               - stk/bandedwg.ck
479                    /blowbotl.ck
480                    /blowhole.ck
481                    /bowed.ck
482                    /brass.ck
483                    /clarinet.ck
484                    /flute.ck
485                    /mandolin.ck
486                    /modalbar.ck
487                    /saxofony.ck
488                    /stifkarp.ck
489   - (fixed) sinsoc, triosc, sqrosc, phasor:
490               - .sync( 0 ) uses input signal to modulate frequency
491               - .sync( 2 ) uses input signal to modulate phase
492                 (FM synthesis)
493   - (fixed) impulse.last() no longer has extra samp delay
494             (thanks to Mike McGonagle for reporting)
495   - (fixed) class inheritance now handles the first overloaded
496             function of a parent correctly when called using a
497             subclass instance.  in other words, this part sucks
498             less now.
499             (thanks to Mike McGonagle for reporting)
500   - (fixed) (internal) type checker re-instantiation patched
501   - (fixed) (internal) detach_all() moved to chuck_globals.cpp
502   - (fixed) (internal) global variables moved to chuck_globals.cpp
503   - (fixed) file handles close in compiler and parser
504   - (fixed) syntax error causing syntax errors
508 1.2.0.4
509   - (added) The ChucK Manual (pdf)
510             fantastic work by Adam Tindale and other documentors
511             see doc/Chuck_manual.pdf
512   - (added) Envelope.duration( dur ), Envelope.duration()
513   - (added) Envelope.keyOn(), Envelope.keyOff();
514   - (added) PitShift.mix( float ), PitShift.mix()
515             (originally effectMix)
516   - (added) std.srand( int ) : seed random number generator
517   - (added) update to RtAudio 3.2.0 -> much lower latency: Window DS
518             (thanks to Gary Scavone and Robin Davies)
519   - (added) update to RtMidi 1.0.4 -> improved midi: linux ALSA
520             (thanks to Gary Scavone and Pedro Lopez-Cabanillas)
521   - (added) bandlimited ugens: Blit, BlitSaw, BlitSquare
522             (thanks to Robin Davies for implementation,
523              Gary Scavone for putting them in STK)
524   - (added) examples/basic/foo.ck foo2.ck tick.ck tick2.ck
525             (foo2 shows using Blit, tick.ck is a simple counter)
526   - (added) examples/class/dinky.ck try.ck
527             (creating and using class to make instruments)
528   - (fixed) sndbuf.read now closes file handle and sets curf
529   - (fixed) default bufsize=256 under OSX and 512 under all other
530   - (fixed) chuck + foof garbled error message
531   - (fixed) chuck.lex compatibility under some linux
532   - (fixed) waiting on null event: no longer crashes VM
533   - (fixed) function arguments: no longer allow reference to primitive types
534   - (fixed) function: correctly select overloaded functions w/ implicit cast
535   - (fixed) std.atoi() std.atof(): no longer crash on null string
536   - (fixed) std.fabs(): now works correctly
537   - (fixed) basic/moe.ck larry.ck currly.ck use fabs
538   - (fixed) missing base class virtual destructors;
539             FreeBSD/g++ compatibility (thanks rasmus)
540   - (fixed) most -Wall warnings
541   - (fixed) CK_LOG_SYSTEM_ERROR now CK_LOG_CORE
545 1.2.0.3
546   (API changes again)
547   (syntax change - 'loop' -> 'repeat')
548   - loop( ... ) construct (see 1.2.0.2) changed to repeat( ... )
549     - usage and semantics same as before
550     - this is also an experimental language feature
551       (let us know if it's good or bad)
552   - float std.abs( float ) changed -> int std.abs( int )
553   - use std.fabs( ... ) for floating point absolute value
555   - (added) /* block comments */
556     - no nesting allowed
557     - closing '*/' not necessary if commenting out rest of the file
558   - (fixed) arrays of null object references correctly allocated
559       : Event @ events[128];
560   - (fixed) DEFAULT sndbuf rate now set correctly to interpolate
561       for files outside of chuck sample rate (no longer have to
562       explicit do 1 => buf.rate)
563   - (fixed) examples/midi/polyfony*.ck no longer creates 128
564       unnecessary events...
565   - (changed) examples/stk/wurley.ck -> examples/stk/wurley2.ck
566   - (changed) examples/stk/wurley.ck (wacky version)
570 1.2.0.2 - 2005.10.17
571   (sorry for the API changes)
572   - (API change) OSC_Send class name changed to 'OscSend'
573       (also): .startMesg(...) name changed to startMsg(...)
574   - (API change) OSC_Recv class name changed to 'OscRecv'
575   - (API change) OSC_Addr class name changed to 'OscEvent'
576       (also): .hasMesg() name changed to .hasMsg()
577       (also): .nextMesg() name changed to .nextMsg()
578   - (API change) STK Shakers.freq now expect Hz instead of MIDI number
580   - (moved) examples/event/opensound*.ck moved to examples/osc/OSC*.ck
581       (see OSC_send.ck and OSC_recv.ck for examples on OpenSoundControl)
582   - (moved) examples/event/polyfony*.ck to examples/midi/
584   - (added) 'loop(...){ }' control structure : 
585       example: loop( 8 ) { ... } // executes body 8 times
586       example: loop( foo ) { ... } // executes body foo times
587       (foo is evaluated exactly once entering the loop, the
588       value at that time is used as a constant to control
589       loop iteration - even if foo is changed in the loop
590       body.)
591       - supports break and continue
592       - important: one fundamantal difference between the loop 
593         semantic and for/while/until semantic is that the argument
594         expression 'exp' in loop( exp ) is evaluated exactly once
595         when the loop is first entered.
596   - (added) MidiIn and MidiOut member functions:
597       .good() : whether the thing is good to go (int)
598       .num()  : the device number (int)
599       .name() : the device name (string)
600       .printerr( int ) : whether to auto print errors (default YES)
601   - (added) --version command line flag (Graham)
603   - (changed) chuck --status now prints shreds sorted by id
604       (previously it was the current shreduling order + blocked)
605   - (changed) a udp port may now be shared by many OSC_Recv (phil)
606       : the incoming messages are broadcast to all
607   - (changed) address/type string in OSC: comma now optional (phil)
609   - (fixed) events are now 0-sample synchronous (instead of 1)
610   - (fixed) startup audio stability for --callback mode
611   - (fixed) incorrect 'continue' behavior in for loops
612   - (fixed) improved OSC stability (phil)
613   - (fixed) OSC shreduling sanity check failed now resolved
614   - (fixed) math.round for negative numbers (win32)
615   - (fixed) std.mtof and std.ftom now internally double precision 
616   - (fixed) removed extra console output in STK Flute
617   - (fixed) multiple delete/assertion failure on type rollback
618   - (fixed) chuck --kill now closes WvOut and MidiRW file handles
619   - (added) examples/midi/gomidi.ck : very useful sometimes
620   - (added) examples/midi/gomidi2.ck
621   - (added) examples/basic/rec-auto.ck (rec2.ck back in action)
622   - (added) examples/basic/fmsynth.ck (from v1)
623   - (added) examples/sitar.ck
624   - (fixed) examples/stk/*-o-matic.ck now uses array
628 1.2.0.1 - 2005.9.27
629   - (added) full callback capability for real-time audio
630     - blocking functionality still available
631     - select via flags: --blocking and --callback
632     - improves latency and stability, especially on linux
633     - use --callback (default) for low latency / small buffer size
634     - use --blocking for higher throughput
635   - (fixed) crash when doing on-the-fly 'replace' : chuck --replace 0 foo.ck
636   - (fixed) OSC event function now correctly named ("event")
637   - (fixed) removed debug output in OSC
638   - (fixed) implicit cast is now correct when sporking (thanks to Manfred Brockhaus)
639   - (fixed) examples code reformatted, cleaned, and commented
640   - (fixed) nested class definitions can now have same name as outer class
641   - (fixed) nested class bug in scan1 (thanks to Robin Davies)
642   - (fixed) variable resolution in parent class now visible (thanks to Robin Davies)
643   - (fixed) variable resolution ordering
644     - local, class, parent, global (thanks to Robin Davies)
645   - (fixed) emitter now asserts inheritance instead of equality (thanks to Robin Davies)
646   - (fixed) string comparison ==, !=
647   - (added) string operations <, <=, >, >=
651 1.2.0.0
653   SYNTAX and OPERATORS:
654   - (added) +=>, operator : 2 +=> i; (also) -=>, *=>, /=>, %=>
655   - (added) @=> for explicit assignment
656     this is the only way to make object reference assignments
657   - (added) implicit int to float casting
658   - (changed) cast now look like: 1.1 $ (int) => int i;
659   - (added) function call by chucking : 
660     // call
661     (1,4) => math.rand2f => result;
662     // same as
663     math.rand2f(1,4) => result;
665   LANGUAGE:
666   - (fixed) type system for existing types
667   - (added) forward lookup of classes and functions (mutual recursion)
668   - (added) stack overflow detection for massive recursion
670   DOCUMENTATION:
671   - (added) language specification:
672         http://chuck.cs.princeton.edu/doc/language
674   COMMAND-LINE:
675   - (added) --probe prints all audio and MIDI devices
676   - (added) --log or --verbose logs compiler and virtual machine
677   - (added) --logN or --verboseN multi level logging
678     1 - least verbose
679     10 - most verbose
681   OBJECTS:
682   - (added) 'class' definitions : class X { int i; }
683   - (added) 'extends' keyword : class Y extends Event { int i; }
684   - (added) virtual/polymorphic inheritance
685   - (added) added pre-constructors - code at class level
686     gets run when object is instantiated
687   - (added) function overloading :
688     class X { fun void foo() { }  fun void foo( int y ) { } }
689   - (added) base classes (can be extended):
690     Object, Event, UGen
691     see below
692   - (added) base classes (cannot be extended):
693     array, string
694     see below
695   - (added) member data
696   - (added) static data
697   - (added) member functions
698   - (added) static functions
700   EVENTS:
701   - (added) base Event class : Event e;
702     can be used directly
703     can be extended to custom events
704     (see one_event_many_shreds.ck)
705   - (added) waiting on event, chuck to now : 
706     e => now; // wait on e
707   - (added) e.signal() wakes up 1 shred, if any
708   - (added) e.broadcast() wakes up all shreds waiting on e
709   - (added) class MidiEvent (see gomidi2.ck)
710     alternative to polling.
711   - (added) class OSCEvent
713   ARRAYS:
714   - (added) arrays : int a[10]; float b[20]; Event e[2];
715   - (added) multidimensional arrays : int a[2][2][2];
716   - (added) associative arrays : int a[10]; 0 => a["foo"];
717     all arrays are both int-indexed and associative
718   - (added) array initialization : [ 1, 2, 3 ] @=> int a[];
719   - (added) .cap() for array capacity
720   - (added) .find() test if item is associative array
721   - (added) .erase() erase item in associative array
723   UGENS:
724   - (added) class UGen
725     can be extended
726   - (changed) all ugen parameters are now also functions:
727     // set freq
728     440 => s.freq => val;
729     // same as...
730     s.freq( 440 ) => val;
731   - (changed) left-most parameters must now be called as functions
732     // no longer valid
733     f.freq => float val;
734     // valid
735     f.freq() => float val;
736     // still ok
737     440 => s.freq => float val;
739   SHREDS:
740   - (added) class Shred
741   - (added) .yield() .id()
743   STRINGS:
744   - (added) class string
746   AUDIO:
747   - (added) stereo
748     all stereo unit generators have .left, .right, .pan functions
749   - (changed) stereo ugen: dac (2 in, 2 out)
750   - (changed) stereo ugen: adc (0 in, 2 out)
751   - (added) stereo ugen: pan2 take mono or stereo input and pans
752   - (added) stereo ugen: mix2 mix stereo input into mono
756 1.1.5.6 - 2005.4.11
757   - last 1.1 release : contains all 1.1 changes
761 1.1.5.5 - 2005.2.10
762   - FIFO to RR for audio and synthesis - improves stability on OS X
763   - fixed stack underflow emitter bug with declarations
764   - fixed cpu sleep bug on win32
768 1.1.5.4 - 2004.11.18
769   - fixed clicks when using adc unit generator
770     (thanks to paul botelho for testing)
771   - added 'maybe' keyword
772     maybe == 0 or 1, with 50% probability each
774 new examples:
775   - maybe.ck : the maybe keyword - bad idea? maybe.
776   - maybecli.ck : maybe click, maybe not
778 adc examples work better:
779   - adc.ck
780   - echo.ck
781   - i-robot.ck
785 1.1.5.3 - 2004.11.4
786   - when a shred is removed from VM, all children shreds are 
787     also recursively removed
788     (this fix crash due to removing shreds with active children shreds)
789     (to keep children around, put parent in infinite time-loop)
790     (this isn't always good - real solution coming soon)
791   - 'start' keyword now available - holds the a shred's begin time
793 updated examples:
794   - powerup.ck : start local variable changed name
795   - spork.ck : added infinite time loop to keep children active
799 1.1.5.2 - 2004.10.17
800   - crtical patch shreduler time precision
801   - same as 1.1.5.1 - see below
805 1.1.5.1 - 2004.10.15
806   - on-the-fly chuck files to remote hosts!
807     > chuck @hostname + foo.ck
808     > chuck @hostname -p<N> + foo.ck
809   - TCP replacing UDP for commands
810   - endian observed (mac <-> win32/linux)
811   - more sensible VM output for on-the-fly commands
812   - many on-the-fly bug fixes
813   - --replace: new shred inherits the replaced shred id
814     (useful to keep track of shreds in VM)
815   - sndbuf automatically set .rate to 1.0 (instead of 0.0)
816     (0.0 => buf.rate if no play on next time advance)
817   - new on-the-fly examples
819 new examples:
821   - otf_*.ck - illustrates precise on-the-fly timing
822     (adapted from Perry's ChucK drumming + Ge's sine poops)
824     chuck them one by one into the VM:
826       terminal 1%> chuck --loop
827       terminal 2%> chuck + otf_01.ck
828       (wait)
829       terminal 2%> chuck + otf_02.ck
830       (wait)
831       (repeat through otf_07.ck)
832       (remove, replace and add your own)
836 1.1.5.0 - 2004.9.29
837   - now able to write audio files (wav, aiff, raw)
838     (try rec.ck and rec2.ck concurrently with any other shreds
839      to record to disk)
840   - STK file endian is now observed (more things should work
841     on little endian systems)
842   - added 4 "special" built-in sound samples
843     "special:glot_pop" - glottal pulse (flat)
844     "special:glot_ahh" - glottal 'ahh' pop
845     "special:glot_eee" - glottal 'eee' pop
846     "special:glot_ooo" - glottal 'ooo' pop
847     (see/listen to moe++.ck, larry++.ck, curly++.ck)
848   - all bulit-in sound samples now loadable from both WaveLoop and sndbuf
849   - (win32) sndbuf now properly loads wav aiff
851 new examples:
852   - moe++.ck - stooges, evolved
853   - larry++.ck
854   - curly++.ck
855   - rec.ck - run this concurrently to write audio to file
856     (also try with -s flag for file out, no real-time audio)
857   - rec2.ck - same as rec, but writes to different file every time,
858     for sessions
862 1.1.4.9 - 2004.9.18
863   - all of STK is now in ChucK!
864   - new examples (see below)
865   - add '--bufnum<N>' to chuck command line (number of buffers)
866   - --status no longer prints full path for source
867   - full path now works for command line + (thanks Adam T.)
868   - minor bug fixes
869   - improved online ugen documentation (go phil!)
871 new ugens: (again, thanks to Phil Davidson!)
872   BandedWG (STK)
873   Blowhole (STK)
874   BlowBotl (STK)
875   Bowed (STK)
876   Brass (STK)
877   Clarinet (STK)
878   Flute (STK)
879   ModalBar (STK)
880   Saxofony (STK)
881   Sitar (STK)
882   StifKarp (STK)
883   delayp - variable write position delay line
885 new examples:
886   band-o-matic.ck - banded waveguide, automated
887   delayp.ck - shows usage
888   mode-o-matic.ck - modal bar, happy chaos
889   stifkarp.ck - stifkarp, chaos
893 1.1.4.8 - 2004.9.8
894   - added win32 visual studio support (chuck_win32.*)
895   - new oscillators (see below, thanks to Phil)
896   - corrected more issues on some 64-bit systems
897   - new examples (see below)
898   - chucking to oscillators now able to control phase
899     (alternative to doing FM by hand (1::samp at a time),
900      see pwm.ck and sixty.ck) (thanks to Phil)
902 new ugens:
903   triosc - triangle wave
904   pulseosc - pulse wave oscillator w/ controllable pulse width
905   sqrosc - square wave
906   sawosc - saw tooth
907   phasor - 0 to 1 ramp
909 new examples:
910   sixty.ck - shows osc's
911   pwm.ck - basic pulse width modulation
912   (you can still do FM "by hand" - see fmsynth.ck)
916 1.1.4.7 - 2004.9.4
917   - improved performance (reduce cpu overhead)
918   - fixed bug that caused crash on ctrl-c
919   - added sndbuf.play (same as rate)
920   - corrected issues on some 64-bit systems
921   - sndbuf.ck now works
924 1.1.4.6 - 2004.8.26
925   - added netin/netout unit generators (alpha version)
926   - added a lot of STK unit generators (thanks to philipd)
927     (over 80% of STK is now imported)
928   - fixed Shakers (thanks to philipd) : examples/shake-o-matic.ck
929   - better compilation for cygwin
930   - minor bugs fixes
931   - added many READ functionality for ugen parameters
932        see online documentation at:
933        http://chuck.cs.princeton.edu/doc/program/ugen.html
935 new ugens:
936   - netout (alpha version) - audio over UDP (see net_send.ck)
937   - netin (alpha version) - audio over UDP (see net_recv.ck)
938   - Chorus (STK)
939   - Envelope (STK)
940   - NRev (STK)
941   - PRCRev (STK)
942   - Modulate (STK)
943   - PitShift (STK)
944   - SubNoise (STK)
945   - WvIn (STK)
946   - WvOut (STK)
947   - BlowBotl (STK)
948   - FM group (STK)
949     - BeeThree
950     - FMVoices
951     - HevyMetl
952     - PercFlut
953     - TubeBell
955 new examples:
956   - shake-o-matic.ck - STK shakers going bonkers
957   - net_send.ck - oneway sender
958   - net_recv.ck - oneway recv
959   - net_bounce.ck - redirect
963 1.1.4.5 - 2004.8.14
964   - fixed bug for multiple declarations
965   - made functions local to shred by default
966   - shadowing now works
967   - add 'blackhole' ugen for ticking ugens
968   - added std.mtof (philipd)
969   - added std.ftom
970   - added std.dbtorms
971   - added std.rmstodb
972   - added std.dbtopow
973   - added std.powtodb
975 new ugens:
976   - blackhole - the silent sample sucker
977   - Wurley (STK)
978   - Rhodey (STK)
979   - OnePole (STK)
980   - OneZero (STK)
981   - PoleZero (STK)
982   - TwoPole (STK)
983   - TwoZero (STK)
985 new examples:
986   - powerup.ck ( (ab)use of TwoPole and sporking)
987   - i-robot (building feedback filters)
988   - voic-o-form.ck (music for replicants)
989   - rhodey/wurley.ck (more stk-o-matics)
992 1.1.4.4 - 2004.8.2
993   - added sndfile patch for jack/sndfile (Martin Rumori)
994   - added special raw wav for WaveLoop (philipd, gewang)
996     (see examples/dope.ck)
997       "special:ahh"
998       "special:eee"
999       "special:ooo"
1000       "special:britestk"
1001       "special:dope"
1002       "special:fwavblnk"
1003       "special:halfwave"
1004       "speical:impuls10"
1005       "special:impuls20"
1006       "special:impuls40"
1007       "special:mand1"
1008       "special:mandpluk"
1009       "special:marmstk1"
1010       "special:peksblnk"
1011       "special:ppksblnk"
1012       "special:slience"
1013       "speical:sineblnk"
1014       "special:sinewave"
1015       "special:snglpeak"
1016       "special:twopeaks"
1018   - fixed shred shreduling ID bug for on-the-fly added shreds (gewang)
1019   - fixed function resolution for on-the-fly added shreds (gewang)
1020   - added math.nextpow2( int n ) (Niklas Werner, gewang)
1022 new STK ugens:
1023   - Mandolin (see examples/mandolin.ck examples/mand-o-matic.ck)
1024   - Moog (see examples/moogie.ck)
1026 new examples:
1027   - mandolin.ck (use of STK mandolin)
1028   - mand-o-matic (fire it up!)
1029   - dope.ck (Homer's WaveLoop using internal STK sound)
1030   - print_last.ck (prints last ugen output)
1031   - wind2.ck (2 shreds control parameters)
1035 1.1.4.3 - 2004.7.4
1036   - add sndfile support (Ari Lazier)
1037   - add sndbuf file reading/writing (Ari Lazier)
1038   - add sinosc.sfreq and phase (Phil Davidson)
1039   - add sndbuf rate and sinc interp (Phil Davidson)
1040   - add cget functions for unit generators parameters
1041     (many parameters are readable now)
1042   - add .last for last sample computed for all ugen's
1043   - add constants in lib import
1044   - add math.pi math.twopi math.e
1045   - add --srate(N) in command line (chuck --help)
1046   - typing .ck extension optional on command line
1047   - fixed spork bug involved local variables
1048   - fixed nested function calls
1049   - fixed math.min/max bug (Phil Davidson)
1050   - fixed audio stability OS X (Ari Lazier)
1051   - fixed MidiOut issue (thanks to n++k)
1053 new Unit Generators
1054 (from STK)
1055   ADSR (updated)
1056   BiQuad
1057   Delay
1058   DelayA
1059   DelayL
1060   Echo
1061   WaveLoop (updated)
1065 1.1.4.2 - 2004.6.14
1066   - added support for arbitrary audio in/out (via command line)
1070 1.1.4.1 - 2004.6.13
1071   - double lt gt fix
1072   - added demo[0-5].ck to examples
1073   - PROGRAMMER updated
1074   - big/little endian issue fixed
1078 1.1.4.0 - 2004.6.12
1079   - major update to use double float for time, dur, and float
1080     (this fixes the millisecond bug)
1084 1.1.3.6 - 2004.6.9
1085   - fixed win32 build problem (thanks to Adam Wendt)
1086   - fixed midi stack problem (thanks to Thomas Charbonnel)
1090 1.1.3.5 - 2004.6.8
1091   - fixed mem stack bug (report Alex Chapman)
1092   - added jack support (thanks to Thomas Charbonnel)
1096 1.1.3.4 - 2004.6.7
1097   - fixed spork bug
1098   - bad midiin now returns 0
1099   - supports sound card with no input
1100   - add spork.ck
1104 1.1.3.3 - 2004.6.7
1105   - added ability to spork shreds from code
1106   - casting float/int
1107   - 0-127 MIDI devices support
1108   - fix bugs in on-the-fly commands
1109   - added features to --add, --remove
1110   - added --time --kill
1111   - fixed table bug (thanks to n++k)
1112   - fixed linux makefile (thanks to n++k)
1113   - added STK ugen: WaveLoop, Shakers, JCRev, ADSR
1114   - added shred-time synch by T - (now % T ) => now;
1118 1.1.3.2
1122 1.1.3.1
1126 1.1.3.0 - initial release