            EPSS - Enhanced Polyphonic Sample Synthesizer
            ---------------------------------------------

Program Copyright (c) 1990-2018 by Copson IT Ltd/Unit Seventeen

Documentation Copyright (c) 1994-2018 Copson IT Ltd

All rights reserved

This document is a subset of the developer documentation for EPSS sound system
available from Copson IT Ltd.

Permission to use, copy and distribute this software and its documentation
for educational, research, and not-for-profit purposes, without fee and
without a signed licensing agreement, is hereby granted, provided that
the above copyright notice, this paragraph and the next paragraph appear
in all copies and distributions. If .BIN files are used in non-profit demos
or part of other non-profit software, include as a minimum the copyright
notice above with link to http://epss.copson.se.
Contact Copson IT Ltd, http://epss.copson.se for commercial licensing
opportunities.

THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER
IS PROVIDED "AS IS". COPSON IT LTD HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

Program written & designed by Conny Pettersson

Copson IT Ltd
United Kingdom


System requirements
-------------------
Runs on STe/MSTe/TT/Falcon with TOS 1.06 or newer.
Together with DUMMY.BIN it can also be run in silent mode on a ST.
1MB memory and one discdrive is minimum, but a harddisk is recommended.
Minimum resolution is 640x200, i.e should work in all resolution except
ST Low.


Features
--------
EPSS is a program which lets you use your Atari STe, TT or Falcon as a MIDI-
sample player. The program is aimed at those people who usually makes their music
with real synthesizers and a sequencer. Their existing instrument could be
completed with EPSS to give them more possibilities. The programs could also
be used by people who usually make songs in traditionally computer-trackers,
but want more artistically freedom for their songs.

Some of its most important features are

* 8 channel polyphony
* 25 kHz effective replay frequency
* Independent volumes and pitch on each sound
* Independent stereo-panning of each sound
* Varaible looping of each sound
* Unlimited samplelength
* Maximum 256 sounds in one patch
* Maximum 128 different sounds on every MIDI-channel
* Velocity Variant Filter Emulation, VVFE, to achive filereffects
* Subtones
* Used integrated with your favourite sequencer
* EPSS Export Driver for MROS(R) to be used with all MROS(R) based sequencers
* Possible to load different sound-drivers for different hardware
* Use the drivers in your own programs or demos for playing the songs
* MIDI-In, Out and Thru
* Replay possible from MID-files independant of sequencer
* Integrated sample and sound editor
* Direct loading of samples from Roland S-50-discs
* Loads the most popular sample formats such as SPL, AVR, WAV ...
* Fully GEM Multi-Window environment compatible with MultiTOS
* Runs both as Program or ACCessory

...and much more...

Installing EPSS
---------------
See README.TXT for quick installation or EPSS1ST.TXT for more information about
the installation.

Functions:
----------
When the program first is started the Main window is showed. Following
is an explanation of the buttons in this window.

Setup: This button opens the Driverinformation window. See below for
an explanation of its functions.
	
Install:
Here you choose the sequencer in which EPSS should be installed.
You must be inside the sequencer program when you press this
button. All midi-out data is then linked to EPSS, and
everything played from the sequencer is replayed by EPSS.

Info:
Brief information about EPSS Control Panel. The button 'More' gives
you a guideline on how to start up EPSS.
	
Below is the current song position counter located. This is updatated
when the song is playing.

Soundpatch:
-----------
This area contains buttons for the handling of the patch.

Patch: The filename of the patch loaded is shown.
	
Info: This button opens a window which gives you information about
the patch current in memory. See 'Patchinformation' for more info
about this.
	
Load: Loads new patch and precalculates the samples if necessary. You must
use the Load-function to reload a patch when you change sound-driver. The
frequencys are currently not recalculated so make sure you use a 50 kHz
patch together with the 50 kHz-driver.
	
Save: Saves the edited patch. If you are playing the song at the same time
you saves the patch, the sound is turned off when the patch is recalculated
to its original and turned on when it is saved.
	
