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