What's new in Csound 6.02
Prev | Preface | Next

## What's new in Csound 6.02

### Release Notes for Csound 6.02

This new version has a large number of bug fixes (including clearing all general tickets on SourceForge). It also introduces some major new facilities such as use as a server, code to run Csound in a browser and a large generalisation of filter opcodes to have parameters changeable at audio rate.

- New opcodes:

  - instance opcode schedules a new instrument instance, storing the instance handle.
  - kill opcode stops a given instrument instance.
  - strfromurl to set a string from a URL.

- Orchestra:

  - If building supports it, a #include string can be a URL or a file.
  - A space is again permitted between a function name and the opening bracket for all functions allowed in Csound5 (but not in general).
  - The Csound command can start with an empty CSD in daemon mode (--daemon): do not exit if CSD/orchestra is not given, is empty or does not compile).

- Score:

  - If building supports it, a #include string can be a URL or a file.

- Modified Opcodes and Gens:

  - Many filters generalised to allow k- or a-rate parameters. In particular it includes these:

    areson | atonex
    butterworth filters | fofilter
    lowres | lowresx
    lpf18 | mode
    moogladder | moogvcf
    reson | resonr
    resonx | resonz
    statevar | tonex

  - The maximum number of presets in sfont increased to 16384.
  - cpsmidinn is now more accurate.
  - max_k now behaves like the documentation. There were caseswhen it gave strange results.
  - The vst4cs opcodes have been re-factored. FLTK code has been encapsulated. The build system has been updated for Csound 6.
  - In alwayson opcode changes for better handling of pfields, more reliable insert of an instrument instance for repeating or re-started score sections.
  - The signal flow graph opcodes have replaced OpenMP multi-threading with pthreads, using one-time initialization of static structures.

- Frontends:

  - PNaCl is now supported as a platform, allowing Csound to run under the Chrome browser in all enabled operating systems.