Edit: Opens the patcheditwindow. In this window you can define splits, load
sounds and set parameters for the sounds. See 'Patchedit' for more information
about the functions.
	
Song:
-----
This area contains buttons for the songhandling.
	
Info: Opens a window with information about the song. See 'Songinformation'
for more information of these values.
	
Load: Load new song and start playing. The program accepts only standard
.MID-files of type 1, that is one or more sequential tracks.

Below is a set of symbols which represent the song playing functions.

<<: Rewind of the song position counter.

Close symbol: Stop playing the song.

>: Start playing the song.

>>: Forward of the song position counter.

Stop: Stops playing currently loaded song.
	
Play: Starts playing currently loaded song.
	

Driverinformation window
------------------------
Shows information about the current driver loaded. These parameters
are updated when a new driver is loaded.

To the left in the window there are 16 buttons. These buttons represent
which of the incoming MIDI-channels that will be sent to EPSS. If the
button is unselected all MIDI-messages received from the sequencer at
that channel is also sent to MIDI-out. This feature is very useful if
you want to use EPSS together with other MIDI-equipment. You could then
assign channel 1 to 8 to EPSS and channels 9 to 16 to your other devices
for example. If you want to use EPSS like this, we strongly recommend
you to register and then get the MROS-driver for EPSS. See below for
an explanation about EPSS.DRV.

MIDI In:
If this button is selected, all MIDI-in events are linked to
EPSS. This is useful if you want to use an external sequencer or
a sequencer which is running on a different computer to play together
with EPSS. Because of the way the TOS handles MIDI-interrupts, this
will not work 100% on a 8MHz STe due to colliding ACIA-packets. On
a faster computer, e.g. a Mega STe, TT or a Falcon this works.
	
TOS Off:
Locks all interrupts except MIDI-in and SPACE-key. Used for
getting somewhat more system-time when using MIDI-in.

Reset: When the computer gets too busy, which it often gets when
8 channel music is played at the same time as the sequencer
works for full power, it could happen that the PCM-chip looses
its track of what its playing. This button then re-initializes
the pointers so the correct sound-data is replayed. The program also
uses a vertical blank interrupt to keep track of the PCM-chip and
set it back whenever it plays on wrong addresses.

Save Inf: Saves the current patch and song into the file
EPSS.INF in the root of your boot directory. This file is a 
plain ASCII-file, and can therefore easily be modified with a
standard ASCII-editor.
When EPSS is started next time, either as program or accessory,
the patch and song will be loaded automatically if you saved the
information when a patch and song was loaded. If the song is
playing while saving the info, it will also start playing when
autoloaded. Current module and values for preallocated memory is
also saved in the EPSS.INF-file.

Load Driver: This button is used for loading another sound-driver.
Note that the patch loaded are usually precalculated based on the
current driver. If a driver with different number of channels are
loaded, you must also load the patch again to get the precalculation
right. The program informs you about that when you load a driver which
requires a recalculation.


Patchedit window
----------------
This is the most complex window in EPSS. In this you control how the
samples should be placed at the MIDI-channels (the splitting). You
load and listens to the samples and defines start, loop and stop of
them. You can manipulate the volume and controll all soundattributes
of each sound separately. The window also contains a keyboard which
can be set to show each incoming MIDI-messages from either the MIDI-in
or from the sequencer. The keyboard can also be used to play MIDI-out
messages.
	
The MIDI-keyboard:
------------------
As default the numbers on the keys represent the number of the sound
placed on that key.
If the splitfunction 'Tone' is active, the values on the keys represent
the pitch of the sound placed on that key. If the value is C6, this
indicates that the sound is played at its original pitch.
Above the keyboard, the octave number for the keys below is shown.

MIDI: Indicates which MIDI-channel the keyboard should show. The
channel is incremented or decremented with the '+' and '-'-buttons.
If you press at the text you get a sub-menue in which you can choose
which channel you want to change to.

