                PMsndX version 0.2
                        by
                William Scott Hiles

As always, all comments are welcomed as well as bug reports.

What is in the future?  Well, we are getting close to what
will probably become version 1.0.  I have decided to try to
release 1.0 without the scripting capability because the
statuse of "under development" has stopped a number of people
from using the program.  The next version will have a complete
rewrite of the help to make it more readable and will have
all the tools completed in the tool box.

Revision history:
Version 0.5:
1.  Finished the Editor
2.  Added page in notebook for swapping channels
3.  Fixed an error when writing WAVE files with multiple channels

Note:  The big addition of the editor was a lot of work and is
probably not perfect for everyone's needs.  Handling of multiple
channels is awkward at best, but I think that I have made the
most of it.  Opinions for improvement are welcome.  Read the
help page to understand the PASTE operation before using it!
The editor has been written such that it does not use the MMPM
libraries for the sound manipulations in order to allow it to
work on any system.

Note 2:  The global channel selection is not implemented across
all the tools yet.  That will be in the next release.

Version 0.4a:
1.  Finished the Dupe dialog box in the tools box.
2.  Fixed an error with processing the Rate effect when
    multiple channels are present.
3.  Fixed Echo effect to work with multiple channels
4.  Fixed Fade effect to work with multiple channels

Version 0.4*:
1.  Added support for the MAC HCOM format.  Unfortunately the only
    portions of the header that are implemented are the ones that
    SOX implements because I could not find examples of the HCOM
    format and had to create a sample file from a .WAV file using
    SOX.
2.  Added support for the IRCAM format.  Again, like the HCOM
    format, I could not find samples in this format and had to
    use SOX to create samples for testing.  As a result, only
    the header fields supported by SOX are enabled.
3.  Added support for SampleVision (.smp) format.  WARNING:  This
    is a wierd format in which the RATE is stored at the end
    of the file.  You may find that when loading this type of
    file no error is produced but an absurd rate may be displayed
    in the Info tool page.  (Some reasons...SOX10 for OS/2 replaces
    every CR return (char 13) with a CRLF.  I think that the output
    file was not set to RAW so the file functions were fixing the
    data up for DOS.  By the way, you can fix this up by changing
    the playback speed (not the rate!!!) to something logical.)
4.  Reorganized the toolbox (again) and added place holders for
    fading and balancing in a sample.  This will be added later.
5.  Added the user interface for the editor.  It is non-functional,
    but is intended to get feedback on the functions that it will
    be provided.  If you don't like it, now is the time to change
    it!
6.  *** BUG:  Fixed bug in display routines for graphs when an absolute
    value was entered into the start and end fields for the reverse
    effect.
7.  Added fading to the tool box under the major header of VOLUME.
    Samples can be faded in or out and at different rates.

*   Note:  With this version, all of the functionality of SOX has
    been completed.  From here on out, we are breaking new ground.
**  Note:  Space is reserved for the Dupe, Fade, and Balance effects,
    but they have not been implemented and the DOIT button is
    never enabled.
*** The size of the executable is about 300k right now.  The good
    news is that the only major additions will be the code for
    the clipboard stuff.  The program currently has about 18000
    lines of C code.  I could change over to DLLs to make the
    actual executable smaller, but the way DLLs work with OS/2,
    there is no memory savings.  If you hate 300k for a program
    like this, then go back to SOX.

Version 0.3e:
NOTE:  Since the size of the Open dialog box has changed, PMsndX
    will not use the window positions or settings from the .ini
    file.  This is to prevent the Open dialog box from being
    positioned off the screen.

1.  Multithreaded the command line playback functions.  Previous
    versions shared the message queue through threads for playback
    when the control panel was used, but when a sound was played
    from the command line, all message processing would stop till
    the file had been played.
2.  Fixed the .WAV read/write routines to handle the LIST fields
    correctly.  Previous versions could not deal with the LIST
    field and returned a error indicating that the file was in
    a bad style.
3.  Changed the .VOC to be able to store the ASCII text string
    in the info field.
4.  Added support for .IFF formats (Amiga).  This format has a
    couple of fields that need mention here.  If you read a file
    in, the ANNO field is discarded and the NAME field is used
    for the Comment data retained in the files.  If a file is
    written to disk, PMsndX arrogantly writes the "PMsndX ..."
    into the ANNO field (... is replaced by the version number).
5.  The Version number has been changed to reflect the alpha version
    of the program.  In the past changes to the version number
    changed the name of the profile and resulted in loss of the
    window positions and settings from previous versions.  This has
    been changed such that the window positions and settings remain
    active unless a major change is made in the profile information.