- Bugs fixed:

  - adsynt2 opcode fixed.
  - ftgentmp opcode fixed.
  - dates opcode fixed.
  - fixed a bug in pvsfilter.
  - fixed stereo out in temposcal and mincer.
  - pan2 opcode fixed.
  - index overflow in randh and randi fixed.
  - A number of fixes to CsoundVST: initialization, score handling, and MIDI driver initialization, so it now works for Csound 6.
  - fixed pycalln for no inputs.
  - fixed/revised setting and use of ksmps and kr in UDOs.
  - fixed problem in sending a score event from max to csound via csound~ (Ticket #58).
  - If itype in chn_k was set to 3 and values are set less than 1, Csound6 used to give an INIT Error. (Ticket #67).
  - A number of reported seg faults have been dealt with.
  - xtratim opcode was using incorrect ekr value from csound instead of from instance; when used in conjunction with setksmps, was causing notes to have very long xtratim set and thus notes were effectively not getting turned off

- System changes:

  - A server mode is now available, accepting input via UDP (with --port option).
  - A longstanding bug in extract was detected and fixed. It does suggest that this facility is little used!
  - The way the external score generator was coded is substantially changed. In particular this should fix a very strange bug in Windows.
  - Fixed crashing bug with invalue channel callback due to wrong data object being pulled from csound host data.
  - Fixed bug in UDOs with no local ksmps where kcounter was being used incorrectly.
  - Better checking in channels.
  - (Experimental) If the environment variable CS_UDO_DIR is set then any files in the directory that have an .udo extension are automatically included at the start of the orchestra. This facility needs review to see if it is what is required.
  - (Experimental) There are new cuda GPGPU opcodes (source only): cudasynth (3 versions for additive synthesis, additive synthesis of fsigs and phase vocoder resynthesis) and cudanal (a GPGPU version of pvsanal).

- Internal changes:

  - Many attempts at faster code.
  - Type inference and parsing still improving.

- iOS:

  - Fixed crash where no csoundSetHostImplementedMIDIIO is used on iOS and no _RTMIDI value is set.

- OSX:

  - Fixed input device name for auhal.

### Release Notes for Csound6

Csound6 is a significant rewrite of much of the code. In particular the API is not compatible, although all orc/sco/csd works should still run.

There are new facilities, like sample accuracy and realtime mode, described below.

IMPORTANT: The environment variable to find plugins are called OPCODE6DIR64 or OPCODE6DIR (note the 6) so it can co-exist with Csound5.

Similarly .csoundrc is renamed .csound6rc.

Arrays are now mainstream, with syntax and opcode support. They also exist in multidimensional format. They are created (usually) with init opcode or fillarray.

      k1[]  init 4

generates a k-rate 1-D array of length 4. Similarly

      a2[][] init 4, 4

creates a square 4x4 a-rate array.

      k2[]  fillarray 1, 2, 3, 4

creates a 4-element vector filled with 1,..4, which also defines the length.

Elements are used via indexing in [] such as k1[2] or a2[2][3]. One dimensional arrays replace tvars, and can be used in opcodes like maxtab, mintab and sumtab (see below). Array setting can be done in left-hand side of opcodes, i.e.:

      aSigs[0] vco2 .1, 440
      aSigs[1] vco2 .1, 880

The new realtime priority mode can be switched on with by passing the --realtime or setting the CSOUND_PARAMS field realtime_mode to 1. This has the following effects:

1. all opcode audio file reading/writing is handled asynchronously by a separate thread.
2. all init-pass operations are also performed asynchronously.

Multicore support is totally rewritten using a different algorithm for task-dispatch, which should use less memory and fewer locks.

- New opcodes:

  - faustgen
  - array -- many new or revised opcodes -- see Array Opcodes.
  - compileorc takes a filename containing a collection of instrument definitions and compiles them, replacing existing versions. It returns 0 on success.
  - compilestr is like compileorc but takes a string.
  - readscore runs the score preprocessor on a string and then schedules new events via the RT event mechanism, returning 0 if successful.

- Orchestra

  - Note events can start and end in mid-kcycle. As this is an incompatible change it is only invoked when the command-line option --sample-accurate is specified. Note that this does not work for tied notes, and use of skipping initialisation has questionable use.
  - Instruments can run at local ksmps values using `setksmps iksmps` as in Csound 5 UDOs.
  - Compilation can be done at any stage, new instruments are added or replace old ones. Running instances of old instrument definitions are not affected. Only limitation is that header constants in instr 0 are read only once at the time of the first compilation. Init-time code can be placed outside instruments in the global space, and this will be executed once-only following the compilation. In this case, score event generation can be completely replaced by orchestra code. See also new opcodes compileorc and compilestr.
  - New syntax operators +=, -=, *= and /=. These are more than syntactic sugar; please use += and -= for accumulating reverbs as it gives better multicore behaviour.
  - The opcodes add, sub, mul and div have been deleted; use the forms + - * /. Not many people were aware of these opcodes.
  - Any opcode with a single output or with no outputs can be used as a function. Some opcodes might require type annotation to resolve ambiguities, more details on the Function syntax in Csound 6.
  - A statement can be broken across lines after a , = or arithmetic operation.
  - There are a range of new or recoded operations on k-valued arrays, most restricted to 1 dimensional arrays (vectors):

         kans minarray ktab       returns the smallest value in the
                                  (possibly) multidimensional array
         kans maxarray ktab       is like mintab
         kabs sumarray ktab       returns sum of all values in the array
         ktab genarray imin, imax[, inc]
                                  generates vector of values from imin
                                  to imax by increments of inc (default 1)
         ktab2 maparray ktab1, "sin" maps the k-rate 1-arg function in
                                  the string to every element of the vector
         ktab2 maparray_i ktab1, "sin" maps the i-rate 1-arg function
                                  in the string to every element of the vector
         ktab2 slicearray ktab1, istart, iend
                                  returns a slice of ktab1 from ktab1[istart]
                                  to ktab1[iend]
         copyf2array ktab, kfn    copies data from an ftable to a vector
         copya2ftab  ktab, kfn    copies data from a vector to an ftable

    Arithmetic on arrays is allowed. In particular addition, subtraction, multiplication, division on a element-by-element version is provided in arithmetic format. Similar operations between an array and a scalar are allowed.
  - Each instance of any instrument has a scratchpad of 4 values that persist; allows values to carry to next use of the instrument; hope it may be useful in legato etc.
  - If a table number is given as -1 then an internal sine wave equivalent to `f. 0 16382 10 1` is used. Attempts to write to this table will give unpredictable results, but is not policed. The 16382 can be change by command line option --sine-size=# where the # is rounded up to a power of two.
  - A number of oscil opcodes now have the f-table parameter as optional, defaulting to the internal sine wave. (oscil1, oscil1i, oscil, oscil3, oscili, foscil, foscil1, loscil, loscil3).

- Score:

  - Score lines can have multiple strings.
  - Change to escape characters in score strings -- they do not happen.
  - Also note the readscore opcode.

- Modified Opcodes and Gens:

  - The k() function can take an a-rate argument in which case it is a call to downsamp.

- Utilities

  - Hetro/adsyn analysis files can be machine byte-order independent if created with -X. Down side is a longer file and a little slower loading. The het_export utility will create the independent format from the old, and het_import is no longer necessary.
  - cvanal and lpanal will produce machine independent files if -X option is used. The convolve and lpread etc opcodes will accept either format. You are encouraged to use the machine independent form. Analysis files produced with -X can be used on other systems.

- Frontends

- Bugs fixed:

- System Changes:

  - In Linux and OSX the treatment of locales is now thread-safe and local.

- Platform Changes:

- API:

  New API functions...

  - new configuration/parameter setting functions

                PUBLIC int csoundSetOption(CSOUND *csound, char *option);
                PUBLIC void csoundSetParams(CSOUND *csound, CSOUND_PARAMS *p);
                PUBLIC void csoundGetParams(CSOUND *csound, CSOUND_PARAMS *p);
                PUBLIC void csoundSetOutput(CSOUND *csound, char *name, char *type,
                                            char *format);
                PUBLIC void csoundSetInput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIInput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIFileInput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIOutput(CSOUND *csound, char *name);
                PUBLIC void csoundSetMIDIFileOutput(CSOUND *csound, char *name);

  - new parsing/compilation functions

                PUBLIC TREE *csoundParseOrc(CSOUND *csound, char *str);
                PUBLIC int csoundCompileTree(CSOUND *csound, TREE *root);
                PUBLIC int csoundCompileOrc(CSOUND *csound, const char *str);
                PUBLIC int csoundReadScore(CSOUND *csound, char *str);
                PUBLIC int csoundCompileArgs(CSOUND *, int argc, char **argv);

  - new function for starting csound after first compilation

                PUBLIC int csoundStart(CSOUND *csound);

  - new software bus threadsafe getters/setters

                PUBLIC MYFLT csoundGetControlChannel(CSOUND *csound, const char *name);
                PUBLIC void csoundSetControlChannel(CSOUND *csound, const char *name, MYFLT val);
                PUBLIC void csoundGetAudioChannel(CSOUND *csound, const char *name, MYFLT *samples);
                PUBLIC void csoundSetAudioChannel(CSOUND *csound, const char *name, MYFLT *samples);
                PUBLIC void csoundSetStringChannel(CSOUND *csound, const char *name, char *string);
                PUBLIC void csoundGetStringChannel(CSOUND *csound, const char  *name, char *string);

  - new table threadsafe copy functions

                PUBLIC void csoundTableCopyOut(CSOUND *csound, int table, MYFLT *dest);
                PUBLIC void csoundTableCopyIn(CSOUND *csound, int table, MYFLT *src);

  API has been made threadsafe so that performance and control can occur in separate threads (after a call to csoundStart() or csoundCompile()). Threadsafety is ensure by

  1. use of atomic read/writing to control channels
  2. spinlocks in audio and string channels
  3. mutexes protecting compilation, score events and table access.

- Internal:

  - The build system is now cmake (and not scons as in Csound5).
  - A number of table access opcodes have been rewritten but should behave the same. Similarly diskin and diskin2 now use the same code and so diskin should be more stable.
  - The old parser is completely removed.

- New internal functions in Csound

          void (*FlushCircularBuffer)(CSOUND *, void *);
          void *(*FileOpenAsync)(CSOUND *, void *, int, const char *, void *,
                                 const char *, int, int, int);
          unsigned int (*ReadAsync)(CSOUND *, void *, MYFLT *, int);
          unsigned int (*WriteAsync)(CSOUND *, void *, MYFLT *, int);
          int  (*FSeekAsync)(CSOUND *, void *, int, int);
          char *(*GetString)(CSOUND *, MYFLT);
                   Extract a string originating from a score-event argument.

- Functions removed

          void *(*FileOpen)(CSOUND *, void*, int, const char*, void*, const char*);

- The "private" parts of the API have been changed considerably. Also structures like EVTBLK have changed.

- The LINKAGE1/FLINKAGE1 macros are renamed as LINKAGE_BUILTIN/FLINKAGE_BUILTIN.

- Template for a-rate perf-pass opcodes is

      int perf_myopcode(CSOUND *csound, MYOPCODE *p)
      {
          uint32_t offset = p->h.insdshead->ksmps_offset;
          uint32_t early  = p->h.insdshead->ksmps_no_end;
          uint32_t nsmps = CS_KSMPS;
          ...
          if (UNLIKELY(offset)) memset(p->res, '\0', offset*sizeof(MYFLT));
          if (UNLIKELY(early))  {
            nsmps -= early;
            memset(&p->res[nsmps], '\0', early*sizeof(MYFLT));
          }
          for (n=offset; n<nsmps; n++) {
              .....
              p->res[n] = ....
          }
          return OK;
      }

- String variables re-implemented

- OENTRY structure has changed and has a new dependency field; please use this field as it is required for multicore semantics. You could set it to -1 and disallow all parallelism, but at least it is safe.

- All opcodes that touch audio should take note of sample-accurate code.

- A number of previous API functions are removed; OpenFile and OpenFile2 both replaced by new OpenFile2 with additional argument.

- Additions have been made for arg type specifications for opcodes.

  - Any-types have been added, as follows:
    - '.' signifies a required arg of any-type
    - '?' signifies an optional arg of any-type
    - '*' signifies a var-arg list of any-type
  - Arrays are now specified using "[x]" where x is a type-specifier. The type-specifier can be any of the of the current specifiers, including any-types. See Opcodes/arrays.c for example usage.

- New Type System

  A new type system has been added to Csound6, and significant changes have been made to the compiler. The previous system for handling types involved depending on the first-letter of a variable's name every time it was used to determine type. This meant there was a lot of re-checking of types. Also, adding new types was difficult, as there was a lot of custom code that had to be updated to check for new type letters.

  In Csound6, a separate system of types was added. Types are defined as CS_TYPE's. The creation of variables from types and the initialisation of memory has been encapsulated within the CS_TYPE's. This change allows easier addition of new types, as well as generic calculations of memory pools, amongst other things.

  The compiler has been modified since Csound5 to now use the type system as an integral part of its semantic checking phase. Variables are now registered into a CS_VAR_POOL when they are first defined, with the CS_VARIABLE having a reference to its CS_TYPE. After first time definition within the pool, the type information is then looked up in consequent variable lookups, rather than re-calculated from the variable name. This opens up possibilities for new variable naming and typing strategies, i.e. using "myVar:K" to denote a k-rate arg. This also opens up possibilities for user-defined types, such as "data myType kval, aval", then using "myVar:myType" to define a var of that type. (The previous is speculative, and is not an active proposal at this time.)

  The addition of the type system has formalised the static type system that has existed in Csound prior to Csound6. It has, arguably, simplified the code-base in terms of type handling, as well as laid the ground work for future type-related research to be integrated into Csound.

### New in Version 5.19 (2013 January 7)

This is mainly a bug-fixing release but with a number of new opcodes and enhanced features.

- New opcodes:

  - ipmidi module for MIDI over network.

  - ppltrack opcode.

  - combinv opcode.

- New Gen and Macros:

  - Better checking in GEN28.
  - Check range in outrg, and optionally allow wrapping.

- Orchestra:

  - Change empty statement to a warning.
  - Added line numbers to many input args message (new parser).

- Modified Opcodes and GENs:

  - Better error and warning messages.
  - loopseg now checks argument count.
  - harmon2/3/4 improved.
  - active: added the option to skip the instances in release phase.
  - New and more tested implementation of ChordSpace.

- Bug fixed:

  - Fix botched optimisation in lowpass filters.
  - Chn opcodes fixed in Linux.
  - Fix bug in loscil with silence.
  - Correct GEN23 when comment does not end in newline.
  - Correcting loopseg.
  - Number of input and output channels fixed in new parser.
  - Fixed GEN43 issue.
  - Fixed fout.
  - centroid was likely to crash.
  - Minor bug in printing which lost %.
  - An uninitialised value in fold fixed.
  - Uninitalised values in dconv fixed.
  - Assignment of fsigs now works.

- System Changes:

  - Avoid seg fault on some user errors.
  - Faster modal4 opcodes.
  - Allow cabbage compilation.
  - Made pfield size dynamic in event message csoundapi~.
  - The default output format with pipe and double float is AU.
  - Change to ircam with default format, '-o stdout' and pipe.
  - Added double float precision for output format.

- Platform Changes:

  - Linux:

    - Spinlocks initialised (fixes bug in chn opcodes).

  - OSX:

    - Improved selection of devices in rtauhal module.
    - Added a circular buffer interface and lock-free operation to rtauhal.
    - Fixed MacOSX installer (creating symlinks to lib_csnd.dylib).

  - Haiku:

    - New platform

  - Android:

    - Using -B now in android to set circular buffer size.
    - Added fluid synth opcodes for android.
    - Added inputMessage method to CsoundObj.
    - Allow CSDPlayer to be installed on SD Card.

  - iOS:

    - Improved audio routing.
    - Bottom speaker the default for iOS.

- API:

  - Added new API function csoundCompileFromStrings().

### New in Version 5.18 (2012 August 29)

This is mainly a bug-fixing release but with a number of new opcodes and enhanced features.

- New opcodes:

  - centroid opcode like pvscent but acting on audio signals
  - cosseg like linseg but with cosine interpolation
  - cossegb like linsegb but with cosine interpolation
  - cossegr like linsegr but with cosine interpolation
  - joystick to read input values from an external joystick (Linux only)
  - log2 function for logarithms base 2
  - platerev opcode to model a reverberating square plate
  - pwd opcode to determine the current working directory
  - readf opcode to read strings from a file
  - readfi opcode to read strings from a file on initialisation
  - vbap opcode like other vbap family but flexible about number of speakers and choice of layouts.
  - vbapg opcode like vbap but only calculate the gains on the channels.

- New functionality

  - Changes to <CsOptions> to allow spaces between words, and escaped characters.
  - fout and fin use a better buffering strategy, and so are faster
  - It is possible to specify just an orchestra with the --orc flag. This is useful when a score is not needed.
  - A new command-line flag --ogg flag has been added for easy use of ogg/vorbis output.
  - Added alsaseq real-time midi

- Bug fixes and improvements:

  - dates opcode could crash on 64bit architecture; this is fixed
  - Some multicore interlocks were wrong. It is believed that this was not actually a problem, but would be in the future.
  - There were cases when a file was double closed, leading to a crash on exit.
  - Two new features added in partikkel. Panning law for channelmasks can now be set using a function table (second optional argument to partikkel) and new support opcodes partikkelget and partikkelset, to access and modify the internal mask indices of partikkel.
  - follow2 was reworked do the i-rate and k-rate calculations are the same.
  - pvscent is corrected as it returned half the correct value.
  - vbaplsinit can create more than one speaker layout which vbap/vbapg can use. Also much better diagnostics on incorrect layouts.

- Internal Changes:

  - Code changed so bison 2.6 can be used.
  - It is assumed that libsndfile version 1.0.19 or later is available.
  - If the score is omitted a near-infinite wait is generated.

### New in Version 5.17 (March 2012)

This is mainly a bug-fixing release with no major changes, but the number of fixes warrants a release.

- New opcodes:

  - cell opcode, for cellular automata

- Modified Opcodes and Gens:

  - active now will report total number of active or allocated instruments if argument in zero
  - stsend and strecv the TCP socket opcodes reworked to a logical design
  - DSSI system now will take up to 9 channels
  - FLsavesnap works with other widgets where imin > imax

- Utilities:

  - csbeats better documented and built by default; also more note lengths available
  - Some security holes in utilities fixed

- Bug fixes:

  - unirand opcode at a-rate fixed
  - Locale fix for floating point literals in orchestra
  - transegr fixed

- System Changes:

  - Score can now last longer (change to size of time variable)
  - An empty score gives a very long performance time (years and years)
  - Android code released
  - Changes to use of tmp files; now all are deleted at end of run (previously some were left) and the environment variable TMPDIR is used.
  - interaction between Comments, end of line and end of file fixed
  - Hexadecimal numbers now allowed in orchestra
  - Empty orchestra now not a crash
  - change to macro expansion inside a string
  - avoid infinite loop when eof in malformed score macro
  - fixed macroname-with-args diagnostics and memory leak
  - change to preprocessor: {{ }} inside "..." and better diagnostics
  - fix windows installer so it removes full $INSTDIR\bin from PATH during uninstall: this cleans up the PATH environment variable when uninstalling on Windows. Previously, it was leaving a trailing "\bin" on the PATH.
  - CsoundAC MusicModel class more usable by C++ programs
  - ftcps had been missed as a function

- Internal Changes:

  - Many! Some messages quietened, code improvements etc

### New in Version 5.16 (February 2012)

The major change is that the new parser is now the default. The old parser is still available in case of difficulty but the new has been given extensive testing since the start of the year, including complete restructuring of macro expansion. A side effect is that the runtime of most orchestras is faster, although parsing is slower. There are a few optimisations implemented like constant folding in simple cases. Line numbers and file names are traced better than before.

Some memory leaks also fixed.

- New opcodes:

  - Opcodes adapted from SuperCollider by Tito Latini: dust, dust2, gausstrig, gendy, gendyc, and gendyx.
  - Fractal noise generator by Tito Latini: fractalnoise.
  - Opcodes for accessing table values by direct indexing, by John ffitch: ptable, ptablei, ptable3, and ptablew. These opcodes are respectively like table, tablei, table3, and tablew, but they do not require a power-of-2 table size.

- Modified Opcodes and Gens:

  - There was a fence post problem in tab opcode that could falsely report a reference out of range.
  - GEN15 mis-called gens 13 and 14 internally, using uninitialised values voice amplitude. Problem fixed.
  - fmbell now takes an optional argument to control the sustain time.
  - Change to pvsbasic for tab to table conversions.
  - poscil is now polymorphic, allowing k- or a-rate amplitude and frequency.
  - p() and i() changed when argument at k-rate.
  - gen49 deferred now works.
  - gen23 now available deferred.

- Utilities:

  - Checked for use with the new parser in memory files.

- Frontends:

  - Table access added to csoundapi~ via new get/set methods.

- Bug fixes and improvements:

  - Many in new parser related to precedence and multicore.
  - Better diagnostics when orchestra file/csd is missing.
  - csd file: fix CsFileB and CsSampleB.
  - Fixed score statement 'n'.
  - Fixed bug in diskin2 leading to infinite loop.
  - Fixed bug causing crossfade noise in hrtfmove.
  - Fixed unlikely buffer overflows in some utilities.
  - Avoid segfault in midicN.
  - Bug in mp3in in skip=0 case fixed.
  - 'r' score statement fixed with respect to macros.
  - sndwarp could segfault.

- System Changes:

  - Preprocessor #if #else #endin working.
  - #includes depth now limited rather than infinite recursion.
  - Really turn off all displays if --nodisplays or -d is used; fixes bug where using -d or --nodisplays would still cause the winFLTK.c csoundModuleInit to setup display callbacks; bug caused with python TK apps and CsoundYield_FLTK being called.
  - Memory leak in mp3in and mp3len fixed.

- Internal Changes:

  - Very, very, very many! And the new parser...

### New in Version 5.15 (December 2011)

- New opcodes:

  - ftab2tab opcode.
  - tab2pvs opcode.
  - pvs2tab opcode.
  - cpumeter opcode, (not really new but now available in OSX)
  - minmax opcode.
  - (EXPERIMENTAL) ftresize opcode.
  - (EXPERIMENTAL) ftresizei opcode.
  - hrtfearly opcode.
  - hrtfreverb opcode.

  New Gen and Macros

  - Code to allow GEN49 to be deferred [NB does not seem to work]

- Modified Opcodes and Gens

  - socksend and sockrecv no longer uses MTFU check and work on Windows
  - mpulse changed so if next event is at negative time use the absolute value
  - serial opcode now runs on Windows as will as Un*x
  - out, out2, outq, outh, outo outx and out32 are now identical opcodes and will take up to as many arguments as nchnls. This replaces the current remapping of opcodes
  - turnoff2 now polymorphic wrt S and k types (ie accepts instrumnet names)

- Bugs fixed:

  - GEN42 fixed
  - jacko: fixed a segfault removing the unused JackSessionID option
  - doppler memory leak fixed
  - transegr fixed in release mode when skipping most of envelope
  - FLPack now agrees with manual
  - max_k now agrees with manual
  - hrtfreverb fixed
  - atsa code now works on Windows in more cases
  - tabmorph bug fixed
  - fixed problem with user-defined opcodes having no outputs
  - Various fixes to * ... */ comments

- System Changes:

  - Various licence issues sorted
  - Loris is no longer part of the Csound tree
  - Memory leaks fixed
  - If no score is given a dummy that runs for over 100 years is created
  - All score processing takes place in memory without temporary files
  - String memory now expandable and no size limitation
  - #if #else #end now in new parser
  - Adjustments to MIDI file precision in output
  - On OSX move from Coreaudio to AuHAL
  - Multicore now safe for ZAK, Channels and modifying tables
  - New coremidi module
  - Virtual Keyboard improved: 1) Dropdown for choosing base octave (the one that starts with the virtual key mapped to physical key Z). Default value is 5 which is backwards compatible. 2) Shift-X mappings which add two octaves to X mappings for a total of 4 octaves playable from the physical keyboard (starting from selected base octave). 3) Control-N / Control-Shift-N mappings to increment / decrement slider for control N. 4) Mouse wheel now controls sliders.
  - tsig type for vectors
  - tsigs and fsigs allowed as arguments in UDOs
  - API: Minor version upped

