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