123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- <chapter id="introduction">
- <title>Introduction</title>
- <![ %Revision [
- <para><literallayout>
- CVS Document: $Id: chp-introduction.sgml,v 1.3 2000/11/10 21:23:52 bk Exp $
- CVS Revision: $Revision: 1.3 $
- $Log: chp-introduction.sgml,v $
- Revision 1.3 2000/11/10 21:23:52 bk
- Use ../CREDITS for list of contributors.
- Revision 1.2 2000/10/26 02:58:55 bk
- Cleanup (typos).
- Revision 1.1 2000/10/11 18:44:46 bk
- Document split into separate files. Minor fixes.
- </literallayout><para>
- ]]>
- <section>
- <title>Formatting and Conventions</title>
- <para>
- This API Specification and Reference uses a style that is a blend of the
- OpenGL v1.2 specification and the OpenGL Programming Guide, 2nd ed.
- Conventions: 'T' is used to designate a type for those functions which
- exist in multiple signatures for different types. 'Object' is used
- to designate a target Object for those functions which exist in multiple
- versions for different Object categories. The 'al' and 'AL_' prefix
- is omitted throughout the document.
- </para>
- <![ %Annote [
- <note><title>Annotation (Terminology)</title><para>
- "State" refers to state within the context of the &OAL;
- state machine description of the &OAL; implementation.
- "Objects" refer to &OAL; primitives.
- "Attribute" refers to attributes of &OAL; Objects.
- Attributes of a &OAL; Objects are one part of the
- &OAL; state. Some attributes are not specific to
- single objects, but apply to the entire context.
- "Parameter" is used for function arguments that might
- or might not be attributes, in particular for
- command arguments that are not stored as state.
- The use of "Property" is to be avoided.
- </para></note>
- ]]>
- <para>
- <revhistory>
- <revision>
- <revnumber> 1.8/1.7./1.6/1.5 </revnumber>
- <date> September-August 2000 </date>
- <authorinitials> bk </authorinitials>
- <revremark> Final Draft for Public Review </revremark>
- </revision>
- <revision>
- <revnumber> 1.4 </revnumber>
- <date> June 2000 </date>
- <authorinitials> bk </authorinitials>
- <revremark> First Draft for Public Review </revremark>
- </revision>
- <revision>
- <revnumber> 1.2 </revnumber>
- <date> March 2000 </date>
- <authorinitials> mkv </authorinitials>
- <revremark> Draft released for GDC </revremark>
- </revision>
- </revhistory>
- </para>
- <![ %Scratch [
- <note id="todo"><title>TODO</title><para>
- <literallayout>
- - work thru past changes
- - add GH section
- - add rewrite of GH section
- - add section on rfc/ann id's
- - add section on procedure
- - add proper id's to rfc/ann/sections etc.
- </literallayout>
- </para></note>
- ]]>
- </section>
- <section>
- <title>What is the &OAL; Audio System?</title>
- <para>
- &OAL; (for "Open Audio Library") is a software interface to audio hardware.
- The interface consists of a number of functions that allow a programmer
- to specify the objects and operations in producing high-quality audio
- output, specifically multichannel output of 3D arrangements of sound
- sources around a listener.
- </para>
- <para>
- The &OAL; API is designed to be cross-platform and easy to use.
- It resembles the &OGL; API in coding style and conventions. &OAL; uses a
- syntax resembling that of &OGL; where applicable.
- </para>
- <para>
- &OAL; is foremost a means to generate audio in a simulated three-dimensional
- space. Consequently, legacy audio concepts such as panning and left/right
- channels are not directly supported. &OAL; does include extensions compatible
- with the IA-SIG 3D Level 1 and Level 2 rendering guidelines to handle
- sound-source directivity and distance-related attenuation and Doppler effects,
- as well as environmental effects such as reflection, obstruction, transmission,
- reverberation.
- </para>
- <para>
- Like &OGL;, the &OAL; core API has no notion of an explicit rendering context,
- and operates on an implied current &OAL; Context. Unlike the &OGL;
- specification the &OAL; specification includes both the core API (the
- actual &OAL; API) and the operating system bindings
- of the ALC API (the "Audio Library Context"). Unlike &OGL;'s GLX, WGL
- and other OS-specific bindings, the ALC API is portable across platforms
- as well.
- </para>
- </section>
- <section>
- <title>Programmer's View of &OAL;</title>
- <para>
- To the programmer, &OAL; is a set of commands that allow the
- specification of sound sources and a listener in three
- dimensions, combined with commands that control how these
- sound sources are rendered into the output buffer. The
- effect of &OAL; commands is not guaranteed to be immediate,
- as there are latencies depending on the implementation,
- but ideally such latency should not be noticeable to the
- user.
- </para>
- <para>
- A typical program that uses &OAL; begins with calls to
- open a sound device which is used to process output and
- play it on attached hardware (e.g. speakers or headphones).
- Then, calls are made to allocate an AL context and
- associate it with the device. Once an AL context is
- allocated, the programmer is free to issue AL commands.
- Some calls are used to render Sources (point and directional
- Sources, looping or not), while others affect the rendering
- of these Sources including how they are attenuated by
- distance and relative orientation.
- </para>
- <![ %Annote [
- <note><title>Annotation (&OAL; and &OGL; use)</title><para>
- Often, &OAL; will be used to render a 3D audio environment
- matched by a 3D visual scenery. For this purpose, &OAL; is
- meant to be a seamlessly integrating complement to &OGL;.
- &OAL; state can be updated in sync with the &OGL; or video
- updates (synchronized), or in timesteps independent of the
- graphics framerate. Audio rendering loops usually update
- the current locations of the sources and the listener, updates
- global settings, and manages buffers.
- </para></note>
- ]]>
- </section>
- <section>
- <title>Implementor's View of &OAL;</title>
- <para>
- To the implementor, &OAL; is a set of commands that affect
- the operation of CPU and sound hardware. If the hardware
- consists only of an addressable output buffer, then &OAL; must
- be implemented almost entirely on the host CPU. In some cases
- audio hardware provides DSP-based and other acceleration in
- various degress. The &OAL; implementors task is to provide
- the CPU software interface while dividing the work for each
- AL command between the CPU and the audio hardware. This
- division should be tailored to the available audio hardware
- to obtain optimum performance in carrying out AL calls.
- </para>
- <para>
- &OAL; maintains a considerable amount of state information.
- This state controls how the Sources are rendered into the
- output buffer. Some of this state is directly available to
- the user: he or she can make calls to obtain its value.
- Some of it, however, is visible only by the effect it has
- on what is rendered. One of the main goals of this
- specification is to make &OAL; state information explicit,
- to eludicate how it changes, and to indicate what its
- effects are.
- </para>
- <![ %Annote [
- <note><title>Annotation (Native audio APIs)</title><para>
- Implementors can choose to implement &OAL; on top
- of an existing native audio API.
- </para></note>
- ]]>
- </section>
- <section>
- <title>Our View</title>
- <para>
- We view &OAL; as a state machine that controls a multichannel
- processing system to synthesize a digital stream, passing sample
- data through a chain of parametrized digital audio signal
- processing operations. This model should engender a specification
- that satisfies the needs of both programmers and implementors.
- It does not, however, necessarily
- provide a model for implementation. Any conformant implementation
- must produce results conforming to those produced by the specified
- methods, but there may be ways to carry out a particular computation
- that are more efficient than the one specified.
- </para>
- </section>
- <section>
- <title>Requirements, Conformance and Extensions</title>
- <para>
- The specification has to guarantee a minimum number of resources.
- However, implementations are encouraged to compete on performance,
- available resources, and output quality.
- </para>
- <![ %RFC [
- <note id="rfc-bk000724-06"><title>RFC: suggested requirements</title><para>
- These have been taken from earlier specs drafts, suggested by
- Creative:
- A minimum of sixteen (16) Sources per Context should always be available.
- The number and size of Buffers available is limited only by the amount
- of memory available and/or accessible by the implementation.
- The specification could also list requirements by the implementation:
- A minimum storage space of half a megabyte (512kB) should always be available.
- </para></note>
- ]]>
- <![ %RFC [
- <note id="rfc-briareos000724-01"><title>RFC: no requirements</title><para>
- I3DL1-like requirements might be so arbitrary that they are useless.
- The dangers here are cap bits, and a subtle aliasing of source and
- hardware buffers. AL implementations should implement as much quality
- and performance as possible for any given number of sources/
- Application request resources when creating a context and can use Hints
- to indicate desired trade-offs.
- </para></note>
- ]]>
- <para>
- There will be an &OAL; set of conformance tests available along
- with the open source sample implementation. Vendors and individuals
- are encouraged to specify and implement extensions to &OAL; in
- the same way &OGL; is extensible. Successful extensions will
- become part of the core specification as necessary and desirable.
- &OAL; implementations have to guarantee backwards compatibility
- and ABI compatibility for minor revisions.
- </para>
- <para>
- The current sample implementation and documentation for &OAL; can be
- obtained from
- <ulink
- url="http://wwww.openal.org/"
- type="http">openal.org</ulink>.
- &OAL; is also available from the the
- <ulink url="http://cvs.lokigames.com/cgi-bin/cvsweb.cgi/openal/" type="http">
- &OAL; CVS repository</ulink>. For more information on how to get
- &OAL; from CVS also see <ulink url="http://cvs.lokigames.com/" type="http">
- &coLoki; CVS</ulink>.
- </para>
- </section>
- <section>
- <title>Architecture Review and Acknowledgements</title>
- <para>
- Like &OGL;, &OAL; is meant to evolve through a joined effort of
- implementators and application programmers meeting in regular
- sessions of an Architecture Review Board (ARB). As of this time
- the ARB has not yet been set up. Currently, the two companies
- committed to implementing &OAL; drivers have appointed two
- contacts responsible for preparing the specification draft.
- </para>
- <para>
- Consequently &OAL; is a cooperative effort, one in a sequence of
- earlier attempts to create a cross-platform audio API. The current
- authors/editors have assembled this draft of the specification,
- but many have, directly and indirectly, contributed to the content
- of the actual document. The following list (in all likelihood
- incomplete) gives in alphabetical order participants in the discussion
- and contributors to the specification processs and related efforts:
-
- &CREDITS;
- </para>
- </section>
- </chapter> <!-- Overview -->
-
|