Octave: With this function you could change the current octaves show
at the keyboard. Four octaves are shown at a time. Either increment
or decrement with the '+' and '-'-buttons or press at the text to
choose octave range from the submenue.

Play: When this button is activated, the keyboard is used to play
and listen to which sound each key is mapped to by pressing at a key.

Show Inp: When this button is activated, the keyboard shows all keys
played by inverting the keys. Because this is done with the system's
AES-functions, this is not fast enough to show rapid tones and the
tones are delayed. If you have 'MIDI-In' turned on, all notes received
are shown at the keys. If you have EPSS installed in a sequencer, all
notes received from the sequencer are shown at the keyboard. The MIDI-
channel must match the incoming note for it to be shown.

MIDI-Out: All keys which are played with the keyboard in Play-mode is
also sent to MIDI-out if this button is activated.

Tune: When this button is selected, a sound is heard with the pitch of
the value set with TuneRef. This is useful when you want to tune in a sound
which is sampled at a different tone than the rest.

TuneRef: Which frequency the reference tone should sound at. Default is
C3 with the frequency 523 Hz (Flat C). The value is change by pressing it at
with either left or right mouse button.


The soundfunctions:
-------------------
The '+' amd '-'-buttons is used for changing soundnumber.

The number of the sound is indicated to the right of the buttons.
If you press the number, you get a submenue from which you can choose
another sound. Together with the number and name, the lenght of the
sound in kilobytes is also shown here.

Filename of current sound is shown besides the soundnumber. If you
have a patchfile loaded which is of a old version, no names is shown
here. You can listen at the sound shown by clicking at the name.
The transpose setting and loop-point is used when playing the sound.

Beside the soundname an file-extension is showed. This indicated the
current type of the sample which is to be loaded and has nothing to
do which type of sample the sound contains of. If this extension is
pressed, you get a submenue from which you could choose another sample-
type. Current supported formats are SPL (8-bit unsigned), PCM (8-bit
signed) and S-50 (12-bit Roland S-50 disks). The S-50-type is
somewhat unique, because it actually loads a sound direct from an original
disk from a Roland S-50-disk. The sound is always reduced to 8-bits
and recalculated to 25 kHz (from either 30 kHz or 15 kHz).

Info: Extended information of the sound. 16 characters. This is changed
by clicking at the text to get a inputbox in which you could use the
standard keys for deleting and inserting text.

Load: Loads a sample to the sound. When using the SPL and PCM-extension
you could choose sound from the fileselector shown. When using the S-50
extension, the program reads the directory from the S-50 disk, which
should be placed in drive A:, and shows a submenue with the sounds found
together with their recalculated lengths.

Save: With this function you could save a sound in SPL-format. Useful if
you have loaded the sound from a S-50-disk and then want to change its
volume. It should then be loaded with volume set to 100%, saved as a SPL-
file and it could then be reloaded with a different volume from the
harddisk instead of the S-50 disk, to save loading time.

New: When pressed, this button makes room for a new sound at the end of
the patch. As default this is set to a physical sound, but by changing
the 'Sub'-button you can also make it a virtual sound (sub-tone).

Del: Deletes the current sound. If there are subtones attached to the
sound, the program informs you that these first must be deleted. The sample
for the sound and its soundentry is totally removed from the patch and
all sounds above the deleted sound are moved down one step and the sound
number for the splitinformation is also changed. You can never delete the
last sound as the patch at least must sontain one sound.

Swap: You choose the sound you want to swap the current sound with from
the soundsubmenue. This is useful for reordering the sounds so you can
have the drums at one section, the bass-sounds at another and so on.

Trunc: Truncates the current sound. As end marker the length value is
used. When a truncation of a sample is made, the sample are physically
reduced and therefore the patchsize is also reduced. If there are subtones
attached to this sample, it is not possible to truncate the sample.

