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