The official SLab web pages.
[INDEX]
[NEWS]
[DOWNLOAD]
[SCREENSHOTS]
[LINKS]
[FORUM]
[MAIL]

1092 hits since Sun Apr 4
11:07 2010 CEST

Release notes for slab-3.20-2d-linux-glibc:


SLAB 3.10
---------

For new features, check out 'NEW in 3.10' below.

SLab 3.10 will work with kernel release 2.0, 2.1 and 2.2.
If you have a 2.0 kernel, SLab may not work in full duplex, due to requiring
certain facilities only currently available on kernel 2.1 with OSS 3.8.

Various MIDI links have been built into this release, but none of the MIDI 
code has been compiled into the binaries. The existing menus will probably
report 'MIDI not available'. There are two major developements underway at
the moment, one of which is MIDI. It is uncertain whether the rest of the
MIDI code will hit 4.0, but expectations are tending to the latter.
The other was floating point mixing, now in 3.0 and later, and the general
direction is towards CD Mastering and MP3 support, rather than more MIDI stuff.

Broken in 3.10:

Send bus FX chaining is broken for chained stereo effects.
Chambre reverb will produce large DC component at high feedback levels.
Stereo compressor has had no testing.
Filtered sidechain input gating compressor has had little/no testing.

INSTALLATION
------------

The tgz contains all binaries, bitmaps and ancilliary files for the application.
It should be gunzipped and extracted in a directory somewhere on your disk, 
such as /usr/slab or /usr/local/slab. The location should be set up in your
SLAB_HOME environment variable. If SLAB_HOME is not set, it defaults to
/usr/slab

The directory structure for this distribution is as follows:

bin           - all binary files. Needs to be in path.
effects       - phaser, flager, echoes etc. Needs to be in path.
bitmaps       - icons, pointers etc.
libtcl        - A couple of TCL files for the GUI.
libtclcomp    - The main GUI data files.
dataBase      - The is the repository of all data types
include       - Header files for APIs.
lib           - libslab.a, effects API. libdaccess.a, data access API.
src           - source for some of the effects, showing use of effects API.
tmp           - temporary spooled data, edit backout files.
tcl.files     - copies of the TCl/Tk header files required for this release.

The ${SLAB_HOME}/dataBase directory is the repository for all recorded data
and effects. New dataTypes can be defined here. It contains a subdirectory for
each datatype (DiskFile, EffectsTool etc). The DiskFile directory contains
a subdirectory for each CD, and each CD will contain about 3 files for each
recorded song. The 3 files are the "songname" which contains the audio recorded
data for all the the tracks in the mix, "songname.dat" (default baseline
setting for the song mix), and "songname.session". The last file is used for
mixdown session recording.

The main drawback of this directory is that it needs to be located on a
partition with a _lot_ of space. The benefits of using a resident file system
over a raw partition are that we maintain flexibility for new files, and we
can use "write past end of file" to autoextend songs, whereby unrecorded 
tracks do not require disk space. There is a slight performance overhead of
writing to a filesystem rather than a raw device, but disk performance is 
typically not a bottleneck.

All binaries are ELFs.

KERNEL REQUIREMENTS
-------------------

The application uses SYSV IPC SHMEM, so the kernel MUST be complied with the
CONFIG_SYSVIPC configured.

OSS (nee: VoxWare) drivers reved to something like 3.8 (beta 1 or 2?) for 
full duplex support. These only compile on a 2.1 kernel. Earlier drivers, such
as the 3.5.X will work, and compile with the 2.0.X kernel. However, SLab will
only work with half duplex devices on such a kernel due to requiring certain
OSS features for synchronisation of input and output audio data streams.

May work with UltraSound drivers, but this has not been thoroughly tested. If
you have UltraSound drivers, please let me know the results. I intend to test
and provide support for these drivers.

SYSTEM REQUIREMENTS
-------------------

GUI is based on TCL/TK, and has been reved to 8.0.

You DO NOT need TCL/TK installed to use this application, it should be
complete. The required TCL/TK header files can be found in the
SLAB_HOME/tcl.files directory. Either use the "startSLab" script provided
with the distribution, or point your TCL_LIBRARY and TK_LIBRARY environment
variables at this directory.

The $SLAB_HOME/bin directory should contain several versions of the startSLab
script, the default one is a csh script file, but a bash version is provided
for users who have not installed the csh. Whichever file you use, it really
needs to be edited to point to the correct SLAB_HOME directory. In future
the scripts will be altered to test for the SLAB_HOME environment variable,
and if not yet defined will configure a default, allowing users to define
their own SLAB_HOME in a login script.

GETTING STARTED
---------------

Add /usr/slab/bin to your path, and then use the 'startSLab' script
to shoot off the application. This script uses the "csh", which may not be
installed on your system, and above all needs to be edited to correctly
reflect the configuration of the SLAB_HOME directory. There is a second
script call startSLab.bash uses bach as the interpreter.



Alternatively there are a couple of main steps required to get the software
going, based on the assumption that your system already has SYSV_IPC and
functional soundcard drivers.

The following need to be configured (for /bin/csh and equivalents):

% setenv SLAB_HOME 
% set path = ( $path ${SLAB_HOME}/bin ${SLAB_HOME}/effects )

TCL/TK you need to have TCL_LIBRARY and TK_LIBRARY set up correctly. The
startSLab script points these variables at SLAB_HOME/tcl.files, which are
the prerequisite headers. If you prefer to use your own TCL/TK installation
then iff you can use the command "wish" version 8.0 with no problems you
should be fine.

The GUI is started with the command:

% mixslab

Mixslab will exit if SHMEM has not been compiled, otherwise it will start the
engine after creating the shared control buffer.

Mixslab will bring up the application GUI, giving access to the recording
editing facilities. Across the top are 4 icons, for the mixer, tape and 
device application, and the wave editor. These are buttons that can be used
to call up the applications on the current open song. The lower section
contains 5 edit tools. The tools can be "picked up" with the middle mouse
button, and dropped onto tracks in the mixer or wave editor. The central
section will show the different data types that are recognised by SLab. The
installation gives access to DiskFiles and Effects, but the list can be
extended by the user. Within each of the datatypes are sub-groups. The 
is one subgoup under the DiskFiles calles startCD, containing one empty
"test". This will eventually list your recorded songs, displaying a
disk for each song. The "disks" can be dragged to one of the application
buttons to launch that application on the given song.

If you got this far it is looking pretty good. The correct next step at this
point is to position the pointer on the sunken middle stripe of the mixslab,
and pull up a menu with the 3rd mouse button. One option of this menu is to
create a new song file. This should be used to generate new song files.

Anyway, create a new songfile, and you should see the mixslab alter to 
accomodate the new track in its display. You can pick up the track, and drag it
to the mixing desk for recording and mixing.

SONG FILE CREATION
------------------

When you first start MixSLab, you get the main control window. In the middle
section you will see two groups of data types, depicted as DiskFile and 
EffectsTools. To create a new song you will first need to create a new CD,
and then create a song on this CD.

Song file creation is available from the mixslab main window, via the pop-up
menu in the sunken middle "songs" section of the display. This menu item
gives a requestor sheet where a number of critical parameters must be
configured. These parameters are maintained per song, so different songs
may have a completely different parameter set.

Since these parameters will have a critical effect on system performance, it
is worth understanding their effects.

1. trackcount
This is the number of track which will be available in the song. Fixed values
are given from 4 to 64 tracks, but the number that are feasably available
depends heavily on your CPU speed and other configured options. The 1.0 
release is specified at 8 track of CD quality (44100Hz) sound with 2 effects,
on a pentium 133. This should be supportable on with subMixAlgo4. SLab 2.1 
provides for disk compression which will require extra CPU cycles, and will
thus reduce the available tracks.

2. samplerate
This is the speed at which data is written to disk, and for now also the rate
at which the audio devices are configured when this song is played. This 
parameters has two major effects which although perhaps obvious, should be 
explained. The choices here are 48kHz, 44.1kHz (CD quality), 22.05kHz, 11kHz
and 8kHz. Using lower sample rates will reduce sound quality, but will also
reduce CPU overhead associated with mixing the audio data. The main of lower
sample rates is that the engine only needs to move a fraction of the samples
per second, increasing the supportable track count. This will probably be
useful if your processor is short of capacity. It is possible to change the
sample rate after a song has been defined, allowing the capability to record
new data whilst the song is playing at a different rate. Although this is no
replacement for microtuning (altering the frequency by a number of cents only,
which is being reserved for a future release), it does give flexibility for
recording methods.

3. Resolution
Any number you want, as long as its 16. Lower bit resolution is unlikely, but
disk resident data can be compressed to lower bit resolutions, with 16 bit
sample processing within the engine. Work will be done to remove this variable,
but not until a later release [Resolution of the audio devices will then be 
configurable on the device requestor sheet, and disk resident data resolution
will depend on this specification and the compression algorithms in use].

4. blockSampleSize
Defines both the disk resident sample blocking, and internal structure sizes.
The default value is 8K samples. Higher values will fail at high track counts
since the system poses a limitation on the maximum size of a shared memory
segment (1 or 2MB). Using lower values will spare the system of excess memory
requirements, but may result in "ticking" since the amount of data that can
be pre-processed is less. A value of 4k is reasonable, and may become the
default, even though 8k is the most efficient at the moment.

5. Duration
This defines the initial file size. Note that on Unix platforms, the file does
not occupy this amount of diskspace - only one block of data is written for
file creation, the rest is a hole. The 'holes' are filled during recording.
The filesize will extend automatically when recording past end of file.
This parameter is really a legacy issue, and will eventually be removed.

6. Compression
Enabling the audio compression facilities can only be done on file creation,
there are no capabilities to turn it on for an existing file. When a song is
created you will be requested to select out of the existing compression
capabilities - 2 to 1, 4 to 1 (both lossy) or none. Non lossy compression
will be added in a future release, but will require some reverse agreements
with a supplier of non-lossy compression algorithms. The compression features
will save disk space, but will trade that off against higher CPU load (for
the comdec algorithms) and lower signal quality.

At the moment, once the above parameters have been defined at the time of
song creation, only the file size (the disk IO engine will extend the song
as necessary), and the sample rate can be altered. Conversion utilities will
eventually be available to alter trackcount, sample rates etc. You will be
requested to confirm the creation of a new file, and a message will be
displayed to indicate how large the file of this duration and track count can
become. The disk file is not preallocated, and the calculation of file size
does not cater for the effects of compression.

AUDIO DEVICES
-------------

Device configuration is partially global, and partially song related. The 
global options are available from the device configurator in the MixSLab main
window. This requires to configure the device names and major options such
as input/output/duplex, as well as configuration of the subFragment option.

Audio options for the devices are accessible via the "File->StudioDevices..."
menu option. This allows alterations to the resolutions of the card, but
not the names or associated capabilities. Details of the options are given
below.

There are 8 devices which can be configured. The first (primary) device is
intended to be the main output, and for now should be kept this way.
The rest of the devices are alternative IO channels, which may be used for
either input or output depending on configuration.

Given below are a couple of sample configurations, plus a description of how
the audio devices are linked to input or output daemons. Note that these are
only examples, other possiblities are allowed.

Sample Config 1.
User has a single Full Duplex card (eg, GUS MAX):
    Primary device is the UNIX dev for the writable DMA channel.
        Device is configured as Write_Only.
    Secondary device is the UNIX dev for the readable DMA channel.
        Device is configured as Read_Only.
OR
    Primary device is the OSS dev for the duplex driver.
        Device is configured as Full_Duplex.

Sample Config 2.
User has two Half Duplex cards, Sound Blaster OSS/Free for example:
    Primary device is the OSS dev for the writable first device
        Device is configured as Half_Duplex.
    Secondary device is the OSS dev for the second device.
        Device is configured as Half_Duplex.

Sample Config 3.
User has a Half Duplex card, and one Full Duplex card:
    Primary device is the dev for the writable DMA duplex device
        Device is configured as Write_Only.
    Secondary device is the dev for the second Half Duplex device.
        Device is configured as Half_Duplex.
    Tertiary device is the dev for the readonly DMA duplex device.
        Device is configured as Read_Only.
OR
    Primary device is the dev for the DMA duplex device
        Device is configured as Full_Duplex.
    Secondary device is the dev for the second Half Duplex device.
        Device is configured as Half_Duplex.

Sample Config 4.
User has an almost Full Duplex card (eg, SoundBlaster OSS/Linux):
    Primary device is the UNIX dev for the writable DMA channel.
        Device is configured as Write_Only, SB_Duplex.
    Secondary device is the UNIX dev for the readable DMA channel.
        Device is also configured as SB_Duplex.

In sample configuration 1, there are two options for duplex drivers. Linux
would use the second one, where the device is opened once, and executes full
duplex operations. The first option, opening the device twice, once with
read only, and once with write only, is supported with a number of UNIX 
platforms (which MixSLab will eventually be ported to).

In sample configuration 2 above, both audio devices are open for output, and 
the second one is opened for input for recording. In this configuration we
can mix down to 2 stereo outputs (aux mix or quad mix), and when recording we
have two stereo input pairs, or we can record on one pair, and listen on the
other.

In the Third configuration we actually have many options available. If we 
configure recording on both devices, one will remain duplex, and the other
will go to recording mode. If we only record two or fewer tracks, then there
are 2 stereo outputs available.

The fourth configuration is for SoundBlaster full duplex with the OSS/Linux
drivers. Creative do not support full duplex CD quality, the maximum available
resolution is one 8 bit channel and one 16 bit channel. The obvious advise is
to configure the output device for 8 bits during recording sessions, and 
16 bits during mixdown sesions. There is now an sbDuplex switch which attempts
to do this automatically, but has not been widely tested. [NOTE: Until further
notice, SoundBlaster 16 soundcard are supported in 8 bit mode only.]

If you have two full duplex soundcards, for example using the UltraSound
project drivers on Linux, you will gain the benefits of having 4 ins and 4
outs, simultaneously.

There is a section in the Studio Devices requestor where a mixer device can
be entered along with the audio device. The mixer device is optional. On a
Linux system, this would be the /dev/mixer with /dev/audio, or /dev/mixer1
with /dev/audio1. On a Sparc system, this would be /dev/audioctl. If the 
mixing device is provided, the GUI will control the audio options via the
microMixer. If this is not provided, the GUI will still control the audio
options, but the requests are sent via IPC to the engine, where the audio
daemon will execute the configuration options via its own open audio device.
This is probably a solution for a problem that I have not encountered yet.

The flags section has 8 options, NoControls, sbDuplex, 8bitIn, 8bitOut,
ReadOnly, WriteOnly, HalfDuplex and FullDuplex.

These should be configured to match your audio card capabilities:

  ReadOnly and WriteOnly
    Will tell SLab it can only record from, or play to the device respectively.

  HalfDuplex
    Will only read or write, but never both at the same time (the device is
    closed, reopened and reconfigured when the direction is changed).

  FullDuplex
    Device is capable of simultaneous play and record.

  SubFragment
    This is a newer algorithm which decouples the mixer buffer size from
    the audio buffer size. It allows for the micro adjustable tape speed,
    but does not support 8 bit IO (no SoundBlaster16 support).

  Loose Sync
    From release 3.10 is is possible for a single audio daemon to manage 
    multiple soundcards. This provides marginally more efficient operation, but
    more importantly gives far better synchronisation between different 
    soundcards. However, the new algorithms cannot be applied to all soundcards,
    and the loose sync feature will configure a separate audio IO daemon for 
    the device.

If your system configuration (number and type of audio cards) and CPU
performance permit, you can configure full duplex IO on all interfaces,
simultaneously.

Further details of audio device configuration is provided in readme.soundcards.


STUDIO DEVICES
--------------

The following options can be configured in the File->StudioFiles menu:

  debug
    Add some audio ioctl() debugging output.

  FDUP
    A true full duplex soundcard supports read() and write() operations no a
    single device. Some will require that the file descriptor is duplicated,
    rather than just opened once. This flag will cause duplication of a single 
    file descriptor.

  SB_Duplex
    SLab will configure the input and output sample resolution automatically,
    so do not select either of the above 8bit switches. SoundBlaster16 full
    duplex requires you configure 2 devices, one for readOnly, one for 
    writeOnly. Each device should be given the sbDuplex flag. SLab will
    select 16bitIn/8bitOut when recording data, and 8bitIn/16bitOut when 
    just playing data. The recorded data resolution is then always the 
    maximum available, and the normal playing resolution is also the same
    high quality. When recording, the output quality is considerably lower.
    Refer to the Algorithms section for output noise reduction in 8 bit
    modes.

  8bitIn
    The input channel will be configured to read 8 bit samples, rather than
    the usual 16 bit CD quality. Internal conversions will actually change
    the internal resolution to 16 bits to link to the mixiod audio tap, which
    only supports 16 bit sample resolutions.

  8bitOut
    The output channel will be configured to write 8 bit samples, rather than
    the usual 16 bit CD quality. Internal conversions will change the internal
    resolution to 8 bits to write to the output device.

  Old Ioclt()
    There are two different algorithms which can be used to configure the audio
    devices. The old ioctl() option is a requirement for SB_Duplex support, but
    this is not enforced. The reason for SB Duplex requiring the older ioctl()
    sequences is that the new sequences do not support configuring unbalanced
    input and output bit resolutions. NOTE: A device which does not have the
    subFragment option enabled will always use old ioctl, irrespective of how
    this option is configured.

  NoControls
    Useful on some audio cards where OSS does not support any on-board
    mixing capabilities. When this button is selected SLab will never
    attempt to alter the board mix, nor select input devices, etc (the
    board mix is, for example, the volume of the MIC input, volume of
    the line input, PCM volumes). This would be used for boards that are
    just a raw IO device, or where we prefer to use another application
    to mix the audio channels on this card.

If your system configuration (number and type of audio cards) and CPU
performance permit, you can configure full duplex IO on all interfaces,
simultaneously.

It is possible to configure the devices to be 8bit resolution in both 
directions but unless you configure your song to use compression then the
disk resident data is still 16 bits per sample due to convergence algorithms.
If you want 8 bits of disk resident data as well then select compression, and 
preferably use the shift/trunc compression algorithm on each track. The other
compression algorithms are also available in 8bit mode, but will actually
produce reduced sound quality.

Further details of audio device configuration is provided in readme.soundcards.


POTMETERS
---------

The SLab potmeters are rotary controllers, and really work much as a normal
sliding scaler. The only real difference it that the display is a rotary
control, rather than a scroll bar, and tracking of the mouse will per default
occur in two dimensions, ie, in most instances the position of the potmeter
will be pointing at the mouse cursor. Since SLab release 2.1 there are a
number of options for the "feel" of the potmeter, ie, how it responds to
mouse movement. The default setting is 4 below, and the full list of
options for mouse tracking are:

0. Left/Right Up/Down with "PickUp Pointer on Alignment"
This was introduced in SLab 2.0, where a potmeter is selected for motion
when entering and pressing the first mousebutton. After that, gentle left
and right motions, or gentle up down motion depending on which is is greater,
will move the pot. If the pointer is outside the limits of the pot, AND the
pot point comes into alignment with the position of the mouse, then the
pot point would be "picked up" by the mouse, and would continue to track
the mouse position in 2 dimensions. If the mouse re-enters the limits of
the potmeter, the tracking would return to LR/UD. The main benefit of this
approach is that small alterations are possible with small mouse movement
without the pointer being too sensitive (it does not jump as soon as the
mouse leaves the potmeter), and big changes can still be achieved by
dragging into alignment.

1. Left/Right only
This is the "look and feel" of SLab 1.0, where the potmeter would only move 
according to horizontal movement of the mouse. Moving the pot pointer just
requires you enter the desired potmeter, and pull left to lower, and right
to raise the pot value.

2. Left/Right, Up/Down with "Permanant PickUp on Out of Potmeter"
This was introduced largely due to compaints about option 2 above. In this
scenario we begin with option 0, but as soon as the mouse leaves the area
of the potmeter display the pot pointer will jump to track the mouse, and
will then keep mouse tracking permanantly. It will NOT return to small
left/right/up/down motions on re-entering the pot. As such it will become
rather sensitive as the mouse gets closer to the pot, and becomes highly
erratic when the pointer is again inside the limits of the potmeter display.

3. Left/Right, Up,Down with "PickUp on Out of Potmeter"
This works as per option 2, where the potmeter pointer will jump to track
the mouse if the mouse is outside the realms of the pot display. However, 
when the pot re-enters the pot display, control will return to be small
left/right/up/down shuffles of the mouse.

4. Left/Right, Up/Down with "PickUp Well Outside of Potmeter"
This works as per option 4, where the potmeter pointer will jump to track
the mouse if the mouse is outside the realms of the pot display, but a 
"fudge factor" is applied to ensure the mouse is indeed well outside of the
potmeter. When the pot re-enters the pot display, control will return to be
small left/right/up/down shuffles of the mouse. This will reduce the
sensitivity of the mouse for small left/right alterations. The current fixed
fudge factor is "2", and there are no intentions to change this or make it
configurable.

5. Always track mouse.
Potmeter pointer will always follow the mouse. This is rather awkward for
small changes, when the mouse button is first pressed inside the potmeter,
the point will beahve rather erratically.

6. Up Down Only.
Potmeter point will move according to up/down motion of the mouse only.

The mouse tracking options are configured in the "Views->Change Studio View..."
configuration sheet. These options are expected to cater for most needs, so
select the one that best suits your style. If you have suggestions about 
alternative tracking options, send me an EMail.

The potmeters support keyboard input for motion control. The up/right arrows,
and the "k" key will increment the potmeter value. The down/left arrows and
"j" key will decrement the value.

For some inexplicable reason, potmeter tracking can be selected per song, 
and is saved in the baseline file. There are arguments to suggest that 
SLab needs its own .slabrc file, for some global preferences. This may be
implemented at a later date. Some of the main parameters can be configured
in the file $SLAB_HOME/libtcl/StartSLab.tcl, including the potTracking option.

MICROMIXING
-----------

The "microMixer" is the set of slider controls towards the top of the
StudioSLab master section. The microMixer is used to manage all the audio
devices globally.

The input sources can be selected from the buttons. This selection will 
configure all the configured audio cards to record from that device. For
example, if the Line button is selected, all the cards will record from the
line input. The input is then rcorded onto the tracks where the input button
on the track "blade" is selected. In short, the microMixer defines what is
to be recorded, and the track blades define on which track it will be put.

The audio device mixer can be controlled from here, and the changes are applied
to all the available devices. If we alter the levels of the microMix control
for the PCM, then the PCM output levels of all devices will be altered
accordingly.

There are obvious limitations with this approach. It is feasable that we have
2 cards installed, but whilst card one may have Line, CD, Mic, PCM and FM, the
other card may not have some of these features, so the microMix controllers
may not be complete. To provide more selective audio device configuration, you
can open the DeviceSLab. This will give access to all the OSS devices,
with a panel for each device. Within the deviceSLab it is possible to configure
mixed inputs and outputs, and several record sources independently. If this
does not achieve the required result then devices can be configured to have
no internal control, and then a third party application can be used to mix
the audio device. This is done with the NoControls button in the StudioDevices
menu. If desired, the third party application can be built in to the MixSLab
via the integration features discussed in the "INTEGRATION" section.

The microMixer is really a macro that calls the DeviceSLab for each device.
The audio configuration will be taken from the most recent operation.

ALGORITHMS
----------

From the "Audio->Algorithms..." pulldown menu there are a few different 
algorithms which can be configured to alter the mixing process. Most of these
should be left at the default value. At the moment the main sections are:

1. "Input Algorithm" section.
2. "Mix Algorithm" section.
3. "Sub Mix Algorithm" section.
4. "Output Algorithm" section.

5. "Noise Reduction" section.

The first allows you to configure an input algorithm, which should be left
as default. The only function it now fills is 44.1 to 22 kiloHertz translation.
The fourth section defines the output algorithm. There is one option which
supports the wow/flutter configuration parameters from the "Audio->Analogue..."
parameters window, which only works in 44.1kHz native.

The 2nd/3rd section has a number of algorithms which will be interesting, the
rest are "deprecated", and were largely used for testing. They will be dropped
eventually. The Mix and SubMix really work in pairs, where the mix algorithms
checks on data availability from the disk and the input audio device, and calls
the SubMix to mix any outbound data. The SubMix secion is the actual workhorse.
It takes the configured tracks and applies filters, sends, returns, VU meters
etc. The useful pairs of Mix/SubMix are:

a. mixAlgo_16bit_duplex2/subMixAlgo4
b. mixAlgo_16bit_stripped/subMixAlgo_stripped
c. mixAlgo_16bit_duplex3/subMixAlgo5
d. mixAlgo_float/subMixfloat

Selection 'a' is the base mixing algorithms. It will do all tracks, all filters,
one pre and one post send, all pans, all VU meters.

Selection 'b' is stripped of extra operations for speed. It does no VU meters,
no sends, no filters, no returns. It should be able to mix more tracks. There
may be some interesting pairings of playAlgo_16bit_duplex2/subMixAlgo_stripped
if you think you are getting any data overruns when recording. When you have
finnished recording you can jump back to the default algorithms.

Selection 'c' is really intended for post 1.0 code. This is the only pair that
implement more than 2 audio devices. In addition there are 2 pre and 2 post
send potmeters. SubMixAlgo5 is the only algorithm at the moment that implements
the track dynamics (noisegate/compressor/limitor), and that manages mixdown 
to any of the 8 available audio devices. The other algorithms will only mix
to the primary audio device (main output).