- Internal Changes:

  - Very, very, very many!

### New in Version 5.14 (October 2011)

- New opcodes:

  - mp3len opcode.
  - qnan opcode.
  - qinf opcode.
  - exprandi opcode.
  - cauchyi opcode.
  - gaussi opcode.
  - cpumeter opcode.
  - linsegb opcode.
  - expsegb opcode.
  - transegb opcode.
  - expsegba opcode.
  - pvsgain opcode.
  - pvsbufread2 opcode.
  - serial opcodes.
  - lua opcodes opcodes.
  - plustab opcode.
  - multtab opcode.
  - maxarray opcode.
  - minarray opcode.
  - sumarray opcode.
  - scalearray opcode.

- New functionality

  - beats processor renamed to csbeats and distributed
  - mkdb utility to provide a catalogue of plugin libraries/opcodes
  - ladspa library build in default system
  - macros are now expanded inside string in the score
  - there in an until .. do .. od looping syntax (in the new parser only)
  - SIGPIPE signals are ignored rather than causing Csound to exit
  - It is possible to use vectors of k-rate values, named t-variable. They are initialised to a fixed sizw with init adncan be read with a simple [] syntax. assignment to elements is only via =. There are also a few new opcodes that provide wider functionality.

- Bug fixes and improvements:

  - reading values to fill tables was broken with respect to comments
  - internal error in wii_data fixed
  - pvsshift fixed
  - jacko fixed
  - gen23 minor fixes
  - wiimote fixed
  - atsaadd fixed
  - compress fixed to work with 0dbfs
  - pvsbufread corrected with respect to position counting
  - tempo opcode fixed
  - CsFileB section in .csd files had a bug, now fixed
  - deferred gen01 tables could have wrong size
  - vbap_zak made to work(!)
  - fixed memory issue in ATSsinoi
  - various fixes to cscore
  - various fixes to partials and tradsyn
  - transegr could crash in some cases
  - loris opcodes updated to latest version
  - date opcode has new base in some platforms to avoid overflow
  - pvsblur now works over reinit
  - diskin, diskin2 and soundin now can read up to 40 channels
  - prints behaves better with rounding
  - fmpercfl now has working vibrato
  - atreson now has gain parameter at k-rate
  - comb opcode made safe if in and out arguments the same
  - better accuracy in line and expon
  - OSCsend recovers space previously lost
  - OSCsend can send a table as a blob with the T tag -- experimental and untested.
  - lpf18 now has an optional iskip argument
  - i() will also accept an i-rate value in which case it is a no-op
  - makecsd revised and extended to have options for MIDI and score processing and licenses
  - lpanal reworked to remove bugs and oddities
  - an issue with noise in alsa fixed and a click in portaudio fixed
  - portaudio driver changed to be more robust on stop/exit

