[linux-audio-dev] [ANN] Csound beta1 ("alternative" version) release

Istvan Varga ivarga at csounds.com
Fri Aug 18 21:54:25 UTC 2006

Source and binary packages, and documentation can be downloaded from

Change log and release notes are attached.

You can subscribe to the new mailing lists created for this project
at these pages:
-------------- next part --------------
Release notes for Csound beta1

(Note: the list of changes is against version 5.03.0 beta, as of
2006-06-25; some new features that are in 5.03.0, but not documented,
are also listed here. Changes that are known to be missing from 5.03.0
are marked with a '+' instead of a '*'.)

Language changes

 + User defined opcodes can now take and return string arguments.
   These are passed at init time only, and are identified by the 'S'
   character in input/output type lists. Here is a simple example that
   reverses a string:

      opcode ReverseString, S, S
   S1 xin
   S2 strsub S1, -1, 0
      xout S2

 + Many opcodes that change their input arguments are handled better by
   the orchestra parser. For such arguments, constants, reserved symbols
   (sr, kr, etc.), and expressions are now rejected with a syntax error.
   Also, when input arguments are really only written, and not read at
   all, the variables need not be previously defined.
   Examples of changed opcodes include: fin, fini, fink, splitrig,
   timedseq, trigseq, denorm, vincr, clear, OSClisten, loop_lt, loop_le,
   loop_gt, and loop_ge.

 * Implemented #ifndef and #else preprocessing directives for the
   orchestra, and also nested #ifdef/#ifndef.

New opcodes

 * pcount, pindex, moogvcf2 (by John ffitch)
 * flooper2, syncloop (by Victor Lazzarini)
 * vadd_i, vmult_i, vpow_i, vexp_i, vaddv_i, vsubv_i, vmultv_i, vdivv_i,
   vpowv_i, vexpv_i (by Andres Cabrera and Istvan Varga)
 * sndload, loscilx, midipgm (by Istvan Varga)

New command line options

 * --midi-key=N, --midi-key-cps=N, --midi-key-oct=N, --midi-key-pch=N,
   --midi-velocity=N, --midi-velocity-amp=N: route MIDI key number and
   velocity to p-fields (by Michael Gogins)

Bug fixes

 + Files #included from a CSD are now found relative to the directory of
   the CSD file, if the #include file name does not specify a full path.
 + Fixed bug in sprintf, sprintfk, printf, and printf_i with string
 + Fixed problems in vector opcodes with overlapping source and
   destination vectors.
 + Minor bug fixes in GEN32, logbasetwo, delay, comb, alpass, randi,
   partials, convolve, s32b14, randomh, randomi, dconv, vcomb, and a
   number of other opcodes.
 + Fixed phase interpolation bug in atsa utility.
 * Fixed incorrect parsing of .csoundrc with trailing whitespace.
 * Fixed several bugs in the VST host opcodes.
 * Fixed overwriting of constants by pconvolve in the case of default
   partition size. Also, the default partition size is now really the
   value set for the -b command line option, and not -b * nchnls.
 * Minor bug fixes in nestedap, prepiano, inh, and ino.

Misc. changes

 + csound5gui can now open files specified on the command line. This
   allows for associating CSD files with the GUI frontend on Windows.
 + Optimizations in atssinnoi (can be almost twice as fast with large
   ksmps values), and a-rate arithmetic and assignment operations.
 * Assume 0dbfs as the scale parameter in moogvcf if it is set to zero.
 * Use double precision internally in some filter opcodes (bqrez,
   moogvcf, pareq, rezzy, and tbvcf).
 * --sched command line option no longer checks for being used as the
   root user.
 * Added new parameters (source and destination offset) to many of the
   vector opcodes, and some previously existing i-rate parameters have
   been changed to k-rate.
 * Minor optimizations in many opcodes.

