Back Home

Version Info 0.3.1

This is a small update, containing the 3.46 changes and one bug fix. Includes fog opcode. Fixed bug in options menu. (5/13/97)

Version Info 0.3.0

This the latest release of Csound from Mike Berry, Matt Ingalls and Dave Madole at Mills College. We've been working on it on and off for a few months and apologize for the repeated "Real Soon Now" messages over the last couple of months. There is still a lot we'd like to do, but this seems like a good stopping point.
As always, contact csound-dev@eartha.mills.edu with bugs and complaints

Basic Changes

The foreground app is now just called "Csound", the background app is just called "perf".
As usual, remove (copy to diskette) all previous versions of csound.ppc and perf.ppc from your file system. Among major upgrades:
A new ugen that reads samples directly from disk ("diskin"); Ability to read and write AIFF-C Floating Point Files; Ability to handle realtime input; Extended MIDI opcodes and (even) more robust MIDI implementation; integration of John Fitch's "Bath" code brings in many more ugens..
There are also numerous minor upgrades, bug fixes, etc.
The details are included below, which are copied from the release notes.
We'd like to thank all of the users of our port for their feedback and support over the last year. We'll probably be putting a hiatus on development, except for bug fixes, at least for the summer.

Csound (Front End) Changes

CHANGES TO FRONT END for version 0.3b0
-changed popup menu to AIFF/C -added the real-time "audio in" check box -changed default buffers to more reasonable numbers. -hard wired RT-MIDI to 16-bit ints -Fixed 'new project'/'open project'/ and drag&drop project bugs -Fixed more project bugs that the fixes created -Got rid of 'command line' from file menu
-Made the post processor/text editor menu items only options. To choose a post processor or text editor you must now do so in the "general preferences" dialog box. However, if you enable one of the options and there has not been an application yet selected, a courtesy dialog is displayed for you to choose one.
-Created a 'general prefs' dlog launched from the prefs menu, containing: - text editor/post processor selection - a safety-file overwrite check box (if the option is selected, then before launching perf, csound checks to see if the file exists in SFDIR. if it does, a standard put file comes for you to type in a new file name.) - automatically launch perf after scoregeneration check box.
-Many Score Generator Additions/Improvements: (SEE OTHER DOCUMENT FOR NEW FEATURES) - put in the better robin whittle uniform random generator - put in a min/max option (a 'P') - exponetial interpolation - quantization - exponential random distribution. - fixed bug when more than one gesture of data - disabled the oK-open now button when scogen brings up the text editor chooser dlog. - added a 'cancel' button (hack that sometimes works) - front end passes to perf -oName, where Name is only the soundfile, not full path as new SFDIR flag (see perf changes, below)
-A brand new "pretty" powerplant front end is in progress and should be in the next release...

perf Changes