Option 'd' is for floating point mixing, implemented in release 3.0 and later.
This algorithm will take recorded data at native resolution (16 bit), and 
convert the data into floating points into the mix algorithm. The floating 
point mix algorithm is also fully bussed, which means there is no relationship
between the disk track and the mixer track. The audio source of each blade in
the mixing desk is selected with buttons at the top of the blade, and there
is one button for each track in the disk file. This has major benefits in
terms of being able to mix the same disk track multiple times with different
FX active, or with different output devices and panning params.
The fully bussed algorithm also also you to define you own mixer. The Studio
Builder allows you to configure the content of each blade, either globally so
that each blade has your own set of operators, or uniquely on a track by
track basis.

There will probably be new mix algorithms made available for future releases
which support more sends etc (and fewer supportable tracks!). These should
be added to the available palatte, rather than replacing them, so that new 
releases should not really require more CPU activity unless the new features
are actively put into production.

If you have devices that are going to record in 8 bit mode then the 
Algorithms screen will give access to a noise reduction parameter.
This section will apply some bias to the high end dynamics to reduce noise
at the 8 bit sampled zero crossing points at the expense of some digital
accuracy. The current palatte of algorithms are just linear (ie, no net
justification) and exponential which applias perhaps rather excessive 
bais to high end dynamics. If these aglorithms are useful the selection
will be extended, let me know.

Similarly if you have devices that are going to be used as 8 bit output,
including SB_Duplex enabled devices, then the output noise levels may be
quite high. The Algorithms screen will give access to configurable output
noise reduction code which can improve the signal to noise ratio induced
by the convergence to 8bit from the internal format. Reductions of 6, 12
and 18 dB are available, although the actual reduction will be slightly
better than this figure. Due to the characteristics of reduction algorithm
it is possible that the higher values will reduce signal to noise but will
introduce other forms of distortion (typically clipping) which will appear
to make the output signal worse. Choose the value which gives the best
results on your soundcard.
In addition, if you do have SoundBlaster cards, then you can further reduce 
the "hissy" 8 bit output by using an automatic reduction in the Treble
level. This is done with another section in the algorithms screen. The
treble levels are returned to the original level when recording is stopped.

The algorithm selections can be saved between invocations, see baselining
setion.

STUDIO BUILDER
--------------

The studio builder is a requestor panel that allows you to build a base mixer
for floating point mixing (only). This panel allows you define the number of
blades in the mixing desk, the screen resolution (high or low resosolution
displays), and the number of operators per track. Once you have defined the
number of operators you can then configure what each track will look like.

The builder will give a graphic representation of a single blade, and you 
can select which operators are active. The operators are applied in the sequence
in which you define them, so for example, if you want a filter and then an 
effect such as reverb, you can define whether the track data is filtered before
or after the reverb is applied, and the net audio results will be different.

The mixer design will be applied to all tracks in the mixer. It is still 
possible to alter the mixer configuration afterwards. Each track can be edited
independantly using a floating menu under the name of the operator. Using the
per track features you can have tracks one and two have a filter and then a
reverb, but tracks three and four may have an echo and then a compressor.

The palette of operators is fixed, and currently consists of:

    filter
    Qfilter     Some filter algorithms
    ResFilter

    Send
    PostSend

    Monitor        VU measurement algorithm - insertable anywhere in mix

    NoiseGate
    Compressor    Some dynamics algorithms
    Limitor

    Reverb
    Echo
    Chorus        Some generic effects
    Delay

If you would like to have additional operators available, please submit a 
request via EMail. These "in-line" effects are intended to be very general 
ones, applicable to most sound sources. Special effects such as distortion, or
leslie type effects, which tend to be specific to certain instruments, should
be available via the send busses rather than integrated into the mixing 
algorithm.

Note that the "monitor" operator can be inserted anywhere in the track mix. 
This can be used to track down excess signals so that VU measurement is made
before or after any given operator. You can insert multiple monitors per track
but the visible output will only be for the last in the chain.

With floating point "fully bussed" mixes, each track has a gain potmeter at
the top of the blade. This has dual operation, when recording it defines the
input gain, and when playing it acts as a "trim" for the data from the disk.
This should be used to trim the data signal from disk into the first operator
on the blade for optimal signal level.


DIGITAL PARAMETERS
-------------------

The digital parameters section primarily allows to to view the songfile 
parameters. The resolution, trackcount, block sample size and compression
class cannot be changed, they are defined only when the song is created.

You can change the sample rate, which is only really useful if you intend
to record at half speed in a lower register, for example, so fast/difficult
sections of music can be recorded slowly.

Audio Window Size:
This parameter changes the output buffering capacity. This buffer size
has a major effect on the responsiveness of the complete mix. You
may find that when you alter a track parameter, the actual change is only
audible a fraction of a second later. This is due to 2 factors, firstly the
blockSampleSize, and secondly the output buffer size. As of this release it
is not possible to alter the blocking factor, but you can reduce the number
of output buffers. Each buffer contains a sample block of data for each
of the stereo channels for each device. Using fewer buffers will give better
response since there is less "forward mixed" data in the mixing pipeline.

Device Window Size:
This is the number of audio fragments written to the output file descriptor
ahead of the audio stream. Using a smaller buffer factor may have adverse
effects similar to the Audio Window, but is required on systems with low 
memory, since they cannot dedicate much buffer space to audio device.
Only applies to the subFragmented devices.


One possible side effect of reducing the output buffer is that the
song may become sensitive to other programmes that are running on your 
system. If another process requests a large part of the CPU time, or has
high disk activity, then a small buffer may result in starvation of the
the audio device. The song will begin to "tick", much like a CD. Alternatively
you may feel that your CPU and disk speed can easily support the system load
and prefer to improve response times. In this case use a lower blocking 
factor when creating songs, and reduce the output buffer sizes accordingly.

ANALOGUE PARAMETERS
-------------------

The analogue paramters control the introduction of analogue distortion into 
the mix. There are 3 types of recording effects that can be introduced,
crosstalk, wow/flutter and vinylscratch.

CrossTalk
The crosstalk algorithm will cause varying amounts of data from one track to
"spill" across into the adjacent tracks. This occurs normally, even on the 
top of the range analogue multitrack recording desks. Each track is mixed
by devices which naturally have a tendency to transmit the signal they are
processing, and pick up signal from nearby components. The various components 
use in the mixing hardware are natural transmitter/receiver circuits. Although
the effects of radio interference is greatly reduced by circuit design they
still exhibit the effects, and manufacturers quote the "dB" level of crosstalk
of their products. Even when a track is faded to completely off, some amounts
of the audio data can still be audible. The CrossTalk algorithm reproduces
this effect, with varying amounts of signal that can leak between adjacent
tracks.

Wow/Flutter
Wow and flutter are introduced into a recording largely due to physical 
distortion of the media on which the sound is recorded. On a tape, for example,
as it is pulled over the recording heads, can fluctuate in its length, or the
motors driving the tape can have more pull as the engine is driven depending
on the motor's rotational position. A vinyl recording will give this distortion
if the turntable does not rotate at a constant frequency, it can speed up and
slow down during even one rotation depending on the drive characteristics.
The wow/flutter algorithm has parameters controling the speed and depth of
the distortions which are introduced.

Vinyl scratch
This is the well known effect of light hiss and pops on an old record, usually
introduced by either dumping the needle on the record, bad handling of the
record (dustly sleaves are very common), or just of discharge of static 
electricity from the needle which builds up as the vinyl records rotates under
the needle. This effect has been used to remarkable effect by Madonna, Massive
Attack, Portishead, and before them Prefab Sprout, on numerous recordings.
Used at very low levels can liven up a recording remarkably. Used at high
levels can sound like an old 1940's 78 RPM bakelite disk.



Digitally recorded audio signals will typically not be affected by any of the
above distortions due to the media - the recorded data is very strongly linked
to the sample clock, and is resident on a very reliable digital media. Digital
recording studios will do their utmost to reduce digital audio side-effects
by using oversampling converters, and extra internal processing headroom on
samples. Since they can annihilate the usual analogue distortions the net
result can be a very clinical recording. These parameters are intended to
"dirty" up a recording in order to give a warmer sound. They can be applied
subtly, in almost inaudible amounts, or grossly, depending on requirements.

CrossTalk is a rather CPU intensive operation at the moment, you may prefer
not to use it!


RECORDING
---------

QuickStart:
1. Select input device from microMixer (line, pcm, mic etc).
2. Select record button on desired track (button at very top of track).
3. Configure input gain on red potmeter for selected tracks.
4. Press the "recPause" button on the TapeSLab.
5. Press "Play" on the TapeSLab.

In somewhat more detail, there are a few steps for recording:

Assuming the devices are set up correctly, we need to select one of the L/R
inputs to configure the physical audio channel be recorded to a track. Then
the gain potentiometer should result in a signal somewhere in the yellow/orange
zone:

1. Push the L/R input selection buttons on the track(s) you will to sample.
    There is a pair of L/R buttons for each device configured. The Left button
    is numbered as per the device identifier, and the right button is labelled
    'R'. For example, if you only have one device you will see two buttons at
    the top of the track blade, one with the letter 'L', and one with the letter
    'R'. These buttons will link the stereo channel of the given device to
    this track. The channel can only be assigned to one track at once, and
    when that track is selected the "gain", or red potmeter will control the
    IGain (input gain) parameter for that channel of the device.
2. Select the input mix from the "microMix" section on the master controls.
    The MicroMix section interfaces to the audio devices for onboard IO mixing.
    We can select the input device (Mic, Line, CD etc), but we adjust the
    recording levels with the track gains individually. You may find that some
    cards do not support the IGAIN parameter, in which case the track gain 
    will be ineffective, and you will need to use the microMixer, or DeviceSLab.

You can test the input signal level by stopping the tape, and the input VU
meter will measure the signal from the input device. If you now play the
instrument you want to record, alterations can be made to the track gain
(red) potentiometer until the inbound signal is at the required level. You
may need to use the DeviceSLab in a few special cases.

3. Rewind the tape (or position to desired location).
4. Set tape to record/pause. (VU meters go dead until the tape is started).
5. Set tape to start.

Steps 3 to 5 are necessary for each recording operation.

The track "gain" control is the only track parameters which has a link to the
physical audio interface, all the others are in the internal digital domain.
This parameter is used to set the OSS input gain for the selected input
device (CD, Line, Mic, etc). The input gain is in independent memory for each
track, which you can override with the MicroMix section. The optimum signal
level for recording is indicated by the yellow LEDs in the VU meter. Optimally
you should aim the input gain to take the signal into this zone. The orange
display is also acceptable, but you should avoid the red LED, since it will
indicate some clipping. Clipping is not a major issue, if it is very 
intermittant, and only the peak signal is clipped (the solid bar is the VU
level, and the single top LED is the peak). If the VU signal goes into the 
red, ie, all LEDs are lit, then the gain really needs to be reduced.

MASTERING OUTPUT
----------------

It is possible to save a copy of the audio output data from the main output
to a disk resident file. This facility can be accessed via the menu option
"Audio->Sound Source->Mastering Output". You will be prompted to provide a
file name for the output and the file type, selected from either raw output
or cdr Redbook format. All the data from the next "Play", until the
following "Stop" will be copied to this file. This is literally the data
which is written to the output devices. The data is saved as stereo
interleaved samples at the resolution and samplerate configured for the
main output device, with some light reformatting for cdr support. If the
output data is not 16bit stereo the cdr format will not work.

If no filename is given then the default is to take the current song file
and append an extension (.raw or .cdr) depending on the configured file type.
Files of this type will be automatically linked in to the CD Mastering frontend.

The Mastering Output is disabled after a "take" has been made, and will have
to be re-enabled for a second take. The filename will remain consistent 
across takes, but is not saved to the baseline files.

A future release, probably SLab 4.0, will have a frontend for a CD master
burner, and the intention is to take the mastered audio out, and allow for
CD track sequencing, auditioning, and eventual burning to be supported.

[Note that this functionality is NOT in Slab 2.30].

CD MASTERING
------------

CD Mastering is a feature built into 4.0 codestreams. This is just a front end
to a cd burner of your choice (well, two of my choice anyway).

The burner frontend will display tracks from the MASTERING OUTPUT features of
SLab for the current active song. You are able to alter track sequences and
audition the CD before it is burnt.

As of the first release, the burner supports 5 suppliers of burners, but you
should note that Kodak, IMS and Philips all use the same product, so they are
selected in unison.

RESAMPLING
----------

The main output can be re-recorded onto any selected track by using the toggle
"Audio->Sound Source" menu option. In this case, when recording, the
display will flash "mainOut", rather than "mainIn". This is not really
a nice interface, a button will be added somewhere in the future. When re-
record is selected, data is taken out of the mix pipe at the last stage, and
sent back to the disk IO daemon. The signal is not converted to analogue and
resampled, but is handled completely in the digital domain.

If the main out is rerecorded, it can be sent to any two tracks, with the 
normal record "L" and "R" buttons on the track blade. The output of several
tracks can be summed, with filters and effects, back onto 2 tracks. These two
tracks can then be panned hard left and hard right to maintain the stereo
signal.

PUNCH IN/PUNCH OUT
------------------

Punch In/Punch Out is the ability to just record some data onto a track for the
duration of a button press. This allows overwriting intermittant technical
errors by musicians, or noise, which is heard in a recording. Either the 
musician plays along to the recorded material, staying in sync, and the new
part it punched in over the faulty part, or the input signal is kept quite,
and noise is punched out.

To use this feature, first select the tracks you want to punch with the record
buttons at the top of each track. Then activate the PIPO operation with the
"PIPO" button in the TapeSLab.

Use a normal rec/pause->Play operation, and hit the Punch button (visible as
"-O-" in the TapeSLab) when desired. Only the audio signal present with the
punch button is pressed will be written to the track.

Active PIPO will track the autoRecord Off status from the View->Options menu.
The new data is mixed into the existing track with a fast bowtie crossfade
which prevents ticking if the signal levels to not match exactly. There are
no alternative punch algorithms available at the moment. If this is not
acceptable, ie, it gives undesirable results such as pumping, then new methods
can be integrated on demand. 

Punch operations cannot be undone at the moment, so be careful.....


INPUT NOISE REDUCTION
---------------------

Algorithms are built into the disk IO daemon to allow it to do input signal
noise reduction. The signal is first put through the dynamics algorithm which
can apply signal gating, compression or limitation. After that the signal
is passed through a digital filter to remove unwanted signal components.

Access to the noise reduction parameters is available from the menu under
"Audio->Input Noise Reduction". This page will provide all the parameters
for each device, left and right channels. Each channel can be configured
independently to allow different noise reduction characteristics. The
parameters are saved into the baseline file.

Input dynamics:
This algorithm uses the SLab dynamics algorithm, giving access to a noisegate,
2 compressors, 2 limitors and a compander. Descriptions of these algorithms
are given in the Dynamics help section.
The input dynamics section per default will apply a noisegate, but other
algorithms can be applied. If the signal has no active component then the
corresponding section of sampled audio is not saved to disk. This not only
saves diskspace by removing "silent" sections of sound, but when the track
is replayed, any hiss from the silent signal is removed, improving the 
general signal to noise ratio.

To use this effectively you should adjust the limit, or sensitivity, such that
a signal containing only noise will not open the gate. The gain, attack and
decay can then be applied to alter the total signal strength, and the rates to
which the signal attacks to this level, and decays to zero afterwards. The
other algorithms can be employed similarly. Note that the compressor algorithm
can be used as input signal level auto adjustment. This does not remove the
requirement to adjust the input gain parameter, however, since these algorithms
work purely in the digital domain, and do not link to the analogue audio 
channel on the audio device. We still need to adjust the input gain to ensure
the signal is in a suitable area of the sampling range to get maximum signal
level with minimal distortion.



Input filtering:
This uses the SLab digital filters section, giving access to all 7 filter
algorithms. The idea is that using a filter with a bass and treble shelving
component can be used to remove hiss at the high end and hum at the low end
of the frequency spectrum.

To get the most out of the filter section you need to be aware that if the
signal gain level is set to 256, there will be no net signal variation. If
the gain is lowered, there will be reduction in signal levels above the
cutoff frequency (high pass shelving), and below the cutoff (low pass).
using algorithm 1, which has just gain and cuttof controls, adjust both gain
potentiometers to be zero, maximum signal reduction. Then adjust the cutoff
controls such that they remove the unwanted signal components. Exactly where
you adjust the filters depends on the signal you are recording. A low frequency
sound can have hiss removed very effectively by taking the high cutoff to
zero, and the low gain to 256. This results in no net low frequency adjustments,
but maximum high frequency hiss removal.

Filter algorithm 6 can be used quite effectively as well, allowing for 
reduction in the high frequency hiss, low frequency hum, but also maximisation
of the active signal component by application of the parametric "mid" controls
with a suitably wide Q factor.



Eventually the input signal manipulation controls will be moved onto each 
track, rather than into a separate window. The algorithms will always be applied
to a physical audio channel, but having one entry per track will allow for 
settings to be memorised for each instrument we record, and then applied to the
selected input channel if we re-record that track. The only reason this has
not been done yet is that it would require about 1600x1200 of display to be
able to visualise the resulting height of the track blade.
Later releases may implement some more dynamic noise reduction and noise
removal algorithms, rather than just gating and filtering. The noise removal
algorithms may however be moved to the WaveSLab, where they can be applied
selectively to sections of audio data.

NOTE:
Using the dynamics section to define which data is saved to disk can result
in a dubious result. If a track is recorded on top of another, parts of the
new track will not be saved. When replayed you will hear the remains of the
previous track through the silent sections of the new track. You are advised
for now to erase a track before re-recording it. Presently some flags will be
added to determine whether all data, or just new data, should be saved.


BUSSING
-------

There are 3 main areas to which bussing is applied. Firstly there is the
effects bussing, where the "sends" are applied to the track, and configured
to mix data to a bus location where effects can attach, and modulate the 
signal. Secondly there is stereo bus groupings, where several tracks can be
linked together and mixed as a section. Lastly there is device bussing, where
track can individually be mixed to any one of the available audio input/output
devices.

Effects bussing:

To send data to a bus, the send pot needs to be configured to the suitable
bus mix value, the bus ID entry should be set to the required bus, and the
pushbutton pressed to the 'I' position to activate. Changing busses requires
the pushbutton be released and pushed again, this is used to force the bus 
configuration. The send busses are numbered 1 to 8 for the pre-send (direct
data from disk), or 9 to 16 for the post-fader busses (the data is run 
through the digital dynamics sections, the digital filters section, and the
fader is applied before the audio is sent to the bus). Several tracks can be
mixed onto the same bus, and sent to the same effect.

To hear the modulated signal, the return bus needs to have its left and right
balance configured, and the volume set to a reasonable value (the volume pot
has a 3 decibel gain at full throw).

With regards to how bussing works, each "send" pot, and each effectbus
is actually mono. The 'send' just pulls data from the track, which is
also mono, into the send bus. The return busses are also mono, but just
as with the track mixing we can alter the amount of the returned mono
signal that is sent to the left side or the right side pan. The return
panel has volume, plus a component for each of the stereo pans of the
returned signal.

A stereo effect actually grabs two of the send/return busses, one for
each of its stereo channels. If I attach the stchorus (stereoChorus)
to bus_1, it will also automatically grab bus_2 for its stereo linked 
channel, and it should actually fail if the second bus is already in 
use. This effect is MONO_IN, so it will only manipulate the data
sent to bus_1. However the chorussed signal comes back on both the
return busses. For maximum stereo diffusion I then:

set return bus 1 to have full left and no right signal return, 
set return bus 2 to have no left and full right signal return.

If an effect is stereo_in/stereo_out (only the stereographic at the
moment) it will manipulate the signal on both of the send busses, and
return the manipulated signal to each bus. The mono_in/stereo_out
effects just overwrite any data that is sent to the second bus. See
effects chaining section more details.

Effects attachments are from a pop-up menu on the return bus controls. The
menu gives several options. Firstly we can have no effect, but have the output
normalled (ie, the signal path is shorted) to either the main out or an
aux out. The aux out is sent to the one of the configured audio devices (see
above). Alternatively we can attach an effect, which brings up a list of the
effects available in the effects directory, plus the output device we want.
Normalling a bus to an aux output device will allow quadraphonic mixing to
a second set of speakers. Up to 16 outputs (8 stereo) are supported.

Once effects have been attached there are another 2 options for effects 
connection to tracks. Firstly the track can be dragged to the return bus or
to the effect. The interface will then set the bus selection and activate the
send pot. Alternatively it should be possible to drag either the effect or the
return bus to the track, and drop it to connect the bus.

Effects busses can be bypassed using the "button" on which the return bus
text is displayed. When depressed the button turns red, and the bus is then
inactive, and the pure, unmodified, send signal is returned to the audio dev.

Stereo bus groups:

Attaching a track to a stereo bus requires it be connected to a given bus
using the pulldown bus menu, one of the buttons on the track blade.
Any or all tracks can be sent to any given stereo bus, and then mixed as a
group of tracks on the bus. Drag and dropping of stereo busses has not yet
been implemented. The intention of the stereo bus groups is to assign, for
example, all drum tracks to one stereo bus, all rythm instruments to another
stereo bus. Then, whilst each instrument can be mixed down individually to 
a bus, the groups of instruments can be mixed as a whole unit. This allows the
"DrumSet" to be lowered in volume in one go, rather than each drum track
individually.

At the moment there are no effects attachments possible at either the stereo
busses, main outs, or filters which can be applied to the bus. Future releases
will address this, allowing stereo bus effects and bus filters. The intention 
is also to apply filters to the effects returns busses. Extensions to provide
effects chaining will be made available in SLab 2.20, see relevant section.

The post send potmeters send a signal which is taken after the fader. As such
the fader controls the actual signal level sent to the post fade busses. An
additional feature of post send bussing is the use of the fader with a track
either muted, or sent to a stereo bus with zeroed gain. In this configuration
it is possible to send tracks to stereo effects, after applying filters, and
after fading, and only hear the data which is returned via the effect (the
track is muted). When used with subMixAlgo5, this gives the capability to 
reproduce stereo effect insertions per track.

Device Bussing:

In addition to effects and stereo busses, it is also possible to assign tracks
to physical audio devices. This feature is only implemented in subMixAlgo5,
when a set of buttons will be packed into the top of the StudioSLab and an
extra menu is added to the track float menu. The buttons, and menu, allow
the left and right panned components of each track be sent to a selected 
audio device. This makes it possible to mix a track to a second audio device 
for very extensive multiphonic mixes. It also allows, for example, the left
pan signal be sent to the main output device, and the right pan signal to
be mixed to a secondary output device. Due to the mixing algorithm is it
still possible to apply stereo bussing to a track, whilst mixing its output
to separate audio devices. The stereo bus mixing is applied before the output
device selection is made. Groups of tracks can be controlled by a stereo
bus, but then mixed out to separate audio devices.

CHAINSLAB
---------

Effects chaining is a SLab 2.20 feature, giving the ability to link several
effects to a single send bus. This has major advantages over placing just
a single effect on a send bus. Before 2.20 if somebody wanted to modify
a track with both echo and flanger, then the echo would have to be applied
and the track re-recorded, after which we could apply the flanger dynamically.

With 2.20 we can link both the echo and the flanger to an effects send bus, and 
modulate a single track via 2 effects simultaneously. The chaining of effects
is not limited to 2 effects, in total up to 64 effects can be loaded and 
chained to any depth your CPU will support.

To activate effects chains you just use the normal effects attachment methods.
Either use the bus pulldown menu to attach and effect, or drag the effect from
the MixSLab EffectsTool palette, and drop it on the bus. This will attach the
effect to the end of the current chain. If the effect is stereo it will also
attach to the end of the next chain (next send bus) for the stereo paired
channel.

In addition to just dragging and dropping effects it is possible to use the
ChainSLab to graphically view the effects chain attached to any send bus.
The ChainSLab is available from the return bus pulldown menu (3rd mouse
button).

The ChainSLab will give you the ability to manage the effect chain.
You can add new effects to the list, by dropping them on the "Append" button.
Effects can be inserted at the start of the chain using the "Prepend" button.
Using the floating menu on the effect icon you can remove effects, or replace
them. The remove effect on the floating menu will remove only that one effect.
The "Detach Effect" menu option of the return bus will now remove ALL effects
from a bus. This will not change, if you only want to alter certain effects 
then you will have to use the ChainSLab.

There are some issues with effects chaining that should be understood, mostly
do to with chaining a mixture of mono and stereo effects. These problems are
similar to those seen with normal effects boxes. The SLab effects suite has
3 effects types, mono in mono out, mono in stereo out, and stereo in stereo
out. The mono in/out effects attach to just one send bus. The stereo effects
attach to two busses: one that the effect is linked to and the next higher
sequentially. If we attach a stereo effect to bus 1, for example, it will
attach to bus 1, and bus 2 will be the return for the second channel. If the
effect is mono in stereo out it will only take data from the first channel,
but will return signal to both channels.

Why is this important? The issue stems from the possibility that we attach
2 mono in/out effects to bus 1 and bus 2, then we add a mono in stereo out
effect at the end of this chain. We will lose all data from the first effect
attached to bus 2 since the last effect will only take input from the first
bus, and will overwrite data returned to the second bus.

In addition, if you use the ChainSLab to replace a stereo effect halfway down
an effect chain, the first channel will insert at the desired position, but 
the second channel will insert at the end of the second bus. This may not be
the desired configuration.

For this reason it is advised that if you decide to chain a true stereo effect
(at the moment SLab only has the stereographic), then you should put it either
at the start or at the end. If you chain a mono in stereo out effect it should
be the first in the chain.

Effects chaining is ONLY implemented in subMixAlgo5. Attempting to chain
effects in any other subMixAlgorithm, but dropping new effects on a bus, will
just remove all existing effects, and then add the new ones. See the
algorithms section for details of subMixAlgo selection.

FX TRIMMING
-----------

