@DATABASE sfx.guide
@AUTHOR Darren Shaw
@WORDWRAP
@REMARK This file has been made so that it can still be read easily
@REMARK when viewing as an ascii file, but works best when used with
@REMARK a guide reader

@NODE Main "sfx © Absolute Reality 1996-1998"

                               ##########
                             ############
                           ######  ######
                           ########
        ######    ##         ########
      ##############           ######        ###########      ########
    ##################     ##############    ###########      ########
    ########        ##         ######            #######      ######
    ############               ######               ######  ######
      ############             ######                 ##########
            ##########         ######                 ########
              ##########       ######               ############
  ####          ########       ######            #################
    ####################       ######        #########        ########
    ##################       ##########    ###########        ########
        ##########           ##########      #######          ######v1.2
              - - - A b s o l u t e   R e a l i t y - - -

                                                                           
sfx is (if you hadn't guessed from the name) a sample fx program.
Nothing new in that you think, and you'd be right, well sort of.  You see,
sfx has features that you'll find hard to find in any other sample fx
program.

I wrote this program because I had all these ideas of how I wanted my
samples to sound, but was having trouble creating using the software that I
had available, so i decided to write my own.

      @{" The Operators                   " LINK node_operators}
      @{" What Keys Do What               " LINK node_keys}
      @{" The Repeater/Chopper section    " LINK node_rep.chop}
      @{" The Inc/Dec Filter/Gate/Distort " LINK node_dec.gate}
      @{" The Scratch section             " LINK node_scratch}
      @{" Known Bugs                      " LINK node_bugs}
      @{" The Sample Display Window       " LINK node_samp.disp}
      @{" Technical Stuff                 " LINK node_tech.stuff}
      @{" About me and stuff              " LINK node_me}
      @{" History                         " LINK node_history}
      @{" Installation                    " LINK node_install}
      @{" Copyrights                      " LINK node_copyrights}
      @{" File Formats and Stuff          " LINK node_iff}

@ENDNODE

@NODE node_operators "sfx - Operators"

sfx offers...

      Name           |        Description
 --------------------+----------------------------------------------------
 01 - Delay          |  Mix the sample with itself starting at a user
                     |  specified point.
                     |  INPUT: Distance of the delay
 --------------------+----------------------------------------------------
 02 - Filter         |  Makes the sample `dirtier'.
                     |  INPUT: The `filter' value
 --------------------+----------------------------------------------------
 03 - Gating         |  Adds a series of gaps to the sample, with the
                     |  size of the gap being defined by the user.
                     |  The size of the data and the gap are the same.
                     |  INPUT: The size of the gaps
 --------------------+----------------------------------------------------
 04 - Split Gate     |  Adds a series of gaps to the sample, with the
                     |  user able to select the size of data between
                     |  gaps, and the size of the gaps.
                     |  INPUT: 1) The size of the data
                     |         2) The size of the gap