Internal changes

 + The CSOUND structure was converted to a C++ class named 'Csound'.
 + Header files csound.h, csoundCore.h, and csdl.h are replaced with
   csound.hpp and csdl.hpp. Also, several other headers (e.g. cwindow.h)
   are now integrated into csound.hpp.
 + Use of setjmp() and longjmp() was replaced with C++ exceptions.
 + Opcode subroutines no longer return an error code to indicate errors,
   and throw C++ exceptions instead. Also, there are no separate
   InitError() and PerfError() methods: Csound::ThrowError() can be used
   to throw an exception with a message using printf-style formatting,
   at both init and performance time.
 + Several improvements to the OENTRY structure:
   + there are no separate a- and k-rate opcode subroutines (avoids some
     confusion and possibility for errors)
   + 'threads' bits no longer need to be set: these were redundant and
     a source of errors
   + constructor and destructor routines can be set for opcodes. These
     are called by Csound::instance(), and when freeing memory used by
     instrument instances, respectively.
   + 'not initialised' errors can be generated automatically, by setting
     a flag in OENTRY
   + variable number of arguments can be taken and returned using
     MYFLT** pointers to arrays of output/input arguments, rather than
     allocating a large (VARGMAX) static amount of space
   + opcode data structures can have a size of up to 2 GB, as opposed to
     the previous limit of 64 kB
   + better support for automatic generation of opcode names from
     argument types (e.g. 'oscil.akk'): a pattern of 28 bits can be used
     to generate an opcode name using the type of any of the first 6
     output and first 8 input arguments
   + opcodes that modify their input arguments can indicate such
     behavior with setting flags in OENTRY; it is also possible to allow
     for the use of previously not defined variables
   + it is possible to set a 'user data' pointer when allocating new
     opcode entries: this pointer will be stored in the OPDS structure
     on instrument instance allocation, and can be used for any purpose
 + Removed INOCOUNT, OUTOCOUNT, and several other similar macros. Inline
   methods of OPDS should be used instead.

See also ChangeLog, H/csound.hpp, and Engine/entry1.cpp for more
details, and changes not listed here.

Known incompatibilities with 5.03.0

 - The API of Csound 5.xx.x and 5.1.xx.x is not compatible. Emulation of
   old functions like csoundCreate() etc. is planned in the future.
 - The following changes (both by John ffitch) were not ported from
   5.03.0, because they are incompatible with previous versions 5.00.0
   to 5.02.1:
    - exprand and bexprnd output zero with a negative range parameter,
      rather than inverting output
    - vstprogset limits program numbers to the range 1 to 16, replacing
      all other values with 1
 - pv_export and pv_import utilities were implemented independently, and
   use a different (more detailed, but also larger) file format.
 - The MFDIR environment variable is not supported - use SSDIR instead.
 - New flags for vector opcodes were developed independently, so it is
   not guaranteed that the behavior of beta1 and 5.03.0 is
   consistent in all cases. One area where differences are likely to be
   present is the default value assumed for out of range indexes in
   source tables. Also, the flags for printing warning messages are
 - Some changes related to making messages more verbose were not ported;
   these do not affect orchestra compatibility, though.
 - Support for static Csound library and Mac platforms was removed.
 - CsoundVST and Mac frontends were removed.

To do

 - clean up and improve the API:
   - improve interfaces for loading of plugin libraries
   - better classes for exception handling
   - create a namespace for the Csound API (should probably have the
     same name as the modules for Python etc., for consistency)
   - move interfaces for shared libraries, thread locks, mutexes,
     timers, random generators, files, etc. from class Csound to
     separate, smaller classes
   - create wrapper templates similar to the one in OpcodeBase.hpp, to
     improve support for opcodes implemented as C++ classes
   - more consistent style of interfaces: naming of types, functions,
     etc., error handling (return values vs. exceptions), use of
     pointers vs. references, use bool type for boolean arguments, and
     a number of other minor issues
 - implement new orchestra (maybe score too ?) parser, either
   independently from the ffitch version, or porting from there if that
   is a better option
 - restore language interfaces, csoundapi~, TclCsound, and Cscore to
   working status
 - implement C-style API functions like csoundCreate(), csoundCompile(),
 - write detailed API documentation

-------------- next part --------------
2006-08-17	Istvan Varga	<ivarga at csounds.com>
	* Csound release

2006-08-14	Istvan Varga	<ivarga at csounds.com>
	* frontends/fltk_gui/main.cpp:
	  allow for opening files specified on the command line
	* Engine/rdorch.cpp, H/csound.hpp, Top/csound.cpp, Top/main.cpp:
	  made searching for #include files in directory of main file work
	  with CSD files

