
                       Information for Game Developers
                       -------------------------------

    Presently there are many different sound cards conforming to various
    standards on the market. A product should attempt to support as many
    of those standards as possible, to ensure happy consumers of the product.

    Developers may wish to use a third party API to simplify the task of
    supporting all the audio standards out there. These API's attempt to
    take advantage of a card's capabilities, while retaining a single
    high level interface to each card's hardware.

    The alternative is to program all the audio drivers yourself. There
    are advantages and disadvantages to both options. With a third party
    API, you get a simple to use, ready to plug in system, that has been
    tested. Programming drivers yourself gives you the choice of the exact
    features, but it requires a great deal of development and testing time,
    depending on how many features and standards are supported.

    Keep in mind that third party developers MAY be willing to give
    you source that can be modified for your own needs.

    Below is a list of third party audio API's, the features they support,
    the nature of the UltraSound support, and who to contact if you are
    interested.

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

    API
    ---
    IBM Audio Interface Library Version 3.0

    Features
    --------
    Standard MIDI file compatibility
        - Extended MIDI (XMIDI) preprocessing dramatically increases
          performance efficiency while reducing file size

    Support for virtually all popular PC sound synthesizers
        - Gravis UltraSound, Sound Blaster(TM), Roland Sound Canvas(TM),
          and many others

        - All XMIDI drivers emulate Roland Sound Canvas General MIDI standard
          for simplified sequence arrangment with other sound adapters

        - Complete tool set provided for use with both Ad Lib(R) and Creative
          Labs instrument editors

    SoundStream(TM) digital playback capability for sample sound effects
        - Ultra-high-performance real-time multichannel digital audio - 16
          or more simultaneous samples - on all supported sound cards

        - Runtime ("on-the-fly") format conversion of sample rate, word size,
          and channel count -- any digital sample may be played properly on
          all supported sound cards

        - Discrete pitch, volume, panpot, and balance control over all 16
          digital audio channels

        - "Virtual wave synthesis" permits XMIDI Note On, Note Off, Panpot,
          Pitch, Volume, Expression, Program Change, Patch Bank Selector,
          and All Notes Off control over digital sound effects

        - Double-buffering function calls provided -- only two calls
          necessary to stream audio from disk or CD

    Encapsulated runtime drivers
        - New sound driver options may be added to existing products simply
          by releasing updated driver and/or data files

        - Applications may safely call any API function with any specified
          driver, regardless of whether the can actually process the desired
          function

        - Multiple Driver Interface with dynamic linking allows any number
          of drivers to perform independantly

        - Digitized sound effects performed concurrently with MIDI music
          playback through any supported synthesizer hardware

    Industry-standard data file formats
        - Extended MIDI format based on Standard MIDI Files 1.0 (SMF)
          specification

        - Full compatibility with AIL Version 2.0 XMIDI files and Global
          Timbre Libraries

        - Creative Labs Voice (.VOC) and Microsoft Windows (.WAV) format
          supported by digital sound drivers

    Versatile Application Interface
        - Distributes timer interrupt resource between drivers and
          application - no need for conflicts over timer hardware control

        - Low interrupt latency for minimal overall performance impact

        - Many MIDI control requests available, include tempo and volume
          changes and individual channel control, sequence layering,
          callback functions, looping, and branching

        - Independant one-shot MIDI message capability for MIDI-based
          sound effects

    Enhanced support for overlaid sequences
        - Each driver may play from 1 to 8 XMIDI sequences concurrently

        - Sounds effects sequences and "jingles" supported through MIDI
          channel-locking mechanism

    UltraSound Support
    ------------------
    AIL 3.0 UltraSound support requires no special TSR's or any other
    support files, only the Digital and Midi drivers themselves.

    If custom patches are desired to be used, a file may be included called
    CUSTOM.GUS, which will contain a list of custom patches and where to
    find them.

    The MIDI driver implements patch cacheing. It attempts to optimize the
    amount of patch cacheing done in a game by keeping track of what
    instruments are used throughout the game. When the driver shuts down, it
    writes out a small file called <memory size in K>.GUS. This lists all the
    instruments ever used while playing the game. When the driver initializes
    the next time, it reads this file, and pre-loads all the needed patches.
    This prevents the "pausing" that can happen while cacheing patches during
    the gameplay.

    The driver also has one other feature to minimize the amount of patch
    cacheing during gameplay. If there was not enough room to load any more
    patches needed, the driver will switch to a lower patch loading
    resolution. It will only step down one resolution per init-deinit cycle
    of the driver, so it may take a few sessions of the game before optimal
    performance is achieved. The first step down loads the patches as 8-bit.
    Then they will be loaded at half the sampling frequency if there is still
    not enough room for all of them. This flag is also stored in the
    <memory size in K>.GUS file.

    Any patch that cannot be loaded will not be heard (no re-mapping is done).
    You may experience a lot of notes missing the first time you play a game
    on a low memory card (such as 256K). After you quit and play a few more
    times the notes should all play (unless the particular midi file uses a
    great deal of patches). The driver also loads the patches from low to
    high patch numbers, and flushes the patches from high to low patch
    numbers. In real terms this means that Melodic patches will get loading
    precedence over percussion patches.

    The driver gets the list of patches from the ULTRADIR\ultrasnd.ini file,
    and looks for the patches in the ULTRADIR\midi directory.

    Contact
    -------
    For information on Miles Design's products and services, contact
    John Miles at one of these numbers:
    Tel: (512) 345-2642
    Fax: (512) 338-9630
    BBS: (512) 454-9990
    INTERNET: 70322.2457@compuserve.com

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

    Note: If you are a developer of an audio API that supports the UltraSound,
    please contact Advanced Gravis if you wish to appear in this list.