---------------------+----------------------------------------------------
 05 - Reverser       |  Reverses a section of the samples directly after
                     |  the end of the section.
                     |  INPUT: The distance that the reverse acts on
 --------------------+----------------------------------------------------
 06 - X-Flips        |  Reverses the sample section by section.
                     |  An imput of 0 flips the whole sample.
                     |  INPUT: The size of the reversed sections
 --------------------+----------------------------------------------------
 07 - Distort        |  This flattens the peaks to `distort' the sample.
                     |  INPUT: The amount of `distortion'
 --------------------+----------------------------------------------------
 08 - Back Echo      |  This mixes the sample with a reversed copy of
                     |  itself.
                     |  INPUT: The distance of the delay
 --------------------+----------------------------------------------------
 09 - Repeater       |  This repeats the sample section by section.
                     |  INPUT: 1) The number of repeats
                     |         2) The size of the repeats
                     |  @{" - Repeater/Chopper " LINK node_rep.chop}
 --------------------+----------------------------------------------------
 10 - Dec Gate       |  This does a gate on the sample where the size of
                     |  gap reduces over a specfied distance by a
                     |  specified ammount.
                     |  INPUT: 1) The start size of the gate
                     |         2) The distance before the gate decreases
                     |         3) The amount the gate decreases by
                     |  @{" - Dec Gate " LINK node_dec.gate}
 --------------------+----------------------------------------------------
 11 - Dec Distort    |  This does a distort on the sample where the size
                     |  of distort reduces over a specfied distance by a
                     |  specified ammount.
                     |  INPUT: 1) The start size of the distortion
                     |         2) The distance before the distortion
                     |            decreases
                     |         3) The amount the distortion decreases by
                     |  @{" - Dec Distort " LINK node_dec.gate}
 --------------------+----------------------------------------------------
 12 - Inc Distort    |  This does a distort on the sample where the size
                     |  of distort increases over a specfied distance by
                     |  a specified ammount.
                     |  INPUT: 1) The start size of the distortion
                     |         2) The distance before the distortion
                     |            increases
                     |         3) The amount the distortion increases by
                     |  @{" - Inc Distort " LINK node_dec.gate}
 --------------------+----------------------------------------------------
 13 - Mad Flanger    |  This mixes the sample with itself, starting at
                     |  the begining, with the user defining the flange.
                     |  INPUT: 1) The starting delay
                     |         2) The amount to go back by
                     |         3) The amount to decrease the delay by
 --------------------+----------------------------------------------------
 14 - Crackler       |  This adds spikes to the sample at a user specified
                     |  distance.
                     |  INPUT: The distance between spikes
 --------------------+----------------------------------------------------
 15 - Log Feedback   |  This repeats certain values by a user specified
                     |  ammount.
                     |  INPUT: The amount of repeats
 --------------------+----------------------------------------------------
 16 - Chopper        |  This chops out sections of the sample.
                     |  INPUT: 1) The number of chops
                     |         2) The size of the chops
                     |  @{" - Repeater/Chopper " LINK node_rep.chop }
                     |  @{" - Known Bugs       " LINK node_bugs}
 --------------------+----------------------------------------------------
 17 - AND            |  This mixes the sample with itself using an AND
                     |  operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
 --------------------+----------------------------------------------------
 18 - OR             |  This mixes the sample with itself using an OR
                     |  operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
 --------------------+----------------------------------------------------
 19 - EOR            |  This mixes the sample with itself using an EOR
                     |  (Exclusive OR) operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
 --------------------+----------------------------------------------------
 20 - Addty          |  This mixes the sample with itself using an ADD
                     |  operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
 --------------------+----------------------------------------------------
 21 - Sub            |  This mixes the sample with itself using a SUB
                     |  operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
 --------------------+----------------------------------------------------
 22 - Mad Analog     |  This mixes the sample with itself using a mixture
                     |  of operators.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
 --------------------+----------------------------------------------------
 23 - Big AND        |  This mixes the sample with itself using an ADD
                     |  operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
                     |         3) The amount to change the speed by
 --------------------+----------------------------------------------------
 24 - Big OR         |  This mixes the sample with itself using an OP
                     |  operator.
                     |  INPUT: 1) The start offset
                     |         2) The speed (1 is same,2 is twice as fast)
                     |         3) The amount to change the speed by
 --------------------+----------------------------------------------------
 25 - Noise Gate     |  This only allows bytes through who are over a
                     |  specified threshold.
                     |  INPUT: The threshold
 --------------------+----------------------------------------------------
 26 - Filter Up      |  This does a filter on the sample where the size
                     |  of filter increases over a specfied distance by
                     |  a specified ammount.
                     |  INPUT: 1) The start value of the filter
                     |         2) The distance before the filter increases
                     |         3) The amount to increase the filter by
                     |  @{" - Filter Up " LINK node_dec.gate}
 --------------------+----------------------------------------------------
 27 - Filter Down    |  This does a filter on the sample where the size
                     |  of filter reduces over a specfied distance by
                     |  a specified ammount.
                     |  INPUT: 1) The start value of the filter
                     |         2) The distance before the filter decreases
                     |         3) The amount to decrease the filter by
                     |  @{" - Filter Down" LINK node_dec.gate}
 --------------------+----------------------------------------------------
 28 - Flipper        |  This flips (inverts) bytes at a user specified
                     |  distance.
                     |  INPUT: The distance between inversions
 --------------------+----------------------------------------------------
 29 - Supper Flip    |  This is a variation of the Flipper.
                     |  INPUT: The distance between inversions
 --------------------+----------------------------------------------------
 30 - Killer Flip    |  This is a variation of the Flipper.
                     |  INPUT: The distance between inversions
 --------------------+----------------------------------------------------
 31 - Repeat Flip    |  This is a variation of the Flipper.
                     |  INPUT: The distance between inversions
 --------------------+----------------------------------------------------
 32 - Rawkus 1       |  This uses analogue operators to add an element of
                     |  harshness to the sample.
                     |  INPUT: None
 --------------------+----------------------------------------------------
 33 - Rawkus 2       |  This uses analogue operators to add an element of
                     |  harshness to the sample.
                     |  INPUT: None
 --------------------+----------------------------------------------------
 34 - Rawkus 3       |  This uses analogue operators to add an element of
                     |  harshness to the sample.
                     |  INPUT: None
 --------------------+----------------------------------------------------
 35 - Rawkus 4       |  This uses analogue operators to add an element of
                     |  harshness to the sample.
                     |  INPUT: How much slope to apply to the sample
 --------------------+----------------------------------------------------
 36 - special        |  21 analogue style operators (still beta).
                     |  Caution, may cause sfx to crash.
 --------------------+----------------------------------------------------
 37 - Scratch 1      |  Adds DJ style scratches to your samples. This
                     |  DOESN'T add space to the sample for the scratch.
                     |  INPUT: 1) The size of the scratch
                     |         2) The start of the scratch
                     |         3) The speed of the scratch
                     |  @{" - Scratch " LINK node_scratch}
 --------------------+----------------------------------------------------
 38 - Scratch 2      |  Adds DJ style scratches to your samples. This
                     |  DOES add space to the sample for the scratch.
                     |  INPUT: 1) The size of the scratch
                     |         2) The start of the scratch
                     |         3) The speed of the scratch
                     |  @{" - Scratch " LINK node_scratch}
 --------------------+----------------------------------------------------
 39 - CompLim 1      |  A kind of Compressor + Limitor, with a hint of
                     |  of high pass filter thrown in for good measure.
                     |  It actually make the new sample from the
                     |  difference between bytes.
                     |  INPUT: None
 --------------------+----------------------------------------------------
 40 - Smoother 1     |  This smooths the sample by taking an average from
                     |  the values one byte before before and after.
                     |  INPUT: None
 --------------------+----------------------------------------------------
 41 - Eeko 1         |  This is an echo, that adds just the one echo.
                     |  More of a reverb than an echo.  This doesn't add
                     |  any space for the echo.
                     |  INPUT: The size of the delay
 --------------------+----------------------------------------------------
 42 - Eeko 2         |  This is an echo, that adds just the one echo.
                     |  More of a reverb than an echo.  This does add
                     |  space for the echo.
                     |  INPUT: The size of the delay
 --------------------+----------------------------------------------------
 43 - Smoother 2     |  This smooths the sample by taking an average from
                     |  the values a user set distance before and after.
                     |  INPUT: The distance to go forward and back
 --------------------+----------------------------------------------------
 44 - Sine Gate      |  Like the other gating functions only with this one
                     |  this size of the gate is defined by a sinewave.
                     |  INPUT: 1) The amplitude of the wave
                     |         2) The distance between changes
                     |         3) The speed of change
 --------------------+----------------------------------------------------
 45 - Sine Fase 1    |  This is similar to the `Mad Flanger' but the size
                     |  of the flange is defined by a sinewave.
                     |  INPUT: 1) The starting delay
                     |         2) The amplitude of the wave
                     |         3) The speed of change
 --------------------+----------------------------------------------------
 46 - Sine Fase 2    |  A derivation of Sine Fase 1.
                     |  INPUT: 1) The starting delay
                     |         2) The amplitude of the wave
                     |         3) The speed of change
 --------------------+----------------------------------------------------
 47 - LFO Add 1      |  Adds the sample with a sinewave from the LFO.
                     |  INPUT: 1) The distance before the next value
                     |         2) The amplitude of the wave
                     |         3) The speed of change in the wave
                     |         4) The value to change the distance by
 --------------------+----------------------------------------------------
 48 - LFO Add 2      |  Adds the sample with a sinewave from the LFO.
                     |  INPUT: 1) The distance before the next value
                     |         2) The amplitude of the wave
                     |         3) The speed of change in the wave
                     |         4) The value to change the distance by
 --------------------+----------------------------------------------------
 49 - LFO Sub 1      |  Subs the sample with a sinewave from the LFO.
                     |  INPUT: 1) The distance before the next value
                     |         2) The amplitude of the wave
                     |         3) The speed of change in the wave
                     |         4) The value to change the distance by
 --------------------+----------------------------------------------------
 50 - LFO Sub 2      |  Subs the sample with a sinewave from the LFO.
                     |  INPUT: 1) The distance before the next value
                     |         2) The amplitude of the wave
                     |         3) The speed of change in the wave
                     |         4) The value to change the distance by
 --------------------+----------------------------------------------------
 51 - LFO Amp 1      |  Perform Amplitude Modulation using LFO.
                     |  INPUT: 1) The distance before the next value
                     |         2) The amplitude of the wave
                     |         3) The speed of change in the wave
                     |         4) The value to change the distance by
 --------------------+----------------------------------------------------
 52 - CompLim 2      |  This is more of a High Pass filter than CompLim 1.
                     |  INPUT: None
 --------------------+----------------------------------------------------
 53 - Degrade        |  This degrades the sample, by changing the number of
                     |  bits of information are used to describe the sample
                     |  INPUT: How much to degrade by
 --------------------+----------------------------------------------------
 54 - OverDrive      |  This boosts the sample and clips it in the same
                     |  kind of way as valve amps do.
                     |  INPUT: 1) How much to scale the sample by
                     |         2) The distortion level
                     |         3) How fast the cycles of the valve are
 --------------------+----------------------------------------------------
 55 - Radio          |  Produces an effect similar to a badly tuned radio
                     |  INPUT: None
 --------------------+----------------------------------------------------
 56 - Sample+Hold    |  Repeats a value from one sample point to the next
                     |  sample point.  Produces an effect like reducing the
                     |  sample rate.
                     |  INPUT: The gap between sample points.
 --------------------+----------------------------------------------------

@ENDNODE

@NODE node_keys "sfx - Keyboard"

There are a couple of shortcuts that you can use in sfx (in fact you need
never touch the mouse to use all but one operator in sfx...).

Key      |  Where?                     |  Will do?
---------+-----------------------------+----------------------------------
[ESC]    |  Sample display windows     |  Close the window
         |  The `Done...' window       |  Abort the current operator
         |  The Log distort window     |  Close window and use values
         |  Reqtool requesters         |  Choose the neg (left) choice
         |  About window               |  Close and exit
         |  Choose Operator            |  Quit