2006-08-12	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/OSC.cpp:
	  OSClisten: use new OENTRY flags for input args used as outputs
	* Opcodes/gab/vectorial.cpp:
	  deal with the case of overlapping vectors
	* Opcodes/stk/stkOpcodes.cpp:
	  fixed error (calling Instrmnt::noteoff() instead of
	  Instrmnt::noteOff()) exposed by earlier fixes in OpcodeBase.hpp

2006-08-10	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/ugens9.cpp:
	  pconvset: fixed overwriting of constants when the default partition
	  size is used. Also changed the default partition size to the number
	  of sample frames in the output buffer, rather than the number of
	  samples as it was previously.
	* Opcodes/gab/vectorial.cpp, Opcodes/gab/vectorial.h:
	  Made offset parameters k-rate. Also added optional flags for
	  printing warnings on out of range index values; for now, no
	  messages are actually printed.

2006-08-09	Istvan Varga	<ivarga at csounds.com>
	* OOps/ugens1.cpp:
	  fixed several incorrect uses of Csound::AuxAlloc()
	* Opcodes/sockrecv.cpp:
	  initialize SOCKRECV structure before creating thread,
	  to avoid race condition
	* Opcodes/ugmoss.cpp:
	  dconvset(): always clear aux space to zero
	  vcombset(): do not assume sizeof(MYFLT) == sizeof(long)

2006-08-08	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/gab/vectorial.cpp, Opcodes/gab/vectorial.h:
	  New opcodes: vaddv_i, vsubv_i, vmultv_i, vdivv_i,
	  vpowv_i, and vexpv_i.
	  Added offset parameters to many of the vector opcodes.

2006-08-07	Istvan Varga	<ivarga at csounds.com>
	* Engine/entry1.cpp, Engine/linevent.cpp, H/linevent.h,
	  H/schedule.h, OOps/schedule.cpp, Opcodes/fout.cpp:
	  Use new OENTRY flags for variable number of arguments and
	  inputs used as outputs. Also fixed a bug in trigseq.
	* Opcodes/sndloop.cpp, Opcodes/sndwarp.cpp:
	  fixed more incorrect uses of Csound::AuxAlloc()

2006-08-06	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/pvsbasic.cpp, Opcodes/pvsdemix.cpp:
	  fixed some incorrect uses of Csound::AuxAlloc()
	* Opcodes/py/pycall-gen.py, Opcodes/py/pycall.auto.cpp:
	  fixed a possible memory leak

2006-08-05	Istvan Varga	<ivarga at csounds.com>
	* OOps/ugens1.cpp (linseg, expseg, etc.),
	  Opcodes/pitch.cpp (mac, maca, transeg),
	  Opcodes/uggab.cpp (sum, product):
	  use new OENTRY flag for variable number of arguments
	* Opcodes/uggab.cpp:
	  fixed randomh and randomi with a-rate 'cps' parameter

2006-08-04	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/midiops3.cpp:
	  fixed bug in s32b14 opcode
	  use templates instead of macros
	* Opcodes/minmax.cpp, Opcodes/oscbnk.cpp (denorm):
	  use new OENTRY flag for variable number of arguments

2006-08-03	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/fout.cpp, Opcodes/metro.cpp:
	  use new OENTRY flags to improve parsing of some opcodes that use
	  input arguments as outputs (fin, fini, fink, splitrig, timedseq)

2006-07-31	Istvan Varga	<ivarga at csounds.com>
	* Reorganized header files: csound.h and csoundCore.h are replaced
	  with csound.hpp, and csdl.h is renamed to csdl.hpp. A number of
	  headers that are no longer needed have been removed.

