
---------------------------------------------------------------------------
-- Play16 version 1.6 (04.02.96) - a versatile soundplayer for the Amiga --
---------------------------------------------------------------------------

Features in brief
-----------------
 - autodetects and plays several soundfiles, up to 16 bit / 56 kHz / stereo
 - full Workbench support (but not Intuition and no GUI)
 - always correct playback speed, even for sounds >28 kHz
 - realtime playback from harddisk, optimized assembler routines
 - optional 14 bit output (less noise but not as good as true 16 bit)
 - automatic or manual audio filter control
 - plays mono sounds on *both* channels, not only on the left one
 - plays (and loops) files that are larger than memory
 - preloading for exactly timed start of playback
 - fast uLaw decompression
 - system friendly audio channel allocation
 - optionally dump the output into a file (can be used to convert sounds)
 - supported Filetypes are:

   * Microsoft RIFF-WAVE  (.WAV)  mono/stereo, 8/16 bit, linear/uLaw/ADPCM
   * Creative Voice File  (.VOC)  mono/stereo, 8/16 bit, linear
   * Sun/NeXT Audio       (.AU)   mono/stereo, 8/16 bit, linear/uLaw
   * MacroSystem Audio    (.MAUD) mono/stereo, 8/16 bit, linear/uLaw
   * Apple/SGI/Amiga AIFF (.AIFF) mono/stereo, 8/16 bit, linear
   * Amiga IFF-8SVX       (.IFF)  mono/stereo, 8    bit, linear/FibDelta
   * Any raw sound data as long as it matches one of the following:
     -  8 bit signed
     -  8 bit unsigned
     - 16 bit signed, Intel format    (LSB first)
     - 16 bit signed, Motorola format (MSB first)

        - supported output devices are:

   * Native Amiga chipset (Paula)  8 bit
   * Native Amiga chipset (Paula) 14 bit
   * Native Amiga chipset (Paula) 14 bit calibrated (Christian Buchner)
   * MacroSystem Maestro Pro      16 bit 44.1kHz and 48kHz only
   * IFF-8SVX file dump            8 bit

========================== Section 1: Quick start =========================

What do I need to use Play16?
-----------------------------
Any Amiga running Kickstart/Workbench 2.04 or greater.

To use the calibrated 14 bit output you need a valid CyberSound preferences
file in your ENVARC: directory. If you don't have one already it can be
generated with Christian's calibration package included in this distribution.

Maestix.library V39 or higher is required to use the MPro board for output.

Where do I find the latest version?
-----------------------------------
 - FIDONET: Amiga Venture BBS, Germany (2:2432/350)
 - AMINET:  mus/play
 - WWW:     http://linux.rz.fh-hannover.de/~wenzel/Play16/

further I recommend to have a look at the following packages:

CyberSound:
 - AMINET:  disk/cdrom/14Bit_CDPlayer.lha

Maestix:
 - AMINET:  util/libs/Maestix39_00.lha

How do I use it?
----------------
From CLI:       Simply type "Play16 <filename>" and that's it!
From Workbench: Just doubleclick on it's icon. A filerequester will pop up.

All possible options will be explained later. If you set none of them, the
defaults will be used.


==================== Section 2: Background information ====================

What does it do?
----------------
Basically, Play16 is capable of playing uncompressed and _some_ compressed
soundfiles through Amiga's standard audio device or an increasing number of
alternative devices. If the actual resolution or playback rate exceeds that
of the Amiga hardware, realtime conversion is done so that the sound is
being played back correctly.

You can even play 16 bit / 44.1 kHz sounds, providing all parts of
your system can keep up with the high data transfer rate and lots
of calculations needed for this task. (In this case an accelerated
Amiga is recommended :-)

The two audio channels at each side can be linked to perform as a single
14 bit channel (subranging). Again, this swallows lots of computing power.

Anyway, an Amiga 3000-16MHz is fast enough to play an uncompressed soundfile
with full 44.1kHz/14bit output (productivity) directly from harddisk !!!

I don't want Play16 to be a program that plays each and every exotic format
that exists somewhere. However, I intend to support as many popular file
types as possible.


Why Play16?
-----------
I didn't find any CLI based program to play back 16 bit recordings, on a
standard Amiga, so I decided to write one myself.
16 bit soundcards are becoming more and more popular, especially on the
PC. The common file format over there is Microsoft's (yuck! :)) RIFF-
WAVE format.


Why CLI based and no GUI?
-------------------------
There are so many GUI based directory utilities, simply use Play16 as an
external player. Consult the manual of your software package on how to
do it. Application example: Assign "Play16 <filename> PRELOAD" to a button
called "Jingle". Select the desired soundfile and press the Jingle-button.
Wait for the appropriate moment and hit the return key - here comes the
sound! Nice when audio dubbing your home videos or even on parties :-)


How does it work? (technical info)
----------------------------------
The standard Amiga audio device is limited to 8 bit / 28 kHz playbck
when using DMA. With the introduction of ECS the 28 kHz DMA barrier
was broken - but only if the current displaymode was one with double
scan rate like productivity. The reason for this is the dependency
between video and audio DMA. If you don't have ECS or if you simply
don't want to switch to Productivity just to listen to your desired
sound, Play16 can halve the sample rate during playback.