Effects trimming is the ability to adjust the inbound and outbound signal
levels of an effect. This is especially useful for chaining, so that an 
effect with a relatively high output gain can successfully be chained to
another effeect which may have a high input gain, without leading to any
signal distortion. In short, it allows signal levels to be matched.

Trimming can be configured in two stages, first there is the default trim
configuration per effect, and secondly there is a per effect trim config.
The default settings will list each effect supported by SLab, and the values
you want to supply to trimming that effect when it is started. We can 
disable either of the in or outbound trims, and give then a gain value.
This is available from the "Audio" pulldown menu.

In addition each effect can be trimmed individually from the ChainSLab.
Each effect on a chain has a pulldown menu, and one of the options is
for trimming this specific invocation of the effect.

The effects trimming is available on both input and output of the effect,
but typically both will not be required. The configuration menus will allow
selective application of the trimming functions to locations where it is
needed. Since trimming will consume excess CPU, it should not be applied
too generously. For example, the first effect in a chain should not require
inbound trimming since typically it can be applied by the send busses.
Similarly the last effect in a chain should not require outbound trimming
for the same reason.

At the moment, the default trims are disabled, and the default gain level 
configured when a new song is created is 0dB. If you alter the default 
values in an active mix, and then create a new song file, the new song 
will have the same defaults as the previous song, thereby maintaining your
configured default values.

FILTERS
-------

The track filters consists of 7 parameters, an activation switch and a filter
algorithm input. There are 7 algorithms available, one of which can be used
per track, independently of the other tracks. The algorithms number is entered
by highlighting the algo number, and (re)applying the activation button. All
algorithms implement 2 shelving filters, one with a low pass algorithm and one
with a high pass algorithm. The 2 are combined in algorithms 3 and 4 to give
both single-notch and single-bandpass algorithms. These last 2 filter
algorithms are configured using the treble controls only.

The seven algorithms are as follows:

0 - configurable bass and treble gain only
    The only active control is the Gn potmeters. Treble is second from top on
    left, bass is second from top on right of EQ controls.
1 - configurable bass/treble gain and cutoff.
    Use the Fr and Gn controls to set the cutoff and gain.
    These are the top 4 filter potmeters, Treble on left, bass on right.
2 - gain, cutoff and feedback.
    Use the Fr, Gn and Sw.
    These are the top 6 filter potmeters, Treble on left, bass on right.
3 - Notch filter.
    Active parameters are the left controls - Frequency, Gain, and Q.
4 - BandPass filter.
    Active parameters are the left controls - Frequency, Gain, and Q.
5 - configurable bass and treble gain only
    As per algo 0, but with a dual poll cuttof.
6 - Hi and Lo shelving filters with gain and cutoff control, plus a Mid
    Parametric with control of freq, gain and Q.

The filters can be made to oscillate, rather noisily, if excessive feedback
is used at high gain. At lower feedback levels we can hear accentuation of
selective harmonics, depending on cutoff frequency.

The filter parameters are not very scientific, in as much as the relative 
filter frequencies need to be configured "by ear", I cannot give a reasonable
translation of the configured value to a given frequency. The Filter gains is
0Db at a potmeter value of 256. Full swing on the gain should be +6Db gain, and
the zero position should give a similar signal loss value. The eventual 
intention is to give better readouts on the parameter display, such that we
can state what the cutoff frequency is. This is expected post 1.0 release, 
since it is largely cosmetic.

Filter parameters can be copied from track to track by dragging a filter from
one track to another with the middle mouse button. This will set up the same
filter algorithm and parameter values in the destination filter.

With regards to which filters are applicable to which signals, the main factor
is what you hear. Filter 6 gives the most control, due to the implementation
of a parametric middle. The first 3 are basically the same, but algo 2, in
particular, can be used to accentuate certain frequencies using carefully
applied feedback. However, if you do not want to use the feedback, then use
algo 1 in preference to 2, due to a (rather marginal) performance improvement.
The BandPass algorithm should really be dropped, due to implementation of
algo 6 in SLab2.1, which has the parametric "bandpass" built in. However,
since algo 6 is pretty much a conjunction of algo 1 and algo 4, there remain
cases where the simplified filter is more useful than the conjunction, if not
just due to better performance.

DYNAMICS
--------

When using submixAlgo5 you will have access to a per track dynamics section.
This will allow noisegate, compressor, limitator or compander to be applied to
each track selectively. The algorithm is selected in the small black entry
window, and new algorithms are applied by pushing the DYN button. All the
algorithms will allow for signal trimming, where the audio data from the disk
can be adjusted to a predefined level before further manipulation by the
filters etc. The algorithms are as follows:

0 - NoiseGate.
    If the signal from the disk is lower than the Sense, the output will be
    zero. If the signal is greater than Sense the output signal will ramp up
    to the Gain level at the Attack rate. When the signal drops below the Sense
    the gain will ramp down to 0 at the Release rate. This algorithm does not
    use the Decay parameter.

1 - Compressor.
    If the signal from the disk is lower than the Sense, the output will be
    zero. If the signal is greater than Sense the output signal will ramp up
    at the Attack rate. The actual gain level is determined from the input
    signal such that the output signal should track the configured Gain, if
    the signal is lower than the Gain, it will ramp up at the configured 
    attack rate. If it is greater than the Gain, it will be ramped down at
    the configured Decay rate.
    When the signal drops below the Sense the gain will ramp down to 0 at
    the Release rate.

2 - Compressor2.
    If the signal from the disk is lower than the Sense, the output will be
    zero. If the signal is greater than Sense the output signal will ramp up
    at the Attack rate from a preloaded gain. The use of the preload will cater
    for signals with a sharp attach, but low overall signal level. The actual
    gain level is determined from the input signal such that the output signal
    should track the configured Gain. When the signal drops below the Sense
    the gain will ramp down to 0 at the Release rate.

3 - Limitor.
    If the signal is greater than Sense the excess output signal will be
    attenuated by the amount specified by the Attack. The overall signal will
    be adjusted by the configured Gain.

4 - Limitor2.
    This is the compressor algorithm, but will only apply signal attenuation
    when the VU level exceeds the configured gain. Algorithm includes gating
    operation, where the ramp up is via the configured Attack. If the signal
    is above Gain, gain will be ramped down at the configured Decay rate. If
    the signal is below Sense, gain will be ramped down at the Release rate.

5 - Compander.
    This is the compressor algorithm, but will only apply signal gain
    when the VU level is lower than the configured gain. Algorithm includes
    gating operation. This algorithm will provide for extended sustain on 
    tracks to which is it applied.

The Attack/Decay selection tracks the signal permanantly, the envelope does not
have to reach either max or min before it is retriggered. Dynamics are applied
after the pre-sends (so the presends can be RAW data), but before the filters
and VU meters.

All the algorithms will measure the inbound signal for max/RMS, although they
will not all use the measurements. The VU meters can display the input to the
digital dynamics VU reading by selecting the "Pre" monitor on the Studio VU
display (the "Post" monitor is the track signal after dynamic and harmonic
equalisation). The "Dyn" button, when activated, will change color to green
when the dynamics section is passing signal (ie, the gate is open). This is
provided to allow tuning of the Sensitivity of the dynamics algorithm.

BASELINING
----------

Each song you record (disk data file) has a default baseline file. The file
is located in the same directory as the song, is called ".dat", and
resides in $SLAB_HOME/dataBaseDiskFile/. It contains all the parameters
relating to the mix, including all volumes, pans, filter params, effects, gains,
VU Meter configs, tape memories, the lot. Mute/Solo and input L/R should be the
only exceptions. If there are other exceptions, they probably need to be fixed.

The default baseline is loaded with the song. Seperate baseline files can be
saved are retrieved using the File pulldown menu options "Save Baseline As..."
and "Load Baseline..." This allows several mixes of a song to be saved and 
retrieved, giving dub mixes, clean mixes, hot mixes, etc, all of which can have
different effects and track groupings.

The need to save a baseline after each session is quite important now that
compression has been introduced. If a track is recorded with compression 
enabled, the associated decompression algorithm MUST be used to retrieve the
track at the next mixing session. If a track is recorded with hybrid 
compression for example, but is replayed with amplitude decompression, the
result will be noise. Saving the baseline file after the recording session
will also save the track compression index.

The Studio now prompts a user as to whether the baseline has been saved
at the end of a session, this decission is left up to the user. Later
releases may request a baseline be saved if only changes have been made.

Creation of new songs will give a default baseline file. This will have
all StudioSLab mix settings configured to zero, but a number of active
parameters are taken from the current session. All audio devices should be
carried over to the new baseline file. All microMixer parameters will be
carried across and all DeviceSLab settings as well. The VU configuration 
will also be converged. The concept is that device settings will typically
be the same for a given installation, and to reduce work to reconfigure 
each new song, certain parameters are converged to each new song.

MIXDOWN SESSIONS
----------------

Mixdown Session Recording is the ability to save the changes made to the user
interface during a mixing session. For example, if, whilst playing a song,
the master volume control is gradually reduced to zero, the motion is recorded
by the frontend. Session playback can then be used so that the "fade out" will
always occur at the same point in the song.

From the TapeSLab there are two buttons to control mixdown sesion recording,
these are the sessRec and sessPlay. sessRec returns the deck to the start of
the track, and starts playing the deck, whilst recording all events which
happen on the continuous controllers. Recording is always mixed over the top of
existing mixes, so changes should be made only after saving your session.

The session playback or record will always be from "zero" on the song in
question. Release 3.10 extensions allow "random" starts for session recording
based on the TapeSLab memory buttons.

The File pulldown menu gives the capability to save one "default" mixdown
session, which is placed in the tape directory, and should be called
"songname.session". Futher mixdown sessions can be saved and recalled with the
other menu options, allowing several mixdowns to be saved for comparison.

Events can be stripped from the mixdown memory using the "Session Edit..."
facility. This rather basic edit feature is the current limit of SLabs features
in this area. Extensions will be made at a later date for graphical editing.
The "from/to" options of 3.10 and later are offsets that can be in samples, 
SMPTE frames, bars/beats, etc. Formats are:
ssssss (sample number), mm:ss:ff or mm:ss:ff.sss (smpte), bars/beats.

As explained, only continuous controllers are monitored at the moment, these
are all the pots and all the faders, including returns and effects. The 
current granularity of mixdown sessions is rather low, so changes will appear
rather "jagged". This will be improved in a later release as SMPTE sync is
integrated, since the requirements for SMPTE sync will need code changes to
increase time resolution. The current session is of a predetermined size, which
will also change in the future. Limit is about 8 thousand events, which is
not very large. If you use these features extensively then the limit can be
extended, let me know. The complete palatte of mixdown features will be 
rewritten when MIDI capabilities are integrated.

SYSTEM DEFAULTS
---------------

A set of default parameters for the application can be configured in the
file $SLAB_HOME/libtcl/StartSLab.tcl. This file is where the application kicks
off, and a set of user defined parameters can be entered. For example, if 
you want the application to know about 2 audio devices at startup, they
can both be configured in here. The default audio parametesr are /dev/audio
(half duplex), /dev/mixer, 8192 sample segments.

WAVESLAB
--------

The WaveSLab can either be opened as a separate application, or can be called
from the track access menus. Tracks can be added to the WaveSLab by dragging
them from the StudioSLab, or using the add and remove pull down menus. Multiple
tracks can be pulled into the same WaveSLab, allowing them to be edited with
the same set of selected samples.

Editing facilities can be applied by selecting sections of the wave, and then
either using the floating menu on the wave, pulling the wave to one of the 
tools icons, or pulling the tools icon to the wave. A tool can be applied to a 
whole track by dragging that tool to the track in the Studio. Each tool will
pull up a window into which various parameters are configured. The toolset
consists of:

   add
       Include display of another track into the current WaveSLab

   remove
       Remove a displayed track from the current WaveSLab

   cut
       The higlighted region of wave is removed from the given track. A 
       copy of the data is kept in a backout edit file.
        
   copy
       The higlighted region of wave is copied from the given track to a 
       a backout edit file. 

   paste
       The last backout edit file is pasted back to the given track. The
       start location and paste count can be entered. 

   undo
       The last Edit command is undone.

   normalisation
       Track is scanned once to find the peak signal levels, and a second
       pass is done adjusting the gain of the track such that the peak signal
       matches half the maximum signal level (if higher or lower gains are
       required, the default gain level of 128 may be adjusted upwards or
       downwards).

   merge
       The source track is mixed into the dest track with the respective
       volumes. The start and end locations can obviously be different areas
       of each track.

   gain
       Track is volume adjusted by the configured amount.

   reverse
       Track is sample swapped from start to end location.

   fade
       Track is faded according to the start gain and end gain configurations.
       The default values will give a fade out from max gain (256) down to 
       zero. For fade in, reverse the gain values.

   erase
       Track signal is zeroed.

   export
       Track section is exported to external file.

   import
       Track section is imported from external file. A copy of the original
       track data is kept in a backout edit file.

   loop
       The highlighted area of track wave is exported to a temporary file,
       and then played to the main output device (by an external programme
       called slabPlayer). The main output will be "pended" to prevent any
       unwanted interactions between the engine and the player.

In addition there is a set of buttons which control the extent of selections
from the mouse pointer:

   Frame
       Selections will be "snapped" to the nearest frame pointer. This requires
       the metronome and SMPTE display format be configured.

   Bar
       Selections will be "snapped" to the nearest Bar pointer. This requires
       the metronome be configured.

   Beat
       Selections will be "snapped" to the nearest Beat pointer. This requires
       the metronome be configured. Bar and Beat are mutually exclusive, you
       cannot configure both at the same time.

   ZeroFind
       "snap" all selections and mouse movements to the nearest rising zero
       crossing. For wave editing, this will considerably reduce clicks and
       pops from removed or inserted sample fragments. This can be used in
       conjunction with Bar and Beat to get zero crossing points for edits.

Each edit algorithm should cater for overlapping areas. Where possible, the
algorithms have been reused (merge/copy/gain/erase use same basic algorithm).

The wave can be scrolled using a scrolling slidebar at the lower edge of the
window, and there are two rotary controls, one for zooming into and out of
waves, and another for magnifying the samples to visualise signals at low gain.
The zoom control can zoom into subsamples, where each sample is displayed as
a bar in the wavemeter. When in subzoom mode, the Meta-MouseButton1 can be 
used as a freehand paintbrush to edit individual samples and waves.

Each wave display includes a status bar denoting information about the wave.
From left to right, the status fields are:

   Track   - The track displayed in this WaveMeter.
   Sample  - The sample number into this track. This follows the cursor X
             position, or vertical crosshair. Denotes the first sample number
             in the display when the cursor is out of the window.
   Value   - The value of the sample at the vertical crosshair, or the value
             of the first displayed sample when cursor is out of the window.
   SMPTE   - The SMPTE index into this track. The "Sample" is converted
             into an SMPTE formatted display, according to the SMPTE format
             configuration. Default is hh:mm:ss:ff.iii, where i is the sample
             index into the SMPTE frame. Default format is 24 fps.
   Bar     - This is the number of the current Bar where the cursoris located.
   Beat    - This is the number of the current Beat where the cursoris located.
   Select  - This is the sample number of the start of the selected area.
   Count   - The number of samples in the selected area.
   Zoom    - Zoom is the ability to stretch the display in or out. Positive
             Zoom factors will show gradually more of the wave within the
             display. Negative Zoom factors will show each sample as a bar in
             a graph, at which point individual samples will be "editable", and
             waves can be hand painted (using ). Zoom is
             controlled by the Zoom potmeter in the WaveSLab.
   Mag     - Mag displays the current wave magnification. Quiet sections of
             sound will typically be barely visible in the WaveSLab since the
             signal level will be very low. To enable viewing and editing of
             such sections, the WaveSLab can magnify the samples by this value.
             Magnification is controlled by a WaveSLab potmeter.
   Scale   - This is an internal factor used to alter the value of samples 
             such that they fit into the current wavemeter size. If the
             wavemeter is made larger by rescaling the WaveSLab window, the
             scale is adjusted to ensure the wave consumes a proportional 
             amount of the display window. Scale is affected by magnification
             factors, and should really be removed from the status bar - it
             is for internal consumption only.
   Lvl     - Level, represents the signal level denoted by the Y position,
             or horizontal crosshair, in the wavemeter. Can be used for 
             comparison of signal levels.
   SelEnd  - This is the sample number of the end of the selected area.
   X       - This is simply the current cursor X position within the widget.
   Y       - This is simply the current cursor Y position within the widget.

Edits are destructive, which means the source data file contents are altered.
There is however an undo facility, which allows n-backout editing. Each edit
operation will save a file of the original contents. This file can then be
reloaded back over the original data, thereby "undoing" an edit operation, but
they can also be selectively pasted onto other tracks, allowing for some
reasonably heavyweight loop manipulation. The "Edit History" section gives
details of these capabilities.

When edit operations are "undone", then the data from the backout file and
the track contents are swapped. Consequently an edit operation can be "undone"
several times, each time reverting back to the previous contents.

EDIT OPTIONS
------------

When one of the WaveSLab edits has been requested, you will be given a sheet
of requirements. This will be all the parameters required for the given
operation, and will include tracks on which to be operated, number of samples
to be operated on, and frequently the volumes to be applied to the tracks.

In addition, this sheet will request the tracks on which the operation is
to be carried out. The choices are:

1. This Track
Only operate on the tracks given in the requestor sheet.

2. WaveSLab SRC
Apply the same operation to all tracks in the current WaveSLab.
Each track will be taken in turn as the source track for the operation.
The dest track will remain the same, the one configured in the requestor sheet.

3. WaveSLab DST
Apply the same operation to all tracks in the current WaveSLab.
Each track will be taken in turn as the destination track for the operation.
The source track will remain the same, the one configured in the requestor
sheet.

4. All as Source
Apply the same operation to all tracks. Each track will be taken in turn as
the destination track for the operation. The source track will remain the same,
the one configured in the requestor sheet.

5. All as Dest
Apply the same operation to all tracks. Each track will be taken in turn as
the destination track for the operation. The source track will remain the same,
the one configured in the requestor sheet.

Options are requested for where the edit operation should commence:

1. At the current selection offset

2. From the nearest complete beat

3. From the nearest complete bar

This will just pull the edit operation into timing with any existing recordings.
The default is at the current active selection offset.


It is likely that only a subset of the available choices will be applicable
to any given operation, and where possible your choice will be limited. In
the event that both the source track and the dest track are the same, then
use of the WaveSLab options will apply the edit function to each displayed
track in turn. Thus, applying a Copy command of one track onto itself, moving
the whole track by a number of samples, and applying that to a complete 
WaveSLab, the same move operation will be done on all the tracks in the SLab.

In the case of the same source and dest track, and the "All" operators, then
the edit function will be applied in turn to each track in the song. For
example, using a fade request, and applying one of the "All" selectors, then
the fade will be applied to all tracks in the song, giving a complete song
fadeout.


EDIT HISTORY
------------

The EditSLab will give access to the full edit history of the current song.
All (well, most) edit operation will keep a backout edit file which can later
be used as either undoing an edit operation, or as the basis for a paste 
request. The backout files are non-volatile, so complete history is available
for the lifetime of a song, or until the files are removed. You can keep as
much edit history as your disk capacity will allow you. The edit history
gives access to all the backout files, allowing you to listen to the contents,
see where they originally came from, use them in cut an pastes, or remove 
them if they are no longer required (thereby freeing up disk space).

As of this release, each backout file keeps a note of the original file from
which it was taken (ie, the current song), plus a count of the number of 
samples and the offset into the file. Future backout file formats will include
the data type (samplerate, etc), so that sample libraries can be built across
several songs.

Note that recording onto a track does not save a backout file. Recording is
still completely destructive - you cannot undo such operations. If you are not
sure of what you want to record, either save existing track data beforehand,
or record onto an empty track.


VIEWS
-----

The mixing desk can be configured to provide several different views of the
available tracks to be mixed. The basic configuration is to have a panel of
tracks, and then the bussing/mastering section. The number of tracks in the
trackview can be configured, so for example it is possible to display 8 out
of 16 tracks simultaneously. Using a scrollbar you can scroll through the
availble 8 tracks to gain access to all 16.

In addition to this it is possible to have a dual track window. In this 
configuration a set of tracks are shown on the left of the mastering section,
and another set on the right. The two areas cannot overlap, but can be of
different length. For example, if I have 16 tracks in a song, I can display
tracks 1 to 8 on the left of the mastering section, and 9 to 12 on the right.
If the second section is scrolled up to show 13 to 16, then the lower section
can then be scrolled up to track 12 etc. The lower numbered tracks are always
on the left.

It is also possible to only display certain tracks. A pulldown menu is available
which allows you to remove tracks from the display, useful if you want to 
concentrate on only a subset of the available tracks during mixdown.

Finally it is possible to completely split the track display from the master
displays. All of the above sections then function in independant windows,
allowing maximal use of available on screen realestate. There are 3 alternatives
for a split mixer:
Joined - a single window.
Split - multiple windows: 2 if single view enabled, 3 if dual view enabled.
Half - if the mixer is dual view enabled then a half split view will have 2
windows, one for the tracks on the left of the mastering section, and one with
the mastering section and the rest of the tracks.

Most of these features are available from the "View->Change Studio View..."
menu. This gives access the the track view widths, the split mixer option
(completely separate windows), and the dual mixer option (two track portions).
Selecting which tracks should be displayed is done with the 
"View->Track Selection..." menu.

The TrackSLab is a single window that gives access to all the mixing features
for a track, just as in a single StudioSLab blade, but with extra realestate
available for presentation. The TrackSLab will adjust itself to the application
of different filter and dynamics algorithms, and is "easier" to read. A 
TrackSLab can be opened for as many tracks as are available in a song, and 
will allow concentration on a few particular tracks. When a TrackSLab is 
displayed, the corresponding track is unmapped from the StudioSLab.
[The late 2.0 beta code introduced the TrackSLab as an extra viewing feature.
Extensive testing has not been done, so issues may be present.]

Low Resolution Support
Running SLab on resolutions of 800x600 displays requires some changes
to the screen builds. This flag is used to denote this. SLab is not
going to work very well on systems with even lower resolution, since
systems with this kind of resolution are unlikely to have the CPU
capacity to driver the audio mixing algorithms.


OPTIONS
-------

The options requestor gives access to a few global configuration choices.
Current option parameters that can be accessed from this screen are:

    Offset display format
        Which SMPTE format to use for sample counts. This indicates whether
        to use just the SMPTE format, as above, or to include the .sss sample
        information.

    SMPTE display format
        Which SMPTE format to use. This configures the SMPTE resolution, in
        terms of frames per second.

    Potmeter mouse tracking
        There are several choices for how the potmeter point will track the
        mouse. Details can be found in the POTMETERS section, and this
        parameters configures all pots to follow a given tracking mechanism.

    AutoMute on record
        Silences a track whilst it is being (re)recorded.

    Auto Record Off
        Removed the record button activity after recording has taken place
        on a track.

    Input Gain Support
        If your soundcard does not support the INPUT_GAIN parameter you will
        get an error code param '12' when altering input gain. To prevent this
        you can configure input gain to be disabled. The gain pot will then
        track the most recent record source selection.

    WaveSLab ZeroCrossing detection
        Snaps WaveSLab selections to nearest wave.

    Tape Spooling Speed
        Rate at which the fast forward/rewind algorithm will run.

    HelpSLab font size
        This option is actually a bad name. It was originally the font used
        in the HelpSLab, but to support low resolution monitors (800x600) it
        is now used for numerous requestor sheets as well.

COMPRESSION FACILITIES
----------------------

Some basic compression algorithms are implemented as of release 2.1. The
compression capabilities provide fixed ratios of 2 to 1 and 4 to 1.
All the current algorithms are lossy.

Compression is broken up into two sections. Firstly, when creating a new song,
the user can specify the compression "Class". The selection is made from the
compression ratio. After that it is possible to seletively, per track, 
specify which compression algorithm is used on that track. The selection is
based on the compression index, which selects one of the algorithms which
conform to the given class. This two step approach adds complexity, but has
the advantage that different compression algorithms can be applied to
individual tracks.

There are four types of compression algorithm at the moment, these being:
1. time domain
2. amplitude domain
3. hybrid compression
4. trivial shift

The results of each algorithm really depend on the input.
Time domain compression will work very well, but at high frequencies and/or
high signal levels, will produce gradually worse results. The Amplitude
domain compression compensates for this loss of accuracy at high
frequencies, but will give a generally worse output signal over the
complete frequency spectrum. In other words, if you are compressing bass
instruments, or voice, time domain will produce very acceptable results. If
you have screeching guitar solos, cymbal smashes, or synthesiser square waves,
you will probably find amplitude domain provides better results. To overcome
the limitations of each of these algorithms, the hybrid code was developed.
Hybrid is a mixture of the above 2 algorithms, where the results of the time
domain compression with a larger space is then compressed in the amplitude
domain. The ratios remain the same, but the audio quality is improved
generally. This is probably the most CPU intensive code, so the trade off is
more CPU for better quality at the same compression ratio. The quality of
hybrid compression is generally the best over the complete signal range, and
it should be made into the default. Shift compression is extremely trivial,
but has some useful benefits for internal operations regarding the imlementation
of 8 bit IO (next major release). Each sample is shifted down to 8 bits for
compression, and shifted back up for decompression.

In addition, if you have requested 4 to 1 compression there is another factor
in operation, which is the decompression method. The 4 to 1 compression algo
actually discards every other sample, basically halving the sample rate. When
the song is replayed we can define different approaches to recovering the lost
data:

1. Every sample is duplicated.
2. Every other sample (the discarded samples) become zero, and we rely on the
filters to smooth this out. The decompression algorithm does not apply any
filtering, but this is arguably the correct method from a DSP perspective.
3. Every other sample is interpolated. This method is typically frowned upon
since the results can be very unattractive as the audio frequency approches
half the sampling frequency. This is not available for hybrid compression.