- Internal Changes:

  - Many many changesto the new parser so it is now operational, but should be used with care
  - The multicore system is distributed in an experimental mode and should be used with great care.

### New in Version 5.13 (January 2011)

- New opcodes:

  - median opcode.
  - filevalid opcode.
  - pvstanal, pvswarp, temposcal, pvslock spectral processing opcodes.
  - mincer opcode
  - fareylen sequence opcodes.

- New functionality

  - Real random number generators using /dev/random (Linux only).
  - INF macro added to orchestras; z read as infinity in scores
  - init changed to allow multiple inits in on statement
  - GEN for support of farey sequences
  - maxalloc,cpuprc, active now accept named instruments.
  - If normalisation in pow opcodes is zero treat as 1
  - inch can take upto 20 inputs and outputs.
  - pvscale, pvsvoc and pvsmix now have very good spectral envelope preservation modes (1 = filtered cepstrum, 2 = true envelope).
  - oscil1 could be static if the duration was long; now there is a positive minimum increment.
  - GEN49 now uses search paths.

- Bug fixes and improvements:

  - Count of lines fixed in orchestras, and \ inside strings
  - Fast tab opcodes made safe from crashes
  - % in formated printing could crash
  - Double free in fgen fixed
  - sndwarp quietened (gave too many messages)
  - gen41 deals with positive probabilities
  - adsynt reworked removing many bugs
  - adsynt2 phase error fixed
  - Bug in max number of gens fixed
  - Better checking in grain4
  - Better checking in adsyn
  - modulus was wrong in new parser
  - atonex/tonex did wrong operation
  - mp3in could repeat sound at end of file
  - changed opcode initialised to zero
  - Serious bug in tabmorpha fixed
  - GEN49 has serious bug removed, so no longer incorrect silences.
  - partikkel opcode: fixed bug in sub-sample grain placement when using grain rate FM

