Release Notes for 4.15 ====================== A set of corrections to the changes in 4.14 (mislabelled as 4.13). Bug Fixes --------- pvanal in pvx mode allows for duration internal changes to adsr Bug in reading analysis file on macintosh fixed Csound will again run without a csoudn.xmg file -- and defaults to English (not American) Language Changes ---------------- In extented pvoc file it now recognises .pvx in all case variations Opcode Fixes ------------ soundin was incorrectly specified in entry table Endianness problem in 24bit sound fixed schedkwhen now allows deferred action turnoff minor fix in adsr Buf in spat3d fixed New Opcodes ----------- tempoval -- read current value of tempo if beatmode is on, or 60 if not biquada -- just like biquad except the parameters are all a-rate vibrato, vibr -- Vibrato opcodes jitter, jitter2, jspline -- Jitter opcodes oscbnk -- an oscilator bank cpstun, cpstuni -- another micro-tuning opcode Other Changes: ------------- Known Bugs ========== The following bugs are known but not yet fixed 1: Large scores do not always extend correctly 2: ADSR can go wrong 3: Convolve files on Mac not recognised 4: reported bug in spat3di (mail of Sun, 26 Aug 2001 22:47:37 -0400) 5: Bug in linseg at k-rate (mail of Wed, 15 Aug 2001 19:59:48 +0100) 6: PVOC can glitch (mail of Mon, 19 Jun 2000 00:45:23 +0200) Windows GUI Changes ------------------- Can now select 24bit output and floats; the GUI was confused and so there are some layout changes ----------------------------------------------------------------------- ==John ff 2001 September ======================================================================== cpstun, cpstuni kcps cpstun ktrig, kindex, kfn icps cpstuni index, ifn INITIALIZATION icps - return value in cps index - an integer number denoting an index of scale ifn - function table containing the parameters (numgrades, interval, basefreq, basekeymidi) and the tuning ratios. PERFORMANCE kcps - return value in cps ktrig - a trigger signal used to trigger the evaluation kindex - an integer number denoting an index of scale kfn - function table containing the parameters (numgrades, interval, basefreq, basekeymidi) and the tuning ratios. These opcodes are similar to cpstmid, but work without necessity of MIDI. cpstun works at k-rate, while cpstuni at init-rate. They allow fully customized micro-tuning scales. They requires a function table number containing the tuning ratios, and some other parameters stored in the function table itself. kindex and index arguments should be filled with integer numbers expressing the grade of given scale to be converted in cps. In cpstun, a new value is evaluated only when ktrig contains a non-zero value. The function table ifn (or kfn) should be generated by GEN2 and the first four values stored in this function are parameters that express: numgrades (the number of grades of the micro-tuning scale), interval (the frequency range covered before repeating the grade ratios, for example 2 for one octave, 1.5 for a fifth etcetera), basefreq (the base frequency of the scale in cps), basekey (the integer index of the scale to which to assign basefreq unmodified). After these four values, the user can begin to insert the tuning ratios. For example, for a standard 12-grade scale with the base-frequency of 261 cps assigned to the key-number 60, the corresponding f-statement in the score to generate the table should be: ; numgrades basefreq tuning-ratios (eq.temp) ....... ; interval basekey f1 0 64 -2 12 2 261 60 1 1.059463 1.12246 1.18920 ..etc... Another example with a 24-grade scale with a base frequency of 440 assigned to the key-number 48, and a repetition interval of 1.5: numgrades basefreq tuning-ratios ....... interval basekey f1 0 64 -2 24 1.5 440 48 1 1.01 1.02 1.03 ..etc... ------------------------------------------------------------------------ ar oscbnk kcps, kamd, kfmd, kpmd, iovrlap, iseed, \ kl1minf, kl1maxf, kl2minf, kl2maxf, ilfomode, \ keqminf, keqmaxf, keqminl, keqmaxl, keqminq, keqmaxq, ieqmode, \ kfn, il1fn, il2fn, ieqffn, ieqlfn, ieqqfn[, itabl[, ioutfn]] DESCRIPTION =========== This unit generator mixes the output of any number of oscillators. The frequency, phase, and amplitude of each oscillator can be modulated by two LFOs (all oscillators have a separate set of LFOs, with different phase and frequency); additionally, the output of each oscillator can be filtered through an optional parametric equalizer (also controlled by the LFOs). This opcode is most useful for rendering ensemble (strings, choir, etc.) instruments. Although the LFOs run at k-rate, amplitude, phase and filter modulation are interpolated internally, so it is possible (and recommended in most cases) to use this unit at low (~1000 Hz) control rates without audible quality degradation. The start phase and frequency of all oscillators and LFOs can be set by a built-in seedable 31-bit random number generator, or specified manually in a function table (GEN2). INITIALIZATION ============== iovrlap - number of oscillator units. iseed - seed value for random number generator (positive integer in the range 1 to 2147483646 (2^31 - 2)). ilfomode - LFO modulation mode, sum of: 128: LFO1 to frequency 64: LFO1 to amplitude 32: LFO1 to phase 16: LFO1 to EQ 8: LFO2 to frequency 4: LFO2 to amplitude 2: LFO2 to phase 1: LFO2 to EQ If an LFO does not modulate anything, it is not calculated, and the ftable number (il1fn or il2fn) can be omitted. ieqmode - parametric equalizer mode -1: disable EQ (faster) 0: peak 1: low shelf 2: high shelf 3: peak (filter interpolation disabled) 4: low shelf (interpolation disabled) 5: high shelf (interpolation disabled) The non-interpolated modes are faster, and in some cases (e.g. high shelf filter at low cutoff frequencies) also more stable; however, interpolation is useful for avoiding "zipper noise" at low control rates. il1fn - LFO1 function table number. The waveform in this table has to be normalized (absolute value <= 1), and is read with linear interpolation. il2fn - LFO2 function table number. The waveform in this table has to be normalized, and is read with linear interpolation. ieqffn, ieqlfn, ieqqfn - lookup tables for EQ frequency, level, and Q (optional if EQ is disabled). Table read position is 0 if the modulator signal is less than, or equal to -1, (table length / 2) if the modulator signal is zero, and the guard point if the modulator signal is greater than, or equal to 1. These tables have to be normalized to the range 0 - 1, and have an extended guard point (table length = power of two + 1). All tables are read with linear interpolation. itabl - function table storing phase and frequency values for all oscillators (optional). The values in this table are in the following order (5 for each oscillator unit): oscillator phase, lfo1 phase, lfo1 frequency, lfo2 phase, lfo2 frequency, ... All values are in the range 0 to 1; if the specified number is greater than 1, it is wrapped (phase) or limited (frequency) to the allowed range. A negative value (or end of table) will use the output of the random number generator. The random seed is always updated (even if no random number was used), so switching one value between random and fixed will not change others. ioutfn - function table to write phase and frequency values (optional). The format is the same as in the case of itabl. This table is useful when experimenting with random numbers to record the best values. PERFORMANCE =========== ar - output signal. kcps - oscillator frequency in Hz. kamd - AM depth (0 - 1). (AM output) = (AM input) * ((1 - (AM depth)) + (AM depth) * (modulator)) (Note: amplitude modulation is applied before the parametric equalizer.) kfmd - FM depth (in Hz). kpmd - phase modulation depth. kl1minf, kl1maxf - LFO1 minimum and maximum frequency in Hz. kl2minf, kl2maxf - LFO2 minimum and maximum frequency in Hz. (Note: oscillator and LFO frequencies are allowed to be zero or negative.) keqminf, keqmaxf - parametric equalizer minimum and maximum frequency in Hz. keqminl, keqmaxl - parametric equalizer minimum and maximum level. keqminq, keqmaxq - parametric equalizer minimum and maximum Q. kfn - oscillator waveform table. Table number can be changed at k-rate (this is useful to select from a set of band-limited tables generated by GEN30, to avoid aliasing). The table is read with linear interpolation. AUTHOR ====== Istvan Varga 2001 ------------------------------------------------------------------------ kout vibrato kAverageAmp, kAverageFreq, kRandAmountAmp, kRandAmountFreq, kAmpMinRate, kAmpMaxRate, kcpsMinRate, kcpsMaxRate, ifn [, iphs] kout vibr kAverageAmp, kAverageFreq, ifn kout jitter kamp, kcpsMin, kcpsMax kout jitter2 ktotamp, kamp1, kcps1, kamp2, kcps2, kamp3, kcps3 DESCRIPTION These opcode are designed to make sounds more natural to hearing. vibrato and vibr generates a vibrato-like signal containing some user-controlled randomness in amplitude and frequency; jitter and jitter2 produces some deviation to be summed to constant signals to make them more "analog-like" and natural. INITIALIZATION ifn - number of vibrato table. It normally contains a sine or a triangle wave. iphs (optional) - initial phase of table, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0. PERFORMANCE kAverageAmp - average amplitude value of vibrato kAverageFreq - average frequency value of vibrato (in cps) kRandAmountAmp - amount of random amplitude deviation kRandAmountFreq - amount of random frequency deviation kAmpMinRate - minimum frequency of random amplitude deviation segments (in cps) kAmpMaxRate - maximum frequency of random amplitude deviation segments (in cps) kcpsMinRate - minimum frequency of random frequency deviation segments (in cps) kcpsMaxRate - maximum frequency of random frequency deviation segments (in cps) kamp - amplitude of jitter deviation kcpsMin - minimum speed of random frequency variations (expressed in cps) kcpsMax - maximum speed of random frequency variations (expressed in cps) ktotamp - resulting amplitude of jitter2 kamp1 - amplitude of the first jitter component kcps1 - speed of random variation of the first jitter component (expressed in cps) kamp2 - amplitude of the second jitter component kcps2 - speed of random variation of the second jitter component (expressed in cps) kamp3 - amplitude of the third jitter component kcps3 - speed of random variation of the third jitter component (expressed in cps) vibrato outputs a natural-sounding user-controllable vibrato. The concept is to randomly vary both frequency and amplitude of the oscillator generating the vibrato, in order to simulate the irregularities of a real vibrato. In order to have a total control of these random variations, several input arguments are present. Random variations are obtained by two separated segmented lines, the first controlling amplitude deviations, the second the frequency deviations. Average duration of each segment of each line can be shortened or enlarged by the arguments kAmpMinRate, kAmpMaxRate, kcpsMinRate, kcpsMaxRate, and the deviation from the average amplitude and frequency values can be independently adjusted by means of kRandAmountAmp and kRandAmountFreq. vibr is an easier-to-use version of vibrato. It has the same generation-engine of vibrato, but the parameters corresponding to missing input arguments are hard-coded to default values. jitter generates a segmented line whose segments are randomly generated inside the +kamp and -kamp interval. Duration of each segment is a random value generated according to kcpsmin and kcpsmax values. jitter2 also generates a segmented line such as jitter, but in this case the result is similar to the sum of three randi opcodes, each one with a different amplitude and frequency value (see randi for more details), that can be varied at k-rate. Different effects can be obtained by varying the input arguments. jitter and jitter2 can be used to make more natural and "analog-sounding" some static, dull sound. For best results, It is suggested to keep their amplitude moderate. ------------------------------------------------------------------------ kr jspline kamp, kcpsMin, kcpsMax ar jspline xamp, kcpsMin, kcpsMax kr rspline krangeMin, krangeMax, kcpsMin, kcpsMax ar rspline xrangeMin, xrangeMax, kcpsMin, kcpsMax DESCRIPTION Generate random spline curves INITIALIZATION no init args PERFORMANCE kr, ar - output signal xrangeMin, xrangeMax - range of values of random-generated points kcpsMin, kcpsMax - range of point-generation rate. Min and max limits are expressed in cps. xamp - amplitude factor jspline (jitter-spline generator) generates a smooth curve based on random points generated at [cpsMin, cpsMax] rate. This opcode is similar to randomi or randi or jitter, but segments are not stright lines, but cubic spline curves. Output value range is approximately > -xamp and < xamp. Actually, real range could be a bit greater, because of interpolating curves beetween each pair of random-points. rspline (random-spline-curve generator) is similar to jspline but output range is defined by means of two limit values. Also in this case, real output range could be a bit greater of range values, because of interpolating curves beetween each pair of random-points. At present time generated curves are quite smooth when cpsMin is not too different from cpsMax. When cpsMin-cpsMax interval is big, some little discontinuity could occurr, but it should not be a problem, in most cases. Maybe the algorithm will be improved in next versions. These opcodes are often better than jitter when user wants to "naturalize" or "analogize" digital sounds. They could be used also in algorithmic composition, to generate smooth random melodic lines when used together with samphold opcode. Note that the result is quite different from the one obtained by filtering white noise, and they allow the user to obtain a much more precise control. ------------------------------------------------------------------------