Another way to archieve high output rates is using IRQ. This works no
matter what the displaymode is. I've been experimenting on that long
before I started writing Play16 but there was so much jitter that my
current downsampling method sounds much better.

To play back even long sounds, the popular method of double buffering
is used. Alternatively, all data can be loaded into memory before
playback. This is useful when playing short sounds or when loading
the sound from floppy disk or slow CD ROM.

The 14 bit output is archieved by setting the first channel on each
side to volume 64 and the second to volume 1. The louder channel then
plays the upper 8 bits as usual while the other channel plays the
6 most significant bits of the low byte synchronously. Because timing
is very crucial in this case it is nessecary to write directly to
hardware registers instead of using the audio.device. This method may
not work on future amiga models if there ever will be any... :-/

Unfortunately, Amiga's DACs are not perfectly linear. A significant
increase in sound quality can be archieved by calibrating each
MSB conversion step individually for your machine. Christian Buchner's
CyberSound system supports this kind of calibration. Play16 can load
the preferences file generated by Christian's calibration program.

The MPro output uses the maestix.library by Richard Körber. Have a look
at the Maestix package available on AMINET for further details.

=========================== Section 3: Options ============================

What options are provided?
--------------------------
There are three ways to specify the options, which are:

 CLI:       In the commandline, using standard AmigaOS 2.x template
 Workbench: In the icon, using standard Amiga Workbench tooltype entries
 General:   By setting environment variables. This is not possible for
            all options yet.

If you are not familiar with the AmigaOS 2.x commandline template, see
the examples below and consult the AmigaOS manual for furhter information.
The tooltype entries are identical to the keywords you can specify in the
commandline. Also, the environment variables have the same names and reside
in ENV:Play16.

Basic options: (All options marked with (*) have corresponding env-vars.)

VERBOSITY/N Sets the level of verbosity.
            0: Just display the banner and error messages
            1: Print additional information about the sound file,
               allocated memory, etc.
            2: Progress information
            3: Debugging information (may look a bit weird :)
            Default is level 0.

FAST/S      Do NOT automatically switch to half sample rate if the
            soundfile's rate exceeds 28 kHz. Use this option when
            running your Amiga in Productivity or similar display
            modes.

HIFI/S      Obsolete since V1.4 but still included for compatibility
            reasons. See "OUTPUT/K".

VOLUME/N    Set the playback volume. This works only for Paula8 output.

OUTPUT/K(*) Set Play16's output device. Possible options are:

 Paula8      Standard 8 bit output through Amiga hardware. This option
             is the default.

 Paula14     Turn on the 14 bit output. Watch out! This is a nasty routine
             that writes directly to some hardware registers. I've done
             everything I can to prevent Play16 from interfering with
             other running tasks in this case but you'll never know...
             Use it with care!

 Paula14c    Same as Paula14 but using the calibration preferences for
             much better sound quality. See Section 2 for details.

 MPro        Use MacroSystem's Maestro Pro board for output. 44.1kHz and
             48kHz sounds only. For 44.1kHz output a valid and stable
             signal has to be present on the standard input. See the
             manuals of Maestix and the MPro board for further info.

 8SVX        Do not play the sound but create an IFF-8SVX file containing
             the data. Basically this is the output generated by <Paula8>
             redirected into a file. The filename will be the input file's
             name with "iff" appended.

             WARNING: All limitations of <Paula8> apply here as well,
             which are:
             - Every 16 bit sound will be cropped to 8 bits resulting in
               loss of quality.
             - If you DO NOT set the FAST keyword, the sample rate of the
               output file will be limited to 28kHz and downsampled
               automaticlly if nessecary.
             I recommend to keep the original file if you have enough
             space. If you don't you may be disappointed of your converted
             8 bit sounds when you buy a better sound system!

FILTER/K(*) FILTER=ON  : Enable audio filter for playback
            FILTER=OFF : Disable audio filter for playback
            FILTER=AUTO: Turn filter on or off depending on sample rate
            If you don't specify this keyword Play16 will leave the
            hardware registers of the audiofilter completely untouched.

LOOPS/N     Determines the number of loops to be played.
            Default is 1 loop. (Play the sound once.)
            LOOPS=0 means infinite number of loops.


Advanced Options:

WINDOW/K(*)   Specify output window for Workbench startup. This Keyword can
              only be used in the ToolType entries of the Play16 icon itself.
              If you don't set this, the hardcoded default will be used.

SCREENMODE/N  Type of screen to open during playback. If you set
(*)           SCREENMODE=0, a standard productivity screen will
              be opened.

PATH/K        Set the default path for the filerequester. In the command
              line, specifying just a path instead of a filename has the
              same effect.

SINGLE/S      Use only one buffer rather then two and load all data into
              memory before playback.

PRIORITY/N    Set Play16's task priority. May vary from -25 to 25, default
              is 1.

MULTIPLE/S    Open the filerequester again, after all files have been
              played.