- Internal Changes:

  - In the new parser only there are operator @ and @@ to round up the next integer to a power of 2 or powerof2+1
  - Score sorting made much faster
  - lineto improved
  - Named gens allowed
  - Various printing include instrument name if available
  - Command option to omit loading a library
  - Number of out channels no longer constrained to be number of in
  - Many fixes to new parser
  - More use of Warnings than Messages (allows for them to be switched off)
  - csoundSetMessageCallback reset if callback set to null

### New in Version 5.12 (January 2010)

- New opcodes:

  - transegr is a version of the transeg opcode which has a release section which is triggered by midi, a turnoff2 opcode or a negative instrument number i score event.
  - ftgenonce generates a function table from within an instrument definition, without duplication of data.
  - passign allows quick initialization of i-rate variables from p-fields
  - crossfm implements crossed fm synthesis.
  - loopxseg is like loopseg but with exponential envelope.
  - looptseg is like loopseg but with a flexible envelope like transeg

- Bug fixes and improvements:

  - pvshift would overwrite in double mode.
  - pan2 case 3 fixed.
  - clockon and clockoff now work again.
  - cross2 and interp could have divided by zero
  - linecount for error messages no longer includes text from .csoundrc
  - p5gconnect changed to use a separate thread to avoid timeout problem.
  - transeg checks argument count.
  - sfload used to be limited to 10 sound fonts and was not policed. Now open-ended.