Decompression methods cn be changed freely after data is recorded, so 
comparison can be made between the different methods with regards to net
sound quality. Use the one that gives the most attractive results.

When you enable 4 to 1 compression each track will have another entry in the
floating track menu to alter the "Decompression Method" menu. The default
method is option 1 above, since whilst option 2 is the correct method, it leads
to problems with sample phasing when either reverb, delay, echo etc are
applied. If the delay line shifts the wave by an odd number of samples then
the lost data becomes interleaved, and if we try and "resample" this data,
we may be left with NULL outputs. To prevent this from happening we apply
option 1 as the default. If this is unacceptable, you are at will to alter
the decompression method independantly, per track. The WaveSLab will always 
use the DecompressionMethod specified for the given track. Note that this
can lead to problems if a wave is moved by an odd number of samples. The 
resulting data in the song file will be zero, since the active data samples
will now be in the redundant component that is discarded. It is left to the
user to decide how to manage this. In the future the libdaccess API will be
extended with options to control this factor.

Compression Class is defined at song creation time, and cannot be changed.
Compression Index is selectable from the track popup menu, available under
each track. Decompression Method is available under the track menu when 4 to 1
Compression Class has been configured for the song. The compression menus are
only visible on a song file created with Compression Enabled.

At the moment, and for the foreseable future, it is possible to change the
compression algorithm on pre-recorded track. This is a rather dangerous
operation, since it will produce completely arbitrary output: the
compression algorithm used to record the track may not be the same as the
decompression algorithm use to play the track. It would be preferable to
have the compression algorithm defined only on recording of data, but this
is being reserved for future study.

Future releases will implement further compression algorithms for non-lossy
audio compression, and hopefully also higher compression ratios (with higher
CPU requirements to fulfil).

The use of 4 to 1 compression versus 2 to 1 compression with reduced sampling
rate (22kHz vs 44.1kHz) may not be audible. Theoretically 4 to 1 compression
at 44.1kHz will give lower audible interharmonic distortion but higher anti-
alias noise than 2 to 1 at 22kHz. Rather than force any particular policy on
the user, SLab provides facilities for both methods. Use the one you find
to give the best audio quality.

Compression index, method and class are, of course, saved to the baseline files.

The mixiod is solely responsible for all the run time compression facilities.
The engine and audio daemons deal with pure audio data both to and from the 
mixiod.

IMPORT EXPORT FACILITIES
------------------------

Import and export allow users to bring files into the Studio, or save audio
data from the studio into external files.

For exporting a track or track, use the "Tape->Export..." menu globally, or
the track pulldown menu, or alternatively the WaveSLab, which has import and
exports tools. You can select up to two tracks, and set up stereo/mono, 8
or 16 bit, and a variety of sample speeds for the exported file.

The data actually exported by SLab is raw. If SLab can find the sox binary
file then it provides options to allow sox to do conversions to various other
files and speeds. In fact, even if you do not want other file types you are
advised to get sox, simply to do sample rate conversions. The resampling
algorithm implemented in sox is far more advanced than that used by SLab.

Importing is done similarly, from the "Tape->Import..." menu.

If you do _not_ have the sox binary:
Only importing and exporting at the disk file sampling rate has been well
tested. Conversion facilities are a part of the import/export code, but you
would be well advised to use another programme to do rate conversion. Future
releases may only be able to export at the native sampling rate/resolution
and it will be up to the user to convert to whatever format is required. The
main reason for advising use of external code is that SLab is designed to mix
and modulate audio, the conversion algorithms are pretty basic. However, at
the moment, the following conversions should work, although only the native
(ie, same internal and external sampling) rates have been extensively tested:

             Internal Sampling rate:
        48000   44100   22000   11000   8000

Export
  To
48000     Y       Y*      -       -       -

44100     Y*      Y       Y       -       -

28800     -       Y       -       -       -

22000     -       Y       Y       Y       -

14400     -       Y       Y       -       -

11000     -       Y       Y       Y       -

8000      -       Y       Y       -       Y

             Internal Sampling rate:
        48000   44100   22000   11000   8000
Import
 From
48000     Y       Y*      -       -       -

44100     Y*      Y       Y       Y       Y

28800     -       Y       -       -       -

22000     -       Y       Y       Y       Y

14400     -       Y       Y       -       -

11000     -       Y       Y       Y       -

8000      -       Y       Y       -       Y

* - only support 16 bit to 16 bit, no 8 bit imports/exports.

NOTE: You are expected to fill out the type, resolution, and sample rate of the
file, and the number of samples in advance. If you do not know how many samples
are in the file, put in a ridiculously large number, SLab will load as many as
possible. Otherwise, SLab will load as many as you request, and then terminate.
A future release will attempt to determine file type and contents.



METRONOME
---------

Support for the audio and edit metronome was a late 2.20 addition. There are
4 main areas for metronome configuration and feature set:

1. Requestor sheet added in Audio pull down meny for metronome configuration.
2. Audio IO daemon will insert metronome pulses at configured intervals.
3. Audio IO daemon re-adjusts input signal to synchronise to metronome.
4. WaveSLab will allow beat and bar edit selections.

The metronome requestor gives access to the global metronome enable (on, off,
record), metronome speed, volume, and signature. In addition this sheet gives
access to the input adjustment for IO synchronisation.
This is available from the "Audio->Metronome..." meu.

Point 3 was required since tests implied that the latency on read/write IO
can be highly audible delays, even on a full duplex device. Even if the
metronome pulses are placed at head of output buffer, the read data is offset
by between 1 and 3 thousand samples. The adjustment offsets will correct this
delay, such that the input channel will be slipped by this number of samples
to match input timing to output timing. The delay cannot be more than one
"blockSampleSize" at the moment.

The WaveSLab alterations, also documented in the WAVESLAB section, give the
display of the Bar and Beat points within a track. Seletions can be made on
complete bars and beats with drag and drop support for editing.

Extensions will be built to support assorted time codes (now really only
4/4 and 3/4, plus a few options), and eventually mixed time codes (long way
off). WaveSLab should also be extended with "tags" to mark regions of song
as chorus/verse, etc.


COLOURS
-------

As of release 2.1 it is possible to redefine the colors of the StudioSLab
potmeters and the WaveSLab images. Code alterations were put in place to
ensure the GUI would take .Xdefault preferences rather than intenal color
selections. The list at the moment is just for the continuous controllers,
but the lists will be extended to include other features. The main intention
is to allow a user to define the SLab interface to use the same colors
palatte as their favorite mixing desk. If somebody is used to having yellow
filter potmeters, then SLab should allow that.

Given below are some of the xrdb values respected by the SLab application.
The list is far from complete, and work is now going on to complete list.
This will allow user reconfiguration of the various components
of the SLab display (pot colors, VU meters, WaveMeters etc). If this is 
eventually released there will be little support for wierdo color schemes,
but I would like users to be able to redifine colors for the various pots
in the bladelist at least.

One of the biggest problems with XDefaults is that my naming structure used
during the sometimes hasty development of the GUI was not very good. Hence,
now applying Xdefaults is a problem. You live and learn. The full .Xdefaults
file is provided in $SLAB_HOME/.Xdefaults. The startSLab scripts will use
xrdb to merge this list in the the current resource database. If you want to
change some of these values you may have to 'xrdb -load $SLAB_HOME/.Xdefaults'
rather than merging the new file. This is required to ensure the changes do
not get masked by previous definitions.

/*
 * To configure this stuff you should read through the comments for each
 * section, and then apply the colours you want. If you want to alter specific
 * potmeters, make sure the per track defined resources are defined last. Also,
 * you need to understand some of the SLab frame ordering. The frames f1 and f2
 * are the main blade displays for the main and secondary mixer. These can be
 * important if you use the "split mixer" views, and "dual mixer views".
 * 
 * ALSO NOTE: internal track numbering starts at zero, the GUI will display
 * track plus one. If you want to configure GUI track 2 to have different pot
 * colours, you need to alter configurations here for track 1!
 */

/*
 * All potmeters, but comment out "set potTracking" in StartSLab.tcl (NOTE
 * the Tracking resource is overridden if we use the Views option).
 */
*Tracking:    4
/*
 * This should cover blade potmeter controls: on alignment.
 */
*f1*Tracking:    0
/*
 * WaveSLab potmeters (zoom and magnify), and always track mouse:
 */
*sLab*Tracking:    5
/*
 * WaveMeter colors:
 * Font color is also used for wave edit highlights, oops.
 * WaveLowColor is black background
 * WaveHighColor is green wave foreground
 * WavePointColor are red crosshair lines
 */
*WaveMeter*WaveFontColor: white
*WaveMeter*WaveLowColor: black
*WaveMeter*WaveHighColor: green
*WaveMeter*WavePointColor: red
/*
 * VuMeter colors:
 */
*VuMeter*VuNormalColor: green
*VuMeter*VuMediumColor: yellow
*VuMeter*VuHighColor: orange
*VuMeter*VuClipColor: red
/*
 * A couple of examples of track pots:
 *    gains: these require the f1 is included for a selection of reasons.
 * *f1*1.gain*Foreground: blue - this would do track 1 gain only
 */
*f1*gain*Foreground: red
/*
 *    sends
 * *2.send0*Foreground: green - works for first track 3 send
 */
*send0*Foreground: lightblue
*send1*Foreground: lightblue
*send2*Foreground: cornflowerblue
*send3*Foreground: cornflowerblue
/*
 * pan pot
 * *5.pan*Foreground: blue - alters pan color for track 6 only.
 */
*pan*Foreground: yellow
/*
 * Filters:
 */
*fHigh.p*Foreground: palegreen
*gHigh.p*Foreground: palegreen
*sHigh.p*Foreground: palegreen
*qHigh.p*Foreground: green4
*fLow.p*Foreground: green3
*gLow.p*Foreground: green3
*sLow.p*Foreground: green3
*fPara.p*Foreground: yellow
*gPara.p*Foreground: yellow
*qPara.p*Foreground: yellow
/*
 * dynamics
 */
*dyn.limit*Foreground: grey80
*dyn.attack*Foreground: grey80
*dyn.decay*Foreground: grey80
*dyn.gain*Foreground: grey80
*dyn.rel*Foreground: grey80


DATA ACCESS API
---------------

The data access API, libdaccess.a, allows third parties to gain access to a
file recorded by SLab. The reason the library is required concerns the use
of a proprietary data format, and the implementation of compression. Some
of the tools, WaveSLab, for example, access the recorded file directly, 
rather than via the engine. These tools have also been rewritten to use the
library.

The API consists of 5 calls, and one header file:

    slabDAccess.h - defines read/write options, and seek operations.

    int slabOpen((char *) filename, int track, int permissions)
        Requests access to a data file. If the filename is NULL, access will be
        made to the current open datafile. The Open will be made for access to
        a single track, and permissions are read, write, or both.
        Returns an integer descriptor used to reference this track.

    int slabLseek(int descriptor, int offset, int whence)
        Set the read/write pointer for this track to a given SAMPLE offset
        within the file. Whence specifies absolute, relative, or get offset.
        Returns the new offset.
        
    int slabRead(int descriptor, (short *) buffer, int count)
        Fills the buffer with count SAMPLES from the given descriptor. The
        samples are per definition, 16 bit, the only available internal
        datasize. Returns the number of samples read.

    int slabWrite(int descriptor, (short *) buffer, int count)
        Write the buffer of count SAMPLES to the given descriptor. The
        samples are per definition, 16 bit, the only available internal
        datasize. Returns the number of samples written.

    int slabClose(int descriptor)
        Close the given descriptor.

It is possible to open up to 64 descriptors, which may be taken from different
files if desired. The library will cater for data compression/decompression.

The API was written to be correct, rather than be fast. It may be optimised in
a future release, but for now, it is only expected to work. It is going to be
rather slow, however, due to certain requirements for data synchronisation.

The library is not expected to be used for real time operations. If you need
access to data on the fly, you should use the libslab.a effects API and attach
to the effects busses.

EFFECTS API
-----------

There are two methods of integration, both of use the same method, but one
of which sacrifices funcionality for simplicity. The first method is more
or less as follows:

1. request attachement passing gobs of parameters. One is a callback for
parameter change notification, and another for data available (DSP).
2. The callback for parameter changes gets the parameters, and then sets the
display value in the GUI. This is needed since the GUI only passes a value
between 0 and 255, the effect needs to make this into some sensible, readable
display string.

Alternatively 

1. effect registers for one or two mono busses
2. call GUI interface to get controllers, one at a time, optionally registering
a parameter change callback algorithm.
3. request display of the effectsSLab
4. call read data routines.
5. pass the data to the DSP algorithm.
6. write data back to busses.

This second method requires more end user code, but delivers more flexibility.
The only reason the first method is available is that whilst creating all the
effects I was constantly using the same access methods with small changes for
the controller set and big changes for the DSP algorithm. Since the actual
bus access methods remained the same the bus access code was moved into the 
library under a separate call to the API.
Access method 1 is documented in stNewAPIChorus.c, and access method 2 is
available in stChorus.c, both the effects are the same, but you can see the
difference in complexity of the code - the first method is straightforward, 
the latter considerably more complex.

Future APIs will integrate requests for getting the current songpointer in a
number of different formats, and a "position" callback for allowing the 
library to inform the effect of changes in the tape spooling position. The
current calls in the full API are:

    int * seAttach(int memID, int busID)

        memId is the shared memory segment for the controlBuffer, and
        busID is the bus to which to attach. These are passed as argv[1]
        and argv[2] when the process is forked by the frontend.
        The returned value is used in subsequent calls as a connection id.

    int seAddCtrl(int *devPtr, char *title, int type)

        devPtr is returned by seAttach(). Title is the text inserted 
        under the controller for user recognition. Type, for now, is
        just SLab_Potmeter, but buttons, scalers and entries may be added.
        The integer result is used by seGetCtrlVal() later.

    int seInit(int *devPtr, char *name, char *shortName, int (*pcheck)())

        devPtr is from the seAttach(). Name is displayed as the effect
        name in the EffectsSLab GUI (truncated to 15 chars), and the
        shortname (7 chars), should appear on the StudioSLab, under the
        send pot when a track is connected to a bus. pcheck is an
        optional callback executed by API when paramter values change.
        This can be set to NULL if interface make the paramter checks
        itself. The callback routine is passed two parameters, the
        associated devPtr, and the parameter number that changed.
        The returned value is the fixed block size for each read and
        write operation.

    int seGetOpts(int *devPtr, int option)

        devPtr from the usual source. The option should be either
        SLAB_RESOLUTION or SLAB_SAMPLE_RATE. Return value is the
        given parameter for the current open songfile.

    char *seGetFileName(char name[80])

        The name of the current open songfile is returned in the name
        space provided.

    int seGetCtrlVal(int *devPtr, int controllerID)

        devPtr from the usual source, and controllerID from a
        previous seAddCtrl() call. Returns the current value of the
        given controller, as set by the user in the EffectSLab gui.


    int seSetCtrlDisp(int *devPtr, int controllerID, char *dispText)

        devPtr from the usual source, and controllerID from a
        previous seAddCtrl() call. Sets a string to be displayed in the
        frontend for the value of this controller. This will allow the
        effect to set actual values and units in the display.

    int *seRead(int *devPtr)

        devPtr from the usual source. Returns a pointer to the next
        available loaded buffer from the mix engine. The buffer is in
        a fixed area of shared memory, and it should really be returned
        via an seWrite() call afterwards, although little damage will
        result from this not happening - the engine will log an underrun
        against this bus.

    int seWrite(int *devPtr, int *busData)

        devPtr from the usual source. The return value is not used in
        this release, and may never be. The busData location should be
        the value from the oldest outstanding read operation, but it is
        not heavily checked. There may be a minimum of 2 outstanding
        seRead() request, with the maximum being platform dependent -
        2 on SunOS, 4 on Linux.

    int seDetach(int *devPtr)

        Detaches itself from shared memory, and relinquishes records in 
        the controlBuffer internal data structures. Returns 0 on success
        and a negative integer on failure.

If on the other hand, you intend to use the simpler model, the following
calls are available:

    Uses the API to link up to the mix engine. The API does the necessary
    connections to shared memory, and does a simple negotiation with the
    frontend to request addition to the EffectSLab frontend. The APIs are
    really pretty trivial, in as much as there is no flexibility the what
    you can do, just attach, initialise, and do read/write operations. There
    are no bells or whistles. There aren't even any manual pages. The up
    side of this approach is simplicity - the user is removed from the details
    of SHMEM and the specifics of the MixSLab internal memory formats. The
    obvious downside is the lack of flexibility.
    Since there is little documentation on the APIs, here the details:

    int * seFullAttach(int memID, int busID, int channels,
        int (*dspAlgo)(), int (*paramAlgo)(),
        char *name, char *shortName,
        char *control0, char *control1,
        char *control2, char *control3,
        char *control4, char *control5,
        char *control6, char *control7)

        memId is the shared memory segment for the controlBuffer, and
        busID is the bus to which to attach. These are passed as argv[1]
        and argv[2] when the process is forked by the frontend. Channels
        is SLAB_EFFECTS_STEREO or SLAB_EFFECTS_MONO. dspAlgo() is called
        when data is available, paramAlgo() is called when a parameter is
        changed. Name and shortName are used in the frontend display, and
        the    null terminated list of parameters are for the display, max 8.

    int seGetCtrlVal(int controllerID)

        The controllerID is implied by the call to seFullAttach().
        Returns the current value of the given controller, as set by
        the user in the EffectSLab gui.

    int seSetCtrlDisp(int controllerID, char *dispText)

        The controllerID implied by a previous seFullAttach() call.
        Sets a string to be displayed in the
        frontend for the value of this controller. This will allow the
        effect to set actual values and units in the display.

 
APPLICATION INTEGRATION
-----------------------

In addition to new effects, it is possible to integrate new applications and
data types into the SLab application suite. Newly integrated components are
included in the user interface, and are actively included in the drag and drop
user interface. Integrated applications can register for inclusion in the 
audio data stream using the effects API.

Firstly, integration of new data types is as follows:

1. Define a name for the data type, newDataType for example. This name will
be used throughtout the user interface and the drag and drop link routines.
2. Create a subdirectory of the $SLAB_HOME/dataBase called newDataType. If you 
now start the mixslab it will include the new base level group.
3.a Define either a PPM icon called newDataType.ppm, or two bitmaps called
newDataType.bitmap and newDataTypeMask.bitmap. Place these icons in the bitmaps
directory, the user interface will find them there. The order of preferece is
first PPM, then the bitmaps, then a default bitmap, for display for the datatype
within the MixSLab user interface.
4. Within your dataBase directory you need to create a second level of
subgrouping for subtypes within your type. The existing examples are diskFiles,
which are grouped on type, DiskFile, into subtypes which are CDs, into
subtypes which are the tracks on the CD. There is also the effects data type,
subgrouped into effect types, grouped into actual effects. This is a limitation
of the user interface which will be removed in the future.
5. Define another optional set of PPM and bitmap files for the final objects.
These should be called SLabnewDataType.. This second set of files 
will be used as depiction of the actual objects of your datatype, but more
importantly the bitmap files will be used to draw the cursor when the objects
are dragged to another data type.

Your datatype is now fully integrated into the MixSLab frontend. As you may
have noticed, MixSLab is a sort of browser application, moving around a file
system up to 3 levels deep. MixSLab has no real understanding of your data
types, but gives a simple representation of them based on the syntax of their
names. Your data types can now be given semantic meanings by altering the
contents of the $SLAB_HOME/libtcl/UserSLab.tcl file. This file is available
for two reasons, to add new drag and drop links, and to integrate new
applications. Before we go into the details of dragging and dropping, lets get
a description of the application integration.

The top row of buttons in the MixSLab are applications, at the moment there
are 3, the StudioSLab, the WaveSLab and the TapeSLab. It is possible to add
further applications to this group using the UserSLab.tcl file. When you
have added applications you will be able to start them with selecting the
button, or will be able to drag and drop to and from the button.

Integration is via addition of addMixSLabButton calls in the UserSLab.tcl, in
the routine userDragAndDropInit. This routine is called during the 
initialisation phase of the MixSLab, and new applications are added before
the Quit button. The call takes 4 parameters, the application name, an 
optional command callback for when the button is pressed, and two colours for
the bitmap (these need to be passed even if you have built a PPM icon). The
icon depicted in the button is taken from the application name with a PPM
extension, a bitmap pair extension, or a basic text string in that order.
The callback routine needs to be within the TCL domain, and a callback routine
is provided in the UserSLab.tcl file, called userMixSLabButtonCommand. The
callback is done with one parameter, the ToolName, which can then be used
for demultiplexing for further commands. The usual TCL operations can be used
to start your new application.

The drag and drop operations are somewhat more complex, not that the integration
commands are extensive, but there are some basic considerations of the 
available information to understand now drag and drop is done.

When one icon is dragged to another, and dropped, the MixSLab sets a number of
variables for the drag and drop components. These are:

1. ObjectType
2. ObjectID
3. Track
4. Frame
5. Command

For example, for the ObjectType, the interface provide 2 global parameters
called the dragObjectType and the dropObjectType. The value of these variables
changes denending of the actual object type. For datatypes, the value will
be SLab. For new applications this will be
Creator. The object ID, for dataTypes will be the path to the
component that was dragged - remember that the MixSLab is actually a kind of 
file browser. For applications it will be just be the string "none", since the
button has no associated file. The Frame parameter is really for internal use,
it define a TK path to a window in the application. The Command parameter will
either be the string "none" or may be a hint as to the "preferred" command that
should be called.

Finally the Track parameter. If a track is dragged from the StudioSLab this
will be the actual track number, however, if a bus is dragged, this will refer
to the bus, 0 to 7 will be the pre-fader busses, and 8 to 15 will be the post-
fader busses.

Exactly what your application does with a drag-and-drop operation is defined
in the UserSLab.tcl routine called userDragAndDropLinks. Here, you can
demultiplex based on any of the parameters above, and decide which commands to
execute. This routine is called before the default processing, so you can 
actually change the value of any of the above parameters before further 
processing, overiding default behaviour. If you want further drag-and-drop 
processing to terminate for a given default link, return the value "done" from
the switch statements. If any other value is returned, the default bindings
are still processed.


DEBUG OPTIONS
-------------

From the views menu you can configure some debug flags for parts of the mix
process. The debug options have seven levels each, as described below, but the 
exact use can vary from daemon to daemon. Also, many debug output is under 
compiler control, and may not be included in the release. The newer algorithms
support flags to control output, and as such can be enabled dynamically.
Your usage may vary. Any level higher than 3 is not really recommended. Fatal
errors are printed to main output irrespective of the debug flags.

Level 1
    Daemon control functions, start, stop, major state changes, major problems
    such as loss of sync or audio data, etc.
Level 2
    Minor state changes.
Level 3
    Major subroutine calls.
Level 4
    Major subroutine debugging.
Level 5
    Minor subroutine calls. These may be called multiple times for each block
    of samples which are processed. The output will run to several pages per
    second.
Level 6
    Minor subroutine debugging.
Level 7
    Development messages. May be abundant. May change from release to release.

Enabling a debug level implies that level and higher for that daemon. It is not
possible to select levels indenpendently, to only get level 5 for example.


NEW in 2.0
----------

Audio Device support:
    Extended to full duplex on up to 8 stereo audio devices - 16 inputs/outputs.

Data Compression:
    2 to 1 and 4 to 1 lossy data compression, per track algorithm selection.

Dynamics control:
    Per track algorithms for noisegating, compression or limitation of signal.

Filter Algorithms:
    Added a bass/treble shelving plus parametric mid filter.

2 Pre and 2 Post Sends:
    For full stereo effects send, pre and post dynamics/filter/fader.

BlueValveIt:
    Full valve amplification reproduction.

Leslie:
    Rotary speaker simulation.

Data Access API:
    Allows access to SLab data file formats.

Hand Painting:
    WaveSLab now supports freehand painting/editing of waves.

Extended track output bussing:
    Each track can now be mixed down to any selection of audio output devices.

Introduction of TrackSLab:
    TrackSLab is a single window that allows mixing of a track individually.

diverse:
    StereoGraphic can analyse signal either pre or post EQ.
    Import and Export of RAW data is possible.
    Studio VU meters can analyse signal either pre or post dynamics/EQ.
    Edit operations now realise a "run length monitor".
    A number of look and feel changes, especially to the potmeters.
    Added 48000 as a sample rate option for DAT support.
    Code is now TCL/TK_8.0 (currently b1).

    Bugfixes, a few of them.



NEW in 2.1

Input Noise Reduction:
    Input signal can be gated and filtered to remove unwanted noise.

diverse:
    Bugfixes, a few more of them.



NEW in 2.20

SoundBlaster Full Duplex:
    SLab now also supports SoundBlaster full duplex recording.

Effects Chaining:
    Effects can be chained together on a single send bus.

Effects Trimming:
    Effects input and output signals can be trimmed.

Effects On/Off:
    Effects can selectively be turned on and off.

Bus ByPass:
    Effects send busses can be selectively bypassed.

Extended Edits:
    WaveSLab edits can be applied to multiple tracks simultaneously.

Full Cut and Paste:
    WaveSLab finally has a set of real cut and paste options.

Loop Sample Preview:
    Sections of audio data can be looped to main output.

WaveSLab Zero Find:
    WaveSLab implements an optional zero-find wave slection algo.

Undo Edits:
    WaveSLab now does 'n-backout' edits back, with full history.

SOX frontend:
    Import&Export now frontend SOX to allow for export file types.

Dimension Flangers:
    The effects suite has been extended with a few multitap flangers.