VolUpdate: The sound is reloaded to activate any volume changes by pressing
this button. If you have changes the samplepath by loading a sound from
a different path, you must choose the sound again from the fileselector,
otherwise the program reloads the sample and recalculates the volume
automatically. This feature doesn't work if you have the type set to a
S-50-sounds. In that case you always get the S-50-directory is the same
way as when you press the 'Load'-button.

SampleWind: When this button is activated, the MIDI-keyboard changes to a
sample-window which is showing the current sound in graphics. In the window
there are three markers:

1) Startmarker. This is indicated with an inverted 'S' at its top. This can be
  moved from the beginning of the sample to the loopmarker.

2) Loopmarker. This is indicated with an inverted 'L' at its top. This can be
  move from the startaddress to the endaddress.

3) Endmarker. This is indicated with an inverted 'E' at its top. This can be
  moved from the loopmarker to the end of the sample.

NOTE! When two markers are placed on the same sample position, for example
when the startaddress is the same as the loopaddress, the line may disappear.
They can be recognised though by its marker-'flag' which are logically xor:ed
with eachother.

The markers are always updated when any address is changed by manually
inputting a new value or increased/decreased with the mouse, but they can also
be moved in by placing the mouse above the marker, press and hold the left mouse
button to move it.

You can zoom in the sample by pressing and holding the left mouse button and
dragging out a rubberband-box to the area you want to magnify.

At the bottom of the samplewindow, a sliderbar is shown. To the left and right
the figures indicate the start and end of the current window shown. The sliders
are manipulated in standard GEM-fashion, i.e. you could click at the arrows
to scroll the window left or right, you could click in the grey field to
scroll the window with larger steps left or right or you could take the box
with the mouse and drag it and release it.

When you singleclick with left button in the samplewindow, it is zoomed in
100%.

When you singleclick the right mouse button, the samplewindow is zoomed out to
its original resolution.

Sampleattributes:
-----------------
Start: This is the startpoint of the sample. It is changed by pressing
at the value by either left or right mouse button to increase or
decrease it. Used together with the shift-key, the change
is ten times faster.

Loop-value: If the LOOP-button is selected, this is the loop-point of
the sample. It is changed by pressing at the value by either left or
right mouse button to increase or decrease it. Used with
the shift-key, the change is ten times faster.

End: Indicated the endpoint of the of sample. The value is changed by
pressing at the number by either left or right mouse button to increase
or decrease it. Used together with the shift-key, the change is
ten times faster.

VVFE-sensitivity: Velocity Variant Filter Emulation.
Multiplicator which determines how much the startoffset of the sample
should be set. This is controlled by the MIDI-velocity. Values are
1, 2, 4, 8, 16, 32, 64 and 128. If you use a keyboard with fixed
velocity, set the VVFE-value to 1 to make it velocity insensitive.
The value is changed by pressing at the number by either left or
right mouse button to increase or decrease it.
	
Trp: Transpose. -128 to +127. The value is changed by pressing
at the number by either left or right mouse button to increase
or decrease it.
	
Vol: This value is ONLY used when loading a sound. If the function
was made to work on the current sample, the sound would be incorrectly
recalculated when the volume first was reduced in volume and then
increased and this would result in noise and distorsion. The only solution
to avoid such things is to ensure that the best possible original data
is used, and this is done by always reloading the sample.
Therefore, if you want to change the volume of a sound previous loaded,
you first set the volume you want and then reload the sound, preferrably
with the 'Update'-function to avoid the fileselector.
The value is changed by pressing at the number by either left or right
mouse button to increase or decrease it.

Soundattributes:
----------------
Loop: If this button is selected, the sample is looped when it reaches
the end. You can change the looppoint while playing the sound. As for
the current STe/TT-versions of the drivers, the loopfunction is not
very exact when the looping of the sample takes place. This is done
in favour of speed. The loop-point could differ depending on which pitch
the sound is replayed at. It could therefore be difficult to find a nice
and clean looppoint, which sounds the same at different pitches, but the
loop-feature could still be used with reasonable result.