- Internal Changes:

  - \" allowed as an escape in orchestral strings
  - New parser fixed on optional arguments
  - Better checking of f statement with negative number
  - Soundfonts only initialise pitches array once, in the soundfont opcodes.
  - Usual collection of gratuitous minor changes, layout and comments

### New in Version 5.11 (June 2009)

- New opcodes:

  - mp3in allows reading of mp3 files directly in the orchestra.
  - wiiconnect, wiidata, wiisend, wiirange opcodes by john ffitch to recieve and send data to a wiimote controller.
  - New opcodes to receive data directly from a p5glove by john ffitch p5gdata
  - tabsum sums sections of ftables
  - MixerSetLevel_i an init-time only version of MixerSetLevel
  - doppler implements a simulation of the doppler effect.
  - filebit reports the file depth of a file.
  - The new Signal Flow opcodes enable the usage of signal flow graphs in Csound.

- New functionality

  - New panning type for pan2 opcode
  - New csd score tag <CsExScore>.
  - New -Ma option for ALSA RT MIDI module which listens to all devices.
  - There is a gen49 to read mp3 files
  - Added rounding bin code to pvscale
  - Added non-power-of-2 table support for ftload and ftsave
  - GEN23 totally rewritten to be more consistent in what constitutes a separator and comments. (Still no /* */ comments)

