Mainly a bug-fixing release. Major new facility is MP3 (MPEG) audio files support is now implemented for both input and output with libsndfile.
New opcodes:
Modified Opcodes and Gens:
Bug fixes and improvements:
System Changes:
Platform Specific:
MacOS:
WASM:
Mainly a bug-fixing release but also a major re-organisation of the libraries to move all opcodes with dependencies into a separate plugins repository. The only exception to this is the OSC opcodes (which depend on liblo). This is in part a preparation for Csound7. This is the last release using the current parser (v.2).
New opcodes:
Orchestra:
Modified Opcodes and Gens:
Utilities:
Bugs Fixed:
System Changes:
API:
External Plugin Code:
This delayed release was mainly a bug fixing release but there are significant new opcodes, including support for simpler use of MIDI controls and a new opcode to connect to an Arduino. Also there is an optional limiter in the sound output chain.
Also there are a number of new filters including the final opcode written by the 'father of computer music' Max Mathews (with Julius Smith)! ported by Joel Ross.
New opcodes:
New gen:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
General Usage:
Bug fixed:
System Changes:
Platform Specific:
MacOS:
Quite a few new opcodes are in this release as well as extensions of existing opcodes. In particular there is the introduction of streamed LPC which has long been requested.
Another feature in this release is a large number of internal fixes to incorrect data access, as well as the usual tweaks and changes.
Starting from this release, no third-party graphic frontends are shipped with the installation packages on MacOs and Windows. Users should install their choice of frontend separately.
New opcodes:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Utilities:
General Usage:
Bugs Fixed:
System Changes:
API:
Platform Specific:
WebAudio:
MacOS:
Bela:
A number of bug fixes and enhancements, but also potentially significant changes are included.
For live coders the orchestra macros are now remembered between calls to compilerstr. This should not change the behaviour of current valid orchestras but could be useful in live coding.
MIDI devices now include mapping multiple devices to higher channels. The details are in the manual MIDI section.
New Opcodes:
mp3out is an experimental implementation of writing an mp3 file. It may be replaced by the current work in libsndfile to deal with MPEG files.
Simple example:
<CsoundSynthesizer> <CsInstruments> ksmps = 1000 instr 1 aa diskin "fox.wav", 1 mp3out aa, aa, "test.mp3" endin </CsInstruments> <CsScore> i1 0 3 e </CsScore> </CsoundSynthesizer>
The syntax is "mp3out aleft, aright, Sfilename" with three optional arguments "mode" (0=stereo, 1=Jointstereo (default), 3=Mono), "bitrate" defaulting to 256, and "quality" (in range 1 to 7) defaulting to 2 (high quality).
Orchestra:
Options:
Modified Opcodes and Gens:
Utilities:
Frontends:
General Usage:
Bugs Fixed:
System Changes:
API:
Platform Specific:
WebAudio:
Windows:
Not many new opcodes but there are a significant number of opcodes being extended to use arrays in a variety of ways, widening the options for users. There have been many fixes to the core code as well as opcodes.
New opcodes:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Utilities:
General Usage:
Bugs Fixed:
System Changes:
API:
Platform Specific:
Many changes including the removal of vst2cs functionality due to a copyright issue.
The changes made in 6.11 to raw format reading have been modified so gen1 and diskin ignore positive file formats and use the file header, unless the format is negative when it uses the absolute value in a raw audio file. This should preserve most compatibility issues.
There are a number of new and improved opcodes, new facilities in scores and many bug fixes.
New opcodes:
beosc
andbeadsynt
are band enhanced oscillator and oscillator bank. is for breakpoint files with interpolation. Similarly adds cosine interpolation to .
Orchestra:
Score:
Modified Opcodes and Gens:
Utilities:
Bugs Fixed:
System Changes:
API:
Platform Specific:
There has been a great amount of internal reorganisation, which should not affect most users. Some components are now independently managed and will eventually be installable via a new package manager. The realtime option is now considered stable and has the "experimental" tag removed. Special support for the Bela platform has been introduced. There have been more steps towards completing the arithmetic operations involving a-arrays.
Note | |
---|---|
Note that changes to GEN01 and diskin2 may not be backward compatible if a non zero value is given for the format. |
New opcodes:
Score:
Modified Opcodes and Gens:
Utilities:
Frontends:
Bugs Fixed:
System Changes:
Translations:
API:
Platform Specific:
This is mostly a bugfix release, including a major bug introduced in loscil recently. New and improved opcodes and a long orphaned GEN (53) are here, as well as many small internal improvements. Internal changes have removed a number of memory leaks.
New opcodes:
New Gen and Macros:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Frontends:
Bug fixed:
System Changes:
Translations:
API:
Platform Specific:
Windows
GNU/Linux
A mixed bag of new opcodes and many fixes and improvements.
Also as usual there are a number of internal changes, including many memory leaks fixed and more robust code.
New opcodes:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Utilities:
Frontends:
Bugs Fixed:
System Changes:
API:
Platform Specific:
iOS
Android
Windows
As usual there are a number of opcode fixes and improvements, but the major changes are in the language structures. First the score language has all-new treatment of macros and preprocessing, bringing it in line with those of the orchestra. The parsing of the orchestra has had a number of fixes as outlined below.
A major, and not totally compatible change as been made in reading and writing array elements. The rate of the index now often determines the time of processing; check the entry below under Orchestra. This simplifies much code and seems to capture expectations; the earlier ad hoc code had many anomalies.
Also as usual there are a number of new opcodes and internal fixes to memory leaks and more robust code.
New opcodes:
New Gen and Macros:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Utilities:
Frontends:
General Usage:
Bugs Fixed:
System changes:
API:
Platform Specific:
Android.
Windows.
A large number of bug fixes, some quite major, some internal are included, as well as some new facilities and extensions. As ever there are coding improvements as well.
New opcodes:
Orchestra:
Score:
Options:
Modified Opcodes and Gens:
Frontends:
csdebugger:
HTML5:
General usage:
Bugs fixed:
System changes:
API:
Platform Specific:
Windows.
OSX.
GNU/Linux.
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.