Sub: This button represent one of the unique features of EPSS, the subtone-
concept. With this concept it is possible to create a new sound which takes
the same sample used for another sound and for example uses it with different
start, stopp and loop-point and different sound-attributes. This could for
example be used when you want to use the same sound both in loop and one shot
mode, or perhaps one sound at left speaker and the other at right. The
possibilities are many.
When a sound is marked as a subtone, you muse define which sample it should
work at. This is done by choosing a sound from the submenue show when
accessing the Load-function. All subtones already defined are unselected
because it is not possible to make subtones from subtones...

Drum: If this switch is active, the sound always plays at its original pitch,
e.g. the pitch at which it is sampled at. This is useful for drumsounds which
you want to place at several keys in a row but doesn't want to be different
pitched for the different tones. If you also want to have the sound pitched
as well you could create a sub-tone.

VVFE-status: This button activates a submenu where you can choose three modes
of the VVFE:

1)  Vel:VVFE This means that the MIDI-velocity transmitted at Note-On should
    be used as an offset in the sample with the sensitivited set by the VVFE-
    sensitivity value.
    This mode is indicated by 'VVFE'.

2)  Vel: Volume  The transmitted MIDI-velocity is used as volume only.
    This mode is indicated by 'Vol.'.
    
3)  Vel:Volume+VVFE  The transmitted MIDI-velocity is here used both as volume
    and VVFE. The VVFE-sensitivity represent the multiplicator for the
    offset (see explanation under VVFE-Sensitivity).
    This mode is indivated by 'Both'.

4)  Vel:Off   The transmitted MIDI-velocity is ignored.
    This mode is indicated by 'Off'.

The modes can also be changed when the MIDI-sensitivityvalue is changed, i.e.
if the volume mode, indicated by 'Vol.', is activated and you set the
sensitivity to a higher value than 1, the text changes to 'Both'. If you set
it back to 1 the text changes back to 'Vol.'.

NOTE! The PolyPressure is always used as a volume modifier. You can send a
PolyPressure-message to a note which currently is playing to change its
volume in realtime. Effects such as envelope or stereopannings can then be
achive with a little effort.


L and R: Choose if the sound preferably should be played in the left or
right channel. If the buttons are unlit, the panning is choosed from a
preset panning-map which tries to place the sounds as even as possible.
It is recommended to always pan the sounds. When there are no availible
voices, the sound flips to the other channel.

The originalfrequency of the sound can be selected from the frequency-
submenue. This is to be used in the future to let the sounddrivers
recalculate the frequencys of the sounds in the patch. This is currently
not implemented.

Splitfunctions
--------------
Show: When this button is selected, it is marked on the keyboard on
which notes the actual sound is placed. This is done by inverting the
keys. It always searches the sound from the lowest point of the
keyboard where is current is placed. Therefore it is possible to
find multiple occurances of a sound by keeping the Show-button
activated and then pressing octave increase (the + button beside 'Octave').
If more sounds are present, the keyboard is moved to this new position,
otherwise it stays at the same midi-channel and octave.

Mark: This button is both used for defining the original tone and marking
a split section at the keyboard. When you use this button the 'Show'-
function should be turned off. The 'Play'-button must also be turned off
to make selection of multiple keys possible.
If you only select one note on the keyboard, by inverting it by clicking
on it with the mouse, this functions locates the note and puts it as the
original tone for a split. This is indicated by the 'OrgTone:'.
When you have selected two or more keys, this function marks every key
inside the range from the lowest selected note to the highest selected
note.

Tones: With this button you can choose if you want to show the sound-number
or the pitch for the sound at the keys. The pitch is useful to show in
combination with the 'Show'-button to find out how your sound is splitted
and eventually find the original tone. The octave is indicated as the single
number placed on top of the white keys, e.g. if the number on the key shows
a '5' and the letter below the key shows a 'C', the pitch of this key is
C5, which is one octave below its original note which always is the C6.
The layout is as follows:


C4: - 2 octaves down from the original pitch (lowest note possible if transpose
    is set to 0.)