---------+-----------------------------+----------------------------------
[<-|]    |  Sample display windows     |  Play the sample at current rate
         |  Reqtools requesters        |  Choose the pos (right) choice
         |  Inputs                     |  Close window and continue
---------+-----------------------------+----------------------------------
[UP]     |  Sample display windows     |  Play sample +1000Hz
         |  Inputs                     |  Recall previous data
---------+-----------------------------+----------------------------------
[DOWN]   |  Sample display windows     |  Play sample -100Hz
         |  Inputs                     |  Clear current data
---------+-----------------------------+----------------------------------
[LEFT]   |  Sample display windows     |  Play sample -5000Hz
---------+-----------------------------+----------------------------------
[RIGHT]  |  Sample display windows     |  Play sample +5000Hz
---------+-----------------------------+----------------------------------
[DEL]    |  Main sample display        |  Open graphical display 1
         |  Graphical display 1        |  Re-do display
---------+-----------------------------+----------------------------------
[HELP]   |  Main sample display        |  Open graphical display 2
         |  Graphical display 2        |  Re-do display
---------+-----------------------------+----------------------------------
[H]      |  Graphical display 2        |  Display version, ops and date
---------+-----------------------------+----------------------------------
[N]      |  Graphical display 2        |  Recall name and time
         |  Choose Operator            |  Set new playing speed