diverse:
    Output buffer sizes can be tuned to improve response times.
    Global import routines no longer report TCL errors.
    The look and feel of the faders was revised.
    The look&feel of the potmeters was revised with a "smooth bevel".
    Tracks can be automatically muted when recording over them.
    The 8 bit output options now have a noise reduction algo.

    Couple more bugfixes.


NEW in 2.30

Adjustable tape speed
    The tape run speed can be microadjusted.

Punch in/Punch out
    Data can be inserted/removed from mix.

Audio Metronome and bar/beat edits
    Actually went into 2.21.

diverse:
    Added some debugging flags and options.
    Altered cosmetics of TapeSLab, Help Balloons, icon sizes for lowres.
    Reworked adiod fragmentation processes.
    Added microTape controller on mixing desk.

    Selection of bugfixes, most notably in audio driver code for stability.



NEW in 3.0

FreeBSD port available.

Floating Point Mixing
    SLab finally supports full floating point mixing.

In-line FX processing
    Floating point mix algorithm includes per track FX, rather than offboard FX.

User configurable desks
    BuildSLab allows configuration of mix sequences, and each track can
    have a unique set of audio operators, allowing application of filters
    before or after compressing, or vice versa, with a selection of about 20
    different in-line algorithms. Only works with new floating point mixing.

More Effects
    Ducker, filtered sidechain input compressor, stereo compressor, etc.
    Big new chambre reverb.

diverse:
    Cosmetic alterations to icon presentation.
    Selection of bugfixes, many to FX bussing.


NEW in 3.10

Improved session recording, higher resolution and extended session memory.

Audio Daemon can be synchronised across multiple audio device.


+++ath - END OF HELP FILE GENERATION.

KNOWN LIMITATIONS 1.0/2.1 - These are programming restrictions at the moment.
-------------------------

When recording, the new data is not in the output mix. It is possible to 
listen to the recorded audio using the microMix section, since most audio
cards will monitor the input streams.

KNOWN PROBLEMS 1.0/2.1
----------------------

There may be some light debugging output from both the engine and mixslab.

The output (master) filter section does not clip, and will tend to tick
at high gain.

There have been reports that SLab can freeze a system. This is probably due 
to intensive use of the CPU, disk, and audio drivers.  If you get these kinds
of issues try using only half duplex recording, rather than duplex.
Alternatively send me a mail with a system description (soundcard, linux kernel
version, OSS driver version etc), I am working on resolution. This is a known
problem, I'm just not too sure what the cause is, nor what I can do about it.

There is intermittent channel deafness, typically in the left output channel.
Several internal issues have been removed, where SLab would set unbalanced
gain levels (0/100, rather than 100/100 for example). VU metering was moved to
the final output stage to allow monitoring of the actual data written to the
device. A start/stop of the tape should remedy the situation, but if you have a
high hit rate I will get debug code to you, drop me an EMail.

NOTES 1.0
---------

Some of the effects are still pretty much "engineering quality", which is to
say, they do their function, but require quite a lot of tweaking to pull good
results out of them. In future, the range of parameters will be reduced to
reasonable defaults, and the user can then tailor the defaults with the effect
controls. Effects which fall into this catagory are:

1. compressor and limitor algorithms. The main issue here is the RMS (VU) 
calculation accuracy, which is rather abysmal at low signal levels. The
result is that the signal will sometimes be driven with almost infinity gain,
leading to a lot of signal distortion. This will be completely rev'ed in
a pending update. FIXED IN 2.0 WITH PER TRACK DYNAMICS and a correct RMS
algorithm. This is actually visible when comparing the pre and post EQ
VU signals.

2. BlueValve. The scope of some of the parameters to the vanzeggelaars need to
be limited to useful values. FIXED IN 2.0 WITH BLUEVALVEIT.


Since there are a large variety of viewing possibilities, it is possible that
some anomalies exist due to limited testing. For example, scrolling of 
dual mixer windows with a subset of the available tracks displayed may cause
problems. Implications of using the TrackSLab are also not certain.


FIX RELEASES:
------------

       1.0.1(f) - half duplex devices would block.
Jun  5 1.0.2(f) - two halfdplx devs block. Hmm, could have seen this one coming
Jul 16 1.0.3(f) - largely for a dynamic compile of 1.0.2.
Jul 31 1.0.4(f) - locking engine - bypass select() in halfduplex for 2.0 kernel

Jul 31 2.0.-1(a) - 2.0 alpha1 code provided with 1.0.4(f).
Aug 25 2.0.-1(b) - 2.0 beta1 code distributed.
Sep  5 2.0.-2(b) - 2.0 beta2 code distributed (and adiod singularly).
Oct  2 2.0.0(p) - 2.0 prerelease code built.

Oct  23 2.0.1(p) - 2.0.1 release code built.
Oct  28 2.0.2(p) - 2.0.2 release code built.

Nov   1 2.1.0(r) - Built.
Nov  26 2.1.0(r) - Uploaded to sunsite, after a few rebuilds.

Nov  17 2.2.0(a) - alpha code built.
Jan  19 2.2.-1(b)- beta1 code built and distributed.
Feb  16 2.2.-2(b)- beta2 code built and distributed.
Feb  25 2.2.-5(b)- beta5 code built and distributed.
Mar   9 2.2.-8(b)- beta8 code built and distributed.

Apr  30 2.20.0(r)- release code built and distributed.

Oct  30 2.30.0(r)- release code built and distributed.

May  10 3.0-5(b) - fifth round of beta distributed.


FIXES - post 1.0 alpha release (8/1/97).
-----

fix:
Input sample metering should now be measured during engine idles. (nc-8/1/97).

fix:
22kHz native recording (nc-8/1/97).

fix:
Altered disk write code for absolute offsets, arbitrary L/R tracks. (nc-8/1/97).

enhancement:
Implemented a set of stripped mix algorithms, 16 tracks CD on P133 (nc-8/1/97).

enhancement:
Implemented a re-record of main output, in duplex2 only for now. (nc-9/1/97).

enhancement:
Implemented a re-record access via "Audio" pulldown menu. (nc-9/1/97).
This needs to be enhanced, but will do for testing.

fix:
Altered GUI child handling for prevention of effects zombies. (nc-9/1/97).
Need to include some changes for engine reconfigurations.

enhancement:
Console displays flashing "mainIn" during record operations. (nc-11/1/97).
Console displays flashing "mainOut" during rerecord. (nc-11/1/97).

fix:
Altered access mechanisms to the BSS, on file creation only. (nc-11/1/97).

fix:
Altered BSS handling over invocations of songs with size changes. (nc-12/1/97).

fix:
Altered effects cleanup over session restarts. (nc-12/1/97).

fix:
Changed vu meter configs to prevent callback accumulation. (nc-12/1/97).

fix:
Engine hangs in duplex2 algorithms with one halfDuplex dev. (nc-19/1/97).

fix:
trackTotalLength is now set only on file creation. (nc-19/1/97).

fix:
BladeList management needed initialisation alterations. (nc-19/1/97).

fix:
Track Count has been taken out of StudioFiles selection. (nc-19/1/97).

fix:
Recording at 22kHz native is now supported + SMPTE Display fixes. (nc-19/1/97).

enhancement:
Added GUI support for 24, 25, and 30 fps SMPTE formats. (nc-20/1/97).

enhancement:
Export RAW file requestor and links created, needs a lot of tests. (nc-20/1/97).

enhancement:
Included version checking on controlBuffer. (nc-21/1/97).

enhancement:
Mixdown session recording facility on continuous controllers. (nc-21/1/97).
Mixdown session access facility from GUI. (nc-21/1/97).
Mixdown session editing (event stripping) facility, pretty basic. (nc-22/1/97).

enhancement:
Programmed in "Spinning world" logo into studio. (nc-27/1/97).

enhancement:
Moved inputAlgo and outputAlgo into adiod. (nc-29/1/97).

enhancement:
Disk data file will now autoextend on record past EOF, but still do not
cleanout the buffer space on read past EOF. The bzero segs. (nc-29/1/97).

enhancement:
Implemented a stereo rotary speaker with dual volume/filter/delay
characteristics.  (nc-4/2/97).

enhancement:
Rewrote spacial effect to be stereo, tap 1&3 left, 2&4 right. (nc-4/2/97).

enhancement:
Wrote another stereo reverb algorithm to alter decay and interarrival times, in
order to get closer reverberation.  (nc-5/2/97).

enhancement:
Added code to effects and libslab to allow callback on param changes, with
the necessary hooks to give effect capability to set GUI display. (nc-5/2/97).

enhancement:
Reworked the API to simplify procedures to just 3 library calls. I found that
every new algorithm I wrote used the same basic template, with a new DSP
algorithm. Moved it all into the library, user needs to define the DSP algo,
and the parameter checking code, both of which are now callbacks. (nc-7/2/97).

diverse:
Stripped track, effects and baseLine code out of backend.c, it was getting
to be excessively large. (nc-10/2/97).

enhancement:
MixSLab GUI now supports diverse data types, can cache diskfiles and effects
at the moment. Code is re-usable (no semantic information, bitmaps and
file types are based on location). (nc-13/2/97).

UNTESTED enhancement:
MixSLab GUI now supports user links for device types from the MixSLab. We
can drag and drop to and from use defined elements, allowing new types to
be defined by external integration. (nc-14/2/97).

fix:
Engine reset should now only be done when a new diskfile is opened, alterations
to audio devices and other files should not cause a full reset. Reset on new
diskfile is needed since this may change the memory requirements. (nc-20/2/97).

enhancement:
Incorporated a Fade command to the WaveSLab. Allows a track to be edited to
fade in or out over a given sample range. I prefer mixdown sessions, since they
are non destructive, but this was actually trivial to implement. (nc-21/2/97).

enhancement:
Implemented a valve distortion DSP effect, called blueValve (hmm...). Uses
VanZeggelaars algorithm to generate valve overdrive, some modified versions
of VanZeggelaars to give alternative distortion patterns, and one solid state
algorithm. The code needs tuning, implementation is a bit patchy. (nc-25/3/97).

UNTESTED enhancement:
Altered frontend edit command routines such that edit starts and counts can
now be entered in either SMPTE short format (mm:ss:ff), SMPTE normal format
(hh:mm:ss:ff) or as a literal sample number. (nc-26/3/97).

UNTESTED enhancement:
Added extended format (hh:mm:ss:ff.samples) to offsets. (nc-3/4/97).

enhancement:
Added offset formats into frontend, plus another couple of configs. (nc-3/4/97).

enhancement:
Included flags for synchronous effects bussing, where mixalgorithm will wait 
for data window both to and from an effect. Needs GUI support. (nc-4/4/97).

enhancement:
Included SYNC/ASYNC definitions in GUI via effects add, and bus floating menu.
Option is also saved with baseline. (nc-4/4/97).

enhancement:
Duplex rewrite is finally complete. Most of work was in adiod, but a number
of alterations were also needed for the GUI, with respect to daemon operational
states. The Duplex code handles IO as expected. (nc-7/4/97).

fix:
Extended reMapMixer to cater for no change in bladeCount. (nc-7/4/97).
Extended Studio Files change to cater for new micromixers. (nc-7/4/97).

enhancement:
GUI should now pop windows to the top of the stack when requested to reload a
painted application. This is, however, based on raise-on-deiconify being
configured in the window manager. (nc-7/4/97).

NOTES:
A number of features are being slipped to post 1.0: (nc-8/4/97).
1. 44.1/22.05 interpolations. Will support native frequencies.
2. Any more work on end user integration of data types.
3. Import/Export raw data. This pends on point 1 above. May ship with beta.
4. May ship with some of the above fixes untested - hmm.

fix:
WaveMeter offset calculation needed fixing, to correlate disk seek position
with pointer location in a zoomed wave. (nc-8/4/97).

enhancement:
Cleaned up mixalgo.c to remove deprecated mix routines, and the subMixAlgo()/
subRecordAlgo(), now moved to adiod.c. Altered GUI to conform. (nc-9/4/97).

fix:
Fixed issue with creating new song files. (nc-9/4/97).

fix:
Logo operational state is now saved in the baseline files. (nc-9/4/97).

fix:
Removed dependence on bin directory permissions by use of tmp dir. (nc-14/4/97).

fix:
Made an array of send bus parameters, optimised send bus algorithms, and
generated subMixAlgo5 with support for 2 pre and 2 post sends. (nc-14/4/97).

fix:
Have built support for 4 sends into gui under subMixAlgo5. Running out of on-
screen realestate. Will fix this in future release (with implementation of
dynamics) to enable/disable display of blade options. (nc-14/4/97).

fix:
Increased audio device count to 8. Only support 2 audio devices now, but will
eventually increase this. (nc-14/4/97).

enhancement:
Optimised the max/ave algorithm by a couple of ops per sample. (nc-14/4/97).

fix:
Reworked the adiod input metering. (nc-14/4/97).

fix:
Included scalerLength in baseline definitions. (nc-14/4/97).




FIXES - post beta release (15/4/97).
-----

enhancement:
Built an 8 bands graphic EQ. Uses SLab GUI, will eventually extend to stereo
with its own interface [may not ship with 1.0 release]. (nc-15/4/97).

enhancement:
Corrected libslab.a handling of extern GUI effects, requiring async bus checks.
This is now busy waiting, will eventually use a signalling system. (nc-16/4/97).

fix:
Alterations to bladeCount now change display again. (nc-17/4/97).

fix:
Configured the distribution to have a single CD and track to start application.
This will be appended with some corrections to defaults. (nc-17/4/97).

enhancement:
Optimised the filter algorithm by a couple of ops per sample. (nc-18/4/97).

enhancement:
Optimised several instructions per sample off bfindmaxave(). (nc-18/4/97).

fix:
Wow/Flutter now works in adiod. (nc-20/4/97).

fix:
Resampling of main output fixed in adiod. (nc-20/4/97).

fix:
Adiod input/output algorithm index now saved in baseline. (nc-20/4/97).

fix:
Added support for /dev/mixer? for microMixer in GUI rather than engine. Should
be saved to baseline file. (nc-21/4/97).

fix:
Added /dev/mixer to the stats menus. (nc-21/4/97).

fix:
Deprecated and removed the wowFMask variables in controlBuffer. (nc-21/4/97).

fix:
Deprecated and removed the TCP/TELNET user interface. (nc-21/4/97).

fix:
Deprecated and removed all adid/adod variables in controlBuffer and code
segments, including dataconnection.c, feprint.c, adid.c, adod.c. (nc-21/4/97).

fix:
Engine will now be started automatically from GUI if SHMEM connection fails.
If second connect fails, exit with SHMEM error message. (nc-21/4/97).

fix:
Cleaned up the autoextension of sound tracks in the mixiod. (nc-21/4/97).

fix:
Included child handling code for GUI to reap engine on exit. (nc-22/4/97).

fix:
Expanded microMix for independent record source per device. Engine will
record, for now, from most recent selection. When multiple duplex devices are
supported, recording will be from each configured input device. (nc-22/4/97).

fix:
Altered scaling on Bass cutoff controls of filter algorithms. (nc-22/4/97).

fix:
Removed extraneous print statements, some with DEBUG flagging. (nc-22/4/97).

enhancement:
Started work on QandA operations. (nc-22/4/97).

fix:
Fixed send bus handling with 2 pre and 2 post architecture. (nc-22/4/97).

fix:
Took chorus2 out of the distribution, it is damaged. (nc-23/4/97).

fix:
Tweaked some of the details of the graphics code for bus connects. (nc-23/4/97).

enhancement:
Built up interupt signalling for external effects, those that do not use the
SLab effects GUI. Up until now, these effects required busy waiting, now the
APIs use USR1 for notification of data availability. Internal effects have
always used signalling, but we cannot use CONT for external GUIs. (nc-23/4/97).

enhancement:
Added track selection code for the mixer, where user can specify which tracks
get displayed. May be issues with blade scrolling. (nc-24/4/97).

enhancement:
Create code for dual mixing windows. One on left of master, one on right. This
will allow extra viewing capabilities. (nc-24/4/97).

enhancement:
Built some Help menu options - Version, Thanks, About (er, no help though).
(nc-24/4/97).

fix:
Fixed issue with returning to a single unsplit view having been active in the
second mixing window. (nc-25/4/97).

fix:
Fixed creation of a default ".dat" file for new songs. (nc-27/4/97).

fix:
Altered aging timers, since they made some incorrect assumptions. (nc-27/4/97).

fix:
Finally put to rest some issues with the micromixer. (nc-27/4/97).

fix:
Corrected a stackload of issues with new songfile creation that could only be
described as programming anomalies. Took ages, but can now create a songfile
and start recording it on default audiodevs, provided the default if not a 
halfduplex device. Need to create a system baseline file to store a set of
useful device defaults for a users system. (nc-27/4/97).

fix:
Corrected possibility that blade view might be larger than trackcount.
(nc-27/4/97).

fix:
Finally ridden myself of the segging mixiod on autoextend. (nc-28/4/97).

enhancement:
Added a confirmation window on file creation, where filesize is estimated, and
user is prompted to "OK" the request. (nc-28/4/97).

enhancement:
Included text in VU meter display. (nc-28/4/97).

fix:
Issue with scrolling in non dualMixer view. (nc-28/4/97).

enhancement:
New song file creation now creates the file with a single segment written at
the offset of the expected filesize. The intervening filespace is a single
hole, which is filled in selectively as tracks are recorded. (nc-29/4/97).

enhancement:
Built a help facility, rather basic, and whose contents at the moment are 
basically what is in the file. Reasonably extensible though. (nc-29/4/97).

fix:
Killed vumeter callbacks on Close of desk. (nc-29/4/97).

fix:
Altered vumeter point offsets, optimised for input gaining. (nc-29/4/97).

fix:
Boost setting were being lost, and button was not toggling. (nc-29/4/97).

fix:
Broke stereo bussing during signal rewrite. Fixed. (nc-29/4/97).

fix:
Some effects display ridiculous values, altered the few I found. (nc-30/4/97).

fix:
Fixed an issue with application exit, and SHMEM segments. (nc-1/5/97).

fix:
Changed tape logic to enable input monitoring across tape positioning. This
initially executed a STOP on the audio daemons. (nc-1/5/97).
Changed record sequencing logic to allow input level monitoring over track
selection. This previously configured offsets, terminating monitor. (nc-1/5/97).

fix:
Front end now removes effects on exit. (nc-1/5/97).

fix:
Put fade into the drag and drop routines, and fixes a couple of issues with 
offsets to the fade algorithm. (nc-1/5/97).

fix:
Issue with bus management on seFullAttach code. (nc-1/5/97).

fix:
Revamped bluevalve. Cleaned out a couple of parameters (out gain and Q:=bias),
almost dumped the "yellow" algorithm, fixed up blue and vanzeggelaars to do 
valve distortions, and green is now transistor. Could undergo a bit of
optimisation, but will save that for now. (nc-2/5/97).

enhancement:
Rebuilt the rotary DSP, importing the bluevalve (modified vanzeggelaars)
algorithm. Effect is namd overotary and is pretty dirty. (nc-4/5/97).

enhancement:
Renamed bluevalve to overdrive, and enhanced the existing bluevalve with the
inclusion of 3 bands EQ. Effects will completely overdrive even the internal 
8 bits of headroom at high gain, causing clicking, but at lower parameter values
this effect just HUMS along. (nc-4/5/97).

enhancement:
Altered Effects links to init each controller to the value 128. (nc-5/5/97).

enhancement:
Patched up the graphic EQ frequency bands. Renamed to equalizer. (nc-5/5/97).

fix:
Frontent now implements a lockout on effect parameter changes. (nc-6/5/97).

enhancement:
Put the new equalizer algo into the stereographic. (nc-6/5/97).

enhancement:
Reved the controlBuffer structure to 1.0.0(b), pending release. (nc-6/5/97).

enhancement:
Altered software licensing to extend to mid Oct '97. (nc-6/5/97).

fix:
Altered sterographic bus data handling. (nc-6/5/97).

fix:
Engine now supports extended bus signalling in submix4. This was a requirement
for supporting the stereoGraphic. (nc-8/5/97).

fix:
Engine could hang with sync bus support. Made one syntactic fix, and added
a lockout prevention for possibility that effects die. (nc-8/5/97).

fix:
Frontend now deletes shared memory segments on exit. (nc-8/5/97).

fix:
Stereographic gains on high end filters were adjusted. (nc-8/5/97).

UNTESTED fix: DROPPED For future study.
Altered the stereographic EQ algo to allow the VU meter to display post gain
output values, ie, signal after equalisation. (nc-9/5/97).

fix:
LibSLab would incorrectly prevent stereo effects attachements to normalled
second busses. (nc-10/5/97).

fix:
Sendbus management in GUI was broken for above bus 0. (nc-10/5/97).

fix:
Fixed send bus naming for second stereo bus. (nc-10/5/97).

fix:
Fixed send bus naming for external effects. (nc-10/5/97).

fix:
StereoGraphic sliders were slipped by one band. (nc-10/5/97).

fix:
Changed stereographic spectral display to XDrawRectangle, rather than 
XFillRectangle. Purely cosmetic. (nc-10/5/97).

enhancement:
Added confirmation on exit commands. (nc-11/5/97).

enhancement:
Included support for 11kHz and 8kHz operations. (nc-11/5/97).

enhancement:
Added support to change the sample rate, allowing playback at half speed
for "slow" recording. (nc-11/5/97).

fix:
New .dat file parameters will take existing audio configuration, rather than
a set of vanilla defaults. (nc-11/5/97).

fix:
Broke drag and drop of filters during split mixer implementation. (nc-11/5/97).

fix:
Setup code to calculate BankSize and BankCount on creation of studio.
(nc-11/5/97).

fix:
Changed VU meter text and packing, largely cosmetic. (nc-11/5/97).

fix:
Fixed export facilities to support RAW audio, with conversions to 8 bits, and
a selection of sample frequencies. (nc-11/5/97).

fix:
Minor changes to the help text and thanks text. (nc-11/5/97).

fix:
Bus lockout was damaged for certain busIDs. (nc-11/5/97).

fix:
Send2 bus selector missed offset in the agent. Bus would hang. (nc-11/5/97).

fix:
Effect now removes its names from GUI on exit. (nc-11/5/97).

fix:
Fixed send bus scheduling in subMixAlgo5. (nc-11/5/97).

fix:
Post Send busses were no longer under control of the track fader since the
subMixAlgo5 rewrite. (nc-11/5/97).

fix:
Finally blessed subMixAlgo5 after debugging parts of paramter assignment and
the fader control. This is now configured into Audio->Algorithms. Provides
support capacity for 2 pre and 2 post sends per track. (nc-11/5/97).

enhancement:
Reved the controlBuffer structure to 1.0.0(r), ready for baking. (nc-11/5/97).


    SOFTWARE GOES REL.

POSTMORTEM on 1.0 release
----------

The performance guidelines were met, just, as of 1.0 release. Playing 8 out of
16 tracks, with 2 effects (admittedly lightweight effects) and a couple of
filters works without glitching. Adding another 4 filters results in the
occasional tick on output, which could be remedied by disabling the VU meters
(disabling VUs saved an extra scan of the selected track data for the max/ave
algo). In short, the performance requirements were met to a T.

The effects in use were two reverbs. This is not the lightest effect (which is
probably the echo), but is also far from the most heavyweight algo. Using
something like the stereographic, or bluevalve, would be impossible at this
point. Also, the guidelines for subMixAlgo5, on a P133, are considerably lower,
probably closer to 4 tracks than 8. None of these limitations are considered
to be a hindrance, since the current functionality far outstrips the original
specification for 1.0 release, and a P133, which was a high end system when
work was started, is now pretty much "run of the mill". If somebody who reads
this is in possession of a P-Pro, or dual processor system, I would be 
extremely pleased with some details of performance measurements.



CHANGES - post 1.0 release (12/5/97). These will be 2.0 functionality.
-------

enhancement:
Reved the controlBuffer structure to 1.0.1(a). (nc-11/5/97).

DROPPED enhancement: internal: built in buttons rather than a menu, see below.
Added menu to the stereographic for pre or post signal monitoring. (nc-12/5/97).

enhancement: internal
Applications will now open startSong if called without an active song name.
previously this was /dev/null, obviously not optimal. (nc-12/5/97).

enhancement: internal
Added a release structure to controlBuffer structure, such that we can now
have different releases which will be compatible as long as controlBuffer
version matches. Will also allow multiple revisions of the controlBuffer to
be made even on same integration. (nc-12/5/97).

enhancement: internal
Removed all reference to device, previously for the adid and adod. (nc-13/5/97).

enhancement: internal
Architected all the code for arbitrary audio device count. This was not really
too much work, since the structures were already there. Left the current
maximum count at 8, which is reasonable for a PC based system. This is in
duplex3 and submixAlgo5. All devs will support up to full duplex. (nc-13/5/97).

enhancement: internal
Added optimisation in the mixalgo's for controlbuffer access. (nc-13/5/97).

enhancement: internal
Reworked some of the print stats for multiple device support. (nc-14/5/97).

enhancement: internal
Built BlueValveIt, bluevalve with an extended user interface. (nc-14/5/97).

enhancement: internal
Implemented some trivial time compression algorithms, expecting a 2:1 ratio.
These are going to be integrated into the mixiod. (nc-14/5/97).

fix: internal
More frontend shmem cleanup alterations. (nc-21/5/97).

enhancement: internal
Altered front end to have auto configure of input dev select buttons per track.
Number of buttons is based on configured audio devices. (nc-21/5/97).

enhancement: internal
Implemented some trivial amplitude compression algorithms, expecting a 2:1
ratio.  These are going to be integrated into the mixiod. (nc-22/5/97).