C5: - 1 octave down from the original pitch
C6: Original pitch of the sound. This is the pitch which you hear when you
    play the sound, and is affected by eventual transposevalue.
C7: + 1 octave up from the original pitch.
C8: + 2 octaves up from the original pitch (highest note possible if
    transpose is set to 0.)

Make: This button is used when you want to define a split for the current
sound.

The splitting procedure is done as follows:

1) Choose the sound you want to define a split for from the sound-
submenue or by increasing or decreasing the sound number.

2) Select the MIDI-channel and octave-range you want the sound to be
split at. This is done by choosing MIDI-channel from the MIDI-channel
submenue and choosing octave from the octave-submenue.

3) Select ONE note where you want the original note to be put. Normally
you want to do a four octave split and then you choose the C in the middle
of the keyboard for the original note. The sounds can always be played two
octaves up and two octaves down from its original tone, so it is most
effective to make the split four octaves to always have the whole range
of the sound available. Note that if you have used tranpose to tune the
sound, you might not be able to play it at its whole range.

4) Press the Mark-button to get the original tone chosen into the 'OrgNote'-
text. (The 'OrgNote' can also be set manually by pressing at the text by
either left or right mouse button).

5) Next you should define all the keys on which you want the sound to be
placed at. This is done easiest by selecting the lowest and the highest
note and then pressing the Mark-button to select all the the keys in
between automatically. You could also define all the notes manually by
selecting them each and each.

6) Press the 'Make'-button to perform the actual split. All marked keys
are now defined with the sound chosen at different pitches depending on
the original tone.

Clear: This button is the opposite of the Make-button. It clears all the
keys marked from its sound.

OrgTone: This indicates at which key the original pitch of the sound
should be placed when defining a split with the 'Make'-button. This can
either be chosen manually by pressing at the value by either left or
right mousebutton, or with the help of the 'Mark'-button, but the most
convenient way of selecting the note is by doubleclicking at the tone
on the keyboard.

Patchinformation window
-----------------------
This is an explanation of the text shown in the patchinformation window.

Info: Textinformation e.g. about the patch-author. This is stored in the
patch. 32 characters. When you click at the text, you get at inputbox
in which you could modify the text.
	
Created: Creation date of the patch.
	
Changed: Change date of the patch.
	
Channels: How many MIDI-channels the patch contains.
	
Sounds: Number of sounds in the patch.
	
Length: Filelength of the patch. Indicated in number of bytes.

Version: Version of the patch. Version 1.00 has no information about
samples and volumes. Version 1.01 has this information.

Songinformation window
----------------------
If the song contains a copyright notice, this notice is shown on the
two first lines in this information. Otherwise nothing is shown here.

Length: Length of the MID-file. Indicated in number of bytes.
	
Format: MID-file format. 0: sigle multi-channel track, 1: one
or more simultaneous tracks of a sequence, 2: one or more
sequentially independent single-track patterns (not supported)
	
Tracks: Number of tracks in the song.
	
Signature: Signature of the song.
	
Clocks/Tick: Number of MIDI-clocks per MIDI-tick.
	
32nds/MIDI-quarter: Number of 1/32nd notes per MIDI 1/4-note.

Speed: Tempo measures in BPM. The resolution is about 7 BPM in
the replayroutines currently used. Min 15 max 200.


Using EPSS together with your sequencer
---------------------------------------
When EPSS is to be used together with a sequencer, you must first modify the
EPSS.INF and reserve memory for the patch and the song before you load
the sequencer. In the archive there is a .INF-file for EPSS which is setup
to let you use a patch with a maximum of 500000 bytes. The name of this file
is EPSS_SEQ.INF. If you find this enough you can let is as it is, and copy
it to you bootpartition and rename it to EPSS.INF. Otherwise you could load
it into an ASCII-editor and change its values. For an explanation of the
keywords which could be used in the INF-file, see below.

When you reboot with EPSS as an ACCessory, you then have to choose driver
and patch if these are not specified in the EPSS.INF.