---------+-----------------------------+----------------------------------
[L]      |  Choose Operator            |  Load new sample
---------+-----------------------------+----------------------------------
[S]      |  Choose Operator            |  Save current sample
---------+-----------------------------+----------------------------------
[P]      |  Choose Operator            |  Play sample
---------+-----------------------------+----------------------------------
[F]      |  Choose Operator            |  `Fast' graphics On/Off
---------+-----------------------------+----------------------------------
[D]      |  Choose Operator            |  Debug mode On/Off
---------+-----------------------------+----------------------------------


Reqtools file requester

Key            |  Will do?
---------------+----------------------------------------------------------
[Shift-Up]     |  Move up list by one full `screen'
---------------+----------------------------------------------------------
[Shift-Down]   |  Move down list by one full `screen'
---------------+----------------------------------------------------------
[Amiga-C]      |  Cancel the file requester
---------------+----------------------------------------------------------
[Amiga-G]      |  Reload the filenames and stuff
---------------+----------------------------------------------------------
[Amiga-I]      |  Toggle .info switch
---------------+----------------------------------------------------------
[Amiga-V]      |  Display Volumes (Devices and Assigns)
---------------+----------------------------------------------------------
[Amiga-P]      |  Goto parent directory
---------------+----------------------------------------------------------
[Tab]          |  Cycle round input boxes ([Shift-Tab] to go back)
---------------+----------------------------------------------------------
[Shift-Left]   |  Goto start of input box
---------------+----------------------------------------------------------
[Shift-Right]  |  Goto end of current box
---------------+----------------------------------------------------------
[Enter]        |  Use current name
---------------+----------------------------------------------------------
@ENDNODE

@NODE

@NODE node_rep.chop "sfx - Repeater/Chopper"

The Repeater/Chopper section if probably one of the most useful sections
of the program.  When I programmed the Repeater I originally wanted it to
`double up' breakbeats, but I found that when used with certain values, it
could be used as a time-stretch tool (albeit one that can only stretch to
whole values).  I found that these values were the period values for the
notes at which they played at the correct speed/pitch.  For example, a
vocal sample which you sampled at 21KHz, will play at the correct speed
for the note E-3.  The period value for E-3 is between 166-170 (this
depends on which tracker/sequencer you are using).  Now if you repeat the
sample using the value 170, you will have a vocal sample that plays at
half the original speed, but still at the original pitch.