2006-07-30	Istvan Varga	<ivarga at csounds.com>
	* Engine/rdorch.cpp:
	  - changed format of Csound::TEXT::xincod, xoutcod, xincod_str,
	    and xoutcod_str:
	      - for args 1 to 30, bit N-1 is set if arg N is a-rate (xincod)
	        or S-rate (xincod_str)
	      - bit 30 is set if any of the arguments after the first 30 is
	        a-rate (xincod) or S-rate (xincod_str)
	      - bit 31 is set if all the arguments after the first 30 are
	        a-rate (xincod) or S-rate (xincod_str)
	  - bits 8 to 15 of Csound::OENTRY::flags can be set to indicate that
	    some input arguments are actually used for output (bits 8 to 14
	    for args 1 to 7; if bit 15 is set, all input args after the first
	    7 are assumed to be outputs). This means that constants and
	    expressions will be rejected by the orchestra parser.
	    Additionally, if bit 3 is set, none of the input arguments that
	    are flagged as being outputs need to be previously defined.
	* Engine/entry1.cpp:
	  documented changes to OENTRY structure.
	* Added new command line options:
	  --midi-key=N, --midi-key-cps=N, --midi-key-oct=N, --midi-key-pch=N,
	  --midi-velocity=N, --midi-velocity-amp=N

2006-07-29	Istvan Varga	<ivarga at csounds.com>
	* Changed version to beta, and API version to 10.00.
	* Added S (string) type to user defined opcodes; string values
	  are copied at i-time only.
	* Made argument space allocation dynamic in user defined opcodes, xin,
	  xout, and subinstr. Removed .xin64, .xin256, .xout64, and .xout256.

2006-07-26	Istvan Varga	<ivarga at csounds.com>
	* H/csoundCore.h, H/csdl.h, Opcodes/ftest.cpp, Top/csmodule.cpp:
	  Renamed Csound::NGFENS to Csound::NFGENS (was apparently a typing
	* Opcodes/biquad.cpp:
	  Assume 0dbfs as the scale parameter in moogvcf if it is set to zero.
	  Use double precision internally in filter opcodes (bqrez, moogvcf,
	  pareq, rezzy, tbvcf).
	  Fixed some possible out of range indexing in use of a-rate signals.
	  Added moogvcf2 opcode (same as moogvcf, but scale defaults to 0dbfs).
	* Opcodes/sndloop.cpp, Opcodes/syncgrain.cpp:
	  Added "skip init" parameter to flooper2 and syncloop opcodes.

2006-07-22	Istvan Varga	<ivarga at csounds.com>
	* Converted struct CSOUND to a C++ class.

2006-07-20	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/ugens9.cpp: cvset(): always call Csound::AuxAlloc()
	* Opcodes/sndloop.cpp: new opcode: flooper2 (by Victor Lazzarini)
	* Opcodes/syncgrain.cpp: new opcode: syncloop (by Victor Lazzarini)
	* frontends/tclcsound/commands.cpp: do not add -d flag

2006-07-19	Istvan Varga	<ivarga at csounds.com>
	* Opcodes/partials.cpp:
	  partials_init(): fixed bugs in aux space allocation

2006-07-18	Istvan Varga	<ivarga at csounds.com>
	* frontends/csound/sched.cpp:
	  removed check for root user
	* OOps/ugens4.cpp:
	  fixed typing error in riset()
	* OOps/ugens6.cpp:
	  delset(), cmbset(): do not assume sizeof(MYFLT) == sizeof(long)

2006-07-16	Istvan Varga	<ivarga at csounds.com>
	* OOps/aops.cpp: fixed bug in logbasetwo

2006-07-15	Istvan Varga	<ivarga at csounds.com>
	* Added new opcodes: pcount, pindex (written by John ffitch)
	* Top/one_file.cpp: fixed error on trailing whitespace in .csoundrc

2006-07-10	Istvan Varga	<ivarga at csounds.com>
	* Started to convert the CSOUND structure to a C++ class.
	* Engine/fgens.cpp: fixed bug in GEN32

2006-07-09	Istvan Varga	<ivarga at csounds.com>
	* util/atsa.cpp: peak_detection(): fixed phase interpolation

2006-07-07	Istvan Varga	<ivarga at csounds.com>
	* Engine/entry1.cpp:
	  corrected opcode data size for inh and ino
	* Opcodes/bilbar.cpp:
	  play_pp(): use fabs() instead of abs()
	* Opcodes/biquad.cpp:
	  nestedapset(): do not assume sizeof(MYFLT) == sizeof(long)

2006-07-05	Istvan Varga	<ivarga at csounds.com>
	* Implemented pv_export and pv_import utilities.

2006-06-28	Istvan Varga	<ivarga at csounds.com>
	* bug fixes in VST host opcodes

More information about the Linux-audio-dev mailing list