enhancement: internal
Added code to clear old record source, and limit input selection to one per
track. (nc-22/5/97).

enhancement: internal
Made some cosmetic alterations to the BlueValveIt frontend. (nc-22/5/97).

enhancement: internal
Built the import facilities, with exception of some of the more unusual 
options (11to2, 11to4, etc). (nc-23/5/97).

fix: internal
ControllerName was set incorrectly in seInit() for mono effect, causing
external GUI DSP algorithms to generate a 'ghost' frontend. (nc-25/5/97).

enhancement: internal
Added a new potmeter style called "amp", intended for a brass/bakelite finnish.
It is sort of what I was after. Added another potmeter option called shadow,
for extra 3D highlighting. (nc-26/5/97).

enhancement: internal
Built a Leslie effect with an external user interface. (nc-26/5/97).

enhancement: internal
Build in hooks for compression algorithm definitions. (nc-26/5/97).

fix from SLab-1.0.1: external - closed
970526-001: failure to record from halfDuplex or simplex devices. Patched
adiod.c for emptying the output buffer under such conditions.

enhancement: internal
Introduced the DeviceSLab, and rewrote the microMix code. The DeviceSLab is
to be used for physical device configuration - it provides access to all
OSS controllers for the device in stereo/mono, and source select. The StudioSLab
will have one microMix, which will controller all the others. (nc-27/5/97).

enhancement: internal
DeviceSLab parameters are now saved to the baseline files. (nc-28/5/97).

enhancement: internal
Incorporated deckMenu into DeviceSLab. (nc-29/5/97).

enhancement: internal
Implemented the 4 to 1 time/amplitude comdec algorithms. (nc-29/5/97).

enhancement: internal
Finnished work on the data access libraries. This API allows a third party
to open a SLab data file, and read/write data to it. It is intended also
for internal use, since data access with compression needs a serious amount
of changes to the access methods. (nc-30/5/97).

fix: internal
Added lockout prevention in frontend daemon sync. (nc-30/5/97).

fix: internal
Effects parameter changes could result in excessive timeouts if no callback
has been requested by the agent. (nc-30/5/97).

enhancement: internal
Incorporated support for multiple output devices into effects attachments and
return bus normalisation menus. (nc-2/6/97).

enhancement: internal
StereoGraphic now has buttons to select left/right signal source as pre or
post EQ. (nc-2/6/97).

enhancement: internal
Vamped mixiod for compression. (nc-2/6/97).

enhancement: internal
Altered track compression menu to include radio buttons, rather than pure 
items. (nc-3/6/97).

fix: external: 970604-001: - closed
Removed all references to home directory with compilation flags. (nc-4/6/97).

UNTESTED fix: external: 970604-002: - closed
Fixed issues with daemon operational states with SoundScape dual audio
device cards. (nc-5/6/97).

enhancement: internal
Rewrote the time and amplitude compression algorithm, the results were
reasonable, but improvements were possible. (nc-5/6/97).

enhancement: internal
Added code to re-initialise the compressionIndeces on start. (nc-5/6/97).

enhancement: internal
Architected WaveSLab (wavemeter) to use libdaccess calls. (nc-5/6/97).

enhancement: internal
Architected importExport to use libdaccess calls. (nc-6/6/97).

enhancement: internal
Architected normalise to use libdaccess calls. (nc-6/6/97).

enhancement: internal
Architected merge to use libdaccess calls. (nc-6/6/97).

enhancement: internal
Architected fade to use libdaccess calls. (nc-6/6/97).

enhancement: internal
Architected reverse to use libdaccess calls. (nc-11/6/97).

enhancement: internal
Frontend will fork another process to do track edits, prevents blocking of
input, and will presently allow for run length monitoring. (nc-11/6/97).

enhancement: internal
Added and tested bitmaps which will handle run length monitor ops. (nc-19/6/97).

enhancement: internal
Built run length monitoring into import/export facilities. (nc-19/6/97).

enhancement: internal
HelpSLab now uses text objects, rather than label. Will eventually need to 
employ snapgrid and scrolling. (nc-19/6/97).

enhancement: internal
Ported to TCL/TK 8.0. (nc-30/6/97).

enhancement: internal
Made some major enhancements to the potmeter feel. When the pointer is inside
a potmeter, it uses the left/right shuffle to move the pot position. When 
outside the potmeter, it also uses the shuffle, until the pot point is in line
with the mouse. When the mouse and point are aligned the point is "picked up",
and will track the mouse position in 2 dimensions. (nc-1/7/97).

enhancement: internal
Added more status bar info between commands. (nc-1/7/97).

enhancement: internal
Added finger hole on rotary pot meter. (nc-1/7/97).

enhancement: internal
Changed default wavemeter zoom factor to 64 from 256. (nc-2/7/97).

enhancement: internal
Integrated qanda code, although not yet in use. Also need to extend the 
session database. (nc-3/7/97).

enhancement: internal
Added button 2 and button 3 to move potmeter by single points. (nc-3/7/97).

enhancement: internal
Altered mixslab interactive (tty) capabilities. (nc-3/7/97).

enhancement: internal
Built NoiseGate, Compressor and Limitor algorithms for the engine. (nc-4/7/97).

enhancement: internal
Built dynamics controls into GUI. (nc-4/7/97).

enhancement: internal
Built dynamics controls into Drag and Drop. (nc-10/7/97).

enhancement: internal
Built dynamics params into baseline and session recording. (nc-10/7/97).

enhancement: internal
Altered shading on the filter pots to improve visibility. High filters are
now in a light green, low in a darker green. (nc-11/7/97).

enhancement: internal
Added 6th filter algorithm. Implements Bass and Treble shelving with cutoff
and gain control, plus a parametric with f/g/q. Built into frontend, baselines
and session recording. (nc-11/7/97).

enhancement: internal
Introduced code to change filter display dependent on algo. (nc-11/7/97).

enhancement: internal
Added 48kHz as songfile option for DAT support. (nc-15/7/97).

enhancement: internal
Integrated lwLimitor2() into engine - the compressor algo, which only applies
signal attenuation when input is above configured gain. (nc-15/7/97).

enhancement: internal
Integrated lwCompressor2() into engine - the compressor algo, with preloading
of signal gain as the gate opens. (nc-15/7/97).

notes: external
Built and distributed slab-1.0.3, which from a code perspective is no different
from 1.0.2, but has dynamic linking of libc, libldl and libm. (nc-15/7/97).

fix: internal
Potmeter would occasionally SIGFPE due to div 0. Introduced when code for mouse
tracking was implemented. (nc-16/7/97).

enhancement: internal
Integrated DeviceSLab into MixSLab main screen. (nc-16/7/97).

enhancement: internal
Track Count in new song file requestor is now a set of radiobuttons, rather
than an entry field. Prevents odd number of tracks. (nc-16/7/97).

enhancement: internal
Can now monitor VU levels either pre or post dynamics/EQ, BUT to get a reading
pre dynamics, the dynamics must be operating on that track. The main reason for
this regards the fact that the functionality was only added since the dynamics 
code also needs to evaluate signal level. We now monitor it. (nc-17/7/97).

--------------------------------------------------------------------------------
NOTES NOTES: need to stop putting in any further 2.0 functionality. Code is
now for debug and testing.
________________________________________________________________________________

fix: internal
The libdaccess code would fail to set correct absolute file offsets with some
read/write data lengths. Should now work. (nc-17/7/97).

fix: internal
There were issues with the monitor of run length. (nc-18/7/97).

fix: internal
Repaired bfind code to return the average sample for dynamics. (nc-18/7/97).

enhancement: internal
Alter color of dynamics button to show signal gating as green when open.
(nc-19/7/97).

enhancement: internal
Made dynamics into a full ADSR envelope, in engine and GUI. (nc-19/7/97).

enhancement: internal
Added "compander" algorithm into engine. Will only increase gain if signal
is lower than target, which will just extend sustain. (nc-21/7/97).

enhancement: internal
Altered GUI to use Sen, Att, Dec, Gn, Rel for the dynamics parameters,
which are Sensitivity, Attack, Decay, Gain (sustain) and Release. (nc-21/7/97).

fix: internal
MonitorSLab now requests wavemeter reload contents after edits have terminated,
rather than RequestorSLab when request is "OK"ed. (nc-21/7/97).

fix: internal
Integrated the edit "Stop" button, such that it does work. (nc-21/7/97).

fix: internal
Corrected sample offsets, they were out by 1 sample in WaveMeter. (nc-21/7/97).

enhancement: internal
WaveMeter should now be able to edit samples using the mouse, but only when
zoom is less than zero (since this is sample level). In future will extend with
zoom greater than zero where instead of sample edits, will to fades on groups
of samples. (nc-21/7/97).

fix: internal
MixSLab main window cursor was not changed correctly. (nc-21/7/97).

fix: internal
Added code for WaveSLab to interpolate samples when the cursor skips positions
during freehand painting, due to large mouse movements. Without this there 
were 'holes' left in a drawn wave. (nc-22/7/97).

fix: internal
Changed packing options in WaveSLab to correct resizing issues. (nc-22/7/97).

enhancement: internal
Added browsing capabilities (tk_get*File) to various file requestor screens.
(nc-22/7/97).

enhancement: internal
Built the Import parameters menu. (nc-22/7/97).

enhancement: internal
Coded another RMS algorithm into dynamics. Rather CPU intensive, but the added
accuracy notably improves the dynamics algorithms. (nc-22/7/97).

fix: internal
Several issues with export of files since rewrite for libdaccess. (nc-22/7/97).

fix: internal
Applied same set of fixes to import files code. (nc-23/7/97).

enhancement: internal
Build added Decompression algorithms for 4to1 operation, where rather than 
insert 0 we either duplicate sample, or interpolate sample. The last two are
arguably incorrect, but at least the wavemeter needs them. (nc-23/7/97).

enhancement: internal
Build decompressionMethods into mixiod and libdaccess. (nc-23/7/97).

enhancement: internal
Build decompressionMethods into GUI. (nc-23/7/97).

enhancement: internal
Automated generation of slabhelp.h. (nc-23/7/97).

fix: internal
HelpSLab will now scroll large help texts. (nc-23/7/97).

enhancement: internal
Added context sensitive help to some of the requestor windows. (nc-23/7/97).

fix: internal
Errors in import parameter convergence prevented imports. (nc-24/7/97).

UNTESTED fix: internal
Build the rest of the convergence array for import operations. (nc-24/7/97).

UNTESTED fix: internal
Filled in values for (approximate) RA rates of 14400 and 28800 for import
algorithms. (nc-24/7/97).

fix: internal
Added code to remove dependency on select() over the audio devices in adiod,
since this apparantly hangs under the 2.0 kernel, causing grief at a number
of installations. Found issue with a clean RedHat installation, which gave the
same symptoms as reported by users. The code is fixed such that SLab now 
supports half duplex devices on a 2.0 kernel, but may restrict duplex support
to 2.1 kernels. The alterations are not great - the engine needs regular resets
to keep it active, and I am hesitant to spend more time fixing it, since the 
2.1 kernel and beta sound drivers work perfectly. The soundscape options (one
RO, one WO dev) should be made to work, although it doesn't yet. (nc-27/7/97).

fix: internal
MonitorSLab fails on import/export operations, appears to be a timing issue,
altered some of the sequences. (nc-28/7/97).

UNTESTED enhancement: internal
Added code for 44100<->48000 imports and exports. (nc-28/7/97).

enhancement: internal
Added import/export to the track float menu, made the filetype an option of the
import/export requestor menus. (nc-28/7/97).

enhancement: internal
Added hybrid compression algo, where a mix of time and amplitude is used to
generate the compressed data. Results are impressive. (nc-28/7/97).

fix: internal
Mixiod was incorrectly using the same compressionIndex for each separated track
of a stereo stream. (nc-28/7/97).

enhancement: internal
Made some adiod alterations to the above fix, such that dual device operations
work, allowing some "duplex" operation over two interfaces. Only available
in subMixAlgo5. (nc-29/7/97).

enhancement: internal
Ported 2.0 kernel changes back into SLab 1.0 stream. (nc-29/7/97).

enhancement: internal
Implemented hybrid 4 to 1 compression, but with no interpolative decompression
method (selection of interpolative decompression will use duplication of sample
rather than insert-0). (nc-29/7/97).

fix: external
Distributed 1.0.4 and 2.0alpha1 with 2.0 kernel fixes. (nc-31/7/97).

fix: internal
Completed code for the Leslie so that all paramters are now linked through to
the DSP algo. Effect works in bus sync mode. (nc-3/8/97).

fix: internal
Finnished testing Hybrid and general 4to1 comdec algos. Removed error with
sample counts. Libdaccess also failed to converge Method from file. (nc-3/8/97).

fix: internal
Frontend did not correctly reinitialise the compression Methods. (nc-3/8/97).

fix: internal
Mixiod copied wrong data segment in some particular record methods. (nc-3/8/97).

fix: internal
MicroMix would only fully link events to device if DeviceSLab was open. Fixed
the macro call to force the changes. (nc-3/8/97).

fix: internal
Rewrote the reverse algorithm to move out from centre. (nc-3/8/97).

fix: internal
Could not create new CDs, directory was built into sublevel. (nc-3/8/97).

fix: internal
Integrated browser into group requestors. (nc-4/8/97).

fix: internal
MixSLab main window now reloads on generation of new groups/files. (nc-4/8/97).

fix: internal
Track lengths were incorretly calculated with compression active. (nc-5/8/97).

fix: internal
Tape deck memory controls were not printed in line. (nc-6/8/97).

fix: internal
Build applications cascade into view options, the applications list was 
getting too long. (nc-6/8/97).

fix: internal
Tape spool location was incorrectly set after stopping tape. (nc-6/8/97).

fix: internal
Export globally messed up the export track number. (nc-10/8/97).

fix: internal
Mixiod was skipping tracks when passing over compression operations as a part
of the compression optimalisations. (nc-10/8/97).

fix: internal
Cleaned up readme files ready for 2.0 beta release. (nc-10/8/97).

enhancement: internal
Added libslab API call to get current filename. (nc-11/8/97).

enhancement: internal
Added 4 user memories to the Leslie. Saved to a file called "songname.effect.x"
in the dataBase directory. Will attempt to load mem 0 on start. (nc-11/8/97).

enhancement: internal
Added 4 user memories to BlueValveIt. (nc-11/8/97).

enhancement: internal
Added 4 user memories to the stereographic. (nc-11/8/97).

fix: internal
Full tape reset should now save a baseline, remove all effects, reset the
engine, and finally reload the whole baseline. This prevents orphaned effects
from hanging around. (nc-11/8/97).

enhancement: internal
Default gain level for normalisation changed to 128, from 256. (nc-11/8/97).

enhancement: internal
Bus effect attachments were showing some race conditions. Made the timing
a bit more flexible, and altered the effects save sequence. (nc-11/8/97).

enhancement: internal
Addition of user memories to BlueValveIt brought to light some anomalies with
algorithm selections. (nc-11/8/97).

enhancement: internal
Reved controlbuffer and release codes in preperation for 2.0beta1. (nc-11/8/97).

enhancement: internal
Changed BlueValveIt and StereoGraphic memories to be buttons rather than menus,
the interface fit is better. Leslie is still a menu. (nc-12/8/97).

enhancement: internal
Removed all dependencies on the slab.csi file. The frontend now creates the
controlBuffer, and all daemons are passed controlSegID as argv[1]. The need
for this file was becoming a liability. (nc-13/8/97).

fix: internal
Leslie and BlueValveIt now load first memory on startup. (nc-24/8/97).

fix: internal
Adiod did not manage the UnderRunCounter. (nc-24/8/97).

fix: internal
Import/Export should now have a working run length monitor. (nc-24/8/97).

fix: internal
Repaired some issues with SYNC bus timing, caused audible glitches.
(nc-24/8/97).

fix: internal
Reved controlBuffer and release ready for beta distribution. (nc-24/8/97).

fix: internal
TapeSLab would show incorrect track button count. (nc-25/8/97).

fix: internal
Save baselines not inserting effect names correctly. Fix will be in two halves,
firstly prevent insertion of NULL names, then correct link between GUI bus and
spawned effect. (nc-26/8/97).

fix: internal
Found a couple of potential cleanup failures due to race conditions with
regards to setting SHMEM IDs. (nc-26/8/97).

fix: internal
Reloading a saved session recording would fail (tight loop). (nc-27/8/97).

fix: internal
Session Play could result in negative delta times, if events started
overrunning GUI. This caused loss of session activity. (nc-28/8/97).

fix: internal
Some of the internal GUI effects would fail reattach when reloading songfile.
(nc-28/8/97).

fix: internal
Effects output bus was not saved as integer index. This became a requirement
since multiple device support. (nc-28/8/97).

fix: internal
Internal GUI effects did not carry parameter values across reload of GUI.
(nc-28/8/97).

notes: internal
Took out all extraneous puts and printfs in preperation for final distribution.
(nc-29/8/97)

fix: internal
Found some pretty esoteric bugs that occur if a mix is defined using effects
sends to output devices that have been undefined. Engine will core due to 
not having created the shared output memory segments after the next restart.
(nc-29/8/97)

fix: internal
Filter algo 6 did not correctly initialise its variables on start of the
Studio. (nc-30/8/97).

enhancement: internal
Finnished work on release 1.0 of the engine API, which allows third parties
to get full access to all of the SLab engine facilities. Will probably not
ship with 2.0 due to lack of debug testing. (nc-2/9/97).

fix: external 970904-001 - closed
The adiod could still slip into the select() on a 2.0 kernel, even with the
halfduplex hack. The tape logic was setting an operational state that was not
considered. (nc-4/9/97).

fix: internal
Altered licensing times in preperation for 2.0 release code. (nc-8/9/97).

notes: internal
Revised controlBuffer revision in preperation for 2.0 rel. (nc-8/9/97).

fix: internal
Altered potmeter to pick up pointer within 20 degrees of arc. (nc-14/9/97).

enhancemnt: internal
Added code for subsample zoom in from menu. (nc-14/9/97).

fix: internal
Wave Zoom potmeter failed zoom alterations (since enhancements to potmeters
and cursor pickup). (nc-14/9/97).

fix: internal
Re-recording of main output has been broken since adiod was reworked. Moved
the relevant changes back to the mix algo. (nc-14/9/97).

fix: internal
Returned a couple of "lost" statistics from the WaveSLab, count and level.
(nc-15/9/97).

enhancement: internal
Added to code (in subMixAlgo5 only) to allow any given track to be mixed down
to any audio output device. This allows some serious multiphonic mixes, and 
approaches the original concept of a full bussing architecture. (nc-19/9/97).

enhancement: internal
Incorporated the TrackSLab into the Studio, a single window to manage just
one track. Gives extra realestate for track display. Post 2.0 will improve the
graphical display, ie, will put this realestate to better use. (nc-19/9/97).

enhancement: internal
Altered HelpSLab such that it is resizable, on request from Andre van der
Vlies. The HelpSLab was barely usable on a 800x600 or 1024x768 display.
(nc-19/9/97).

enhancement: external: 971001-001 - closed
For Zefiro Accoustics ZA-2 card.
Added flags to prevent any control over an audio device, dependent on the
"NoControls" button on an audio device, configurable in the StudioFiles
sheet. This is going to be useful for support of some audio cards where
OSS only supports raw data, no controls. (nc-2/10/97).

enhancement: internal
Reved controlbuffer for pre-release 2.0, with minor changes to the readme 
files regarding dB gain on boost, etc. The opening screen for the HelpSLab
now refers to the "Topics" button, rather than "topic buttons". (nc-2/10/97).

fix: internal
Studio would not build if trackCount was less than BankSize. Workaround is to
edit the .dat file for the song. (nc-7/10/97).

enhancement: external
Added initial code for support of the Zefiro ZA-2 card. This will not be
complete without a rebuild with the new ZA-2 drivers. (nc-8/10/97).

fix: external: 971005-001 - closed
Engine will skip some recorded data on starting a song. Introduced code to
fully synchronise the output daemons before tape start, not just run_state 
but also buffer contents. (nc-18/10/97).

fix: external: 971027-001 - closed
Mix was not initialised by opening the tape slab. (nc-27/10/97).

enhancement: external: 971028-001 - closed
Returned the possibility to configure just 2 track in songfile. (nc-28/10/97).

fix:
Fixed some issues with starting DeviceSLab as first application. (nc-28/10/97).

fix:
Fixed some issues with starting WaveSLab as first application. (nc-28/10/97).

fix:
Altered record button text to have device indeces from "1". (nc-28/10/97).

fix:
Device flags were not being saved correctly. (nc-28/10/97).

fix:
Added code to ensure only one source can be selected per track. (nc-29/10/97).

enhancement:
Built in the Input Noise Reduction algorithms and frontend. (nc-30/10/97).

fix:
StudioSLab will now create the input noise reduction and DeviceSLab windows,
but hide them. This ensures parameters are correctly configured. (nc-1/11/97).

fix:
Put the input noise reduction into the display windows. (nc-1/11/97).

fix: external 970311-001 - closed
Altered HelpSLab to have readonly text. (nc-3/11/97).

fix:
Engine will clean out effects buffer on continue, prevents garbage from flying
around. (nc-4/11/97).

fix:
Exit requestor now prompts to save a mix before exit. (nc-8/11/97).

FIXES - post 2.1 release.
-----

enhancement:
Put in the initial codings for effects chaining. This will not be a part of
the 2.1 distribution, it will end up as 2.2 fuctionality. (nc-7/11/97).

fix: external: 971116-001 - closed
Reverb displays Spread twice. (nc-16/11/97).

fix: external: 971116-002 - closed
Flanger displays incorrect text. (nc-16/11/97).

fix: external: 971116-003 - closed
Dynamics effects have names that are too long. (nc-16/11/97).

fix: external: 971116-004 - closed
Input Noise Reduction uses illegal algorithms. (nc-16/11/97).

fix: external: 971116-005 - closed
Diverse textual errata in readme/help files. (nc-16/11/97).

fix: external: 971116-006 - closed
Some effects leave "text" in some of the parameter locations. Added code to
clear out this junk on init, as well as on exit of effect. (nc-16/11/97).

enhancement: external: 971116-007 - closed
Added hints to the Input Noise Reduction controls. (nc-16/11/97).

fix: external: 971116-008 - closed
MixAlgo_duplex3 would hang the engine. The extra sync added for data loss was
using an incorrect signal. (nc-16/11/97).

fix: external: 971116-009 - closed
Micro Mixer had lost its hint display since incoportion of DeviceSLab.
(nc-16/11/97).

fix: external: 971116-010 - closed
Engine would hang if effects were attached to the post send busses, and linked
to tracks. Fixed the busBufferSize calculation (work is still needed on the
busses, since the data linkage is still incomplete). (nc-16/11/97).

fix: internal:
Altered the reloading procedures to remove effects before doing a full reload,
should prevent duplication of effects. (nc-17/11/97).

enhancement request: external: 951116-011 - closed
Allow each effect to have a "trim" capability for the send and return busses.
This would allow the user to configure the range of volumes per effect as a
set of defaults which can then be manipulated later. The reason is that some
effects are more sensitive than others, this would give the possiblity to
smooth out the differences. Requirement would be a requestor sheet for the
trims per effect, and that the gui then apply the trim to the engine send
and return levels. There would be no changes required to the engine.
ETA, 2.3 or 2.4, but that all depends on chaining? (nc-17/11/97).

fix: internal:
Altering the subMixAlgo should now correctly redraw the mixer, including the
master controls which were previously ignored. (nc-17/11/97).

enhancement: external: 951118-001 - closed.
Completely review the mouse motion required to alter potmeter position. The
current spec is difficult to work with. Add option for SLab 1.0 type left
right movement only, then with "pickup" outside of pot, then the current
definition. Then add a mouse preference option. Add help text. (nc-18/11/97).

enhancement: external: 951118-002 - closed
Added code to select size of help text font, implemented in
"View->Change Studio View..." menu. (nc-17/11/97).

fix: internal:
StereoGraphic did not save the main volumes settings. (nc-17/11/97).

fix: internal:
New filter (algo 6) is incorrectly packed. (nc-17/11/97).

fix: internal:
Diverse filter parameters were linking incorrectly. (nc-17/11/97).

enhancement: internal:
Added Xdefaults support to the WaveSLab and StudioSLab so users can define
their own color schemes. (nc-18/11/97).

fix: internal:
Some baseline parameters would be saved incorrectly if not previously defined
in the loaded GUI. (nc-18/11/97).

fix: internal:
The dynamics gate indicator would not clear on stopping tape, only on rewinding
tape. (nc-19/11/97).

enhancement: internal:
Add code to support up/down as well as left right motion on the potmeters, 
fixing a minor issues with scaling at same time. (nc-19/11/97).

fix: internal:
Fade bitmask for drag&drop had "erase" as text. (nc-19/11/97).

fix: internal:
Removed the highlight from a number of the button creators. (nc-19/11/97).

fix: internal:
Fixed some more issues with baselining of device flags. (nc-19/11/97).

fix: internal:
Damaged controlBuffer initialisation sequences whilst altering bus effect
management. (nc-19/11/97).

fix: internal:
VU meter configuration will now be saved from current settings. (nc-20/11/97).

fix: internal:
VU meter configuration now supports more than 2 devices. (nc-20/11/97).

fix: internal:
MicroVar parameters and DeviceSLab parameters are now converged from existing
settings when creating a new songfile. (nc-21/11/97).

fix: internal:
StudioSLab for "stripped" algorithms should display minimal configuration.
This needs enhancements for when changing from stripped to subMixAlgo5, which
will not be done until later.
(nc-21/11/97).

fix: internal:
After reloading a baseline with saved effects, the send pot names were not
correctly reset. (nc-25/11/97).

KNOWN PROBLEMS 2.1
------------------