The Chopper works on the same principle but chops instead of repeating.

The Repeater/Chopper is not just limited to time-stretching, it can also
be used as an interesting effect on many samples by using a larger repeat
value.  For example, you have a breakbeat that is 40000 bytes long, and
has 16 `hits'.  If you use a repeat value of 2500, then your breakbeat
will have double `hits',ie if it originally went `Kick-Hat-Snare-Hat-etc',
it will now go `Kick-Kick-Hat-Hat-Snare-Snare-Hat-Hat-etc'.An interesting
effect happens if you apply this example to vocal samples, the sample
appears to stutter.
@ENDNODE

@NODE node_dec.gate "sfx - Dec Gate/Dec Distort/Inc Distort/Inc Filter/Dec Filter"

I thought I'd better explain this one, so that you don't get confused.  The
first value is a gate/distort/filter value, the second is the distance
(in bytes) to move before changing the value, and the third is the amount
to change the value by.  By using this on analogue style samples (created by
@{"sin" LINK node_sin} perhaps) then you can create pitch changes
@ENDNODE

@NODE node_scratch "sfx - Scratch"

Scratch adds a scratch style to your samples.  It starts the scratch at
`Start'+`Length' bytes.  It takes up `Length/Reverse Speed' bytes.

`Length' is how long you want the scratch to be.
`Start' is where the start of the scratch data is.
`Reverse Speed' is how fast the speed of scratch is.

@ENDNODE

@NODE node_bugs "sfx - Known Bugs and Things To Fix"

   o  "Sample display window displays garbage at the end of samples that are
       short"
   -  This happens of samples of less than 630 bytes.  I'll try and sort
      this out for an update.  The sample still plays correctly and fx's
      properly, it just displays funny.
   -> This is now fixed, well it just displays a blank line instead of the
      garbage.  See I did fix it for the update!
   -> I fixed it even more, it now displays the sample across the full width
      of the window, and doesn't use the blank line any more.  I discovered
      a problem with files of about 700 bytes not displaying properly, when
      I used the display routine in another of my programs, so I fixed it!
      @{" - The Sample Display Window " LINK node_samp.disp}

   o  "Sometimes file/info requesters take an age to appear"
   -  I've noticed this as well, but I can't make it happen on demand, and
      can't find any problems in my code, so I can only assume that it's
      either something to do with the OS or the reqtools.library.
   -> I think I've narrowed this down to the options that I compile with,
      so this shouldn't happen anymore.

   o  "Chopper doesn't work properly with values other than multiples of 2"
   -  This is currently under investigation, as it should work but tends not
      to.  Besides you can still get around this by using a chop value of 2
      and using the repeater function
      (ie you wan't a sample to be 3/4's it's size, well you simply repeat 3
       and chop 2 - chop 2). [3x, 1.5x, 0.75x]

   o  "Sometimes it seems to just stop dead and not do anything"
   -  I've come across this too, and I think it may be the program being
      unable to allocate it's memory.  If this happens, activate the choices
      CON window and press Enter. This should quit the program and allow you
      to reload it.

   o  "The CON: window for entering values opens with my current font"
   -  I know and I'm trying to figure out why (the choose ops window allows
      me to use SetFont(), but it doesn't work on this window)