6.  Added user overrides for the file types when opening files.
    When a file is opened, if the user specifies a specific filetype
    (other than Auto), the program will try to open the file in
    that format.  In the event that the filetype is not the
    type specified, the PMsndX will attempt to determine the
    file type as if the user had selected "Auto".
7.  When the file type is changed through the Tools notebook, the
    output type is then specified and selected in the file type
    area of the SAVE dialog box.
8.  The default format for saving a file is the same as the input
    format.
9.  A field called "AUTO" has been added to the filetypes.  When
    this button is selected, the file will be saved based on the
    filename alone.
10. If the filename field is changed, the "AUTO" button will
    automatically be selected.  This is because the file type
    specified in the buttons will override the extension.  As
    a result, if the user changes the filename and assumes that
    the file would be saved based on the filename extension,
    the file could be saved in a different format than the
    extension indicates.
11. The filename used to load a sample into memory is automatically
    used as the default filename when saving a file.  The path
    for saving the file remains the last path used for saving
    the file.
12. Added the .sb (Signed Byte) format.  This is a headerless
    format.  If the user selects to load this format, the program
    must ask the user for the sampling rate before the file
    can be loaded.  Each byte of the file is treated as an 8
    bit signed sample.
13. Added the .sw (Signed Word) format.  This is a headerless
    format and the program will request a sampling rate when
    the user loads this file format.  Each word (2 bytes) is
    treated as a signed word in little endian order.
14. Added the .ub (Unsigned byte) format.  This is a headerless
    format and the program will request a sampling rate when
    the user loads a file of this format.  Each byte is treated
    as a unsigned byte.
15. Added the .uw (Unsigned word) format.  This is a headerless
    format and the program will request a sampling rate when
    the user loads a file of this format.  Each word (2 bytes)
    is treated as a unsigned word in little endian order.
16. Added the .ul (Ulaw) format.  This is a headerless format
    and the program will request a sampling rate when the user
    loads a file of this format.  Each byte is treated as a
    ULAW encoded sample.  This format is the same format used
    for .AU files.
17. The file Open dialog box does not close when the operation is
    completed.
18. Multithreaded the file open operations.  When a file is being
    read, the user may press the Abort button on the file open
    dialog box to stop the read process.  If the program exits
    before a file read thread has completed, the read thread is
    terminated.
19. Multithreaded the file save operations.  There is no means
    provided to abort a save operation.  If the program exits when
    the file is saving, the program will wait till the save operation
    has completed before exiting.
20. Added support for the Amiga/SGI .aif format.  Documentation
    for this format was hard to find.  The only chunk formats
    I could find were for COMM, and SSND.

Version 0.3d:
1.  Added use of the second mouse button (usually the right
    mouse button) for the reverse effect and removed the
    dynamic sorting of the start and end so that the numbers
    don't jump back and forth when the user is entering
    the endpoints.
2.  Added support for .VOC file formats.
    Note:  I don't know what the hell SOX is doing, but it does
           not seem to produce a useable file.
    I always add an Extended data block to the file.  I don't
      know if this will cause problems, but the extended part
      contains the number of channels.
    I don't know what to do with Repeat/End Repeat information
      so I am currently ignoring it.  Any ideas?
    I currently dump (on the floor) any ASCII text.  Anyone want
      me to keep the stuff in the info field?
    I currently only load 8 bit data.  I cannot deal with packed
      data right now.  It is 1:00am and I am tired.
    Some programs seem to expect the first block to be the
      DATA block so I write this first always.

Version 0.3c:
1.  Added Speed Effect
2.  Reorganized the Tools notebook.  There were too many
    tools to display the tabs on the notebook so major and
    minor pages were created to group the tools.
3.  Modified the MMPM support to use a separate region of
    memory than the samples are stored in.  Previously, the
    memory for storing the playlist was taken out of the
    pool for storing the samples for the effects.  As a
    result, if you started the MMPM box an performed a
    effect that took up more memory, a hole would be left
    such that another block of memory could not be
    allocated.  This method prevents creating the holes.
4.  Added Reverse Effect.

Version 0.3b:
1.  Fixed a big bug in the Bandpass filter.  If a sample
    had multiple channels, it would only bandpass on the
    first channel.
2.  Fixed a big bug in the Lowpass filter.  If a sample
    had multiple channels, it would only lowpass on the
    first channel.
3.  Added the little clock pointer to indicate how much
    work has been completed.
4.  Removed the requirement for the audio device to be a
    form of WaveAudio??.  Any string will work as long as
    the device really exists.
5.  Multi-threaded all of the effects so that the program
    is not a system hog.  The file read/write functions
    are not multi-threaded.  Should they be?

