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

## What's new in Csound 5.16

### 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.
  - maxtab opcode.
  - mintab opcode.
  - sumtab opcode.
  - scalet 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