CHANGES - post 2.1 release, this will be 2.20 functionality.
-------

enhancement: external: 971127-001 - closed
Need ability to apply edits to multiple tracks simultaneously. This was 
requested by Fernando, is very reasonable, and was the intention anyway.
First coding has been started. This will give options to just do the selected
tracks, do all the tracks in a WaveSLab, or all tracks in a song. (nc-27/11/97).

enhancement: external: 971116-011 - closed
Build in the GUI requirements for effects trimming. Will allow user to 
specify defaults per effect, plus specifics for a given instantiation of a
given effect. Added an Audio menu option for the defaults, and a ChainSLab
menu option for the specifics. (nc-1/12/97).

enhancment: internal: closed.
Finalised the FX_ONOFF code and the baseline support for chaining. This 
baseline support should fix some issues with effect taking bogus init values
from the previously loaded effect, but we keep the restriction of only
one of any given effect in a chain. (nc-1/12/97).

enhancment: external: 971204-001 - closed
Added capability to configure the audio buffer window count. This was previously
coded to 4 blockSampleSize buffers, but can now be altered from 2 to 8
buffers. This will allow a user to get faster response on controller changes
but trade that off against greater sensitivity to interactive context 
switching that might cause "glitching". (nc-1/12/97).

enhancment: external: 971208-001 - closed
There is a demand to add the following features to WaveSLab:
1. Copy (save data)
2. Cut (save data, erase track or section)
3. Paste (insert data from saved file)
4. Undo (return last saved file)
5. Move (location of one track, with zero insertion at bounds)? Perhaps not.
This should be made as a set of extensions which include n-backout edit, not
least since a complete cut and paste option will require 1-backout. In addition
I would like to investigate the implementation of a "loop" button, and zero
crossing detection options. This would be desirable in 2.2, but loop and snap
can be slipped to later. (nc-8/12/97).
[As a side note, it may be necessary to reduce the icon size in the WaveSLab
since the number of operation buttons is going to be quite high.]

enhancment: internal: closed.
Added bus bypass option, in addition to single effect bypass. (nc-1/12/97).

enhancment: internal:
Integrating code for a smooth bevelled potmeter. (nc-15/12/97).

enhancment: internal:
Optimised potmeters to cache the potmeter pixmap when built, should lower the
overhead on redraw. (nc-15/12/97).

enhancment: internal:
Introduces colormaps into BlueValveIt, since SLab runs out of colors with the
new bevelled pots. Has a few side effects, but I do not want to colormap 
all of the windows, yet. (nc-22/12/97).

enhancment: internal:
Altered the look of the main studio sliders. (nc-29/12/97).

enhancment: internal:
Implemented WaveSLab zero search algorithm. (nc-29/12/97).

enhancment: internal:
Added "Snap" zero search button into WaveSLab. (nc-1/1/98).

enhancment: internal:
Implemented the "Loop" tool into WaveSLab, allowing section of audio data
to be exported, then looped to main out. (nc-2/1/98).

enhancment: internal:
Added SLab edit file version 1 to slabPlayer, to allow sample previewing in
"Edit History" window. (nc-5/1/98).

BINNED enhancment: internal: - this was dropped for a complete revision of SB_D
Added initial code for support of SoundBlaster in full duplex. This is a 
_real_ hack: SB duplex input is only 8 bit. This would require major changes
for complete support, and lower than 16 bit resolution is not something I even
want in SLab. The hack is to convert the 8 bit inbound data into 16 bits at
the earliest point. THIS WILL ONLY BE IN A POST 2.2 RELEASE. (nc-6/1/98).
[This is the lowest common implementation. Changes may be made in future
releases to move the SB_DUPLEX support from adiod to mixiod, and then have
8 bit disk resident data. This is a lot of work, and would probably introduce
more bugs than it is worth. IN ADDITION: it would be useful to get the hack in
into 2.2: now that OSS has released the drivers, lets support them.]

enhancment: internal:
Integrated the first SOX frontend support, allowing for import/export of
multiple file types. Built in AU, VOC, AIFF, ICRAM and WAV. RAW files are done
by SLab, but this should really be changed such that if we find SOX, then 
export native files, and let SOX do a real converion. (nc-7/1/98).

--------------------------------------------------------------------------------
NOTES NOTES: no further 2.2 functionality. Code is now for debug and testing.
Not all of the above may make it into 2.2 - may drop SBFD and SOX_FE
________________________________________________________________________________

fix: internal:
Some of the paste functions failed to adjust for new offsets. (nc-7/1/98).

fix: internal:
Implemented some code to allow almost dynamic changes to loops whilst
active. (nc-8/1/98).

fix: internal:
Paste functions failed to save backouts. (nc-8/1/98).

fix: internal:
Playing an edit file could not be prematurely terminated, extremely annoying
on long files. (nc-8/1/98).

fix: internal:
Listen options from EditHistory called slabPlayer with inconsistent switches.
(nc-8/1/98).

fix: internal:
SOX called with incorrect options. (nc-8/1/98).

fix: internal:
Editing files needed to update the EditHistory dynamically. (nc-8/1/98).

fix: internal:
SOX_FE would exit SLab after exporting file. (nc-9/1/98).

fix: internal:
Exporting would not set correct file speed. (nc-15/1/98).

fix: internal:
Calling trackslab would not repaint mixer correctly. (nc-15/1/98).

fix: internal:
Dropping a new studio would cause app to exit. Altered some the the history
definitions which were done incorrectly, and the aWinSize operations which
were incomplete. (nc-15/1/98).

fix: internal:
import operations had several inconsistencies. (nc-15/1/98).

fix: internal:
Import/Export included as WaveSLab buttons. (nc-16/1/98).

fix: internal:
Alterwave ordering of wavemeter stats, to have count earlier. (nc-17/1/98).

fix: internal:
Minor changes to potmeter look. (nc-17/1/98).

fix: internal:
Removed extraneous prints statements for beta. (nc-17/1/98).

fix: internal:
Fixed some minor audio device flag issues. (nc-19/1/98).

fix: internal:
Removed chain menus from older submixalgoes. (nc-19/1/98).

fix: internal:
FX Chaining only allowed in subMixAlgo5. (nc-19/1/98).

fix: internal:
Import/Export WaveSLab button menu requested 2 tracks, not 1. (nc-19/1/98).

fix: internal:
Removed most of the kludgy 3 bit requestor highlights, replaced with a rather
more aesthetic 1 bit edge. (nc-19/1/98).

fix: internal:
TapeSLab recordPause button now highlights in red. (nc-20/1/98).

fix: internal:
Finalised the DAEMON_VERSION code to get release information from each active
engine process. (nc-20/1/98).

debug: internal:
Added code to display /dev/mixer commands for channel signal loss. (nc-21/1/98).

fix: internal:
Altered the help files to reflect the new feature set. (nc-21/1/98).

UNTESTED: fix: internal:
Added some code for an 8 bit noise reduction algorithm. Early development
tests indicated the SB in 8 bit mode introduced extreme amounts on noise at
the zero crossing points, and I would like to reduce this. (nc-22/1/98).

fix: internal:
SlabPlayer would fail on stereo files via frontend. (nc-22/1/98).

fix: internal:
Found one issue with signal loss in one channel. (nc-22/1/98).

enhancement: internal:
Added a trivial shift comdec algorithms set. Will eventually be used for 
8 bit read and write options. (nc-27/1/98).

fix: internal:
Fixed blueValveIt crash with "zero" parameter values. (nc-30/1/98).

fix: internal:
Added preset memories into BlueValveIt. (nc-30/1/98).
Amalgamated the presets and memories. (nc-1/2/98).

UNTESTED fix: internal:
Added code to return data to both stereo busses when in busOff mode, prevents
one sided audio data returns for stereo bussed effects. (nc-4/2/98).

enhancement: internal:
Implemented Dimension C, D and E, synchronised flanger algorithms. (nc-4/2/98).
[E will not ship for now, it has roughly the same quality as D, but eats CPU].

enhancement: external: ........
Deprecated the requisites for SB_DUPLEX. Appended it with GEN_CONVERGE which
will allow selective 8 bit input or output per device. This should allow use
of 2 devices for soundblaster, with output at 8 bits and input at 16 bits
with internal conversion. SB_DUPLEX will eventually be used for auto-setting
of the converence algorithms for SoundBlasters. (nc-8/2/98).

enhancment: external: 980127-001 - closed
Make the SB_DUPLEX more general, with options for 8 bit in/8 bit out so that
diverse soundcard options can be supported. This will dig into both the audio
device requestors for flags, and into the audio IO code to configure the
input and output resolutions. (nc-27/1/98).

fix: internal:
Improved some of the error checking from the init routines so if they fail 
they give more diagnostics than "Segmentation Fault". (nc-12/2/98).

enhancment: external: 980213-001 - closed
Add a global quit button in MixSLab main window. (nc-13/2/98).

enhancment: external: 980213-002 - closed
Add EMail address to help file main screen. (nc-13/2/98).

enhancment: external: 980213-003 - closed
Add capability to "deselect" input on track buttons. (nc-13/2/98).

enhancment: external: 980213-004 - closed
When input to track is selected, VU meter should monitor input level on that
particular track VU. (nc-13/2/98).

fix: internal:
Main out device cannot be configured to readOnly anymore. (nc-13/2/98).

fix: internal:
Cleaned up the BlueValveIt memories. (nc-15/2/98).

fix: internal:
Removed some extraneous debug messages from tcl compilations. (nc-15/2/98).

fix: internal:
Corrected some issues with DeviceSLab display updates (Gees, I HATE special 
cases). (nc-15/2/98).

fix: internal:
Issues with adiod half duplex were fixed, mostly flagging problems.
(nc-15/2/98).

fix: internal:
Coded input VU meters links to recording tracks into adiod. (nc-16/2/98).

fix: internal:
Coded output VU meters into adiod (to be closer to output dev). (nc-16/2/98).
[The VU evaluation is now done on the data after convergence into the buffer
that will be written to the audio file descriptor]

fix: internal:
Coded some of the TrackSLab changes to preserve mix values. (nc-16/2/98).

UNTESTED enhancement: external: 980216-001: Nico@nl
Can the potmeters track the +/- and up/down keys? Er, probably, but the TK
libraries seem to refuse distribution of KeyPress events. Need to get keyboard
focus first? This may also have other implications. Researching.

fix: internal:
Creating new song file loses the vuActive setting unless a Studio is already
open. Will now always default to "true" for new songs. (nc-16/2/98).

fix: internal:
Reworked the VU algorithms for the 8 bit convergence code. (nc-17/2/98).

fix: external: 980217-001:
Made some major alterations to the tapeLogic code to stablise support for
soundblaster full duplex. (nc-17/2/98).

fix: external: 980217-002 - closed
StudioSLab will no longer allow input selections from write only devices, nor
allow mixdown to readOnly devices (submixalgo5). (nc-17/2/98).

enhancement: internal:
Added state flags to adiod so that it can denote where it is in the processing
cycle. Output in "File->Stats->Audio". (nc-17/2/98).

fix: internal:
Eight bit input noise reduction is configurable for 8 bit input devices now,
not SB_DUPLEX. (nc-18/2/98).

enhancement: external: 980218-001 - closed
AutoMute option to remove signal from output when a track is being recorded.
(nc-18/2/98).

enhancement: external: 980218-002
Requirement for a big fat reverb, early and late reflections, independent
filtering and damping on each. In Stereo.

fix: external: 980219-001
Using the forward spool, and then immediately selecting rewing, or vice versa,
caused ridiculous spooling operations. (nc-19/2/98).

fix: external: 980219-002
Fixed issues with engine lock with SB_DUPLEX, related to tapeLogic.
(nc-20/2/98).

fix: internal:
Usng autoMute with muted tracks was annoying, since the mute was lost after
record. (nc-20/2/98).

fix: internal:
Rerecording did not work with SB_DUPLEX enabled. (nc-21/2/98).

fix: internal:
Stereo FX bus cleanup was incomplete, would cause engine hang. (nc-22/2/98).

enhancement: internal:
Implemented an output noise reduction algorithm for the 16->8 bit convergence.
Will adjust the shift/trunc algorithm, and compensate for the resulting gain
increase by pulling the PCM output level down. This could eventually be added
to with dithering convergence, and should prehaps already have filtering.
(nc-23/2/98).

fix: internal:
Moving from record->stop->play was failing. Also, record->play. Introduced some
extra code the the Stop button operation in TapeSLab, but some extra code to 
detect action of the Play button. (nc-23/2/98).

fix: internal:
The 8 bit in flag was not being correctly converged. (nc-23/2/98).

fix: internal:
Removed capability to alter the audio data file from the "StuiodFiles" 
requestor sheet, and renamed it the "Studio Devices" menu. This is more in
line with SLab capabilities, and User Interface Specification. (nc-23/2/98).

fix: internal:
Initial device config code did not set device capabilities, which has some
operation effects on device selection. (nc-23/2/98).

fix: internal:
More ugly issues relating to device reconfig. (nc-23/2/98).

fix: internal:
Moved a number of parameters from the Views requestor to a new Options 
requestor, since several of the parameters can be configured less intrusively,
ie, without the Studio reload associated with the Views menu. (nc-24/2/98).

enhancement: internal:
Added code to automatically remove the track record selection when the
stop button is pressed, configurable in the options menu. (nc-24/2/98).

enhancement: external: 980224-001
Added treble gain reduction into the noise reduction algorithm after a
conversation with Nicola Bernardelli. (nc-24/2/98).

fix: external: 980226-001
There remained some issues with input devices selections. Added code called
when the microMixer inits, to reset this to a predefined state. (nc-26/2/98).

enhancement: internal:
Changed the default requestor buttons sheet to include the buttons "Done",
"Apply", "Help" and "Cancel". Apply will execute the sheet command without
removing the requestor. "Done" and "Cancel" are actually now the same 
operation, but both seem logical to include. (nc-26/2/98).

fix: internal:
Optimised some of the wavemeter code to reduce disk requirements. This is just
a set of checks as to whether the current diskbuffer really needs to be flushed.
(nc-27/2/98).
FOR FUTURE STUDY.....
Future enhancements should cater for buffer scrolling speedups.
THERE ARE SO MANY SPECIAL CASES THAT NEED TO BE CATERED FOR TO PREVENT EXCESS
DISK ACTIVITY. RESIZING OF THE METER, SCROLLING, ZOOMING WILL NOW ALL CAUSE
A REBUILD OF THE DISK CACHE, WHICH IS _SLOW_, AND WORK TO PREVENT IT RUNS INTO
NEW CASES EACH TIME. The speedup code is now compiled with the current beta
releases. If there are any reports of problems they can be pulled out of the
main release.
One side effect of the optimisations is that edits are not immediately 
visible after being applied. Will consider some fixes to this.

fix: internal:
Altered some of the version printouts to be more sparing on major releases.
They should not print revision into. Also added revision to main window title
bar. (nc-27/2/98).

fix: internal:
Added a seperate output noise reduction requestor screen. (nc-1/3/98).

fix: internal:
Extended the cleanup routines for better "song switching". (nc-1/3/98).

enhancement: internal:
Implemented a complete feature set based on metronome support. There are four
major components to this code:
1. Requestor menu added in Audio pull down meny for metronome configuration.
2. Audio IO daemon will insert metronome pulses at configured intervals.
3. Audio IO daemon re-adjusts input signal to synchronise metronome.
4. The big one is that WaveSLab will now allow beat and bar edits.
Point 3 was required since tests implied that the latency on read/write IO
can be as much as 20 milliseconds, even on a full duplex device. Even if the
metronome pulses are placed at head of output buffer, the read data is offset
by between 1 and 3 thousand samples. The adjustment offsets will correct this
delay.
Extensions will be built to support assorted time codes (now really only
4/4 and 3/4, plus a few options), and eventually mixed time codes (long way
off). WaveSLab should also be extended with "tags" to mark regions of song
as chorus/verse, etc.
(nc-3/3/98).

fix: internal:
Added Bar and Beat offsets into WaveMeter display. (nc-4/3/98).

enhancement: internal:
Added wavemeter support for raw files and NBE files, to move in the direction
of a librarian, rather than track editor. Want to add ability to drag edit
history files into the WaveSLab. (nc-4/3/98).

fix: internal:
Minor text changes to some of the menus. (nc-5/3/98).

UNTESTED: fix: internal:
Consolidated offset formats to include beats and bars as well as the two SMPTE
formats and raw samples. (nc-5/3/98).

: fix: internal:
Removed the "transistor" algorithm from BlueValveIt, and appended another 
couple of modified VanZeggelaars called green and yellow. (nc-5/3/98).

fix: internal:
Plugged a hole in the record buffer offsets, preventing a bit of data slippage.
(nc-5/3/98).

fix: internal:
Altered some of the new wave offset formats. (nc-5/3/98).

fix: internal:
Reworked the BlueValveIt version of VanZeggelaars to get more control over
the valve Q and bias functions. (nc-6/3/98).

fix: internal:
Implemented a generic "invert" option into BlueValveIt. (nc-6/3/98).

fix: internal:
Removed some the of wait states for daemon initialisation, should speed up 
boot up and reset operations. (nc-6/3/98).

fix: internal:
Altered the audio fragment calculations to include the concepts of just 8 bit
IO. (nc-7/3/98).

fix: internal:
Couple of fixes to wavemeter table management introduced with the recent
disk optimising code. (nc-7/3/98).

fix: internal:
More input noise reduction issues, this time with just one of any given stereo
input pair. (nc-8/3/98).

fix: internal:
Altered the output noise reduction code to allow digital and analogue options
to be aplied independantly. (nc-9/3/98).

fix: internal:
Added SMPTE marks into the WaveSLab for frame based editing. (nc-9/3/98).

fix: external: 980314-001
Opening an empty CD would not give any "space" to create songs. (nc-14/3/98).

fix: internal:
Reworked all the 8 bit input conversion code. (nc-14/3/98).

fix: internal:
Altered the application of the output noise reduction code. (nc-14/3/98).

enhancement: external: 980314-002
Moved forward the mastering output file support. This is the basic code to 
support output to a file of the data written to the audio dev. (nc-15/3/98).

fix: external: 980316-001
MixSLab did not accept songs with capitalised first letter. (nc-16/3/98).

enhancement: external: 980316-002
Added a user configurable tape spooling speed. (nc-16/3/98).

enhancement: internal:
All device config is now done from a MixSLab main window button, rather
than from the File pull down menu. The device configuration is global to
the whole application, rather than song specific. (nc-16/3/98).

enhancement: internal:
Request to reconfig the audio devices is now pre-empted by a confirmation 
requestor, since it closes all apps. (nc-17/3/98).

enhancement: external: 980318-001
WaveSLab export menu did not prompt for export file name. (nc-18/3/98).

fix: internal:
Export routines did not sure the offset format definitions. (nc-18/3/98).

fix: internal:
Added mm:ss.xxx as additional offset format. (nc-19/3/98).

fix: internal:
Metro beats in WaveSLab were incorrect for SMPTE offsets. (nc-19/3/98).

fix: internal:
ZeroFind and Beat/Bar find were both applied to end of selection. (nc-19/3/98).

fix: internal:
Added CDR to the file format supported in the SOX frontend. (nc-20/3/98).

fix: internal:
The devices requestor "Cancel" button was broken. (nc-16/4/98).

fix: internal:
Reworked the devices icon. (nc-16/4/98).

fix: internal:
Mastering output now saves a file correctly. The format may need some
alterations. (nc-16/4/98).

fix: internal:
Importing raw files would build incorrect file name for sox. (nc-17/4/98).

fix: internal:
Importing raw files failed to set correct file flags for sox. (nc-17/4/98).

fix: external: 980417-001: closed
Options requestor does not fit 800x600 monitor. (nc-18/4/98).

fix: external: 980417-002: closed
Help "Topic" menu does not fit 800x600 monitor. (nc-18/4/98).

fix: external: 980417-003: closed
Import file requestor forgets filetype. (nc-18/4/98).

fix: external: 980417-004: open
WaveSLab does not fit in an 800x600 display. Intended fix is to reduce the
icon sizes from 48x48 down to 32x32.

fix: internal:
Improved the studio packing operations when changing algorithms, concentrating
on the mastering section. (nc-19/4/98).

fix: internal:
TapeSLab would segment if recPause was pressed twice. (nc-19/4/98).

fix: internal:
Recolored the CD ppm file. (nc-19/4/98).

fix: internal:
New device config methods now completely global, no more dependencies on 
StartSLab.tcl file. (nc-20/4/98).

fix: external: diverse numbers
The devConfig file default location was a readonly directory. (nc-4/5/98).



CHANGES - post 2.20 release, this will be 2.30 functionality.
-------

enhancement: internal:
Alter the device initialisation routines to allow device to select its own
fragment size (usually about 8k). Whilst this is actually trivial, the side 
effect is that we now need to converge BSS onto fragment.

fix: internal:
A couple of alterations for 800x600 support. (nc-29/9/98).

enhancement: internal:
Decoupled block sample size from audio fragment size, and included new audio
init routines. (nc-29/9/98).

enhancement: internal:
Configured metronome into new audio algorithms. (nc-1/11/98).

fix: internal:
IOCTL debug produced some unexpected outputs. (nc-1/11/98).

enhancement: internal:
Built microAdjust routines into new fragment algorithm. (nc-1/11/98).

enhancement: internal:
Built wowFlutter routines into new fragment algorithm. (nc-1/11/98).

fix: internal:
Altered Analogue parameters menu for 800x600 display. (nc-1/11/98).

enhancement: internal:
Coded mastering output into new fragmentation routines. (nc-2/11/98).

enhancement: internal:
Added option for IGAIN support enable/disable. (nc-12/11/98).

fix: internal:
Included error catching for FX drag and drop. (nc-13/11/98).

fix: internal:
Added code to converge older config files for new releases. (nc-14/11/98).

fix: internal:
Remedied some anomolies in device record source selection. (nc-14/11/98).

fix: internal:
A cancelled "Save Mix To" would produce error. (nc-14/11/98).

enhancement: internal:
Added FDUP flag for fdup of audio device, or just a copy. (nc-17/11/98).

enhancement: internal:
Added PreLoad flag for audiodev, put it in the Digital Params menu, although
it can be a per device option. (nc-17/11/98).

fix: internal:
MicroAdjust algorithm would distort noticably when slowing down. (nc-17/11/98).

fix: internal:
Metronome was out of sync due to dioPWrite pointer management during playback.
(nc-18/11/98).

fix: internal:
A bzero on the audio buffer was causing some initial dataloss in the startphase
of a mix. (nc-19/11/98).

fix: internal:
Added more daemon sync in tapeLogic to prevent stuttering. (nc-19/11/98).

fix: internal:
Metronome offset calculation was broken, fixed in adiod and wavemeter.
(nc-19/11/98).

fix: internal:
Drag/Drop loop on stereo operation would fail. Now defaults to dropTrack plys
one. (nc-19/11/98).

fix: internal:
PreLoad option was not reloaded on reconfig. (nc-20/11/98).

fix: internal:
Altered bfind to keep existing max if higher than current. (nc-20/11/98).

enhancement: internal:
PotMeters now respond to up/down/left/right arrow keys. (nc-22/11/98).

enhancement: internal:
PotMeters now show focus highlights. This was required since support for key
events requires focus, and it could be misleading which meter has input.
(nc-22/11/98).

enhancement: internal:
Main studio display shows some tape counter status. (nc-22/11/98).

fix: internal:
Potmeter focus highlights would remain active when out of focus on potmeters
with zero highlight width (since the highlight was forced). (nc-23/11/98).

fix: internal:
Audio Stats would segment. (nc-24/11/98).

fix: internal:
Fixed some libslab issues related to SHMEM linkup being at arbitrary locations.
(nc-24/11/98).

fix: internal:
FX parameters were lost from baseline file with subMixAlgo3 due to
implementation of FX Chains. (nc-24/11/98).

enhancement: internal:
Added capability to prevent printing of the send hello message. (nc-25/11/98).

fix: internal:
Added speedups to effect parameter acceptance rate. (nc-30/11/98).

fix: internal:
Fixed more issues with SHMEM links at arbitrary locations. (nc-31/11/98).

enhancement: internal:
Added "lowRes" option to get filters, VU meters and busses visible on 800x600
display. (nc-1/12/98).

fix: internal:
WaveSLab metro beats were not correctly in sync. (nc-1/12/98).

fix: internal:
WaveSLab scrolling was inversed at subsample zooming. (nc-1/12/98).

fix: internal:
Fixed the low res slider length to something useful. (nc-2/12/98).

fix: internal:
Hello "Do/Don't show" buttons were printed in other messages. (nc-2/12/98).

fix: internal:
Made changes to the pointer management for the new adiod output routines in 
half duplex mode, preventing ticks on record. (nc-2/12/98).

fix: internal:
Altered some of the effect naming in the front end for stereo channel effects,
and some minor signalling sequences. (nc-2/12/98).

fix: internal:
Split mixers would fails to pack some of the filters, and the color scheme 
needed working on in the .Xdefaults file. (nc-2/12/98).

fix: internal:
Alterations to filter algo were no longer reflected in GUI. (nc-3/12/98).

fix: internal:
Moved Low Res monitor option to Views configurator. (nc-4/12/98).

fix: internal:
Dimension effect used returns in params, leaving display warped. (nc-4/12/98).

fix: internal:
Removed some highlight from the on/off button of effectSLab. (nc-4/12/98).

internal:
Moved on/off button to right of effect. (nc-4/12/98).

enhancement: internal:
Altered some potmeter microPositioning code for better response. (nc-6/12/98).

enhancement: internal:
Accelerated the initialisation of the mixing desk. (nc-9/12/98).