Version 0.3a:
1.  Fixed the Play button so that it is animated when the
    sample is played as it is loaded.  (What is the longest
    record for staring at a code before you realize that it
    is so late that you have been staring at the bug all
    night and just did not recognize it?...What a dumb error
    on my part!!!)
2.  Fixed the dynamic linking so that DosLoadModule is used
    rather than linking with the dynamic libraries.  Version
    0.3 would refuse to run on machines without MMPM
    installed because the libraries were loaded even if the
    MMPM support was not enabled.
3.  Changed to using SW.DLL for the buttons of the MMPM
    dialog box.  This guarantees that the program will use
    the latest formats for the buttons.
4.  Added command line playing.  I the PLAY_ON_LOAD option
    is selected, any filenames which appear on the command
    line will be played.  If a file is not found, the
    program will signal an error and continue to the next
    command line file.  If EXIT_AFTER_PLAY is not selected,
    the last file that was successfully loaded will be
    the current file in memory.
5.  Enabled the EXIT_AFTER_PLAY feature and modified the
    behaviour such that the MMPM dialog is not displayed
    during the playback.

Version 0.3:
1.  Removed the RECORD button (now just a blank button until
    I can think of something)
2.  Changed PLAY button to MMPM and added basic play
    capabilities (i.e. Play, Stop, Rewind, Pause).
3.  Updated Settings dialog to reflect options for the MMPM
    stuff.

Version 0.2:
1.  Fixed error with memory settings.  In version 0.1 if you
    opened the Settings box and then applied it by pressing
    the DOIT button it sould clear the data samples even if
    the memory configuration had not changed.
2.  Fixed bug in version 0 in which the data was cleared
    when the memory configuration was changed, but the
    sample header was not cleared.  This led to th dialogs
    trying to access data that had been released causing a
    protection violation.
3.  Added the Bandpass notebook page.  This is probably one
    of the most complex user interfaces in the notebook.
4.  Added the Echo effect.  This is the most complex
    programming challenge for a useable user interface.
    (Note, the echo only works for single channel samples).
5.  Fixed bug.  In version 0.1, the lowpass function did not
    take into account the number of channels.  This has a
    significant impact on the FFT operation.  This is fixed
    in 0.2.
6.  Fixed bug.  In version 0.1, the Vibro effect did not
    take into account multiple channels in a sample.  As a
    result, the vibro was not continuous on individual
    channels.

Version 0.1:
1.  Added Channel Averaging (0.1a)
2.  Added Vibro effect
3.  The .ini file are automatically located in the same directory
    as the executable.
4.  Individual tool pages no longer have separate HELP buttons
5.  A HELP button has been added to the tool box for all pages.
    When pressed, the help page for the page shown in the tools
    dialog box will be displayed.
6.  A DISMISS button has been added to the tools dialog box for
    a more consistent approach to dismissing.  The user can still
    depress the tools button on the main control panel to dismiss
    any tool dialog.
7.  Rearranged the buttons on the main control panel and added
    two new buttons for Playing and Recording samples (not implemented
    in this release...just placeholders)
8.  Changed the memory storage requirements so that data takes
    half as much memory.  Each sample is stored as a signed SHORT
    regardless of the sound type.
9.  Corrected major memory bug which resulted in a memory leak.
10. The echo effect presents an interesting challenge to the
    user interface.  How do you provide the user with an
    intuitive method to set the echo locations and the
    strength of the echo from a dialog box?  My first
    attempt was to try to display the waveform in a window
    and then to let the user set the echo points, but the
    problem of setting the echo strength is still difficult.
    This operation may have to wait for another revision
    after I have had some time to "sleep" on it.  The effect
    itself is very simple, but the interface is much more
    difficult.

0.1a - SOX can averages 4 channels to 1 by putting all four
       channels into 1.  4 channels to 2 is done by
       averaging the left channels and the right channels
       together.  PMsndX allows the user to select any
       combination of the source channels.

Version 0.0 (initial release):
1.  6 buttons and associated dialog boxes created
1.  Ability to load and save .au files
2.  Ability to load and save .wav files
3.  Tool for changing the sampling rate (0.0a)
4.  Display of information about the current sample

0.0a - SOX appears to use linear approximation to create the
       new sample.  PMsndX provides for quality which allows the
       approximation to be adjusted.


For now, just play with it and let me know what you think.

You should have four files from the compressed .zip file.

README          This file
pmsndx.exe      Executable PMsndX
pmsndx.hlp      Help file
file_id.diz     Information file to BBS sysops too.

I can be contacted using email at whiles@relay.nswc.navy.mil.

Thanks for your time.
Scott