Load your sequencer. If you run a MROS(R)-based sequencer, and are using
MROS(R) V 3.30 or newer, place the EPSS.DRV (only supplied for registered
users) inside your MROS(R)-folder before you start the sequencer. This is a
Export driver which lets you use EPSS as an external MROS(R) device.

Open EPSS Control and press INSTALL-button and choose your sequencer, unless
you run have EPSS Export Driver installed. After a few seconds, an alert
appears if the installation was successfull.

You can now play with the sounds loaded by turning on the MIDI-Thru in your
sequencer. All MIDI-events which are suppose to go to MIDI-out is now going
to EPSS.

NOTE! When EPSS is used in Cubase(R) It is important to always turn the
Running Status OFF for EPSS. If you don't hear any sounds, or EPSS only
plays one note or something other strange, the Running Status is probably
turned on.

EPSS.INF
--------

When clicked on Save Inf, a info-file is saved which contains information of
the current patch and song. This file can be modified with a standard ASCII-
editor to change EPSS setup information.

The file is loaded everytime the EPSS is started. If you run EPSS as
ACCessory, you must always REBOOT to activate the settings when you have
changed the file.

Following keywords can be used in the INF-file:

DEFAULTPATCH  X:\XXXXXX\XXXXXX.SPI
  The patch is autoloaded when EPSS Control is accessed for the
  first time.
	  
DEFAULTSONG X:\XXXXXX\XXXXXXX.MID
   The song is autoloaded and started when EPSS Control is
   accessed for the first time.

SAMPLEDIR X:\XXXXXXX\YYYYYYY
   This defines the default sample directory. Useful for making the
   'Update'-function to work directly at your sample directory without
   having to choose it by the fileselector.
	   
PATCHMEM 500000
   An amount of memory is allocated for the patchfile when the computer is
   booted. A new patch can then be loaded from inside a program which reserves
   all system-memory, such as Cubase(R). If this is omitted, the memory is
   allocated dynamically when the patch is loaded, which may not work when
   inside a sequencer.

MIDMEM 100000
   An amound of memory is allocated for the song when the
   computer is booted. A new song can then be loaded from
   inside a program which steals all system-memory, such as
   Cubase(R). If this is omitted, the memory is allocated
   dynamically when the song is loaded.