- Bug fixes and improvements:

  - New examples for pvs opcodes by Joachim Heintz: pvsarp, pvscent, pvsbandp, pvsbandr, pvsbufread, pvsadsyn, pvsynth, pvsblur, pvscale, pvscross, pvsfilter, pvsfreeze, pvshift, pvsmaska, pvsmorph
  - Use of automatic numbering of ftables reuses table numbers
  - seed with positive argument was wrong
  - sprintf with an empty string printed wrong data
  - mute now works with both numeric and named instruments
  - Small fixes in diskin, and in tablexkt

- Internal Changes:

  - SConstruct now builds completely independent shared libraries for Python, Lua, and Java wrappers.
  - New Parser almost usable
  - Redrawing of graphs fixed so that only selected ones get redrawn.
  - RT-alsa more forgiving on near sample rates
  - It is possible to have the score generated by an external program rather than using standard score format using <CScore bin="translater"> to call the program translater on the score data
  - lpc_export fixed
  - Removed limit on macro names length
  - PMAX, the number of arguments to a score event has been reduced by 2, and an overflow system introduced so GENs can have arbitrary numbers of arguments.
  - Increased API version to 2.1.
  - New API function pointer ldmemfile2withCB() which is a version of ldmemfile() allowing a callback to be set and called exactly once to process the MEMFIL buffer after it is loaded.
  - csound->floatsize set; zero in earlier versions
  - GetChannelLock added

### New in Version 5.10 (December 2008)

- New functionality

  - New option to listen to all MIDI devices using the portmidi realtime module. To enable listening to all devices use "-+rtmidi=portmidi -Ma".
  - Dither on output implemented; rectangular and triangular dither available in some cases
  - GEN20 type 6 now has option to set variance

- Bug fixes and improvements:

  - Locale set to C numeric to avoid , versus . problems.
  - diskin fixed
  - outo was broken regarding channel 6
  - pitchamdf fixed
  - zfilter2 intialization fixed
  - s32b14 fixed
  - Fixed other bugs fixed that have not been reported publicly.

- Internal Changes:

  - The major version of the Csound API is increased to 2; affected csound.so as well. This means that Csound 5.10 is incompatible with applications ("front ends", "clients", or "hosts") that were built for Csound 5.08 and earlier and that use API version 1.x. These applications will need to be rebuilt to work with the current and future versions of Csound. Csound front ends written in interpreted languages such as Python or Java may continue to work without modification. It may also be possible to keep both an earlier version of the Csound library and an API 2.0 version on the same machine together so that new and old Csound-based applications can run side-by-side. These changes do not in any way affect the compatibility of Csound orchestras and scores: all old documents should continue to work as before.
  - Time now counted internally in samples, overcoming a longstanding bug with rounding of time to k-rate.
  - Many internal changes related to branch prediction. Some opcodes are substantially quicker.

### New in Version 5.09 (October 2008)

- New opcodes:

  - New vosim opcode by Rasmus Ekman which recreates the historic VOSIM (VOcal SIMulator) technique.
  - New dcblock2 opcode by Victor Lazzarini.
  - New Chua's oscillator model: chuap by Michael Gogins.
  - New Linear Algebra opcodes by Michael Gogins. Standard Linear algebra over real and complex vectors and matrices: elementwise arithmetic, norms, transpose and conjugate, inner products, matrix inverse, LU decomposition, QR decomposition, and QR-based eigenvalue decomposition. Includes copying vectors to and from a-rate signals, function tables, and f-signals.
  - New ambisonic opcodes: bformdec1 and bformenc1. These opcodes deprecate the older bformdec and bformenc.
  - New Score control opcodes by Victor Lazzarini: rewindscore and setscorepos.

- New functionality:

  - The vbap family of opcodes (vbap4, vbap8, vbap16 and vbapz) now accept k-rate variables for all their input arguments.
  - New pulseaudio I/O module on Linux.
  - New optional ienv parameter to generate envelopes for the soundfont opcodes: sfplay, sfplay3, sfplaym and sfplay3m.
  - Added 'skip normalisation argument' to "tanh" named GEN routine. (See Named GEN Routines)
  - Added scheduler priority option on alsa.

