home *** CD-ROM | disk | FTP | other *** search
/ earth.cs.bath.ac.uk / earth.cs.bath.ac.uk.zip / earth.cs.bath.ac.uk / pub / dream / Version4_16.Notes < prev    next >
Text File  |  2002-02-17  |  15KB  |  434 lines

  1. Release Notes for 4.16
  2. ======================
  3.  
  4. A great deal of internal reorganisation, and catching up on opcodes
  5. and gens in use elsewhere.  And of course the usual collection of bug
  6. fixes and bug introductions.
  7.  
  8. Bug Fixes
  9. ---------
  10.  
  11. Bad characters in score introduced by the sorting process fixed.
  12. Off-by-one error in score macros fixed
  13. Bug fix in piped input and output; may improve things a little
  14. Off-by-one error in reading input sounds with skipping
  15. Writing EPS graphs was not correct for macintosh
  16. IRCAM format should be OK again
  17. Bug in schedule/turnoff fixed
  18.  
  19. Language Changes
  20. ----------------
  21.  
  22. Sound fonts are looked for in current directory sample director and
  23. analysis directory.
  24.  
  25. Scores can now have an x opcode which skips the rest of the current
  26. section.
  27.  
  28.  
  29. Opcode Fixes
  30. ------------
  31.  
  32. Obscure bugs in jitter/jitters and jitter2 fixed
  33. Minor bugs in pv on-the-fly
  34. rezzy now not a disaster if rez is set to zero.
  35. Similar in moogvf and svf (and code optimised)
  36. A rounding error problem in k-rate linseg fixed
  37.  
  38. New Opcodes 
  39. -----------
  40.  
  41. cuserrnd -- 
  42. urd -- (function)
  43. octave, semitone, cent, db -- (functions)
  44. grain2, grain3 -- New granular synthesis opcodes
  45. rnd31 -- 31-bit bipolar random opcodes with controllable distribution
  46.  
  47. New Gens
  48. --------
  49.  
  50. Gen24
  51. Gen30 (Istvan Varga)
  52. Gen31 (Istvan Varga)
  53. Gen40
  54. Gen41
  55. Gen42
  56.  
  57.  
  58. Other Changes:
  59. -------------
  60.  
  61. Improved error messages when sfont fails
  62.  
  63. Improve phase calculation in oscbnk
  64.  
  65. musmon re-organised to allow for external use
  66.  
  67. Significant optimisations in deltap3 and vdelay3
  68.  
  69. resonz and resonr optimised
  70.  
  71. Known Bugs
  72. ==========
  73.  
  74. The following bugs are known but not yet fixed
  75.  
  76. 2: ADSR can go wrong
  77. 6: PVOC can glitch (mail of Mon, 19 Jun 2000 00:45:23 +0200)
  78. 8. Spaces in arguments to opcodes can be ignored, giving oddities
  79. 9. Mismatched closing bracket can give crash (mail of Fri, 19 Oct 2001
  80.    19:00:56 +0100) 
  81.  
  82.  
  83. Windows GUI Changes
  84. -------------------
  85.  
  86. Added DAC button
  87.  
  88. -----------------------------------------------------------------------
  89. ==John ff
  90.   2001 December 10
  91. ========================================================================
  92. GEN30
  93. =====
  94.  
  95. f # time size  30  src  minh maxh  [ref_sr]
  96.  
  97. GEN30 extracts a range of harmonic partials from an existing
  98. waveform.
  99.  
  100. src - source ftable
  101.  
  102. minh - lowest harmonic number
  103.  
  104. maxh - highest harmonic number
  105.  
  106. ref_sr (optional) - maxh is scaled by (sr / ref_sr). The
  107. default value of ref_sr is sr.
  108.  
  109. GEN31
  110. =====
  111.  
  112. f # time size  31  src  pna stra phsa  pnb strb phsb  ...
  113.  
  114. This routine is similar to GEN09, but allows mixing any
  115. waveform specified in an existing table.
  116.  
  117. src - source table number
  118.  
  119. pna, pnb, ... - partial number, must be a positive integer
  120.  
  121. stra, strb, ... - amplitude scale
  122.  
  123. phsa, phsb, ... - start phase (0 to 1)
  124.  
  125. [Istvan Varga]
  126. ------------------------------------------------------------------------
  127.  
  128. ar      grain2  kcps, kfmd, kgdur, iovrlp, kfn, iwfn[, irpow[, iseed[, imode]]]
  129.  
  130. ar      grain3  kcps, kphs, kfmd, kpmd, kgdur, kdens, imaxovr, kfn, iwfn,   \
  131.                 kfrpow, kprpow[, iseed[, imode]]
  132.  
  133. INITIALIZATION
  134. ==============
  135.  
  136. iovrlp - (fixed) number of overlapping grains in grain2.
  137.  
  138. imaxovr - maximum number of overlapping grains in grain3. The number of
  139.   overlaps can be calculated by (kdens * kgdur); however, it can be
  140.   overestimated at no cost in rendering time, and a single overlap uses
  141.   (depending on system) 16 to 32 bytes of memory.
  142.  
  143. iwfn - function table containing window waveform (GEN20).
  144.  
  145. irpow - this value controls the distribution of grain frequency variation.
  146.   If irpow is positive, the random distribution (x is in the range -1 to 1) is
  147.   abs(x) ^ ((1 / irpow) - 1); for negative irpow values, it is
  148.   (1 - abs(x)) ^ ((-1 / irpow) - 1). Setting irpow to -1, 0, or 1 will result
  149.   in uniform distribution (this is also faster to calculate). The image
  150.   "grain2_rand.png" shows some examples for irpow.
  151.   The default value of irpow is 0.
  152.  
  153. iseed - seed value for random number generator (positive integer in the range
  154.   1 to 2147483646 (2^31 - 2)). Zero or negative value seeds from current time
  155.   (this is also the default).
  156.  
  157. imode - sum of the following values:
  158.  
  159.   64: (grain3 only) synchronize start phase of grains to kcps.
  160.   32: (grain3 only) start all grains at integer sample location. This may be
  161.       faster in some cases, however it also makes the timing of grain envelopes
  162.       less accurate.
  163.   16: (grain3 only) do not render grains with start time less than zero (see
  164.       the image "grain3_1.png"; this option turns off grains marked with red
  165.       on the image).
  166.    8: interpolate window waveform (slower).
  167.    4: do not interpolate grain waveform (fast, but lower quality).
  168.    2: grain frequency is continuously modified by kcps and kfmd (by default,
  169.       each grain keeps the frequency it was launched with). This may be
  170.       slower at high control rates. In grain3 it also controls phase
  171.       modulation (kphs).
  172.    1: skip initialization.
  173.   The default value is 0.
  174.  
  175. PERFORMANCE
  176. ===========
  177.  
  178. ar - output signal.
  179.  
  180. kcps - grain frequency in Hz.
  181.  
  182. kphs - (grain3 only) grain phase.
  183.  
  184. kfmd - random variation (bipolar) in grain frequency in Hz.
  185.  
  186. kpmd - (grain3 only) random variation (bipolar) in start phase.
  187.  
  188. kgdur - grain duration in seconds.
  189.  
  190. kdens - (grain3 only) number of grains per second. In grain2, this is fixed to
  191.   (iovrlp / kgdur).
  192.  
  193. kfrpow - (grain3 only) distribution of random frequency variation (see irpow).
  194.  
  195. kprpow - (grain3 only) distribution of random phase variation (see irpow).
  196.   Setting kphs and kpmd to 0.5, and kprpow to 0 will emulate grain2.
  197.  
  198. kfn - function table containing grain waveform. Table number can be changed at
  199.   k-rate (this is useful to select from a set of band-limited tables generated
  200.   by GEN30, to avoid aliasing).
  201.  
  202. AUTHOR
  203. ======
  204.  
  205. Istvan Varga
  206. 2001
  207. ------------------------------------------------------------------------
  208.  
  209. ix    rnd31 iscl, irpow[, iseed]
  210. kx    rnd31 kscl, krpow[, iseed]
  211. ax    rnd31 kscl, krpow[, iseed]
  212.  
  213. DESCRIPTION
  214. ===========
  215.  
  216. 31-bit bipolar random opcodes with controllable distribution. These
  217. units are portable, i.e. using the same seed value will generate the
  218. same random sequence on all systems. The distribution of generated
  219. random numbers can be varied at k-rate.
  220.  
  221. INITIALIZATION
  222. ==============
  223.  
  224. irpow - this value controls the distribution of random numbers.
  225.   If irpow is positive, the random distribution (x is in the range -1 to 1) is
  226.   abs(x) ^ ((1 / irpow) - 1); for negative irpow values, it is
  227.   (1 - abs(x)) ^ ((-1 / irpow) - 1). Setting irpow to -1, 0, or 1 will result
  228.   in uniform distribution (this is also faster to calculate). The image
  229.   "grain2_rand.png" shows some examples for irpow.
  230.  
  231. iseed - seed value for random number generator (positive integer in the range
  232.   1 to 2147483646 (2^31 - 2)). Zero or negative value seeds from current time
  233.   (this is also the default). Seeding from current time is guaranteed to
  234.   generate different random sequences, even if multiple random opcodes are
  235.   called in a very short time.
  236.   In the a- and k-rate version the seed is set at opcode initialization. With
  237.   i-rate output, if iseed is zero or negative, it will seed from current time
  238.   in the first call, and return the next value from the random sequence in
  239.   successive calls; positive seed values are set at all i-rate calls.
  240.   The seed is local for a- and k-rate, and global for i-rate units.
  241. Notes:
  242.  - although seed values up to 2147483646 are allowed, it is recommended
  243.   to use smaller numbers (< 1000000) for portability, as large integers may
  244.   be rounded to a different value if 32-bit floats are used.
  245.  - i-rate rnd31 with a positive seed will always produce the same output
  246.   value (this is not a bug). To get different values, set seed to 0 in
  247.   successive calls, which will return the next value from the random sequence.
  248.  
  249. iscl - output scale. The generated random numbers are in the range -iscl to
  250.   iscl.
  251.  
  252. ix - i-rate output value.
  253.  
  254. PERFORMANCE
  255. ===========
  256.  
  257. krpow - same as irpow, but can be varied at k-rate.
  258.  
  259. kscl - same as iscl, but can be varied at k-rate.
  260.  
  261. kx - k-rate output value.
  262.  
  263. ax - a-rate output value.
  264.  
  265. EXAMPLES
  266. ========
  267.  
  268. ; a-rate random numbers in the range -2 to 2 with triangle distribution,
  269. ; seed from current time
  270.  
  271. a1    rnd31 2, -0.5
  272.  
  273. ; k-rate random numbers in the range -1 to 1 with uniform distribution,
  274. ; seed=10
  275.  
  276. k1    rnd31 1, 0, 10
  277.  
  278. ; i-rate random numbers with linear distribution, seed=7
  279. ; (note that seed was used only in the first call)
  280.  
  281. i1    rnd31 1, 0.5, 7
  282. i2    rnd31 1, 0.5
  283. i3    rnd31 1, 0.5
  284.  
  285. ; same with seeding from current time
  286.  
  287. i1    rnd31 1, 0.5, 0
  288. i2    rnd31 1, 0.5
  289. i3    rnd31 1, 0.5
  290.  
  291. AUTHOR
  292. ======
  293.  
  294. Istvan Varga
  295. Nov 2001
  296.  
  297. ------------------------------------------------------------------------
  298. GEN40
  299.  
  300. This subroutine generates a continuous random distribution function starting
  301. from the shape of a user-defined distribution histogram.
  302.  
  303. f# time size -40 shapetab
  304.  
  305. The shape of histogram must be stored in a previously defined table, in fact
  306. shapetab argument must be filled with the number of such table.
  307. Histogram shape can be generated with any other GEN routines. Since no
  308. interpolation is used when GEN40 processes the translation, it is suggested
  309. that the size of the table containing the histogram shape to be reasonably
  310. big, in order to obtain more precision (however after the processing the
  311. shaping-table can be destroyed in order to re-gain memory). In DirectCsound
  312. it is possible to generate tables having non-power-of-two length by giving
  313. a negative value to size argument.
  314.  
  315. This subroutine is designed to be used together with Cusrnd opcode
  316. (see Cusrnd for more information). 
  317.  
  318. ------------------------------------------
  319. GEN41
  320.  
  321. This subroutine generates a discrete random distribution function by giving
  322. a list of numerical pairs.
  323.  
  324. f# time size -41 value1 prob1 value2 prob2 value3 prob3 ... valueN
  325. probN
  326.  
  327. The first number of each pair is a value, and the second is the probability
  328. of that value to be chosen by a random algorithm. Even if any number can
  329. be assigned to the probability element of each pair, it is suggested to give
  330. it a percent value, in order to make it clearer for the user. In DirectCsound
  331. it is possible to generate a table having a non-power-of-two length by giving
  332. a negative value to size argument.
  333.  
  334. This subroutine is designed to be used together with Dusrnd and
  335. urd opcodes (see Dusrnd for more information). 
  336. ------------------------------------------------------------------------
  337. GEN42
  338.  
  339. This subroutine generates a random distribution function of discrete ranges
  340. of values by giving a list of groups of three numbers.
  341.  
  342. f# time size -42  min1 max1 prob1 min2 max2 prob2 min3 max3 prob3 ...  minN maxN probN
  343.  
  344. The first number of each group is a the minimum value of the first range,
  345. the second is the maximum value and the third is the probability of that
  346. an element belonging to that range of values can be chosen by a random
  347. algorithm. Even if any number can be assigned to the probability element
  348. of each group, it is suggested to give it a percent value, in order to make
  349. it clearer to the user. In DirectCsound it is possible to generate a table
  350. having a non-power-of-two length by giving a negative value to
  351. size argument.
  352.  
  353. This subroutine is designed to be used together with Dusrnd and
  354. urd opcodes (see Dusrnd for more information). Since both
  355. Dusrnd and urd do not use any interpolation, it is suggested
  356. to give a size reasonably big.
  357.  
  358. ------------------------------------------------------------------------
  359.  
  360. duserrnd, cuserrnd
  361.  
  362.  
  363. iout duserrnd itableNum
  364. kout duserrnd ktableNum
  365. aout duserrnd atableNum
  366.  
  367. iout = urd(itableNum)
  368. kout = urd(ktableNum)
  369. aout = urd(atableNum)
  370.  
  371. iout cuserrnd imin, imax, itableNum
  372. kout cuserrnd kmin, kmax, ktableNum
  373. aout cuserrnd amin, amax, atableNum
  374.  
  375. DESCRIPTION
  376.  
  377. Output is a controlled pseudo-random number series. In these cases, the random
  378. distributions are created by the user.
  379.  
  380. INITIALIZATION
  381.  
  382. itableNum - number of table containing the random-distribution function.
  383. Such table is generated by the user. See GEN40, GEN41 and GEN42. The table
  384. length does not need to be a power of 2
  385.  
  386. imin - minimum range limit 
  387. imax - maximum range limit
  388.  
  389. PERFORMANCE
  390.  
  391. ktableNum - number of table containing the random-distribution function.
  392. Such table is generated by the user. See GEN40, GEN41 and GEN42. The table
  393. length does not need to be a power of 2
  394.  
  395. kmin - minimum range limit 
  396. kmax - maximum range limit
  397.  
  398. duserrnd (discrete user-defined-distribution random generator) generates
  399. random values according to a discrete random distribution created by the
  400. user. The user can create the discrete distribution histogram by using
  401. GEN41. In order to create that table, the user has to define an arbitrary
  402. amount of number pairs, the first number of each pair representing a value
  403. and the second representing its probability (see GEN41 for more details).
  404. urd is the same opcode as duserrnd, but can be used in function
  405. fashion. When used  as a function, the rate of generation depends by
  406. the rate type of input variable XtableNum. In this case it
  407. can be embedded into any formula. Table number can be varied at k-rate, allowing
  408. to change the distribution histogram during the performance of a single note.
  409. duserrnd is designed be used in algorithmic music generation.
  410.  
  411. duserrnd can also be used to generate values following a set of ranges
  412. of probabilities by using distribution functions generated by GEN42
  413. (See GEN 42 for more details). In this case, in order to simulate
  414. continuous ranges, the length of table XtableNum should be
  415. reasonably big, as duserrnd does not interpolate between table elements.
  416.  
  417. cuserrnd (continuous user-defined-distribution random generator)
  418. generates random values according to a continuous random distribution
  419. created by the user. In this case the shape of the distribution histogram
  420. can be drawn or generated by any GEN routine. The table containing the shape
  421. of such histogram must then be translated to a distribution function by means
  422. of GEN40 (see GEN40 for more details). Then such function must
  423. be assigned to the XtableNum argument of cuserrnd.
  424. The output range can then be rescaled according to the Xmin
  425. and Xmax arguments. cuserrnd linearly interpolates between
  426. table elements, so it is not recommended for discrete distributions (GEN41
  427. and GEN42).
  428.  
  429. For a tutorial about random distribution histograms and functions see:
  430.  
  431. D. Lorrain. "A panoply of stochastic cannons". In C. Roads, ed. 1989. Music
  432. machine. Cambridge, Massachusetts: MIT press, pp. 351 - 379.
  433. ------------------------------------------------------------------------
  434.