Special note for users of KingCON
If you are using KingCON to replace CON: then you may find that the main
window goes a bit screwy because of the scroll gadgets.  I've been using an
old (I don't think it's the latest version) of KingCon (v1.1), and have
found that although it may look a bit messy, the program seems to work fine,
although it slows the updating of the window a bit.

I've also noticed that if you replace con: and load Ed then the slider
gadget on the left hand side, totally messes up displaing the wrong text and
not aligning to correctly.
@ENDNODE

@NODE node_samp.disp "sfx - Sample Display Window"

The new sample is displayed in this window.  All the things that you need to
know are written on the screen.  The left and right cursor keys change the
play speed by +/- 5000Hz (as opposed to +/- 1000Hz for Up and Down).
Also, if you press the DEL key (the one next to HELP), you'll get a little
graphical representation of the sample.  This has no real use, it just looks
good.  All the cursor/enter key stuff works in this window just the same as
in the other window. (HELP opens another graphical display)

From v1.1 the sample display window(s) will now display properly not matter
how big the screen font is (so long as the window will still fit on the
screen).  The window will default to Topaz 8 if sfx.font is unavailable.

The sample name, time taken for it to play and bpm are displayed as the
window and/or screen title.

From v1.1 there is another way of viewing the sample, by turning the fast
graphics on.  This produces an `outline' view of the sample, but the top and
bottom sides are the same, so it may not produce an entirly accuate display
of the sample, but hey it looks quite nice so stop your moaning...

@ENDNODE

@NODE node_tech.stuff "sfx - Tech Stuff"

sfx requires a Workbench screen of at least 640 pixels wide.  If your screen
is wider than this then sfx will centre itself to your specified screen
width (taken from a lock on the current screen screen.width). If your
screen is less than 640 pixels wide then sfx will not run.

(I've only tried this with FileMaster2.0 and it works fine(ish) so long as
you tell it to open a con window and don't mind the reqtools requesters
opening on the FileMaster screen).

If you are using a screen where it's size is bigger than your monitor, then
sfx may appear off the screen.  If I can find a way to find the visible
dimensions then i'll fix it, but till then you'll just have to put up with
it. (Beside's I don't know anybody who uses screens where they can't see it
all at once...)

From v1.1 sfx has a bit of font sensativity.  It will make sure that the
windows it opens are the right size, so that the font used for the titles
and all the information contained within are displayed correctly.
sfx has it's own font (sfx.font strangly enough), which it will try and
load on startup.  If it finds the font (and is able to open it) it will use
it for the CON: and sample display windows.  If the font is unavailable
then sfx will attempt to use Topaz 8 for the sample display window and also
attempt to use Topaz 8 for the CON: window.  If topaz.font is unavailable
the program will quit.  This should never be the reason for the program to
quit as topaz.font _should_ be held in rom.

sfx only opens the Audio.device as and when it's needed.  This means that
you can run your tracker and sfx at the same time (which is not possible
with most other sample fx programs).  If it can't open the audio.device sfx
will still display the sample.  sfx will NOT crash if it can't open the
audio.device (i know this for a fact having used it together with various
trackers for it's entire development).  If your sample is longer than 131072
bytes (the largest you can play using the audio.device) then sfx will not
even attempt to play the sample.

sfx requires...   reqtools.library
                  mathieeesingbas.library
                  mathissssingtrans.library
And would like    diskfont.library
                  sfx.font
                     sfx/8
@{" - Copyrights " LINK node_copyrights}

I've not included reqtools as the docs don't make it crystal clear about
whether or not I have to pay to use it.  As this program is aimed at
(semi-) serious users, most users will have a copy of the library anyway,
so this isn't as big a problem as it could be.  If you don't have a copy
you can get it from any good and most bad pd libraries.
(but anyway it's © Nico François and is very cool)

sfx ONLY uses CHIP memory for storing it's data.  This is to stop possible
crashes if it tries to pass fast mem to the audio.device.  I don't have any
fast mem (yet), so the audio.device may not crash if passed fast mem.

sfx uses 2*filesize of memory for the sample (a source and a destination).
Because of the way in which some of the operators work the fx cannot take
place on the original sample data.

sfx has been tested on a KS+WB3.0 2mb chip,0mb fast a1200 and has been found
to work a treat. (I don't think LockPubScreen is in v1.3 so it may not work.
Hey, upgrade!!!!!)
@ENDNODE

@NODE node_me "sfx - About me and bugs and stuff"

If you find a bug, first try and see if you can recreate the bug, and if you
do, try recreating the bug when sfx is the only program running on your
system.  If you still find the bug, then send ALL the details about your
system, and a FULL description of how to recreate the bug.  If I can
recreate the bug and fix it then I'll give you a mention in the docs for the
bug-fixed version.

If you have any ideas of features you'd like to see included then drop me a
line.  If I can impliment your idea then you'll get a FREE mention in the
new docs.

This program has been extensivly tested and should in no way damage your
system, but please take the usual care when using this program, as I can't
take any responsablility for any lost/corrupt data (though I can't really
see how it could lose/corrupt data, but belt and braces and all that).

Send all your letters/ideas/other to me at:

Darren Shaw
12 Delamere Road
Turf Hill
Rochdale,
Lancs.,
ENGLAND
OL16 4XD

absolute_reality@yahoo.co.uk
                                    ;notice the different extentions
anexium@yahoo.com

If you send me an e-mail, then please note that you may not get a reply.  If
you really want a reply then please state that in your e-mail, and I'll try
and get back to you.  I can't place an ammount on the time that I'll need to
reply, but it may be a while, sorry.

This program is not stricly speaking Shareware, 'cos I am not distributing a
crippled version of the software to make some cash.  This software could be
termed giftware.  If you use this software a lot, and would like to see it
updated (possibly with ideas of your own) then a donation of say 5 pounds
wouldn't go amiss.  If you use this software every now and again then how
about sending me a postcard of your home town.

Also take a look at the @{"Copyrights" LINK node_copyrights}
@ENDNODE

@NODE node_history "sfx - History"

v1.0 (21.02.97)
      39 operators (+21 special beta)
      Sent to AUI. (and never released...)

v1.1 (08.10.97)
      52 operators (+21 special beta)
      Sent to CU Amiga (and guess what, it wasn't put on their cd either!)

      Sample display is speeded up greatly.  Now large files appear as fast
      as small files.  User can now set playing speed by pressing `N' when
      asked for an operator.  Opening the second graphical window and
      pressing `H' displays the current internal version, date and number of
      operators.

      The `Noise Gate' operator now works properly.

      The `Random Gate' operator has been changed to a split gate operator,
      which allows the user to set the size of the data and the size of the
      gap.

      The windows now display properly no matter how big a screen font
      you're using.  (About time too...)

      On startup sfx will try and open sfx.font (for use in the CON: window
      and the sample display window).  If this cannot be opened sfx will try
      and open topaz.font (size 8).  This is to make sure that the
      information on the CON: window will apper properly (it's also used in
      the sample display window).  If sfx cannot open topaz.font then the
      program will quit.  It should never quit because topaz.font _should_
      be in rom (It is definatly in the 3.0 rom).

      Fixed a quite major bug when using some operators on files over 65k.
      Because the Mod() function works in 16bit (max size approx 65k), some
      operators were using incorrect values after the 65k point.  But I
      fixed after a bit of head scratching.

      Fixed(ish) a bug in the chopper routine.  It now works but not
      properly...  I have had to go back to using an old routine that I know
      works (to a fashion).  Currently top of the things to do list.
      @{" - Known Bugs " LINK node_bugs}

      Fixed a bug that occured when you loaded a file and saved it straight
      away without sfxing it or viewing it. (It would save the last sfx'd
      sample's data instead of the current data)

      Now requires the  reqtools.library
                        mathieeesingbas.library
                        mathieeesingtrans.library
      And would like    diskfont.library
                        sfx.font
                           sfx/8

      @{" - Copyrights " LINK node_copyrights}
      If sfx can't open the diskfont library then it'll default to topaz/8

      sfx will now display the duration of the sample to 5 decimal places
      (hey, if octamed6+ can have it, then so can I...)

      The `Graphical 1' window has been tweaked to produce a better output
      and to be a bit faster.

      The `Graphical 2' window now displays a `circular' view of your
      sample...

      Added an 2 LFO's, #1 is positive values only, and #2 is positive and
      negative. @{" A picture of what they look like... " LINK lfo.brush/main}

      `Fast' graphics toggle.  Saw how Zero-X on the Atari displayed it's
      samples and thought I'd include my attempt at doing it.  It's a bit of
      bodge though, but looks nice.  The fast gfx also changes what the
      `Graphical 2' window displays (it changes to a slightly different
      version of the `Graphical 1' window).

      The sample is now displayed using the full width of the display rather
      than using a flat line at the end if the sample is small.

v1.2  (xx.xx.xx)
      55 operators (+21 special beta)

      Now tells you the bpm of your sample.  it uses the formula

            240
         ----------     =     bpm
         size/speed

      This make the assumption that the sample is a one bar loop in 4/4
      time (240 being 4*60).  This may mean that the bpm it displays may be
      half (or double, etc) what the proper bpm of the loop is, or if your
      loop isn't 4/4 (3/4, 7/13 for example) then the displayed bpm will
      be totally wrong, sorry.  You should also note that the bpm may be
      a couple of bpm out.  This is due to the speed value being slightly
      different in almost every tracker.  But even thought this may not
      be quite spot on, it does give you a starting point to find the
      proper bpm from.

      Found that using KingCon to replace CON: and running sfx looks really
      messy, and also slows the display down a bit.

      Changed the `Fast' graphics routine.  It's not actually faster, so I
      made it display the way AdSyn, Moo2, Chrome, Tick, And Morfeen display
      their samples.  (The more observant of you out there, may have noticed
      a little plug for some of my other programs in that last sentence...)

      Question - Why do you only find bugs after you've sent it to someone?