BUFFER/N      Buffersize in samples. May vary from 32768 to 131072. The
              amount of allocated memory also depends on whether the sound
              is mono or stereo, 8 bit or 16 bit.
              Default is 65536 samples, values are rounded to multiples of
              32768.
              Note that it is useless to modify this value when in single
              buffer mode :)

PRELOAD/S     Load enough data into memory for immediate start of playback
              at a keypress

RAW/S         Disable autodetect and tell Play16 what the actual format of
              the sound data is.
              However, if Play16 can't detect the filetype it will switch
              to RAW mode automatically. If you don't want this to happen
              you can specify STRICT:

STRICT/S      Play only files that are supported by the autodetect routine
              Use this if you don't want to get scared by the sudden noisy
              output when trying to play back other data than sound :-)

Examples:

a) Play16 music.wav
    Simply play the file called music.wav once and directly from harddisk.

b) Play16 music.wav SINGLE
    Same as above but load all data into memory before playback. Use this
    when loading soundfiles from floppy disk.

c) Play16 music.wav SINGLE VERBOSITY=1
    Same as b, but with additional information being printed out.

d) Play16 rhythm.wav LOOPS=10
                Play the rhythm as a continuous loop, i.e. over and over again (10 times)

e) Play16 explosion.wav SINGLE PRELOAD
    Load the complete explosion sound into memory, then wait for you to hit
    <return> before playback.

f) Play16 MyFavouriteTune.wav FAST OUTPUT=8SVX
    Convert the given file to IFF-8SVX without changing the sample rate.

g) Play16 MyFavouriteTune.wav OUTPUT=8SVX
    Same as f but limit the sample rate of the converted file to 28kHz!

The following options tell Play16 what parameters to use when in RAW mode.
This happens either if you set the RAW keyword or if Play16 could not
identify the file and STRICT was _not_ set.


Options when in RAW mode:

FREQ/N      Sampling frequency in Hz
TRACKS/N    Number of tracks, 1 for mono, 2 for stereo
BITS/N      Resolution in bits, may be 8 or 16
HEADER/N    Length of header: This is the number of bytes to be skipped
                              at the beginning of the file.
UNSIGNED/S  Data is unsigned, not signed (only valid for  8 bit sounds)
INTEL/S     Data is in Intel format      (only valid for 16 bit sounds)
ULAW/S      Data is compressed using the uLaw compression scheme

The default settings are: 22050 Hz, mono, 8 bits, no header.



How do I use this RAW mode?
---------------------------
Umm, err, difficult to explain, even harder to understand...
Well, if you know the data format of the soundfile, simply set RAW, FREQ,
TRACKS, BITS, UNSIGNED and INTEL accordingly. If you don't, the only
way to find it out is by trial and error :) Here are some tips to make
it a bit easier:

Don't set HEADER to an odd number. (Leave it at 0, first.)
If you set BITS to 16 and hear nothing but noise, try to set INTEL.
If you set BITS to 8 and the sound is distorted, try to set UNSIGNED.
If the above does not help, try different combinations of BITS, INTEL
and UNSIGNED.

If you manage to get a recognisable sound output which is either too
fast or too slow, start experimenting on TRACKS and FREQ.

If you want to play known files and raw ones without changing the command
line, simply specify all you know about the raw data and leave out the
RAW and the STRICT keyword. If Play16 can indentify the file it will use
its parameters. If the filetype is unknown your specified parameters will
be used instead.


Miscellaneous
-------------
I don't claim Play16 to be fast. I've done some optimizing - but because
the loader/converter module is a universial one, more data is actually
being moved around different memory blocks than needed for playback.
However, I've implemented separate optimized routines for 8 bit and
for 14/16 bit.

* Please note that English is not my native language :)

I can be reached at...

Internet: wenzel@unixserv.rz.fh-hannover.de (preferred)
          Thomas_Wenzel@aventure.fido.de

Fido:     2:2432/350.28 or 2:241/1035.6
          Mail routing _is_sometimes_ unreliable in FidoNet :-(

If you use this program, please send me mail. I'd like to know how many
people are interested in it if at all.


History
-------

V1.4    - Wildcard and multiple file support
        - Environment variable support (partial)
        - A filerequester will pop up if no filename is given
        - Workbench support, including icon with tooltype entries
        - Maestro Pro output, using Richard Körber's Maestix package
        - Calibrated 14 bit output, using Christian Buchner's
          CyberSound package
        - IFF-8SVX file dump
        - Creative VOC support (currently only 1st data block)
          (This format crazy :-))
        - Closing the output window now stops playback, too
        - Looping now for single mode as well, LOOPS=0 won't cause
          a severe crash any more
        - Open a screen during playback, e.g. productivity for fast DMA

V1.6    - Improved the V34 performance. (whoops, wrong file! :-)))
        - A one-plane-screen will now be used for CLI mode as well.
        - Task priority is now reset to 0 at exit.
        - CTRL-D now skips the current sound and starts playing the
          next one.
        - ASL library will only be opened if a filerequester is really
          needed.
        - New option: Volume (only for Paula8 mode)
        - New option: Multiple (only if filerequester pops up)
        - RAW option works now as a Tooltype entry as well

========================================================================