WORKMEM 100000
   An amount of memory is allocated for converting S-50-sounds.
   If you never plan to load any S-50-sounds, this keyword can
   be skipped to save memory. Otherwise it is recommended to set
   this value to make S-50-loading possible from within a sequencer
   which reserves most of its memory for itself (like for example
   Steinberg's Cubase v 2.0).

PLAY ON/OFF
   This keyword indicated if the song should be started
   immediately after loading it or not.

DRIVER X:\XXXXXXXX\XXXXXXX.BIN
   This keyword tells which EPSS-driver which is to be used.

NOCHECK
   This keyword disables the buffer overrun check which normally
   is done each VBL. When a overrun occurs the screen is inverted.

USEMTRSC
   This forces EPSS Control to use the Resource file for the MultiTOS.

EPSS.DRV, the MROS driver for EPSS
----------------------------------
This is a MROS(R) Export Driver for EPSS which let you use EPSS as an external
MROS(R) device if installed inside the MROS(R)-folder of your sequencer and you
run MROS(R) V 3.30 or newer. When you are running Cubase as sequencer, you can
choose the output of individual tracks to be sent to EPSS by choosing output
EPSS in the trackinformation. It is also important that you disables the
running status for the EPSS from the MIDI Setup menue in Cubase. This is also
necessary if you run EPSS with direct linking into the sequencer by the
'Install'-option.
This driver is only present in the registered version of EPSS.

Various Information
-------------------
The program can be used under MultiTOS either as a accessory or as an
application. Its PRG-flag must then be set to "Super". None of the current
AES or GEMDOS extensions in MT are currently used.

The ACC-file can be loaded with Chameleon, the ACC-fileloader, but EPSS
Control cannot be released from it. A systemcrash will most certainly happen
if trying to do so.

If the resolution is changed when EPSS is playing, the program will probably
crash because the system then throws out any ACC-files present. If run under
MultiTOS, the program will terminate correctly when a resolution change takes
place.

The program can also be used as a PRG-file, by renaming it. It can then be
used to load songs and play them. Used under MultiTOS, this makes more sense.

The program accepts all standard .MID-files of version 1.

If you are planning to load patches or songs when inside a  sequencer, such
as Cubase, make sure you have reserved enough memory with PATCHMEM and MIDMEM,
otherwise the program gives an error message because lack of free memory.


MIDI-implementation
-------------------
	
MIDI-velocity is used for VVFE in EPSS.
Formula: (127-velocity)*VVFEvalue. Example:
Velocity 64 and VVFE 128 makes the sound start (127-64)*128=8064 bytes
forward in the sample.

PolyPressure on a note which is activated, changes the volume in 64
different steps. Min 0, Max 127.
	
The swich 'VVFE' is used to swap volume and VVFE for a sound.
	
Technical data
--------------
	
* Uses PCM-DMA at 50066 Hz replay rate in stereo.
* 8 channels by multiplexing four physical channels and then addition of
  predivided sound data. This gives a true replay frequency of 25 kHz for
  each channel.
* 8 channels polyphony by first-in first-out. No recapture of notes muted
  by overflow.
* Approximately 7 bits dynamic range for 8 channel driver.
* Frequency calculation 4 octaves (two up and two down) by skipping and
  holding samples.
* Realtime volume by 64 precalculated steps controlled by MIDI PolyPressure
  or Note-On-Volume.

  Implementation data:

* Timer A used for syncronizing samplebuffers and calculation of next buffer.
  PCM-DMA used in loopmode. Bufferlength 2000 bytes. Interpretation of MID-
  file for replay made on Timer A also. Some .BIN-modules are made for using
  on the VBL when the host program uses Timer A for its own purpose.
* Trap #7 used for redirecting MIDI-out to EPSS.
* XBRA- and cookie-ID is EPSS. EPSS-cookie is always installed when EPSS is
  currently in memory. The cookie parameter points to start of EPSS
  information block described elsewhere.

Everything is subject to be changed without further notification...

Something about the speed...
----------------------------

The replayroutines uses 25 kHz stereo, 8 channels. Although the replayroutines
are heavily optimized, this consumes lots of processortime and therefore you
cannot use the variable volume feature on more than 2-3 channels at once on
a STe. No check of this is done, so its up to you to watch out so the processor
isn't overloaded. Of course you may run on a 16 MHz 68000, MSTe or TT  which
allows you to use more voices with volumes.

The samples takes much less processortime when played at its original
frequency. Therefore it is recommended to always use the 'Drum'-switch for all
sounds which don't need to be pitched, like the drums.

When used inside a sequencer, such as for example Cubase, the sequencer itselfs
consumes processor power, so it is often necessary to mute some of the channels
when working on a song. The play-function could then be used to replay the song
in full, when it is exported to a MID-file.

Of course the program is compatible with the current multitasking environments
which is availible for the ST like MultiTOS or PowerDOS/Net, but these consumes
also normally a lot of processor time, so be careful when you use EPSS in these
environments.


The Future of EPSS
------------------
	
This system has been developed for the PCM-DMA of Atari STe/TT. Although this
is a limited device for playing differently pitched high quality sounds in
realtime, we think we have achived pretty good performance.
We are currently working on a sounddriver for Falcon's 16-bit sound.


Greetings
---------
Thanks to members of Unit Seventeen.

Conny Pettersson, Copson of Unit Seventeen, Copson IT Ltd

Conny Pettersson
Copson IT Ltd
United Kingdom

Web: http://epss.copson.se

Email: conny@copson.se

Cubase and MROS are registered trademarks of Steinberg, Germany
Atari is a trademark of Atari Interactive Inc, USA
	