@ENDNODE

@NODE node_sin "Sin - What's that doing in this file?"

Sin is a little program I wrote that does analogue stuff.
And so are AdSyn, Moo2, and Chrome.
@ENDNODE

@NODE node_install "sfx - Installation"

To install sfx, simply copy/move the file sfx to your chosen directory
Now check your libs: directory to see if it contains the following

  reqtools.library
  mathieeesingbas.library
  mathieeesingtrans.library
  diskfont.library

The mathieeesing and diskfont libraries can be found on your workbench
disks.  The reqtools library may be included with this archive, or it may
not but most (if not all) peoply have a copy of this library.  Most
coverdisks usually have a copy on them.

Now your should copy the font to your fonts: directory

1> Copy fonts/#? all TO fonts: all
*   sfx.font
*      sfx/8

will copy the fonts to your fonts: directory.

If sfx cannot open the reqtools library then you'll get a
message saying so, BUT the math libs are opened by the E startup code and
may cause a crash if they cannot be opened.  So if you run sfx and your
computer resets or you are given a suspend/reboot requester then you should
check to see if your libs: directory has the libararies in them.
If sfx cannot open the diskfont.library then it will default to topaz/8.

sfx will exit if it cannot allocate enough memory for the samples, so if you
find that the program seems to quit for no apparent reason check your memory
usage with AVAIL and see how big the `Largest' size is.  If this is less
that twice the size of your sample then your will have to reboot and start
again.  (sorry, but there isn't a lot I can do about fragmented memory).
Also remember that sfx only uses cleared chip memory for it's data.

@ENDNODE

@NODE node_copyrights "sfx - copyrights"

reqtools.library is ® Nico François
sfx.font is based on Blobz+.font by somebody who I can't remember
math and diskfont libraries are © Amiga,INC (part of Gateway 2000)

All the rest is © Darren Shaw 1996-1998

If I've failed to credit anybody or got a copyright wrong, then just drop ne
a line and I'll make sure that docs get updated.

@ENDNODE

@NODE node_iff "sfx - IFF's and Stuff"

sfx doesn't use library routines for loading IFF's.  sfx uses an internal
routine that only checks to see if the file starts with a "FORM" and
contains a "BODY".  If it finds both of these then it gets the speed from an
absolute position in the header.  sfx doesn't check on loop pointers and any
other things that the header may contain.  This means that sfx will attempt
to load ILBM's and any other file that contains a "FORM/BODY" and get the
wrong value for the speed.  sfx will not allow a speed below 3000Hz, so if
you load a file such as an ILBM then sfx will get a speed value that is most
probably negative, but will make this value 3000Hz.

sfx saves it's files as RAW **NOT** 8svx, so you may need to load it into
another program and save it as iff if your tracker/sequence doesn't support
the loading of raw samples (Sequencer One only allows you to load iff samples
for example).

Currently sfx only supports one octave mono samples.  Anything other than
this will still load but it will be loaded as raw, or in the case of stereo
samples the data for one channel will be after the data for the other (but
then again I don't beleive that there is an agreed standard for stereo data,
but maybe this option will be included in a future update).

sfx cannot load 16 bit samples but an option to convert them may be included
in the future, but I need to find some data on 16 bit sample formats.  sfx
may support Standard Midi Dump and specific sampler formats in the future,
but as SMD is reported to take an age to transfer data then this may not be
included, if there is support and I can find the specification then I'll
included it (and any other standards if you send me the specs).

@ENDNODE