Changes to perf.ppc:
Now it is just called "perf".
Okay then, changes to "perf":
BUG FIXES:
- Fixed a bug that caused a crash when a MIDI orchestra failed to compile.
Removed some redundant/unnecessary/debugging messages, especially from OMS.
Sundry fixes to transport logic.
ADDITIONS/UPGRADES:
32-bit floating point file I/O. perf reads/writes AIFF-C files with compression type FP32. This is experimental but should be compatible with future releases of SoundHack. Thanks to Tom Erbe for his cooperation.
Real-time input. Note that there is currently NOTHING WE CAN DO about 250 ms (approximately) delay, as it is built into the Toolbox Sound Input Manager. Included "RTin" project in "example orcs & scos" folder.
sndinfo plays sound.
Mostly integrated John Fitch source code distribution into our source code, resulting in "way too many" unit generators, expanded capabilities in lpanal. See release documentation for complete list of opcodes implemented in this release. (note: also implemented "-z" option but this can currently only be entered on the command line (see below).
Note: "peak" ugens not implemented.
Extended MIDI opcodes from Mike (see doc).
New opcode by Matt to play sample directly from disk (see "0.3b New Ugens").
If perf is launched by clicking on perf instead of started from CSound, STR resource is read for default command line. Currently this is not saved and can only be changed and saved using a resource editor.
Strategically located buffer flushes in perf so that even if text buffer is set to large value (for optimization) real important messages (like orchestra compilation & score reading) will be reported. This should help people that have the "thought perf died" problem.
Increased hetro analysis bands to 1024.
Increased PMAX (max pfields) to 1024.
changed flags: (for the command line entry) '-X' for SFDIR. '-Q' for SADIR '-q' for SSDIR (like before) '-z' prints list of currently availible opcodes fixed bug so now input files are looked in SFDIR if not in SSDIR....
It has been a long time - I'm sure there are other things.
KNOWN BUGS:
Still hear about crashes on graphics windows resize (in fact I've seen it). Stack traces would be appreciated.

New Ugens

New Ugens in 0.3b0
- diskin -----> a new ugen like 'soundin', but with linear interpolation, pitch shift, direction change, and a "wraparound" option.
Syntax:
a1[[,a2[,a3,a4]] diskin ifilcod,kpitch[,iskiptim][,iwraparound][,iformat]
kpitch - can be any real number. a negative number signifies backwards playback. The given number is a pitch ratio, where: 1= norm pitch, 2=oct higher, 3=12th higher,etc; .5= oct lower, .25=2oct lowr, etc; -1= norm pitch backwards,-2=oct higher backwrds,etc..
iskiptim - the skip time in seconds.
iwraparound - 1=on, 0=off (wraps around to end of file either direction)
iformat - format of input file (see soundin doc)
Warnings: 1) 8-bit files haven't been tested. 2) if backwards playback and 'wraparound', then you must have at least one sample's worth for skiptime.
-------------------------------------------------------------------------- - playram -----> a new ugen
pretty self explanatory. (and pretty obnoxious)
Syntax:
a1[[,a2[,a3,a4]] playram
Warnings: 1) Will only play for ((RAM size)/(sampframesize*sr)) seconds, then will output silence
--------------------------------------------------------------------------

Changes to Score Generator

************** New Features in the Score Generator ************************
There are a number of new features to the score generator. You can still use it the old "simple" way, however. (except that p1 now defaults to the normal "center/width" mode)
p0 is the same, except the "volume/density scaling flag" is now an integer representing the sum of these "global" options:
1 = scale volumes according to density (same as last version) 2 = gesture's function segment lengths (n1,n2,etc...) will be specified in seconds, NOT relative as default. 4 = let note durations overlap gesture duration (if this option is NOT enabled, note durations will be truncated to fit within the given gesture duration.
for example, the p0 statement:
p0 0 40 7982 5
means create a gesture from 0 to 40 seconds, with a random seed of 7982 and scale volumes and let note durations overlap past 40 seconds.
======
The other 'p' functions act just like before, except there are now optional parameters for more control. To turn on these "extended" options, you must make the PFIELD NUMBER NEGATIVE!
SYNTAX The entire syntax is as follows, which should be on all one line. Brackets ([ ]) signify "extended" parameters.
p/P[-]# code [rdist#] [quant#] [exp#] a1 a2 [ar] [aq] [aex] n1 b1 b2 [br] [bq] [bex] n2...x1 x2 [xr] [xq]
(notice the last ex [xex] is not needed.)
DESCRIPTION
p/P: you can use either 'p' or 'P'. 'p' signifies that ordinate values are "center"/"width" 'P' signifies that, in the random range, the first ordinate value is the "minimum" - second ordinate value is "maximum"
#: the pfield number this function is representing. -: if the pfield number is negative, "extended" options.
code: the sum of option types. 1 = exponential random distribution 2 = quantize 4 = exponential interpolation
rdist#: required if <code> is odd. 0 = use exponential random distribution in pfields (ar,br,etc...) non-0 = the exponential random distribution factor for the entire p-function using the equation: a2*pow(rand(),r#); where rand() returns a uniformly distribute a random number from 0-1 and r# is the distribution factor.
quant#: required if <code> = 2,3,6,or7. 0 = use quantize params in pfields (aq, bq, etc...) non-0 = the quantization for this function. the quantization is simply the value that is rounded to the nearest after interpolation. (.01 will make all generated values be rounded to the nearest hundredth, for example)
exp#: required if <code> = 4,5,6,or7. 0 = use exponential interpolation factor given in pfields (aex, bex, etc...) non-0 = the exponential interpolation factor. this factor is the exponent the linear interpolation factor is raised to. (think of it as the function y = x^exp#, where 0<x<1 and 0<y<1. and the interpolated data is: a1 + y*(a2-a1). )
a1,b1,... first ordinate values, either specifying "center" for a 'p' function or "minimum" for a 'P' function.
a2,b2,... second ordinate values, either specifying "width" for a 'p' function or "maximum" for a 'P' function.
ar,br,... ordinate values for "extended" random distribution option. only used if rdist# is non-0.
aq,bq,... ordinate values for "extended" qunatize option. only used if quant# is non-0.
aex,bex,..ordinate values for "extended" exponential interpolation. only used if exp# is non-0. unlike aq and ar, these values will ALWAYS be linearly interpolated.
EXAMPLE:
P-5 7 .5 0 2 0 1 .5 1 .5 10 .1 1 0 1 .001
- is a function describing the 5th pfield for the generated gesture. - it uses all the "extended" options by having a negative pfield number and a '7' for the code (1+2+4). - random distribution resembles the function curve y=x^.5, where 0<x<1 and 0<y<1 throughout the entire generation, which means the randomness is "weighted" towards the "maximum" limited slightly. - numbers are interpolated between ordinate values exponentially with a constant path remsembling a function curve of y=x^2. - quantization changes throughout the gesture, first starting rounding all values to the nearest .5, gradually to .1, then continues to reduce the quantization until it is rounding the generated values to the nearest .001 at the end of the gesture.
matt ingalls, Dave Madole, Mike Berry