A number of bug fixes, some quite major, are included, as well as some new facilities and extensions.
New opcodes:
Orchestra:
Score:
Modified Opcodes and Gens:
Utilities:
Frontends:
pnacl:
csound~:
Emscripten:
HTML5:
General usage:
Bugs fixed:
System changes:
API:
Platform Specific:
OSX.
As ever there are new facilities and numerous bug-fixes. A major part of this release is the removal of a number of memory leaks and over use of memory. Naturally these changes are all but invisible, just a smaller memory foot-print. Note that we track bugs and requests for enhancements via the github issues system, and these had a significant affect on this release.
Opcodes :
New Gen and Macros:
Score:
Options:
Modified Opcodes and Gens:
Utilities:
Frontends:
pnacl
Bugs fixed:
System changes:
Internal Changes:
Platform Specific:
iOS.
Android.
Android app
OSX.
Linux.
This new version has many extensions and fixes; many new opcodes and significant numbers of internal reworking. There is a new frontend and iOS and Android version have seen many improvements.
As ever we track bugs and requests for enhancements via the github issues system. Already proposals for the next release are being made but the volume of changes require a release now.
New opcodes:
New Gen and Macros:
Modified Opcodes and Gens:
Frontends:
General usage:
Bugs fixed:
System changes:
Internal Changes:
API:
Platform Specific:
iOS.
Android.
Windows.
OSX.
Linux.
This new version has a large number of bug fixes (including clearing many tickets on SourceForge and GitHub) as well internal changes to improve performance.
New opcodes:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Utilities:
csound~:
Emscripten:
General usage:
Bug fixes:
System Changes:
Internal Changes:
API:
The performance engine now includes debugging capabilities to allow interrupting rendering and providing introspection into the engine's state and instrument variables. The following new functions are available by including the csdebug.h header:
void csoundDebuggerInit (CSOUND *csound); void csoundDebuggerClean (CSOUND *csound); void csoundSetInstrumentBreakpoint (CSOUND *csound, MYFLT instr, int skip); void csoundRemoveInstrumentBreakpoint (CSOUND *csound, MYFLT instr); void csoundClearBreakpoints (CSOUND *csound); void csoundSetBreakpointCallback (CSOUND *csound, breakpoint_cb_t bkpt_cb, void *userdata); void csoundDebugContinue (CSOUND *csound); void csoundDebugStop (CSOUND *csound); debug_instr_t *csoundDebugGetInstrInstances(CSOUND *csound); void csoundDebugFreeInstrInstances(CSOUND *csound, debug_instr_t *instr); debug_variable_t *csoundDebugGetVariables(CSOUND *csound, debug_instr_t *instr); void csoundDebugFreeVariables(CSOUND *csound, debug_variable_t *varHead);
Windows:
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:
Orchestra:
Score:
Modified Opcodes and Gens:
areson | atonex |
butterworth filters | fofilter |
lowres | lowresx |
lpf18 | mode |
moogladder | moogvcf |
reson | resonr |
resonx | resonz |
statevar | tonex |
Frontends:
Bugs fixed:
System changes:
Internal changes:
iOS:
OSX:
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:
Multicore support is totally rewritten using a different algorithm for task-dispatch, which should use less memory and fewer locks.
New opcodes:
Orchestra
setksmps iksmps
as in Csound 5 UDOs.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
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.
Score:
Modified Opcodes and Gens:
Utilities
Frontends
Bugs fixed:
System Changes:
Platform Changes:
API:
New API 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);
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);
PUBLIC int csoundStart(CSOUND *csound);
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);
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
Internal:
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.
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.
This is mainly a bug-fixing release but with a number of new opcodes and enhanced features.
New opcodes:
New Gen and Macros:
Orchestra:
Modified Opcodes and GENs:
Bug fixed:
System Changes:
Platform Changes:
Linux:
OSX:
Haiku:
Android:
iOS:
API:
This is mainly a bug-fixing release but with a number of new opcodes and enhanced features.
New opcodes:
New functionality
Bug fixes and improvements:
Internal Changes:
This is mainly a bug-fixing release with no major changes, but the number of fixes warrants a release.
New opcodes:
Modified Opcodes and Gens:
Utilities:
Bug fixes:
System Changes:
Internal Changes:
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:
Modified Opcodes and Gens:
Utilities:
Frontends:
Bug fixes and improvements:
System Changes:
Internal Changes:
New opcodes:
New Gen and Macros
Modified Opcodes and Gens
Bugs fixed:
System Changes:
Internal Changes:
New opcodes:
New functionality
Bug fixes and improvements:
Internal Changes:
New opcodes:
New functionality
Bug fixes and improvements:
Internal Changes:
New opcodes:
Bug fixes and improvements:
Internal Changes:
New opcodes:
New functionality
Bug fixes and improvements:
Internal Changes:
New functionality
Bug fixes and improvements:
Internal Changes:
New opcodes:
New functionality:
Bug fixes and improvements:
Internal Changes:
New opcodes:
New functionality
Bug fixes and improvements:
Internal Changes:
New opcodes:
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:
Internal Changes:
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 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.