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