- Bug fixes and improvements:

  - Allow scientific notation (as was in csound4!) in GEN23.
  - Fixed bug in FLTK initialization. Should make FLTK usage more stable.
  - Error on /* */ comments in orchestra fixed.
  - poscil no longer overwrites frequency if variable is shared.
  - printk and printks check that opcode is initialised.
  - Deprecate soundout and soundouts in favour of fout.
  - Fixed space opcode to accept non-pow-2 (deferred) tables.
  - Fixed pvsmorph bug.

- Internal Changes:

  - New parser has #include and argumentless macros.
  - Less casting between floats and doubles in float version.
  - Includes experimental multicore support.
  - buzz opcode rewritten.
  - Many other internal changes and small bug fixes.

### New in Version 5.08 (February 2008)

- New opcodes:

  - imagecreate, imagesize, imagegetpixel, imagesetpixel, imagesave, imageload and imagefree: New image file processing opcodes by Cesare Marilungo to read/write png images from Csound.
  - pvsbandp and pvsbandr by John ffitch, which perform band-pass and band-reject filtering in the spectral domain on a pvs signal.
  - New HRTF opcodes by Brian Carty:hrtfmove, hrtfmove2 and hrtfstat.
  - New waveshaping opcodes: powershape, polynomial, chebyshevpoly, pdclip, pdhalf, pdhalfy, and syncphasor
  - New jack transport control opcode: jacktransport

- New functionality

  - Added --csd-line-nums= command line option to select mode for error line reporting.
  - New "no-carry" operator (! ) for score language that prevents implicit carrying of p-fields in i-statements.
  - Added --syntax-check-only commandline flag (exclusive with --i-only)
  - <CsLicence> tag for CSDs. <CsLicense> is accepted as an alternative to <CsLicence>.

- Bug fixes and improvements:

  - Changed order of outputs for hilbert. This change breaks compatibility with previous versions, but fixes the opcode and now works as documented.
  - Messages about loading opcode plugins modified so can be suppressed with message level flag.
  - Major changes to score error reporting; now accurately reports the line numbers for the chain of inputs for most errors.
  - Corrected pan2 so it agrees with documentation.
  - <CsVersion> tag works again according to the manual.
  - Fixed the { and } score looping statements. Added missing documentation for them and ~, &, |, and # operators in score expressions.
  - hilbert had its outputs reversed, now correct. Manual example updated.

- Internal Changes:

  - Change to gettext localisation; French and Columbian-Spanish translations available.
  - Internal changes to partikkel, interpolation of waveform read and windowing, allowing more precise pitch synchronous granular synthesis. Updated examples for partikkel.
  - pvscale: Improved algorithm for SDFT case so no ampltitude variation.

### New in Version 5.07 (October 2007)

- New opcodes:

  - pan2: a stereo panning opcode
  - cpsmidinn, pchmidinn, octmidinn: converters for MIDI note numbers
  - fluidSetInterpMethod: interpolation in fluid sound fonts
  - sflooper: a soundfont version of flooper2
  - pvsbuffer and pvsbufread: buffering/reading of fsigs for delays/timescale changes.

- New functionality

  - SDFT - the Sliding Discrete Fourier Transform -- added seamlessly to pvsanal, etc opcodes if the overlap is less than the ksmps or less than 10. Some pvsXXX opcodes extended to take a-rate parameters when sliding.

  - New feature (-O null / --logfile=null) that disables all messages and printing to the console.

- Bug fixes and improvements:

  - partikkel -- particle synthesis had an inadvertent bug, now fixed.
  - Closing of MIDI input on Windows(MM) failed; now fixed
  - fluidEngine opcode now takes optional number of channels (range 16-256, default to 256) and polyphony (range 16-4096, default to 4096) to use.
  - atsa utility safer when given silence.
  - ATSaddnz: improved checking.
  - Ambisonics (bformdec, bformenc) has more options for controlled opposites.
  - Bug in turnoff2 fixed.
  - het_export: invalid check caused export to fail.

- Internal Changes:

  - Improved Windows installer.
  - CsoundVST replaced by CsoundAC, that does not depend on the VST SDK headers.
  - Less messages in Windows(MM) startup.
  - P argument type added (k-rate defaults to 1) for opcode in and out types.

### New in Version 5.06 (June 2007)

- New granular opcodes: partikkel, partikkelsync and diskgrain.

- New opcode for event dispatch: scoreline.

- Many new opcodes from Gabriel Maldonado's CsoundAV: hvs1, hvs2, hvs3, vphaseseg, inrg, outrg, lposcila, lposcilsa, lposcilsa2, tabmorph, tabmorpha, tabmorphi, tabmorphak, trandom, vtable1k, slider8table, slider16table, slider32table, slider64table, slider8tablef, slider16tablef, slider32tablef, slider64tablef, sliderKawai and the a-rate version of ctrl7.

- Also from CsoundAV, many new FLTK widget opcodes: FLkeyIn, FLslidBnk2, FLvslidBnk, FLvslidBnk2, FLmouse, FLxyin, FLhvsBox, FLslidBnkSet, FLslidBnkSetk, FLslidBnk2Set, FLslidBnk2Setk, FLslidBnkGetHandle,

- New pvs opcodes: pvsdiskin, pvsmorph,

- eqfil

- New command line options (--m-warnings)to control messages

- csladspa: a CSD to LADSPA plugin kit.

- And many bug fixes including (but not limited to): fixed k-rate version of system; fixed scaling problems of vrandh and vrandi; fixed ocasional failure of turnoff; fixed OS X bug; fixed ATScross and fixed mod.

  Csound5GUI now works properly on all platforms and csoundapi~ (pd object) has been updated.

Prev | Up | Next
Getting Started with Csound | Home | Part I. Overview