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 / README.Csound < prev    next >
Text File  |  1999-02-15  |  42KB  |  1,225 lines

  1. ***********NEW: Log of changes introduced from 3.15.10**********************
  2.  
  3.  
  4.                CSOUND for MSDOS
  5.              CSOUND for ATARI ST
  6.  
  7.                   John Fitch
  8.            School of Mathematical Sciences
  9.               University of Bath
  10.                  Bath BA2 7AY
  11.                    England
  12.              Tel: +44-1225-826820
  13.              FAX: +44-1225-826492
  14.             E-mail: jpff@maths.bath.ac.uk
  15.                or  J.P.Fitch@bath.ac.uk
  16.                    
  17.         (also Codemist Ltd, Tel/FAX: +44-1225-837430)
  18.  
  19.                 csound_286.zip (old)
  20.               csound_fpt_286.zip (old)
  21.                 csound_new.zip
  22.                 csound_win.zip
  23.                 csound_src.zip
  24.  
  25. These files are the executables for CSound for 286/386/486 machines
  26. running MS-DOS or Windows.  The "new" version is supposed to be self
  27. adapting to any hardware over 386.
  28.  
  29. Also, the files *.ttp are Csound for the Atari ST.  See below for ATARI notes
  30.  
  31. There is a mailing list kept for this version; to join send mail to
  32. majordomo@bath.ac.uk with a single line "subscribe pcsound".  There is
  33. also a Csound mailing list for discussion of any aspect of the system,
  34. (joined my mailing majordomo@maths.ex.ac.uk) and a WWW page at
  35. http://www.leeds.ac.uk/music/Man/c_front.html
  36.  
  37. Local Changes: 
  38. =============
  39.  It attempts to do graphics.  It is supposed to adjust to your
  40. graphics system.  See below for notes on how to set screen types
  41. explicitly.  I also have graphics in PVANAL and LPANAL with a -g
  42. option.  In CSOUND itself there is a pause before and after each
  43. graph.  This can be turned off if the environment variable CSNOSTOP is
  44. set to YES.
  45.  
  46. To ensure you get WAV sound files either use the -W option, or set an
  47. environment variable SFOUTYP to WAV in your AUTOEXEC.BAT
  48.  
  49. On Windows95 the output device doc is recognised as immediate output.
  50. One needs a fast machine though
  51.  
  52. I have introduced a local version number; currently I have v3.46.
  53. The major number refers to MIT's current version (3 is the beta), the
  54. 46 is my sequence number for the PC.
  55.  
  56. There are three new utilities to scale for amplitude, a mixer for
  57. mixing sound files together, and a mkgraph program to write envelopes
  58. for these two.
  59.  
  60. See separate release files for versions 3.44-3.46
  61.  
  62. Version 3.36:
  63.   Fixed bug in mixer and a bug in grain
  64.  
  65. Version 3.35:
  66.   Added granule unit generator, and relaxed restrictions on memory
  67. files.  Also MAC improvements to dialogs.
  68.  
  69. Version 3.34:
  70.   Revised WAV support and added 8bit unsigned type
  71.  
  72. Version 3.33:
  73.   Added a "Play on Exit" option for Windows.  Print version number
  74. always.  On Windows use the registry system to remember parameters,
  75. and tidy the code.  Decide not to contine the Zortech version.
  76.   
  77. Version 3.31:
  78.   Various additions, now based on WatcomC (rather than Zortech).
  79. Blaster support temporarily withdrawn.  Incorporates some Windows
  80. code, and consolidation from Unix system.
  81.  
  82. Version 3.28.12:
  83.   Added convolution operations; see documentation below.  Also
  84. deferred loads of tables.
  85.  
  86. Version 3.26.12:
  87.   Fixed bug in granular synthesis
  88.  
  89. Version 3.25.12:
  90.   Internal only -- not distributed
  91.  
  92. Version 3.24.12:
  93.   Restored MIDI changes as they all failed to work.  Correction to
  94. reverb2 made.  Another attempt to correct Soundblaster support.  The
  95. 8-bit seems to work for me; 16-bit hangs still.  High speed seems OK.
  96. Have not checked stereo.  Some shortening of messages, and usage
  97. message removed in 286 versions (as Data segment is full).
  98.  
  99. Versions 3.21-3.23 internal; version 3.x.11 was disaster.
  100.  
  101. Version 3.20.10:
  102.   A number of changes in the MIDI area.  A number of new generators
  103. added, including Butterworth filters, vdelay, multitap and reverb2.
  104. Also granular synthesis generator and stochastic generators.  There is
  105. an envelope-following generator as well.  See Appendix 7 for details
  106. of these generators.  These are largely the work of Paris Smaragdis.
  107.  
  108. Version 3.19.10 and Version 3.18.10:
  109.   Not released
  110.  
  111. Version 3.17.10:
  112.   Created new utility mkgraph which creates envelope files using the
  113. mouse for drawing.  These files can be used by mixer and scale to
  114. provide more flexible gain control on sound files.
  115.   New utility ENVEXT for create an envelope file from a sound file.
  116.  
  117. Version 3.16.10:
  118.   Mixer and scale can take envelope files
  119.  
  120. Version 3.15.10:
  121.   Experimentally I have attempted to read the device sbmidi as a MIDI
  122. input for use with the -M option.  I have no idea if this works.
  123.   When using -o devaudio (also can use -o dac or -o sblst) it will
  124. force the format to be -c or -s.
  125.   The mixer can now take varying numbers of channels as input and can
  126. include some or all channels, and can direct input channel n to output
  127. channel m.  As the scaling can be negative as well as positive this
  128. incorporates removal of information as well.  The syntax is not good,
  129. but inspiration is not with me this weekend. 
  130.  
  131.  
  132. Copyright:
  133. =========
  134. The systems are the product of the MIT Media Laboratory, and this is
  135. their copyright notice:
  136. ------------------------------------------------------------------------
  137.  
  138. Copyright 1986, 1987 by the Massachusetts Institute of Technology.
  139. All rights reserved.
  140.  
  141. Developed by Barry L. Vercoe at the Experimental Music Studio,
  142. Media Laboratory, M.I.T., Cambridge, Massachusetts, with partial support
  143. from the System Development Foundation, and from NSF Grant IRI-8704665.
  144.  
  145. Permission to use, copy, or modify these programs and their documentation
  146. for educational and research purposes only and without fee is hereby granted,
  147. provided that this copyright and permission notice appear on all copies and
  148. supporting documentation.  For any other uses of this software, in original
  149. or modified form, including but not limited to distribution in whole or in
  150. part, specific prior permission from M.I.T. must be obtained.  M.I.T. makes
  151. no representations about the suitability of this software for any purpose.
  152. It is provided "as is" without express or implied warranty.
  153.  
  154. ------------------------------------------------------------------------
  155. The mixer, graphing and SoundBlaster support are probably copyright
  156. John ffitch, and I hereby give permission to use, copy, or modify this
  157. code for any purpose whatsoever.  I would like my name to remain in
  158. there, but I do not insist.
  159. ------------------------------------------------------------------------
  160. Modifications and new code provided by Robin Whittle are provided
  161. without warranty etc. etc.  They are copyright 1995 Robin Whittle.
  162.  
  163. Use of this code for non-commercial software products is permitted,
  164. provided the source code is made freely available according to the
  165. principles of the Free Sofware Foundation, with this copyright notice
  166. attached - and those of Barry Vercoe and John Fitch.
  167. ------------------------------------------------------------------------
  168.  
  169. Other parts of Csound have other ownerships.  In particular there is
  170. copyright code of Codemist (cwin.cpp and elsewhere), Boulanger Music
  171. (various opcodes), Allan S C Lee (granule).  Others may have claims.
  172.  
  173. Interested parties should note that CSound is a system for creation of
  174. sound, and is not a MIDI sequencer.
  175.  
  176. The systems built are described briefly below.
  177.  
  178. CSOUND EXE
  179.     digital audio processing and sound synthesis
  180.     csound [flags] orchfile scorefile
  181. Csound is an environment in which a "scorefile" or external event
  182. sequence can invoke arbitrarily complex signal-processing
  183. "instruments" to produce sound.  Audio may be displayed during its
  184. creation, and the resulting sound sent to an on-line audio device or
  185. to an intermediate soundfile for later playback.  Flags include
  186. -C      use Cscore processing of scorefile
  187. -I      I-time only orch run
  188. -n      no sound onto disk
  189. -i fnam sound input filename
  190. -o fnam sound output filename (if fnam is devaudio, dac or sblst use directly)
  191. -b N    sample frames (or -kprds) per software sound I/O buffer
  192. -B N    samples per hardware sound I/O buffer
  193. -A      create an AIFF format output soundfile
  194. -W      create a WAV format output soundfile
  195. -h      no header on output soundfile
  196. -c      8-bit signed_char sound samples
  197. -a      alaw sound samples
  198. -u      ulaw sound samples
  199. -s      short_int sound samples
  200. -l      long_int sound samples
  201. -f      float sound samples
  202. -r N    orchestra srate override
  203. -v      verbose orch translation
  204. -m N    tty message level. Sum of: 1=note amps, 2=out-of-range msg, 4=warnings
  205.     8=SB mesages
  206. -d      suppress all displays
  207. -g      suppress graphics, use ascii displays
  208. -S      score is in Scot format
  209. -t N    use uninterpreted beats of the score, initially at tempo N
  210. -L dnam read Line-oriented realtime score events from device 'dnam'
  211. -M dnam read MIDI realtime events from device 'dnam' (must be sbmidi)
  212. -F fnam read MIDIfile event stream from file 'fnam'
  213. -P N    MIDI sustain pedal threshold (0 - 128)
  214. -R      continually rewrite header while writing soundfile (WAV/AIFF)
  215. -H      print a heartbeat character at each soundfile write
  216. -N      notify (ring the bell) when score or miditrack is done
  217. -T      terminate the performance when miditrack is done
  218. flag defaults: csound -s -otest -b1024 -B1024 -m7 -P128
  219.  
  220.  
  221. EXTRACT.EXE
  222. Program for extracting parts of a work.  Not tested in PC version
  223.  
  224. HETRO.EXE
  225.     hetrodyne filter analysis for Csound adsyn module
  226.     hetro [flags] [fundamental] [filename]
  227.  hetro takes as input a file containing amplitude samples of some
  228. sound over time (it is assumed that the samples are evenly spaced
  229. in time) and decomposes that sound into a set of harmonically
  230. related sine waves with time varying amplitude and phase.
  231.  
  232. LPCANAL.EXE
  233.     Paul Lansky's software for linear predictive analysis and
  234.     pitch tracking, adapted for Csound.
  235.    lpcanal [-p<n> -i<n> -s<t> -d<t> -o<file> -C<str> -P<frq> -Q<frq>] soundfile
  236.  lpcanal is the new experimental combination of the old anallpc and ptrack. 
  237. It performs linear predictive analysis and pitch tracking on monaural 16bit 
  238. fixed point soundfiles.  If a -g flag is used then a graphical display is
  239. given of some of the output as it is being computed.
  240.  
  241. PVANAL.EXE
  242.     Fourier analysis module for Csound PVOC unit generator
  243.     pvanal  [-n frame-size] [-o overlap | -i increment] \
  244.         inputSoundFile outputFFTFile
  245.  pvanal converts a playable sample (a time-domain representation) into
  246. a series of short-time Fourier transform (STFT) frames centred at
  247. regular points throughout the file (a frequency-domain
  248. representation).  The output file can then be used as the data for the
  249. PVOC unit generator in Csound to generate notes based on the original
  250. sample, but with their timescales and pitches arbitrarily and
  251. dynamically modified.  If a -g flag is used then a graphical display
  252. is given of some of the output as it is being computed.
  253.  
  254. SCSORT.EXE    
  255. Stand-alone sorting of sound files
  256. Not tested on PC
  257.  
  258. SNDINFO.EXE    
  259. Reads the header of a sound file to identify type, duration etc
  260.     sndinfo soundfile
  261.  
  262. SCALE.EXE
  263.  As well as doing the same as SNDINFO this utility reports on the
  264. maximum amplitude, and can generate a new soundfile with the amplitude
  265. scaled by a floating point value.  It can also change formats.
  266.         scale [-flags] soundfile
  267. Legal flags are:
  268.     -o fnam sound output filename
  269.     -A      create an AIFF format output soundfile
  270.     -W      create a WAV format output soundfile
  271.     -h      no header on output soundfile
  272.     -c      8-bit signed_char sound samples
  273.     -a      alaw sound samples
  274.     -u      ulaw sound samples
  275.     -s      short_int sound samples
  276.     -l      long_int sound samples
  277.     -f      float sound samples
  278.     -F fpnum        amount to scale amplitude
  279.     -F fname        envelope file for scaling
  280.     -R      continually rewrite header while writing soundfile (WAV/AIFF)
  281.     -H      print a heartbeat character at each soundfile write
  282.     -N      notify (ring the bell) when score or miditrack is done
  283.  
  284. flag defaults: scale -s -otest -F 0.0
  285.  
  286. If scale is 0.0 then reports maximum possible scaling; otherwise scale
  287. and generate a new soundfile
  288.  
  289. MIXER.EXE
  290.  This utility can mix together a number of sound files (up to 20 at
  291. present) with different starting times and with scaling on each file.
  292.         mixer [-flags] soundfile [-flags] soundfile ...
  293. Legal flags are:
  294.     -o fnam sound output filename
  295.     -A      create an AIFF format output soundfile
  296.     -W      create a WAV format output soundfile
  297.     -h      no header on output soundfile
  298.     -c      8-bit signed_char sound samples
  299.     -a      alaw sound samples
  300.     -u      ulaw sound samples
  301.     -s      short_int sound samples
  302.     -l      long_int sound samples
  303.     -f      float sound samples
  304.     -F fpnum        amount to scale amplitude of next sound file
  305.     -F fname        an envelope file for scaling
  306.     -R      continually rewrite header while writing soundfile (WAV/AIFF)
  307.     -H      print a heartbeat character at each soundfile write
  308.     -N      notify (ring the bell) when score or miditrack is done
  309.     -S int    Sample at which to insert next sound file
  310.     -T fpnum    Time at which to insert next sound file
  311.     -1 -2 -3 -4     include named channel
  312.     -^ n m  include channel n and output as channel m
  313.  
  314. Defaults are: mixer -s -otest -F1.0 -S0
  315.  
  316. MIXER can also be used for some echo effects.
  317.  
  318. MKGRAPH.EXE
  319.   A small utility to creat envelope files for MIXER and SCALE.  Type ?
  320. when the program is running to get all the controls.
  321.  
  322.     mkgraph [-v] [envfile] [-o outname]
  323.  
  324. Default is mkgraph -o newgraph.  If an envfile is given it is loaded and can
  325. be editted.  envfile and outname can be the same.
  326.  
  327. ENVEXT.EXE
  328.   Given a sound file it creates an envelope file with an approximation to
  329. the envelope of the sound file.
  330.  
  331.     envext [-w time] [-o file] soundfile
  332.  
  333. Defaults are
  334.     envext -w 0.25 -o newenv
  335.  
  336. ------------------------------------------------------------------------
  337. Graphics:
  338. ========
  339.  
  340. The graphics is just for the display of waveforms.  The full
  341. specification of the graphics used says that it tries auto-determining
  342. the graphics on the machine.  This can sometimes fail, so it reads the
  343. environment variable FG_DISPLAY, and if set as below it uses that kind
  344. of graphics.
  345.     Value        Type
  346.     =====        ====
  347.     GCAHIRES    GCA 640 x 200 x 2
  348.     GCAMEDRES    GCA 320 x 200 x 4
  349.     EGACOLOR    EGA 640 x 200 x 16
  350.     EGAECD        Enhanced EGA 640 x 350 x 16
  351.     EGALOWRES
  352.     EGAMONO
  353.     EVGAHIRES    Everest EVGA board
  354.     HERCFULL    Hercules 2 pages 2 colour
  355.     HERCHALF    Hercules 1 page  2 colour
  356.     ORCHIDPROHIRES    VGA type
  357.     PARADISEHIRES    VGA type
  358.     TOSHIBA        Toshiba 3100 -- 640 x 400 x 2
  359.     TRIDENTHIRES    Trident 800 x 600 x 16
  360.     VEGAVGAHIRES    Video 7 vega VGA board
  361.     VESA6A        VESA mode 0x6a
  362.     VESA2        VESA mode 0x102
  363.     VGA11        IBM VGA mode 0x11
  364.     VGA12        IBM VGA mode 0x12
  365.     VGA13        IBM VGA mode 0x13
  366.     8514A        IBM 8514A display adapter
  367.  
  368. The csound_new version uses a different graphics system which seems
  369. more reliable.
  370.  
  371. Virtual Memory:
  372. ==============
  373.  
  374. The system uses virtual memory on 386/486.  The limits on memory size
  375. are the minimum of
  376.     1. Free disk space + code size
  377.     2. 256 times your extended memory
  378.     3. 3.5Gbytes (!)
  379.  
  380. You should set up the environment variable TMP or TEMP to the disk to
  381. use for swap space.  If this is not set it looks at disks C:, D:, ...
  382. looking for the largest free space.  That gives the limit of space.
  383. This is by the Flashtek Dos extender.  The csound_new version used the
  384. DOS4GW DOS extender, which I do not think supports virtual memory.
  385.  
  386. Reporting Bugs:
  387. ==============
  388.  
  389. Please mail (or possibly FAX) me reports on any bugs and shortcomings
  390. of the PC version.  I will endeavour to fix or assist, but it is only
  391. fair to warn you that this is not either of my jobs, and so it may be
  392. lower in priorities.  But I am interested in widening the availability
  393. of CSound.
  394.  
  395. The csound_new version is built with WatcomC v10.
  396.  
  397. 80286 - version
  398. ===============
  399.  
  400. The files in the 286 versions also need the program ZPM.EXE, which is
  401. provided, in your search path.
  402.  
  403. Windows
  404. =======
  405. The version in csound_win.zip is a Windows version with suitable dialog boxes.  
  406. It is built from the same sources.  It needs WindowsNT, Windows95 or the Win32s
  407. system.
  408.  
  409. John Fitch
  410. School of Mathematical Sciences        Codemist Ltd
  411. University of Bath            "Alta", Horsecombe Vale
  412. Bath BA2 7AY                Combe Down, Bath BA2 5QR
  413. United Kingdom                United Kingdom
  414. Tel: +44-1225-826820            Tel: +44-1225-837430
  415. FAX: +44-1225-826492            FAX: +44-1225-837430
  416.  
  417. ------------------------------------------------------------------------
  418.           Appendix 7 : Newest Csound opcodes
  419.                   by
  420.                Paris Smaragdis
  421.                Berklee College of Music
  422.  
  423.     This appendix describes recent additions to Csound.  These
  424. additions include a granular synthesis synthesizer, a new set of
  425. filters, a new variable delay, a multitap delay, a new reverb, an
  426. envelope follower, various noise generators, a power function
  427. generator and two gen routines, GEN20 and GEN21.
  428.  
  429.  
  430. 1) Granular synthesizer.
  431.  
  432. ar   grain   xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, igfn, iwfn, imgdur
  433.  
  434. Generates granular synthesis textures.
  435.  
  436. INITIALIZATION
  437.  
  438. igfn, igdur - igfn is the ftable number of the grain waveform.  This
  439. can be just a sine wave or a sampled sound of any length.  Each grain
  440. will start from a random table position and sustain for igdur seconds.
  441.  
  442. iwfn - Ftable number of the amplitude envelope used for the grains
  443. (see also GEN20).
  444.  
  445. imgdur - Maximum grain duration in seconds.  This the biggest value to
  446. be assigned on kgdur.
  447.  
  448. PERFORMANCE
  449.  
  450. xamp - Total amplitude of the sound.
  451.  
  452. xpitch  - Grain frequency in cps.
  453.  
  454. xdens - Density of grains measured in grains per second.  If this is
  455. constant then the output is synchronous granular synthesis, very
  456. similar to fof.  If xdens has a random element (like added noise),
  457. then the result is more like asynchronous granular synthesis.
  458.  
  459. kampoff - Maximum amplitude deviation from kamp.  This means that the
  460. maximum amplitude a grain can have is kamp + kampoff and the minimum
  461. is kamp.  If kampoff is set to zero then there is no random amplitude
  462. for each grain.
  463.  
  464. kpitchoff - Maximum pitch deviation from kpitch in cps.  Similar to
  465. kampoff.
  466.  
  467. kgdur - Grain duration in seconds.  The maximum value for this should
  468. be declared in imgdur.  If kgdur at any point becomes greater than
  469. imgdur, it will be truncated to imgdur.
  470.  
  471.  
  472. 2) Butterworth filters.
  473.  
  474.         ar    butterhp    asig, kfreq
  475.         ar    butterlp    asig, kfreq
  476.         ar    butterbp    asig, kfreq, kband
  477.         ar    butterbr    asig, kfreq, kband
  478.  
  479. Implementations of second-order hipass, lopass, bandpass and
  480. bandreject Butterworth filters.
  481.  
  482. PERFORMANCE
  483.  
  484. These new filters are butterworth second-order IIR filters.  They are
  485. slightly slower than the original filters in Csound, but they offer an
  486. almost flat passband and very good precision and stopband attenuation.
  487.  
  488. asig  - Input signal to be filtered.
  489.  
  490. kfreq  - Cuttoff or center frequency for each of the filters.
  491.  
  492. kband  - Bandwidth of the bandpass and bandreject filters.
  493.  
  494. EXAMPLE
  495.  
  496.     asig    rand        10000          ; White noise signal
  497.     alpf    butterlp    asig, 1000    ; cutting frequencies above1K
  498.     ahpf    butterhp    asig, 500     ; passing frequencies above 500Hz
  499.     abpf    butterbp    asig, 2000, 100 ; passing only 1950 to 2050 Hz
  500.     abrf    butterbr    asig, 4500, 200 ; cutting only 4400 to 4600 Hz
  501.  
  502.  
  503. 3) Vdelay
  504.  
  505.         ar    vdelay    asig, adel, imaxdel
  506.  
  507. This is an interpolating variable time delay, it is not very different
  508. from the existing implementation (deltapi), it is only easier to use.
  509.  
  510. INITIALIZATION
  511.  
  512. imaxdel - Maximum value of delay in samples.  If adel gains a value
  513. greater than imaxdel it is folded around imaxdel.  This should not
  514. happen.
  515.  
  516. PERFORMANCE
  517.  
  518. With this unit generator it is possible to do Doppler effects or
  519. chorusing and flanging.
  520.  
  521. asig  - Input signal.
  522.  
  523. adel - Current value of delay in samples.  Note that linear functions
  524. have no pitch change effects.  Fast changing values of adel will cause
  525. discontinuities in the waveform resulting noise.
  526.  
  527. Example
  528.  
  529.     f1 0 8192 10 1
  530.  
  531.     ims = 100            ; Maximum delay time in msec
  532.     a1    oscil    10000, 1737, 1    ; Make a signal
  533.     a2    oscil    ims/2, 1/p3, 1    ; Make an LFO
  534.     a2    =    a2 + ims/2    ; Offset the LFO so that it is positive
  535.     a3    vdelay    a1, a2, ims    ; Use the LFO to control delay time
  536.     out    a3
  537.  
  538. Two important points here.  First, the delay time must be always
  539. positive.  And second, even though the delay time can be controlled in
  540. k-rate, it is not advised to do so, since sudden time changes will
  541. create clicks.
  542.  
  543.  
  544. 4) Multitap delay
  545.  
  546.     ar    multitap    asig, itime1, igain1, itime2, igain2 . . . 
  547.  
  548. Multitap delay line implementation.
  549.  
  550. INITIALIZATION
  551.  
  552. The arguments itime and igain set the position and gain of each tap.
  553. The delay line is fed by asig.
  554.  
  555. Example:
  556.  
  557.     a1    oscil        1000, 100, 1
  558.     a2    multitap    a1, 1.2, .5, 1.4, .2
  559.     out    a2
  560.  
  561. This results in two delays, one with length of 1.2 and gain of .5, and
  562. one with length of 1.4 and gain of .2.
  563.  
  564.  
  565. 5) Reverb2
  566.  
  567.     ar    reverb2    asig, ktime, khdif
  568.  
  569. This is a reverberator consisting of 6 parallel comb-lowpass filters
  570. being fed into a series of 5 allpass filters.
  571.  
  572. PERFORMANCE
  573.  
  574. The input signal asig is reverberated for ktime seconds.  The
  575. parameter khdif controls the high frequency diffusion amount.  The
  576. values of khdif should be from 0 to 1.  If khdif is set to 0 the all
  577. the frequencies decay with the same speed.  If khdif is 1, high
  578. frequencies decay faster that lower ones.
  579.  
  580. Example:
  581.  
  582.     a1    oscil        10000, 100, 1
  583.     a2    reverb2    a1, 2.5, .3
  584.     out    a1 + a2 * .2
  585.  
  586. This results in a 2.5 sec reverb with faster high frequency
  587. attenuation.
  588.  
  589.  
  590. 6) Envelope follower
  591.  
  592.     kr    follow    asig,  idt
  593. Envelope follower unit generator.
  594.  
  595. INITIALIZATION
  596.  
  597. idt - This is the period, in seconds, that the average amplitude of
  598. asig is reported.  If the frequency of asig is low then idt must be
  599. large (more than half the period of asig )
  600.  
  601. PERFORMANCE
  602.  
  603. asig  - This is the signal from which to extract the envelope.
  604.  
  605. Example
  606.  
  607.     k1    line    0, p3, 30000    ; Make k1 a simple envelope
  608.     a1    oscil    k1, 1000, 1    ; Make a simple signal using k1
  609.     ak1    follow    a1, .02        ; ak1 is now like k1
  610.     a2    oscil    ak1, 1000, 1    ; Make a simple signal using ak1
  611.     out    a2            ; Both a1 and a2 are the same
  612.  
  613. To avoid zipper noise, by discontinuities produced from complex
  614. envelope tracking, a lowpass filter could be used, to smooth the
  615. estimated envelope.
  616.  
  617.  
  618. 7) Noise generators
  619.  
  620. All of the following opcodes operate in i-, k- and a-rate.  The output
  621. rate depends on the first letter of the opcode, a for a-rate, k for k-
  622. rate and i for i-rate.
  623.  
  624. xlinrand krange - Linear distribution random number generator.  krange
  625. is the range of the random numbers [0 - krange).  Outputs only
  626. positive numbers.
  627.  
  628. xtrirand krange  -  Same as above only ouputs both negative and 
  629. positive numbers.
  630.  
  631. xexprand krange - Exponential distribution random number generator.
  632. krange is the range of the random numbers [0 - krange).  Outputs only
  633. positive numbers.
  634.  
  635. xbexprnd krange - Same as above, only extends to negative numbers too
  636. with an exponential distribution.
  637.  
  638. xcauchy kalpha - Cauchy distribution random number generator.  kalpha
  639. controls the spread from zero (big kalpha => big spread).  Outputs
  640. both positive and negative numbers.
  641.  
  642. xpcauchy  kalpha  -  Same as above,  ouputs positive numbers only.
  643.  
  644. xpoisson klambda - Poisson distribution random number generator.
  645. klambda is the mean of the distribution.  Outputs only positive
  646. numbers.
  647.  
  648. xgauss krange - Gaussian distribution random number generator.  krange
  649. is the range of the random numbers (-krange - 0 - krange).  Outputs
  650. both positive and negative numbers.
  651.  
  652. xweibull ksigma, ktau - Weibull distribution random number generator.
  653. ksigma scales the spread of the distribution and ktau, if greater
  654. than one numbers near ksigma are favored, if smaller than one small
  655. values are favored and if t equals 1 the distribution is exponential.
  656. Outputs only positive numbers.
  657.  
  658. xbeta krange, kalpha, kbeta - Beta distribution random number
  659. generator.  krange is the range of the random numbers [0 - krange).  If
  660. kalpha is smaller than one, smaller values favor values near 0.  If
  661. kbeta is smaller than one, smaller values favor values near krange.
  662. If both kalpha and kbeta equal one we have uniform distribution.  If
  663. both kalpha and kbeta are greater than one we have a sort of gaussian
  664. distribution.  Outputs only positive numbers.
  665.  
  666.  
  667. For more detailed explanation of these distributions, see:
  668.  
  669. 1. C. Dodge - T.A. Jerse 1985. Computer music.  Schirmer books. 
  670. pp.265 - 286
  671.  
  672. 2. D. Lorrain. "A panoply of stochastic cannons".  In C. Roads, ed. 
  673. 1989. Music machine .  Cambridge, Massachusetts: MIT press, pp. 351 
  674. - 379.
  675.  
  676. Examples:
  677.  
  678.     a1  atrirand  32000    ; Audio noise with triangle distribution
  679.     k1  kcauchy  10000    ; Control noise with Cauchy dist.
  680.     i1  ibetarand  30000, .5, .5 ; i-time random value, beta dist.
  681.  
  682.  
  683. 8) Power functions
  684.  
  685.         ir    ipow    iarg, kpow
  686.         kr    kpow    karg, kpow, [inorm]
  687.         ar    apow    aarg, kpow, [inorm]
  688.  
  689. Computes xarg  to the power of kpow  and scales the result by inorm.
  690.  
  691. INITIALIZATION
  692.  
  693. inorm - The number to divide the result (default to 1).  This is
  694. especially useful if you are doing powers of a- or k- signals where
  695. samples out of range are extremely common!
  696.  
  697. iarg  - If you are using ipow this is the base.
  698.  
  699. PERFORMANCE
  700.  
  701. karg  - If you are using kpow this is the base.
  702.  
  703. aarg  - If you are using apow this is the base.
  704.  
  705. EXAMPLES:
  706.  
  707. 1.    i2t2    ipow        2,2        ; Computes 2^2.
  708.  
  709. 2.    kline    line        0, 1, 4
  710.     kexp    kpow    kline, 2, 4
  711.  
  712. This feeds a linear function to kpow and scales that to the line's
  713. peak value.  The output will be an exponential curve with the same
  714. range as the input line.
  715.  
  716. 3.    iamp ipow        10, 2
  717.     a1    oscil        iamp, 100, 1
  718.     a2    apow    a1, 2, iamp
  719.     out a2
  720.  
  721. This will output a sine with its negative part folded over the amp
  722. axis.  The peak value will be iamp = 10^2 = 100.
  723.  
  724.  
  725. 9) GEN20
  726.  
  727. This subroutine generates functions of different windows.  These
  728. windows are usually used for spectrum analysis or for grain envelopes.
  729.  
  730.     f #    time    size    20    window    max    opt
  731.  
  732. size  - number of points in the table.  Must be a power of 2 ( + 1).
  733.  
  734. window  - Type of window to generate.
  735.         1 - Hamming
  736.         2 - Hanning
  737.         3 - Bartlett ( triangle)
  738.         4 - Blackman ( 3 - term)
  739.         5 - Blackman - Harris ( 4 - term)
  740.         6 - Gaussian
  741.         7 - Kaiser
  742.         8 - Rectangle
  743.         9 - Sinc
  744.  
  745. max - For negative p4 this will be the absolute value at window peak
  746. point.  If p4 is positive or p4 is negative and p6 is missing the
  747. table will be post-rescaled to a maximum value of 1.
  748.  
  749. opt - Optional argument required by the Kaiser window.
  750.  
  751. Examples:
  752.  
  753.     f    1    0    1024    20    5
  754. This creates a function which contains a 4 - term Blackman - Harris 
  755. window with maximum value of 1.
  756.  
  757.     f    1    0    1024    -20    2    456
  758. This creates a function that contains a Hanning window with a maximum 
  759. value of 456.
  760.  
  761.     f    1    0    1024    -20    1
  762. This creates a function that contains a Hamming window with a maximum 
  763. value of 1.
  764.  
  765.     f    1    0    1024    20    7    1    2
  766. This creates a function that contains a Kaiser window with a maximum 
  767. value of 1.  The extra argument specifies how `open' the window is, for 
  768. example a value of 0 results in a rectangular window and a value of 10 in 
  769. a Hamming like window.
  770.  
  771.  
  772. 10) GEN21
  773.  
  774. This generates tables of different random distributions. (see also noise 
  775. generators, above).
  776.  
  777.     f #    time    size    21    type    lvl arg1 arg2
  778.  
  779. Time and size are the usual Gen function arguments.  Type defines the 
  780. distribution to be used.
  781.  
  782.     1   - Uniform
  783.     2   - Linear
  784.     3   - Triangular
  785.     4   - Exponential
  786.     5   - Biexponential
  787.     6   - Gaussian
  788.     7   - Cauchy
  789.     8   - Positive Cauchy
  790.     9   - Beta
  791.     10  - Weibull
  792.     11  - Poison
  793.  
  794. Of all these cases only 9 (Beta) and 10 (Weibull) need extra
  795. arguments.  Beta needs two arguments and Weibull one.
  796.  
  797. Examples:
  798.  
  799.     f1 0 1024 21 1        ; Uniform (white noise)
  800.     f1 0 1024 21 6        ; Gaussian
  801.     f1 0 1024 21 9 1 1 2    ; Beta (note that level precedes arguments)
  802.     f1 0 1024 21 10 1 2       ; Weibull
  803.  
  804.  
  805.     All of the above additions were designed by the author between
  806. May and December 1994, under the supervision of Dr. Richard Boulanger.
  807.  
  808. This appendix was written on 20 December 1994 by
  809. Paris Smaragdis, Berklee College of Music.
  810. Internet:  psmaragdis@aol.com
  811.  
  812. ------------------------------------------------------------------------
  813. AUTHOR: Greg Sullivan, sullivan@aussie.enet.dec.com
  814.         (Based on algorithm given in 'Elements Of Computer Music', by
  815.         F. Richard Moore.
  816.  
  817. CVANAL - Impulse Response Fourier Analysis for CONVOLVE operator
  818.  
  819. csound -U cvanal [flags] infilename outfilename
  820.  
  821. cvanal converts a soundfile into a single Fourier transform frame. The 
  822. output file can be used by the CONVOLVE operator to perform Fast
  823. Convolution between an input signal and the original impulse response.
  824. Analysis is conditioned by the flags below. A space is optional between 
  825. the flag and its argument.
  826.  
  827. -s<rate>        sampling rate of the audio input file. This will over-ride
  828.                 the srate of the soundfile header, which otherwise applies.
  829.                 If neither is present, the default is 10000.
  830.  
  831. -c<channel>     channel number sought. If omitted, the default is to  
  832.                 process all channels. If a value is given, only the
  833.                 selected channel will be processed.
  834.                 
  835. -b<begin>       beginning time (in seconds) of the audio segment to be
  836.                 analysed. The default is 0.0
  837.                 
  838. -d<duration>    duration (in seconds) of the audio segment to be analysed.
  839.                 The default of 0.0 means to the end of the file.
  840.                 
  841. EXAMPLE
  842.                 cvanal asound cvfile
  843. will analyse the soundfile "asound" to produce the file "cvfile" for the
  844. use with CONVOLVE.
  845.  
  846. HINT: To use data that is not already contained in a soundfile, 
  847.       a soundfile converter that accepts text files may be used to
  848.       create a standard audio file. E.g, the .DAT format for SOX.
  849.       This is useful for implementing FIR filters.
  850.  
  851. FILES
  852. The output file has a special CONVOLVE header, containing details of the
  853. source audio file. The analysis data is stored as 'float', in rectangular
  854. (real/imaginary) form. 
  855.  
  856. ***NOTE***: The analysis file is NOT system independent! Ensure that
  857.             the original impulse recording/data is retained. If/when required,
  858.             the analysis file can be recreated.
  859.  
  860. AUTHOR: Greg Sullivan, sullivan@aussie.enet.dec.com
  861.         (Based on algorithm given in 'Elements Of Computer Music', by
  862.         F. Richard Moore.
  863.         
  864. ------------------------------------------------------------------------------
  865. CONVOLVE unit generator:
  866.  
  867. ar1[,ar2[,ar3[,ar4]]]  convolve  ain,ifilcod,channel
  868.  
  869. Output is the convolution of signal ain and the impulse response
  870. contained in ifilcod.  Note that it is considerably more efficient to
  871. use one instance of the operator when processing a mono input to
  872. create stereo, or quad, outputs.
  873.  
  874. INITIALISATION
  875.  
  876. ifilcod - integer or character-string denoting an impulse response data
  877. file. An integer denotes the suffix of a file convolve.m; a character
  878. string (in double quotes) gives a filename, optionally a full pathname. 
  879. If not a fullpath, the file is sought first in the the current directory,
  880. then in the one given by the environment variable SADIR (if defined).
  881. The data file contains the Fourier transform of an impulse response.
  882. Memory usage depends on the size of the data file, which is read and
  883. held entirely in memory during computation, but which is shared
  884. by multiple calls.
  885.  
  886. channel - integer denoting the channel of the impulse response to be used
  887.           for the convolution. 0 (the default) means to use all channels.
  888.           For multi-channel output, the number of channels in the impulse 
  889.           response must match the number of output signals.
  890.  
  891. PERFORMANCE
  892.  
  893. CONVOLVE implements Fast Convolution. The output of this
  894. operator is delayed with respect to the input. The following
  895. formulas should be used to calculate the delay:
  896.  
  897. For (1/kr) <= IRdur:
  898.  
  899. Delay = ceil(IRdur * kr) / kr
  900.  
  901.  
  902. For (1/kr) > IRdur: 
  903.  
  904. Delay = IRdur * ceil(1/(kr*IRdur))
  905.  
  906. Where:
  907.  
  908. kr  = Csound control rate
  909. IRdur = duration, in seconds, of impulse response
  910. ceil(n) = smallest integer not smaller than n
  911.  
  912. One should be careful to also take into account the initial delay,
  913. if any, of the impulse response. For example, if an impulse response
  914. is created from a recording, the soundfile may not have the initial
  915. delay included. Thus, one should either ensure that the soundfile
  916. has the correct amount of zero padding at the start, or, preferably,
  917. compensate for this delay in the orchestra. (the latter method
  918. is more efficient). To compensate for the delay in the 
  919. orchestra, _subtract_ the initial delay from the result
  920. calculated using the above formula(s), when calculating the required
  921. delay to introduce into the 'dry' audio path. 
  922.  
  923. For typical applications, such as reverb, the delay will be in 
  924. the order of 0.5 to 1.5 seconds, or even longer. This renders
  925. the current implementation unsuitable for real time applications.
  926. It could conceivably be used for real time filtering however, if 
  927. the number of taps is is small enough.
  928.  
  929. Example:
  930.  
  931. - Create frequency domain impulse response file:
  932.   c:\> csound -Ucvanal l1_44.wav l1_44.cv
  933.  
  934. - Determine duration of impulse response. For high accuracy,
  935.   determine the number of sample frames in the impulse 
  936.   response soundfile, and then compute the duration with:
  937.  
  938.   duration = (sample frames)/(sample rate of soundfile)
  939.  
  940.   This is due to the fact that the SNDINFO utility only
  941.   reports the duration to the nearest 10ms. If you have a 
  942.   utility that reports the duration to the required accuracy,
  943.   then you can simply use the reported value directly.
  944.  
  945.   c:\> sndinfo l1_44.wav 
  946.   length = 60822 samples, sample rate = 44100
  947.  
  948.   Duration = 60822/44100 = 1.379s.
  949.  
  950. - Determine initial delay, if any, of impulse response. 
  951.   If the impulse response has not had the initial 
  952.   delay removed, then you can skip this step. If it has
  953.   been removed, then the only way you will know the initial
  954.   delay is if the information has been provided separately.
  955.   For this example, let's assume that the initial delay is
  956.   60ms. (0.06s)
  957.  
  958. - Determine the required delay to apply to the dry signal, to align
  959.   it with the convolved signal:
  960.   
  961.   If kr = 441:
  962.  
  963.   1/kr = 0.0023, which is <= IRdur (1.379s), so:
  964.  
  965.   Delay1 = ceil(IRdur * kr) / kr
  966.         = ceil(608.14) / 441
  967.         = 609/441
  968.         = 1.38s
  969.         
  970.   Accounting for the initial delay:
  971.   delay2 = 0.06s
  972.   Total delay = delay1 - delay2
  973.               = 1.38 - 0.06
  974.               = 1.32s
  975.  
  976. - Create .orc file, e.g:
  977. ----CUT----
  978. ; Simple demonstration of CONVOLVE operator, to apply reverb.
  979.  
  980.         sr = 44100
  981.         kr = 441
  982.         ksmps = 100
  983.         nchnls = 2
  984.  
  985.         instr   1
  986.  
  987. imix = 0.22 ; Wet/dry mix. Vary as desired.
  988.             ; NB: 'Small' reverbs often require a much higher
  989.             ; percentage of wet signal to sound interesting. 'Large'
  990.             ; reverbs seem require less. Experiment! The wet/dry mix is
  991.             ; very important - a small change can make a large difference. 
  992. ivol = 0.9  ; Overall volume level of reverb. May need to adjust 
  993.             ; when wet/dry mix is changed, to avoid clipping.
  994. idel = 1.32 ; Required delay to align dry audio with output of convolve.
  995.             ; This can be automatically calculated within the orc file, 
  996.             ; if desired.
  997.  
  998. adry          soundin "anechoic.wav"      ; input (dry) audio
  999. awet1,awet2   convolve adry,"l1_44.cv"    ; stereo convolved (wet) audio
  1000. adrydel       delay   (1-imix)*adry,idel  ; Delay dry signal, to align it with 
  1001.                                           ; convolved signal. Apply level 
  1002.                                           ; adjustment here too.
  1003.  
  1004.              outs    ivol*(adrydel+imix*awet1),ivol*(adrydel+imix*awet2) 
  1005.                                           ; Mix wet & dry signals, and output
  1006.         endin
  1007. ---CUT----
  1008.  
  1009. The granule unit generator (Allan Lee) is more complex than grain
  1010. (above), but does add new possibilities.  This is a shorten manual,
  1011. without the pictures,
  1012.  
  1013. NAME
  1014. granule - Granular synthesis unit generator for Csound.
  1015.  
  1016. SYNOPSIS
  1017.  granule xamp ivoice iratio imode ithd ifn ipshift igskip \
  1018.      igskip_os ilength kgap igap_os kgsize igsize_os iatt idec [iseed] \
  1019.      [ipitch1] [ipitch2] [ipitch3] [ipitch4] [ifnenv]
  1020.  
  1021. DESCRIPTION
  1022. granule is a Csound unit generator which employs a wavetable as input
  1023. to produce granularly synthesized audio output.  Wavetable data may be
  1024. generated by any of the gen subroutines such as gen01 which reads an
  1025. audio data file into a wavetable.  This enable a sampled sound to be
  1026. used as the source for the grains.  Up to 128 voices are implemented
  1027. internally.The maximum number of voices can be increased by redefining
  1028. the variable MAXVOICE in the grain4.h file.  granule has a build-in
  1029. random number generator to handle all the random offset parameters.
  1030. Thresholding is also implemented to scan the source function table at
  1031. initialization stage.  This facilitates features such as skipping
  1032. silence passage between sentences.
  1033.  
  1034. The characteristics of the synthesis are controlled by 22
  1035. parameters. xamp is the amplitude of the output and it can be either
  1036. audio rate or control rate variable. All parameters with prefix i must
  1037. be valid at Init time, parameters with prefix k can be either control
  1038. or Init values.
  1039.  
  1040. SUMMARY OF PARAMETERS
  1041.  
  1042. xamp - amplitude.
  1043.  
  1044. ivoice - number of voices.
  1045.  
  1046. iratio - ratio of the speed of the gskip pointer relative to output
  1047. audio sample rate. eg. 0.5 will be half speed.
  1048.  
  1049. imode - +1 grain pointer move forward (same direction of the gskip
  1050. pointer), -1 backward (oppose direction to the gskip pointer) or 0 for
  1051. random.
  1052.  
  1053. ithd - threshold, if the sampled signal in the wavetable is smaller
  1054. then ithd, it will be skipped.
  1055.  
  1056. ifn - function table number of sound source.
  1057.  
  1058. ipshift - pitch shift control. If ipshift is 0, pitch will be set
  1059. randomly up and down an octave. If ipshift is 1, 2, 3 or 4, up to four
  1060. different pitches can be set amount the number of voices definded in
  1061. ivoice. The optional parameters ipitch1, ipitch2, ipitch3 and ipitch4
  1062. are used to quantify the pitch shifts.
  1063.  
  1064. igskip - initial skip from the beginning of the function table in sec.
  1065.  
  1066. igskip_os - gskip pointer random offset in sec, 0 will be no offset.
  1067.  
  1068. ilength - length of the table to be used starting from igskip in sec.
  1069.  
  1070. kgap - gap between grains in sec.
  1071.  
  1072. igap_os - gap random offset in % of the gap size, 0 gives no offset.
  1073.  
  1074. kgsize - grain size in sec.
  1075.  
  1076. igsize_os - grain size random offset in % of grain size, 0 gives no
  1077. offset.
  1078.  
  1079. iatt - attack of the grain envelope in % of grain size.
  1080.  
  1081. idec - decade of the grain envelope in % of grain size.
  1082.  
  1083. [iseed] - optional, seed for the random number generator, default is
  1084. 0.5.
  1085.  
  1086. [ipitch1], [ipitch2], [ipitch3], [ipitch4] - optional, pitch shift
  1087. parameter, used when ipshift is set to 1, 2, 3 or 4. Time scaling
  1088. technique is used in pitch shift with linear interpolation between
  1089. data points. Default value is 1, the original pitch.
  1090.  
  1091. EXAMPLE
  1092. Listing of orchestra file.
  1093. sr = 44100
  1094. kr = 4410
  1095. ksmps = 10
  1096. nchnls = 2
  1097.  
  1098. instr 1
  1099.  
  1100. ;
  1101. k1 linseg 0,0.5,1,(p3-p2-1),1,0.5,0
  1102. a1 granule p4*k1,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,
  1103.     p20,p21,p22,p23,p24
  1104. a2 granule p4*k1,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,
  1105.     p20+0.17,p21,p22,p23,p24
  1106.  
  1107. outs a1,a2 
  1108. endin
  1109.  
  1110. Listing of score file.
  1111.  
  1112. ; f statement read sound file sine.aiff in the SFDIR directory into f-table 1
  1113. f 1 0 524288 1 "sine.aiff" 1 0
  1114. i1 0 10 2000 64 0.5 0 0 1 4 0 0.005 10 0.01 50 0.02 50 30 30 0.39 1 1.42 0.29 2
  1115. e
  1116.  
  1117. The above example reads a sound file called sine.aiff into wavetable
  1118. number 1 with 524,288 samples. It generates 10 seconds of stereo audio
  1119. output using the wavetable. In the orchestra file, all parameters
  1120. required to control the synthesis are passed from the score file. A
  1121. linseg function generator is used to generate an envelope with 0.5
  1122. second of linear attack and decade. Stereo effect is generated by
  1123. using different seeds for the two granule function calls. In the
  1124. example, 0.17 is added to p20 before passing into the second granule
  1125. call to ensure that all of the random offset events are different from
  1126. the first one.
  1127.  
  1128. In the score file, the parameters are interpreted as:
  1129. p5 (ivoice) the number of voices is set to 64
  1130. p6 (iratio) is set to 0.5, it scan the wavetable at half of the speed
  1131.    of the audio output rate
  1132. p7 (imode) is set to 0, the grain pointer only move forward
  1133. p8 (ithd) is set to 0, skipping the thresholding process
  1134. p9 (ifn) is set to 1, function table number 1 is used
  1135. p10 (ipshift) is set to 4, four different pitches are going to be
  1136.     generated
  1137. p11 (igskip) is set to 0 and p12 (igskip_os) is set to 0.005, no
  1138.     skipping into the wavetable and a 5 mSec random offset is used
  1139. p13 (ilength) is set to 10, 10 seconds of the wavetable is to be used
  1140. p14 (kgap) is set to 0.01 and p15 (igap_os) is set to 50, 10 mSec gap
  1141.     with 50% random offset is to be used
  1142. p16 (kgsize) is set to 0.02 and p17 (igsize_os) is set to 50, 20 mSec
  1143.     grain with 50% random offset is used
  1144. p18 (iatt) and p19 (idec) are set to 30, 30% of linear attack and
  1145.     decade is applied to the grain
  1146. p20 (iseed) seed for the random number generator is set to 0.39
  1147. p21 - p 24 are pitches set to 1 which is the original pitch, 1.42
  1148.     which is a 5th up, 0.29 which is a 7th down and finally 2 which is
  1149.     an octave up.
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189. Csound is developed by Barry L. Vercoe at the Experimental Music Studio, Media Laboratory, M.I.T., Cambridge, Massachusetts.
  1190.  
  1191. ------------------------------------------------------------------------
  1192. ATARI Csound
  1193. ============
  1194.  
  1195. The files are
  1196.                   csound.ttp
  1197.                  extract.ttp
  1198.                   hetro.ttp
  1199.                   lpanal.ttp
  1200.                   pvanal.ttp
  1201.                   scale.ttp
  1202.                   scsort.ttp
  1203.                  sndinfo.ttp
  1204.  I do not have any of the standard compression programs for the Atari
  1205. at present, so these are raw binary files.
  1206.  This is an initial port of 3.14, with no support for graphics or
  1207. MIDI.  The code is not yet optimised, and has only been subjected to
  1208. limited testing.  If there is sufficient interest I will optimise and
  1209. extend, but my Atari is currently failing to boot.  The code does not
  1210. assume the existence of a floating point co- processor, and is built
  1211. for the 68000 (lowest common denominator).  Please report any bugs or
  1212. comments to me.  I am using LatticeC and the sources and scripts are
  1213. available from me, assuming I can read the Atari disk...
  1214.  
  1215. There is a better-supported commercially available Atari Csound from CDP.
  1216. They also have a large suite of music synthesis programs on Atari and PC.
  1217. Contact Tom Endrich:
  1218.     tendrich@cix.compulink.co.uk
  1219.     Tel: +44-1904-613299
  1220.     Composers' Desktop Project
  1221.     11 Kilburn Road
  1222.     York YO1 4DF
  1223.     England
  1224.  
  1225.