enhancement: internal:
Incorporated help "balloons" into WaveSLab, as a precursor to small icons.
(nc-14/12/98).

enhancement: internal:
Added balloons to mixslab main window. (nc-15/12/98).

enhancement: internal:
Altered record buttons so that first device is depicted as L/R, and the rest as
$dev/R, since most users will only have one device. (nc-15/12/98).

fix: internal:
Drag and drop CD would fail due to parameter management issues. (nc-15/12/98).

fix: internal:
Idem ditto for bus index management. (nc-15/12/98).

fix: internal:
Drag and Drop track to wave did not configure editHist correctly. (nc-16/12/98).

enhancement: internal:
Incorporate a global configuration file, more parameters demanded it.
(nc-16/12/98).

fix: internal:
Remove scale motion with button 2, which is drag and drop. (nc-17/12/98).

fix: internal:
Put track float menu back into bussed algorithm. (nc-17/12/98).

enhancement: internal: UNTESTED - this will probably slip to 3.0
Added PunchIn/PunchOut capabilities. (nc-17/12/98).

fix: internal:
Removed some trailing noise on end of song. (nc-24/12/98).

fix: internal:
FX Trimming defaults menu scaled for 800x600 support. (nc-24/12/98).

fix: internal:
Moved PIPO to TapeSLab, which is more logical. (nc-27/12/98).

fix: internal:
Made some cosmetic alterations to TapeSLab to give graphic rather than text
based buttons. (nc-29/12/98).

enhancement: internal:
Was requested to support red text for entry windows. Added option for red or
green. (nc-29/12/98).

fix: internal:
Lost Hello on/off switch again. (nc-29/12/98).

fix: internal:
Drag/Drop of filters would cause error message due to alterations to convergence
algorithm. (nc-29/12/98).

enhancement: internal:
Removed an excess copy operation caused by SLAB_PIPO forcing mixiod into using
compression algorithms (with no compression active) on all files. (nc-29/12/98).

fix: internal:
Invoking TrackSLab did not unmap StudioSLab blade. (nc-29/12/98).

fix: internal:
BladeLists could be wiped out starting Studio afer Tape. (nc-29/12/98).

fix: internal:
TrackSLab could fail with selection of unconfigured dynamics section.
(nc-30/12/98).

fix: internal:
TrackSLab no longer packs dynamics when not available. (nc-30/12/98).

fix: internal:
TrackFloat menu was not always posted, due to bindings. (nc-30/12/98).

fix: internal:
Removed some text edit base failures which occured due to playing with the TCl
init files. (nc-30/12/98).

enhancement: internal:
Separated distrack from mixer track for floatalgo. (nc-5/1/99).

fix: internal:
Bladescroll down had incorrect padding with padx 2. (nc-5/1/99).

enhancement: internal:
Bladescroller position is now saved in baselines. (nc-9/1/99).

fix: internal:
Using trackSLab in dual mixer window did not correctly repack. (nc-10/1/99).

fix: internal:
Remapping mixer with dual display would break uniqueness. (nc-10/1/99).

enhancement: internal:
Added a mini tape controller to StudioSLab. (nc-10/1/99).

enhancement: internal:
Put in a few more low res options on menufonts and scrollbars. (nc-12/1/99).

fix: internal:
Made some alterations to trackcount calculations for dual views. (nc-15/1/99).

enhancement: internal:
Made some cosmetic improvements on microTape, plus balloons. (nc-15/1/99).

fix: internal:
Default effects trimming values were not hashed correctly. (nc-15/1/99).

enhancement: internal:
Added some more SoundBlaster 16 full duplex support, put into the new fragment
algorithms. (nc-19/1/99).

fix: internal:
Drag drop of track to mixer would not configure correct file. (nc-18/1/99).

enhancement: internal:
Old ioctl() config can now be applied to subFragment. (nc-23/1/99).

fix: internal:
Added more lowRes options to device configurator. (nc-23/1/99).

enhancement: internal:
Added debug options panel to gui. (nc-25/1/99).

enhancement: internal:
Added stdout dump option to stats screens. (nc-25/1/99).

enhancement: internal:
Added button options to start StudioSLab from CD button. (nc-25/1/99).

fix: internal:
VU Meter clocking would gather momentum over regen of studio. (nc-1/2/99).

fix: internal:
Dual devices would fail with subfragment algorithm. (nc-1/2/99).

fix: internal:
Some issues with SB_16 in full duplex. Now only supported in 8 bit mode. This
may change in future. (nc-1/2/99).

fix: internal:
Solidified the reset operations that were a bit sensitive. (nc-2/2/99).

fix: internal:
Bus trims and bus volumes were being lost due to dynamic use of busParam entries
so needed some reworks. (nc-2/2/99).

fix: internal:
Added code to remap master filters between algorithms. Packing is not corrent,
they appear above the master vol controller, no big deal. (nc-9/2/99).

fix: internal:
Subfragment init code was calling incorrect routines. (nc-10/2/99).

fix: internal:
Audio parameter change failures now produce readable text. (nc-10/2/99).

fix: internal:
Rerecording main out woudl slip first few beats. (nc-10/2/99).

fix: internal:
SubFragment would lose data/desynchronise due to multi support. (nc-10/2/99).

fix: internal:
Low trackCount would build incorrect mixing desk. (nc-10/2/99).

enhancement: internal:
Reworked makefile to support multiple revision building. No net effect on code
other than it is possible now to build 2.30 from 3.0 code, for example, and
carry all newer fixes back to the old revision. (nc-12/2/99).

fix: internal:
SLab will check for running processes, and cleanup SHM segs if they exist. Will
not do so if mixslab is already operational. (nc-12/2/99).

fix: internal:
Pause button will now stop/start the disk IO daemon. (nc-12/2/99).

fix: internal:
Low res now alters master and bussing displays as well. (nc-12/2/99).

fix: internal:
App now exits gracefully from window QUIT request. (nc-12/2/99).

UNTESTED: fix: internal:
ADIOD now includes some alterations for input window checks for mixiod (that
were previously assumed okay). (nc-12/2/99).

fix: internal:
Added some lowlights to the potmeters, sort of shading. Purely cosmetic, but
makes them stand out a bit more. (nc-12/2/99).

enhancement: internal:
Introduced a halfSplit mixer, where a dual view can be in two windows rather
than three. (nc-13/2/99).

: internal:
Altered name of stereo busses to "groups", its more logical. (nc-13/2/99).

fix: internal:
SLab logo is now started as zero when disabled. (nc-13/2/99).

fix: internal:
More cosmetic alterations to low resolution display support. (nc-13/2/99).

enhancement: internal:
SLab logo now includes option to start/stop when playing. (nc-13/2/99).

fix: internal:
Updated some of the readme file for help text generation. (nc-13/2/99).

fix: internal:
SubFragmented devices would fail to record a single l/r channel. (nc-13/2/99).



CHANGES - post 2.30 release, this may be 3.0 functionality.
-------

UNTESTED: enhancement: internal:
Mixer now supports floating point mixdowns. These include full bussing, where
the disk data is separated from the track data, and the mixer is user
configurable. (nc-4/2/99).

UNTESTED: enhancement: internal:
Added adiodMulti code for adiod to handle several audio devs. (nc-9/2/99).

UNTESTED: enhancement: internal:
Incorporated a filtered side chain input gating compressor. (nc-18/2/99).

UNTESTED: enhancement: internal: Thanks to Nicola Bernardelli.
Incorporated another reverb called "chambre" with some more reasonable 
reproduction. May be compute intensive. (nc-18/2/99).

UNTESTED: enhancement: internal:
Incorporated a filtered side chain input Ducker. (nc-19/2/99).

fix: internal:
Some of the track offsets in CDM frontend were calculated incorrectly due to
offset formats. (nc-22/4/98).

enhancement: internal:
Fixed some issues with iterative reselection of track record. (nc-28/2/99).

: enhancement: internal:
Incorporated floating output stage into previous int algos. (nc-2/3/99).

fix: internal:
Issues with buffer offsets would cause issues with stereo FX. (nc-2/3/99).

enhancement: internal:
FX lists now appear in multiple columns, there were too many FX for a single
column. (nc-2/3/99).

fix: internal:
DeviceSLab called as first application would generate error based on low res
support requirements. (nc-4/3/99).

fix: internal:
Added pre/post monitor buttons to mixAlgo build models to un/remap when 
selecting new algorithms. (nc-4/3/99).

fix: internal:
Fixed some issues with chained FX trim values. (nc-5/3/99).

fix: internal:
Changed default return bus pan values to half gain, from full off. (nc-5/3/99).

fix: internal:
Idem Ditto bus grouping. (nc-5/3/99).

fix: internal:
Potmeter values would "stray" over multiple invocations of a mix, due to
positioning calculation error for radians to integers. (nc-9/3/99).

fix: internal:
Polished off some final issues with setting potmeter values indirectly. Most of
these issues were introduced with TRUE_VALUE input key support. (nc-10/3/99).

fix: internal:
Beat/Bar marking points in WaveSLab were off due to rounding errors on the 
metroCounter. (nc-14/3/99).

fix: internal:
SMPTE marking points in WaveSLab were off due to incorrect init. (nc-14/3/99).

fix: internal:
Removed CD_R as output file format - not yet completed. (nc-15/3/99).

fix: internal:
WaveSLab requested incorrect editHist filename. (nc-15/3/99).

enhancement: internal:
Ported to FreeBSD. (nc-18/3/99).

fix: internal:
Engine could dump core as a sideffect of init sequences. (nc-18/3/99).

fix: internal:
Engine would burn CPU after exit. (nc-18/3/99).

enhancement: internal:
Revised the bitmaps for the microTape controller. (nc-18/3/99).



SLAB 3.0 RELEASE AS FIRST ROUND OF BETA



fix: internal:
Fixed errors in mixalgo selection for floats/ints in FX library. (nc-20/3/99).

fix: internal:
Altered the BUS_ON logic in FX library. (nc-20/3/99).

fix: internal:
Bus increments were broken for all but first send bus. (nc-20/3/99).

fix: internal:
Errors in bus init routines could leave illegal pointers in the bus stucture.
(nc-20/3/99).

fix: internal:
Altered padding on return bus text for single digit busses. (nc-4/4/99).

internal:
Exchanges import and export button packing sequence. (nc-4/4/99).

enhancement: external: 990406-001
Added an option for a default zoom factor for the WaveSLab. (nc-4/4/99).

fix: internal:
Metro position in wavemeter would end up damaged with SMPTE selections.
(nc-5/4/99).

fix: internal:
Fixed some issues with bar/beat/smpte edit selections. (nc-6/4/99).

fix: internal:
Offset accumulation in wavemeter was incorrect, causing misalignment of waves
and metro beats. (nc-13/4/99).

enhancement: external: 990413-001
Import/export routines will no longer call sox if the internal and external
formats are identical. (nc-4/13/99).

fix: external: 990416-001
Rewind from MicroTape would not zero the TapeSLab location. (nc-16/4/99).

fix: external: 990416-002
Echo displayed incorrect units for millisecond delays. (nc-16/4/99).

fix: internal:
Rerecording main output would be out of sync by one adiod buffer. (nc-19/4/99).

fix: internal:
There were some issues with configuration of a number of default parameters
when old config files were being read. (nc-19/4/99).

fix: internal:
Added a delta accumulater to the microAdjust algorithm, to reduce signal
distortion levels. Will not be integrated until after 3.0. (nc-21/4/99).

fix: internal:
Some editHistory operations would create a ghost directory in the bin tree, 
and generate an empty editHistory window. (nc-21/4/99).

fix: external: 990421-001 UNTESTED
Recording from arbitrary offsets was broken due to errors in the Carrelo fix,
where data loss was seen. Offsets were incorrectly set back to zero.
(nc-21/4/99).

fix: internal:
Termination conditions of a record operation could result in some data loss.
Changed the management of mixiod, to terminate it on full window. (nc-21/4/99).

fix: internal:
Edit sequence numbers should now be completely incremental. May result in large
numbers, but prevent overwriting of edit history files. (nc-21/4/99).

enhancement: internal:
Incorporated a song description requestor, similar to the track descriptors, but
for text applying to whole song. (nc-22/4/99).

fix: internal:
WaveSLab will now update after a record operation. (nc-23/4/99).

fix: internal:
WaveSLab magnify rotary is now accumulative, rather than truevalue. This gives
better tracking. (nc-23/4/99).

fix: internal:
WaveSLab cut/copy->paste would not have expected results. (nc-25/4/99).

fix: external: 990426-001
Mastering Output Enable would give a TCL error message, and fail. (nc-26/4/99).

fix: external: 990426-002
Floating point mix to multiple output devices would fail. (nc-26/4/99).

fix: internal:
Audio to disk daemon synchronisation was failing with multiple start/stop
operations. (nc-27/4/99).

enhancement: internal:
Added GUI debug options. Not much in there at the moment. (nc-27/4/99).

fix: internal:
View of studio would be incorrect for different mixes of trackCount and the
mixerSize introduced for bussed mixing. (nc-27/4/99).

fix: internal:
WaveSLab could crash if opened as first tool. (nc-27/4/99).

fix: internal:
WaveSLab would give incorrect zeroFind positions if selection occured at
boundary of first buffer. (nc-27/4/99).

fix: internal:
Patched up session recording. (nc-28/4/99).



SLAB 3.0 RELEASED AS SECOND ROUND OF BETA



fix: internal:
Removed references to tclScale, using internal scaler from now. (nc-28/4/99).

enhancement: internal:
Altered session recording facilities to use a millisecond timer rather than 
disk positions. Gives much better accuracy and tracking. (nc-29/4/99).
WILL NOT GO INTO 3.0.....

enhancement: internal:
Session recording altered to support arbitrary offset via use of the tape
memory buttons. Tape memory buttons now have a baseline associated with them, 
to preLoad the mix for a session record operation. (nc-29/4/99).
WILL NOT GO INTO 3.0.....

fix: internal:
Altered text to license failure message, reporting a version is old, rather than
its license has run out. Too many questions regarding licensing. (nc-29/4/99).

fix: internal:
Send bus numbering could end up giving error messages. (nc-29/4/99).

fix: internal:
Several issues with import/export of file types. Can now do export to wav, 
re-import, looks good. Will deliver SOX with distribution. (nc-29/4/99).

fix: internal:
Export will now display a monitor whilst SoX converts file types. The monitor
does not move, since we do not keep status for progress of SoX, but it does at
least indicate we are busy. (nc-29/4/99).

fix: internal:
Floating point init routines were not called in sequence, causing float mix
failure. (nc-30/4/99).

fix: internal:
Return bus popup menu will autoconfigure the ChainSLab entry. (nc-30/4/99).

fix: internal:
Altered name of startSong to test, the name was ambiguous. (nc-30/4/99).

fix: internal:
Fixed another issue with floating point master controller numbers. (nc-30/4/99).

fix: internal:
Drag and drop of bus operators to anything but another bus operator would give
an error message, rather than just passing over the drop operation. (nc-1/5/99).

fix: internal:
Menu operations were resetting low resolution flag during font selections, 
losing its baseline configuration. (nc-1/5/99).

fix: internal:
Altered some of the colour selections for the bus operators. (nc-1/5/99).

fix: internal:
Separated audio dev and studio dev readme text for help file. (nc-1/5/99).

fix: internal:
The session stripping operations were not functioning, pretty desperate when
you consider these are the only session editing features. (nc-1/5/99).

fix: internal:
Session editing track numbers were also out by one. Oops. (nc-1/5/99).

fix: internal:
Putting in more runtime debuging options. (nc-1/5/99).

fix: internal:
Session recorder table size is now configurable. (nc-1/5/99).
Will only be in 3.10 and later.

fix: internal:
Rebuild index from tcl header files to prevent wordBreak messages. (nc-2/5/99).

fix: internal:
Session event stripper now remains visible after edit operation. (nc-2/5/99).

fix: internal:
Session event stripper fails on stereo bus operations. (nc-2/5/99).

fix: internal:
Session recording/stripping fails on track send events. (nc-2/5/99).

fix: internal:
Session stripping fails on fully bussed events. (nc-2/5/99).

fix: internal:
Added from/to options to session stripping. (nc-2/5/99).

fix: internal:
Solidified some of the offset interpretation code to autoselect some of the
formats. (nc-2/5/99).

enhancement: internal:
Tape memory baselines are now applied only for changes. Speeds things up, and
prevent GUI remapping. (nc-3/5/99).

fix: external: 990504-001 jw
Drag and drop send/returns only operated on track 1. (nc-4/5/99).

enhancement: external: 990504-002 jw
Send bus numbers are now autocorrected if out of limits. (nc-4/5/99).

fix: internal:
Groups text was hanging around as bus after restart. (nc-4/5/99).

fix: external: 990504-003 jw
Multiple FX attachments was damaging consistency of bus mgt tables. (nc-4/5/99).

fix: external: 990504-004 jw
Effects bus offsets were still incorrectly calculated, resulting in only bus
zero having any effects modulation. (nc-4/5/99).

fix: internal:
Baselines could save effect attachments with incorrect naming. (nc-5/5/99).

fix: external: 990504-005 jw
Problem report on FX bussing issues indicated there were potential deadlock
conditions with chained stereo effects. (nc-5/5/99).

fix: internal:
Altered text of SLab effects to reflect bus and operator. (nc-5/5/99).

fix: internal:
Chained bus names were not reconfigured correctly after restart. (nc-5/5/99).

fix: internal:
Some return volumes were not reconfigure correctly after restart, including
stereo linked busses. (nc-5/5/99).

fix: internal:
Effects parameters were not correctly saved in baseline file. (nc-5/5/99).

enhancement: internal: external: jw
Effects now work either in dry mode, ie, pure input passthrough, or in wet mode.
In wet mode, only the modulation signal is returned. (nc-5/5/99).

fix: internal:
WaveSLab zoom out was broken. (nc-5/5/99).

enhancement: internal:
Incorporated PPM files for main window icons, including large and small version,
with additional support for small icons. (nc-6/5/99).

enhancement: internal:
And added support for greyscale colour changing icons. (nc-6/5/99).

fix: internal:
Cleaned up the Chambre reverb. (nc-7/5/99).

fix: internal:
Even more issues with initialisation of return volume levels. (nc-10/5/99).

fix: internal:
Small icon support left SLabLogo with bad icon. (nc-11/5/99).

fix: internal:
Altered default trim text for smaller windows. (nc-11/5/99).

fix: internal:
Chambre reverb damping parameter now applied in reverse. (nc-11/5/99).

fix: internal:
Mild reworks of the multitap interference algorithm to improve quality of
chambre. Effect is ready for release. (nc-11/5/99).

fix: internal:
Fixed a couple of icon anomalies introduced with small icon support.
(nc-11/5/99).

fix: internal:
There is an issue with float bussing where the main mix and the return mix can
be out of sync with FX delayed results. The correct fix is to manage multiple
output buffer pointers, one for main mix and one for bussing. This was a hack 
where we insert a wait state for the effect if it is late. (nc-11/5/99).

fix: internal:
Placing an effect on the back of a normalled bus would corrupt parts of the bus
management tables. (nc-12/5/99).

fix: internal:
Added grey/color icon support to the wave tools bars. (nc-17/5/99).

fix: internal:
Dragging track to track with floating point ops lost the command. (nc-17/5/99).

fix: internal:
Fixing numerous anomalies with bus op drag/drop. (nc-25/5/99).


3.01 HAS GONE INTO RELEASE. FOLLOWING WILL BE POST 3.01.




fix: internal:
SMPTE offsets were broken. (nc-27/5/99).

fix: internal:
Added code to sync memory offsets into WaveMeter offsets. (nc-27/5/99).

fix: internal:
Beat numbers need two places rather than one in the wavemeter. (nc-31/5/99).

fix: internal:
Metro pointer accuracy pulled up to sample level. It had an accumulating error
margin. (nc-31/5/99).

fix: internal:
Altered some cosmetics for low res support (800x600). (nc-14/6/99).

fix: internal:
Changed some window titles for requestors. (nc-14/6/99).

fix: internal:
Some of the SHMEM cleanup sequences were altered since they would cause core
dumps on exit for some OS releases. (nc-15/6/99).

fix: internal:
More issues with wavemeter metro marks due to inclusion of a new variable for
the SMPTE editing. (nc-15/7/99).

fix: internal:
Sample Rate reconfigurations were not being taken due to new location of 
definitions (from trackDesc to audioDev). (nc-20/7/99).

fix: external: (990726-004 - jw).
Incorporated a few PIPO fixes, but nees some rewrites now. (nc-27/7/99).

fix: internal:
Tape speed adjustments displayed in percentage points. (nc-29/7/99).

fix: external: (990726-005 - jw).
Moved several config parameters in the the globals section, and move the non-
intrusive parameters out of "Change View", since they do not need a restart.
(nc-29/7/99).

fix: internal:
Normalled busses would be lost after restart. (nc-30/7/99).

fix: external: (990726-003 - jw).
Added another 6dB gain to the returnLeft/returnRight busses. (nc-30/7/99).

fix: external: (990727-001 - toby).
The data access library, libdaccess, was damaged. (nc-30/7/99).

fix: internal:
Introduced some more reasonable defaults for secondary device controller
values. (nc-30/7/99).

enhancement: external: (990726-001 - jw).
PIPO is now based on offsets, and WaveSLab can set the offsets. There are a few
enhancements for accuracy that could be done. (nc-31/7/99).

enhancement: external: (990726-002 - jw).
Soft start, ala PIPO, is now the default record method. (nc-31/7/99).

fix: internal:
Cleaned up the Options requestor sheet. (nc-l/8/99).

fix: internal:
Save baseline to alternative filename would fail. (nc-l/8/99).

fix: internal:
Saving baselines with alternative mixing algorithms requires a redraw.
(nc-l/8/99).

fix: internal:
Made some cosmetic alterations to the readme file (mostly typos). (nc-l/8/99).

fix: internal:
Made the startSLab script be a little intelligent looking for SLAB_HOME.
(nc-l/8/99).

SHOULD ADD NEW MENU GROUPING SUCH THAT INTRUSIVE PARAMETERS, WHICH REQUIRE
AN ENGINE RESET, ENGINE PARAMETERS THAT CAN BE APPLIED DYNAMICALLY, AND GUI
PARAMETERS THAT ARE DO NOT NEED AN APPLY ARE IN SEPARATE MENUS.

fix: internal:
Altered menu structure to separate intrusive, non-intrusive and GUI parameters.
(nc-2/8/99).

fix: internal:
Altered microAdjust parameters to be device specific. (nc-2/8/99).

fix: internal:
Can now disable session memories. (nc-2/8/99).

fix: internal:
Recording with adjusted tape speed would glitch, made some very minor changes
to the dithering algorithm. (nc-2/8/99).

fix: internal:
Optimized the subFragment IO algorithms. (nc-3/8/99).

fix: internal:
Recording with adjusted tape speed would glitch, made some very major changes
to the dithering algorithm. Needs testing..... (nc-4/8/99).

cosmetic: internal:
Altered colours of stereo bussus to promote visibility. (nc-4/8/99).

fix: external: (990816-001 - jw).
Some buffer indices to the mastering output were incorrect in the subFragment
algorithm. Have tested fixes internal, need confirmation. (nc-16/8/99).

fix: internal:
Minor issue where audio daemon would attempt to close mastering output file
even when negative fd indicated. (nc-24/8/99).




DIVERSE OTHER ENHANCEMENTS IMPLEMENTED FOR 3.20 RELEASE, SUCH AS SCOPE, AND
A COUPLE OF APIs.

enhancement: internal:
Added a network tap to the audio daemon, and linked this into a 'scope. Tap
is lossy at the moment, since the scope does not need all data. (nc-31/7/99).

enhancement: internal:
Added an audio API, where all the sound calls can be reworked. Will deliver 
with source code, and may make 3.10. (nc-31/7/99).

enhancement: internal:
Added a control API, where all mix operations can be managed via external UDP
messaging library. Library will be delivered with source, and is intended for
MIDI management of mixer. (nc-31/7/99).






DIVERSE CD MASTERING FEATURES ARE ALREADY COMPLETED. THEY WILL ONLY GO INTO THE
EVENTUAL 4.0 RELEASE THOUGH, after they have been tested.

UNTESTED: enhancement: internal:
Output mastering will now pad files to CD-R sectoring sizes, and the output
file name is converted into a '.cdr' extension if not already present. Futher
checks will be done on output endian format for eventual CD mastering.
(nc-21/4/98).

enhancement: internal:
Incorporated a per song track list memory into CD mastering frontend.
(nc-21/4/98).

enhancement: internal:
Reworked the CDMaster bitmap for the MixSLab main window. (nc-21/4/98).

enhancement: internal:
Implemented the framework for the CD Audition SLab. (nc-22/4/98).

enhancement: internal:
Implemented the links to the CD burner and ISO-FS code. (nc-23/4/98).

enhancement: internal:
Mastering output can be selected as RAW or CDR depending on switches (or just
the file name extension). (nc-23/4/98).

enhancement: internal:
CDR output file support built in with endian support. (nc-24/4/98).

NOTES
-----


THANKS:
-------

Go out to:
Ben, for Van Zeggelaars algorithm.
Dev and Hannu from 4Front, for technical support getting duplex audio to work.
Julian Carro for suggestions on mixer presentations.
Andre van der Vlies, for late 2.0 beta testing.
Fernando Carello for constant interest and debugging.
Nicola Bernardelli for extraordinarily complete comformance testing.
Jonathan Woithe, who gave input on IO channel configuration,
Max Tereshenkov, who provided some concrete feedback during alpha/beta tests,
and all of the alpha and beta testors.


Back to the main index.
We support
OpenDVD
This site is maintained by Nokey. Copyright © 1999-2001.
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
Last update: Tuesday Mar. 13 2001