diff --git a/neo/openal/docs/ChangeLog b/neo/openal/docs/ChangeLog deleted file mode 100644 index b4eb754d..00000000 --- a/neo/openal/docs/ChangeLog +++ /dev/null @@ -1,378 +0,0 @@ -2001-02-06 Bernd Kreimeier <bk@lokigames.com> - - * chp-rendering.sgml: added annotation about CONE calculation. - * chp-state.sgml: added more annotation on log vs. linear GAIN. - -2001-01-09 Bernd Kreimeier <bk@lokigames.com> - - * chp-state.sgml: ungrep of scratched DISTANCE_SCALE. - -2001-01-08 Bernd Kreimeier <bk@lokigames.com> - - * chp-rendering.sgml: amended MAX_DISTANCE. - * chp-state.sgml: culling clarification. - Note: MAX_DISTANCE (and consequently the current - Inverse Clamped Distance Model) do not fit the API. - The clamping of the distance (instead of clamping - to the effective gain at the max. distance) will - potentially break other distance-dependend calculations - further down in the processing chain. - TODO: revisit Inverse Clamped Distance Model. _DS3D extension? - -2001-01-05 Bernd Kreimeier <bk@lokigames.com> - - * chp-rendering.sgml: SOURCE_RELATIVE specification. - - * chp-state.sgml: clarified distance attentuation calculation - a bit, and added back in the linear version as an annotation. - Note: watch this, it's tied into the GAIN_LINEAR issue. - TODO: added dist calculation requirements. - -2001-01-04 Bernd Kreimeier <bk@lokigames.com> - - * chp-operation.sgml: INVALID_ENUM for getters and enable, - not INVALID_OPERATION. Later: Delete{Object}s accepts zero. - -2000-12-04 Bernd Kreimeier <bk@lokigames.com> - - * Makefile: added HTML ZIP targets ("update" for website). - -2000-11-10 Bernd Kreimeier <bk@lokigames.com> - - * WWW: reworked the OpenAL web site as in CVS. This - includes emptying HTML files with obsolete whitepaper - and specification content not even linked from the - official pages, and reworking the official pages to - remove redundancy, and generally point to the snapshots. - Also created snapshots page (along with cronjob and - automated update installed by Rafael). - - * Makefile: added ZIP file generation to update target. - - * index.html: edited for snapshots/ page on www.openal.org. - As it is next to impossible to reproduce the Official OpenAL - Look w/o lots of tap dancing, I use the style from the - DocBook HTML rendering instead. - -2000-11-06 Bernd Kreimeier <bk@lokigames.com> - - * Makefile (full): full rendering target added. - * ent-marks-full.sgml: created. - -2000-10-27 Bernd Kreimeier <bk@lokigames.com> - - * Makefile: rendering targets for cronjob driven update. - -2000-10-26 Bernd Kreimeier <bk@lokigames.com> - - * alc-context.sgml: annotation on release of hardware resources. - Removed version query enry point, added size-safe GetIntegerv - and GetString, removed GetErrorString, added integer and string - query tokens, added device enumeration query. Added more annotation. - - * chp-rendering.sgml: remark on release of hardware resources. - - * alc-context.sgml: had INVALID_DEVICE also marked by RFC. - Removed the "device parameter should be NULL" leftovers. - Added Query functions. Removed redundant device parameters - to avoid GLX-style redundancy and resulting BadMatch errors. - - -2000-10-25 Bernd Kreimeier <bk@lokigames.com> - - * oalspecs.sgml: include extension list entity (below). - * ent-extensions.sgml: created. - Note: during several unsuccessful attempts to convince - DocBook and the DocBook toolchain to handle CDATA external - entities properly for <literallayout> and <programlisting>, - I also had to recover accidentally deleted files. - -2000-10-24 Bernd Kreimeier <bk@lokigames.com> - - * alc-context.sgml: shared object section. Mike Kelly request - as RFC. ALC Error section placeholder. ALC attribute section - as placeholder. Process/Suspend added plus annotation, Update - removed. More typo fixes. Added extension query. Removed old - RFC's. No UNDERFLOW error. No CHANNELS attribute, MIXAHEAD - redundant. Removed alcUpdate( PROCESS | SUSPEND ) RFC. - - -2000-10-23 Bernd Kreimeier <bk@lokigames.com> - - * alc-context.sgml: entities for ALCdevice and ALCcontext. - Fixed typos reported by CarloV on non-pointer handles. - - * chp-rendering.sgml: infinite LOOPING attribute. - -2000-10-20 Bernd Kreimeier <bk@lokigames.com> - - * ent-examples.sgml: experimenting with external sample.c - files as CDATA entities, to no avail. - * oalspecs.sgml: example entities. - -2000-10-16 Bernd Kreimeier <bk@lokigames.com> - - * chp-rendering.sgml: moved in buffer queueing. - Scratched PLAY_COUNT. Fixed SourceStart{v} residue. - - * chp-queueing.sgml: proof-reading, contents then moved out. - -2000-10-13 Bernd Kreimeier <bk@lokigames.com> - - * chp-queueing.sgml: changed according to discussion. - Removed some, but not all redundant annotation, and removed - remainders of old attribute based approach. Added annotation - on repetition by multiple calls. Changed signatures. - -2000-10-11 Bernd Kreimeier <bk@lokigames.com> - - * chp-state.sgml: removed GAIN_LINAR based equations. - * chp-rendering.sgml: removed GAIN_LINAR. - * ext-gainlinear.sgml: collected GAIN_LINEAR related sections. - Note: choosing to use GAIN_LINEAR_LOKI for now. The duplication - of tokens complicates specification and implementation, and - requires further discussion. - - * ent-marks.sgml: added Revision mark. - - * oalspecs.sgml: added per-file revision history (appendix). - Note: we might wind up never rendering these, I can't see - a consistent way to do this. - - * ChangeLog: moved in revision history from oalspecs.sgml. - Note: see the very first entry in this document for the - revision history that predates this ChangeLog. - TODO: include ChangeLog in RFC/Revision rendering. - - * chp-introduction.sgml: removed CVS based revision history. - Added a %Revision marked section (we now have these per-file). - -2000-10-10 Bernd Kreimeier <bk@lokigames.com> - - * oalspecs.sgml: reworked for new distributed document. - - * app-annotations.sgml: created from original doc. - * app-extensionprocess.sgml: created from original doc. - * app-extensions.sgml: created from original doc. - * app-constants.sgml: created from original doc. - - * alc-context.sgml: created from original doc. - Note: this breaks the scheme a bit, as this is technically - a chapter, but if ALC turns into a multi-chapter - documentation at some point down the road it will have - to be a separate document anyway. - - * chp-multichannel.sgml: created from original doc. - * chp-queueing.sgml: created from original doc. - * chp-buffers.sgml: created from original doc. - * chp-rendering.sgml: created from original doc. - * chp-state.sgml: created from original doc. - * chp-operation.sgml: created from original doc. - * chp-introduction.sgml: created from original doc. - * sec-bookinfo.sgml: created from original doc. - - * ent-names.sgml: created from original doc. - * ent-marks.sgml: got it working. - Note: this will be a temporary file (created from the Makefile), - not sure whether it should be in CVS at all. - - * ChangeLog: created. - -2000--1999 Bernd Kreimeier <bk@lokigames.com> - - * oalspecs.sgml: moved out CVS Revision History (below). - - The AL Specification was originally maintained as an HTML - document, and subsequently as a single SGML file. With the - split into several files, it is no longer possible or - desirable to maintain a single revision history. As we - have a manually maintained revhistory within the DocBook - source, I decided to move the old revision history into - the ChangeLog. - - Revision 1.11 2000/10/11 18:44:46 bk - More JMJ typo corrections. IA-SID I3DL2 section rephrased. Moved - marked section toggles in ent-marks.sgml file so that these can - be generated or modified from the Makefile. Split document up into - several separate files using external entities. Created external - ChangeLog. From now on, revision history and changes will be - maintained in the ChangeLog as it is scattered over files. - - Revision 1.10 2000/09/27 22:57:02 bk - Commit w/o subdoc (doesn't work). - - Revision 1.9 2000/09/27 22:54:36 bk - Typos from MKV and JMJ. Fixed Inverse Square Law. Scratched - ProgagationSpeed. Described distance models in full. Changed - to INVERSE_DISTANCE (both models use ROF). Added GH text (parts) - as annotation to "View" sections, added Basic AL Operation text - he sent (some changes, removed redundant section), marked source - as Example sections. Changed Terminology annotation. Added TBA - on Fundamentals. RFC'ed distributed error section from GL and - annotation. Added TBA on Floating Point Computation. Added AL - State TBA. Added AL entity as opposed to OAL. Added Command Syntax - TBA (minimal) plus annotation. More fixes from JMJ. No NaN - check comment. Rephrased invalid commmands. Disclaimer on - Enable/Disable being unused. Query with NULL destination - clarified. Example values for simple query. TBA on data - conversions. Cleaned out Time query/scaling, added RFC, - marked DURATION/REMAINDER as Scratch. Euclidean. No Transforms - now annotation. Promoted RFC on Source( BUFER, NONE ) to spec - text. Scratch'ed Streaming Buffer remarks. Removed IMPLIED. - Scratch'ed Buffer Traversal and a whole shebang of queueing - annotation to go with it. ALC cleanup, RFC on multiple - current contexts. Skipped Buffer Queueing section for now. - SUBDOC NO in DocBook declaration. Validation pass for CVS. - - Revision 1.8 2000/09/20 01:21:33 bk - Fixes from Ian Ollman: fixed wrong title on Buffer Attributes - section. Annotation on No application selected Names. Fixes - from JMJ: typos and mistakes on I3DL2. Renamed LOOP_COUNT to - PLAY_COUNT and clarified counting as requested. DOPPLER_FACTOR, - DOPPLER_VELOCITY, Doppler Effect section rewritten according to - announced changes. Removed DistanceFactor, added scale invariance. - Scratch-marked Multichannel sketch. Added BufferWriteData as Loki - extension. Removed obsolete RFC on depercating BUFFER. Rewrote - Buffer queueing state section and renamed BUFFERS_USED to - BUFFERS_PROCESSED following discussion with John Kraft, to remove - ambiguity. Rewrote BUFFERS_PROCESSED description. Added - MAX_DISTANCE plus MUTE annotation. Added No Culling section. - Edited DISTANCE_MODEL section. Distance Model Source Attributes - added. Rolloff quantization annotation added. Evaluation order - on attenuation/gain. Marked Scratch the current IASIG section - per JMJ's request, added Source Environment Attribute section - as TBA. Removed and moved RFC's (AppendData, GenStreaming). - Clarified directional attenuation. Clarified CONE_OUTER_GAIN - as scaling factor. Added a Programmers and Implementors View. - - Revision 1.7 2000/08/15 02:47:03 bk - Fixed RFC markup error needed for Full version. - - Revision 1.6 2000/08/15 02:20:49 bk - Clarified BUFFER_USED vs. buffer state. Started section on - handling multichannel output. Moved out GenStreamingBuffer - in annotation on BufferAppendData extension. Added BufferWriteData - with internalFormat parameter and discussion on mono vs. - multichannel buffers. Added Multichannel objects (kept short in - case we demote to extension or replace). Some annotation. - Tried GGI docbook2texi in attempt to end those rogue linux/doc - activities, to no avail. Removed messy scratchpad section. - Removed outdated example listing. Turned remaining scratch - annotation into appendix. Created minimal Makefile (cleanup). - - Revision 1.5 2000/08/08 02:56:05 bk - alcGetCurrentContext. Attempt to formulate Design Objectives as - a guideline. RFC's on INITIAL state, ACTIVE misnomer. RFC on - INVALID_POINTER. Lots of scratch stuff (fallout from buffer - queueing discussions). Annotations on various buffer queue - rejects and related issues. Added Scaling and Timing sections - and related calls. Added CONE_OUTER_GAIN. Added Doppler sections. - Rewrote and shuffle globale state, simple query, string query. - Moved Extensions sections in Appendix. Added annotation and - RFC's regarding distance/gain model. No more ILLGEAL - finally - checked the specs and Mesa 3.3 to be sure. Picked OPERATION at - the same time, also specs conformat (no comment...). Removed - JMJ as responsible author (all blame shall be mine). Fixed - Play(), INITIAL vs. STOPPED. Edited related RFC's, stripped - obsolete commentary. Rewrote State/State Transition section. - Fixes on SGML. CHANNELS and BITS moved in RFC's. Moved and - rewrote RFC on Duration/Remainder queries into Time section. - Stripped BYTE_LOKI of all but the essentials. Added placeholders - for Callback and AppendData in same (backwards compatibility) - section. Lots of Buffer Queueing. - - Revision 1.4 2000/07/25 17:19:17 bk - Changed ILLEGAL_OPERATION to ILLEGAL_COMMAND consistently. Added - excerpts from mailinglist to scratch section. Added Appendix on - Extension Process. Typos. RFC on EXTENSIONS changed to Annotation. - SGML validation and error fixes (not done on cvs1.3, sorry). - - Revision 1.3 2000/07/24 21:18:53 bk - Reordered manual revision history to be CVS compliant. Diff against - Rev. 1.4/bk000626 as it was not checked in CVS. Created scratch - section for removed RFC 's. Checked edits on Extension section and - removal of related RFC/bk000506. Converted removed RFC/bk000504 - on IsExtensionPresent in Annotation. Rewrote Mike's annotations - on source types and distance attentuation clamping as RFC's and - added some removed RFC sections back. Rewrote annotation added by - MikeV on compressed buffers, split of RFC on AL_SIZE query. - Re-added RFC's an buffer attribute defaults, edited annotation - on GetEnumValue return. RFC's on factory methods for streaming - buffers, memory budgeting, initial object state. Re-inserted and - extended RFC on format enum issue. Re-inserted the global - setter/getter in scratch section. Implementation requirement - section. Resurrected CONE_OUTSIDE_GAIN as RFC. BITS bitching, - annotation to explain why not enumerating frequencies. Got a grip - and recognized BITS and CHANNELS as query-only. More on frequency - in BufferData. Into CVS before current discussions are added. - - Revision 1.2 2000/07/19 15:16:58 briareos - Enable/Disable return void, not enum. - - Revision 1.1 2000/06/29 00:27:24 briareos - Initial draft of OpenAL specs. - - - 1.4/briareos : not in CVS - Finished editing related to my comments, with Joe's - feedback, in preparation for use by Creative and eventual - public dissemination later this week. - - 1.4/bk000626 : not in CVS - Started using id attribute on RFC note elements, to ensure unique - identifiers. Added Annote level. Added oal15-jm/overview.html - changes. Added oal15-jm/object-state.html (mostly). Removed - Filtering/Spatialization distinction and merged attribute table. - Moved Filter chapter to annotation. Moved Geometry to annotation, - rewrote annotation with my latest conclusions on A3D/EAGLE like - approach. Stripped out ALU and ALUT, added annotation on reasons. - Added some text to introduction chapter. Moved ALC chapter to end - of specification. Followed John Hall advice to enable section - numbers in print stylesheet. Rewrote section on GetError. Created - I3DL2 extension appendix. Reworked all tables for better - formatting with separated descriptions. Took out a bunch of - outdated RFC's. Rewrote Query and String Query section. Added - Scratch sections. Added ARB/Ack section. Didn't get RFC comments - from MikeV. Fixed permission to copy. - - 1.4/bk000508 : not in CVS. - Added RFC to Device section. Made nested RFC around entire - device section to make sure. Added trailing blanks to data type - entities as a cheap workaround to the HTML backend problem in - FuncSynopsis. Added RFC from BYTE_LOKI discussion on mailinglist. - - 1.4/bk000507 : not in CVS. - Added altypes.h info on scalar types, copied Linux OpenGL Base - ABI layout. Also added some missing enums. Checked alc.h header, - added UpdateContext and RFC's. Changed alc*Context signatures to - include ALCdevice handle. Checked al.h header, fixed outdated - BufferData/BufferAppendData signatures, added RFC's. Added comments - on differing return types. This pretty much concludes the inventory. - - 1.4/bk000506 : not in CVS. - The HTML in CVS was completely mangled between the 1.2 and 1.3 - revisions. Also, redundant al and AL_ prefixes were added, and - the document was restructured. I tried SaveAs ASCII and - whitespace insensitive compare, and finally did the compare - manually (no guarantees). The text sections that looked - relevant have been added in RFC's with the bk000506 tag. - Also added a revision history and CVS tags for future CVS based - revision control (post-E3). - - 1.4/bk000505 : not in CVS. - SGML version. Merges AL specification and API reference as - of GDC (v1.2) with each other. Adds ALC placeholder. - Addition of several RFCs based on recent discussions. - - 1.3/cvogelsa : only in CVS. - api-reference.html CVS v1.14 - specification.html CVS v1.3 - - 1.2/briareos : 8 March 2000, released at GDC. - api-reference.html CVS v1.13 - specification.html CVS v1.2 - - x.xx/nn : early specifications. - Neither the early working papers by Terry Sikes, Sean L. Palmer - and others nor the first versions of the &OAL; specification - as compiled at Loki were archived and versioned in a coherent way. \ No newline at end of file diff --git a/neo/openal/docs/Makefile b/neo/openal/docs/Makefile deleted file mode 100644 index ce5932b9..00000000 --- a/neo/openal/docs/Makefile +++ /dev/null @@ -1,148 +0,0 @@ -## ------------------------------------------------ -## Makefile for openal/docs/ - - -## DocBook stuff -DB2PS = db2ps -DB2PDF = db2pdf -DB2HTML = db2html - -## TexInfo stuff -MAKEINFO = makeinfo - - - -## Targets -OALSPEC = oalspecs -DB_OBJS = $(OALSPEC).ps $(OALSPEC)/index.html - -TEXI_OBJS = openal.info - -.SUFFIXES: .texi .info - -## Rules -%.ps : %.sgml - $(DB2PS) $< - -%/index.html : %.sgml - $(DB2HTML) $< - - -## Fixme - config.h -%.info : %.texi ../config.h - $(MAKEINFO) $< - - - -## ---------------- -## Standard targets -default: all - -all: render - -render: $(DB_OBJS) - -texi: $(TEXI_OBJS) - - -## -------------- -## Cronjob target -update: specs annotated full - - -## ---------------------------------------------------------- -## Specification - prototypes, tokens, explanation -## -specs-ps: - -rm -f $(OALSPEC)-specs.ps - cp ent-marks-specification.sgml ent-marks.sgml - $(DB2PS) $(OALSPEC).sgml - mv $(OALSPEC).ps $(OALSPEC)-specs.ps - zip -9 $(OALSPEC)-specs.ps.zip $(OALSPEC)-specs.ps - -specs-html: - -rm -rf $(OALSPEC)-specs/ - cp ent-marks-specification.sgml ent-marks.sgml - $(DB2HTML) $(OALSPEC).sgml - mv $(OALSPEC) $(OALSPEC)-specs - -rm $(OALSPEC)-specs.html.zip - zip -r9 $(OALSPEC)-specs.html.zip $(OALSPEC)-specs/ - -specs: specs-ps specs-html - - -## ----------------------------------------------------------- -## Annotated Version - including annotation seections -## (not Programmer's Guide, no examples) -annotated-ps: - -rm -f $(OALSPEC)-annote.ps - cp ent-marks-annotated.sgml ent-marks.sgml - $(DB2PS) $(OALSPEC).sgml - mv $(OALSPEC).ps $(OALSPEC)-annote.ps - zip -9 $(OALSPEC)-annote.ps.zip $(OALSPEC)-annote.ps - -annotated-html: - -rm -rf $(OALSPEC)-annote/ - cp ent-marks-annotated.sgml ent-marks.sgml - $(DB2HTML) $(OALSPEC).sgml - mv $(OALSPEC) $(OALSPEC)-annote - -rm $(OALSPEC)-annote.html.zip - zip -r9 $(OALSPEC)-annote.html.zip $(OALSPEC)-annote/ - -annotated: annotated-ps annotated-html - -## ---------------------------------------------------------- -## FULL Version - include's the RFC's and everything else -## -full-ps: - -rm -f $(OALSPEC)-full.ps - cp ent-marks-full.sgml ent-marks.sgml - $(DB2PS) $(OALSPEC).sgml - mv $(OALSPEC).ps $(OALSPEC)-full.ps - zip -9 $(OALSPEC)-full.ps.zip $(OALSPEC)-full.ps - -full-html: - -rm -rf $(OALSPEC)-full/ - cp ent-marks-full.sgml ent-marks.sgml - $(DB2HTML) $(OALSPEC).sgml - mv $(OALSPEC) $(OALSPEC)-full - -rm $(OALSPEC)-full.html.zip - zip -r9 $(OALSPEC)-full.html.zip $(OALSPEC)-full/ - -full: full-ps full-html - - -## ---------------------------------------------------------- -## ZIP - create archive -## - - - -clean: db_clean texi_clean - -db_clean: - -rm -f $(OALSPEC).dvi - -rm -f $(OALSPEC).aux - -rm -f $(OALSPEC).log - -rm -f $(OALSPEC).tex - -rm -rf $(OALSPEC).junk - -rm -f \#*\# - -rm -f *~ - -texi_clean: - @echo "Not done." - -install: - @echo "Not done." - -distclean: clean - -rm -rf \ - $(OALSPEC)-full/ \ - $(OALSPEC)-full.ps \ - $(OALSPEC)-annote/ \ - $(OALSPEC)-annote.ps \ - $(OALSPEC)-specs/ \ - $(OALSPEC)-specs.ps \ - *.zip - - diff --git a/neo/openal/docs/alc-context.sgml b/neo/openal/docs/alc-context.sgml deleted file mode 100644 index 3b0ae0f4..00000000 --- a/neo/openal/docs/alc-context.sgml +++ /dev/null @@ -1,846 +0,0 @@ - - - <chapter id="alc"> - <title>AL Contexts and the ALC API</title> - <para> - This section of the AL specification describes ALC, the AL Context API. - ALC is a portable API for managing &AL; contexts, including - resource sharing, locking, and unlocking. Within the core AL API the - existence of a Context is implied, but the Context is not exposed. The - Context encapsulates the state of a given intance of the AL state machine. - </para> - <para> - To avoid confusion with the AL related prefixes implied throughout - this document, the "alc" and "ALC_" prefixes have been made explicit - in the ALC related sections. - </para> - <para> - ALC defines the following objects: Contexts. - </para> - - - <![ %Annote [ - <note><title>Annotation (ALC entry points)</title><para> - While the actual ALC implemention might be supplied - as a separate library, or as part of a server or - daemon, the specification requires that the AL library - provides the actual ALC entry points. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (ALC OS independend)</title><para> - ALC is meant to be OS-independent. OS specifics are - expected to be adressed by defining proper device - specifiers strings, and configuration attributes. - In this, ALC differs from GLX/WGL, which (due to the - tighter coupling with the window manager and - operating system) attempt to abstract OS specifics - to a much lesser degree. - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk001024-02"><title>RFC/ Issues </title><para> - Hardware init/deinit, mapping many processes with - multiple contexts to many devices, sharing resources - among processes. - </para></note> - ]]> - - - <sect1> - <title>Managing Devices</title> - <para> - ALC introduces the notion of a Device. A Device can be, - depending on the implementation, a hardware device, or - a daemon/OS service/actual server. This mechanism also - permits different drivers (and hardware) to coexist - within the same system, as well as allowing several - applications to share system resources for audio, including - a single hardware output device. The details are left - to the implementation, which has to map the available - backends to uniq7ue device specifiers (represented as - strings). - </para> - - - <![ %Annote [ - <note><title>Annotation (Network transparency)</title><para> - &AL; is meant for interoperability with &OGL;. Some - implementations of &OGL; bindings (e.g. GLX) are network - transparent. The Device API theoretically allows for - a network transparent AL implementation. No wire protocol - is specified, no specification or implementation is planned. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Device Enumeration)</title><para> - At this time, ALC does not provide mechanism to query - for available devices, and request device enumerations. - This might be added at a later time, depending on demand - and the ability to abstract OS and configuration specifics. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (X11 Audio)</title><para> - The ALC API intentionally mimicks XOpenDisplay - and XCloseDisplay. There is no X Audio standard, - although proposals have been made in the past. - The ALC API design accounts for this possibility - in a minimal way. - </para></note> - ]]> - - <sect2> - <title>Connecting to a Device</title> - <para> - The alcOpenDevice function allows the application (i.e. the - client program) to connect to a device (i.e. the server). - <funcsynopsis><funcprototype> - <funcdef> &device; * <function>alcOpenDevice</function></funcdef> - <paramdef> const &ubyte;* <parameter>deviceSpecifier</parameter></paramdef> - </funcprototype></funcsynopsis> - If the function returns NULL, then no sound driver/device has - been found. The argument is a null terminated string that requests - a certain device or device configuration. If NULL is specified, - the implementation will provide an implementation specific default. - </para> - <![ %Annote [ - <note><title>Annotation (Operating system dependencies)</title><para> - At this point, system specific configuration, and operating system - specific details, are handled by leaving the details of the - string specifier to the implementation. The application coder - has to determine how he wants to obtain this information from the - OS or the user. If, at a later point, device enumeration and - configuration requests are supported through ALC, the resulting - string might still be operating system and implementation specific. - </para></note> - ]]> - </sect2> - - <sect2> - <title>Disconnecting from a Device</title> - <para> - The alcCloseDevice function allows the application (i.e. the - client program) to disconnect from a device (i.e. the server). - <funcsynopsis><funcprototype> - <funcdef> &void; <function>alcCloseDevice</function></funcdef> - <paramdef> &device; * <parameter>deviceHandle</parameter></paramdef> - </funcprototype></funcsynopsis> - If deviceHandle is NULL or invalid, an ALC_INVALID_DEVICE error - will be generated. Once closed, a deviceHandle is invalid. - </para> - </sect2> - </sect1> - - - - - <sect1> - <title>Managing Rendering Contexts</title> - <para> - All operations of the AL core API affect a current AL context. - Within the scope of AL, the ALC is implied - it is not visible as - a handle or function parameter. Only one AL Context per INprocess - can be current at a time. Applications maintaining multiple - AL Contexts, whether threaded or not, have to set the current - context accordingly. Applications can have multiple threads - that share one more or contexts. In other words, AL and ALC are - threadsafe. - </para> - <para> - The default AL Context interoperates with a hardware device driver. - The application manages hardware and driver resources by - communicating through the ALC API, and configures and uses - such Contexts by issuing AL API calls. A default AL Context - processes AL calls and sound data to generate sound output. - Such a Context is called a Rendering Context. There might - be non-rendering contexts in the future. - </para> - <para> - The word "rendering" was chosen intentionally to emphasize the - primary objective of the AL API - spatialized sound - and the - underlying concept of AL as a sound synthesis pipeline that - simulates sound propagation by specifying spatial arrangements - of listeners, filters, and sources. If used in describing an - application that uses both &OGL; and &AL;, "sound rendering - context" and "graphics rendering context" should be used for - clarity. Throughout this document, "rendering" is used - to describe spatialized audio synthesis (avoiding ambiguous - words like "processing", as well as proprietary and restrictive - terms like "wavetracing"). - </para> - - - <sect2> - <title>Context Attributes</title> - <para> - The application can choose to specify certain attributes for - a context. Attributes not specified explicitely are set to - implementation dependend defaults. - </para> - <para> - <table> - <title>Context Attributes</title> - <tgroup cols="2" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>Name</> - <entry>Description</> - </row> - </thead> - <tbody> - <row> - <entry>ALC_FREQUENCY</> - <entry>Frequency for mixing output buffer, in units of Hz.</> - </row> - <row> - <entry>ALC_REFRESH</> - <entry>Refresh intervalls, in units of Hz.</> - </row> - <row> - <entry>ALC_SYNC</> - <entry>Flag, indicating a synchronous context.</> - </row> - </tbody> - </tgroup> - </table> - </para> - - <![ %Annote [ - <note><title>Annotation (Refresh Control)</title><para> - Applications might have a fixed, or bounded, schedule for - state changes (e.g. synchronously with the GL framerate). - In this case it is desirable to specify the mixahead - interval (milliseconds), or refresh rate (Hz), for the - mixing thread. This is especially important for a synchronous - context, where the application has to specify the refresh - interval it intends to keep. - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk001026-05"><title>RFC / Mixing Buffer Configuration </title><para> - ALC_RESOLUTION was originally used to specify the accuracy of the - mixing output buffer. For the time being this is not supported, but - could be added if mixing path and result accuracy control is desirable - to scale resource requirements. - A full ALC_FORMAT (including channel and other attributes) does not - make sense for rendering contexts, but will be necessary for PBuffers - (mix to memory). - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk001026-01"><title>RFC / LOKI extensions </title><para> - <programlisting> - - ALC_SOURCES_HINT_LOKI, /* # of sources to pre-allocate */ - ALC_BUFFERS_HINT_LOKI, /* # of buffers to pre-allocate */ - - ALC_CD_LOKI, /* demand CD/DVD control */ - - </programlisting> - </para></note> - ]]> - </sect2> - - - <sect2> - <title>Creating a Context</title> - <para> - A context is created using alcCreateContext. The device parameter - has to be a valid device. The attribute list can be NULL, - or a zero terminated list of integer pairs composed of valid - ALC attribute tokens and requested values. - <funcsynopsis><funcprototype> - <funcdef> &context; * <function> alcCreateContext </function></funcdef> - <paramdef> const &device; * <parameter> deviceHandle </parameter></paramdef> - <paramdef> ∫ * <parameter> attrList </parameter></paramdef> - </funcprototype></funcsynopsis> - Context creation will fail - if the application requests attributes that, by themselves, - can not be provided. Context creation will fail if the - combination of specified attributes can not be provided. - Context creation will fail if a specified attribute, or - the combination of attributes, does not match the default - values for unspecified attributes. - </para> - </sect2> - - <sect2> - <title>Selecting a Context for Operation</title> - <para> - To make a Context current with respect to AL Operation (state - changes by issueing commands), alcMakeContextCurrent is used. - The context parameter can be NULL or a valid context pointer. - The operation will apply to the device that the context was - created for. - <funcsynopsis><funcprototype> - <funcdef> &bool; <function> alcMakeContextCurrent </function></funcdef> - <paramdef> &context; * <parameter> context </parameter></paramdef> - </funcprototype></funcsynopsis> - For each OS process (usually this means for each application), only - one context can be current at any given time. All AL commands apply - to the current context. Commands that affect objects shared among - contexts (e.g. buffers) have side effects on other contexts. - </para> - <![ %Annote [ - <note><title>Annotation (No Explicit Device)</title><para> - An ALC context is bound to the device it was created for. - The context carries this information, thus removing the - need to specify the device explicitely. Contexts can not - be made current for any other device aside from the one - they were created for. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (No Multiple Current)</title><para> - There is only one current context per process, even - in multithreaded applications, even if multiple - devices are used. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Current NULL)</title><para> - The implementation is encouraged to exploit optimizations - possible if the application sets the current context - to NULL, indicating that no state changes are intended - for the time being. The application should not set the - current context to NULL if more state changes are - pending on the most recent, or another context created - for the same device. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Shared Objects)</title><para> - Buffers are shared among contexts. As mutiple contexts - can exist at the same time, the state of shared objects - is also shared among contexts. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk001026-06"><title>RFC / Buffer Deletion </title><para> - Buffers that have not yet been processed in another context - can not be deleted from any other context. - </para></note> - ]]> - </sect2> - - <sect2> - <title>Initiate Context Processing</title> - <para> - The current context is the only context accessible to state - changes by AL commands (aside from state changes affecting - shared objects). However, multiple contexts can be processed - at the same time. To indicate that a context should be - processed (i.e. that internal execution state like offset - increments are supposed to be performed), the application - has to use alcProcessContext. - <funcsynopsis><funcprototype> - <funcdef> &void; <function>alcProcessContext</function></funcdef> - <paramdef> &context; * <parameter> context </parameter></paramdef> - </funcprototype></funcsynopsis> - Repeated calls to alcProcessContext are legal, and do not - affect a context that is already marked as processing. The - default state of a context created by alcCreateContext is - that it is not marked as processing. - </para> - - <![ %Annote [ - <note><title>Annotation (Sync and async implementations)</title><para> - Unfortunately, the exact semantics of alcProcessContext is - not independend of the implementation. Ideally it should be completely - transparent to the application whether the sound driver is threaded or - synced. Unfortunately a synced context has to have its execution - initiated by the application, which requires calls of - alcProcessContext timed in accordance to the drivers mixahead, - or the rendering buffer will underflow. For a threaded driver, - the implementation is free to consider alcProcessContext - a NOP once the context has been marked as processing. - </para><para> - One consequence is that an application that was developed - using a threaded implementation of AL might not work - properly with a synchronous implementation of AL (on - the other hand, an AL application that works using a - synchronous implementation is guaranteed to work with - a threaded implementation. - </para><para> - Enforcing alcProcessContext calls would defeat the purpose - of a threaded implementation. Permitting the AL implementation - to e.g. schedule optimizations based on alcProcessContext - calls would similarly obfuscate the exact semantincs. - Consequently, the application coder has to accept this - implementation dependency, and has to rely on the ALC_SYNC - attribute to explicitely request a synchronous implementation. - The implementation can expect the application to be aware - of the additonal constraints imposed on alcProcessContext in - this case. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Multiple Contexts and SYNC refresh)</title><para> - The application can request SYNC contexts or threaded contexts, - however, the implementation is not obliged to provide both, or provide - a mixture of both on the same device. - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk001024-03"><title>RFC/ Implications for Networking</title><para> - What does alcProcessContext imply for networking? - For AL, will we add alFlush/alFinish? - </para></note> - ]]> - </sect2> - - <sect2> - <title>Suspend Context Processing</title> - <para> - The application can suspend any context from processing - (including the current one). To indicate that a context should be - suspended from processing (i.e. that internal execution state like - offset increments is not supposed to be changed), the application - has to use alcSuspendContext. - <funcsynopsis><funcprototype> - <funcdef> &void; <function>alcSuspendContext</function></funcdef> - <paramdef> &context; * <parameter> context </parameter></paramdef> - </funcprototype></funcsynopsis> - Repeated calls to alcSuspendContext are legal, and do not - affect a context that is already marked as suspended. The - default state of a context created by alcCreateContext is - that it is marked as suspended. - </para> - - <![ %Annote [ - <note><title>Annotation (Sync and async implementations)</title><para> - Unfortunately, the exact semantics of alcSuspendContext is - also not independend of the implementation. For a threaded - implementation, alcSuspendContext is necessary to ensure a context - is not processed. For a synchronous implementation, omitting - alcProcessContext calls will ultimately have the same effect, - but will also generate rendering buffer underflow errors. - Again, the application coder that requests a synchronous - context using ALC_SYNC has to make sure that alcSuspendContext - is used accordingly. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Suspending vs. Muting a context)</title><para> - By setting Listener GAIN to zero, an application can mute a - context, and expect the implementation to bypass all rendering. - However, the context is still processing, and the internal - execution state is still updated accordingly. Suspending a - context, whether muted or not, will incidentally suspend rendering - as well. However, it is the application's responsibility to - prevent artifacts (e.g. by proper GAIN control to fade in and - out). It is recommended to mute a context before suspending. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Current Context Suspended)</title><para> - It is possible to make a suspended context current, or - suspend the current context. In this case, the implementation - is still obliged to immediately verify AL commands as they - are issued, and generate errors accordingly. The implementation - is permitted to postpone propagating the actual state changes - until the context is marked for processing again, with the - exception of dereferencing data (e.g. buffer contents). - For efficiency reasons (memory usage), most if not all - AL commands applied to a suspended context will usually - be applied immediately. State changes will have to be applied - in the sequence they were requested. It is possible to - use suspension of a current context as an explicit locking - (to enforce apparent synchronicity), but execution is still - guaranteed to be in sequence, and the implementation is not - expected to optimize this operation. A typical use would - be setting up the initial configuration while loading a - scene. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Release of Hardware Resources)</title><para> - The specification does not guarantee that the implementation - will release hardware resources used by a suspended context. - This might well depend on the details of the hardware and driver. - Neither a muted context nor a suspended context can be expected - to free device resources. If all contexts for a given device - are suspended, and no context of this device is current, the - implementation is expected to release all hardware resources if possible. - </para></note> - ]]> - - - </sect2> - - - <sect2> - <title>Destroying a Context</title> - <para> - <funcsynopsis><funcprototype> - <funcdef> &void; <function> alcDestroyContext </function></funcdef> - <paramdef> &context; * <parameter> context </parameter></paramdef> - </funcprototype></funcsynopsis> - The correct way to destroy a context is to first release it using - alcMakeCurrent and NULL. Applications should not attempt to destroy - a current context. - </para> - </sect2> - </sect1> - - - - <sect1> - <title>ALC Queries</title> - - <sect2> - <title>Query for Current Context</title> - <para> - The application can query for, and obtain an handle to, the current - context for the application. If there is no current context, NULL is - returned. - <funcsynopsis><funcprototype> - <funcdef> &context; * <function>alcGetCurrentContext</function></funcdef> - <void> - </funcprototype></funcsynopsis> - </para> - </sect2> - - <sect2> - <title>Query for a Context's Device</title> - <para> - The application can query for, and obtain an handle to, the device - of a given context. - <funcsynopsis><funcprototype> - <funcdef> &device; * <function>alcGetContextsDevice</function></funcdef> - <paramdef> &context; * <parameter> context </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - - - <sect2> - <title>Query For Extensions</title> - <para> - To verify that a given extension is available for the current - context and the device it is associated with, use - <funcsynopsis> - <funcprototype> - <funcdef>&bool;<function>IsExtensionPresent</function></funcdef> - <paramdef> const &device; * <parameter>deviceHandle</parameter></paramdef> - <paramdef>const &ubyte; * <parameter> extName </parameter></paramdef> - </funcprototype> - </funcsynopsis> - A NULL name argument returns FALSE, as do invalid and unsupported string - tokens. A NULL deviceHandle will result in an INVALID_DEVICE error. - <![ %Annote [ - <note><title>Annotation (Exlicit Device Parameter)</title><para> - Certain ALC Extensions might be relevant to context creation - (like additional attributes, or support for unusual multi-context - combinations), thus the application might have to query these - before a context is created. On the other hand, ALC Extensions - are specific to the device. - </para></note> - ]]> - </para> - </sect2> - - <sect2> - <title>Query for Function Entry Addresses</title> - <para> - The application is expected to verify the applicability of - an extension or core function entry point before requesting - it by name, by use of alcIsExtensionPresent. - <funcsynopsis><funcprototype> - <funcdef> &void; * <function> alcGetProcAddress</function></funcdef> - <paramdef> const &device; * <parameter>deviceHandle</parameter></paramdef> - <paramdef> const &ubyte; * <parameter> funcName </parameter></paramdef> - </funcprototype></funcsynopsis> - Entry points can be device specific, but are not context specific. - Using a NULL device handle does not guarantee that the entry - point is returned, even if available for one of the available - devices. Specifying a NULL name parameter will cause an - ALC_INVALID_VALUE error. - </para> - - </sect2> - <sect2> - <title>Retrieving Enumeration Values</title> - <para> - Enumeration/token values are device independend, but tokens - defined for extensions might not be present for a given device. - Using a NULL handle is legal, but only the tokens defined by - the AL core are guaranteed. Availability of extension tokens - dependends on the ALC extension. - <funcsynopsis><funcprototype> - <funcdef> &uint; <function> alcGetEnumValue </function></funcdef> - <paramdef> const &device; * <parameter>deviceHandle</parameter></paramdef> - <paramdef> const &ubyte; <parameter> enumName </parameter></paramdef> - </funcprototype></funcsynopsis> - Specifying a NULL name parameter will cause an - ALC_INVALID_VALUE error. - </para> - </sect2> - - <sect2> - <title>Query for Error Conditions</title> - <para> - ALC uses the same conventions and mechanisms as AL for error - handling. In particular, ALC does not use conventions - derived from X11 (GLX) or Windows (WGL). - The alcGetError function can be used to query ALC errors. - <funcsynopsis><funcprototype> - <funcdef>&enum;<function>alcGetError</function></funcdef> - <paramdef> &device; * <parameter>deviceHandle</parameter></paramdef> - </funcprototype></funcsynopsis> - Error conditions are specific to the device. - </para> - - <para> - <table> - <title>Error Conditions</title> - <tgroup cols="2" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>Name</> - <entry>Description</> - </row> - </thead> - <tbody> - <row> - <entry>ALC_NO_ERROR</> - <entry>The device handle or specifier does name an accessible driver/server.</> - </row> - <row> - <entry>ALC_INVALID_DEVICE</> - <entry>The Context argument does not name a valid context.</> - </row> - <row> - <entry>ALC_INVALID_CONTEXT</> - <entry>The Context argument does not name a valid context.</> - </row> - <row> - <entry>ALC_INVALID_ENUM</> - <entry>A token used is not valid, or not applicable.</> - </row> - <row> - <entry>ALC_INVALID_VALUE</> - <entry>An value (e.g. attribute) is not valid, or not applicable.</> - </row> - </tbody> - </tgroup> - </table> - </para> - - - <![ %Annote [ - <note><title>Annotation (No UNDERFLOW error)</title><para> - Applications using synchronous (and, depending on CPU - load, even an asynchronous implementation itself) might - fail to prevent underflow of the rendering output - buffer. No ALC error is generated in these cases, - as it this error condition can not be applied to a - specific command. - </para></note> - ]]> - </sect2> - - <sect2> - <title>String Query</title> - <para> - The application can obtain certain strings from ALC. - <funcsynopsis><funcprototype> - <funcdef>const &ubyte; * <function>alcGetString</function></funcdef> - <paramdef> &device; * <parameter>deviceHandle</parameter></paramdef> - <paramdef> &enum; <parameter> token </parameter></paramdef> - </funcprototype></funcsynopsis> - For some tokens, NULL is is a legal value for the deviceHandle. - In other cases, specifying a NULL device will generate an - ALC_INVALID_DEVICE error. - </para> - <para> - <table> - <title>String Query Tokens</title> - <tgroup cols="2" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>Name</> - <entry>Description</> - </row> - </thead> - <tbody> - <row> - <entry>ALC_DEFAULT_DEVICE_SPECIFIER</> - <entry>The specifier string for the default device (NULL handle is legal).</> - </row> - <row> - <entry>ALC_DEVICE_SPECIFIER</> - <entry>The specifier string for the device (NULL handle is not legal).</> - </row> - <row> - <entry>ALC_EXTENSIONS</> - <entry>The extensions string for diagnostics and printing.</> - </row> - </tbody> - </tgroup> - </table> - </para> - - <para> - In addition, printable error message strings are provided for - all valid error tokens, including ALC_NO_ERROR, ALC_INVALID_DEVICE, - ALC_INVALID_CONTEXT, ALC_INVALID_ENUM, ALC_INVALID_VALUE. - </para> - </sect2> - - <sect2> - <title>Integer Query</title> - <para> - The application can query ALC for information using an integer - query function. - <funcsynopsis><funcprototype> - <funcdef> &void; <function>alcGetIntegerv</function></funcdef> - <paramdef> &device; * <parameter>deviceHandle</parameter></paramdef> - <paramdef> &enum; <parameter> token </parameter></paramdef> - <paramdef> &sizei; <parameter> size </parameter></paramdef> - <paramdef> ∫ <parameter> dest </parameter></paramdef> - </funcprototype></funcsynopsis> - For some tokens, NULL is a legal deviceHandle. In other - cases, specifying a NULL device will generate an ALC_INVALID_DEVICE - error. The application - has to specify the size of the destination buffer provided. - A NULL destination or a zero size parameter will cause ALC to ignore - the query. - </para> - - <para> - <table> - <title>Integer Query Tokens</title> - <tgroup cols="2" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>Name</> - <entry>Description</> - </row> - </thead> - <tbody> - <row> - <entry>ALC_MAJOR_VERSION</> - <entry>Major version query.</> - </row> - <row> - <entry>ALC_MINOR_VERSION</> - <entry>Minor version query.</> - </row> - <row> - <entry>ALC_ATTRIBUTES_SIZE</> - <entry>The size required for the zero-terminated attributes - list, for the current context. NULL is an invalid - device. NULL (no current context for the - specified device) is legal.</> - </row> - <row> - <entry>ALC_ALL_ATTRIBUTES</> - <entry>Expects a destination of ALC_CURRENT_ATTRIBUTES_SIZE, - and provides the attribute list for the current - context of the specified device. NULL is an invalid - device. NULL (no current context for the - specified device) will return the default attributes - defined by the specified device.</> - </row> - </tbody> - </tgroup> - </table> - </para> - - <![ %Annote [ - <note><title>Annotation (Backward Compatibility)</title><para> - Backward compatibility is guaranteed only for minor revisions. - Breaking ABI backwards compatibility will require a issuing - major revision. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk001026-02"><title>RFC / Version Matching </title><para> - The ALC version can be different from the AL version. - The ALC major version has to be identical between - application and driver (client and server). - The ALC minor version can differ between client and server, - and the minimum of the two minor version numbers is returned. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk001027-03"><title>RFC / Device Enumeration </title><para> - ALC_NUM_DEVICE_SPECIFIERS could be provided as an extension, - but it requires the number of device configurations to be - finite and small, as they are to be represented by strings. - </para></note> - ]]> - - </sect2> - </sect1> - - - - <sect1> - <title>Shared Objects</title> - <para> - For efficiency reasons, certain AL objects are shared across - ALC contexts. At this time, AL buffers are the only shared - objects. - </para> - - <![ %RFC [ - <note id="rfc-bk001024-01"><title>RFC/ Sharing Sources?</title><para> - Mike Kelly from Dynamix describes an application scenario with - multiple camera views of the same scene (implemented using - several viewports on a single, "split screen", context) - in which he needs multiple listeners (one per view) to - preceive the same sources, with the rendering results of - each listener to mixed for a single output device. As an - alternative to permitting multiple listeners within a context, - it might be preferable to introduce a mechanism to explicitely - share certain AL objects among contexts, at a later time. - It is not desirable to share Sources by default, especially - as the more common multi-listener application is expected to - maintain listeners with disjunct sets of sources. - </para></note> - ]]> - <sect2> - <title>Shared Buffers</title> - <para> - Buffers are shared among contexts. The processing state of a buffer - is determined by the dependencies imposed by all contexts, not just - the current context. This includes suspended contexts as well as - contexts that are processing. - </para> - </sect2> - </sect1> - - - </chapter> diff --git a/neo/openal/docs/api-reference.html b/neo/openal/docs/api-reference.html deleted file mode 100644 index 37607702..00000000 --- a/neo/openal/docs/api-reference.html +++ /dev/null @@ -1,15 +0,0 @@ -<html> - -<head> -<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252"> -<title>OpenAL API Reference</title> -</head> - -<body> -<h1>OpenAL API Reference</h1> - <p> - This document has been removed. - </p> - - </body> -</html> diff --git a/neo/openal/docs/app-annotations.sgml b/neo/openal/docs/app-annotations.sgml deleted file mode 100644 index 6eabf4b5..00000000 --- a/neo/openal/docs/app-annotations.sgml +++ /dev/null @@ -1,297 +0,0 @@ - - <appendix> - <title>Miscellaneous Annotations</title> - - <section id="reverb-objects"> - <title>Reverberation Objects?</title> - <para> - In a generalization of the I3DL2 Extension for - listener specific reverberation effects, it might - be best to implement Reverb Objects. A Reverb Object - is one example of a parametrized filter. Each - such object encapsulates a set of attributes (the - filter parameters). Sources and Listener alike - have an attribute that allows the application coder - to choose a reverb object for application either - at the origin of the sound, or at the position of - the listener. Initial implementation would only - support one Reverb Object per Context, applied at - the listener position. - </para> - <para> - The I3DL2 Environment is a filter that alters the - way the user experiences the virtual world. As - filters require DSP operations it is limited by hardware - processing capabilities. - </para> - <para> - The I3DL2 Environment models the surroundings of the - listener by simplifying the presumed acoustic properties - of those surroundings into a small set of parameters. - It allows to reproduce the effects of sound reflections - and reverberation caused by walls and obstacles, and - the muffling effects of obstacles inside environments - or partitions between environments. - </para> - <para> - Environment properties: - Early reflections level and delay. - Late reverberation level and delay, low- and high-frequency decay time. - Reverberation diffusion, density and spectrum. - </para> - <para> - Source properties: - Direct path intensity and spectrum. - Reverberation intensity and spectrum. - </para> - </section> - - <section id="al-objects-filters"> - <title>On Filters</title> - <para> - RFC/bk000502: Filters as the general concept of modifiers? - Environment as a special case filter? - Can we break down EAX environments into ReverbFilters where we - parametrize late reflections, and ReflectFilters, which fake - early reflections? Do we need this separation if we have - calculated or distinct echo effect reflections instead of - stocastic ones? Does it make sense to superimpose a general - reverb kicking in after a delay t, with reflections (random - or not) or should reverb only kick in after reflections are - discarded? - </para> - <para> - RFC/bk000502: old text. - (Environment) Properties: - Geometry - geometry is specified using an immediate mode API which is - similar to OpenGL. Support for scene lists are also provided on a basis - similar to OpenGL's display lists. - Materials - specify the absorptive and reflective qualities of a piece - of geometry. &AL; should provide a facility for accessing preset - materials, and storing and retrieving new materials at runtime. - </para> - <para> - RFC/nn: Atmospheric/ambient properties? - REF/nn: A3D 2.0 IA3dMaterial - </para> - - <section id="al-objects-filters-atmospheric"> - <title>Atmospheric Filter</title> - <para> - The atmospheric filter the effects of media with constant density, - on propagating sound waves. The effect of the atmospheric filter - is distance dependent. Atmospheric effects can be parameterized - by specifying attenuation per unit distance, the scale for the - unit distance, for one of a minimum of two frequency ranges - (low frequency and high frequency roll-off). - </para> - <para> - RFC/bk000502: do we specify the atmospheric filter per-source? - The effect is clearly dominated by the most dense medium, but - we have little chance simulating crossings between different - media this way. Distance attenuation in media clearly depends - on source and listener being embedded in the same medium, - without any obstruction along the LOS. - </para> - </section> - - <section id="al-objects-filters-listenerreverb"> - <title>Listener Reverb</title> - <para> - Listener Reverb is a parameterized filter that modifies the sound at - listener position to emulate effects of the surroundings, namely - effects of late reflections. Without simulating sound propagation - this reverb accounts for the averaged outcome of different arrangements - of reflecting/absorbing surfaces around the listener. - </para> - </section> - - <section id="al-objects-filters-sourcereverb"> - <title>Source Reverb</title> - <para> - There is currently no support for reverb at the source position. - </para> - </section> - - <section id="al-objects-filters-reflection"> - <title>Reflection Filter</title> - <para> - First order reflection (and, if support, O(n) reflection for small n) - can choose to simulate the effects of different materials by - parametrizing reflection filters. - There is currently no support for reflections. - </para> - </section> - - <section id="al-objects-filters-transmission"> - <title>Transmission Filter</title> - <para> - Sound propagation along the LOS can pass through obstructions - specified as convex polygons. The effects of lossy transmission - can be approximated by applying a once-off filtering. Like - atmospheric filters, this can be a frequency-dependent roll-off, - unlike atmospheric filters this does not take distance into - account. Transmission filters can be used to emulate losses - on crossing separating surfaces between different media (water/air - borders). - There is currently no support for transmissions. - </para> - </section> - </section> - - <section> - <title>Parameterization over Time</title> - <para> - Fading and cross-fading. There are three ways to handle any kind - of gain control as a function of time: - <itemizedlist> - <listitem> - <para> - manipulate gain per frame/sufficiently often - </para> - </listitem> - <listitem> - <para> - parameterize, i.e. specify a target gain, - a duration over which to interpolate, and an interpolation function - </para> - </listitem> - <listitem> - <para> - provide an buffer that indicates amplitude, stretched over - a duration/by a frequency - </para> - </listitem> - The last mechanism also works for early reflections and echos, - and any other temporal filtering. The first and second approach - also work for attributes like Pitch. - </para> - </section> - - - <section> - <title>On Geometry</title> - <para> - Both the A3D API and implementation as well as EAX related utilities - like EAGLE seem to indicate that any effort to handle scene geoemtry - at API level will inevitably duplicate modules found in common game - engines for purposes of collision detection, path planning, AI - support, visibility and sound propagation culling. - </para> - <para> - In other words, any such effort will inevitably lead to competing - subsystems and multiple use of processing and memory resources to - implement the same functionality. While it makes sense to provide - templates, examples, and even utilities like EAGLE and SDK's to - developers, it makes no sense to integrate any such functionality - with the API. - </para> - <para> - The geometry based processing inevitably leads to a scene graph - API, with all the resulting problems. On closer examination it - seems that the specification and storage of source and listener - positions is a red herring. - </para> - <para> - Second and higher order reflections seem to be irrelevant. - </para> - <para> - Reflection can be faked by stochastic means, but an actual - presence/immersion effect will require smooth transitions - depending on the continuous change of distance between - sources, listener, and dominant reflectors. - </para> - <para> - Dominant reflectors are presumed to be 1st order, - with material properties that incur little or no loss - (or even provide amplification), and significant - surface area. - </para> - <para> - Transmission loss through dense media is equivalent to - the distance attenuation model. - </para> - <para> - Refraction/reflection loss at border surfaces separating - media.... - </para> - <para> - No explicit geometry to check whether there is any indirect - (1st order reflection, multiple reflections) path between - source and listener - the application is usually better - equipped to handle this (portal states, PHS). The benefit - of forcing the AL implementation to check for obstruction - (object inersecting LOS) is questionable at best - LOS - checking is also better done by the main application. - In essence, the application might even handle the 1st - order reflections IFF we provide the means to generate - early reflection instead of rolling dice, and if we - make it cheap to enable a path between a source and - the listener complete with a material. Come to think of - it: the implementation guarantees n paths with m filters - one of which is transmission or reflection, one is - distance attenuation, one is source reverb, one is - listener reverb.... - </para> - </section> - - <section> - <title>No ALU</title> - <note id="bk000019-01"><title>RFC</title><para> - ALU, like GLU, is a problem: linkage dependencies, multiple drivers - sharing one ALU etc. It would be best to not clutter the specification - with ALU/ALUT. Any support code/template repository/SDK can be - maintained as a separate open source project. - </para></note> - <para> - ALU provides operations that do not affect driver or hardware state. - These can be resampling/conversion methods or other sample data - processing, or utilities for (optimized) filter generation. ALU - does not provide I/O operations. At this time, - ALU is not specified and not implemented. - </para> - <para> - RFC/bk000502: GLU is becoming a bit of a problem right now, with - most applications avoiding it as they load GL DLL's explicitely, - but do not trust the ABI specification enough to link against GLU, - and not bothering to load it. A vendor-neutral open source ALU - works for me, but we can not accept link time dependencies to AL. - ALU (like GLU) is meant for minimal convenience, in small - building blocks, it is not meant as an SDK. - </para> - <para> - RFC/bk000502: old text. - ALU is the AL Utility library, and provide functions for performing audio - conversion, preset material properties, and a compatability layer for - legacy stereo format audio. This includes support for panning and per - channel volume control. - </para> - <para> - RFC/nn: Er, what else does the world of 2D sound usually need? - </para> - </section> - - - <section> - <title>No ALUT</title> - <para> - Application coders frequently request additional support for sound - handling to the extent of sophisticated SDKs. It is expected that - SDK vendors will provide such products on top of AL. ALUT (in analogy - to GLUT) would constitute an "official" SDK if desired. At this time, - ALUT is not specified and not implemented, and not intended to be part - of &AL; proper. - </para> - <para> - ALUT is a utility toolkit for &AL;. It sits on top of ALC. - It provides convenience functions for accessing files, for playing sounds, - and an API for accessing CDROM functionality. - </para> - </section> - -<!-- Driver DDK section -http://www.microsoft.com/directx/ -http://www.microsoft.com/DDK/DDKdocs/win98ddk/ds-ddk_8eas.htm - --> - - </appendix> \ No newline at end of file diff --git a/neo/openal/docs/app-constants.sgml b/neo/openal/docs/app-constants.sgml deleted file mode 100644 index 8c852e20..00000000 --- a/neo/openal/docs/app-constants.sgml +++ /dev/null @@ -1,43 +0,0 @@ - - <appendix> - <title>Global Constants</title> - <para> - <table> - <title>Misc. &AL; Global Constants</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>Name </> - <entry>&OAL; datatype </> - <entry>Description </> - <entry>Literal value </> - </row> - </thead> - <tbody> - <row> - <entry> ALenum </entry> - <entry> FALSE </entry> - <entry> boolean false </entry> - <entry> 0 </entry> - </row> - <row> - <entry> ALenum </entry> - <entry> TRUE </entry> - <entry> boolean true </entry> - <entry> 1 </entry> - </row> - </tbody> - </tgroup> - </table> - </para> - - - <![ %RFC [ - <note id="bk000621-01"><title>RFC</title><para> - NONE, ONE, ZERO needed? - </para></note> - ]]> - </appendix> - diff --git a/neo/openal/docs/app-extensionprocess.sgml b/neo/openal/docs/app-extensionprocess.sgml deleted file mode 100644 index 778c0912..00000000 --- a/neo/openal/docs/app-extensionprocess.sgml +++ /dev/null @@ -1,36 +0,0 @@ - - <appendix> - <title>Extension Process</title> - <para> - There are two ways to suggest an Extension to AL or ALC. - The simplest way is to write an ASCII text that matches - the following template: - - <literallayout> - - RFC: rfc-iiyymmdd-nn - Name: (indicating the purpose/feature) - Maintainer: (name and spam-secured e-mail) - Date: (last revision) - Revision: (last revision) - - new enums - new functions - - description of operation - - </literallayout> - - Such an RFC can be submitted on the &AL; discussion - list (please use RFC in the Subject line), or send to the - maintainer of the &AL; specification. If you are shipping - an actual implementation as a patch or as part of the - &AL; CVS a formal writeup is recommend. In this case, - the Extension has to be described as part of the - specification, which is maintained in DocBook SGML - (available for UNIX, Linux and Win32). The SGML source of - the specification is available by CVS, and the Appendix - on Extensions can be used as a template. Contact the - maintainer for details. - </para> - </appendix> diff --git a/neo/openal/docs/app-extensions.sgml b/neo/openal/docs/app-extensions.sgml deleted file mode 100644 index 1f4b3b92..00000000 --- a/neo/openal/docs/app-extensions.sgml +++ /dev/null @@ -1,754 +0,0 @@ - - <appendix> - <title>Extensions</title> - <para> - Extensions are a way to provide for future expansion of the &AL; API. - Typically, extensions are specified and proposed by a vendor, and - can be treated as vendor neutral if no intellectual property - restrictions apply. Extensions can also be specified as, or - promoted to be, ARB extensions, which is usually the final step - before adding a tried and true extension to the core API. ARB - extensions, once specified, have mandatory presence for - backwards compatibility. The handling of vendors-specific or - multi-vendor extensions is left to the implementation. The IA-SIG - I3DL2 Extension is an example of multi-vender extensions to - the current &AL; core API. - </para> - - <sect1> - <title>Extension Query</title> - <para> - To use an extension, the application will have to obtain function addresses - and enumeration values. Before an extension can be used, the application will - have to verify - the presence of an extension using IsExtensionPresent(). The application - can then retrieve the address (function pointer) of an extension entry - point using GetProcAddress. Extensions and entry points can be - Context-specific, and the application can not count on an Extension being available - based on the mere return of an entry point. The application also - has to maintain pointers on a per-Context basis. - - <funcsynopsis> - <funcprototype> - <funcdef> &bool; <function>IsExtensionPresent</function></funcdef> - <paramdef> const &ubyte; * <parameter>extName</parameter></paramdef> - </funcprototype> - </funcsynopsis> - - Returns TRUE if the given extension is supported for the current - context, FALSE otherwise. - </para> - - <![ %Annote [ - <note id="ann-bk000721-22"><title>Annotation (IsExtensionPresent)</title><para> - This function is inspired by the GLU addition, but placed in - the core API as we intend to avoid a separate ALU. This function - avoids potential string overflow and string parsing issues (strstr) - raised by GetString( EXTENSIONS ). - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation/ EXTENSIONS</title><para> - GetString( EXTENSIONS ) is supported as well, as it allows for - easy archiving and priting of the list of supported extensions. - </para></note> - ]]> - </sect1> - - <sect1> - <title>Retrieving Function Entry Addresses</title> - <para> - <funcsynopsis><funcprototype> - <funcdef> &void;* <function>GetProcAddress</function></funcdef> - <paramdef> const &ubyte; * <parameter>funcName</parameter></paramdef> - </funcprototype></funcsynopsis> - Returns NULL if no entry point with the name funcName can be found. - Implementations are free to return NULL if an entry point is present, - but not applicable for the current context. However the specification - does not guarantee this behavior. - </para> - <para> - Applications can use GetProcAddress to obtain core API entry points, - not just extensions. This is the recommended way to dynamically load - and unload &AL; DLL's as sound drivers. - </para> - - <![ %RFC [ - <note><title>RFC/bk000504:</title><para> - Original spec required all addresses are Context independent. - This matches the Linux &OGL; ABI specification, but imposes - additional implementation constraints. For now, the specification - does not guarantee this. - </para></note> - ]]> - </sect1> - - - <sect1> - <title>Retrieving Enumeration Values</title> - <para> - To obtain enumeration values for extensions, the application has - to use GetEnumValue of an extension token. Enumeration values are - defined within the &AL; namespace and allocated according to - specification of the core API and the extensions, thus they are - context-independent. - <funcsynopsis><funcprototype> - <funcdef> &uint; <function> GetEnumValue </function></funcdef> - <paramdef> const &ubyte;<parameter> enumName </parameter></paramdef> - </funcprototype></funcsynopsis> - Returns 0 if the enumeration can not be found. The presence of an - enum value does not guarantee the applicability of an extension - to the current context. A non-zero return indicates merely that - the implementation is aware of the existence of this extension. - Implementations should not attempt to return 0 to indicate that - the extensions is not supported for the current context. - </para> - - <![ %Annote [ - <note><title>Annotation/ enums with value zero</title><para> - The literal value 0 is guaranteed for a number of AL - enums, such as FALSE, NONE, ZERO. As with GL applications - might employ sloppy use of this identity. It also means - that enums with zero value can not be queried through - GetEnumValue, a minor flaw given the constraints of - ABI backward compatibility. The recommended value to - compare GetEnumValue results with is NONE. - </para></note> - ]]> - </sect1> - - <sect1> - <title>Naming Conventions</title> - <para> - Extensions are required to use a postfix that separates the - extension namespace from the core API's namespace. - For example, an ARB-approved extension would use - "_ARB" with tokens (ALenum), and "ARB" with commands (function - names). A vendor specific extension uses a vendor-chosen - postfix, e.g. Loki Extensions use "_LOKI" and "LOKI", - respectively. - </para> - </sect1> - - <sect1> - <title>ARB Extensions</title> - <para> - There are no ARB Extensions defined yet, as the ARB has - yet to be installed. - </para> - </sect1> - - - <![ %Ext1 [ - <sect1> - <title>Other Extension</title> - <para> - For the time being this section - will list externally proposed extensions, namely - the extension based on the IASIG Level 2 guideline. - </para> - - - - <sect2> - - <title>IA-SIG I3DL2 Extension</title> - - <para> - The IA-SIG I3DL2 guideline defines a set of parameters to control - the reverberation characteristics of the environment the listener - is located in, as well as filtering or muffling effects applied to - individual Sources (useful for simulating the effects of obstacles - and partitions). These features are supported by a vendor neutral - extension to &AL; (TBA). - The - <ulink - url="http://www.iasig.org/wg/3dwg/3dwg.htm" - type="http">IA-SIG 3D Level 2 rendering guideline</ulink> - provides related information. - </para> - - <![ %Scratch [ - <![ %RFC [ - <note id="rfc-bk000626-07"><title>RFC: Global Attributes</title><para> - Do we need global setters for these: - DIRECT_IASIG/DIRECT_HIGH_FREQUENCY_IASIG? - ROOM_IASIG/ROOM_HIGH_FREQUENCY_IASIG? - </para></note> - ]]> - - - <sect3> - <title>Listener Environment Attributes</title> - <para> - - - - <table> - <title>ENV_ROOM Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_ROOM_EXT</> - <entry>f</> - <entry>[0.0, 1.0]</> - <entry> 1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - </para> - - - <para> - <table> - <title>ENV_ROOM_HIGH_FREQUENCY Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_ROOM_HIGH_FREQUENCY_EXT</> - <entry>f</> - <entry>[0.0, 1.0]</> - <entry> 0.1f ???</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - </para> - - - <para> - <table> - <title>ENV_DECAY_TIME Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_DECAY_TIME_EXT</> - <entry>f</> - <entry>[0.1, 20.0]</> - <entry> 1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>NV_DECAY_HIGH_FREQUENCY_RATIO Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_DECAY_HIGH_FREQUENCY_RATIO_EXT</> - <entry>f</> - <entry>[0.1, 2.0]</> - <entry> 0.5f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_REFLECTIONS Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_REFLECTIONS_EXT</> - <entry>f</> - <entry>[0.1, 3.0]</> - <entry> 1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_REFLECTIONS_DELAY Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_REFLECTIONS_DELAY_EXT</> - <entry>f</> - <entry>[0.0, 0.3]</> - <entry> 0.02f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_REVERB Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_REVERB_EXT</> - <entry>f</> - <entry>[0.0, 10.0]</> - <entry> 1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_REVERB_DELAY Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_REVERB_DELAY_EXT</> - <entry>f</> - <entry>[0.0, 0.1]</> - <entry> 0.04f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_DIFFUSION Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_DIFFUSION_EXT</> - <entry>f</> - <entry>[0.0, 100.0]</> - <entry> 100.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_DENSITY Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_DENSITY_EXT</> - <entry>f</> - <entry>[0.0, 100.0]</> - <entry> 100.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - - - <para> - <table> - <title>ENV_HIGH_FREQUENCY_REFERENCE Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ENV_HIGH_FREQUENCY_REFERENCE_EXT</> - <entry>f</> - <entry>[20.0, 20000.0]</> - <entry>5000.0</> - </row> - </tbody> - </tgroup> - </table> - Description: ??? - What's up with the defaults? Not a normalized range - and a global Scale to set? - </para> - </sect3> - <sect3> - <title>Source Environment Attributes</title> - <para> - TBA. - </para> - </sect3> - ]]> - </sect2> - </sect1> - ]]> <!-- Environment --> - - - - <![ %Ext2 [ - - <sect1> - <title>Compatibility Extensions</title> - <para> - The extensions described have at one point been in use for - experimental purposes, proof of concept, or short term needs. - They are preserved for backwards compatibility. Use is not - recommended, avialability not guaranteed. Most of these will - be officially dropped by the time API revision 2.0 is released. - </para> - - - <sect2> - <title>Loki Buffer InternalFormat Extension</title> - <para> - &AL; currently does not provide a separate processing - chain for multichannel data. To handle stereo samples, - the following alternative entry point to BufferData - has been defined. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> BufferWriteData</function></funcdef> - <paramdef> &uint; <parameter>bufferName</parameter></paramdef> - <paramdef> &enum; <parameter>format</parameter></paramdef> - <paramdef> &void;* <parameter> data </parameter></paramdef> - <paramdef> &sizei; <parameter> size </parameter></paramdef> - <paramdef> &uint; <parameter>frequency</parameter></paramdef> - <paramdef> &enum; <parameter>internalFormat</parameter></paramdef> - </funcprototype></funcsynopsis> - Valid formats for internalFormat are FORMAT_MONO8, FORMAT_MONO16, - FORMAT_STEREO8, and FORMAT_STEREO16. - </para> - </sect2> - - <sect2> - <title>Loki BufferAppendData Extension</title> - <para> - Experimental implementation to append data to an existing - buffer. Obsoleted by Buffer Queueing. TBA. - </para> - <![ %Annote [ - <note><title>Annotation (GenStreamingBuffers):</title><para> - It is possible that a consistent implementation of this - extension will require distinguishing streaming from - regular buffers at creation time, instead of making - this distinction implied by the use of BufferData vs. - BufferAppendData. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk0000507-09"><title>RFC: alBufferAppendData</title><para> - Specify data to be filled into a streaming buffer. - This takes the current position at the time of the - call, and returns the number of samples written. - ALsizei ALAPIENTRY alBufferAppendData( ALuint buffer, - ALenum format, - ALvoid* data, - ALsizei size, - ALuint freq ); - - - - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-briareaos0006XX-01"><title>RFC: GenStreamingBuffers</title><para> - Currently there is a function call on the Linux side, - alGenStreamingBuffers(), which generates a Buffer intended - for streaming. The intent of this function was the provide - a clear creation point for streaming buffers, rather than - the previous behaviour of a Buffer "magically" becoming - streaming Buffer the first time BufferAppendData() was - called on it. However, it's hard to believe this anomaly - in the API can be any better. What about - DelStreamingBuffers()? IsStreamingBuffer()? - </para><para> - The design problem here is that we handle qualitatively different - objects using the same API. Streaming and non-streaming buffers - are fundamentally different. If we create an API that makes it - easy to mistake one for the other, or worse, if we decide to - quietly convert one type of object into another in some cases, - we create a plethora of error cases for the implementation and - the app coder to catch. Separating the Factory methods for the - objects allows us to omit an specialization API that will - accidentally be called more than once, and saves us handling - different stages of "initialization state". AL should not have - any notion of "partially initialized" or "incomplete" objects: - misery and despair lie down that road. If necessary the entire - API should be duplicated (after all, nobody handles 1D, 2D, and - 3D textures using the same GL API hooks), but as the AL - implementation has the ability to distinguish streaming and - non-streamin buffers internally there might not be a need. - Unless a concrete alternative is proposed to resolve the "anomaly" - it will be the preferred method to avoid an API that is - leaner at the expense of being more error-prone. - </para></note> - ]]> - </sect2> - - - - - <sect2> - <title>Loki Decoding Callback Extension</title> - <para> - Experimental implementation to allow the application to - specify a decoding callback for compression formats - and codecs not supported by &AL;. This is supposed to - be used if full uncompression by the application is prohibited - by memory footprint, but streaming (by queueing) is not - desired as the compressed data can be kept in memory - in its entirety. - </para> - <para> - If mixing can be done from the compressed data directly, - several sources can use the sample without having to - be synchronized. For compression formats not supported - by AL, however, partial decompression has to be done by - the application. This extension allows for the implementation - to "pull" data, using apllication provided decompression - code. - </para> - <para> - The use of this callback by the &AL; - implementation makes sense only if late decompression - (incremerntal, on demand, as needed for mixing) is done, - as full early compression (ahead-of-time) inside the - implementation would exact a similar memory footprint. - </para> - <para> - TBA. - </para> - <para> - This extension forces execution of third party code - during (possibly threaded) driver operation, and - might also require state management with global - variables for decoder state, which raises issues - of thread safety and use for multiple buffers. This - extension should be obsolete as soon as &AL; - supports a reasonable set of state of the art - compression and encoding schemes. - </para> - </sect2> - - - - - <sect2> - <title>Loki Infinite Loop Extension</title> - <para> - To support infinite looping, a boolean LOOP was introduced. - With the introduction of buffer queueing and the request for - support for a limited number of repetitions, this mechanism - was redundant. This extension is not supported for - buffer queue operations, attempts to use it will cause - an ILLEGAL_OPERATION error. For backwards compatibility - it is supported as the equivalent to - <literallayout> - Source( sName, PLAY_COUNT, MAX_INTEGER ) - </literallayout> - For the query LOOP==TRUE, the comparison - PLAY_COUNT!=MAX_INTEGER has to be executed on - the queue, not the current value which is decremented - for a PLAYING Source. - <table> - <title>Source LOOP_LOKI Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <colspec colname=c3> - <colspec colname=c4> - <spanspec spanname=hspan namest=c1 nameend=c4 align=left> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>LOOP_LOKI</> - <entry>b</> - <entry> &TRUE; &FALSE;</> - <entry> &FALSE; </> - </row> - </tbody> - </tgroup> - </table> - Description: - &TRUE; indicates that the Source will perform an inifinite - loop over the content of the current Buffer it refers to. - </para> - </sect2> - - - - <sect2> - <title>Loki Byte Offset Extension</title> - <para> - The following has been obsoleted by explicit Source State query. - hack. - </para> - - <para> - <table> - <title>Buffer BYTE Offset attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>BYTE_LOKI</> - <entry>ui</> - <entry> n/a </> - <entry> n/a </> - </row> - </tbody> - </tgroup> - </table> - Current byte for the buffer bound to the source interpreted - as an offset from the beginning of the buffer. - </para> - - </sect2> - </sect1> - ]]> - - - <![ %Ext2 [ - <sect1> - <title>Loop Point Extension</title> - <para> - - In external file now. - - </para> - </sect1> - ]]> - - </appendix> - diff --git a/neo/openal/docs/architecture.html b/neo/openal/docs/architecture.html deleted file mode 100644 index 78d985bb..00000000 --- a/neo/openal/docs/architecture.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<html> - <head> - <title>OpenAL Architecture</title> - </head> - - <body> - <h1>OpenAL Architecture</h1> - <p> - This document has been removed. - See <a href="index.html">Index</a> - for the specification. - </p> - - </body> -</html> diff --git a/neo/openal/docs/chp-buffers.sgml b/neo/openal/docs/chp-buffers.sgml deleted file mode 100644 index 5a7cdff8..00000000 --- a/neo/openal/docs/chp-buffers.sgml +++ /dev/null @@ -1,691 +0,0 @@ - - - <chapter id="buffers"> - <title>Buffers</title> - <para> - A Buffer encapsulates &AL; state related to storing sample data. The - application can request and - release Buffer objects, and fill them with data. Data can be supplied - compressed and encoded as long as the format is supported. - Buffers can, internally, contain waveform data as uncompressed or - compressed samples. - </para> - <para> - Unlike Sources and Listener, Buffer Objects can be shared among AL contexts. - Buffers are referenced by Sources. - A single Buffer can be referred to by multiple Sources. This separation allows - drivers and hardware to optimize storage and processing where applicable. - </para> - <para> - The simplest supported format for buffer data is PCM. - </para> - - - - <![ %Annote [ - <note id="ann-bk000721-01"><title>Annotation/ Compressed Buffers</title><para> - Compressed formats are in no way guaranteed by the implementation - to remain compressed. The driver might have to uncompres in memory - at once, if no hardware-assisted or incremental decoding is possible. - In many cases an implementation has to decompress the buffer, - converting the uncompressed data to a canonical internal format, - and resample it into the format native to the current context. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000721-18"><title>RFC: Compressed Buffers</title><para> - MikeV suggests: an application can query the amount of memory buffer - is consuming. He suggests using GetBufferi(AL_SIZE, ... ). This seems - a bad idea as (a) the application is not meant to micromanage - driver-internal memory, (b) the memory requirements known to the - application might differ from the actual, (c) there are OS - mechanisms to query free memory, (d) AL_SIZE is now ambiguous as - it announces app-side memory as allocated vs. driver side memory - as used by the driver. For clarity AL_INTERNAL_SIZE (analog to - internal format enums) might be a better choice. - </para></note> - ]]> - - <![ %Scratch [ - <para> - Buffers can be non-streaming (default) or streaming. Non-streaming - buffers are used to store looping and non-looping (single-shot) sound - data. Streaming buffers have to be used to cache streaming - media that the application can not keep in memory for technical - reasons: e.g. data delivered in real time over network. Streaming buffers - can also be used to partially store sound samples that the application - coder consider too large to keep in memory at once. - </para> - ]]> - - - - - <sect1> - <title>Buffer States</title> - <para> - At this time, Buffer states are defined for purposes of discussion. - The states described in this section are not exposed through the API - (can not be queried, or be set directly), and the state description - used in the implementation might differ from this. - </para> - <para> - A Buffer is considered to be in one of the following States, with respect - to all Sources: - <itemizedlist> - <listitem> - <para> - UNUSED: the Buffer is not included in any queue - for any Source. In particular, the - Buffer is neither pending nor current - for any Source. The Buffer name can be - deleted at this time. - </para> - </listitem> - - <listitem> - <para> - PROCESSED: the Buffer is listed in the queue of - at least one Source, but is neither pending - nor current for any Source. The Buffer can - be deleted as soon as it has been unqueued - for all Sources it is queued with. - </para> - </listitem> - <listitem> - <para> - PENDING: there is at least one Source for which the - Buffer has been queued, for which the Buffer - data has not yet been dereferenced. The Buffer - can only be unqueued for those Sources that - have dereferenced the data in the Buffer - in its entirety, and cannot be deleted or - changed. - </para> - </listitem> - </itemizedlist> - The Buffer state is dependent on the state of all Sources - that is has been queued for. - A single queue occurrence of a Buffer propagates the - Buffer state (over all Sources) from UNUSED to PROCESSED - or higher. Sources that are STOPPED or INITIAL still have - queue entries that cause Buffers to be PROCESSED. - </para> - <para> - A single queue entry - with a single Source for which the Buffer is not yet - PROCESSED propagates the buffer's queueing state to - PENDING. - </para> - <para> - Buffers that are PROCESSED for a given Source can be - unqueued from that Source's queue. Buffers that have - been unqueued from all Sources are UNUSED. - Buffers that are UNUSED can be deleted, or changed by - BufferData commands. - </para> - - <![ %Annote [ - <note><title>Annotation (No CURRENT State)</title><para> - For buffer queueing, it is not relevant whether - the Buffer data is currently dereferenced by any - Source or not. It is therefore not necessary to - distinguish a CURRENT state (being referenced as - current buffer by a single PLAYING or PAUSED Source). - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (State Query and Shared Buffers)</title><para> - A buffer that is unused by one Source might be used - by another. The Unqueue operation is determined by - the number of queue entries already processed by the - given Source. - However, the application has to check whether the - Buffer is still in use by other Sources. For now, - applications have to maintain their own lists of - buffer consumer (source) lists. If necessary, an - explicit call to determine current buffer state - with respect to all Sources might be added in - future revisions. - </para></note> - ]]> - <![ %RFC [ - <note id="rfc-bk000927-02"><title>RFC: IsBufferProcessed? </title><para> - Instead of exposing the internal state, a simple boolean query - whether a buffer can be deleted or refilled can be used. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000731-04"><title>RFC: BufferData on QUEUED</title><para> - The error on using BufferData in QUEUED buffers is introduced - because the implementation might not be able to guarantee when - the Buffer is dereferenced. Applications have to account for the - possibility that the Buffer is dereferenced at the latest possible - moment, e.g. when it becomes CURRENT. As it is easier to relax - this restricition at a later time (no effect on backwards - compatibility) than doing the reverse, we are conserative here. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000731-05"><title>RFC: Buffer State Query</title><para> - Buffer State could be queried using alBuffer(), but it can't be - set. Prohibiting deferred deletion of buffers would make such a - state query desirable. - </para></note> - ]]> - </sect1> - - - <sect1> - <title>Managing Buffer Names</title> - <para> - &AL; provides calls to obtain Buffer names, to request - deletion of a Buffer object associated with a valid Buffer name, - and to validate a Buffer name. Calls to control Buffer attributes - are also provided. - </para> - - <sect2> - <title>Requesting Buffers Names</title> - <para> - The application requests a number of Buffers using GenBuffers. - <funcsynopsis><funcprototype> - <funcdef> void <function> GenBuffers </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> bufferNames </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - - <![ %RFC [ - <note id="rfc-bk000803-02"><title>RFC: Buffer Name 0</title><para> - NONE or 0 is a reserved buffer name. What properties does - this buffer have? Does it have content? If there is no content, - what is its duration? 0? 1 microsecond? Should we use this buffer - to schedule a limited duration "silence"? - </para></note> - ]]> - </sect2> - - <sect2> - <title>Releasing Buffer Names</title> - <para> - The application requests deletion of a number of Buffers - by calling DeleteBuffers. - </para> - <para> - Once deleted, Names are no longer valid for use with AL - function calls. Any such use will cause an INVALID_NAME - error. The implementation is free to defer actual - release of resources. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> DeleteBuffers </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> bufferNames </parameter></paramdef> - </funcprototype></funcsynopsis> - IsBuffer(bname) can be used to verify deletion of a buffer. - Deleting bufferName 0 is a legal NOP in both scalar and - vector forms of the command. The same is true for unused - buffer names, e.g. such as not allocated yet, or as - released already. - </para> - - <![ %RFC [ - <note id="rfc-bk000803-01"><title>RFC: Force Deletion</title><para> - If a buffer name is deleted, we could replace all occurences - in queues with bname 0. This is the GL behavior for deleting - the texture currently bound. - </para></note> - ]]> - <![ %RFC [ - <note id="rfc-bk000731-07"><title>RFC: Relasing used Buffers</title><para> - If a Buffer is USED or QUEUED, it cannot be deleted, and the operation - should fail. We have three possible responses: throw an error, deferr - deletion, or force deletion by replacing every use - of the buffer in question with bname zero. - Throwing an error requires that we lock, verify that all specified - buffers can be deleted, then perform deletion, then unlock. If there - is one buffer that can not be deleted we have to throw an error and - make the entire operation a NOP. - Deferred deletion has its own set of problems (see other RFC). - Forcing deletion makes the mistake obvious to the application - for current buffers (sound artifacts) but still doesn't expose - errors for queued buffers. It also requires complete consumer - book-keeping for each buffer. GL uses this approach for textures - at little expense because it only has one current texture. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000731-06"><title>RFC: Deferred Buffer Release</title><para> - Buffer deletion could be performed as a deferred operation. - In this case actual deletion would be deferred until a Buffer is - unused, i.e. not QUEUED or CURRENT anymore. The specification - would not guarantee that they are deleted as soon as possible. - - However, such a deferred execution would be muddying the borders - between immediate and deferred execution in general (as we - might want to add scheduling and deferred commands at a later time). - Introduced as the default it makes impossible for the application - to force deletion or errors. Errors caused by improper use of - &AL; will be triggered at some distance from the original mistaken - command. Debugging such conditions is usually expensive. This approach - also does not take into account sharing of buffers among contexts. - - It might be possible to introduce this behavior as a Hint() - in case that it is not desirable to explicitely introduce - deferred commands. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000927-03"><title>RFC: sourceName 0 </title><para> - Is there a useful application for this? Do we mark that this - is reserved? - </para></note> - ]]> - </sect2> - - <sect2> - <title>Validating a Buffer Name</title> - <para> - The application can verify whether a buffer Name is valid - using the IsBuffer query. - <funcsynopsis><funcprototype> - <funcdef> &bool; <function> IsBuffer </function></funcdef> - <paramdef> &uint; <parameter> bufferName</parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - </sect1> - - - <sect1> - <title>Manipulating Buffer Attributes</title> - - <sect2> - <title>Buffer Attributes</title> - <para> - This section lists the attributes that can be set, or - queried, per Buffer. Note that some of these attributes - can not be set using the Buffer commands, but are set - using commands like BufferData. - </para> - <para> - Querying the attributes of a Buffer with a buffer name that - is not valid throws an INVALID_OPERATION. Passing in an - attribute name that is invalid throws an INVALID_VALUE error. - </para> - - <para> - <table> - <title>Buffer FREQUENCY Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> FREQUENCY </> - <entry> float </> - <entry> none </> - <entry> (0, any]</> - </row> - </tbody> - </tgroup> - </table> - Description: Frequency, specified in samples per second, - i.e. units of Hertz [Hz]. - Query by GetBuffer. The frequency state of a buffer is set by - BufferData calls. - </para> - - <![ %Annote [ - <note><title>Annotation (No Frequency enumeration)</title><para> - As the implementation has to support conversion from - one frequency to another to implement pitch, it is - feasible to offer support for arbitrary sample - frequencies, instead of restricting the application - to an enumeration of supported sample frequencies. - Another reason not to limit frequency to an enumerated - set is that future hardware might support variable - frequencies as well (it might be preferable to choose - the sampling frequency according to the PSD of the - signal then). - </para><para> - However, it is desirable to avoid conversions due - to differences between the sample frequency used in - the original data, the frequency supported during the - mixing, and the frequency expected by the output device. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Implied Frequency)</title><para> - To account for the possibility of future AL implementations - supporting encoding formats for the application might - not want, or be able, to retrieve the actual frequency - from the encoded sample, the specification will be - amended to guarantee the following behavior: If a nonzero - frequency is specified, it will force a conversion from - the actual to the requested frequency. If the application - specifies a 0 frequency, AL will use the actual frequency. - If there is no frequency information implied by the format - or contained in the encoded data, specifying a 0 frequency - will yield INVALID_VALUE. It is recommended that applications - use NONE instead of the literal value. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000806-01"><title>RFC: BITS not needed </title><para> - This is not a setter. As a state query it doesn't provide useful - information about the internal canonical format (which could be - queried independent of the buffer). - </para></note> - <para> - <table> - <title>Buffer BITS Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>BITS</> - <entry>ui</> - <entry>8,16</> - <entry>0</> - </row> - </tbody> - </tgroup> - </table> - Description: - Bits per sample. This is a query-only attribute. The - default value for an (empty) buffer is zero. - </para> - ]]> - - - <![ %Annote [ - <note><title>Annotation (No Format query)</title><para> - As of this time there is no query for FORMAT, or format - related state information. Query of the channels or - bits of a given buffer make little sense if the query - the internal (canonical, not buffer specific) format. - Query of the original sample data format makes little - sense unless the implementation is obliged to preserve - the original data. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000806-02"><title>RFC: CHANNELS needed?</title><para> - No setter. Does this indicate the channels in the original data, - or those in the (canonical) format internally used? Redundant to - querying the buffer type. Should be enums as speaker configurations - might have to be destribed by two integers: 5.1. - </para></note> - <para> - <table> - <title>Buffer CHANNELS Attribute</title> - <tgroup cols="4" align="left" colsep="1" rowsep="1"> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val;</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>CHANNELS</> - <entry>ui</> - <entry>RFC: enums or N/A?</> - <entry>0</> - </row> - </tbody> - </tgroup> - </table> - Description: Channels that buffer stores. Query only - attribute. This is almost - always 1, as applications using spatialized sound always - downsample to mono. This depends on the purpose of the - buffer: buffers used for spatialization have to provide - single-channel data. The default value for an (empty) - buffer is zero. - </para> - ]]> - - <para> - <table> - <title>Buffer SIZE Attribute</title> - <tgroup cols="4" align="left" colsep="1" rowsep="1"> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val;</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>SIZE</> - <entry> &sizei; </> - <entry> [0, MAX_UINT]</> - <entry> 0 </> - </row> - </tbody> - </tgroup> - </table> - Description: Size in bytes of the buffer data. Query through - GetBuffer, can be set only using BufferData calls. - Setting a SIZE of 0 is a legal NOP. The number of bytes does - not necessarily equal the number of samples (e.g. for compressed data). - </para> - - - <![ %RFC [ - <note id="rfc-bk000724-15"><title>RFC: buffer overflow/underflow</title><para> - If a SIZE is specified for a buffer and an attempt is made to - write less or more data to the buffer, is this an error? Do we - have SubData updates? Is trying to write data to a zero size buffer - an error? Which error? - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000619-16"><title>RFC: query for samples/duration?</title><para> - Do we need a query for samples (which does not equal memory size)? - Do we prefer a duration query? As integral, for precision? Which, - combined with frequency, has to guarantee accurate sample number? - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk000724-01"><title>RFC: memory budgeting</title><para> - SIZE comment said: Useful for memory budgeting with compressed data. - Sounds bogus: the application can only announce how many bytes - of data it intends to provide, it might not be able to estimate - the uncompressed, decoded size in the internal format chosen by - the implementation w/o decompressing, decoding, and querying for - the internal format. Micromanaging memory is usually a bad idea. - Using SIZE to configure a buffer might ge a mistake. Using the - same enum to query the actual size internally (which might - consists of two or more buffer areas and cached decoding state) - will be confusing. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000724-02"><title>RFC: buffer initial state</title><para> - MikeV added: - "The default attribute values for a Buffer are nonsensical insofar - as a Buffer is incomplete without data having been - specified." - This seems wrong. An AL object will always be complete and valid, - albeit useless. A Buffer in its default state might not produce - any useful outout, but it can be specified and used. - </para></note> - ]]> - </sect2> - - - <sect2> - <title>Querying Buffer Attributes</title> - <para> - Buffer state is maintained inside the &AL; implementation and can be - queried in full. The valid values for paramName are identical to the - ones for Buffer*. - <funcsynopsis><funcprototype> - <funcdef> void <function> GetBuffer{n}{sifd}{v} </function></funcdef> - <paramdef> &uint; <parameter>bufferName</parameter></paramdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type;* <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - - <sect2> - <title>Specifying Buffer Content</title> - <para> - A special case of Buffer state is the actual sound sample data stored - in asociation with the Buffer. Applications can specify sample data using - BufferData. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> BufferData </function></funcdef> - <paramdef> &uint; <parameter>bufferName</parameter></paramdef> - <paramdef> &enum; <parameter>format</parameter></paramdef> - <paramdef> &void;* <parameter> data </parameter></paramdef> - <paramdef> &sizei; <parameter> size </parameter></paramdef> - <paramdef> &sizei; <parameter>frequency</parameter></paramdef> - </funcprototype></funcsynopsis> - The data specified is copied to an internal software, or if possible, - hardware buffer. The implementation is free to apply decompression, - conversion, resampling, and filtering as needed. The internal format - of the Buffer is not exposed to the application, and not - accessible. Valid formats are FORMAT_MONO8, FORMAT_MONO16, - FORMAT_STEREO8, and FORMAT_STEREO16. An implementation may - expose other formats, see the chapter on Extensions for - information on determining if additional formats are supported. - </para> - - <para> - Applications should always check for an error condition after attempting - to specify buffer data in case an implementation has to generate an - OUT_OF_MEMORY or conversion related INVALID_VALUE error. The application - is free to reuse the memory specified by the data pointer once the - call to BufferData returns. The implementation has to dereference, - e.g. copy, the data during BufferData execution. - </para> - - <![ %RFC [ - <note id="rfc-bk000724-04"><title>RFC: format enums</title><para> - With the possible exception of sample frequency, all - details of a sample (mono/stero, bit resolution, channels, - encoding,compression) should be specified in a format parameter. - In other words, I opt for an enumeration of formats. GL has a - quite large number of those w/o suffering damage. Allowing - parameters the way we do increases error cases and/or - conversion load. The space is combinatorial to begin with, - but an enumeration of valid formats seems better to impose - restrictions. Using enums helps dealing with formats - opaque to the application (compressed data with compressed - header) where sample size and sampling frequency might not - be available. - - There is the related issue of internal formats. A buffer used - for spatialization will have to convert to mono. A buffer used - to pass through to the output hardware will have to - remap an n-channel format to an m-channel format (or let the - hardware do it) including crosstalk handling depending on - the output device (headphones vs. speaker). To prevent that - every buffer has to do both AL needs to know the purpose of a - buffer when dereferencing the data. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk0000507-17"><title>RFC: Frequency woes</title><para> - Frequency as a uint rises precision issues. - Frequency might not be known for compressed data, we might need - a (yuck) wildcard frequency specifier? - We have a redundancy: frequency per context (mixing quality - desired), frequency internally used by the implementation when - storing the buffers, frequency provided in the data. We need - to specify the latter in some cases and can't in others. Format - enum or frequency enum again. - </para></note> - ]]> - - - - <![ %RFC [ - <note id="rfc-bk000504-01"><title>RFC: data mover mess</title><para> - API to copy data from output buffer to a buffer? - BufferWriteData to supersede BufferData, BufferReadData - as later extensions for buffer readback for those who want it? - Reading the output stream reverses the problems we have - with appendData: the application provides a memory buffer - into which AL copies as much data as available/as fits. - </para></note> - ]]> - - - - <![ %RFC [ - <note id="rfc-bk000724-11"><title>RFC: expose internal format</title><para> - Implementations are free to use whatever internal data format is best - suited for their hardware/software implementation, leaving the actual - sample format and structure opaque to the application. Should applications - be able to influence this? Through context creation? Per Buffer? - Do we use Lowest Common Denominator or highest possible quality as a - default? - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000724-12"><title>RFC: memory management with compressed data</title><para> - If we allow for mixing from compressed data (perfectly reasonable - for hardware) then it seems even more unlikely the application could - estimate memory usage. - If a compressed format is supported by AL, do we require support for mixing from - compressed data? I daresay not - some formats might not allow for - cheap incremental decompression. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000724-21"><title>RFC: conversion and sample retrieval</title><para> - To retrieve a sample, the size has to be queried first for allocating a - properly sized memory segment as destination. This is dependent on the - format. Conversion can be implemented as creating a buffer, and then - requesting the data in a different format. Is this desirable? Even if - we restrict reading from buffers to the same format they were written - to, conversion from the internal format might be inevitable. Querying - and setting the internal format however might be desirable for certain - purposes. - </para></note> - ]]> - - </sect2> - </sect1> - </chapter> - diff --git a/neo/openal/docs/chp-introduction.sgml b/neo/openal/docs/chp-introduction.sgml deleted file mode 100644 index c9485530..00000000 --- a/neo/openal/docs/chp-introduction.sgml +++ /dev/null @@ -1,304 +0,0 @@ - - <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 --> - - \ No newline at end of file diff --git a/neo/openal/docs/chp-multichannel.sgml b/neo/openal/docs/chp-multichannel.sgml deleted file mode 100644 index 425ec067..00000000 --- a/neo/openal/docs/chp-multichannel.sgml +++ /dev/null @@ -1,261 +0,0 @@ - - <chapter id="multichannel"> - <title>Handling Multichannel Data</title> - <para> - &AL; is foremost an API to control processing of spatialized sound. For that - reason, the internal, canonical format of data stored in buffers is mono. - The specification does not require the implementation to preserve the - original data, thus multichannel (e.g. stereo) data is usually downsampled - using an algorithm of the implementor's choosing. Implementations are free - to defer decompression, decoding, and conversion until the latest possible - moment, but they are not required to do so by the specification. - </para> - <para> - However, &AL; is an audio API, and consequently has to provide means to - pass through preprocessed multichannel data to the sound driver and - hardware, which in turn will map it to the actual output channels. This - processing might involve mapping from n channels in the data to m channels - in the output, as well as filtering to account for varying requirements - for a given setup. For example, headphone and speaker setups differ with - respect to handling of crosstalk and noise. - </para> - <para> - For this reason, mono buffers can not be used to store data meant for - direct multichannel output. The API has to provide means by which the - application can signal its intention to use a given buffer in this way, - causing the implementation to either preserve the original data, or - convert it as needed for the direct output to the given speaker or - headphone configuration. In many cases, multichannel buffers could be - used with Sources, but the specification does not endorse this at this - time as this might not be guaranteed for all multichannel data formats - &AL; will support. - </para> - <para> - While spatialized sound is often played once, or looping a limited number - of times, multichannel data is usually streaming: typically stereo or MP3 - music, soundtracks, maybe voice data accompanying animation and cinematic - sequences. The queueing mechanism defined for mono buffers and spatialized - Sources is thus also applied to multichannel buffers and passthrough - output. - </para> - <para> - Applications can expect &AL; implementations to support more than one - multichannel output at once (e.g. mixing two stereo streams, or fading - from one to the other for transition). For that reason we can not restrict - multichannel output to just one stream or buffer at a time. - </para> - - <![ %Annote [ - <note><title>Annotation (per-case Buffer use)</title><para> - The specification will likely be amended at a later time to - allow for the use of mono buffers with multichannel output, - and multichannel buffers with spatialized Sources. - The decision to use the same buffer API for mono - and multichannel buffers was taken in anticipation of this. - In cases where the specification can not guarantee - use of a given multichannel data encoding with a - spatialized source, an error can be generated at the - attempted use, validating the buffer's internal format - against the output chosen. In cases were the specification - can not guarantee the implementation will defer the - conversion of multichannel buffer content as needed (e.g. - PCM stereo data), the application can either specify the - internal format, or the internal format enumeration - can be extended to explicitely request storage of both - multichannel and mono data within the same buffer, at memory - expense. - </para></note> - ]]> - - - <section> - <title>Specifying Buffer Content and Internal Format</title> - <para> - The existing BufferData command does not permit the application - to specify an internal format. The implementation is free to - apply conversions, downsampling, upsampling, including - interpolation and filtering, in accordance with the specification. - </para> - <para> - However, applications might want to use different trade-offs - between quality and resource expenditure. More imortantly, - applications might choose to use preprocessed, multichannel - data instead of doing runtime spatialization, e.g. for - recorded music, voice, and realtime streams. In this case - the application expects efficient passthrough of the data - to the hardware. - </para> - <para> - To account for this requirement, an extended command to specify - sample data to be stored in a given buffer is introduced. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> BufferWriteData</function></funcdef> - <paramdef> &uint; <parameter>bufferName</parameter></paramdef> - <paramdef> &enum; <parameter>format</parameter></paramdef> - <paramdef> &void;* <parameter> data </parameter></paramdef> - <paramdef> &sizei; <parameter> size </parameter></paramdef> - <paramdef> &uint; <parameter>frequency</parameter></paramdef> - <paramdef> &enum; <parameter>internalFormat</parameter></paramdef> - </funcprototype></funcsynopsis> - The internal format of the Buffer can be requested by the - application. The implementation is not required to match - the request excatly. The specification does guarantee that - use of a multichannel internalFormat parameter will cause - the implementation to treat the data as multichannel data. - The implementation is free to perform any remapping from - the number of channels used in the data to the number of - channels available at the output, and apply other prcessing - as needed. - </para> - <para> - Valid formats for internalFormat are FORMAT_MONO8, FORMAT_MONO16, - FORMAT_STEREO8, and FORMAT_STEREO16. An implementation may - expose other formats, see the chapter on Extensions for - information on determining if additional formats are supported. - In general, the set of valid internalFormat parameters will be - a subset of those available as format parameters. - </para> - - <![ %Annote [ - <note><title>Annotation (atomic WriteData)</title><para> - The internal format for a buffer can not be specified - by using Bufferi. The modular way to set state - is preferable for operations that are always, or - nearly legal and orthogonal, but specifying the - internal format affect allocation and use of a buffer, - and would cause too many error cases. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (change buffer format on write)</title><para> - The API allows for changing a buffer on every write operation, - turning a multichannel buffer into a mono buffer and vice versa. - The specification does not require the implementation to handle - these operations efficiently, as they might require reallocation - of memory. The same is true for resize operations at write. - Applications might prefer to release buffer names that do not - match current requirements, and request new buffer names instead, - an operation which implementations are encouraged to optimize. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (BufferReadData)</title><para> - The specification might be amended at a later time - with a command to retrieve the data from a buffer, - following use of alGetBuffer to retrieve size and - internalFormat. Reading has to be queued for - continuous reads from the actual mixing buffer. - </para></note> - ]]> - <![ %RFC [ - <note id="rfc-bk000813-01"><title>RFC: frequency for write/read? </title><para> - Do we (ever) want to provide the application control over the internal frequency? - </para></note> - ]]> - </section> - - - <section> - <title>Rendering Multichannel Buffers</title> - <para> - For a variety of reasons, Sources are not used to feed buffer - data into multichannel processing. Instead, a different class - of &AL; object is introduced to encapsulate state management - and resource management for multichannel output: Multichannel - objects. - </para> - <para> - Multichannel objects are referred to by name, and they - are managed by an API partly duplicating the Source API: - GenMultichannels, IsMultichannel, DeleteMultichannels, - Multichanneli and GetMultichanneli. However, the - SourcePlay/Stop commands as well as the Queue/Unqueue - commands can be applied to both: these commands accept - mcName parameters as well as sName parameters. It is - left to the implementation how a Name is mapped to an - object, and how the implementation dinstiguishes sNames - from mcNames. Within a 32bit namespace, and given the - small number of multichannel sources to expect (more than - one is quite possible, but not common), the implementation - can exploit the fact that Names are opaque to the - application. - </para> - - <![ %Annote [ - <note><title>Annotation (Source NONE)</title><para> - The literal value "0", i.e. NONE, is legal. All - operations on Source/Multichannel NONE are legal NOPs - and quietly ignored. Because of the ambiguity - (is NONE a Source or Multichannel) NONE will never - be available as an actual object, nor will operations - on it ever have effects. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (implicit ambient)</title><para> - One way to feed multichannel data into the rendering is - using the Listener as a Source (sname==0 implies - Listener). This was rejected, as it - does not allow for multiple streams. Using multiple - Sources with appropriate type SOURCE_AMBIENT or - SOURCE_MULTICHHANEL was rejected, as Sources - are by definition spatialized, and support operations - which are meaningless or even illegal for an output - that is not spatialized at all. Modifying the semantics - of Source spatialization by a provision that a relative - position of (0,0,0) would mark a Source as ambient was - rejected for clarity and cleanness. Updates of Source - position can not be expected to convert Sources from - spatialized to ambient and vice versa at any time, - a Source State dependent semantics of position updates - is outright confusing, handling of sources that are - SOURCE_ABSOLUTE but incidentally at listener position - can not be different from that of SOURCE_RELATIVE with - a zero offset. Furthermore, multichannel data is not - necessarily ambient (surround can rotate, while ambient - attempts to prevent any perception of direction). - Finally, multichannel processing might require per-channel - gain adjustment at user request, which is a meaningless - concept for Sources. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (no direct mixing)</title><para> - Direct mixing into the rendering buffer, allowing the - application to superimpose its multichannel data - (or custom software mixing results) on the audio stream - generated by spatialization was rejected, as it suffers - from similar problems as BufferAppendData and loop points, - namely the need to operate at sample level on buffers of - unknown format that might not even be directly accessible. - The same rationale that led to the adoption of maintaining - a processing queue for Sources applies to multichannel data. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (no combined Buffer/Passthrough)</title><para> - Multichannel buffers cannot serve as multichannel output - objects for two reasons: it would complicate the buffer - API with operations only applicable to a subset of buffers, - and it does not allow for queueing. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000813-02"><title>RFC: Per-Channel access</title><para> - At a later time we might want to amend the specification to - gain access to a single channel within a multichannel buffer. - I suggest that any such operation should be restricted to the - ability of reading samples from just one channel into application - memory, which allows for writing it into a mono buffer subsequently. - </para></note> - ]]> - - </section> - </chapter> \ No newline at end of file diff --git a/neo/openal/docs/chp-operation.sgml b/neo/openal/docs/chp-operation.sgml deleted file mode 100644 index 78fa87b6..00000000 --- a/neo/openal/docs/chp-operation.sgml +++ /dev/null @@ -1,977 +0,0 @@ - - <chapter id="oal-operation"> - <title>&OAL; Operation</title> - - <sect1> - <title>&OAL; Fundamentals</title> - <para> - &OAL; (henceforth, the "&AL;") is concerned only with rendering audio - into an output buffer, - and primarily meant for spatialized audio. - There is no support for reading audio input from buffers at this - time, and no support for MIDI and other components usually - associated with audio hardware. Programmers must relay on other - mechanisms to obtain audio (e.g. voice) input or generate music. - </para> - <para> - The &AL; has three fundamental primitives or objects -- Buffers, Sources, - and a single Listener. Each object can be changed independently, - the setting of one object does not affect the setting of others. - The application can also set modes that affect processing. Modes - are set, objects specified, and other &AL; operations performed - by sending commands in the form of function or procedure calls. - </para><para> - Sources store locations, directions, and other attributes of an object in 3D - space and have a buffer associated with them for playback. There are - normally far more sources defined than buffers. When the program wants to play - a sound, it controls execution through a source object. Sources are - processed independently from each other. - </para><para> - Buffers store compressed or un-compressed audio data. It is common to - initialize a large set of buffers when the program first starts (or at - non-critical times during execution -- between levels in a game, for instance). - Buffers are referred to by Sources. Data (audio sample data) is associated - with buffers. - </para><para> - There is only one listener (per audio context). The listener attributes are - similar to source attributes, but are used to represent where the user is - hearing the audio from. The influence of all the sources from the - perspective of the listener is mixed and played for the user. - </para> - - <![ %RFC [ - <note id="rfc-bk000926-03"><title>RFC: Data Binding</title><para> - Have to specifiy when pointer arguments are dereferenced. - </para></note> - ]]> - <sect2> - <title>Primitive Types</title> - <para> - As &AL; is meant to allow for seamless integration with &OGL; code - if needed, the &AL; primitive (scalar) data types mimic the - &OGL; data types. Guaranteed minimum sizes are stated for &OGL; - data types (see table 2.2 of the &OGL; 1.2 Specification), but - the actual choice of C datatype is left to the implementation. - All implementations on a given binary architecture, however, must - use a common definition of these datatypes. - </para> - - <![ %RFC [ - <note><title>RFC/000507:</title><para> - ALlong/ALulong are omitted from the Linux OpenGL Base ABI, - and the GL specification. Do we want to go ahead on this, - or trail GL? Do we include non-i386 architectures to list - sizes explicitely. I.e. do we make the ABI part of our - mandate? - </para></note> - ]]> - - <para> - Note that this table uses explicit AL prefixes for clarity, - while they might be omitted from the rest of the document - for brevity. GCC equivalents are given for IA32, i.e. a - portable and widely available compiler on the most common - target architecture. - <table> - <title>&AL; Primitive Data Types</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>AL Type</> - <entry>Description</> - <entry>GL Type</> - <entry>GCC IA32</entry> - </row> - </thead> - <tbody> - <row> - <entry> ALboolean </entry> - <entry> 8-bit boolean </entry> - <entry> GLboolean </entry> - <entry> unsigned char </entry> - </row> - <row> - <entry> ALbyte </entry> - <entry> signed 8-bit 2's-complement integer </entry> - <entry> GLbyte </entry> - <entry> signed char </entry> - </row> - <row > - <entry> ALubyte </entry> - <entry> unsigned 8-bit integer </entry> - <entry> GLubyte </entry> - <entry> unsigned char </entry> - </row> - <row> - <entry> ALshort </entry> - <entry> signed 16-bit 2's-complement integer </entry> - <entry> GLshort </entry> - <entry> short </entry> - </row - <row> - <entry> ALushort </entry> - <entry> unsigned 16-bit integer </entry> - <entry> GLushort </entry> - <entry> unsigned short </entry> - </row> - <row> - <entry> ALint </entry> - <entry> signed 32-bit 2's-complement integer </entry> - <entry> GLint </entry> - <entry> int </entry> - </row> - <row> - <entry> ALuint </entry> - <entry> unsigned 32-bit integer </entry> - <entry> GLuint </entry> - <entry> unsigned int </entry> - </row> - <![ %RFC [ - <row> - <entry> ALlong </entry> - <entry> signed 64-bit 2's-complement integer </entry> - <entry> n/a </entry> - <entry> long long </entry> - </row> - <row> - <entry> ALulong </entry> - <entry> unsigned 64-bit integer </entry> - <entry> n/a </entry> - <entry> unsigned long long </entry> - </row> - ]]> - <row> - <entry> ALsizei </entry> - <entry> non-negative 32-bit binary integer size </entry> - <entry> GLsizei </entry> - <entry> int </entry> - </row> - <row> - <entry> ALenum </entry> - <entry> enumerated 32-bit value </entry> - <entry> GLenum </entry> - <entry> unsigned int </entry> - </row> - <row> - <entry> ALbitfield </entry> - <entry> 32 bit bitfield </entry> - <entry> GLbitfield </entry> - <entry> unsigned int </entry> - </row> - <row> - <entry> ALfloat </entry> - <entry> 32-bit IEEE754 floating-point </entry> - <entry> GLfloat </entry> - <entry> float </entry> - </row> - <row> - <entry> ALclampf </entry> - <entry> Same as ALfloat, but in range [0, 1] </entry> - <entry> GLclampf </entry> - <entry> float </entry> - </row> - <row> - <entry> ALdouble </entry> - <entry> 64-bit IEEE754 floating-point </entry> - <entry> GLdouble </entry> - <entry> double </entry> - </row> - <row> - <entry> ALclampd </entry> - <entry> Same as ALdouble, but in range [0, 1] </entry> - <entry> GLclampd </entry> - <entry> double </entry> - </row> - </tbody> - </tgroup> - </table> - </para> - - - - <![ %Annote [ - <note><title>Annotation on Type Sizes</title><para> - It would be desirable to guarantee the bit size of &AL; data - types, but this might affect the mapping to &OGL; types - for which the &OGL; specification only guarantees a minimum - size. - </para></note> - <note><title>Annotation on 64bit integral</title><para> - It would be desirable to define ulong and long, but again - we defer to &OGL; in this decision. - </para></note> - <note><title>Annotation on Enumeration</title><para> - &enum; is not a C or C++ enumeration, but implemented as - C preprocesor defines. This makes it easier to handle - extensions to the &AL; namespace, in particular in - dealing with delays in distributing updated reference - headers. - </para></note> - ]]> - </sect2> - <sect2> - <title>Floating-Point Computation</title> - <para> - Any representable floating-point value is legal as input - to a &AL; command that requires floating point data. - The result of providing a value that is not a floating - point number to such a command is unspecified, but must not - lead to &AL; interruption or termination. In IEEE arithmetic, - for example, providing a negative zero or a denormalized - number to a GL command yields predictable results, while - providing an NaN or infinity yields unspecified results. - </para><para> - Some calculations require division. In such cases (including - implied divisions required by vector normalizations), a - division by zero produces an unspecified result but must - not lead to GL interruption or termination. - </para> - </sect2> - </sect1> - - <sect1> - <title>AL State</title> - <para> - The &AL; maintains considerable state. This documents enumerates - each state variable and describes how each variable can be - changed. For purposes of discussion, state variables are - categorized somewhat arbitrarily by their function. For example, - although we describe operations that the &AL; performs on the - implied output buffer, the outbut buffer is not part of the - &AL; state. Certain states of &AL; objects (e.g. buffer states - with respect to queueing) are introduced for discussion purposes, - but not exposed through the API. - </para> - </sect1> - - <sect1> - <title>AL Command Syntax</title> - <para> - &AL; commands are functions or procedures. Various groups of - commands perform the same operation but differ in how - arguments are supplied to them. To conveniently accomodate - this variation, we adopt the &OGL; nnotation for describing - commands and their arguments. - </para> - - <![ %Annote [ - <note><title>Annotation (Not all types supported yet)</title><para> - At this time &AL; does not support the full flexibility that - &OGL; offers. Certain entry points are supported only for - some data types. In general, &AL; tends to use less entry - points, using setter commands that use the same tokens - as the matching query commands. - </para></note> - ]]> - - </sect1> - - <sect1> - <title>Basic AL Operation</title> - <para> - &AL; can be used for a variety of audio playback tasks, and is an - excellent complement to &OGL; for real-time rendering. A programmer who is - familiar with &OGL; will immediately notice the similarities between the - two APIs in that they describe their 3D environments using similar methods. - </para> - <para> - For an &OGL;/&AL; program, most of the audio programming will be in two - places in the code: initialization of the program, and the rendering loop. - An &OGL;/&AL; program will typically contain a section where the graphics and - audio systems are initialized, although it may be spread into multiple functions. - For OpenAL, initialization normally consists of creating a context, creating - the initial set of buffers, loading the buffers with sample data, creating - sources, attaching buffers to sources, setting locations and directions for - the listener and sources, and setting the initial values for state global - to &AL;. - </para> - - <example> - <title>Initialization Example</title> - <para> - &sample.c; - </para> - <programlisting> - </programlisting> - </example> - - <![ %Example [ - <example> - <title>Initialization Example</title> - <programlisting> - &ExInitAL.c; - </programlisting> - </example> - ]]> - - <para> - The audio update within - the rendering loop normally consists of telling &AL; the current locations - of the sources and listener, updating the environment settings, and managing - buffers. - </para> - - <![ %Example [ - <example> - <title>Processing Loop</title> - <programlisting> -// PlaceCamera -- places OpenGL camera and updates OpenAL listener position and source state -void 3DEnvironemnt:PlaceCamera() -{ - // update OpenGL camera position - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-0.1333, 0.1333, -0.1, 0.1, 0.2, 50.0); - - gluLookAt(listenerPos[0], listenerPos[1], listenerPos[2], - (listenerPos[0] + sin(listenerAngle)), listenerPos[1], (listenerPos[2] - cos(listenerAngle)), - 0.0, 1.0, 0.0); - - // OpenAL stuff... - // place listener at camera - alListener3f(AL_POSITION, listenerPos[0], listenerPos[1], listenerPos[2]); - float directionvect[6]; - directionvect[0] = (float) sin(listenerAngle); - directionvect[1] = 0; - directionvect[2] = (float) cos(listenerAngle); - directionvect[3] = 0; - directionvect[4] = 1; - directionvect[5] = 0; - alListenerfv(AL_ORIENTATION, directionvect); - - // play phasor if in range, else stop playback - if (range() < 9) - { - alSourcePlay(source[1]); - } else - { - alSourceStop(source[1]); - } -} - </programlisting> - </example> - ]]> - - </sect1> - - <sect1 id="errors"> - <title>AL Errors</title> - <para> - The AL detects only a subset of those conditions that could be - considered errors. This is because in many cases error checking - would adversely impact the performance of an error-free program. - The command - <funcsynopsis><funcprototype> - <funcdef> &enum; <function> GetError </function></funcdef> - <void> - </funcprototype></funcsynopsis> - is used to obtain error information. Each detectable error is - assigned a numeric code. When an error is detected by AL, - a flag is set and the error code is recorded. Further errors, - if they occur, do not affect this recorded code. When GetError - is called, the code is returned and the flag is cleared, so that - a further error will again record its code. If a call to GetError - returns NO_ERROR then there has been no detectable error since - the last call to GetError (or since the AL was initialized). - </para> - - <![ %RFC [ - <note id="rfc-bk000926-04"><title>RFC: GL distributed error </title><para> - To allow for distributed implementations there may be several - flag/code pairs. In this case, after a call to GetError returns a - value other than NO_ERROR each subsequent call returns the - non-NO_ERROR code of another distinct flag-code pair (in - unspecified order), until all NO_ERROR codes have been returned. - When there are no more non-NO_ERROR codes, all flags be reset. - The initial state of all flags is cleared and the initial value - of all codes is NO_ERROR. - </para></note> - <note><title>Annotation (Looping GetError)</title><para> - &AL; applications are advised to loop calls of GetError to - make sure that all flags are reset. Only the first error - occurence for each flag/code pair is recorded, subsequent - errors are ignored. The result of a repeated GetError call - is not a stack trace or LIFO sequence. All error handling - is context specific. - - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Only First Error)</title><para> - Like &OGL; &AL; will ignore subsequent errors once an - error conditation has been encountered. - </para></note> - ]]> - - <para> - Error codes can be mapped to strings. The GetString function - returns a pointer to a constant (literal) string that is - identical to the identifier used for the enumeration value, - as defined in the specification. - </para> - - <![ %Annote [ - <note><title>Annotation/ Verbose Error String</title><para> - There is no need to maintain a separate GetErrorString - function (inspired by the proposed gluGetErrorStrings) - as the existing GetString entry point can be used. - </para></note> - ]]> - - - <para> - <table> - <title>Error Conditions</title> - <tgroup cols="2" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <thead> - <row> - <entry>Name</> - <entry>Description</> - </row> - </thead> - <tbody> - <row> - <entry>NO_ERROR</> - <entry>"No Error" token.</> - </row> - <row> - <entry>INVALID_NAME</> - <entry>Invalid Name parameter.</> - </row> - <row> - <entry>INVALID_ENUM</> - <entry>Invalid parameter.</> - </row> - <row> - <entry>INVALID_VALUE</> - <entry>Invalid enum parameter value.</> - </row> - <row> - <entry>INVALID_OPERATION</> - <entry>Illegal call.</> - </row> - <row> - <entry>OUT_OF_MEMORY</> - <entry>Unable to allocate memory.</> - </row> - </tbody> - </tgroup> - </table> - The table summarizes the AL errors. Currently, when an error flag - is set, results of AL operations are undefined only if OUT_OF_MEMORY - has occured. In other cases, the command generating the error is - ignored so that it has no effect on AL state or output buffer - contents. If the error generating command returns a value, - it returns zero. If the generating command modifies values - through a pointer argument, no change is made to these values. - These error semantics apply only to AL errors, not to system errors - such as memory access errors. - </para> - <para> - Several error generation conditions are implicit in the description - of the various AL commands. First, if a command that requires - an enumerated value is passed a value that is not one of those - specified as allowable for that command, the error INVALID_ENUM - results. This is the case even if the argument is a pointer to - a symbolic constant if that value is not allowable for the given - command. - This will occur whether the value is allowable for other functions, - or an invalid integer value. - </para> - <para> - Integer parameters that are used as names for &AL; objects - such as Buffers and Sources are checked for validity. If an invalid - name parameter is specified in an &AL; command, an - INVALID_NAME error will be generated, and the command is ignored. - </para> - <para> - If a negative integer is provided where an argument of type - &sizei; is specified, the error INVALID_VALUE results. The same - error will result from attempts to set integral and floating - point values for attributes exceeding the legal range for - these. The specification does not guarantee that the implementation - emits INVALID_VALUE if a &NaN; or &Infty; value is - passed in for a &float; or &double; argument (as the specification - does not enforce possibly expensive testing of floating point - values). - </para> - - <para> - Commands can be invalid. For example, certain commands might not be - applicable to a given object. There are also illegal combinations - of tokens and values as arguments to a command. &AL; responds to any - such illegal command with an INVALID_OPERATION error. - </para> - - <![ %Scratch [ - <para> - No longer true except for extensions. To be avoided - in general: &AL; has - mutually exclusive commands operating on similar objects. - One example is treating a streaming buffer as a - non-streaming buffer, another is appending data to a - non-streaming buffer. - </para> - ]]> - - <para> - If memory is exhausted as a side effect of the execution of an - AL command, either on system level or by exhausting the allocated - resources at AL's internal disposal, the error OUT_OF_MEMORY - may be generated. This can also happen independent of recent - commands if &AL; has to request memory for an internal task - and fails to allocate the required memory from the operating - system. - </para> - <para> - Otherwise errors are generated only for conditions that are - explicitely described in this specification. - </para> - - - <![ %RFC [ - <note id="rfc-bk000807-01"><title>RFC: INVALID_SIZE?</title><para> - Specific error case in which the size argument is - negative, or mismatches internal conditions for a getter? - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk000802-03"><title>RFC: INVALID_POINTER?</title><para> - GL seemingly does not specify a response to NULL pointer - destinations, and does not assign an error case. INVALID_VALUE - could be used, also we could introduce a separate INVALID_POINTER. - Is there a good reason not to catch these cases? - </para></note> - ]]> - - - </sect1> - - - - <sect1 id="control"> - <title>Controlling AL Execution</title> - <para> - The application can temporarily disable certain AL capabilities - on a per Context basis. This allows the driver implementation - to optimize for certain subsets of operations. - Enabling and disabling capabilities is handled using a function - pair. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> Enable </function></funcdef> - <paramdef> &enum; <parameter> target </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> &void; <function> Disable </function></funcdef> - <paramdef> &enum; <parameter> target </parameter></paramdef> - </funcprototype></funcsynopsis> - The application can also query whether a given capability is - currently enabled or not. - <funcsynopsis><funcprototype> - <funcdef> &bool; <function> IsEnabled </function></funcdef> - <paramdef> &enum; <parameter> target </parameter></paramdef> - </funcprototype></funcsynopsis> - If the token used to specify target is not legal, - an INVALID_ENUM error will be generated. - </para> - <para> - At this time, this mechanism is not used. There are no valid - targets. - </para> - <![ %Annote [ - <note><title>Annotation (Enable/Disable)</title><para> - Currently, &AL; is controlled exploiting existing - commands. For example, to disable sound output but - not processing, the Listener can be muted setting - GAIN to zero. Selecting NONE as the distance model - disables distance attenuation. Setting DOPPLER_FACTOR - to zero disables the Doppler Effect. A redundant - mechanism to accomplish the same is not needed. - </para></note> - ]]> - - </sect1> - - <sect1 id="objects"> - <title>Object Paradigm</title> - <para> - &AL; is an object-oriented API, but it does not expose classes, structs, - or other explicit data structures to the application. - </para> - - - <sect2 id="object-overview-categories"> - <title>Object Categories</title> - <para> - &AL; has three primary categories of Objects: - <itemizedlist> - <listitem> - <para> - one unique Listener per Context - </para> - </listitem> - <listitem> - <para> - multiple Buffers shared among Contexts - </para> - </listitem> - <listitem> - <para> - multiple Sources, each local to a Context - </para> - </listitem> - </itemizedlist> - In the following, "{Object}" will stand for either Source, - Listener, or Buffer. - </para> - </sect2> - - <sect2 id="object-overview-dynamic"> - <title>Static vs. Dynamic Objects</title> - <para> - The vast majority of &AL; objects are dynamic, and will be created - on application demand. There are also &AL; objects that do not have - to be created, and can not be created, on application demand. - Currently, the Listener is the only such static object in &AL;. - - </para> - </sect2> - - <sect2> - <title>Object Names</title> - <para> - Dynamic Objects are manipulated using an integer, which in - analogy to &OGL; is referred to as the object's "name". These - are of type unsigned integer (uint). Names can be valid - beyond the lifetime of the context they were requested - if the objects in question can be shared among contexts. - No guarantees or assumptions are - made in the specification about the precise values or their distribution - over the lifetime of the application. As objects might be shared, - Names are guaranteed to be - unique within a class of &AL; objects, but no guarantees are made - across different classes of objects. Objects that are unique - (singletons), like the Listener, do not require and do not have - an integer "name". - </para> - </sect2> - - - <sect2> - <title>Requesting Object Names</title> - <para> - &AL; provides calls to obtain Object Names. The application requests - a number of Objects of a given category using Gen{Object}s. - If the number n of Objects requested is negative, - an INVALID_VALUE error will caused. The actual values of the - Names returned are implementation dependent. No guarantees on - range or value are made. Unlike &OGL; &OAL does not offer alternative - means to define (bind) a Name. - </para> - <para> - Allocation of Object Names does not imply immediate allocation of - resources or creation of Objects: the implementation is free to - defer this until a given Object is actually used in mutator calls. - The Names are written at the memory location specified by the caller. - <funcsynopsis><funcprototype> - <funcdef> void <function> Gen{Object}s </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> objectNames </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - <para> - Requesting zero names is a legal NOP. Requesting a negative - number of names causes an INVALID_VALUE error. - &AL; will respond with an OUT_OF_MEMORY if the application - requests too many objects. The specification does not guarantee - that the &AL; implementation will allocate all resources - needed for the actual objects at the time the names are - reserved. In many cases (Buffers) this could only be - implemented by worst case estimation. Allocation of names - does not guarantee that all the named objects can actually - be used. - </para> - - - <![ %Scratch [ - <note><para> - We do not re-use Names under any circumstance. Do we require - implementations throwing OUT_OF_MERMORY errors on allocation of - Names? No - we don't even specify buffer sizes. Ambiguity - could - an implementation throw OOM because of no names, or OOM because - of a (worst case) estimate of object sizes? Do we need OUT_OF_NAMES? - </para></note> - ]]> - - - <![ %Scratch [ - <warning><para> - The current headers include a sizei return parameter: - "Returns the number of ids actually allocated." - This violates the "failed commands are NOPs" design - and introduces ambiguity in error handling, and has - thus been changed breaking backwards compatibility. - </para></warning> - ]]> - - <![ %Annote [ - <note><title>Annotation (No application selected Names)</title><para> - Unlike GL, applications are not free to choose Names; all - Names have to be requested. Aside from possible benefits for - the implementation, and avoidance of errors in projects - that have many modules using the AL implementation (a problem - encountered in GL, when the two generation mechanisms are - mixed), this also leaves open the door to feed different - kinds of objects by Name through the same API entry points. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotate (Negative/zero sizei)</title><para> - The specification does not guarantee that sizei is an - unsigned integer, but legal values have to be non-negative. - However, requesting zero names is a legal NOP. - </para></note> - ]]> - - <![ %RFC [ - <note id=rfc-bk000626-02><title>RFC: Resource Release Hint</title><para> - Do we need a hint that resource release has to be done on DeleteXXX, - instead of leaving this housekeeping to &AL;? - </para></note> - <note id=rfc-bk000626-03><title>RFC: Zero Name</title><para> - Do we reserve the name "0"? &OGL; provides an alternative mechanism - which lets the application pick texture names, which we discarded - because it is prone to create error conditions when mixing both - approaches. As all our names are generated using GenXXXX, there - is no real need to treat "0" special. - </para></note> - ]]> - - </sect2> - - - <sect2> - <title>Releasing Object Names</title> - <para> - &AL; provides calls to the application to release Object Names - using Delete{Object}s, implicitly requesting deletion of the - Objects associated with the Names released. If the number n of Objects named - is negative, an INVALID_VALUE error will be caused. - If one or more of the specified Names is not valid, an INVALID_NAME - error will be caused. Implementation behavior following any error - is undefined. - </para> - <para> - Once deleted (even if an error occured on deletion), the Names are - no longer valid for use with any &AL; function calls including - calls to Delete{Objects}s. Any such use will cause an INVALID_NAME - error. - </para> - <para> - The &AL; implementation is free to defer actual release of - resources. Ideally, resources should be released as soon as - possible, but no guarantees are made. - <funcsynopsis><funcprototype> - <funcdef>&void;<function>Delete{Object}s</function></funcdef> - <paramdef>&sizei;<parameter>n</parameter></paramdef> - <paramdef>&uint;*<parameter>objectNames</parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - - <![ %Annote [ - <note><title>Annotation</title><para> - GenXXX and DeleteXXX can not reasonably be expected to be used - for controlling driver-side resource management from the - application. A driver might never release a Source once allocated - during the lifetime of the application. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000724-18"><title>RFC: Deletion Errors</title><para> - chasan@acm.org: - What happens if an active source (or its associated buffer) is deleted? - The source should be stopped? Or the delete operation is invalid? - </para></note> - ]]> - - </sect2> - - - <sect2> - <title>Validating an Object Name</title> - <para> - &AL; provides calls to validate the Name of an Object. - The application can verify whether an Object Name is valid - using the Is{Object} query. There is no vector (array) - version of this function as it defeats the purpose of - unambiguous (in)valdiation. Returns &TRUE; if id is a - valid Object Name, and &FALSE; otherwise. Object Names are - valid between request (Gen{Object}s) and release (Delete{Object}s). - Is{Object} does not distinguish between invalid and deleted Names. - <funcsynopsis><funcprototype> - <funcdef>&bool;<function>Is{Object}</function></funcdef> - <paramdef>&uint;<parameter>objectName</parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - <![ %RFC [ - <note><title>RFC/bk000504:</title><para> - If zero is a valid name, this function will have to accept - it without an actyual object (or only an internal dummy) - being associated with it. I recommend that implementations - never return "0" as an object name. - </para></note> - ]]> - </sect2> - - - <sect2> - <title>Setting Object Attributes</title> - <para> - For &AL; Objects, calls to control their attributes are provided. - These depend on the actual properties of a given Object - Category. The precise API is discussed for each category, - below. Each &AL; command affecting the state of - a named Object is usually of the form - <funcsynopsis><funcprototype> - <funcdef> void <function> {Object}{n}{sifd}{v} </function></funcdef> - <paramdef> &uint; <parameter> objectName </parameter></paramdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type; <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - In the case of unnamed (unique) Objects, the (integer) objectName - is omitted, as it is implied by the {Object} part of function name: - <funcsynopsis><funcprototype> - <funcdef> void <function> {Object}{n}{sifd}{v} </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type; <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - For example, the Listener3d command would not require an (integer) - objectName argument. - </para> - <para> - The objectName specifies the &AL; object affected by this call. - Use of an invalid Name will cause an INVALID_NAME error. - </para> - <para> - The Object's Attribute to be affected has to be named - as paramName. &AL; parameters applicable to one category - of Objects are not necessarily legal for another catetgory - of &AL; Objects. Specification of a parameter illegal for - a given object will cause an INVALID_OPERATION error. - </para> - <para> - Not all possible values for a type will be legal for a - given objectName and parameterName. Use of an illegal value - or a NULL value pointer will cause an INVALID_VALUE error. - </para> - <para> - Any command that causes an error is a NOP. - </para> - </sect2> - - <sect2> - <title>Querying Object Attributes</title> - <para> - For named and for unique &AL; Objects, calls to query their - current attributes are provided. - These depend on the actual properties of a given Object - Category. The performance of such queries is implementation - dependent, no performance guarantees are made. The valid values for the - parameter paramName are identical to the ones legal for the complementing - attribute setting function. - <funcsynopsis><funcprototype> - <funcdef> void <function> Get{Object}{n}{sifd}{v} </function></funcdef> - <paramdef> &uint; <parameter> objectName </parameter></paramdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type;* <parameter> destination </parameter></paramdef> - </funcprototype></funcsynopsis> - For unnamed unique Objects, the objectName is omitted as it is - implied by the function name: - <funcsynopsis><funcprototype> - <funcdef> void <function> Get{Object}{n}{sifd}{v} </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type;* <parameter> destination </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - <para> - The precise API is discussed for each category separately, below. - Unlike their matching mutators, Query functions for non-scalar - properties (vectors etc.) are only available in array form. - </para> - <para> - Use of an invalid Name will cause an INVALID_NAME error. - Specification of an illegal parameter type (token) will cause - an INVALID_ENUM error. A call with a destination - NULL pointer will be quietly ignored. The &AL; state will not - be affected by errors. In case of errors, destination memory - will not be changed. - </para> - </sect2> - - - <sect2> - <title>Object Attributes</title> - - <para> - Attributes affecting the processing of sounds can be set for various - &AL; Object categories, or might change as an effect of &AL; calls. - The vast majority of these Object properties are specific to the - &AL; Object category, in question, but some are applicable to two - or more categories, and are listed separately. - </para> - <para> - The general form in which this document describes parameters is - <table> - <title>{Object} Parameters</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <colspec colname=c3> - <colspec colname=c4> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>paramName</> - <entry>T</> - <entry> range or set </> - <entry> scalar or n-tuple </> - </row> - </tbody> - </tgroup> - </table> - Description: - The description specifies additional restrictions and details. - paramName is given as the &AL; enum defined as its name. - T can be a list of legal signatures, usually the array form - as well as the flat (unfolded) form. - </para> - - - <![ %RFC [ - <note id="rfc-bk000626-04"><title>RFC: Initial (Default) State</title><para> - The default state of objects will have to be specified here. - There will be no commands that allow the application to set - other defaults. - </para></note> - ]]> - </sect2> - </sect1> - </chapter> - diff --git a/neo/openal/docs/chp-queueing.sgml b/neo/openal/docs/chp-queueing.sgml deleted file mode 100644 index 8bce727b..00000000 --- a/neo/openal/docs/chp-queueing.sgml +++ /dev/null @@ -1,2 +0,0 @@ - - <!-- Content has been moved into chp-rendering.sgml --> \ No newline at end of file diff --git a/neo/openal/docs/chp-rendering.sgml b/neo/openal/docs/chp-rendering.sgml deleted file mode 100644 index 1237e88d..00000000 --- a/neo/openal/docs/chp-rendering.sgml +++ /dev/null @@ -1,2076 +0,0 @@ - - - <chapter id="rendering"> - <title>Listener and Sources</title> - - <sect1 id="object-state"> - <title>Basic Listener and Source Attributes</title> - <para> - This section introduces basic attributes that can be set both for - the Listener object and for Source objects. - </para> - - <![ %RFC [ - <note id="rfc-bk000619-02"><title>RFC: attribute grouping</title><para> - JM: "These attributes are of - two types: non-positional and positional. - Non-positional properties include gain control and Environment Name." - </para><para> - I said: (low pass) Filters are applied to the sound during processing - at various stages. The exact sequence in which Filters are applied is - determined based on the location of the Objects they are - set for - spatial arrangement of Objects determines the - sequence unless invariance is guaranteed, or invariance - violation is permitted by the specification and current &AL; - configuration state. - </para><para> - Is there a required order of application, i.e. a pipeline? - </para><para> - Filter Parameters vs. Non-positional properties. - Spatialization vs. Positional properties. - Spatial attributes? - Let's postpone grouping of attributes. - </para></note> - ]]> - - - <para> - The &AL; Listener and Sources have attributes to describe - their position, velocity and orientation in three dimensional space. - &AL; like &OGL;, uses a right-handed Cartesian coordinate system (RHS), - where in a frontal default view X (thumb) points right, - Y (index finger) points up, and Z (middle finger) points towards - the viewer/camera. To switch from a left handed coordinate system (LHS) - to a right handed coordinate systems, flip the sign on the Z coordinate. - </para> - - <para> - <table> - <title>Listener/Source Position</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>POSITION</> - <entry>3fv, 3f</> - <entry> any except NaN </> - <entry> { 0.0f, 0.0f, 0.0f } </> - </row> - </tbody> - </tgroup> - </table> - Description: - POSITION specifies the current location of the Object in the - world coordinate system. Any 3-tuple of valid float/double values - is allowed. Implementation behavior on encountering &NaN; and &Infty; - is not defined. The Object position is always defined in the - world coordinate system. - </para> - - <![ %Annote [ - <note><title>Annotation (No Transformation)</title><para> - &AL; does not support transformation operations on Objects. - Support for transformation matrices is not planned. - </para></note> - ]]> - - - <para> - <table> - <title>Listener/Source Velocity</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>VELOCITY</> - <entry>3fv, 3f</> - <entry> any except NaN </> - <entry> { 0.0f, 0.0f, 0.0f } </> - </row> - </tbody> - </tgroup> - </table> - Description: - VELOCITY specifies the current velocity (speed and direction) of - the Object, in the world coordinate system. Any 3-tuple of valid - float/double values is allowed. The Object VELOCITY does not affect - its position. - &AL; does not calculate the velocity from subsequent position - updates, nor does it adjust the position over time based on - the specified velocity. Any such calculation is left to the - application. For the purposes of sound processing, position and - velocity are independent parameters affecting different aspects - of the sounds. - </para><para> - VELOCITY is taken into account by the driver to synthesize the - Doppler effect perceived by the Listener for each source, based - on the velocity of both Source and Listener, and the Doppler - related parameters. - </para> - - - - - <para> - <table> - <title>Listener/Source Gain (logarithmic)</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>GAIN</> - <entry>f</> - <entry>0.0f, (0.0f, any</> - <entry> 1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: - GAIN defines a scalar amplitude multiplier. As a Source attribute, it applies - to that particular source only. As a Listener attribute, it effectively - applies to all Sources in the current Context. The default 1.0 means - that the sound is un-attenuated. A GAIN value of 0.5 is equivalent to - an attenuation of 6 dB. The value zero equals silence (no output). Driver - implementations are free to optimize this case and skip mixing and - processing stages where applicable. The implementation is in charge of - ensuring artifact-free (click-free) changes of gain values and is free - to defer actual modification of the sound samples, within the limits of - acceptable latencies. - </para> - <para> - GAIN larger than 1 (amplification) is permitted for Source and - Listener. However, the implementation is free to clamp the - total gain (effective gain per source times listener gain) - to 1 to prevent overflow. - </para> - - - <![ %Annote [ - <note><title>Annotation/ Effective Minimal Distance</title><para> - Presuming that the sample uses the entire dynamic range of - the encoding format, an effective gain of 1 represents the - maximum volume at which a source can reasonably be played. - During processing, the implementation combines the Source - GAIN (or MIN_GAIN, if set and larger) with distance based - attenuation. The distance at which the effective gain is 1 - is equivalent to the DirectSound3D MIN_DISTANCE parameter. - Once the effective gain has reached the maximum possible - value, it will not increase with decreasing distance anymore. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Muting a Context)</title><para> - To mute the current context, simply set Listener GAIN to zero. - The implementation is expected to optimize for this case, - calculating necessary (offset) updates but bypassing the - mixing and releasing hardware resources. - The specification does not guarantee that the implementation - will release hardware resources used by a muted context. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Muting a Source)</title><para> - To mute a Source, set Source GAIN to zero. The &AL; implementation - is encouraged to optimize for this case. - </para></note> - ]]> - - <![ %RFC [ - <para> - <note id="rf-bk000503-01"><title>RFC: GAIN > 1?</title><para> - GAIN could exceed 1 (to compensate attenuation elsewhere, or to account - for grater dynamic range of the hardware? No guarantees are made with - respect to range overflows? Precision loss? Culling by effective gain? - Does &AL; clip values during processing, and when/at what stages? - </para></note> - - <note id="rfc-bk000619-01"><title>RFC: Doppler</title><para> - JM wrote: "VELOCITY is used by the driver - to synthesize the Doppler effect perceived by the listener for each - source, based on the relative velocity of this source with respect - to the listener." - Doppler is calculated using Source and Listener velocities measured - with respect to the medium. Do we have to account for the medium - to move (offsetting listener/source) in later revisions (air/water currents)? - </para></note> - - <note id="rfc-bk000619-03"><title>RFC: </title><para> - JM removed: "For the purposes of sound processing, position and - velocity are independent parameters affecting different paths - in the sound synthesis." I think the "different aspects of sounds" - is ambiguous. Is there a problem with describing &AL; as a - multichannel processing machine? - </para></note> - </para> - ]]> - - </sect1> - - - <sect1 id="object-listener"> - <title>Listener Object</title> - - <para> - The Listener Object defines various properties that affect processing of - the sound for the actual output. The Listener is unique for an &AL; Context, - and has no Name. By controlling the listener, the application controls - the way the user experiences the virtual world, as the listener defines - the sampling/pickup point and orientation, and other parameters that - affect the output stream. - </para> - <para> - It is entirely up to the driver and hardware configuration, i.e. - the installation of &AL; as part of the operating system and - hardware setup, whether the output stream is generated for - headphones or 2 speakers, 4.1 speakers, or other arrangements, - whether (and which) HRTF's are applied, etc.. - </para> - - <![ %Annote [ - <note><title>Annotation (Listener Anatomy)</title><para> - The API is ignorant with respect to the real world - listener, it does not need to make assumptions on the - listening capabilities of the user, its species or its - number of ears. It only describes a scene and the position - of the listener in this scene. It is the &AL; implementation - that is designed for humans with ears on either side of the - head. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Listener State Evaluation)</title><para> - Some Listener state (GAIN) affects only the very last - stage of sound synthesis, and is thus applied to the sound stream - as sampled at the Listener position. Other Listener state is - applied earlier. One example is Listener velocity as used to - compute the amount of Doppler pitch-shifting applied to each source: - In a typical implementation, pitch-shifting (sample-rate conversion) - might be the first stage of the audio processing for each source. - </para></note> - ]]> - - - <sect2> - <title>Listener Attributes</title> - - <para> - Several Source attributes also apply to Listener: e.g. POSITION, VELOCITY, - GAIN. In addition, some attributes are listener specific. - <table> - <title>Listener Orientation</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>ORIENTATION</> - <entry> fv </> - <entry> any except NaN </> - <entry> { { 0.0f, 0.0f, -1.0f }, { 0.0f, 1.0f, 0.0f } } </> - </row> - </tbody> - </tgroup> - </table> - Description: - ORIENTATION is a pair of 3-tuples representing the 'at' direction vector - and 'up' direction of the Object in Cartesian space. &AL; expects two - vectors that are orthogonal to each other. These - vectors are not expected to be normalized. If one or more vectors - have zero length, implementation behavior is undefined. If the two - vectors are linearly dependent, behavior is undefined. - </para> - <![ %RFC [ - <note id="rfc-bk000503-01"><title>RFC: Orientation Paranoia</title><para> - Watch LHS vs. RHS (sign on 'at'). - Confirm sequence is (up, at) not vice versa. - Do we want to allow for different representations down the road? - </para></note> - ]]> - </sect2> - - <sect2> - <title>Changing Listener Attributes</title> - <para> - Listener attributes are changed using the Listener group of commands. - <funcsynopsis><funcprototype> - <funcdef> void <function> Listener{n}{sifd}{v} </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type; <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - - <sect2> - <title>Querying Listener Attributes</title> - <para> - Listener state is maintained inside the &AL; implementation and can be - queried in full. See Querying Object Attributes. The valid values for - paramName are identical to the ones for the Listener* command. - <funcsynopsis><funcprototype> - <funcdef> void <function> GetListener{sifd}v </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type;* <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - </sect1> - - - - <sect1 id="object-sources"> - <title>Source Objects</title> - <para> - Sources specify attributes like position, velocity, and a buffer with - sample data. By controlling a Source's attributes the - application can modify and parameterize the static sample data provided - by the Buffer referenced by the Source. - Sources define a localized sound, and encapsulate - a set of attributes applied to a sound at its origin, i.e. in the - very first stage of the processing on the way to the listener. - Source related effects have to be applied - before Listener related effects unless the output is invariant - to any collapse or reversal of order. - </para> - <para> - &AL; also provides additional functions to manipulate and query the - execution state of Sources: the current playing status of a - source (started, stopped, paused), including access to the current - sampling position within the associated Buffer. - </para> - - <![ %RFC [ - <note id="rfc-briareos000629-01"><title>RFC: Mike on Source Types</title><para> - AL_SOURCE_ABSOLUTE and AL_SOURCE_AMBIENT have been - deprecated. AL_SOURCE_ABSOLUTE was simply the converse of the - AL_SOURCE_RELATIVE pname, and as such was unnecessary. The - effect of AL_SOURCE_AMBIENT is trivially emulated by either - querying the Listener position and setting the Source position - accordingly, or setting the Source position to (0,0,0) and the - type to AL_SOURCE_RELATIVE, and is therefore also unnecessary. - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk000721-02"><title>RFC: Bernd on Source Types</title><para> - Mike seems to miss a few problems here. W/o a converse we can't - reset source attributes to ABSOLUTE. Ambient sounds are not - necessarily trivial. A3D manual suggested some magic number - to fake the effect of ambient (i.e. sound that ideally - can't be localized by listener). If we can get away with such magic - numbers in a tutorial in a driver-independent way, fine. If there is any - risk that the impression of ambient sound requires driver specific - hacks, then we need AMBIENT. As soon as we have a third localization - type, ABSOLUTE and RELATIVE are needed as there is no unambiguous - converse. - - From the A3D 2.0 Optimize.doc: - "Adding some ambient background noise is a great way to fill in the gaps - when the audio content is reduced. A great way to make an ambient sound - seem like it is coming from everywhere is to load up two buffers with the - same sound, and position them about 2 meters behind the listener at - about 4 and 8 o\rquote clock. The waves have to be looping (make sure - there is no beating when you play them back). Starting the sounds 180 - degrees out of phase can help, as will playing them with slightly different - pitch-shift values." - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000721-03"><title>RFC: Bernd on Source Types (2)</title><para> - There is a point to be made in using POSITION_RELATIVE and - VELOCITY_RELATIVE iff we do not have AMBIENT to consider. - This makes it a call-by-call choice when setting Source3f{v} - vectors, as it is applied when dereferencing. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000721-04"><title>RFC: Bernd on Source Types (3)</title><para> - Semantically, AMBIENT has nothing to do with coordinate systems, - it is a qualifier just like multichannel direct passthru. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000721-05"><title>RFC: Source Attenuation Clamping</title><para> - Using AL_SOURCE_ATTENUATION_MIN and AL_SOURCE_ATTENUATION_MAX - to specify the clamping values for the normalized attenuation - factor (which is a function of distance) is in contradiction - to the distance based model that Creative is pushing for - (DirectSound). As driver-interall culling of source and other - processing might be based on the effective (overall, ultimate) - gain composed of amplifications and attenuations accumulated - over the entire processing, I raise the question whether a sound - designer might not want to control the effective GAIN ranges - instead of the distance attenuation itself. Samples commonly - use the entire dynamic range provided by the format, which is - mapped to the entire dynamic range of the output device. An - effective gain exceeding 1 does not make sense, an amplification - during processing might. - </para></note> - ]]> - - - - - - <sect2> - <title>Managing Source Names</title> - <para> - &AL; provides calls to request and release Source Names handles. - Calls to control Source Execution State are also provided. - </para> - - <sect3> - <title>Requesting a Source Name</title> - <para> - The application requests a number of Sources using GenSources. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> GenSources </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> sources </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect3> - - - <sect3> - <title>Releasing Source Names</title> - <para> - The application requests deletion of a number of Sources - by DeleteSources. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> DeleteSources </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> sources </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect3> - - <sect3> - <title>Validating a Source Name</title> - <para> - The application can verify whether a source name is valid - using the IsSource query. - <funcsynopsis><funcprototype> - <funcdef> &bool; <function> IsSource </function></funcdef> - <paramdef> &uint; <parameter> sourceName </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect3> - </sect2> - - - <sect2> - <title>Source Attributes</title> - <para> - This section lists the attributes that are set per Source, - affecting the processing of the current buffer. Some of - these attributes can also be set for buffer queue entries. - </para> - <![ %Annote [ - <note><title>Annotation (No Priorities)</title><para> - There are no per Source priorities, and no explicit priority - handling, defined at this point. A mechanism that lets the - application express preferences in case that the implementation - provides culling and prioritization mechanisms might be added - at some later time. This topic is under discussion for GL as - well, which already has one exlicit priority API along with - internally used MRU heuristics (for resident texture memory). - </para></note> - ]]> - - - - - <sect3> - <title>Source Positioning</title> - <para> - <table> - <title>SOURCE_RELATIVE Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> SOURCE_RELATIVE </> - <entry> &bool; </> - <entry> FALSE, TRUE</> - <entry> FALSE </> - </row> - </tbody> - </tgroup> - </table> - SOURCE_RELATIVE set to TRUE indicates that the values - specified by POSITION are to be interpreted relative - to the listener position. - </para> - - - <![ %Annote [ - <note><title>Annotation (Position only)</title><para> - SOURCE_RELATIVE does not affect velocity or orientation - calculation. - </para></note> - ]]> - - </sect3> - - <sect3> - <title>Buffer Looping</title> - <para> - <table> - <title>Source LOOPING Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <colspec colname=c1> - <colspec colname=c2> - <colspec colname=c3> - <colspec colname=c4> - <spanspec spanname=hspan namest=c1 nameend=c4 align=left> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> LOOPING </> - <entry> &uint; </> - <entry> TURE, FALSE</> - <entry> FALSE </> - </row> - </tbody> - </tgroup> - </table> - Description: - LOOPING is a flag that indicates that the Source will not - be in STOPPED state once it reaches the end of last buffer - in the buffer queue. Instead, the Source will immediately - promote to INITIAL and PLAYING. The default value is FALSE. - LOOPING can be changed on a Source in any execution state. - In particular, it can be changed on a PLAYING Source. - </para> - - <![ %Annote [ - <note><title>Annotation (Finite Repetition)</title><para> - Finite reptition is implemented by buffer queueing. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Loop Control)</title><para> - To implement a 3 stage "loop point" solution, the - application has to queue the FadeIn buffer first, - then queue the buffer it wants to loop, and set - LOOPING to TRUE once the FadeIn buffer has been - processed and unqueued. To fade from looping, the - application can queue a FadeOut buffer, then - set LOOPING to false on the PLAYING source. Alternatively, - the application can decide to not use the LOOPING - attribute at all, and just continue to queue the buffer - it wants repeated. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Rejected alternatives)</title><para> - A finite loop counter was rejected because it is - ambiguous with respect to persistent (initial counter) - vs. transient (current counter). For similar reasons, - a Play-equivalent command with a (transient) loop counter - was rejected. - </para></note> - ]]> - </sect3> - - <sect3> - <title>Current Buffer</title> - <para> - <table> - <title>Source BUFFER Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>BUFFER</> - <entry> &uint; </> - <entry> any valid bufferName </> - <entry> &NONE; </> - </row> - </tbody> - </tgroup> - </table> - Description: - Specifies the current Buffer object, making it the - head entry in the Source's queue. Using BUFFER on a - STOPPED or INITIAL Source empties the entire queue, - then appends the one Buffer specified. - </para> - <para> - For a PLAYING or PAUSED Source, using the Source command - with BUFFER is an INVALID_OPERATION. - It can be applied to INITIAL and STOPPED Sources only. - Specifying an invalid bufferName will - result in an INVALID_VALUE error while specifying an - invalid sourceName results in an INVALID_NAME error. - </para> - <para> - NONE, i.e. 0, is a valid buffer Name. - Source( sName, BUFFER, 0 ) is a legal way to release the - current buffer queue on an INITIAL or STOPPED Source, - whether it has just one entry (current buffer) or more. - The Source( sName, BUFFER, NONE) call still causes an - INVALID_OPERATION for any source PLAYING or PAUSED, - consequently it cannot be abused to mute or stop a source. - </para> - - <![ %Annote [ - <note><title>Annotation (repeated Source+BUFFER does not queue) </title><para> - Using repeated Source(BUFFER) calls to queue a buffer on - an active source would imply that there is no way to - release the current buffer e.g. by setting it to 0. - On the other hand read-only queues do not allow for - releasing a buffer without releasing the entire queue. - - We can not require BUFFER state to be transient and lost - as soon as a Source is implicitely or explicitely stopped. - This contradicts queue state being part of the Source's - configuration state that is preserved through Stop() - operations and available for Play(). - </para></note> - ]]> - - - </sect3> - - - <sect3> - <title>Queue State Queries</title> - <para> - <table> - <title>BUFFERS_QUEUED Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> BUFFERS_QUEUED </> - <entry> &uint; </> - <entry> [0, any]</> - <entry> none </> - </row> - </tbody> - </tgroup> - </table> - Query only. Query the number of buffers in the queue - of a given Source. This includes those not yet played, - the one currently playing, and the ones that have been - played already. This will return 0 if the current and - only bufferName is 0. - </para> - - - <para> - <table> - <title>BUFFERS_PROCESSED Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> BUFFERS_PROCESSED </> - <entry> &uint; </> - <entry> [0, any]</> - <entry> none </> - </row> - </tbody> - </tgroup> - </table> - Query only. Query the number of buffers that have - been played by a given Source. - Indirectly, this gives the index of the buffer - currently playing. Used to determine how much - slots are needed for unqueueing them. - On an STOPPED Source, all buffers are processed. - On an INITIAL Source, no buffers are processed, - all buffers are pending. - This will return 0 if the current and - only bufferName is 0. - </para> - - <![ %Annote [ - <note><title>Annotation (per-Source vs. Buffer State)</title><para> - BUFFERS_PROCESSED is only defined within the scope of a given - Source's queue. It indicates that the given number of buffer names - can be unqueued for this Source. It does not guarantee that the - buffers can safely be deleted or refilled, as they might still be - queued with other Sources. One way to keep track of this is to - store, per buffer, the Source for which a given buffer was most - recently scheduled (this will not work if Sources sharing buffers - might be paused by the application). If necessary an explicit - query for a given buffer name can be added in later revisions. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (No Looping Queues)</title><para> - Unqueueing requires nonzero BUFFERS_PROCESSED, - which necessitates no looping on entire queues, - unless we accept that no unqueueing is possible - from Source looping over the entire queue. - Currently not supported, as queueing is - primarily meant for streaming, which implies - unqueue-refill-requeue operations. - </para></note> - ]]> - - - </sect3> - - <sect3> - <title>Bounds on Gain</title> - <para> - <table> - <title>Source Minimal Gain</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>MIN_GAIN</> - <entry>f</> - <entry>0.0f, (0.0f, 1.0f]</> - <entry>0.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: - MIN_GAIN is a scalar amplitude threshold. It indicates the minimal GAIN - that is always guaranteed for this Source. At the end of the processing - of various attenuation factors such as distance based attenuation and - Source GAIN, the effective gain calculated is compared to this value. - If the effective gain is lower than MIN_GAIN, MIN_GAIN is applied. - This happens before the Listener GAIN is applied. If a zero MIN_GAIN - is set, then the effective gain will not be corrected. - </para> - - - <![ %Annote [ - <note><title>Annotation (Effective Maximal Distance)</title><para> - By setting MIN_GAIN, the application implicitely defines a - maximum distance for a given distance attenuation model and - Source GAIN. The distance at which the effective gain is MIN_GAIN - can be used as a replacement to the DirectSound3D MAX_DISTANCE parameter. - Once the effective gain has reached the MIN_GAIN value, it will - no longer decrease with increasing distance. - </para></note> - ]]> - - - <para> - <table> - <title>Source Maximal Gain (logarithmic)</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>MAX_GAIN</> - <entry>f</> - <entry>0.0f, (0.0f, 1.0f]</> - <entry>1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: - MAX_GAIN defines a scalar amplitude threshold. It indicates the maximal - GAIN permitted for this Source. At the end of the processing - of various attenuation factors such as distance based attenuation and - Source GAIN, the effective gain calculated is compared to this value. - If the effective gain is higher than MAX_GAIN, MAX_GAIN is applied. - This happens before the Listener GAIN is applied. If the Listener gain - times MAX_GAIN still exceeds the maximum gain the implementation can - handle, the implementation is free to clamp. If a zero MAX_GAIN - is set, then the Source is effectively muted. The implementation is free - to optimize for this situation, but no optimization is required or - recommended as setting GAIN to zero is the proper way to mute a Source. - </para> - - <![ %Annote [ - <note><title>Annotation (Un-attenuated Source)</title><para> - Setting MIN_GAIN and MAX_GAIN to the GAIN value will effectively - make the Source amplitude independent of distance. The - implementation is free to optimize for this situation. However, the - recommended way to accomplish this effect is using a ROLLOFF_FACTOR - of zero. - </para></note> - ]]> - - - - <![ %Annote [ - <note><title>Annotation (Internal GAIN threshold)</title><para> - The &AL; implementation is free to use an internally chosen - threshold level below which a Source is ignored for mixing. - Reasonable choices would set this threshold low enough so - that the user will not perceive a difference. Setting MIN_GAIN - for a source will override any implementation defined test. - </para></note> - ]]> - </sect3> - - - - <sect3> - <title>Distance Model Attributes</title> - <para> - <table> - <title> REFERENCE_DISTANCE Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> REFERENCE_DISTANCE </> - <entry> &float; </> - <entry> [0, any]</> - <entry> 1.0f </> - </row> - </tbody> - </tgroup> - </table> - This is used for distance attenuation calculations - based on inverse distance with rolloff. Depending - on the distance model it will also act as a distance - threshold below which gain is clamped. See the - section on distance models for details. - </para> - - - <para> - <table> - <title> ROLLOFF_FACTOR Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> ROLLOFF_FACTOR </> - <entry> &float; </> - <entry> [0, any]</> - <entry> 1.0f </> - </row> - </tbody> - </tgroup> - </table> - This is used for distance attenuation calculations - based on inverse distance with rolloff. For - distances smaller than MAX_DISTANCE (and, depending - on the distance model, larger than REFERENCE_DISTANCE), - this will scale the distance attenuation over the - applicable range. See section on distance models for - details how the attenuation is computed as a function - of the distance. - </para> - <para> - In particular, ROLLOFF_FACTOR can be set to zero for - those Sources that are supposed to be exempt from - distance attenuation. The implementation is encouraged - to optimize this case, bypassing distance attenuation - calculation entirely on a per-Source basis. - </para> - - <para> - <table> - <title> MAX_DISTANCE Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry> MAX_DISTANCE </> - <entry> &float; </> - <entry> [0, any]</> - <entry> MAX_FLOAT </> - </row> - </tbody> - </tgroup> - </table> - This is used for distance attenuation calculations - based on inverse distance with rolloff, if the - Inverse Clamped Distance Model is used. In this case, - distances greater than MAX_DISTANCE will - be clamped to MAX_DISTANCE. - MAX_DISTANCE based clamping is applied before MIN_GAIN clamping, - so if the effective gain at MAX_DISTANCE is larger than MIN_GAIN, - MIN_GAIN will have no effect. No culling is supported. - </para> - - <![ %Annote [ - <note><title>Annotation (No Culling)</title><para> - This is a per-Source attribute supported for DS3D compatibility - only. Other API features might suffer from side effects due to - the clamping of distance (instead of e.g. clamping to an effective - gain at MAX_DISTANCE). - </para></note> - ]]> - - </sect3> - - - - - <sect3> - <title>Frequency Shift by Pitch</title> - <para> - <table> - <title>Source PITCH Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>PITCH</> - <entry>f</> - <entry> (0.0f, 2.0f]</> - <entry> 1.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: - Desired pitch shift, where 1.0 equals identity. Each reduction by 50 percent - equals a pitch shift of -12 semitones (one octave reduction). Zero is not - a legal value. - </para> - </sect3> - - - <sect3> - <title>Direction and Cone</title> - <para> - Each Source can be directional, depending on the settings for - CONE_INNER_ANGLE and CONE_OUTER_ANGLE. There are three zones - defined: the inner cone, the outside zone, and the transitional - zone in between. - The angle-dependent gain for a directional source is constant - inside the inner cone, and changes over the transitional zone - to the value specified outside the outer cone. - Source GAIN is applied for the inner cone, - with an application selectable CONE_OUTER_GAIN factor to - define the gain in the outer zone. In the transitional - zone implementation-dependent interpolation between - GAIN and GAIN times CONE_OUTER_GAIN is applied. - - - </para> - <![ %Annote [ - <note><title>Annotation (Interpolation Restrictions)</title><para> - The specification does not specify the exact interpolation - applied in the transitional zone, to calculate gain as a - function of angle. The implementation is free to use - linear or other interpolation, as long as the values - are monotonically decreasing from GAIN to GAIN times CONE_OUTER_GAIN. - </para></note> - ]]> - - - <para> - <table> - <title>Source DIRECTION Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>DIRECTION</> - <entry>3fv, 3f</> - <entry> any except NaN </> - <entry> { 0.0f, 0.0f, 0.0f } </> - </row> - </tbody> - </tgroup> - </table> - Description: - If DIRECTION does not equal the zero vector, the Source is directional. - The sound emission is presumed to be symmetric - around the direction vector (cylinder symmetry). Sources are not - oriented in full 3 degrees of freedom, only two angles are effectively - needed. - </para><para> - The zero vector is default, indicating that a Source is not directional. - Specifying a non-zero vector will make the Source directional. - Specifying a zero vector for a directional Source will effectively - mark it as nondirectional. - </para> - - <![ %RFC [ - <note id="rfc-bk000821-01"><title>RFC: Oriented Sources </title><para> - Do we want an alternative AZIMUTH/ALTITUDE parametrization? - Do we need ORIENTATION later? Is this superimposable? Can we mix both? - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (All Sources Directional)</title><para> - From the point of view of the &AL; implementation, all - Sources are directional. Certain choices for cone angles - as well as a direction vector with zero length are treated - equivalent to an omnidirectional source. The &AL; - implementation is free to flag and optimize these cases. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000803-05"><title>RFC: Separate GenDirectionSource?</title><para> - Is there any risk that directional sources require different - resources that have to be allocated from the beginning, and - that we can not change an omnidirectional source to a - bidirectional source at runtime? - </para></note> - ]]> - - - <para> - <table> - <title>Source CONE_INNER_ANGLE Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>CONE_INNER_ANGLE</> - <entry>i,f</> - <entry>any except NaN</> - <entry>360.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: - Inside angle of the sound cone, in degrees. The default of 360 means that the - inner angle covers the entire world, which is equivalent to an omnidirectional - source. - </para> - <![ %RFC [ - <note id="rfc-bk000926-01"><title>RFC: inconsistent cone angles? </title><para> - Is (inner <= outer) required? Do we generate an error? - Shouldn't this be a CONE_ANGLES 2f call specifying both angles at once? - </para></note> - ]]> - - - - - <para> - <table> - <title>Source CONE_OUTER_ANGLE Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>CONE_OUTER_ANGLE</> - <entry>i,f</> - <entry>any except NaN</> - <entry>360.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: Outer angle of the sound cone, in degrees. The default of 360 means that the - outer angle covers the entire world. If the inner angle is also 360, then - the zone for angle-dependent attenuation is zero. - </para> - - <![ %RFC [ - <note id="rfc-bk000926-02"><title>RFC: addition? </title><para> - More generally, we could specify: - "If the sum of inner and outer angles is larger than 360, - CONE_OUTER_ANGLE is clamped to (360-CONE_INNER_ANGLE) and - there is no transition zone." - </para></note> - ]]> - - <para> - <table> - <title>Source CONE_OUTER_GAIN Attribute</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>&Par;</> - <entry>&Sig;</> - <entry>&Val</> - <entry>&Def;</> - </row> - </thead> - <tbody> - <row> - <entry>CONE_OUTER_GAIN</> - <entry>i,f</> - <entry>[0.0f, 1.0f]</> - <entry>0.0f</> - </row> - </tbody> - </tgroup> - </table> - Description: the factor with which GAIN is multiplied to - determine the effective gain outside the cone defined by - the outer angle. The effective gain applied outside the - outer cone is GAIN times CONE_OUTER_GAIN. Changing - GAIN affects all directions, i.e. the source is attenuated - in all directions, for any position of the listener. - The application has to change CONE_OUTER_GAIN as well if - a different behavior is desired. - </para> - - - <![ %Annote [ - <note><title>Annotation (GAIN calculation)</title><para> - The angle-dependend gain DGAIN is multiplied with the - gain determined by the source's GAIN and any distance - attenuation as applicable. Let theta be the angle - between the source's direction vector, and the vector - connection the source and the listener. This multiplier - DGAIN is calculated as: - <literallayout> - OUTER = CONE_OUTER_ANGLE/2; - INNER = CONE_INNER_ANGLE/2; - if ( theta less/equal INNER ) - DGAIN = 1 - else if ( theta greater/equal OUTER ) - DGAIN = CONE_OUTER_GAIN - else - DGAIN = 1 - (1-CONE_OUTER_GAIN)*((theta-INNER)/(OUTER-INNER)) - GAIN *= DGAIN - </literallayout> - in the case of linear interpolation. The implementation - is free to use a different interplation across the (INNER,OUTER) - range as long as it is monotone. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (CONE_OUTER_GAIN always less than GAIN)</title><para> - CONE_OUTER_GAIN is not an absolute value, but (like all GAIN - parameters) a scaling factor. This avoids a possible error - case (implementations can count on effective gain outside the - outer cone being smaller than GAIN), and ensures the common - case in which changing GAIN should affect inner, transitional, - and outer zone simultaneously. - </para><para> - In case that the application desires to have an outer zone - volume exceeding that of the inner cone, the mapping to - &AL; will require to rotate the Source direction to the - opposite direction (negate vector), and swapping - inner and outer angle. - </para></note> - ]]> - </sect3> - </sect2> - - - <sect2> - <title>Changing Source Attributes</title> - <para> - The Source specifies the position and other properties as - taken into account during sound processing. - <funcsynopsis><funcprototype> - <funcdef> void <function> Source{n}{sifd} </function></funcdef> - <paramdef> &uint; <parameter> sourceName </parameter></paramdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type; <parameter> value </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> void <function> Source{n}{sifd}v </function></funcdef> - <paramdef> &uint; <parameter> sourceName </parameter></paramdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type;* <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - - <sect2> - <title>Querying Source Attributes</title> - <para> - Source state is maintained inside the &AL; implementation, and the - current attributes can be queried. The performance of such queries is - implementation dependent, no performance guarantees are made. The - valid values for the paramName parameter are identical to the ones - for Source*. - <funcsynopsis><funcprototype> - <funcdef> void <function> GetSource{n}{sifd}{v} </function></funcdef> - <paramdef> &uint; <parameter> sourceName </parameter></paramdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &type;* <parameter> values </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - - <![ %Scratch [ - <warning><para> - Old signature: T GetSource{sifd}{v}( uint id, enum param ); - </para></warning> - ]]> - - </sect2> - - - - <sect2 id="queueing"> - <title>Queueing Buffers with a Source</title> - <para> - &AL; does not specify a built-in streaming mechanism. There - is no mechanism to stream data e.g. into a Buffer object. - Instead, the API introduces a more flexible and versatile - mechanism to queue Buffers for Sources. - </para> - <para> - There are many ways to use this feature, with - streaming being only one of them. - <itemizedlist> - <listitem> - <para> - Streaming is replaced by queuing static - buffers. This effectively moves any multi-buffer - caching into the application and allows the - application to select how many buffers it wants - to use, whether these are re-used in cycle, - pooled, or thrown away. - </para> - </listitem> - <listitem> - <para> - Looping (over a finite number of repititions) can be - implemented by explicitely repeating buffers - in the queue. Infinite loops can (theoretically) - be accomplished by sufficiently large repetition counters. - If only a single buffer is supposed to be repeated - infinitely, using the respective Source attribute is - recommended. - </para> - </listitem> - <listitem> - <para> - Loop Points for restricted looping inside a buffer - can in many cases be replaced by splitting the - sample into several buffers, queueing the sample - fragments (including repetitions) accordingly. - </para> - </listitem> - </itemizedlist> - Buffers can be queued, unqueued after they have been - used, and either be deleted, or refilled and queued again. - Splitting large samples over several buffers maintained - in a queue has a distinct advantages over approaches that - require explicit management of samples and sample indices. - </para> - - <![ %RFC [ - <note id="bk000626-01"><title>RFC: Unified Handling</title><para> - Jonathan Blow has proposed removing the distinction between - streaming and non-streaming buffers. An existing example is - the unified for directional and omnidirectional sources, where - all sources are treated as directional. - </para></note> - ]]> - - - <sect3> - <title>Queueing command</title> - <para> - The application can queue up one or multiple buffer names - using SourceQueueBuffers. The buffers will be queued in the sequence - in which they appear in the array. - <funcsynopsis><funcprototype> - <funcdef> &void; <function> alSourceQueueBuffers </function></funcdef> - <paramdef> &uint; <parameter> sourceName </parameter></paramdef> - <paramdef> &sizei; <parameter> numBuffers </parameter></paramdef> - <paramdef> &uint; * <parameter> bufferNames </parameter></paramdef> - </funcprototype></funcsynopsis> - This command is legal on a Source in any state (to allow for - streaming, queueing has to be possible on a PLAYING Source). - Queues are read-only with exception of the unqueue operation. - The Buffer Name NONE (i.e. 0) can be queued. - </para> - - <![ %Annote [ - <note><title>Annotation (BUFFER vs. SourceQueueBuffers)</title><para> - A Sourcei( sname, BUFFER, bname ) command is an immediate - command, and executed immediately. It effectively unqueues - all buffers, and then adds the specified buffer to the - then empty queue as its single entry. Consequently, this - call is only legal if SourceUnqueueBuffers is legal. - In particular, the Source has to be STOPPED or INITIAL. - The application is still obliged to delete all - buffers as were contained in the queue. - Sourcei( sname, BUFFER, NONE ) is a legal command, - effectively wiping the queue without specifying an - actually playable buffer. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Buffer Repetition)</title><para> - To accomplish a finite number of repetitions of a buffer name multiple times, - the buffer has to be queued multiple times. If the need occurs, the - API could be extended by SourceQueueBuffer( sname, bname, repetitions ) - call for brevity. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000806-04"><title>RFC: Duration of bName==0? </title><para> - The buffer is considered empty, it should have zero length, - thus zero duration for consistency. If an application wants to - schedule a pause, specifying duration for a gain==0 queue entry - might be a cleaner solution. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Backwards Compatiblity)</title><para> - Sourcei( sname, BUFFER, bname ) has been rejected as - a queueing command, as it would make semantics dependent on - source state (queueing if PLAYING, immediate else). - The command is not legal on a PLAYING or PAUSED Source. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (No BUFFER_QUEUE)</title><para> - Duplication of one entry point is preferable to - duplicating token enums, and tokens do not express - commands, but specify the attribute/state affected. - From the same reason, there is no BUFFER_UNQUEUE - token-as-command. - </para></note> - ]]> - - </sect3> - - <sect3> - <title>Unqueueing command</title> - <para> - Once a queue entry for a buffer has been appended to a queue - and is pending processing, it should not be changed. - Removal of a given queue entry is not possible unless - either the Source is STOPPED (in which case then entire queue - is considered processed), or if the queue entry has already - been processed (PLAYING or PAUSED Source). - </para> - <para> - The Unqueue command removes a number of buffers entries that - have finished processing, in the order of appearance, from - the queue. The operation will fail if more buffers are - requested than available, leaving the destination arguments - unchanged. An INVALID_VALUE error will be thrown. - If no error, the destination argument will have been updated - accordingly. - <funcsynopsis><funcprototype> - <funcdef> void <function> SourceUnqueueBuffers </function></funcdef> - <paramdef> &uint; <parameter> sourceName </parameter></paramdef> - <paramdef> &sizei; <parameter> numEntries </parameter></paramdef> - <paramdef> &uint;* <parameter> bufferNames </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - - <![ %Annote [ - <note><title>Annotation (Unqueueing shared buffers)</title><para> - If a buffer is queued with more than one source, it might have - been processed for some not all of them. With the current - interface, the application is forced to maintain its own list - of consumers (Sources) for a buffer it wishes to unqueue. - For groups of Sources that are never individually PAUSED - nor STOPPED, the application can save the MRU Source for - which the buffer was scheduled last. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Looping a Queue vs. Unqueue):</title><para> - If a Source is playing repeatedly, it will traverse - the entire Queue repeatedly. Consequently, no buffer - in the queue can be considered processed until - there is no further repetition scheduled. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (No Name based access)</title><para> - No interface is provided to access a queue entry by name, - due to ambiguity (same buffer name scheduled several times - in a sequence). - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (No Index based access)</title><para> - No interface is provided for random access to a queue entry - by index. - </para></note> - ]]> - </sect3> - - - - <![ %Annote [ - <sect3> - <title>More Annotation on Queueing</title> - - <![ %Annote [ - <note><title>Annotation (No Queue Copying)</title><para> - The current queue of a source could be copied to another source, - as repetition and traversal parameters are stored unless the - queue entry is unqueued, or the queue is replaced using - AL_BUFFER. Copying a queue is a special case of - copying Source state in one sense, and a special case of - a synching problem in another. Due to these unresolved issues - no such command is included in the current specification. - To share queues, the application can keep buffer names - and the selected attributes that define the queue entries - in an array or other lookup table. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (No Explicit QueueClear)</title><para> - Sourcei( sname, BUFFER, NONE ) serves the - same purpose. The operation is also redundant - with respect to Unqueue for a STOPPED Source. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Queueing vs. AppendData):</title><para> - Buffer queueing does not solve the synchronization and timing - issues raised by possible underflow, as these are inherent - to application-driven (pushed) streaming. However, it turns - an internal AL error condition (offset exceeds valid data) - into an audible artifact (Source stops). - Its main advantage is that it allows the application coder - to operate at a scale of her own choice, selecting the - number and size of buffers used for caching the stream, - and to schedule buffer refill and queueing according to - preferences and constraints. Queueing effectively moves - all problems related to replacing or appending Buffer data - to the scale of entire arrays istead of single samples and - indices. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Multiple Sources on a stream)</title><para> - Queueing allows for the application to determine how much of - a backlog of the data stream is preserved. The application can - keep buffers, and queue them with other Sources after they have - been used already by the original Source. Unlike the mechanism - for appending data to a buffer, the backlog is visible to the - application and under its control, and no synchronization of - Sources using the stream is required. - </para></note> - ]]> - - - - <![ %Annote [ - <note><title>Annotation (Loop Points and Compressed Data)</title><para> - For compressed data, uncompression by the application might be - impossible or undesireable. In consequence, splitting the sample - into several buffers is not possible without explicit support - by the API. Buffer-Buffer operations will be added as needed, - for the time being applications should not try to use compressed - samples if more than full looping is required. - </para></note> - ]]> - - - - <![ %Annote [ - <note><title>Annotation (No Explicit Queue Objects)</title><para> - Explicit Queue objects have been considered and rejected, - as they introduce another producer-consumer dependency with - another level of indirection. Further, e.g. QUEUE would - also require deprecating BUFFER (breaking backwards - compatibility) as an alSource argument, or would introduce - a confusing set of precedence and overide rules if both - are used in sequence. However, in the absence of explicit - queue objects the application will be forced to keep track - where buffers have been queued in case it intends to - unqueue them for refill or deletion. If several sources - use the same buffers (e.g. for synchronous or - asynchronous streaming) the buffer will have to be - unqueued from each single one. - </para></note> - ]]> - - - <![ %Scratch [ - <note><title>Annotation (Queue no Display List)</title><para> - An interface resembling &OGL; display-lists has been - considered and rejected. The problem with this approach - is that not only commands would have to be prohibited - (similarly, not all GL calls are legal within a display - list), but also parameters (enumerations). - - In particular, only a small set of operations is meant - to be legal for a queue at this point, and appending - to a queue has to be possible at any time. - Within a hypothetical AL display list, only relative - timing/conditionals are allowed as arguments. This - might necessitate to have multiple forms for deferred - commands, or to not allow for absolute timing. - - Example: - <literallayout> - // lock this queue for overwriting/appending - alBeginQueue( qname, APPEND | REPLACE ); - - // queue a buffer in sequence, with parameters - // boolean: never skip? never bail? - alQueue( AL_BUFFER, bid, loopdir, repetitions ); - ... - - // end lock. - // Existing queue content will be replaced - // or appended at this point. - alEndQueue(); - </literallayout> - </para></note> - ]]> - - - <![ %Example [ - <example> - <title>Queue Then Delete </title> - <programlisting> - - create source - queue buffer1 - queue buffer2 - queue buffer3 - play - request deletion of buffer1,2,3 - - </programlisting> - </example> - ]]> - - <![ %Example [ - <example> - <title> Queue and Refill with Dual Buffering</title> - <programlisting> - - create source - fill buffer1 - queue buffer1 - play - fill buffer2 - queue buffer2 - check for unused buffers - unqueue buffer1 - fill buffer1 - queue buffer1 - ... - - </programlisting> - </example> - ]]> - - <![ %Example [ - <example> - <title> Queue for Loop Points</title> - <programlisting> - - create source - read sample data - split sample data into pre/main/post - queue pre - queue main with repetitions - queue post - play - set repetitions to 0 on main when needed - wait till post has been played - - </programlisting> - </example> - ]]> - - </sect3> -]]> - -<![ %Scratch [ - <sect3> - <title>Attributes Specific to Queueing</title> - - <section> - <title>Buffer Traversal</title> - <para> - The Buffer traversal attribute specifies the direction - in which the sample in the buffer is supposed to be - processed. To account for the 3 basic modes of traversal that - can be implemented in software and hardware, the following - tokens are defined: - <literallayout> - LOOP_DIRECTION /* traversal direction */ - - FORWARD /* linear forward (increment) */ - BACKWARD /* linear backward (decrement) */ - FORWARD_AND_BACK /* RESERVED: ping-pong-looping */ - - </literallayout> - The first and the next two tokens are legal with a buffer queue command. - They are not legal for a Source command, in any possible - Source state. The last token is reserved, but not yet legal to use. - </para> - - - <![ %Annote [ - <note><title>Annotation (Ping-Pong postponed)</title><para> - Definition and implementation of ping-pong looping - has been postponed. Applications can fake it at doubling - memory expense by reverse copying the buffer (2nd buffer queued - or in a double size single buffer). If there is hardware support - for this feature, AL will have to support it eventually. A boolean - flag is not acceptable because of this possibility. - </para></note> - ]]> - </sect3> -]]> <!-- SCRATCH --> - - - </sect2> - - - - - - - <sect2> - <title>Managing Source Execution</title> - <para> - The execution state of a source can be queried. &AL; provides - a set of functions that initiate state transitions causing - Sources to start and stop execution. - </para> - <para> - TBA: State Transition Diagram. - </para> - - <![ %Annote [ - <note><title>Annotation/ Source Config/Exec State</title><para> - Sources have configuration state and execution state. - Configuration state is directly set by the application using - AL commands, starting with the INITIAL configuration. Execution - state (e.g. the offset to the current sample) is not under direct - application control and not exposed. - </para></note> - ]]> - - <sect3> - <title>Source State Query</title> - <para> - The application can query the current state of any Source - using GetSource with the parameter Name SOURCE_STATE. - Each Source can be in one of four possible execution states: - INITIAL, PLAYING, PAUSED, STOPPED. Sources that are either - PLAYING or PAUSED are considered active. Sources that are - STOPPED or INITIAL are considered inactive. Only PLAYING - Sources are included in the processing. The implementation - is free to skip those processing stages for Sources that - have no effect on the output (e.g. mixing for a Source - muted by zero GAIN, but not sample offset increments). - Depending on the current state of a Source certain (e.g. repeated) - state transition commands are legal NOPs: they will be ignored, - no error is generated. - </para> - </sect3> - - <sect3> - <title>State Transition Commands</title> - <para> - The default state of any Source is INITIAL. From this state - it can be propagated to any other state by appropriate use - of the commands below. There are no irreversible state - transitions. - <funcsynopsis><funcprototype> - <funcdef> void <function> SourcePlay </function></funcdef> - <paramdef> &uint; <parameter> sName </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> void <function> SourcePause </function></funcdef> - <paramdef> &uint; <parameter> sName </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> void <function> SourceStop </function></funcdef> - <paramdef> &uint; <parameter> sName </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> void <function> SourceRewind </function></funcdef> - <paramdef> &uint; <parameter> sName </parameter></paramdef> - </funcprototype></funcsynopsis> - - - </para> - <para> - The functions are also available as a vector variant, - which guarantees synchronized operation on a set of - Sources. - <funcsynopsis><funcprototype> - <funcdef> void <function> SourcePlayv </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> sNames </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> void <function> SourcePausev </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> sNames </parameter></paramdef> - </funcprototype></funcsynopsis> - <funcsynopsis><funcprototype> - <funcdef> void <function> SourceStopv </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> sNames </parameter></paramdef> - </funcprototype></funcsynopsis> - - <funcsynopsis><funcprototype> - <funcdef> void <function> SourceRewindv </function></funcdef> - <paramdef> &sizei; <parameter> n </parameter></paramdef> - <paramdef> &uint;* <parameter> sNames </parameter></paramdef> - </funcprototype></funcsynopsis> - - </para> - <para> - The following state/command/state transitions are defined: - <itemizedlist> - <listitem> - <para> - Play() applied to an INITIAL Source will promote the Source - to PLAYING, thus the data found in the Buffer will be fed - into the processing, starting at the beginning. - Play() applied to a PLAYING Source will restart the Source - from the beginning. It will not affect the configuration, - and will leave the Source in PLAYING state, but reset the - sampling offset to the beginning. - Play() applied to a PAUSED Source will - resume processing using the Source state - as preserved at the Pause() operation. - Play() applied to a STOPPED Source will propagate it - to INITIAL then to PLAYING immediately. - </para> - </listitem> - <listitem> - <para> - Pause() applied to an INITIAL Source is a legal NOP. - Pause() applied to a PLAYING Source will change its state to - PAUSED. The Source is exempt from processing, its current - state is preserved. - Pause() applied to a PAUSED Source is a legal NOP. - Pause() applied to a STOPPED Source is a legal NOP. - </para> - </listitem> - <listitem> - <para> - Stop() applied to an INITIAL Source is a legal NOP. - Stop() applied to a PLAYING Source will change its state to - STOPPED. The Source is exempt from processing, its current - state is preserved. - Stop() applied to a PAUSED Source will change its state - to STOPPED, with the same consequences as on a PLAYING - Source. - Stop() applied to a STOPPED Source is a legal NOP. - </para> - </listitem> - <listitem> - <para> - Rewind() applied to an INITIAL Source is a legal NOP. - Rewind() applied to a PLAYING Source will change its state to - STOPPED then INITIAL. The Source is exempt from processing: - its current state is preserved, with the exception of the - sampling offset, which is reset to the beginning. - Rewind() applied to a PAUSED Source will change its state - to INITIAL, with the same consequences as on a PLAYING - Source. - Rewind() applied to a STOPPED Source promotes the Source - to INITIAL, resetting the sampling offset to the beginning. - </para> - </listitem> - </itemizedlist> - </para> - - <![ %Annote [ - <note><title>Annotation (SourceNext)</title><para> - The specification does not provide any means to - immediately skip from the current Buffer to the - next in the queue. A conditional stop (following - the next complete traversal) is available. - If necessary an additonal entry point could be - provided in future revisions. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Rewind() optional)</title><para> - The INITIAL state is not identical to the STOPPED state. - Applications that want to verify whether a Source - has indeed been PLAYING before becoming STOPPED can - use Rewind() to reset the Source state to INITIAL. - This is an optional operation that can safely be - omitted by application without this constraint. - Applications that want to guard against Play() on - a Source that is INITIAL can query the Source state - first. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Play() on a PLAYING Source)</title><para> - Repeated Play() commands applied a PLAYING Source are - interpreted as an (atomic) sequence to stop and restart a - Source. This can be used by applications that want to restart - a sound but do not care whether the Source has finished or not, - and do not want an audible pause. One example is the DOOM - chaingun repeatedly abbreviating the pistol sound. To guard - against redundant Play() commands, an application can query - the current state before executing Play(). If the application - coder wants to be sure that the Source will play the buffer - again, she can either increment PLAY_COUNT, or queue the buffer. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (redundant commands)</title><para> - The simple variant (e.g. SourcePlay) is redundant to - the vector variant (e.g. SourcePlayv). However, these - calls will be used frequently, and the simple variant - is provided for convenience. However, &AL; does not - enable applications to use literals as source names. - </para></note> - ]]> - - </sect3> - - <sect3> - <title>Resetting Configuration</title> - <para> - The INITIAL state is not necessarily identical to the - default state in which Source is created. INITIAL merely - indicates that the Source can be executed using the - SourcePlay command. A STOPPED or INITIAL Source can - be reset into the default configuration by using a - sequence Source commands as necessary. As the application - has to specify all relevant state anyway to create a - useful Source configuration, no reset command is provided. - </para> - - - <![ %RFC [ - <note id="rfc-bk000802-01"><title>RFC: remove INITIAL</title><para> - INITIAL is identical to STOPPED. The only additional information - conveyed is that INITIAL indicates a source has never been played. - Once a Source is STOPPED, it is not possible by state query alone - to decide whether it has played again. If Sources are used only - once, an application can use INITIAL to verify a Source has been - played. - The problem that I have with this is that if we acknowledge that - the application might need to verify a Source has played once, - why force the application to throw away Sources to accomplish - this? An explicit state PLAYABLE replacing INITIAL and its - inauspicious connotations (default state) and a state transition - function Rewind() that makes a STOPPED Source PLAYABLE again would - be one possibility to address this need. The obvious drawback is - that it breaks backwards compatibility. - </para></note> - ]]> - - - <![ %RFC [ - <note id="rfc-bk000731-01"><title>RFC: state issues </title><para> - A Source is active if it is PAUSED or PLAYING. - - A Source that is STOPPED preserves configuration state, - including buffer/queue information. - - Only a Source that is Reset() to INITIAL looses all - buffer and queue information. In this case, the INITIAL - - Sources will be stopped implicitely when reaching the - end of a non-repeating (non-looping) buffer traversal. - Sources can be stopped explicitely by the application - with either Stop() or Reset(). - - Stop() propagates - the source to STOPPED preserving its configuration state, - setting its execution state to the same as if it reached - the end of execution. - - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (illegal NOPs)</title><para> - In the current specification there are no illegal NOPs. - In other words, no sequence of commands affecting the - execution state will generate an INVALID_OPERATION error. - </para></note> - ]]> - - - <![ %RFC [ - <note><title>RFC/bk000504:</title><para> - No UNDEFINED state. Always valid state. I.e. we have a default Buffer - that is used for sources where the application doesn't specify, - and what's in it? Default gain is zero? We need to specify - INITIAL. - </para></note> - - <note><title>RFC/bk000504:</title><para> - Potential ambiguity: how to we distinguish STOPPED as - requested by the application from INACTIVE for - non-looping sounds once the buffer has been iterated? - Related: handling of Sources using an underflowing - streaming buffer? IMO not recommended, make this - undefined on error. - </para></note> - - - <note><title>RFC/bk000504:</title><para> - Possible redundancy: the only reason for STOP seems to - be resetting the play positions. Redundant if we - ever manipulate offsets directly (rewind/set). - </para></note> - - <note><title>RFC/bk000504:</title><para> - Possible redundancy: - If we ever want to support explicit setting of the start - position/offset into Buffer, START is equivalent to Set(0). - Also see LOOP (implies has to be STOPPED). Fade-Out and - Fade-In control - always manually? - </para></note> - - ]]> - </sect3> - </sect2> - </sect1> - </chapter> - - diff --git a/neo/openal/docs/chp-state.sgml b/neo/openal/docs/chp-state.sgml deleted file mode 100644 index 8175a363..00000000 --- a/neo/openal/docs/chp-state.sgml +++ /dev/null @@ -1,730 +0,0 @@ - - <chapter id="state-requests"> - <title>State and State Requests</title> - <para> - The majority of &AL; state is associated with individual &AL; objects, - and has to be set and queried referencing the objects. However, some - state - e.g. processing errors - is - defined context specific. &AL; has global state that affects all - objects and processing equally. This state is set using a variety - of functions, and - can be queried using query functions. The majority of queries - has to use the interface described in "Simple Queries". - </para> - - - <sect1 id="state-query"> - <title>Querying &AL; State</title> - - - <sect2> - <title>Simple Queries</title> - <para> - Like &OGL;, &AL; uses a simplified interface for querying global - state. The following functions accept a set of enumerations. - <funcsynopsis><funcprototype> - <funcdef> void <function> GetBooleanv </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &bool;* <parameter> dest </parameter></paramdef> - </funcprototype></funcsynopsis> - - <funcsynopsis><funcprototype> - <funcdef> void <function> GetIntegerv </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> ∫* <parameter> dest </parameter></paramdef> - </funcprototype></funcsynopsis> - - <funcsynopsis><funcprototype> - <funcdef> void <function> GetFloatv </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &float;* <parameter> dest </parameter></paramdef> - </funcprototype></funcsynopsis> - - <funcsynopsis><funcprototype> - <funcdef> void <function> GetDoublev </function></funcdef> - <paramdef> &enum; <parameter> paramName </parameter></paramdef> - <paramdef> &double;* <parameter> dest </parameter></paramdef> - </funcprototype></funcsynopsis> - Legal values are e.g. DOPPLER_FACTOR, DOPPLER_VELOCITY, DISTANCE_MODEL. - </para> - <para> - NULL destinations are quietly ignored. INVALID_ENUM is the - response to errors in specifying paramName. The amount of memory - required in the destination depends on the actual state requested. - Usually, state variables are returned in only one or some of the - formats above. - </para> - <para> - To query state controlled by Enable/Disable there is an additional - IsEnabled function defined (see "Controlling &AL; Execution"). - </para> - - </sect2> - - <sect2> - <title>Data Conversions</title> - <para> - If a Get command is issued that returns value types different from - the type of the value being obtained, a type converswion is - performed. If GetBooleanv is called, a floating-point or integer - value converts to FALSE if and only if it is zero (otherwise - it converts to TRUE). If GetIntegerv is called, a boolean value - is interpreted as either 1 or 0, and a floating-point value is - rounded to the nearest integer. If GetFloatv is called, a boolean - value is interpreted as either 1.0 or 0.0, an integer is - coerced to floating point, and a double-presicion foating-point - value is converted to single precision. Analogous conversions are - carried out in the case of GetDoublev. If a value is so large - in magnitude that it cannot be represented with the requested - type, then the nearest value is representable using the requested - type is returned. - </para> - <![ %Annote [ - <note><title>Annotation (Query of Modes)</title><para> - Modes (e.g. the current distance model) can be queried - using the respective tokens. The recommended query - command is GetIntegerv. - </para></note> - ]]> - - </sect2> - - <sect2> - <title>String Queries</title> - <para> - The application can retrieve state information global to the current - &AL; Context. GetString will return a pointer to a constant string. - Valid values for param are VERSION, RENDERER, VENDOR, and EXTENSIONS, - as well as the error codes defined by &AL;. The application can - use GetString to retrieve a string for an error code. - <funcsynopsis><funcprototype> - <funcdef> const &ubyte;* <function> GetString </function></funcdef> - <paramdef> &enum; <parameter> paramName</parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - </sect2> - </sect1> - - - <sect1 id="time"> - <title>Time and Frequency</title> - <para> - By default, &AL; uses seconds and Hertz as units for - time and frequency, respectively. - A float or integral value of one - for a variable that specifies quantities like duration, - latency, delay, or any other parameter measured as time, - specifies 1 second. - For frequency, the basic unit is 1/second, or Hertz. - In other words, sample frequencies and frequency - cut-offs or filter parameters specifying frequencies - are expressed in units of Hertz. - </para> - - <![ %RFC [ - <note id="rfc-bk000927-01"><title>RFC: Query and Factor?</title><para> - Will time be an &AL; state that can be queried and scaled? - &AL; usually (always) implements a real-time - process with the constraint that it has to be - synchronized with the time as experienced by the user. - Do the units used with respect to time and frequency have - a fixed meaning? - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000803-03"><title>RFC: Setting Time/Long</title><para> - Given a frequency range from a few Hz to 50kHz or more, - we need a temporal resolution of 20 microseconds or less. - For simplicity that means we either resolve Milliseconds - and loose precision, or we resolve microseconds. - Applications might run hours or days, which is 10E5 seconds - or more. If we cover 12 orders of magnitude (10E6 to 10E-6) - 32bit unsigned integer will not suffice. Do we introduce - a 64 signed integer for the purpose of specifying time - over a duration of several days at microseconds resolution, - or do we use two 32bit integers, and how do we split them? - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000806-03"><title>RFC: Duration Query</title> - <para> - The application might want to cull Sources based on - how many milliseconds are left for their current buffer - or queue (either to stop those that will stop soon - anyway, or to stop those that will take too long, - depending). - </para> - <para> - We need to divorce sample (memory) count from duration, - because of compression and differences between - internal and external sample format. - </para> - <para> - Duration can be queried in microsecond resolution in - case we want to account for O(10Khz) sampling - frequencies properly, or milliseconds if we - do not anticipate the need to go beyond typical - operating system time resolution. - </para> - <para> - We need query as double, float, and possibly - long (as of now an undefined data type). - We might need an INVALID_RANGE error on the getter, - especially if large reptition counters can be set. - For paused source, the remainder will be the same - as for playing sources. The application can query - the Source State to find out the additional - information. INFINITE is not needed, - no is UNKNOWN as we operate on known - queues. - </para></note> - ]]> - - <![ %Scratch [ - <![ %Annote [ - <note><title>Annotation (Buffer vs. Queue Duration)</title><para> - Sourcel( sName , REMAINDER, &rem ) queries the remainder - for the current buffer (zero if the Source is STOPPED, - duration of the first buffer if the source is INITIAL). - Sourcel( sName, REMAINDER_QUEUE, &rem ) queries the remainder - of the entire queue. - A STOPPED Source has remainder==0. - An INITIAL Source has full remainder. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (DURATION vs. REMAINDER)</title><para> - DURATION is a buffer attribute independent of - execution state. REMAINDER is a Source attribute - that encapsulates part of the execution state. - Sources and Buffers should not share these attributes: - there is no Buffer REMAINDER and no Source DURATION. - </para></note> - ]]> - ]]> - </sect1> - - - - - <sect1 id="scaling"> - <title>Space and Distance</title> - <para> - &AL; does not define the units of measurement for distances. - The application is free to use meters, inches, or parsecs. - &AL; provides means for simulating the natural attenuation - of sound according to distance, and to exagerate or reduce - this effect. However, the resulting effects do not depend on - the distance unit used by the application to express source - and listener coordinates. &AL; calculations are scale - invariant. - </para> - <para> - The specification assumes Euclidean calculation of - distances, and mandates that if two Sources are - sorted with respect to the Euclidean metric, the - distance calculation used by the implementation has - to preserve that order. - </para> - - <![ %Annote [ - <note><title>Annotation (No DistanceFactor)</title><para> - &AL; does not provide a global, per Context DISTANCE_FACTOR, - as all calculations are scale invariant. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Distance Calculations)</title><para> - The specification does not enforce that distances - are calculated using the euclidean norm, to permit - using computationally cheaper approximations. - Implementations that opt to use approximations - might cause audible artifacts. The specification does - not enforce any upper limits on distance calculation - errors yet. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000915-02"><title>RFC: Limiting Errors</title><para> - Do we limit permissible errors on distance or gain - calculations? How much quality - and accuracy do we expect from conformant implementations? - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (DS3D DistanceFactor)</title><para> - The DS3D documentation explicitely states that the default - unit is 1 meter. &AL; does not specify any units. - &AL; calculations are scale invariant. The main purpose - of the DS3D DistanceFactor (modifying Doppler Shift - by scaling velocity but not reference velocity) is - accomplished using DOPPLER_VELOCITY in &AL;. &AL; - does not have an equivalent to A3D's SetUnitsPerMeter - either. - <!-- http://msdn.microsoft.com/library/psdk/directx/dsover_6jj8.htm --> - </para></note> - ]]> - </sect1> - - - - - <sect1 id="attenuation-by-distance"> - <title>Attenuation By Distance</title> - <para> - Samples usually use the entire dynamic range of the - chosen format/encoding, independent of their real world - intensity. In other words, a jet engine and a clockwork - both will have samples with full amplitude. The application - will then have to adjust Source GAIN accordingly to account - for relative differences. - </para> - <para> - Source GAIN is then attenuated by distance. - The effective attenuation of a Source depends on many - factors, among which distance attenuation and source - and Listener GAIN are only some of the contributing - factors. Even if the source and Listener GAIN exceed 1.0 - (amplification beyond the guaranteed dynamic range), - distance and other attenuation might ultimately limit - the overall GAIN to a value below 1.0. - </para> - <para> - &AL; currently supports three modes of operation - with respect to distance attenuation. It supports - two distance-dependent attenuation models, including one - that is similar to the IASIG I3DL2 (and DS3D) model. - The application chooses one of these two models (or - chooses to disable distance-dependent attenuation) - on a per-context basis. - <funcsynopsis><funcprototype> - <funcdef> void <function> DistanceModel </function></funcdef> - <paramdef> &enum; <parameter> modelName </parameter></paramdef> - </funcprototype></funcsynopsis> - Legal arguments are NONE, INVERSE_DISTANCE, and - INVERSE_DISTANCE_CLAMPED. NONE bypasses all distance - attenuation calculation for all Sources. The implementation - is expected to optimize this situation. INVERSE_DISTANCE_CLAMPED - is the DS3D model, with REFERENCE_DISTANCE indicating both the - reference distance and the distance below which gain will - be clamped. INVERSE_DISTANCE is equivalent to the DS3D model - with the exception that REFERENCE_DISTANCE does not imply any - clamping. The &AL; implementation is still free to apply - any range clamping as necessary. The current distance model - chosen can be queried using GetIntegerv and DISTANCE_MODEL. - </para> - - <![ %Annote [ - <note><title>Annotation (Inverse Square Law)</title><para> - The "inverse square law" used in physics applies to sound - intensity (energy), which is proportional to the square - of linear gain (amplitude). Thus the inverse distance model - describes a physically correct inverse square behavior - if ROLLOFF_FACTOR is set to 1.0. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Enable/Disable Attenuation)</title><para> - As ROLLOFF_FACTOR is a per-Source attribute, setting it to zero - can not be used to globally enable or disable distance - attenuation, which (e.g. when using tables) can be resource - intensive. Using Enable/Disable/IsEnabled with a DISTANCE_ATTENUATION - token is redundant with respect to the possibility that support - for different distance models might be desired at a later time. - </para></note> - ]]> - - - <sect2> - <title>Inverse Distance Rolloff Model</title> - <para> - The following formula describes the distance attenutation - defined by the Rolloff Attenutation Model, as logarithmic - calculation. - <literallayout> - - G_dB = GAIN - 20*log10(1 + ROLLOFF_FACTOR*(dist-REFERENCE_DISTANCE)/REFERENCE_DISTANCE ); - G_dB = min(G_dB,MAX_GAIN); - G_dB = max(G_dB,MIN_GAIN); - - </literallayout> - The REFERENCE_DISTANCE parameter used here is a per-Source attribute - that can be set and queried using the REFERENCE_DISTANCE token. - REFERENCE_DISTANCE is the distance at which the Listener will - experience GAIN (unless the implementation had to clamp effective - GAIN to the available dynamic range). - ROLLOFF_FACTOR is per-Source parameter the application can use - to increase or decrease the range of a source by decreasing - or increasing the attenuation, respectively. The default value - is 1. The implementation is free to optimize for a - ROLLOFF_FACTOR value of 0, which indicates that the application - does not wish any distance attenuation on the respective Source. - </para> - - <![ %Annote [ - <note><title>Annotation (Linear Calculation)</title><para> - The logarithmic formula above is equivalent to - <literallayout> - G = gain_linear / ( 1 + ROLLOFF_FACTOR*((dist-REFERENCE_DISTANCE)/REFERENCE_DISTANCE) ); - G = min(G,max_gain_linear); - G = max(G,min_gain_linear); - </literallayout> - with linear gains calculated from the logarithmic GAIN, - MIN_GAIN, MAX_GAIN accordingly. - By means of explanation: linear GAIN is applied to the sample, which describes - an amplitude ultimately (DAC) converted into voltage. The actual power of the - signal is proportional to the square of the amplitude (voltage). Logarithmic - measurement is done by comparing the actual power with a reference value, - i.e. the power (e.g in Watt) at the reference distance. The original Bel unit - of measure (named after Alexander Graham Bell) was defined to account for the - logarithmic response of the human ear: our subjective impression of "loudness" - is not linear in the power of the acoustic signal. For practical purposes (range - of volumes the human ear can handle) the deciBel (dB) is a better unit: - <literallayout> - dB = 10 * log( P/P0 ) = 10 * log( sqr(A/A0 ) = 20 * log( A/A0 ) - </literallayout> - Common power/amplitude ratios and attenuations per distance are: - <table> - <title>Logarithmic Scale and Gain</title> - <tgroup cols="4" align="left" colsep=1 rowsep=1> - <thead> - <row> - <entry>Distance</> - <entry>Attenuation</> - <entry>Power Ratio</> - <entry>Amplitude Ratio</> - </row> - </thead> - <tbody> - <row> - <entry>REF</> - <entry> 0dB </> - <entry> 1:1 </> - <entry> 1:1 </> - </row> - <row> - <entry> 2*REF </> - <entry> -6dB </> - <entry> 1:4 </> - <entry> 1:2 </> - </row> - <row> - <entry> 4*REF </> - <entry> -12dB </> - <entry> 1:16 </> - <entry> 1:4 </> - </row> - <row> - <entry> 8*REF </> - <entry> -18dB </> - <entry> 1:64 </> - <entry> 1:8 </> - </row> - <row> - <entry> 0.5*REF </> - <entry> 6dB </> - <entry> 2:1 </> - <entry> 4:1 </> - </row> - <row> - <entry> 0.25*REF </> - <entry> 12dB </> - <entry> 4:1 </> - <entry> 16:1 </> - </row> - - </tbody> - </tgroup> - </table> - The logarithmic gain will drop from zero (linear gain 1) to negative infinity - (approaching linear gain 0). A linear gain of zero can not be represented - logarithmically. Any doubling of the reference distance will add another - -6dB (i.e. 6dB of attenuation). This approximates an inverse square law falloff - of signal power with distance, as long as the distance exceeds the reference - distance. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Rolloff quantization)</title><para> - Implementations that use lookup tables to speed up - distance attenuation calculation may opt to map - ROLLOFF_FACTOR to a limited set of internally used - values, to minimize expense of per-Source calculations - and setup/memory costs. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (Gain Clamping)</title><para> - In the absence of user MIN_GAIN and MAX_GAIN selections, - clamping is implied by implementation constraints, and - clamping behavior might change. - The &AL; implementation should not clamp intermediate - values of effective gain to unit range. - Any clamping, if necessary, should be applied at the latest - possible stage. In other words, GAIN>1 is perfectly - valid as the implementation is free to clamp the value as - needed for maximum mixing accuracy and to account for the - actual dynamic range of the output device. - </para></note> - ]]> - - - <![ %Annote [ - <note><title>Annotation (Extended Dynamic Range)</title><para> - For applications that - change GAIN but do not want to adjust ROLLOFF_FACTOR - and REFERENCE_DISTANCE to account for different ranges, - the separation in this distance model might allow for - more intuitive adjustments: - If we put a damper on the jet engine by lowering GAIN, - we still want the listener to perceive the full volume, - but now at a closer distance, without changing the - reference distance. - </para></note> - ]]> - </sect2> - - <sect2> - <title>Inverse Distance Clamped Model</title> - <para> - This is essentially the Inverse Distance model, - extended to guarantee that for distances below - REFERENCE_DISTANCE, gain is clamped. This mode - is equivalent to the IASIG I3DL2 (and DS3D) distance - model. - <literallayout> - dist = max(dist,REFERENCE_DISTANCE); - dist = min(dist,MAX_DISTANCE); - G_dB = GAIN - 20*log10(1 + ROLLOFF_FACTOR*(dist-REFERENCE_DISTANCE)/REFERENCE_DISTANCE ) - G_dB = min(G_dB,MAX_GAIN); - G_dB = max(G_dB,MIN_GAIN); - </literallayout> - </para> - - - <![ %Annote [ - <note><title>Annotation (DS3D MIN_DISTANCE)</title><para> - The DS3D attenuation model is extended by an explicit - clamping mechanism. REFERENCE_DISTANCE is equivalent - to DS3D MIN_DISTANCE if the INVERSE_DISTANCE_CLAMPED - mode is used. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (High Frequency Rolloff)</title><para> - To simulate different atmospheric conditions, a frequency - dependent attenuation is used in A3D and EAX. - At this time &AL; does not have a mechanism to specify - lowpass filtering parameterized by distance. - </para></note> - ]]> - </sect2> - </sect1> - - - <sect1 id="order-distance"> - <title>Evaluation of Gain/Attenuation Related State</title> - <para> - While amplification/attenuation commute (mulplication of - scaling factors), clamping operations do not. The order - in which various gain related operations are applied is: - Distance attenuation is calculated first, including - minimum (REFERENCE_DISTANCE) and maximum (MAX_DISTANCE) - thresholds. If the Source is directional (CONE_INNER_ANGLE - less than CONE_OUTER_ANGLE), an angle-dependent attenuation - is calculated depending on CONE_OUTER_GAIN, and multiplied - with the distance dependent attenuation. - The resulting attenuation factor for the given angle and - distance between Listener and Source is multiplied - with Source GAIN. The effective GAIN computed this way - is compared against MIN_GAIN and MAX_GAIN thresholds. - The result is guaranteed to be clamped to [MIN_GAIN, MAX_GAIN], - and subsequently multiplied by Listener GAIN which serves - as an overall volume control. The implementation is free - to clamp Listener GAIN if necessary due to hardware or - implementation constraints. - </para> - </sect1> - - - - <sect1 id="culling-by-distance"> - <title>No Culling By Distance</title> - <para> - With the DS3D compatible Inverse Clamped Distance Model, - &AL; provides a per-Source MAX_DISTANCE attribute - that can be used to define a distance beyond which the Source will - not be further attenuated by distance. - The DS3D distance attenuation model and its clamping of volume - is also extended by a mechanism to cull (mute) sources from proccessing, - based on distance. However, &AL; does not - support culling a Source from processing based on a distance - threshold. - </para> - <para> - At this time &AL; is not meant to support culling at all. Culling - based on distance, or bounding volumes, or other criteria, is best - left to the application. For example, the application might - employ sophisticated techniques to determine whether sources - are audible that are beyond the scope of &AL;. In particular, - rule based culling inevitably introduces acoustic artifacts. - E.g. if the Listener-Source distance is nearly equal to the - culling threshold distance, but varies above and below, there - will be popping artifacts in the absence of hysteresis. - </para> - - <![ %Annote [ - <note><title>Annotation (No MAX_DISTANCE plus MUTE)</title><para> - &AL; does support the AUDIBLE mode with MAX_DISTANCE (clamping), - but does not support culling. Applications that employ this - DS3D feature will have to perform their own distance calculation - and mute the source (Source GAIN equals zero) as desired. - </para></note> - ]]> - - <![ %RFC [ - <note id="rfc-bk000803-07"><title>RFC: DS3D-like Extension</title><para> - For ease of portability, should we define an Extension that - provides MAX_DISTANCE for MUTE mode? - </para></note> - ]]> - </sect1> - - - - <![ %Scratch [ - <sect1 id="sound-speed"> - <title>NO Sound Propagation Speed</title> - <para> - &AL; implementations can choose to model sound propagation with - limited speed for certain effects, e.g. early reflections. - In addition, the Doppler Effect is defined with respect to the - speed of sound in the predominant medium. The application can - set the speed of sound as a scalar value. The speed is defined - with respect to the scaled unit. If D I S T A N C E _ S C A L E is changed, - this will affect both the distance and the propagation speed, - leaving the propagation time unaffected. - <funcsynopsis><funcprototype> - <funcdef> void <function> PropagationSpeed </function></funcdef> - <paramdef> &float; <parameter> propSpeed </parameter></paramdef> - </funcprototype></funcsynopsis> - </para> - <para> - A negative scale will result in an INVALID_VALUE error, the - command is then ignored. The default value is 1. The current - setting can be queried using GetFloatv and PROPAGATION_SPEED. - </para> - </sect1> - ]]> - - <sect1 id="doppler-scale"> - <title>Velocity Dependent Doppler Effect</title> - <para> - The Doppler Effect depends on the velocities of Source and - Listener relative to the medium, and the propagation speed - of sound in that medium. The application might want to - emphasize or de-emphasize the Doppler Effect as physically - accurate calculation might not give the desired results. The - amount of frequency shift (pitch change) is proportional - to the speed of listener and source along their line of - sight. The application can increase or decrease that - frequency shift by specifying the scaling factor &AL; - should apply to the result of the calculation. - </para> - <para> - The Doppler Effect as implemented by &AL; is described - by the formula below. Effects of the medium (air, water) - moving with respect to listener and source are ignored. - DOPPLER_VELOCITY is the propagation speed relative to - which the Source velocities are interpreted. - <literallayout> - VD: DOPPLER_VELOCITY - DF: DOPPLER_FACTOR - vl: Listener velocity (scalar, projected on source-listener vector) - vs: Source velocity (scalar, projected on source-listener vector) - f: Frequency of sample - f': effective Doppler shifted frequency - - f' = DF * f * (VD-vl)/(VD+vs) - - vl<0, vs>0 : source and listener approaching each other - vl>0, vs<0 : source and listener moving away from each other - </literallayout> - The implementation has to clamp the projected Listener - velocity vl, if abs(vl) is greater or equal to VD. It similarly has to - clamp the projected Source velocity vs if abs(vs) is greater or equal - to VD. - </para> - <para> - There are two API calls global to the current context that provide - control of the two related parameters. DOPPLER_FACTOR is a simple - scaling to exaggerate or deemphasize the Doppler (pitch) shift - resulting from the calculation. - <funcsynopsis><funcprototype> - <funcdef> void <function> DopplerFactor </function></funcdef> - <paramdef> &float; <parameter> dopplerFactor </parameter></paramdef> - </funcprototype></funcsynopsis> - A negative value will result in an INVALID_VALUE error, the - command is then ignored. The default value is 1. The current - setting can be queried using GetFloatv and DOPPLER_FACTOR. - The implementation is free to optimize the case of DOPPLER_FACTOR - being set to zero, as this effectively disables the effect. - </para> - - <![ %Annote [ - <note><title>Annotation (No Enable)</title><para> - There is currently no mechanism to switch on/off Doppler - calculation using e.g. a DOPPLER_SHIFT token and Enable/Disable. - For the time being, DopplerFactor(0) may be used to signal - to the implementation that no Doppler Effect calculation is - required. - </para></note> - ]]> - - <para> - DOPPLER_VELOCITY allows the application to change the - reference (propagation) velocity used in the Doppler Effect - calculation. This permits the application to use a velocity - scale appropriate to its purposes. - <funcsynopsis><funcprototype> - <funcdef> void <function> DopplerVelocity </function></funcdef> - <paramdef> &float; <parameter> dopplerVelocity</parameter></paramdef> - </funcprototype></funcsynopsis> - A negative or zero value will result in an INVALID_VALUE error, and the - command is ignored. The default value is 1. - The current setting can be queried using GetFloatv and DOPPLER_VELOCITY. - </para> - - <![ %Annote [ - <note><title>Annotation (No Sideeffects on Delay)</title><para> - To permit independent control of Doppler Effect as opposed - to other, sound wave propagation related effects (delays, - echos, reverberation), DOPPLER_VELOCITY is not taken into - account for any other calculation than Doppler Shift. - </para></note> - ]]> - - <![ %Annote [ - <note><title>Annotation (SetUnitsPerMeter)</title><para> - DOPPLER_VELOCITY accomplishes the purposes of DS3D - scaling parameters in a straightforward way, without - introducing the undesirable connotations of real world - units. - </para></note> - ]]> - </sect1> - - </chapter> - diff --git a/neo/openal/docs/ent-examples.sgml b/neo/openal/docs/ent-examples.sgml deleted file mode 100644 index 24957738..00000000 --- a/neo/openal/docs/ent-examples.sgml +++ /dev/null @@ -1,5 +0,0 @@ - - <!NOTATION ASCII system "ASCII" > - <!ENTITY sample.c system "examples/init_al.c" CDATA CGM-CHAR> - <!ENTITY ExInitAL.c system "examples/init_al.c" CDATA ASCII > - \ No newline at end of file diff --git a/neo/openal/docs/ent-extensions.sgml b/neo/openal/docs/ent-extensions.sgml deleted file mode 100644 index c4acd939..00000000 --- a/neo/openal/docs/ent-extensions.sgml +++ /dev/null @@ -1,3 +0,0 @@ - - <!-- ENTITY ExtLoopPoint.txt system "extensions/ext-loop-point.txt" CDATA linespecific --> - \ No newline at end of file diff --git a/neo/openal/docs/ent-marks-annotated.sgml b/neo/openal/docs/ent-marks-annotated.sgml deleted file mode 100644 index 2cbe4d35..00000000 --- a/neo/openal/docs/ent-marks-annotated.sgml +++ /dev/null @@ -1,12 +0,0 @@ - - - <!-- Annotated Specification Target --> - <!ENTITY % Level1 "INCLUDE" > <!-- Reference --> - <!ENTITY % Level2 "INCLUDE" > <!-- Specification --> - <!ENTITY % RFC "IGNORE" > <!-- Specification Draft --> - <!ENTITY % Annote "INCLUDE" > <!-- Annotation --> - <!ENTITY % Ext1 "INCLUDE" > <!-- ARB EXTensions --> - <!ENTITY % Ext2 "INCLUDE" > <!-- Vendor EXTensions (if applicable) --> - <!ENTITY % Example "IGNORE" > <!-- Example Code Vendor EXTensions --> - <!ENTITY % Revision "IGNORE" > <!-- CVS Revision History Tags (per-file) --> - <!ENTITY % Scratch "IGNORE" > <!-- Internal working notes/tmeporary --> diff --git a/neo/openal/docs/ent-marks-full.sgml b/neo/openal/docs/ent-marks-full.sgml deleted file mode 100644 index eb5515ac..00000000 --- a/neo/openal/docs/ent-marks-full.sgml +++ /dev/null @@ -1,12 +0,0 @@ - - - <!-- Annotated Specification Target --> - <!ENTITY % Level1 "INCLUDE" > <!-- Reference --> - <!ENTITY % Level2 "INCLUDE" > <!-- Specification --> - <!ENTITY % RFC "INCLUDE" > <!-- Specification Draft --> - <!ENTITY % Annote "INCLUDE" > <!-- Annotation --> - <!ENTITY % Ext1 "INCLUDE" > <!-- ARB EXTensions --> - <!ENTITY % Ext2 "INCLUDE" > <!-- Vendor EXTensions (if applicable) --> - <!ENTITY % Example "INCLUDE" > <!-- Example Code Vendor EXTensions --> - <!ENTITY % Revision "IGNORE" > <!-- CVS Revision History Tags (per-file) --> - <!ENTITY % Scratch "IGNORE" > <!-- Internal working notes/tmeporary --> diff --git a/neo/openal/docs/ent-marks-reference.sgml b/neo/openal/docs/ent-marks-reference.sgml deleted file mode 100644 index bb34d5e5..00000000 --- a/neo/openal/docs/ent-marks-reference.sgml +++ /dev/null @@ -1,12 +0,0 @@ - - - <!-- Reference Target ---> - <!ENTITY % Level1 "INCLUDE" > <!-- Reference --> - <!ENTITY % Level2 "INCLUDE" > <!-- Specification --> - <!ENTITY % RFC "IGNORE" > <!-- Specification Draft --> - <!ENTITY % Annote "IGNORE" > <!-- Annotation --> - <!ENTITY % Ext1 "INCLUDE" > <!-- ARB EXTensions --> - <!ENTITY % Ext2 "INCLUDE" > <!-- Vendor EXTensions (if applicable) --> - <!ENTITY % Example "IGNORE" > <!-- Example Code Vendor EXTensions --> - <!ENTITY % Revision "IGNORE" > <!-- CVS Revision History Tags (per-file) --> - <!ENTITY % Scratch "IGNORE" > <!-- Internal working notes/tmeporary --> diff --git a/neo/openal/docs/ent-marks-specification.sgml b/neo/openal/docs/ent-marks-specification.sgml deleted file mode 100644 index f68660ae..00000000 --- a/neo/openal/docs/ent-marks-specification.sgml +++ /dev/null @@ -1,12 +0,0 @@ - - - <!-- Specification Target --> - <!ENTITY % Level1 "INCLUDE" > <!-- Reference --> - <!ENTITY % Level2 "INCLUDE" > <!-- Specification --> - <!ENTITY % RFC "IGNORE" > <!-- Specification Draft --> - <!ENTITY % Annote "IGNORE" > <!-- Annotation --> - <!ENTITY % Ext1 "INCLUDE" > <!-- ARB EXTensions --> - <!ENTITY % Ext2 "INCLUDE" > <!-- Vendor EXTensions (if applicable) --> - <!ENTITY % Example "IGNORE" > <!-- Example Code Vendor EXTensions --> - <!ENTITY % Revision "IGNORE" > <!-- CVS Revision History Tags (per-file) --> - <!ENTITY % Scratch "IGNORE" > <!-- Internal working notes/tmeporary --> diff --git a/neo/openal/docs/ent-names.sgml b/neo/openal/docs/ent-names.sgml deleted file mode 100644 index 9da1b979..00000000 --- a/neo/openal/docs/ent-names.sgml +++ /dev/null @@ -1,43 +0,0 @@ - - <!ENTITY coLoki "Loki Software" > - <!ENTITY coCreat "Creative Labs" > - <!ENTITY OAL "OpenAL" > - <!ENTITY AL "AL" > - - <!ENTITY OGL "OpenGL" > - - <!ENTITY NONE "NONE" > - <!ENTITY TRUE "TRUE" > - <!ENTITY FALSE "FALSE" > - <!ENTITY NaN "NaN" > - <!ENTITY Infty "Infinity" > - <!ENTITY type "T " > - <!ENTITY void "void " > - <!ENTITY bool "boolean " > - <!ENTITY byte "byte " > - <!ENTITY ubyte "ubyte " > - <!ENTITY short "short " > - <!ENTITY ushort "ushort " > - <!ENTITY int "int " > - <!ENTITY uint "uint " > - - <!ENTITY long "long " > - <!ENTITY ulong "ulong " > - - <!ENTITY enum "enum " > - <!ENTITY sizei "sizei " > - <!ENTITY bitfield "bitfield " > - <!ENTITY float "float " > - <!ENTITY double "double " > - <!ENTITY clampf "clampf " > - <!ENTITY clampd "clampd " > - - <!-- ALC Context --> - <!ENTITY device "ALCdevice" > - <!ENTITY context "ALCcontext" > - - <!ENTITY Par "Name" > <!-- enum as well as identifier --> - <!ENTITY Sig "Signature" > <!-- legal types --> - <!ENTITY Val "Values" > <!-- legal values/ranges --> - <!ENTITY Def "Default" > <!-- default value --> - diff --git a/neo/openal/docs/index.html b/neo/openal/docs/index.html deleted file mode 100644 index d4060d1c..00000000 --- a/neo/openal/docs/index.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<html> - -<head> -<title> Index</title> -</head> - -<body> - -<h1>Index</h1> -<p> - This document has been removed. - See <a href="http://www.openal.org/">www.openal.org</a> - for information. -</p> - -</body> -</html> - - -</html> diff --git a/neo/openal/docs/oalspecs.sgml b/neo/openal/docs/oalspecs.sgml deleted file mode 100644 index fb8d3b3f..00000000 --- a/neo/openal/docs/oalspecs.sgml +++ /dev/null @@ -1,109 +0,0 @@ -<!DOCTYPE Book PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[ - - <!-- INCLUDE or IGNORE for marked sections --> - <!ENTITY % Marks system "ent-marks.sgml" > - - <!-- keywords and other standard entities --> - <!ENTITY % Entities system "ent-names.sgml" > - - <!-- C programs and other example entities --> - <!ENTITY % Examples system "ent-examples.sgml" > - - <!-- Extensions as external ASCII documents --> - <!ENTITY % Extensions system "ent-extensions.sgml" > - - %Marks; - %Entities; - %Examples; - %Extensions; - - <!-- book sections --> - <!ENTITY CREDITS system "../CREDITS" > - <!ENTITY secBookInfo system "sec-bookinfo.sgml" > - <!ENTITY chpIntroduction system "chp-introduction.sgml" > - <!ENTITY chpOperation system "chp-operation.sgml" > - <!ENTITY chpState system "chp-state.sgml" > - <!ENTITY chpRendering system "chp-rendering.sgml" > - <!ENTITY chpBuffers system "chp-buffers.sgml" > - <!ENTITY chpQueueing system "chp-queueing.sgml" > - <!ENTITY chpMultiChannel system "chp-multichannel.sgml" > - - <!ENTITY alcContext system "alc-context.sgml" > - - <!ENTITY appConstants system "app-constants.sgml" > - <!ENTITY appExtensions system "app-extensions.sgml" > - <!ENTITY appExtensionProcess system "app-extensionprocess.sgml" > - <!ENTITY appAnnotations system "app-annotations.sgml" > - - - - <!-- misc. specifics --> - <!ENTITY DocVersion "1.0 (draft)" > - <!ENTITY DocDate "2000/10/10" > - <!ENTITY ALVersion "1.0" > - <!ENTITY ALCVersion "1.0" > -]> - - -<!-- INDEX --> - -<book id="index"> - -<!-- HEADING --> - &secBookInfo; - -<!-- INTRODUCTION --> - &chpIntroduction; - -<!-- CHAPTERS --> - &chpOperation; - &chpState; - &chpRendering; - &chpBuffers; - &chpQueueing; - -<![ %Scratch [ - &chpMultiChannel; -]]> - - &alcContext; - -<!-- APPENDICITIS [sic] --> - - &appConstants; - &appExtensions; - &appExtensionProcess; - -<![ %Scratch [ - &appAnnotations; -]]> - - -<![ %Revision [ - <appendix> - <title>Main Document CVS Revision History</title> - <para><literallayout> - CVS Document: $Id: oalspecs.sgml,v 1.15 2000/11/10 23:10:44 bk Exp $ - CVS Revision: $Revision: 1.15 $ - - $Log: oalspecs.sgml,v $ - Revision 1.15 2000/11/10 23:10:44 bk - Cleanup. - - Revision 1.14 2000/11/04 00:11:40 bk - Maintenance update - - Revision 1.13 2000/10/26 03:01:55 bk - Fixed typo for ALC entity. - - Revision 1.12 2000/10/26 02:59:46 bk - External entities. - - </literallayout><para> - </appendix> -]]> - - - -</book> - diff --git a/neo/openal/docs/sec-bookinfo.sgml b/neo/openal/docs/sec-bookinfo.sgml deleted file mode 100644 index 26b3b7a6..00000000 --- a/neo/openal/docs/sec-bookinfo.sgml +++ /dev/null @@ -1,53 +0,0 @@ - - <bookinfo> - <title> - &OAL; Specification and Reference - </title> -<!-- - <editor> - <firstname>Bernd</firstname> - <surname>Kreimeier</surname> - </editor> - --> - - <edition>Version 1.0 Draft</edition> - - <pubdate>June 2000</pubdate> - <copyright> - <year>1999-2000</year> - <holder>Loki Software</holder> - </copyright> - - <legalnotice> - <para> - Permission is granted to make and distribute verbatim copies of this - manual provided the copyright notice and this permission notice are - preserved on all copies. - </para> - </legalnotice> - <legalnotice> - <para> - Permission is granted to copy and distribute translations of this - manual into another language, under the above conditions for modified - versions, except that this permission notice may be stated in a - translation approved by the copyright owners. - </para> - </legalnotice> - <legalnotice> - <para> UNIX is a trademark of X/Open Group.</para> - <para> X Window System is a trademark of X Consortium, Inc.</para> - <para> Linux is a trademark of Linus Torvalds.</para> - <para> Windows is a trademark of Microsoft Corp.</para> - <para> Macintosh and Apple are trademarks of Apple Computer, Inc.</para> - <para> Loki and &OAL; are trademarks of Loki Software, Inc.</para> - <para> All other trademarks are property of their respective owners.</para> - </legalnotice> - - <releaseinfo> - Draft document of &OAL; Specification. - </releaseinfo> - - - - </bookinfo> - \ No newline at end of file diff --git a/neo/openal/docs/specification.html b/neo/openal/docs/specification.html deleted file mode 100644 index 0d51804b..00000000 --- a/neo/openal/docs/specification.html +++ /dev/null @@ -1,18 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<html> - -<head> -<title>OpenAL Specification</title> -</head> - -<body> - -<h1>OpenAL Specification</h1> -<p> - This document has been removed. - See <a href="index.html">Index</a> - for the specification. -</p> - -</body> -</html> diff --git a/neo/openal/docs/white-paper.html b/neo/openal/docs/white-paper.html deleted file mode 100644 index 3c763541..00000000 --- a/neo/openal/docs/white-paper.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<html> - <head> - <title>OpenAL Whitepaper</title> - </head> - - <body> - <h1>OpenAL Whitepaper</h1> - <p> - This document has been removed. - See <a href="index.html">Index</a> - for the specification. - </p> - - </body> -</html> diff --git a/neo/openal/include/al.h b/neo/openal/include/al.h deleted file mode 100644 index 8c4f1202..00000000 --- a/neo/openal/include/al.h +++ /dev/null @@ -1,491 +0,0 @@ -#ifndef _AL_H_ -#define _AL_H_ - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ -#include "altypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 - #ifdef _OPENAL32LIB - #define ALAPI __declspec(dllexport) - #else - #define ALAPI __declspec(dllimport) - #endif - #define ALAPIENTRY __cdecl - #define AL_CALLBACK -#else - #ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export on - #endif - #endif - #define ALAPI - #define ALAPIENTRY __cdecl - #define AL_CALLBACK -#endif - -#define OPENAL - -#ifndef AL_NO_PROTOTYPES - -/** - * OpenAL Maintenance Functions - * Initialization and exiting. - * State Management and Query. - * Error Handling. - * Extension Support. - */ - -/** State management. */ -ALAPI ALvoid ALAPIENTRY alEnable( ALenum capability ); -ALAPI ALvoid ALAPIENTRY alDisable( ALenum capability ); -ALAPI ALboolean ALAPIENTRY alIsEnabled( ALenum capability ); - -/** Application preferences for driver performance choices. */ -ALAPI ALvoid ALAPIENTRY alHint( ALenum target, ALenum mode ); - -/** State retrieval. */ -ALAPI ALboolean ALAPIENTRY alGetBoolean( ALenum param ); -ALAPI ALint ALAPIENTRY alGetInteger( ALenum param ); -ALAPI ALfloat ALAPIENTRY alGetFloat( ALenum param ); -ALAPI ALdouble ALAPIENTRY alGetDouble( ALenum param ); -ALAPI ALvoid ALAPIENTRY alGetBooleanv( ALenum param, ALboolean* data ); -ALAPI ALvoid ALAPIENTRY alGetIntegerv( ALenum param, ALint* data ); -ALAPI ALvoid ALAPIENTRY alGetFloatv( ALenum param, ALfloat* data ); -ALAPI ALvoid ALAPIENTRY alGetDoublev( ALenum param, ALdouble* data ); -ALAPI ALubyte* ALAPIENTRY alGetString( ALenum param ); - -/** - * Error support. - * Obtain the most recent error generated in the AL state machine. - */ -ALAPI ALenum ALAPIENTRY alGetError( ALvoid ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALboolean ALAPIENTRY alIsExtensionPresent( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALvoid* ALAPIENTRY alGetProcAddress( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the integer value of an enumeration (usually an extension) with the name ename. - */ -ALAPI ALenum ALAPIENTRY alGetEnumValue( ALubyte* ename ); - - - - -/** - * LISTENER - * Listener is the sample position for a given context. - * The multi-channel (usually stereo) output stream generated - * by the mixer is parametrized by this Listener object: - * its position and velocity relative to Sources, within - * occluder and reflector geometry. - */ - - - -/** - * - * Listener Environment: default 0. - */ -ALAPI ALvoid ALAPIENTRY alListeneri( ALenum param, ALint value ); - - -/** - * - * Listener Gain: default 1.0f. - */ -ALAPI ALvoid ALAPIENTRY alListenerf( ALenum param, ALfloat value ); - - -/** - * - * Listener Position. - * Listener Velocity. - */ -ALAPI ALvoid ALAPIENTRY alListener3f( ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); - - -/** - * - * Listener Position: ALfloat[3] - * Listener Velocity: ALfloat[3] - * Listener Orientation: ALfloat[6] (forward and up vector). - */ -ALAPI ALvoid ALAPIENTRY alListenerfv( ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY alGetListeneri( ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY alGetListenerf( ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY alGetListener3f( ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 ); -ALAPI ALvoid ALAPIENTRY alGetListenerfv( ALenum param, ALfloat* values ); - - -/** - * SOURCE - * Source objects are by default localized. Sources - * take the PCM data provided in the specified Buffer, - * apply Source-specific modifications, and then - * submit them to be mixed according to spatial - * arrangement etc. - */ - - - -/** Create Source objects. */ -ALAPI ALvoid ALAPIENTRY alGenSources( ALsizei n, ALuint* sources ); - -/** Delete Source objects. */ -ALAPI ALvoid ALAPIENTRY alDeleteSources( ALsizei n, ALuint* sources ); - -/** Verify a handle is a valid Source. */ -ALAPI ALboolean ALAPIENTRY alIsSource( ALuint id ); - -/** Set an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY alSourcei( ALuint source, ALenum param, ALint value ); -ALAPI ALvoid ALAPIENTRY alSourcef( ALuint source, ALenum param, ALfloat value ); -ALAPI ALvoid ALAPIENTRY alSource3f( ALuint source, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); -ALAPI ALvoid ALAPIENTRY alSourcefv( ALuint source, ALenum param, ALfloat* values ); - -/** Get an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY alGetSourcei( ALuint source, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY alGetSourcef( ALuint source, ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY alGetSource3f( ALuint source, ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 ); -ALAPI ALvoid ALAPIENTRY alGetSourcefv( ALuint source, ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY alSourcePlayv( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY alSourcePausev( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY alSourceStopv( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY alSourceRewindv(ALsizei n,ALuint *sources); - -/** Activate a source, start replay. */ -ALAPI ALvoid ALAPIENTRY alSourcePlay( ALuint source ); - -/** - * Pause a source, - * temporarily remove it from the mixer list. - */ -ALAPI ALvoid ALAPIENTRY alSourcePause( ALuint source ); - -/** - * Stop a source, - * temporarily remove it from the mixer list, - * and reset its internal state to pre-Play. - * To remove a Source completely, it has to be - * deleted following Stop, or before Play. - */ -ALAPI ALvoid ALAPIENTRY alSourceStop( ALuint source ); - -/** - * Rewinds a source, - * temporarily remove it from the mixer list, - * and reset its internal state to pre-Play. - */ -ALAPI ALvoid ALAPIENTRY alSourceRewind( ALuint source ); - - - -/** - * BUFFER - * Buffer objects are storage space for sample data. - * Buffers are referred to by Sources. There can be more than - * one Source using the same Buffer data. If Buffers have - * to be duplicated on a per-Source basis, the driver has to - * take care of allocation, copying, and deallocation as well - * as propagating buffer data changes. - */ - - - - -/** Buffer object generation. */ -ALAPI ALvoid ALAPIENTRY alGenBuffers( ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY alDeleteBuffers( ALsizei n, ALuint* buffers ); -ALAPI ALboolean ALAPIENTRY alIsBuffer( ALuint buffer ); - -/** - * Specify the data to be filled into a buffer. - */ -ALAPI ALvoid ALAPIENTRY alBufferData( ALuint buffer, - ALenum format, - ALvoid* data, - ALsizei size, - ALsizei freq ); - - -ALAPI ALvoid ALAPIENTRY alGetBufferi( ALuint buffer, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY alGetBufferf( ALuint buffer, ALenum param, ALfloat* value ); - - - - -/** - * Queue stuff - */ - -ALAPI ALvoid ALAPIENTRY alSourceQueueBuffers( ALuint source, ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY alSourceUnqueueBuffers( ALuint source, ALsizei n, ALuint* buffers ); - -/** - * Knobs and dials - */ -ALAPI ALvoid ALAPIENTRY alDistanceModel( ALenum value ); -ALAPI ALvoid ALAPIENTRY alDopplerFactor( ALfloat value ); -ALAPI ALvoid ALAPIENTRY alDopplerVelocity( ALfloat value ); - -#else /* AL_NO_PROTOTYPES */ - -/** - * OpenAL Maintenance Functions - * Initialization and exiting. - * State Management and Query. - * Error Handling. - * Extension Support. - */ - -/** State management. */ -ALAPI ALvoid ALAPIENTRY (*alEnable)( ALenum capability ); -ALAPI ALvoid ALAPIENTRY (*alDisable)( ALenum capability ); -ALAPI ALboolean ALAPIENTRY (*alIsEnabled)( ALenum capability ); - -/** Application preferences for driver performance choices. */ -ALAPI ALvoid ALAPIENTRY (*alHint)( ALenum target, ALenum mode ); - -/** State retrieval. */ -ALAPI ALboolean ALAPIENTRY (*alGetBoolean)( ALenum param ); -ALAPI ALint ALAPIENTRY (*alGetInteger)( ALenum param ); -ALAPI ALfloat ALAPIENTRY (*alGetFloat)( ALenum param ); -ALAPI ALdouble ALAPIENTRY (*alGetDouble)( ALenum param ); -ALAPI ALvoid ALAPIENTRY (*alGetBooleanv)( ALenum param, ALboolean* data ); -ALAPI ALvoid ALAPIENTRY (*alGetIntegerv)( ALenum param, ALint* data ); -ALAPI ALvoid ALAPIENTRY (*alGetFloatv)( ALenum param, ALfloat* data ); -ALAPI ALvoid ALAPIENTRY (*alGetDoublev)( ALenum param, ALdouble* data ); -ALAPI ALubyte* ALAPIENTRY (*alGetString)( ALenum param ); - -/** - * Error support. - * Obtain the most recent error generated in the AL state machine. - */ -ALAPI ALenum ALAPIENTRY (*alGetError)( ALvoid ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALboolean ALAPIENTRY (*alIsExtensionPresent)( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALvoid* ALAPIENTRY (*alGetProcAddress)( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the integer value of an enumeration (usually an extension) with the name ename. - */ -ALAPI ALenum ALAPIENTRY (*alGetEnumValue)( ALubyte* ename ); - - - - -/** - * LISTENER - * Listener is the sample position for a given context. - * The multi-channel (usually stereo) output stream generated - * by the mixer is parametrized by this Listener object: - * its position and velocity relative to Sources, within - * occluder and reflector geometry. - */ - - - -/** - * - * Listener Environment: default 0. - */ -ALAPI ALvoid ALAPIENTRY (*alListeneri)( ALenum param, ALint value ); - - -/** - * - * Listener Gain: default 1.0f. - */ -ALAPI ALvoid ALAPIENTRY (*alListenerf)( ALenum param, ALfloat value ); - - -/** - * - * Listener Position. - * Listener Velocity. - */ -ALAPI ALvoid ALAPIENTRY (*alListener3f)( ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); - - -/** - * - * Listener Position: ALfloat[3] - * Listener Velocity: ALfloat[3] - * Listener Orientation: ALfloat[6] (forward and up vector). - */ -ALAPI ALvoid ALAPIENTRY (*alListenerfv)( ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY (*alGetListeneri)( ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY (*alGetListenerf)( ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY (*alGetListener3f)( ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 ); -ALAPI ALvoid ALAPIENTRY (*alGetListenerfv)( ALenum param, ALfloat* values ); - - -/** - * SOURCE - * Source objects are by default localized. Sources - * take the PCM data provided in the specified Buffer, - * apply Source-specific modifications, and then - * submit them to be mixed according to spatial - * arrangement etc. - */ - - - -/** Create Source objects. */ -ALAPI ALvoid ALAPIENTRY (*alGenSources)( ALsizei n, ALuint* sources ); - -/** Delete Source objects. */ -ALAPI ALvoid ALAPIENTRY (*alDeleteSources)( ALsizei n, ALuint* sources ); - -/** Verify a handle is a valid Source. */ -ALAPI ALboolean ALAPIENTRY (*alIsSource)( ALuint id ); - -/** Set an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY (*alSourcei)( ALuint source, ALenum param, ALint value ); -ALAPI ALvoid ALAPIENTRY (*alSourcef)( ALuint source, ALenum param, ALfloat value ); -ALAPI ALvoid ALAPIENTRY (*alSource3f)( ALuint source, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); -ALAPI ALvoid ALAPIENTRY (*alSourcefv)( ALuint source, ALenum param, ALfloat* values ); - -/** Get an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY (*alGetSourcei)( ALuint source, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY (*alGetSourcef)( ALuint source, ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY (*alGetSourcefv)( ALuint source, ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY (*alSourcePlayv)( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY (*alSourceStopv)( ALsizei n, ALuint *sources ); - -/** Activate a source, start replay. */ -ALAPI ALvoid ALAPIENTRY (*alSourcePlay)( ALuint source ); - -/** - * Pause a source, - * temporarily remove it from the mixer list. - */ -ALAPI ALvoid ALAPIENTRY (*alSourcePause)( ALuint source ); - -/** - * Stop a source, - * temporarily remove it from the mixer list, - * and reset its internal state to pre-Play. - * To remove a Source completely, it has to be - * deleted following Stop, or before Play. - */ -ALAPI ALvoid ALAPIENTRY (*alSourceStop)( ALuint source ); - - - -/** - * BUFFER - * Buffer objects are storage space for sample data. - * Buffers are referred to by Sources. There can be more than - * one Source using the same Buffer data. If Buffers have - * to be duplicated on a per-Source basis, the driver has to - * take care of allocation, copying, and deallocation as well - * as propagating buffer data changes. - */ - - - - -/** Buffer object generation. */ -ALAPI ALvoid ALAPIENTRY (*alGenBuffers)( ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY (*alDeleteBuffers)( ALsizei n, ALuint* buffers ); -ALAPI ALboolean ALAPIENTRY (*alIsBuffer)( ALuint buffer ); - -/** - * Specify the data to be filled into a buffer. - */ -ALAPI ALvoid ALAPIENTRY (*alBufferData)( ALuint buffer, - ALenum format, - ALvoid* data, - ALsizei size, - ALsizei freq ); - -ALAPI ALvoid ALAPIENTRY (*alGetBufferi)( ALuint buffer, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY (*alGetBufferf)( ALuint buffer, ALenum param, ALfloat* value ); - - - - -/** - * Queue stuff - */ -ALAPI ALvoid ALAPIENTRY (*alSourceQueueBuffers)( ALuint source, ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY (*alSourceUnqueueBuffers)( ALuint source, ALsizei n, ALuint* buffers ); - -/** - * Knobs and dials - */ -ALAPI ALvoid ALAPIENTRY (*alDistanceModel)( ALenum value ); -ALAPI ALvoid ALAPIENTRY (*alDopplerFactor)( ALfloat value ); -ALAPI ALvoid ALAPIENTRY (*alDopplerVelocity)( ALfloat value ); - -#endif /* AL_NO_PROTOTYPES */ - -#ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export off - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/include/alc.h b/neo/openal/include/alc.h deleted file mode 100644 index b7252c4f..00000000 --- a/neo/openal/include/alc.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef _ALC_H_ -#define _ALC_H_ - -#include "altypes.h" -#include "alctypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 - #ifdef _OPENAL32LIB - #define ALCAPI __declspec(dllexport) - #else - #define ALCAPI __declspec(dllimport) - #endif - - typedef struct ALCdevice_struct ALCdevice; - typedef struct ALCcontext_struct ALCcontext; - - #define ALCAPIENTRY __cdecl -#else - #ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export on - #endif - #endif - #define ALCAPI - #define ALCAPIENTRY __cdecl -#endif - - - -#ifndef ALC_NO_PROTOTYPES - -ALCAPI ALCubyte* ALCAPIENTRY alcGetString(ALCdevice *device,ALCenum param); -ALCAPI ALCvoid ALCAPIENTRY alcGetIntegerv(ALCdevice *device,ALCenum param,ALCsizei size,ALCint *data); - -ALCAPI ALCdevice* ALCAPIENTRY alcOpenDevice(ALCubyte *deviceName); -ALCAPI ALCvoid ALCAPIENTRY alcCloseDevice(ALCdevice *device); - -ALCAPI ALCcontext*ALCAPIENTRY alcCreateContext(ALCdevice *device,ALCint *attrList); -ALCAPI ALCboolean ALCAPIENTRY alcMakeContextCurrent(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY alcProcessContext(ALCcontext *context); -ALCAPI ALCcontext*ALCAPIENTRY alcGetCurrentContext(ALCvoid); -ALCAPI ALCdevice* ALCAPIENTRY alcGetContextsDevice(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY alcSuspendContext(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY alcDestroyContext(ALCcontext *context); - -ALCAPI ALCenum ALCAPIENTRY alcGetError(ALCdevice *device); - -ALCAPI ALCboolean ALCAPIENTRY alcIsExtensionPresent(ALCdevice *device,ALCubyte *extName); -ALCAPI ALCvoid * ALCAPIENTRY alcGetProcAddress(ALCdevice *device,ALCubyte *funcName); -ALCAPI ALCenum ALCAPIENTRY alcGetEnumValue(ALCdevice *device,ALCubyte *enumName); - -#else /* ALC_NO_PROTOTYPES */ - -ALCAPI ALCubyte* ALCAPIENTRY (*alcGetString)(ALCdevice *device,ALCenum param); -ALCAPI ALCvoid ALCAPIENTRY (*alcGetIntegerv)(ALCdevice * device,ALCenum param,ALCsizei size,ALCint *data); - -ALCAPI ALCdevice* ALCAPIENTRY (*alcOpenDevice)(ALubyte *deviceName); -ALCAPI ALCvoid ALCAPIENTRY (*alcCloseDevice)(ALCdevice *device); - -ALCAPI ALCcontext*ALCAPIENTRY (*alcCreateContext)(ALCdevice *device,ALCint *attrList); -ALCAPI ALCboolean ALCAPIENTRY (*alcMakeContextCurrent)(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY (*alcProcessContext)(ALCcontext *context); -ALCAPI ALCcontext*ALCAPIENTRY (*alcGetCurrentContext)(ALCvoid); -ALCAPI ALCdevice* ALCAPIENTRY (*alcGetContextsDevice)(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY (*alcSuspendContext)(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY (*alcDestroyContext)(ALCcontext *context); - -ALCAPI ALCenum ALCAPIENTRY (*alcGetError)(ALCdevice *device); - -ALCAPI ALCboolean ALCAPIENTRY (*alcIsExtensionPresent)(ALCdevice *device,ALCubyte *extName); -ALCAPI ALCvoid * ALCAPIENTRY (*alcGetProcAddress)(ALCdevice *device,ALCubyte *funcName); -ALCAPI ALCenum ALCAPIENTRY (*alcGetEnumValue)(ALCdevice *device,ALCubyte *enumName); - -#endif /* AL_NO_PROTOTYPES */ - -#ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export off - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/include/alctypes.h b/neo/openal/include/alctypes.h deleted file mode 100644 index 436fcfac..00000000 --- a/neo/openal/include/alctypes.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef _ALCTYPES_H_ -#define _ALCTYPES_H_ - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - - -#ifdef __cplusplus -extern "C" { -#endif - -/** ALC boolean type. */ -typedef char ALCboolean; - -/** ALC 8bit signed byte. */ -typedef char ALCbyte; - -/** ALC 8bit unsigned byte. */ -typedef unsigned char ALCubyte; - -/** ALC 16bit signed short integer type. */ -typedef short ALCshort; - -/** ALC 16bit unsigned short integer type. */ -typedef unsigned short ALCushort; - -/** ALC 32bit unsigned integer type. */ -typedef unsigned ALCuint; - -/** ALC 32bit signed integer type. */ -typedef int ALCint; - -/** ALC 32bit floating point type. */ -typedef float ALCfloat; - -/** ALC 64bit double point type. */ -typedef double ALCdouble; - -/** ALC 32bit type. */ -typedef unsigned int ALCsizei; - -/** ALC void type */ -typedef void ALCvoid; - -/** ALC enumerations. */ -typedef int ALCenum; - -/* Bad value. */ -#define ALC_INVALID (-1) - -/* Boolean False. */ -#define ALC_FALSE 0 - -/* Boolean True. */ -#define ALC_TRUE 1 - -/** Errors: No Error. */ -#define ALC_NO_ERROR ALC_FALSE - -#define ALC_MAJOR_VERSION 0x1000 -#define ALC_MINOR_VERSION 0x1001 -#define ALC_ATTRIBUTES_SIZE 0x1002 -#define ALC_ALL_ATTRIBUTES 0x1003 - -#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 -#define ALC_DEVICE_SPECIFIER 0x1005 -#define ALC_EXTENSIONS 0x1006 - -#define ALC_FREQUENCY 0x1007 -#define ALC_REFRESH 0x1008 -#define ALC_SYNC 0x1009 - -/** - * The device argument does not name a valid dvice. - */ -#define ALC_INVALID_DEVICE 0xA001 - -/** - * The context argument does not name a valid context. - */ -#define ALC_INVALID_CONTEXT 0xA002 - -/** - * A function was called at inappropriate time, - * or in an inappropriate way, causing an illegal state. - * This can be an incompatible ALenum, object ID, - * and/or function. - */ -#define ALC_INVALID_ENUM 0xA003 - -/** - * Illegal value passed as an argument to an AL call. - * Applies to parameter values, but not to enumerations. - */ -#define ALC_INVALID_VALUE 0xA004 - -/** - * A function could not be completed, - * because there is not enough memory available. - */ -#define ALC_OUT_OF_MEMORY 0xA005 - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/include/altypes.h b/neo/openal/include/altypes.h deleted file mode 100644 index 9dc4ead1..00000000 --- a/neo/openal/include/altypes.h +++ /dev/null @@ -1,333 +0,0 @@ -#ifndef _ALTYPES_H_ -#define _ALTYPES_H_ - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - - -#ifdef __cplusplus -extern "C" { -#endif - -/** OpenAL boolean type. */ -typedef char ALboolean; - -/** OpenAL 8bit signed byte. */ -typedef char ALbyte; - -/** OpenAL 8bit unsigned byte. */ -typedef unsigned char ALubyte; - -/** OpenAL 16bit signed short integer type. */ -typedef short ALshort; - -/** OpenAL 16bit unsigned short integer type. */ -typedef unsigned short ALushort; - -/** OpenAL 32bit unsigned integer type. */ -typedef unsigned ALuint; - -/** OpenAL 32bit signed integer type. */ -typedef int ALint; - -/** OpenAL 32bit floating point type. */ -typedef float ALfloat; - -/** OpenAL 64bit double point type. */ -typedef double ALdouble; - -/** OpenAL 32bit type. */ -typedef unsigned int ALsizei; - -/** OpenAL void type */ -typedef void ALvoid; - -/** OpenAL enumerations. */ -typedef int ALenum; - -/* Bad value. */ -#define AL_INVALID (-1) - -/* Disable value. */ -#define AL_NONE 0 - -/* Boolean False. */ -#define AL_FALSE 0 - -/* Boolean True. */ -#define AL_TRUE 1 - -/** - * Indicate the type of AL_SOURCE. - * Sources can be spatialized - */ -#define AL_SOURCE_TYPE 0x200 - -/** Indicate source has absolute coordinates. */ -#define AL_SOURCE_ABSOLUTE 0x201 - -/** Indicate Source has listener relative coordinates. */ -#define AL_SOURCE_RELATIVE 0x202 - -/** - * Directional source, inner cone angle, in degrees. - * Range: [0-360] - * Default: 360 - */ -#define AL_CONE_INNER_ANGLE 0x1001 - -/** - * Directional source, outer cone angle, in degrees. - * Range: [0-360] - * Default: 360 - */ -#define AL_CONE_OUTER_ANGLE 0x1002 - -/** - * Specify the pitch to be applied, either at source, - * or on mixer results, at listener. - * Range: [0.5-2.0] - * Default: 1.0 - */ -#define AL_PITCH 0x1003 - -/** - * Specify the current location in three dimensional space. - * OpenAL, like OpenGL, uses a right handed coordinate system, - * where in a frontal default view X (thumb) points right, - * Y points up (index finger), and Z points towards the - * viewer/camera (middle finger). - * To switch from a left handed coordinate system, flip the - * sign on the Z coordinate. - * Listener position is always in the world coordinate system. - */ -#define AL_POSITION 0x1004 - -/** Specify the current direction as forward vector. */ -#define AL_DIRECTION 0x1005 - -/** Specify the current velocity in three dimensional space. */ -#define AL_VELOCITY 0x1006 - -/** - * Indicate whether source has to loop infinite. - * Type: ALboolean - * Range: [AL_TRUE, AL_FALSE] - * Default: AL_FALSE - */ -#define AL_LOOPING 0x1007 - -/** - * Indicate the buffer to provide sound samples. - * Type: ALuint. - * Range: any valid Buffer id. - */ -#define AL_BUFFER 0x1009 - -/** - * Indicate the gain (volume amplification) applied. - * Type: ALfloat. - * Range: ]0.0- ] - * A value of 1.0 means un-attenuated/unchanged. - * Each division by 2 equals an attenuation of -6dB. - * Each multiplicaton with 2 equals an amplification of +6dB. - * A value of 0.0 is meaningless with respect to a logarithmic - * scale; it is interpreted as zero volume - the channel - * is effectively disabled. - */ -#define AL_GAIN 0x100A - -/** - * Indicate minimum source attenuation. - * Type: ALfloat - * Range: [0.0 - 1.0] - */ -#define AL_MIN_GAIN 0x100D - -/** - * Indicate maximum source attenuation. - * Type: ALfloat - * Range: [0.0 - 1.0] - */ -#define AL_MAX_GAIN 0x100E - -/** - * Specify the current orientation. - * Type: ALfv6 (at/up) - * Range: N/A - */ -#define AL_ORIENTATION 0x100F - -/* byte offset into source (in canon format). -1 if source - * is not playing. Don't set this, get this. - * - * Type: ALfloat - * Range: [0.0 - ] - * Default: 1.0 - */ -#define AL_REFERENCE_DISTANCE 0x1020 - - /** - * Indicate the rolloff factor for the source. - * Type: ALfloat - * Range: [0.0 - ] - * Default: 1.0 - */ -#define AL_ROLLOFF_FACTOR 0x1021 - -/** - * Indicate the gain (volume amplification) applied. - * Type: ALfloat. - * Range: ]0.0- ] - * A value of 1.0 means un-attenuated/unchanged. - * Each division by 2 equals an attenuation of -6dB. - * Each multiplicaton with 2 equals an amplification of +6dB. - * A value of 0.0 is meaningless with respect to a logarithmic - * scale; it is interpreted as zero volume - the channel - * is effectively disabled. - */ -#define AL_CONE_OUTER_GAIN 0x1022 - -/** - * Specify the maximum distance. - * Type: ALfloat - * Range: [0.0 - ] - */ -#define AL_MAX_DISTANCE 0x1023 - -/** - * Specify the channel mask. (Creative) - * Type: ALuint - * Range: [0 - 255] - */ -#define AL_CHANNEL_MASK 0x3000 - -/** - * Source state information - */ -#define AL_SOURCE_STATE 0x1010 -#define AL_INITIAL 0x1011 -#define AL_PLAYING 0x1012 -#define AL_PAUSED 0x1013 -#define AL_STOPPED 0x1014 - -/** - * Buffer Queue params - */ -#define AL_BUFFERS_QUEUED 0x1015 -#define AL_BUFFERS_PROCESSED 0x1016 - -/** Sound buffers: format specifier. */ -#define AL_FORMAT_MONO8 0x1100 -#define AL_FORMAT_MONO16 0x1101 -#define AL_FORMAT_STEREO8 0x1102 -#define AL_FORMAT_STEREO16 0x1103 - -/** - * Sound buffers: frequency, in units of Hertz [Hz]. - * This is the number of samples per second. Half of the - * sample frequency marks the maximum significant - * frequency component. - */ -#define AL_FREQUENCY 0x2001 -#define AL_BITS 0x2002 -#define AL_CHANNELS 0x2003 -#define AL_SIZE 0x2004 -#define AL_DATA 0x2005 - -/** - * Buffer state. - * - * Not supported for public use (yet). - */ -#define AL_UNUSED 0x2010 -#define AL_PENDING 0x2011 -#define AL_PROCESSED 0x2012 - -/** Errors: No Error. */ -#define AL_NO_ERROR AL_FALSE - -/** - * Illegal name passed as an argument to an AL call. - */ -#define AL_INVALID_NAME 0xA001 - -/** - * Illegal enum passed as an argument to an AL call. - */ -#define AL_INVALID_ENUM 0xA002 -/** - * Illegal value passed as an argument to an AL call. - * Applies to parameter values, but not to enumerations. - */ -#define AL_INVALID_VALUE 0xA003 - -/** - * A function was called at inappropriate time, - * or in an inappropriate way, causing an illegal state. - * This can be an incompatible ALenum, object ID, - * and/or function. - */ -#define AL_INVALID_OPERATION 0xA004 - -/** - * A function could not be completed, - * because there is not enough memory available. - */ -#define AL_OUT_OF_MEMORY 0xA005 - -/** Context strings: Vendor Name. */ -#define AL_VENDOR 0xB001 -#define AL_VERSION 0xB002 -#define AL_RENDERER 0xB003 -#define AL_EXTENSIONS 0xB004 - -/** Global tweakage. */ - -/** - * Doppler scale. Default 1.0 - */ -#define AL_DOPPLER_FACTOR 0xC000 - -/** - * Doppler velocity. Default 1.0 - */ -#define AL_DOPPLER_VELOCITY 0xC001 - -/** - * Distance model. Default AL_INVERSE_DISTANCE_CLAMPED - */ -#define AL_DISTANCE_MODEL 0xD000 - -/** Distance models. */ - -#define AL_INVERSE_DISTANCE 0xD001 -#define AL_INVERSE_DISTANCE_CLAMPED 0xD002 - - /** - * enables - */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/include/alu.h b/neo/openal/include/alu.h deleted file mode 100644 index c6adff62..00000000 --- a/neo/openal/include/alu.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef _ALU_H_ -#define _ALU_H_ - -#define ALUAPI -#define ALUAPIENTRY __cdecl - -#define BUFFERSIZE 48000 -#define FRACTIONBITS 14 -#define FRACTIONMASK ((1L<<FRACTIONBITS)-1) -#define OUTPUTCHANNELS 2 - -#include "altypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -ALUAPI ALint ALUAPIENTRY aluF2L(ALfloat value); -ALUAPI ALshort ALUAPIENTRY aluF2S(ALfloat value); -ALUAPI ALvoid ALUAPIENTRY aluCrossproduct(ALfloat *inVector1,ALfloat *inVector2,ALfloat *outVector); -ALUAPI ALfloat ALUAPIENTRY aluDotproduct(ALfloat *inVector1,ALfloat *inVector2); -ALUAPI ALvoid ALUAPIENTRY aluNormalize(ALfloat *inVector); -ALUAPI ALvoid ALUAPIENTRY aluMatrixVector(ALfloat matrix[3][3],ALfloat *vector); -ALUAPI ALvoid ALUAPIENTRY aluCalculateSourceParameters(ALuint source,ALuint channels,ALfloat *drysend,ALfloat *wetsend,ALfloat *pitch); -ALUAPI ALvoid ALUAPIENTRY aluMixData(ALvoid *context,ALvoid *buffer,ALsizei size,ALenum format); -ALUAPI ALvoid ALUAPIENTRY aluSetReverb(ALvoid *Reverb,ALuint Environment); -ALUAPI ALvoid ALUAPIENTRY aluReverb(ALvoid *Reverb,ALfloat Buffer[][2],ALsizei BufferSize); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/include/eax2.h b/neo/openal/include/eax2.h deleted file mode 100644 index 9012d89c..00000000 --- a/neo/openal/include/eax2.h +++ /dev/null @@ -1,345 +0,0 @@ -/****************************************************************** -* -* EAX.H - DirectSound3D Environmental Audio Extensions version 2.0 -* Updated July 8, 1999 -* -******************************************************************* -*/ - -#ifndef EAX20_H_INCLUDED -#define EAX20_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#pragma pack(push, 4) - -/* -* EAX 2.0 listener property set {0306A6A8-B224-11d2-99E5-0000E8D8C722} -*/ -DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties, - 0x306a6a8, - 0xb224, - 0x11d2, - 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22); - -typedef enum -{ - DSPROPERTY_EAX20LISTENER_NONE, - DSPROPERTY_EAX20LISTENER_ALLPARAMETERS, - DSPROPERTY_EAX20LISTENER_ROOM, - DSPROPERTY_EAX20LISTENER_ROOMHF, - DSPROPERTY_EAX20LISTENER_ROOMROLLOFFFACTOR, - DSPROPERTY_EAX20LISTENER_DECAYTIME, - DSPROPERTY_EAX20LISTENER_DECAYHFRATIO, - DSPROPERTY_EAX20LISTENER_REFLECTIONS, - DSPROPERTY_EAX20LISTENER_REFLECTIONSDELAY, - DSPROPERTY_EAX20LISTENER_REVERB, - DSPROPERTY_EAX20LISTENER_REVERBDELAY, - DSPROPERTY_EAX20LISTENER_ENVIRONMENT, - DSPROPERTY_EAX20LISTENER_ENVIRONMENTSIZE, - DSPROPERTY_EAX20LISTENER_ENVIRONMENTDIFFUSION, - DSPROPERTY_EAX20LISTENER_AIRABSORPTIONHF, - DSPROPERTY_EAX20LISTENER_FLAGS -} DSPROPERTY_EAX20_LISTENERPROPERTY; - -// OR these flags with property id -#define DSPROPERTY_EAX20LISTENER_IMMEDIATE 0x00000000 // changes take effect immediately -#define DSPROPERTY_EAX20LISTENER_DEFERRED 0x80000000 // changes take effect later -#define DSPROPERTY_EAX20LISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAX20LISTENER_NONE | \ - DSPROPERTY_EAX20LISTENER_IMMEDIATE) - -// Use this structure for DSPROPERTY_EAX20LISTENER_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all times are in seconds -// - the reference for high frequency controls is 5 kHz -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myListener.lRoom = -1000; -// myListener.lRoomHF = -100; -// ... -// myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ; -// instead of: -// myListener = { -1000, -100, ... , 0x00000009 }; -// If you want to save and load presets in binary form, you -// should define your own structure to insure future compatibility. -// -typedef struct _EAX20LISTENERPROPERTIES -{ - long lRoom; // room effect level at low frequencies - long lRoomHF; // room effect high-frequency level re. low frequency level - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - float flDecayTime; // reverberation decay time at low frequencies - float flDecayHFRatio; // high-frequency to low-frequency decay time ratio - long lReflections; // early reflections level relative to room effect - float flReflectionsDelay; // initial reflection delay time - long lReverb; // late reverberation level relative to room effect - float flReverbDelay; // late reverberation delay time relative to initial reflection - unsigned long dwEnvironment; // sets all listener properties - float flEnvironmentSize; // environment size in meters - float flEnvironmentDiffusion; // environment diffusion - float flAirAbsorptionHF; // change in level per meter at 5 kHz - unsigned long dwFlags; // modifies the behavior of properties -} EAX20LISTENERPROPERTIES, *LPEAX20LISTENERPROPERTIES; - -// used by DSPROPERTY_EAX20LISTENER_ENVIRONMENT -enum -{ - EAX20_ENVIRONMENT_GENERIC, - EAX20_ENVIRONMENT_PADDEDCELL, - EAX20_ENVIRONMENT_ROOM, - EAX20_ENVIRONMENT_BATHROOM, - EAX20_ENVIRONMENT_LIVINGROOM, - EAX20_ENVIRONMENT_STONEROOM, - EAX20_ENVIRONMENT_AUDITORIUM, - EAX20_ENVIRONMENT_CONCERTHALL, - EAX20_ENVIRONMENT_CAVE, - EAX20_ENVIRONMENT_ARENA, - EAX20_ENVIRONMENT_HANGAR, - EAX20_ENVIRONMENT_CARPETEDHALLWAY, - EAX20_ENVIRONMENT_HALLWAY, - EAX20_ENVIRONMENT_STONECORRIDOR, - EAX20_ENVIRONMENT_ALLEY, - EAX20_ENVIRONMENT_FOREST, - EAX20_ENVIRONMENT_CITY, - EAX20_ENVIRONMENT_MOUNTAINS, - EAX20_ENVIRONMENT_QUARRY, - EAX20_ENVIRONMENT_PLAIN, - EAX20_ENVIRONMENT_PARKINGLOT, - EAX20_ENVIRONMENT_SEWERPIPE, - EAX20_ENVIRONMENT_UNDERWATER, - EAX20_ENVIRONMENT_DRUGGED, - EAX20_ENVIRONMENT_DIZZY, - EAX20_ENVIRONMENT_PSYCHOTIC, - - EAX20_ENVIRONMENT_COUNT -}; - -// Used by DS20PROPERTY_EAXLISTENER_FLAGS -// -// Note: The number and order of flags may change in future EAX versions. -// It is recommended to use the flag defines as follows: -// myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE; -// instead of: -// myFlags = 0x00000009; -// -// These flags determine what properties are affected by environment size. -#define EAX20LISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time -#define EAX20LISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level -#define EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time -#define EAX20LISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level -#define EAX20LISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time - -// This flag limits high-frequency decay time according to air absorption. -#define EAX20LISTENERFLAGS_DECAYHFLIMIT 0x00000020 - -#define EAX20LISTENERFLAGS_RESERVED 0xFFFFFFC0 // reserved future use - -// property ranges and defaults: - -#define EAX20LISTENER_MINROOM (-10000) -#define EAX20LISTENER_MAXROOM 0 -#define EAX20LISTENER_DEFAULTROOM (-1000) - -#define EAX20LISTENER_MINROOMHF (-10000) -#define EAX20LISTENER_MAXROOMHF 0 -#define EAX20LISTENER_DEFAULTROOMHF (-100) - -#define EAX20LISTENER_MINROOMROLLOFFFACTOR 0.0f -#define EAX20LISTENER_MAXROOMROLLOFFFACTOR 10.0f -#define EAX20LISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAX20LISTENER_MINDECAYTIME 0.1f -#define EAX20LISTENER_MAXDECAYTIME 20.0f -#define EAX20LISTENER_DEFAULTDECAYTIME 1.49f - -#define EAX20LISTENER_MINDECAYHFRATIO 0.1f -#define EAX20LISTENER_MAXDECAYHFRATIO 2.0f -#define EAX20LISTENER_DEFAULTDECAYHFRATIO 0.83f - -#define EAX20LISTENER_MINREFLECTIONS (-10000) -#define EAX20LISTENER_MAXREFLECTIONS 1000 -#define EAX20LISTENER_DEFAULTREFLECTIONS (-2602) - -#define EAX20LISTENER_MINREFLECTIONSDELAY 0.0f -#define EAX20LISTENER_MAXREFLECTIONSDELAY 0.3f -#define EAX20LISTENER_DEFAULTREFLECTIONSDELAY 0.007f - -#define EAX20LISTENER_MINREVERB (-10000) -#define EAX20LISTENER_MAXREVERB 2000 -#define EAX20LISTENER_DEFAULTREVERB 200 - -#define EAX20LISTENER_MINREVERBDELAY 0.0f -#define EAX20LISTENER_MAXREVERBDELAY 0.1f -#define EAX20LISTENER_DEFAULTREVERBDELAY 0.011f - -#define EAX20LISTENER_MINENVIRONMENT 0 -#define EAX20LISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1) -#define EAX20LISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC - -#define EAX20LISTENER_MINENVIRONMENTSIZE 1.0f -#define EAX20LISTENER_MAXENVIRONMENTSIZE 100.0f -#define EAX20LISTENER_DEFAULTENVIRONMENTSIZE 7.5f - -#define EAX20LISTENER_MINENVIRONMENTDIFFUSION 0.0f -#define EAX20LISTENER_MAXENVIRONMENTDIFFUSION 1.0f -#define EAX20LISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f - -#define EAX20LISTENER_MINAIRABSORPTIONHF (-100.0f) -#define EAX20LISTENER_MAXAIRABSORPTIONHF 0.0f -#define EAX20LISTENER_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAX20LISTENER_DEFAULTFLAGS (EAX20LISTENERFLAGS_DECAYTIMESCALE | \ - EAX20LISTENERFLAGS_REFLECTIONSSCALE | \ - EAX20LISTENERFLAGS_REFLECTIONSDELAYSCALE | \ - EAX20LISTENERFLAGS_REVERBSCALE | \ - EAX20LISTENERFLAGS_REVERBDELAYSCALE | \ - EAX20LISTENERFLAGS_DECAYHFLIMIT) - - - -/* -* EAX 2.0 buffer property set {0306A6A7-B224-11d2-99E5-0000E8D8C722} -*/ -DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties, - 0x306a6a7, - 0xb224, - 0x11d2, - 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22); - -// For compatibility with future EAX versions: -#define DSPROPSETID_EAX20_BufferProperties DSPROPSETID_EAX20_BufferProperties - -typedef enum -{ - DSPROPERTY_EAX20BUFFER_NONE, - DSPROPERTY_EAX20BUFFER_ALLPARAMETERS, - DSPROPERTY_EAX20BUFFER_DIRECT, - DSPROPERTY_EAX20BUFFER_DIRECTHF, - DSPROPERTY_EAX20BUFFER_ROOM, - DSPROPERTY_EAX20BUFFER_ROOMHF, - DSPROPERTY_EAX20BUFFER_ROOMROLLOFFFACTOR, - DSPROPERTY_EAX20BUFFER_OBSTRUCTION, - DSPROPERTY_EAX20BUFFER_OBSTRUCTIONLFRATIO, - DSPROPERTY_EAX20BUFFER_OCCLUSION, - DSPROPERTY_EAX20BUFFER_OCCLUSIONLFRATIO, - DSPROPERTY_EAX20BUFFER_OCCLUSIONROOMRATIO, - DSPROPERTY_EAX20BUFFER_OUTSIDEVOLUMEHF, - DSPROPERTY_EAX20BUFFER_AIRABSORPTIONFACTOR, - DSPROPERTY_EAX20BUFFER_FLAGS -} DSPROPERTY_EAX20_BUFFERPROPERTY; - -// OR these flags with property id -#define DSPROPERTY_EAX20BUFFER_IMMEDIATE 0x00000000 // changes take effect immediately -#define DSPROPERTY_EAX20BUFFER_DEFERRED 0x80000000 // changes take effect later -#define DSPROPERTY_EAX20BUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAX20BUFFER_NONE | \ - DSPROPERTY_EAX20BUFFER_IMMEDIATE) - -// Use this structure for DSPROPERTY_EAX20BUFFER_ALLPARAMETERS -// - all levels are hundredths of decibels -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myBuffer.lDirect = 0; -// myBuffer.lDirectHF = -200; -// ... -// myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ; -// instead of: -// myBuffer = { 0, -200, ... , 0x00000003 }; -// -typedef struct _EAX20BUFFERPROPERTIES -{ - long lDirect; // direct path level - long lDirectHF; // direct path level at high frequencies - long lRoom; // room effect level - long lRoomHF; // room effect level at high frequencies - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - long lObstruction; // main obstruction control (attenuation at high frequencies) - float flObstructionLFRatio; // obstruction low-frequency level re. main control - long lOcclusion; // main occlusion control (attenuation at high frequencies) - float flOcclusionLFRatio; // occlusion low-frequency level re. main control - float flOcclusionRoomRatio; // occlusion room effect level re. main control - long lOutsideVolumeHF; // outside sound cone level at high frequencies - float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF - unsigned long dwFlags; // modifies the behavior of properties -} EAX20BUFFERPROPERTIES, *LPEAX20BUFFERPROPERTIES; - -// Used by DSPROPERTY_EAX20BUFFER_FLAGS -// TRUE: value is computed automatically - property is an offset -// FALSE: value is used directly -// -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO; -// instead of: -// myFlags = 0x00000003; -// -#define EAX20BUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF -#define EAX20BUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM -#define EAX20BUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF - -#define EAX20BUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use - -// property ranges and defaults: - -#define EAX20BUFFER_MINDIRECT (-10000) -#define EAX20BUFFER_MAXDIRECT 1000 -#define EAX20BUFFER_DEFAULTDIRECT 0 - -#define EAX20BUFFER_MINDIRECTHF (-10000) -#define EAX20BUFFER_MAXDIRECTHF 0 -#define EAX20BUFFER_DEFAULTDIRECTHF 0 - -#define EAX20BUFFER_MINROOM (-10000) -#define EAX20BUFFER_MAXROOM 1000 -#define EAX20BUFFER_DEFAULTROOM 0 - -#define EAX20BUFFER_MINROOMHF (-10000) -#define EAX20BUFFER_MAXROOMHF 0 -#define EAX20BUFFER_DEFAULTROOMHF 0 - -#define EAX20BUFFER_MINROOMROLLOFFFACTOR 0.0f -#define EAX20BUFFER_MAXROOMROLLOFFFACTOR 10.f -#define EAX20BUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAX20BUFFER_MINOBSTRUCTION (-10000) -#define EAX20BUFFER_MAXOBSTRUCTION 0 -#define EAX20BUFFER_DEFAULTOBSTRUCTION 0 - -#define EAX20BUFFER_MINOBSTRUCTIONLFRATIO 0.0f -#define EAX20BUFFER_MAXOBSTRUCTIONLFRATIO 1.0f -#define EAX20BUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f - -#define EAX20BUFFER_MINOCCLUSION (-10000) -#define EAX20BUFFER_MAXOCCLUSION 0 -#define EAX20BUFFER_DEFAULTOCCLUSION 0 - -#define EAX20BUFFER_MINOCCLUSIONLFRATIO 0.0f -#define EAX20BUFFER_MAXOCCLUSIONLFRATIO 1.0f -#define EAX20BUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f - -#define EAX20BUFFER_MINOCCLUSIONROOMRATIO 0.0f -#define EAX20BUFFER_MAXOCCLUSIONROOMRATIO 10.0f -#define EAX20BUFFER_DEFAULTOCCLUSIONROOMRATIO 0.5f - -#define EAX20BUFFER_MINOUTSIDEVOLUMEHF (-10000) -#define EAX20BUFFER_MAXOUTSIDEVOLUMEHF 0 -#define EAX20BUFFER_DEFAULTOUTSIDEVOLUMEHF 0 - -#define EAX20BUFFER_MINAIRABSORPTIONFACTOR 0.0f -#define EAX20BUFFER_MAXAIRABSORPTIONFACTOR 10.0f -#define EAX20BUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f - -#define EAX20BUFFER_DEFAULTFLAGS (EAX20BUFFERFLAGS_DIRECTHFAUTO | \ - EAX20BUFFERFLAGS_ROOMAUTO | \ - EAX20BUFFERFLAGS_ROOMHFAUTO) - -#pragma pack(pop) - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif diff --git a/neo/openal/include/eax3.h b/neo/openal/include/eax3.h deleted file mode 100644 index 7f1a9e6d..00000000 --- a/neo/openal/include/eax3.h +++ /dev/null @@ -1,547 +0,0 @@ -/*******************************************************************\ -* * -* EAX.H - Environmental Audio Extensions version 3.0 * -* for OpenAL and DirectSound3D * -* * -********************************************************************/ - -#ifndef EAX30_H_INCLUDED -#define EAX30_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#ifndef OPENAL - #include <dsound.h> - - /* - * EAX Wrapper Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5} - */ - DEFINE_GUID(CLSID_EAXDirectSound, - 0x4ff53b81, - 0x1ce0, - 0x11d3, - 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5); - - /* - * EAX Wrapper Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C} - */ - DEFINE_GUID(CLSID_EAXDirectSound8, - 0xca503b60, - 0xb176, - 0x11d4, - 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc); - - - -#ifdef DIRECTSOUND_VERSION -#if DIRECTSOUND_VERSION == 0x0800 - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*); -#endif -#endif - - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*); - -#else // OPENAL - //#include <al.h> - - #ifndef GUID_DEFINED - #define GUID_DEFINED - typedef struct _GUID - { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; - } GUID; - #endif // !GUID_DEFINED - - #ifndef DEFINE_GUID - #ifndef INITGUID - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID /*FAR*/ name - #else - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } - #endif // INITGUID - #endif // DEFINE_GUID - - - /* - * EAX OpenAL Extension - */ - typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALboolean (*EAXSetBufferMode)(ALsizei,ALuint*,ALint); - typedef ALenum (*EAXGetBufferMode)(ALuint,ALint*); -#endif - -#pragma pack(push, 4) - -/* - * EAX 3.0 listener property set {A8FA6880-B476-11d3-BDB9-00C0F02DDF87} - */ -DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties, - 0xa8fa6882, - 0xb476, - 0x11d3, - 0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87); - -// For compatibility with future EAX versions: -#define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX30_ListenerProperties - -typedef enum -{ - DSPROPERTY_EAXLISTENER_NONE, - DSPROPERTY_EAXLISTENER_ALLPARAMETERS, - DSPROPERTY_EAXLISTENER_ENVIRONMENT, - DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE, - DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION, - DSPROPERTY_EAXLISTENER_ROOM, - DSPROPERTY_EAXLISTENER_ROOMHF, - DSPROPERTY_EAXLISTENER_ROOMLF, - DSPROPERTY_EAXLISTENER_DECAYTIME, - DSPROPERTY_EAXLISTENER_DECAYHFRATIO, - DSPROPERTY_EAXLISTENER_DECAYLFRATIO, - DSPROPERTY_EAXLISTENER_REFLECTIONS, - DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY, - DSPROPERTY_EAXLISTENER_REFLECTIONSPAN, - DSPROPERTY_EAXLISTENER_REVERB, - DSPROPERTY_EAXLISTENER_REVERBDELAY, - DSPROPERTY_EAXLISTENER_REVERBPAN, - DSPROPERTY_EAXLISTENER_ECHOTIME, - DSPROPERTY_EAXLISTENER_ECHODEPTH, - DSPROPERTY_EAXLISTENER_MODULATIONTIME, - DSPROPERTY_EAXLISTENER_MODULATIONDEPTH, - DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF, - DSPROPERTY_EAXLISTENER_HFREFERENCE, - DSPROPERTY_EAXLISTENER_LFREFERENCE, - DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR, - DSPROPERTY_EAXLISTENER_FLAGS -} DSPROPERTY_EAX_LISTENERPROPERTY; - -// OR these flags with property id -#define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately -#define DSPROPERTY_EAXLISTENER_DEFERRED 0x80000000 // changes take effect later -#define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \ - DSPROPERTY_EAXLISTENER_IMMEDIATE) -#ifndef EAXVECTOR_DEFINED -#define EAXVECTOR_DEFINED -typedef struct _EAXVECTOR { - float x; - float y; - float z; -} EAXVECTOR; -#endif - -// Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all times and delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myListener.lRoom = -1000; -// myListener.lRoomHF = -100; -// ... -// myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ; -// instead of: -// myListener = { -1000, -100, ... , 0x00000009 }; -// If you want to save and load presets in binary form, you -// should define your own structure to insure future compatibility. -// -typedef struct _EAXLISTENERPROPERTIES -{ - unsigned long ulEnvironment; // sets all listener properties - float flEnvironmentSize; // environment size in meters - float flEnvironmentDiffusion; // environment diffusion - long lRoom; // room effect level (at mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lRoomLF; // relative room effect level at low frequencies - float flDecayTime; // reverberation decay time at mid frequencies - float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio - float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio - long lReflections; // early reflections level relative to room effect - float flReflectionsDelay; // initial reflection delay time - EAXVECTOR vReflectionsPan; // early reflections panning vector - long lReverb; // late reverberation level relative to room effect - float flReverbDelay; // late reverberation delay time relative to initial reflection - EAXVECTOR vReverbPan; // late reverberation panning vector - float flEchoTime; // echo time - float flEchoDepth; // echo depth - float flModulationTime; // modulation time - float flModulationDepth; // modulation depth - float flAirAbsorptionHF; // change in level per meter at high frequencies - float flHFReference; // reference high frequency - float flLFReference; // reference low frequency - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - unsigned long ulFlags; // modifies the behavior of properties -} EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES; - -// used by DSPROPERTY_EAXLISTENER_ENVIRONMENT -#ifndef EAX_ENVIRONMENTS_DEFINED -#define EAX_ENVIRONMENTS_DEFINED -enum -{ - EAX_ENVIRONMENT_GENERIC, - EAX_ENVIRONMENT_PADDEDCELL, - EAX_ENVIRONMENT_ROOM, - EAX_ENVIRONMENT_BATHROOM, - EAX_ENVIRONMENT_LIVINGROOM, - EAX_ENVIRONMENT_STONEROOM, - EAX_ENVIRONMENT_AUDITORIUM, - EAX_ENVIRONMENT_CONCERTHALL, - EAX_ENVIRONMENT_CAVE, - EAX_ENVIRONMENT_ARENA, - EAX_ENVIRONMENT_HANGAR, - EAX_ENVIRONMENT_CARPETEDHALLWAY, - EAX_ENVIRONMENT_HALLWAY, - EAX_ENVIRONMENT_STONECORRIDOR, - EAX_ENVIRONMENT_ALLEY, - EAX_ENVIRONMENT_FOREST, - EAX_ENVIRONMENT_CITY, - EAX_ENVIRONMENT_MOUNTAINS, - EAX_ENVIRONMENT_QUARRY, - EAX_ENVIRONMENT_PLAIN, - EAX_ENVIRONMENT_PARKINGLOT, - EAX_ENVIRONMENT_SEWERPIPE, - EAX_ENVIRONMENT_UNDERWATER, - EAX_ENVIRONMENT_DRUGGED, - EAX_ENVIRONMENT_DIZZY, - EAX_ENVIRONMENT_PSYCHOTIC, - - EAX_ENVIRONMENT_UNDEFINED, - - EAX_ENVIRONMENT_COUNT -}; -#endif - -// Used by DSPROPERTY_EAXLISTENER_FLAGS -// -// Note: The number and order of flags may change in future EAX versions. -// It is recommended to use the flag defines as follows: -// myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE; -// instead of: -// myFlags = 0x00000009; -// -// These flags determine what properties are affected by environment size. -#define EAXLISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time -#define EAXLISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level -#define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time -#define EAXLISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level -#define EAXLISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time -#define EAXLISTENERFLAGS_ECHOTIMESCALE 0x00000040 // echo time -#define EAXLISTENERFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time - -// This flag limits high-frequency decay time according to air absorption. -#define EAXLISTENERFLAGS_DECAYHFLIMIT 0x00000020 - -#define EAXLISTENERFLAGS_RESERVED 0xFFFFFF00 // reserved future use - -// Property ranges and defaults: - -#define EAXLISTENER_MINENVIRONMENT 0 -#define EAXLISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1) -#define EAXLISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC - -#define EAXLISTENER_MINENVIRONMENTSIZE 1.0f -#define EAXLISTENER_MAXENVIRONMENTSIZE 100.0f -#define EAXLISTENER_DEFAULTENVIRONMENTSIZE 7.5f - -#define EAXLISTENER_MINENVIRONMENTDIFFUSION 0.0f -#define EAXLISTENER_MAXENVIRONMENTDIFFUSION 1.0f -#define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f - -#define EAXLISTENER_MINROOM (-10000) -#define EAXLISTENER_MAXROOM 0 -#define EAXLISTENER_DEFAULTROOM (-1000) - -#define EAXLISTENER_MINROOMHF (-10000) -#define EAXLISTENER_MAXROOMHF 0 -#define EAXLISTENER_DEFAULTROOMHF (-100) - -#define EAXLISTENER_MINROOMLF (-10000) -#define EAXLISTENER_MAXROOMLF 0 -#define EAXLISTENER_DEFAULTROOMLF 0 - -#define EAXLISTENER_MINDECAYTIME 0.1f -#define EAXLISTENER_MAXDECAYTIME 20.0f -#define EAXLISTENER_DEFAULTDECAYTIME 1.49f - -#define EAXLISTENER_MINDECAYHFRATIO 0.1f -#define EAXLISTENER_MAXDECAYHFRATIO 2.0f -#define EAXLISTENER_DEFAULTDECAYHFRATIO 0.83f - -#define EAXLISTENER_MINDECAYLFRATIO 0.1f -#define EAXLISTENER_MAXDECAYLFRATIO 2.0f -#define EAXLISTENER_DEFAULTDECAYLFRATIO 1.00f - -#define EAXLISTENER_MINREFLECTIONS (-10000) -#define EAXLISTENER_MAXREFLECTIONS 1000 -#define EAXLISTENER_DEFAULTREFLECTIONS (-2602) - -#define EAXLISTENER_MINREFLECTIONSDELAY 0.0f -#define EAXLISTENER_MAXREFLECTIONSDELAY 0.3f -#define EAXLISTENER_DEFAULTREFLECTIONSDELAY 0.007f - -#define EAXLISTENER_MINREVERB (-10000) -#define EAXLISTENER_MAXREVERB 2000 -#define EAXLISTENER_DEFAULTREVERB 200 - -#define EAXLISTENER_MINREVERBDELAY 0.0f -#define EAXLISTENER_MAXREVERBDELAY 0.1f -#define EAXLISTENER_DEFAULTREVERBDELAY 0.011f - -#define EAXLISTENER_MINECHOTIME 0.075f -#define EAXLISTENER_MAXECHOTIME 0.25f -#define EAXLISTENER_DEFAULTECHOTIME 0.25f - -#define EAXLISTENER_MINECHODEPTH 0.0f -#define EAXLISTENER_MAXECHODEPTH 1.0f -#define EAXLISTENER_DEFAULTECHODEPTH 0.0f - -#define EAXLISTENER_MINMODULATIONTIME 0.04f -#define EAXLISTENER_MAXMODULATIONTIME 4.0f -#define EAXLISTENER_DEFAULTMODULATIONTIME 0.25f - -#define EAXLISTENER_MINMODULATIONDEPTH 0.0f -#define EAXLISTENER_MAXMODULATIONDEPTH 1.0f -#define EAXLISTENER_DEFAULTMODULATIONDEPTH 0.0f - -#define EAXLISTENER_MINAIRABSORPTIONHF (-100.0f) -#define EAXLISTENER_MAXAIRABSORPTIONHF 0.0f -#define EAXLISTENER_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAXLISTENER_MINHFREFERENCE 1000.0f -#define EAXLISTENER_MAXHFREFERENCE 20000.0f -#define EAXLISTENER_DEFAULTHFREFERENCE 5000.0f - -#define EAXLISTENER_MINLFREFERENCE 20.0f -#define EAXLISTENER_MAXLFREFERENCE 1000.0f -#define EAXLISTENER_DEFAULTLFREFERENCE 250.0f - -#define EAXLISTENER_MINROOMROLLOFFFACTOR 0.0f -#define EAXLISTENER_MAXROOMROLLOFFFACTOR 10.0f -#define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXLISTENER_DEFAULTFLAGS (EAXLISTENERFLAGS_DECAYTIMESCALE | \ - EAXLISTENERFLAGS_REFLECTIONSSCALE | \ - EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \ - EAXLISTENERFLAGS_REVERBSCALE | \ - EAXLISTENERFLAGS_REVERBDELAYSCALE | \ - EAXLISTENERFLAGS_DECAYHFLIMIT) - - - -/* -* EAX 3.0 buffer property set {A8FA6881-B476-11d3-BDB9-00C0F02DDF87} -*/ -DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties, - 0xa8fa6881, - 0xb476, - 0x11d3, - 0xbd, 0xb9, 0x0, 0xc0, 0xf0, 0x2d, 0xdf, 0x87); - -// For compatibility with future EAX versions: -#define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX30_BufferProperties -#define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX30_BufferProperties - -typedef enum -{ - DSPROPERTY_EAXBUFFER_NONE, - DSPROPERTY_EAXBUFFER_ALLPARAMETERS, - DSPROPERTY_EAXBUFFER_OBSTRUCTIONPARAMETERS, - DSPROPERTY_EAXBUFFER_OCCLUSIONPARAMETERS, - DSPROPERTY_EAXBUFFER_EXCLUSIONPARAMETERS, - DSPROPERTY_EAXBUFFER_DIRECT, - DSPROPERTY_EAXBUFFER_DIRECTHF, - DSPROPERTY_EAXBUFFER_ROOM, - DSPROPERTY_EAXBUFFER_ROOMHF, - DSPROPERTY_EAXBUFFER_OBSTRUCTION, - DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO, - DSPROPERTY_EAXBUFFER_OCCLUSION, - DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO, - DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO, - DSPROPERTY_EAXBUFFER_OCCLUSIONDIRECTRATIO, - DSPROPERTY_EAXBUFFER_EXCLUSION, - DSPROPERTY_EAXBUFFER_EXCLUSIONLFRATIO, - DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF, - DSPROPERTY_EAXBUFFER_DOPPLERFACTOR, - DSPROPERTY_EAXBUFFER_ROLLOFFFACTOR, - DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR, - DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR, - DSPROPERTY_EAXBUFFER_FLAGS -} DSPROPERTY_EAX_BUFFERPROPERTY; - -// OR these flags with property id -#define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately -#define DSPROPERTY_EAXBUFFER_DEFERRED 0x80000000 // changes take effect later -#define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \ - DSPROPERTY_EAXBUFFER_IMMEDIATE) - -// Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myBuffer.lDirect = 0; -// myBuffer.lDirectHF = -200; -// ... -// myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ; -// instead of: -// myBuffer = { 0, -200, ... , 0x00000003 }; -// -typedef struct _EAXBUFFERPROPERTIES -{ - long lDirect; // direct path level (at low and mid frequencies) - long lDirectHF; // relative direct path level at high frequencies - long lRoom; // room effect level (at low and mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lObstruction; // main obstruction control (attenuation at high frequencies) - float flObstructionLFRatio; // obstruction low-frequency level re. main control - long lOcclusion; // main occlusion control (attenuation at high frequencies) - float flOcclusionLFRatio; // occlusion low-frequency level re. main control - float flOcclusionRoomRatio; // relative occlusion control for room effect - float flOcclusionDirectRatio; // relative occlusion control for direct path - long lExclusion; // main exlusion control (attenuation at high frequencies) - float flExclusionLFRatio; // exclusion low-frequency level re. main control - long lOutsideVolumeHF; // outside sound cone level at high frequencies - float flDopplerFactor; // like DS3D flDopplerFactor but per source - float flRolloffFactor; // like DS3D flRolloffFactor but per source - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF - unsigned long ulFlags; // modifies the behavior of properties -} EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES; - -// Use this structure for DSPROPERTY_EAXBUFFER_OBSTRUCTION, -#ifndef EAX_OBSTRUCTIONPROPERTIES_DEFINED -#define EAX_OBSTRUCTIONPROPERTIES_DEFINED -typedef struct _EAXOBSTRUCTIONPROPERTIES -{ - long lObstruction; - float flObstructionLFRatio; -} EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES; -#endif - -// Use this structure for DSPROPERTY_EAXBUFFER_OCCLUSION -#ifndef EAX_OCCLUSIONPROPERTIES_DEFINED -#define EAX_OCCLUSIONPROPERTIES_DEFINED -typedef struct _EAXOCCLUSIONPROPERTIES -{ - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; -} EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES; -#endif - -// Use this structure for DSPROPERTY_EAXBUFFER_EXCLUSION -#ifndef EAX_EXCLUSIONPROPERTIES_DEFINED -#define EAX_EXCLUSIONPROPERTIES_DEFINED -typedef struct _EAXEXCLUSIONPROPERTIES -{ - long lExclusion; - float flExclusionLFRatio; -} EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES; -#endif - -// Used by DSPROPERTY_EAXBUFFER_FLAGS -// TRUE: value is computed automatically - property is an offset -// FALSE: value is used directly -// -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO; -// instead of: -// myFlags = 0x00000003; -// -#define EAXBUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF -#define EAXBUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM -#define EAXBUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF - -#define EAXBUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use - -// Property ranges and defaults: - -#define EAXBUFFER_MINDIRECT (-10000) -#define EAXBUFFER_MAXDIRECT 1000 -#define EAXBUFFER_DEFAULTDIRECT 0 - -#define EAXBUFFER_MINDIRECTHF (-10000) -#define EAXBUFFER_MAXDIRECTHF 0 -#define EAXBUFFER_DEFAULTDIRECTHF 0 - -#define EAXBUFFER_MINROOM (-10000) -#define EAXBUFFER_MAXROOM 1000 -#define EAXBUFFER_DEFAULTROOM 0 - -#define EAXBUFFER_MINROOMHF (-10000) -#define EAXBUFFER_MAXROOMHF 0 -#define EAXBUFFER_DEFAULTROOMHF 0 - -#define EAXBUFFER_MINOBSTRUCTION (-10000) -#define EAXBUFFER_MAXOBSTRUCTION 0 -#define EAXBUFFER_DEFAULTOBSTRUCTION 0 - -#define EAXBUFFER_MINOBSTRUCTIONLFRATIO 0.0f -#define EAXBUFFER_MAXOBSTRUCTIONLFRATIO 1.0f -#define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f - -#define EAXBUFFER_MINOCCLUSION (-10000) -#define EAXBUFFER_MAXOCCLUSION 0 -#define EAXBUFFER_DEFAULTOCCLUSION 0 - -#define EAXBUFFER_MINOCCLUSIONLFRATIO 0.0f -#define EAXBUFFER_MAXOCCLUSIONLFRATIO 1.0f -#define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f - -#define EAXBUFFER_MINOCCLUSIONROOMRATIO 0.0f -#define EAXBUFFER_MAXOCCLUSIONROOMRATIO 10.0f -#define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO 1.5f - -#define EAXBUFFER_MINOCCLUSIONDIRECTRATIO 0.0f -#define EAXBUFFER_MAXOCCLUSIONDIRECTRATIO 10.0f -#define EAXBUFFER_DEFAULTOCCLUSIONDIRECTRATIO 1.0f - -#define EAXBUFFER_MINEXCLUSION (-10000) -#define EAXBUFFER_MAXEXCLUSION 0 -#define EAXBUFFER_DEFAULTEXCLUSION 0 - -#define EAXBUFFER_MINEXCLUSIONLFRATIO 0.0f -#define EAXBUFFER_MAXEXCLUSIONLFRATIO 1.0f -#define EAXBUFFER_DEFAULTEXCLUSIONLFRATIO 1.0f - -#define EAXBUFFER_MINOUTSIDEVOLUMEHF (-10000) -#define EAXBUFFER_MAXOUTSIDEVOLUMEHF 0 -#define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF 0 - -#define EAXBUFFER_MINDOPPLERFACTOR 0.0f -#define EAXBUFFER_MAXDOPPLERFACTOR 10.f -#define EAXBUFFER_DEFAULTDOPPLERFACTOR 0.0f - -#define EAXBUFFER_MINROLLOFFFACTOR 0.0f -#define EAXBUFFER_MAXROLLOFFFACTOR 10.f -#define EAXBUFFER_DEFAULTROLLOFFFACTOR 0.0f - -#define EAXBUFFER_MINROOMROLLOFFFACTOR 0.0f -#define EAXBUFFER_MAXROOMROLLOFFFACTOR 10.f -#define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXBUFFER_MINAIRABSORPTIONFACTOR 0.0f -#define EAXBUFFER_MAXAIRABSORPTIONFACTOR 10.0f -#define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f - -#define EAXBUFFER_DEFAULTFLAGS (EAXBUFFERFLAGS_DIRECTHFAUTO | \ - EAXBUFFERFLAGS_ROOMAUTO | \ - EAXBUFFERFLAGS_ROOMHFAUTO ) - -#pragma pack(pop) - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif diff --git a/neo/openal/include/eax4.h b/neo/openal/include/eax4.h deleted file mode 100644 index 6bf13137..00000000 --- a/neo/openal/include/eax4.h +++ /dev/null @@ -1,1575 +0,0 @@ -/*******************************************************************\ -* * -* EAX.H - Environmental Audio Extensions version 4.0 * -* for OpenAL and DirectSound3D * -* * -* File revision 1.0.0 (GDC Beta SDK Release) * -* * -\*******************************************************************/ - -#ifndef EAX_H_INCLUDED -#define EAX_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#ifndef OPENAL - #include <dsound.h> - - /* - * EAX Unified Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5} - */ - DEFINE_GUID(CLSID_EAXDirectSound, - 0x4ff53b81, - 0x1ce0, - 0x11d3, - 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5); - - /* - * EAX Unified Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C} - */ - DEFINE_GUID(CLSID_EAXDirectSound8, - 0xca503b60, - 0xb176, - 0x11d4, - 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc); - - - -#ifdef DIRECTSOUND_VERSION -#if DIRECTSOUND_VERSION >= 0x0800 - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*); -#endif -#endif - - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*); - -#else // OPENAL -// #include <al.h> - - #ifndef GUID_DEFINED - #define GUID_DEFINED - typedef struct _GUID - { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; - } GUID; - #endif // GUID_DEFINED - - #ifndef DEFINE_GUID - #ifndef INITGUID - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID /*FAR*/ name - #else - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } - #endif // INITGUID - #endif // DEFINE_GUID - - /* - * EAX OpenAL Extensions - */ - typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALboolean (*EAXSetBufferMode)(ALsizei, ALuint*, ALint); - typedef ALenum (*EAXGetBufferMode)(ALuint, ALint*); -#endif - -#pragma pack(push, 4) - - - - -//////////////////////////////////////////////////////////////////////////// -// Constants - -#define EAX_MAX_FXSLOTS 4 -#define EAX_MAX_ACTIVE_FXSLOTS 2 - -// The EAX_NULL_GUID is used by EAXFXSLOT_LOADEFFECT, EAXCONTEXT_PRIMARYFXSLOTID -// and EAXSOURCE_ACTIVEFXSLOTID - -// {00000000-0000-0000-0000-000000000000} -DEFINE_GUID(EAX_NULL_GUID, - 0x00000000, - 0x0000, - 0x0000, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); - -// The EAX_PrimaryFXSlotID GUID is used by EAXSOURCE_ACTIVEFXSLOTID - -// {F317866D-924C-450C-861B-E6DAA25E7C20} -DEFINE_GUID(EAX_PrimaryFXSlotID, - 0xf317866d, - 0x924c, - 0x450c, - 0x86, 0x1b, 0xe6, 0xda, 0xa2, 0x5e, 0x7c, 0x20); - - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Structures - -// Use this structure for EAXCONTEXT_ALL property. -typedef struct _EAXCONTEXTPROPERTIES -{ - GUID guidPrimaryFXSlotID; - float flDistanceFactor; - float flAirAbsorptionHF; - float flHFReference; -} EAXCONTEXTPROPERTIES, *LPEAXCONTEXTPROPERTIES; - -// Use this structure for EAXSOURCE_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myBuffer.lDirect = 0; -// myBuffer.lDirectHF = -200; -// ... -// myBuffer.dwFlags = myFlags /* see EAXSOURCEFLAGS below */ ; -// instead of: -// myBuffer = { 0, -200, ... , 0x00000003 }; -// -typedef struct _EAXSOURCEPROPERTIES -{ - long lDirect; // direct path level (at low and mid frequencies) - long lDirectHF; // relative direct path level at high frequencies - long lRoom; // room effect level (at low and mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lObstruction; // main obstruction control (attenuation at high frequencies) - float flObstructionLFRatio; // obstruction low-frequency level re. main control - long lOcclusion; // main occlusion control (attenuation at high frequencies) - float flOcclusionLFRatio; // occlusion low-frequency level re. main control - float flOcclusionRoomRatio; // relative occlusion control for room effect - float flOcclusionDirectRatio; // relative occlusion control for direct path - long lExclusion; // main exlusion control (attenuation at high frequencies) - float flExclusionLFRatio; // exclusion low-frequency level re. main control - long lOutsideVolumeHF; // outside sound cone level at high frequencies - float flDopplerFactor; // like DS3D flDopplerFactor but per source - float flRolloffFactor; // like DS3D flRolloffFactor but per source - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - float flAirAbsorptionFactor; // multiplies EAXREVERB_AIRABSORPTIONHF - unsigned long ulFlags; // modifies the behavior of properties -} EAXSOURCEPROPERTIES, *LPEAXSOURCEPROPERTIES; - -// Use this structure for EAXSOURCE_ALLSENDPARAMETERS -// - all levels are hundredths of decibels -// -typedef struct _EAXSOURCEALLSENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lSend; // send level (at low and mid frequencies) - long lSendHF; // relative send level at high frequencies - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; - long lExclusion; - float flExclusionLFRatio; -} EAXSOURCEALLSENDPROPERTIES, *LPEAXSOURCEALLSENDPROPERTIES; - -// Use this structure for EAXSOURCE_ACTIVEFXSLOTID -typedef struct _EAXACTIVEFXSLOTS -{ - GUID guidActiveFXSlots[EAX_MAX_ACTIVE_FXSLOTS]; -} EAXACTIVEFXSLOTS, *LPEAXACTIVEFXSLOTS; - -// Use this structure for EAXSOURCE_OBSTRUCTIONPARAMETERS property. -#ifndef EAX_OBSTRUCTIONPROPERTIES_DEFINED -#define EAX_OBSTRUCTIONPROPERTIES_DEFINED -typedef struct _EAXOBSTRUCTIONPROPERTIES -{ - long lObstruction; - float flObstructionLFRatio; -} EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_OCCLUSIONPARAMETERS property. -#ifndef EAX_OCCLUSIONPROPERTIES_DEFINED -#define EAX_OCCLUSIONPROPERTIES_DEFINED -typedef struct _EAXOCCLUSIONPROPERTIES -{ - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; -} EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_EXCLUSIONPARAMETERS property. -#ifndef EAX_EXCLUSIONPROPERTIES_DEFINED -#define EAX_EXCLUSIONPROPERTIES_DEFINED -typedef struct _EAXEXCLUSIONPROPERTIES -{ - long lExclusion; - float flExclusionLFRatio; -} EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_SENDPARAMETERS properties. -typedef struct _EAXSOURCESENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lSend; - long lSendHF; -} EAXSOURCESENDPROPERTIES, *LPEAXSOURCESENDPROPERTIES; - -// Use this structure for EAXSOURCE_OCCLUSIONSENDPARAMETERS -typedef struct _EAXSOURCEOCCLUSIONSENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; -} EAXSOURCEOCCLUSIONSENDPROPERTIES, *LPEAXSOURCEOCCLUSIONSENDPROPERTIES; - -// Use this structure for EAXSOURCE_EXCLUSIONSENDPARAMETERS -typedef struct _EAXSOURCEEXCLUSIONSENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lExclusion; - float flExclusionLFRatio; -} EAXSOURCEEXCLUSIONSENDPROPERTIES, *LPEAXSOURCEEXCLUSIONSENDPROPERTIES; - -// Use this structure for EAXFXSLOT_ALLPARAMETERS -// - all levels are hundredths of decibels -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myFXSlot.guidLoadEffect = EAX_REVERB_EFFECT; -// myFXSlot.lVolume = 0; -// myFXSlot.lLock = 1; -// myFXSlot.ulFlags = myFlags /* see EAXFXSLOTFLAGS below */ ; -// instead of: -// myFXSlot = { EAX_REVERB_EFFECT, 0, 1, 0x00000001 }; -// -typedef struct _EAXFXSLOTPROPERTIES -{ - GUID guidLoadEffect; - long lVolume; - long lLock; - unsigned long ulFlags; -} EAXFXSLOTPROPERTIES, *LPEAXFXSLOTPROPERTIES; - -// Use this structure for EAXREVERB_REFLECTIONSPAN and EAXREVERB_REVERBPAN properties. -#ifndef EAXVECTOR_DEFINED -#define EAXVECTOR_DEFINED -typedef struct _EAXVECTOR { - float x; - float y; - float z; -} EAXVECTOR; -#endif - - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Error Codes - -#define EAX_OK 0 -#define EAXERR_INVALID_OPERATION (-1) -#define EAXERR_INVALID_VALUE (-2) -#define EAXERR_NO_EFFECT_LOADED (-3) -#define EAXERR_UNKNOWN_EFFECT (-4) -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Context Object - -// {1D4870AD-0DEF-43c0-A40C-523632296342} -DEFINE_GUID(EAXPROPERTYID_EAX40_Context, - 0x1d4870ad, - 0xdef, - 0x43c0, - 0xa4, 0xc, 0x52, 0x36, 0x32, 0x29, 0x63, 0x42); - -// For compatibility with future EAX versions: -#define EAXPROPERTYID_EAX_Context EAXPROPERTYID_EAX40_Context - -typedef enum -{ - EAXCONTEXT_NONE = 0, - EAXCONTEXT_ALLPARAMETERS, - EAXCONTEXT_PRIMARYFXSLOTID, - EAXCONTEXT_DISTANCEFACTOR, - EAXCONTEXT_AIRABSORPTIONHF, - EAXCONTEXT_HFREFERENCE, - EAXCONTEXT_LASTERROR -} EAXCONTEXT_PROPERTY; - -// OR these flags with property id -#define EAXCONTEXT_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXCONTEXT_PARAMETER_DEFER 0x80000000 // changes take effect later -#define EAXCONTEXT_PARAMETER_COMMITDEFERREDSETTINGS (EAXCONTEXT_NONE | \ - EAXCONTEXT_PARAMETER_IMMEDIATE) - -// EAX Context property ranges and defaults: -#define EAXCONTEXT_DEFAULTPRIMARYFXSLOTID EAXPROPERTYID_EAX40_FXSlot0 - -#define EAXCONTEXT_MINDISTANCEFACTOR FLT_MIN //minimum positive value -#define EAXCONTEXT_MAXDISTANCEFACTOR FLT_MAX -#define EAXCONTEXT_DEFAULTDISTANCEFACTOR 1.0f - -#define EAXCONTEXT_MINAIRABSORPTIONHF (-100.0f) -#define EAXCONTEXT_MAXAIRABSORPTIONHF 0.0f -#define EAXCONTEXT_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAXCONTEXT_MINHFREFERENCE 1000.0f -#define EAXCONTEXT_MAXHFREFERENCE 20000.0f -#define EAXCONTEXT_DEFAULTHFREFERENCE 5000.0f - -#define EAXCONTEXT_DEFAULTLASTERROR EAX_OK - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Effect Slot Objects - -// {C4D79F1E-F1AC-436b-A81D-A738E7045469} -DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot0, - 0xc4d79f1e, - 0xf1ac, - 0x436b, - 0xa8, 0x1d, 0xa7, 0x38, 0xe7, 0x4, 0x54, 0x69); - -// {08C00E96-74BE-4491-93AA-E8AD35A49117} -DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot1, - 0x8c00e96, - 0x74be, - 0x4491, - 0x93, 0xaa, 0xe8, 0xad, 0x35, 0xa4, 0x91, 0x17); - -// {1D433B88-F0F6-4637-919F-60E7E06B5EDD} -DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot2, - 0x1d433b88, - 0xf0f6, - 0x4637, - 0x91, 0x9f, 0x60, 0xe7, 0xe0, 0x6b, 0x5e, 0xdd); - -// {EFFF08EA-C7D8-44ab-93AD-6DBD5F910064} -DEFINE_GUID(EAXPROPERTYID_EAX40_FXSlot3, - 0xefff08ea, - 0xc7d8, - 0x44ab, - 0x93, 0xad, 0x6d, 0xbd, 0x5f, 0x91, 0x0, 0x64); - -// For compatibility with future EAX versions: -#define EAXPROPERTYID_EAX_FXSlot0 EAXPROPERTYID_EAX40_FXSlot0 -#define EAXPROPERTYID_EAX_FXSlot1 EAXPROPERTYID_EAX40_FXSlot1 -#define EAXPROPERTYID_EAX_FXSlot2 EAXPROPERTYID_EAX40_FXSlot2 -#define EAXPROPERTYID_EAX_FXSlot3 EAXPROPERTYID_EAX40_FXSlot3 - -// FXSlot object properties -typedef enum -{ - EAXFXSLOT_PARAMETER = 0, // range 0-0x40 reserved for loaded effect parameters - EAXFXSLOT_NONE = 0x10000, - EAXFXSLOT_ALLPARAMETERS, - EAXFXSLOT_LOADEFFECT, - EAXFXSLOT_VOLUME, - EAXFXSLOT_LOCK, - EAXFXSLOT_FLAGS -} EAXFXSLOT_PROPERTY; - -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXFXSLOTFLAGS_ENVIRONMENT; -// instead of: -// myFlags = 0x00000001; -// -#define EAXFXSLOTFLAGS_ENVIRONMENT 0x00000001 -#define EAXFXSLOTFLAGS_RESERVED 0xFFFFFFFE // reserved future use - -// EAX Effect Slot property ranges and defaults: -#define EAXFXSLOT_MINVOLUME (-10000) -#define EAXFXSLOT_MAXVOLUME 0 -#define EAXFXSLOT_DEFAULTVOLUME 0 - -#define EAXFXSLOT_MINLOCK 0 -#define EAXFXSLOT_MAXLOCK 1 - -enum -{ - EAXFXSLOT_UNLOCKED = 0, - EAXFXSLOT_LOCKED = 1 -}; - -#define EAXFXSLOT_DEFAULTFLAGS (EAXFXSLOTFLAGS_ENVIRONMENT) -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Source Object - -// {1B86B823-22DF-4eae-8B3C-1278CE544227} -DEFINE_GUID(EAXPROPERTYID_EAX40_Source, - 0x1b86b823, - 0x22df, - 0x4eae, - 0x8b, 0x3c, 0x12, 0x78, 0xce, 0x54, 0x42, 0x27); - -// For compatibility with future EAX versions: -#define EAXPROPERTYID_EAX_Source EAXPROPERTYID_EAX40_Source - -// Source object properties -typedef enum -{ - EAXSOURCE_NONE, - EAXSOURCE_ALLPARAMETERS, - EAXSOURCE_OBSTRUCTIONPARAMETERS, - EAXSOURCE_OCCLUSIONPARAMETERS, - EAXSOURCE_EXCLUSIONPARAMETERS, - EAXSOURCE_DIRECT, - EAXSOURCE_DIRECTHF, - EAXSOURCE_ROOM, - EAXSOURCE_ROOMHF, - EAXSOURCE_OBSTRUCTION, - EAXSOURCE_OBSTRUCTIONLFRATIO, - EAXSOURCE_OCCLUSION, - EAXSOURCE_OCCLUSIONLFRATIO, - EAXSOURCE_OCCLUSIONROOMRATIO, - EAXSOURCE_OCCLUSIONDIRECTRATIO, - EAXSOURCE_EXCLUSION, - EAXSOURCE_EXCLUSIONLFRATIO, - EAXSOURCE_OUTSIDEVOLUMEHF, - EAXSOURCE_DOPPLERFACTOR, - EAXSOURCE_ROLLOFFFACTOR, - EAXSOURCE_ROOMROLLOFFFACTOR, - EAXSOURCE_AIRABSORPTIONFACTOR, - EAXSOURCE_FLAGS, - EAXSOURCE_SENDPARAMETERS, - EAXSOURCE_ALLSENDPARAMETERS, - EAXSOURCE_OCCLUSIONSENDPARAMETERS, - EAXSOURCE_EXCLUSIONSENDPARAMETERS, - EAXSOURCE_ACTIVEFXSLOTID, -} EAXSOURCE_PROPERTY; - -// OR these flags with property id -#define EAXSOURCE_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXSOURCE_PARAMETER_DEFERRED 0x80000000 // changes take effect later -#define EAXSOURCE_PARAMETER_COMMITDEFERREDSETTINGS (EAXSOURCE_NONE | \ - EAXSOURCE_PARAMETER_IMMEDIATE) -// Used by EAXSOURCE_FLAGS for EAXSOURCEFLAGS_xxxAUTO -// TRUE: value is computed automatically - property is an offset -// FALSE: value is used directly -// -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXSOURCE_DIRECTHFAUTO | EAXSOURCE_ROOMAUTO; -// instead of: -// myFlags = 0x00000003; -// -#define EAXSOURCEFLAGS_DIRECTHFAUTO 0x00000001 // relates to EAXSOURCE_DIRECTHF -#define EAXSOURCEFLAGS_ROOMAUTO 0x00000002 // relates to EAXSOURCE_ROOM -#define EAXSOURCEFLAGS_ROOMHFAUTO 0x00000004 // relates to EAXSOURCE_ROOMHF -#define EAXSOURCEFLAGS_RESERVED 0xFFFFFFF8 // reserved future use - -// EAX Source property ranges and defaults: -#define EAXSOURCE_MINSEND (-10000) -#define EAXSOURCE_MAXSEND 0 -#define EAXSOURCE_DEFAULTSEND 0 - -#define EAXSOURCE_MINSENDHF (-10000) -#define EAXSOURCE_MAXSENDHF 0 -#define EAXSOURCE_DEFAULTSENDHF 0 - -#define EAXSOURCE_MINDIRECT (-10000) -#define EAXSOURCE_MAXDIRECT 1000 -#define EAXSOURCE_DEFAULTDIRECT 0 - -#define EAXSOURCE_MINDIRECTHF (-10000) -#define EAXSOURCE_MAXDIRECTHF 0 -#define EAXSOURCE_DEFAULTDIRECTHF 0 - -#define EAXSOURCE_MINROOM (-10000) -#define EAXSOURCE_MAXROOM 1000 -#define EAXSOURCE_DEFAULTROOM 0 - -#define EAXSOURCE_MINROOMHF (-10000) -#define EAXSOURCE_MAXROOMHF 0 -#define EAXSOURCE_DEFAULTROOMHF 0 - -#define EAXSOURCE_MINOBSTRUCTION (-10000) -#define EAXSOURCE_MAXOBSTRUCTION 0 -#define EAXSOURCE_DEFAULTOBSTRUCTION 0 - -#define EAXSOURCE_MINOBSTRUCTIONLFRATIO 0.0f -#define EAXSOURCE_MAXOBSTRUCTIONLFRATIO 1.0f -#define EAXSOURCE_DEFAULTOBSTRUCTIONLFRATIO 0.0f - -#define EAXSOURCE_MINOCCLUSION (-10000) -#define EAXSOURCE_MAXOCCLUSION 0 -#define EAXSOURCE_DEFAULTOCCLUSION 0 - -#define EAXSOURCE_MINOCCLUSIONLFRATIO 0.0f -#define EAXSOURCE_MAXOCCLUSIONLFRATIO 1.0f -#define EAXSOURCE_DEFAULTOCCLUSIONLFRATIO 0.25f - -#define EAXSOURCE_MINOCCLUSIONROOMRATIO 0.0f -#define EAXSOURCE_MAXOCCLUSIONROOMRATIO 10.0f -#define EAXSOURCE_DEFAULTOCCLUSIONROOMRATIO 1.5f - -#define EAXSOURCE_MINOCCLUSIONDIRECTRATIO 0.0f -#define EAXSOURCE_MAXOCCLUSIONDIRECTRATIO 10.0f -#define EAXSOURCE_DEFAULTOCCLUSIONDIRECTRATIO 1.0f - -#define EAXSOURCE_MINEXCLUSION (-10000) -#define EAXSOURCE_MAXEXCLUSION 0 -#define EAXSOURCE_DEFAULTEXCLUSION 0 - -#define EAXSOURCE_MINEXCLUSIONLFRATIO 0.0f -#define EAXSOURCE_MAXEXCLUSIONLFRATIO 1.0f -#define EAXSOURCE_DEFAULTEXCLUSIONLFRATIO 1.0f - -#define EAXSOURCE_MINOUTSIDEVOLUMEHF (-10000) -#define EAXSOURCE_MAXOUTSIDEVOLUMEHF 0 -#define EAXSOURCE_DEFAULTOUTSIDEVOLUMEHF 0 - -#define EAXSOURCE_MINDOPPLERFACTOR 0.0f -#define EAXSOURCE_MAXDOPPLERFACTOR 10.f -#define EAXSOURCE_DEFAULTDOPPLERFACTOR 1.0f - -#define EAXSOURCE_MINROLLOFFFACTOR 0.0f -#define EAXSOURCE_MAXROLLOFFFACTOR 10.f -#define EAXSOURCE_DEFAULTROLLOFFFACTOR 0.0f - -#define EAXSOURCE_MINROOMROLLOFFFACTOR 0.0f -#define EAXSOURCE_MAXROOMROLLOFFFACTOR 10.f -#define EAXSOURCE_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXSOURCE_MINAIRABSORPTIONFACTOR 0.0f -#define EAXSOURCE_MAXAIRABSORPTIONFACTOR 10.0f -#define EAXSOURCE_DEFAULTAIRABSORPTIONFACTOR 0.0f - -#define EAXSOURCE_DEFAULTFLAGS (EAXSOURCEFLAGS_DIRECTHFAUTO | \ - EAXSOURCEFLAGS_ROOMAUTO | \ - EAXSOURCEFLAGS_ROOMHFAUTO ) - -#define EAXSOURCE_DEFAULTACTIVEFXSLOTID {{ EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \ - { EAX_PrimaryFXSlotID.Data1, EAX_PrimaryFXSlotID.Data2, \ - EAX_PrimaryFXSlotID.Data3, EAX_PrimaryFXSlotID.Data4[0],\ - EAX_PrimaryFXSlotID.Data4[1],EAX_PrimaryFXSlotID.Data4[2],\ - EAX_PrimaryFXSlotID.Data4[3],EAX_PrimaryFXSlotID.Data4[4],\ - EAX_PrimaryFXSlotID.Data4[5],EAX_PrimaryFXSlotID.Data4[6],\ - EAX_PrimaryFXSlotID.Data4[7] }} - - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Reverb Effect - -// EAX REVERB {0CF95C8F-A3CC-4849-B0B6-832ECC1822DF} -DEFINE_GUID(EAX_REVERB_EFFECT, - 0xcf95c8f, - 0xa3cc, - 0x4849, - 0xb0, 0xb6, 0x83, 0x2e, 0xcc, 0x18, 0x22, 0xdf); - -// Reverb effect properties -typedef enum -{ - EAXREVERB_NONE, - EAXREVERB_ALLPARAMETERS, - EAXREVERB_ENVIRONMENT, - EAXREVERB_ENVIRONMENTSIZE, - EAXREVERB_ENVIRONMENTDIFFUSION, - EAXREVERB_ROOM, - EAXREVERB_ROOMHF, - EAXREVERB_ROOMLF, - EAXREVERB_DECAYTIME, - EAXREVERB_DECAYHFRATIO, - EAXREVERB_DECAYLFRATIO, - EAXREVERB_REFLECTIONS, - EAXREVERB_REFLECTIONSDELAY, - EAXREVERB_REFLECTIONSPAN, - EAXREVERB_REVERB, - EAXREVERB_REVERBDELAY, - EAXREVERB_REVERBPAN, - EAXREVERB_ECHOTIME, - EAXREVERB_ECHODEPTH, - EAXREVERB_MODULATIONTIME, - EAXREVERB_MODULATIONDEPTH, - EAXREVERB_AIRABSORPTIONHF, - EAXREVERB_HFREFERENCE, - EAXREVERB_LFREFERENCE, - EAXREVERB_ROOMROLLOFFFACTOR, - EAXREVERB_FLAGS, -} EAXREVERB_PROPERTY; - -// OR these flags with property id -#define EAXREVERB_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXREVERB_DEFERRED 0x80000000 // changes take effect later -#define EAXREVERB_COMMITDEFERREDSETTINGS (EAXREVERB_NONE | \ - EAXREVERB_IMMEDIATE) - -// used by EAXREVERB_ENVIRONMENT -#ifndef EAX_ENVIRONMENTS_DEFINED -#define EAX_ENVIRONMENTS_DEFINED -enum -{ - EAX_ENVIRONMENT_GENERIC, - EAX_ENVIRONMENT_PADDEDCELL, - EAX_ENVIRONMENT_ROOM, - EAX_ENVIRONMENT_BATHROOM, - EAX_ENVIRONMENT_LIVINGROOM, - EAX_ENVIRONMENT_STONEROOM, - EAX_ENVIRONMENT_AUDITORIUM, - EAX_ENVIRONMENT_CONCERTHALL, - EAX_ENVIRONMENT_CAVE, - EAX_ENVIRONMENT_ARENA, - EAX_ENVIRONMENT_HANGAR, - EAX_ENVIRONMENT_CARPETEDHALLWAY, - EAX_ENVIRONMENT_HALLWAY, - EAX_ENVIRONMENT_STONECORRIDOR, - EAX_ENVIRONMENT_ALLEY, - EAX_ENVIRONMENT_FOREST, - EAX_ENVIRONMENT_CITY, - EAX_ENVIRONMENT_MOUNTAINS, - EAX_ENVIRONMENT_QUARRY, - EAX_ENVIRONMENT_PLAIN, - EAX_ENVIRONMENT_PARKINGLOT, - EAX_ENVIRONMENT_SEWERPIPE, - EAX_ENVIRONMENT_UNDERWATER, - EAX_ENVIRONMENT_DRUGGED, - EAX_ENVIRONMENT_DIZZY, - EAX_ENVIRONMENT_PSYCHOTIC, - - EAX_ENVIRONMENT_UNDEFINED, - - EAX_ENVIRONMENT_COUNT -}; -#endif - -// Used by EAXREVERB_FLAGS -// -// Note: The number and order of flags may change in future EAX versions. -// It is recommended to use the flag defines as follows: -// myFlags = EAXREVERBFLAGS_DECAYTIMESCALE | EAXREVERBFLAGS_REVERBSCALE; -// instead of: -// myFlags = 0x00000009; -// -// These flags determine what properties are affected by environment size. -#define EAXREVERBFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time -#define EAXREVERBFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level -#define EAXREVERBFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time -#define EAXREVERBFLAGS_REVERBSCALE 0x00000008 // reflections level -#define EAXREVERBFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time -#define EAXREVERBFLAGS_ECHOTIMESCALE 0x00000040 // echo time -#define EAXREVERBFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time -// This flag limits high-frequency decay time according to air absorption. -#define EAXREVERBFLAGS_DECAYHFLIMIT 0x00000020 -#define EAXREVERBFLAGS_RESERVED 0xFFFFFF00 // reserved future use - -// Use this structure for EAXREVERB_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all times and delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myReverb.lRoom = -1000; -// myReverb.lRoomHF = -100; -// ... -// myReverb.dwFlags = myFlags /* see EAXREVERBFLAGS below */ ; -// instead of: -// myReverb = { -1000, -100, ... , 0x00000009 }; -// If you want to save and load presets in binary form, you -// should define your own structure to insure future compatibility. -// -typedef struct _EAXREVERBPROPERTIES -{ - unsigned long ulEnvironment; // sets all reverb properties - float flEnvironmentSize; // environment size in meters - float flEnvironmentDiffusion; // environment diffusion - long lRoom; // room effect level (at mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lRoomLF; // relative room effect level at low frequencies - float flDecayTime; // reverberation decay time at mid frequencies - float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio - float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio - long lReflections; // early reflections level relative to room effect - float flReflectionsDelay; // initial reflection delay time - EAXVECTOR vReflectionsPan; // early reflections panning vector - long lReverb; // late reverberation level relative to room effect - float flReverbDelay; // late reverberation delay time relative to initial reflection - EAXVECTOR vReverbPan; // late reverberation panning vector - float flEchoTime; // echo time - float flEchoDepth; // echo depth - float flModulationTime; // modulation time - float flModulationDepth; // modulation depth - float flAirAbsorptionHF; // change in level per meter at high frequencies - float flHFReference; // reference high frequency - float flLFReference; // reference low frequency - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - unsigned long ulFlags; // modifies the behavior of properties -} EAXREVERBPROPERTIES, *LPEAXREVERBPROPERTIES; - -// Property ranges and defaults: -#define EAXREVERB_MINENVIRONMENT 0 -#define EAXREVERB_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1) -#define EAXREVERB_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC - -#define EAXREVERB_MINENVIRONMENTSIZE 1.0f -#define EAXREVERB_MAXENVIRONMENTSIZE 100.0f -#define EAXREVERB_DEFAULTENVIRONMENTSIZE 7.5f - -#define EAXREVERB_MINENVIRONMENTDIFFUSION 0.0f -#define EAXREVERB_MAXENVIRONMENTDIFFUSION 1.0f -#define EAXREVERB_DEFAULTENVIRONMENTDIFFUSION 1.0f - -#define EAXREVERB_MINROOM (-10000) -#define EAXREVERB_MAXROOM 0 -#define EAXREVERB_DEFAULTROOM (-1000) - -#define EAXREVERB_MINROOMHF (-10000) -#define EAXREVERB_MAXROOMHF 0 -#define EAXREVERB_DEFAULTROOMHF (-100) - -#define EAXREVERB_MINROOMLF (-10000) -#define EAXREVERB_MAXROOMLF 0 -#define EAXREVERB_DEFAULTROOMLF 0 - -#define EAXREVERB_MINDECAYTIME 0.1f -#define EAXREVERB_MAXDECAYTIME 20.0f -#define EAXREVERB_DEFAULTDECAYTIME 1.49f - -#define EAXREVERB_MINDECAYHFRATIO 0.1f -#define EAXREVERB_MAXDECAYHFRATIO 2.0f -#define EAXREVERB_DEFAULTDECAYHFRATIO 0.83f - -#define EAXREVERB_MINDECAYLFRATIO 0.1f -#define EAXREVERB_MAXDECAYLFRATIO 2.0f -#define EAXREVERB_DEFAULTDECAYLFRATIO 1.00f - -#define EAXREVERB_MINREFLECTIONS (-10000) -#define EAXREVERB_MAXREFLECTIONS 1000 -#define EAXREVERB_DEFAULTREFLECTIONS (-2602) - -#define EAXREVERB_MINREFLECTIONSDELAY 0.0f -#define EAXREVERB_MAXREFLECTIONSDELAY 0.3f -#define EAXREVERB_DEFAULTREFLECTIONSDELAY 0.007f - -#define EAXREVERB_DEFAULTREFLECTIONSPAN {0.0f, 0.0f, 0.0f} - -#define EAXREVERB_MINREVERB (-10000) -#define EAXREVERB_MAXREVERB 2000 -#define EAXREVERB_DEFAULTREVERB 200 - -#define EAXREVERB_MINREVERBDELAY 0.0f -#define EAXREVERB_MAXREVERBDELAY 0.1f -#define EAXREVERB_DEFAULTREVERBDELAY 0.011f - -#define EAXREVERB_DEFAULTREVERBPAN {0.0f, 0.0f, 0.0f} - -#define EAXREVERB_MINECHOTIME 0.075f -#define EAXREVERB_MAXECHOTIME 0.25f -#define EAXREVERB_DEFAULTECHOTIME 0.25f - -#define EAXREVERB_MINECHODEPTH 0.0f -#define EAXREVERB_MAXECHODEPTH 1.0f -#define EAXREVERB_DEFAULTECHODEPTH 0.0f - -#define EAXREVERB_MINMODULATIONTIME 0.04f -#define EAXREVERB_MAXMODULATIONTIME 4.0f -#define EAXREVERB_DEFAULTMODULATIONTIME 0.25f - -#define EAXREVERB_MINMODULATIONDEPTH 0.0f -#define EAXREVERB_MAXMODULATIONDEPTH 1.0f -#define EAXREVERB_DEFAULTMODULATIONDEPTH 0.0f - -#define EAXREVERB_MINAIRABSORPTIONHF (-100.0f) -#define EAXREVERB_MAXAIRABSORPTIONHF 0.0f -#define EAXREVERB_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAXREVERB_MINHFREFERENCE 1000.0f -#define EAXREVERB_MAXHFREFERENCE 20000.0f -#define EAXREVERB_DEFAULTHFREFERENCE 5000.0f - -#define EAXREVERB_MINLFREFERENCE 20.0f -#define EAXREVERB_MAXLFREFERENCE 1000.0f -#define EAXREVERB_DEFAULTLFREFERENCE 250.0f - -#define EAXREVERB_MINROOMROLLOFFFACTOR 0.0f -#define EAXREVERB_MAXROOMROLLOFFFACTOR 10.0f -#define EAXREVERB_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXREVERB_DEFAULTFLAGS (EAXREVERBFLAGS_DECAYTIMESCALE | \ - EAXREVERBFLAGS_REFLECTIONSSCALE | \ - EAXREVERBFLAGS_REFLECTIONSDELAYSCALE | \ - EAXREVERBFLAGS_REVERBSCALE | \ - EAXREVERBFLAGS_REVERBDELAYSCALE | \ - EAXREVERBFLAGS_DECAYHFLIMIT) -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// - -// New Effect Types - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// AGC Compressor Effect - -// EAX AGC COMPRESSOR {BFB7A01E-7825-4039-927F-3AABDA0C560} - -DEFINE_GUID(EAX_AGCCOMPRESSOR_EFFECT, - 0xbfb7a01e, - 0x7825, - 0x4039, - 0x92, 0x7f, 0x3, 0xaa, 0xbd, 0xa0, 0xc5, 0x60); - -// AGC Compressor properties -typedef enum -{ - EAXAGCCOMPRESSOR_NONE, - EAXAGCCOMPRESSOR_ALLPARAMETERS, - EAXAGCCOMPRESSOR_ONOFF -} EAXAGCCOMPRESSOR_PROPERTY; - -// OR these flags with property id -#define EAXAGCCOMPRESSOR_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXAGCCOMPRESSOR_DEFERRED 0x80000000 // changes take effect later -#define EAXAGCCOMPRESSOR_COMMITDEFERREDSETTINGS (EAXAGCCOMPRESSOR_NONE | \ - EAXAGCCOMPRESSOR_IMMEDIATE) - -// Use this structure for EAXAGCCOMPRESSOR_ALLPARAMETERS -typedef struct _EAXAGCCOMPRESSORPROPERTIES -{ - unsigned long ulOnOff; // Switch Compressor on or off -} EAXAGCCOMPRESSORPROPERTIES, *LPEAXAGCCOMPRESSORPROPERTIES; - -// Property ranges and defaults: - -#define EAXAGCCOMPRESSOR_MINONOFF 0 -#define EAXAGCCOMPRESSOR_MAXONOFF 1 -#define EAXAGCCOMPRESSOR_DEFAULTONOFF 1 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Autowah Effect - -// EAX AUTOWAH {EC3130C0-AC7A-11D2-88DD-A024D13CE1} -DEFINE_GUID(EAX_AUTOWAH_EFFECT, - 0xec3130c0, - 0xac7a, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Autowah properties -typedef enum -{ - EAXAUTOWAH_NONE, - EAXAUTOWAH_ALLPARAMETERS, - EAXAUTOWAH_ATTACKTIME, - EAXAUTOWAH_RELEASETIME, - EAXAUTOWAH_RESONANCE, - EAXAUTOWAH_PEAKLEVEL -} EAXAUTOWAH_PROPERTY; - -// OR these flags with property id -#define EAXAUTOWAH_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXAUTOWAH_DEFERRED 0x80000000 // changes take effect later -#define EAXAUTOWAH_COMMITDEFERREDSETTINGS (EAXAUTOWAH_NONE | \ - EAXAUTOWAH_IMMEDIATE) - -// Use this structure for EAXAUTOWAH_ALLPARAMETERS -typedef struct _EAXAUTOWAHPROPERTIES -{ - float flAttackTime; // Attack time (seconds) - float flReleaseTime; // Release time (seconds) - long lResonance; // Resonance (mB) - long lPeakLevel; // Peak level (mB) -} EAXAUTOWAHPROPERTIES, *LPEAXAUTOWAHPROPERTIES; - -// Property ranges and defaults: - -#define EAXAUTOWAH_MINATTACKTIME 0.0001f -#define EAXAUTOWAH_MAXATTACKTIME 1.0f -#define EAXAUTOWAH_DEFAULTATTACKTIME 0.06f - -#define EAXAUTOWAH_MINRELEASETIME 0.0001f -#define EAXAUTOWAH_MAXRELEASETIME 1.0f -#define EAXAUTOWAH_DEFAULTRELEASETIME 0.06f - -#define EAXAUTOWAH_MINRESONANCE 600 -#define EAXAUTOWAH_MAXRESONANCE 6000 -#define EAXAUTOWAH_DEFAULTRESONANCE 6000 - -#define EAXAUTOWAH_MINPEAKLEVEL (-9000) -#define EAXAUTOWAH_MAXPEAKLEVEL 9000 -#define EAXAUTOWAH_DEFAULTPEAKLEVEL 2100 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Chorus Effect - -// EAX CHORUS {DE6D6FE0-AC79-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_CHORUS_EFFECT, - 0xde6d6fe0, - 0xac79, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - - -// Chorus properties -typedef enum -{ - EAXCHORUS_NONE, - EAXCHORUS_ALLPARAMETERS, - EAXCHORUS_WAVEFORM, - EAXCHORUS_PHASE, - EAXCHORUS_RATE, - EAXCHORUS_DEPTH, - EAXCHORUS_FEEDBACK, - EAXCHORUS_DELAY -} EAXCHORUS_PROPERTY; - -// OR these flags with property id -#define EAXCHORUS_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXCHORUS_DEFERRED 0x80000000 // changes take effect later -#define EAXCHORUS_COMMITDEFERREDSETTINGS (EAXCHORUS_NONE | \ - EAXCHORUS_IMMEDIATE) - -// used by EAXCHORUS_WAVEFORM -enum -{ - EAX_CHORUS_SINUSOID, - EAX_CHORUS_TRIANGLE -}; - -// Use this structure for EAXCHORUS_ALLPARAMETERS -typedef struct _EAXCHORUSPROPERTIES -{ - unsigned long ulWaveform; // Waveform selector - see enum above - long lPhase; // Phase (Degrees) - float flRate; // Rate (Hz) - float flDepth; // Depth (0 to 1) - float flFeedback; // Feedback (-1 to 1) - float flDelay; // Delay (seconds) -} EAXCHORUSPROPERTIES, *LPEAXCHORUSPROPERTIES; - -// Property ranges and defaults: - -#define EAXCHORUS_MINWAVEFORM 0 -#define EAXCHORUS_MAXWAVEFORM 1 -#define EAXCHORUS_DEFAULTWAVEFORM 1 - -#define EAXCHORUS_MINPHASE (-180) -#define EAXCHORUS_MAXPHASE 180 -#define EAXCHORUS_DEFAULTPHASE 90 - -#define EAXCHORUS_MINRATE 0.0f -#define EAXCHORUS_MAXRATE 10.0f -#define EAXCHORUS_DEFAULTRATE 1.1f - -#define EAXCHORUS_MINDEPTH 0.0f -#define EAXCHORUS_MAXDEPTH 1.0f -#define EAXCHORUS_DEFAULTDEPTH 0.1f - -#define EAXCHORUS_MINFEEDBACK (-1.0f) -#define EAXCHORUS_MAXFEEDBACK 1.0f -#define EAXCHORUS_DEFAULTFEEDBACK 0.25f - -#define EAXCHORUS_MINDELAY 0.0f -#define EAXCHORUS_MAXDELAY 0.016f -#define EAXCHORUS_DEFAULTDELAY 0.016f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Distortion Effect - -// EAX DISTORTION {975A4CE0-AC7E-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_DISTORTION_EFFECT, - 0x975a4ce0, - 0xac7e, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Distortion properties -typedef enum -{ - EAXDISTORTION_NONE, - EAXDISTORTION_ALLPARAMETERS, - EAXDISTORTION_EDGE, - EAXDISTORTION_GAIN, - EAXDISTORTION_LOWPASSCUTOFF, - EAXDISTORTION_EQCENTER, - EAXDISTORTION_EQBANDWIDTH -} EAXDISTORTION_PROPERTY; - -// OR these flags with property id -#define EAXDISTORTION_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXDISTORTION_DEFERRED 0x80000000 // changes take effect later -#define EAXDISTORTION_COMMITDEFERREDSETTINGS (EAXDISTORTION_NONE | \ - EAXDISTORTION_IMMEDIATE) - -// Use this structure for EAXDISTORTION_ALLPARAMETERS -typedef struct _EAXDISTORTIONPROPERTIES -{ - float flEdge; // Controls the shape of the distortion (0 to 1) - long lGain; // Controls the post distortion gain (mB) - float flLowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz) - float flEQCenter; // Controls the center frequency of the EQ post-distortion (Hz) - float flEQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz) -} EAXDISTORTIONPROPERTIES, *LPEAXDISTORTIONPROPERTIES; - -// Property ranges and defaults: - -#define EAXDISTORTION_MINEDGE 0.0f -#define EAXDISTORTION_MAXEDGE 1.0f -#define EAXDISTORTION_DEFAULTEDGE 0.2f - -#define EAXDISTORTION_MINGAIN (-6000) -#define EAXDISTORTION_MAXGAIN 0 -#define EAXDISTORTION_DEFAULTGAIN (-2600) - -#define EAXDISTORTION_MINLOWPASSCUTOFF 80.0f -#define EAXDISTORTION_MAXLOWPASSCUTOFF 24000.0f -#define EAXDISTORTION_DEFAULTLOWPASSCUTOFF 8000.0f - -#define EAXDISTORTION_MINEQCENTER 80.0f -#define EAXDISTORTION_MAXEQCENTER 24000.0f -#define EAXDISTORTION_DEFAULTEQCENTER 3600.0f - -#define EAXDISTORTION_MINEQBANDWIDTH 80.0f -#define EAXDISTORTION_MAXEQBANDWIDTH 24000.0f -#define EAXDISTORTION_DEFAULTEQBANDWIDTH 3600.0f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Echo Effect - -// EAX ECHO {E9F1BC0-AC82-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_ECHO_EFFECT, - 0xe9f1bc0, - 0xac82, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Echo properties -typedef enum -{ - EAXECHO_NONE, - EAXECHO_ALLPARAMETERS, - EAXECHO_DELAY, - EAXECHO_LRDELAY, - EAXECHO_DAMPING, - EAXECHO_FEEDBACK, - EAXECHO_SPREAD -} EAXECHO_PROPERTY; - -// OR these flags with property id -#define EAXECHO_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXECHO_DEFERRED 0x80000000 // changes take effect later -#define EAXECHO_COMMITDEFERREDSETTINGS (EAXECHO_NONE | \ - EAXECHO_IMMEDIATE) - -// Use this structure for EAXECHO_ALLPARAMETERS -typedef struct _EAXECHOPROPERTIES -{ - float flDelay; // Controls the initial delay time (seconds) - float flLRDelay; // Controls the delay time between the first and second taps (seconds) - float flDamping; // Controls a low-pass filter that dampens the echoes (0 to 1) - float flFeedback; // Controls the duration of echo repetition (0 to 1) - float flSpread; // Controls the left-right spread of the echoes -} EAXECHOPROPERTIES, *LPEAXECHOPROPERTIES; - -// Property ranges and defaults: - -#define EAXECHO_MINDAMPING 0.0f -#define EAXECHO_MAXDAMPING 0.99f -#define EAXECHO_DEFAULTDAMPING 0.5f - -#define EAXECHO_MINDELAY 0.0f -#define EAXECHO_MAXDELAY 0.207f -#define EAXECHO_DEFAULTDELAY 0.1f - -#define EAXECHO_MINLRDELAY 0.0f -#define EAXECHO_MAXLRDELAY 0.404f -#define EAXECHO_DEFAULTLRDELAY 0.1f - -#define EAXECHO_MINFEEDBACK 0.0f -#define EAXECHO_MAXFEEDBACK 1.0f -#define EAXECHO_DEFAULTFEEDBACK 0.5f - -#define EAXECHO_MINSPREAD (-1.0f) -#define EAXECHO_MAXSPREAD 1.0f -#define EAXECHO_DEFAULTSPREAD (-1.0f) - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Equalizer Effect - -// EAX EQUALIZER {65F94CE0-9793-11D3-939D-C0F02DD6F0} - -DEFINE_GUID(EAX_EQUALIZER_EFFECT, - 0x65f94ce0, - 0x9793, - 0x11d3, - 0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0); - - -// Equalizer properties -typedef enum -{ - EAXEQUALIZER_NONE, - EAXEQUALIZER_ALLPARAMETERS, - EAXEQUALIZER_LOWGAIN, - EAXEQUALIZER_LOWCUTOFF, - EAXEQUALIZER_MID1GAIN, - EAXEQUALIZER_MID1CENTER, - EAXEQUALIZER_MID1WIDTH, - EAXEQUALIZER_MID2GAIN, - EAXEQUALIZER_MID2CENTER, - EAXEQUALIZER_MID2WIDTH, - EAXEQUALIZER_HIGHGAIN, - EAXEQUALIZER_HIGHCUTOFF -} EAXEQUALIZER_PROPERTY; - -// OR these flags with property id -#define EAXEQUALIZER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXEQUALIZER_DEFERRED 0x80000000 // changes take effect later -#define EAXEQUALIZER_COMMITDEFERREDSETTINGS (EAXEQUALIZER_NONE | \ - EAXEQUALIZER_IMMEDIATE) - -// Use this structure for EAXEQUALIZER_ALLPARAMETERS -typedef struct _EAXEQUALIZERPROPERTIES -{ - long lLowGain; // (mB) - float flLowCutOff; // (Hz) - long lMid1Gain; // (mB) - float flMid1Center; // (Hz) - float flMid1Width; // (octaves) - long lMid2Gain; // (mB) - float flMid2Center; // (Hz) - float flMid2Width; // (octaves) - long lHighGain; // (mB) - float flHighCutOff; // (Hz) -} EAXEQUALIZERPROPERTIES, *LPEAXEQUALIZERPROPERTIES; - -// Property ranges and defaults: - -#define EAXEQUALIZER_MINLOWGAIN (-1800) -#define EAXEQUALIZER_MAXLOWGAIN 1800 -#define EAXEQUALIZER_DEFAULTLOWGAIN 0 - -#define EAXEQUALIZER_MINLOWCUTOFF 50.0f -#define EAXEQUALIZER_MAXLOWCUTOFF 800.0f -#define EAXEQUALIZER_DEFAULTLOWCUTOFF 200.0f - -#define EAXEQUALIZER_MINMID1GAIN (-1800) -#define EAXEQUALIZER_MAXMID1GAIN 1800 -#define EAXEQUALIZER_DEFAULTMID1GAIN 0 - -#define EAXEQUALIZER_MINMID1CENTER 200.0f -#define EAXEQUALIZER_MAXMID1CENTER 3000.0f -#define EAXEQUALIZER_DEFAULTMID1CENTER 500.0f - -#define EAXEQUALIZER_MINMID1WIDTH 0.01f -#define EAXEQUALIZER_MAXMID1WIDTH 1.0f -#define EAXEQUALIZER_DEFAULTMID1WIDTH 1.0f - -#define EAXEQUALIZER_MINMID2GAIN (-1800) -#define EAXEQUALIZER_MAXMID2GAIN 1800 -#define EAXEQUALIZER_DEFAULTMID2GAIN 0 - -#define EAXEQUALIZER_MINMID2CENTER 1000.0f -#define EAXEQUALIZER_MAXMID2CENTER 8000.0f -#define EAXEQUALIZER_DEFAULTMID2CENTER 3000.0f - -#define EAXEQUALIZER_MINMID2WIDTH 0.01f -#define EAXEQUALIZER_MAXMID2WIDTH 1.0f -#define EAXEQUALIZER_DEFAULTMID2WIDTH 1.0f - -#define EAXEQUALIZER_MINHIGHGAIN (-1800) -#define EAXEQUALIZER_MAXHIGHGAIN 1800 -#define EAXEQUALIZER_DEFAULTHIGHGAIN 0 - -#define EAXEQUALIZER_MINHIGHCUTOFF 4000.0f -#define EAXEQUALIZER_MAXHIGHCUTOFF 16000.0f -#define EAXEQUALIZER_DEFAULTHIGHCUTOFF 6000.0f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Flanger Effect - -// EAX FLANGER {A70007C0-7D2-11D3-9B1E-A024D13CE1} - -DEFINE_GUID(EAX_FLANGER_EFFECT, - 0xa70007c0, - 0x7d2, - 0x11d3, - 0x9b, 0x1e, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Flanger properties -typedef enum -{ - EAXFLANGER_NONE, - EAXFLANGER_ALLPARAMETERS, - EAXFLANGER_WAVEFORM, - EAXFLANGER_PHASE, - EAXFLANGER_RATE, - EAXFLANGER_DEPTH, - EAXFLANGER_FEEDBACK, - EAXFLANGER_DELAY -} EAXFLANGER_PROPERTY; - -// OR these flags with property id -#define EAXFLANGER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXFLANGER_DEFERRED 0x80000000 // changes take effect later -#define EAXFLANGER_COMMITDEFERREDSETTINGS (EAXFLANGER_NONE | \ - EAXFLANGER_IMMEDIATE) - -// used by EAXFLANGER_WAVEFORM -enum -{ - EAX_FLANGER_SINUSOID, - EAX_FLANGER_TRIANGLE -}; - -// Use this structure for EAXFLANGER_ALLPARAMETERS -typedef struct _EAXFLANGERPROPERTIES -{ - unsigned long ulWaveform; // Waveform selector - see enum above - long lPhase; // Phase (Degrees) - float flRate; // Rate (Hz) - float flDepth; // Depth (0 to 1) - float flFeedback; // Feedback (0 to 1) - float flDelay; // Delay (seconds) -} EAXFLANGERPROPERTIES, *LPEAXFLANGERPROPERTIES; - -// Property ranges and defaults: - -#define EAXFLANGER_MINWAVEFORM 0 -#define EAXFLANGER_MAXWAVEFORM 1 -#define EAXFLANGER_DEFAULTWAVEFORM 1 - -#define EAXFLANGER_MINPHASE (-180) -#define EAXFLANGER_MAXPHASE 180 -#define EAXFLANGER_DEFAULTPHASE 0 - -#define EAXFLANGER_MINRATE 0.0f -#define EAXFLANGER_MAXRATE 10.0f -#define EAXFLANGER_DEFAULTRATE 0.27f - -#define EAXFLANGER_MINDEPTH 0.0f -#define EAXFLANGER_MAXDEPTH 1.0f -#define EAXFLANGER_DEFAULTDEPTH 1.0f - -#define EAXFLANGER_MINFEEDBACK (-1.0f) -#define EAXFLANGER_MAXFEEDBACK 1.0f -#define EAXFLANGER_DEFAULTFEEDBACK (-0.5f) - -#define EAXFLANGER_MINDELAY 0.0f -#define EAXFLANGER_MAXDELAY 0.004f -#define EAXFLANGER_DEFAULTDELAY 0.002f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Frequency Shifter Effect - -// EAX FREQUENCY SHIFTER {DC3E1880-9212-11D3-939D-C0F02DD6F0} - -DEFINE_GUID(EAX_FREQUENCYSHIFTER_EFFECT, - 0xdc3e1880, - 0x9212, - 0x11d3, - 0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0); - -// Frequency Shifter properties -typedef enum -{ - EAXFREQUENCYSHIFTER_NONE, - EAXFREQUENCYSHIFTER_ALLPARAMETERS, - EAXFREQUENCYSHIFTER_FREQUENCY, - EAXFREQUENCYSHIFTER_LEFTDIRECTION, - EAXFREQUENCYSHIFTER_RIGHTDIRECTION -} EAXFREQUENCYSHIFTER_PROPERTY; - -// OR these flags with property id -#define EAXFREQUENCYSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXFREQUENCYSHIFTER_DEFERRED 0x80000000 // changes take effect later -#define EAXFREQUENCYSHIFTER_COMMITDEFERREDSETTINGS (EAXFREQUENCYSHIFTER_NONE | \ - EAXFREQUENCYSHIFTER_IMMEDIATE) - -// used by EAXFREQUENCYSHIFTER_LEFTDIRECTION and EAXFREQUENCYSHIFTER_RIGHTDIRECTION -enum -{ - EAX_FREQUENCYSHIFTER_DOWN, - EAX_FREQUENCYSHIFTER_UP, - EAX_FREQUENCYSHIFTER_OFF -}; - -// Use this structure for EAXFREQUENCYSHIFTER_ALLPARAMETERS -typedef struct _EAXFREQUENCYSHIFTERPROPERTIES -{ - float flFrequency; // (Hz) - unsigned long ulLeftDirection; // see enum above - unsigned long ulRightDirection; // see enum above -} EAXFREQUENCYSHIFTERPROPERTIES, *LPEAXFREQUENCYSHIFTERPROPERTIES; - -// Property ranges and defaults: - -#define EAXFREQUENCYSHIFTER_MINFREQUENCY 0.0f -#define EAXFREQUENCYSHIFTER_MAXFREQUENCY 24000.0f -#define EAXFREQUENCYSHIFTER_DEFAULTFREQUENCY 0.0f - -#define EAXFREQUENCYSHIFTER_MINLEFTDIRECTION 0 -#define EAXFREQUENCYSHIFTER_MAXLEFTDIRECTION 2 -#define EAXFREQUENCYSHIFTER_DEFAULTLEFTDIRECTION 0 - -#define EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION 0 -#define EAXFREQUENCYSHIFTER_MAXRIGHTDIRECTION 2 -#define EAXFREQUENCYSHIFTER_DEFAULTRIGHTDIRECTION 0 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Vocal Morpher Effect - -// EAX VOCAL MORPHER {E41CF10C-3383-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_VOCALMORPHER_EFFECT, - 0xe41cf10c, - 0x3383, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Vocal Morpher properties -typedef enum -{ - EAXVOCALMORPHER_NONE, - EAXVOCALMORPHER_ALLPARAMETERS, - EAXVOCALMORPHER_PHONEMEA, - EAXVOCALMORPHER_PHONEMEACOARSETUNING, - EAXVOCALMORPHER_PHONEMEB, - EAXVOCALMORPHER_PHONEMEBCOARSETUNING, - EAXVOCALMORPHER_WAVEFORM, - EAXVOCALMORPHER_RATE -} EAXVOCALMORPHER_PROPERTY; - -// OR these flags with property id -#define EAXVOCALMORPHER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXVOCALMORPHER_DEFERRED 0x80000000 // changes take effect later -#define EAXVOCALMORPHER_COMMITDEFERREDSETTINGS (EAXVOCALMORPHER_NONE | \ - EAXVOCALMORPHER_IMMEDIATE) - -// used by EAXVOCALMORPHER_PHONEMEA and EAXVOCALMORPHER_PHONEMEB -enum -{ - A, E, I, O, U, AA, AE, AH, AO, EH, ER, IH, IY, UH, UW, B, D, F, G, - J, K, L, M, N, P, R, S, T, V, Z -}; - -// used by EAXVOCALMORPHER_WAVEFORM -enum -{ - EAX_VOCALMORPHER_SINUSOID, - EAX_VOCALMORPHER_TRIANGLE, - EAX_VOCALMORPHER_SAWTOOTH -}; - -// Use this structure for EAXVOCALMORPHER_ALLPARAMETERS -typedef struct _EAXVOCALMORPHERPROPERTIES -{ - unsigned long ulPhonemeA; // see enum above - long lPhonemeACoarseTuning; // (semitones) - unsigned long ulPhonemeB; // see enum above - long lPhonemeBCoarseTuning; // (semitones) - unsigned long ulWaveform; // Waveform selector - see enum above - float flRate; // (Hz) -} EAXVOCALMORPHERPROPERTIES, *LPEAXVOCALMORPHERPROPERTIES; - -// Property ranges and defaults: - -#define EAXVOCALMORPHER_MINPHONEMEA 0 -#define EAXVOCALMORPHER_MAXPHONEMEA 29 -#define EAXVOCALMORPHER_DEFAULTPHONEMEA 0 - -#define EAXVOCALMORPHER_MINPHONEMEACOARSETUNING (-24) -#define EAXVOCALMORPHER_MAXPHONEMEACOARSETUNING 24 -#define EAXVOCALMORPHER_DEFAULTPHONEMEACOARSETUNING 0 - -#define EAXVOCALMORPHER_MINPHONEMEB 0 -#define EAXVOCALMORPHER_MAXPHONEMEB 29 -#define EAXVOCALMORPHER_DEFAULTPHONEMEB 10 - -#define EAXVOCALMORPHER_MINPHONEMEBCOARSETUNING (-24) -#define EAXVOCALMORPHER_MAXPHONEMEBCOARSETUNING 24 -#define EAXVOCALMORPHER_DEFAULTPHONEMEBCOARSETUNING 0 - -#define EAXVOCALMORPHER_MINWAVEFORM 0 -#define EAXVOCALMORPHER_MAXWAVEFORM 2 -#define EAXVOCALMORPHER_DEFAULTWAVEFORM 0 - -#define EAXVOCALMORPHER_MINRATE 0.0f -#define EAXVOCALMORPHER_MAXRATE 10.0f -#define EAXVOCALMORPHER_DEFAULTRATE 1.41f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Pitch Shifter Effect - -// EAX PITCH SHIFTER {E7905100-AFB2-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_PITCHSHIFTER_EFFECT, - 0xe7905100, - 0xafb2, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Pitch Shifter properties -typedef enum -{ - EAXPITCHSHIFTER_NONE, - EAXPITCHSHIFTER_ALLPARAMETERS, - EAXPITCHSHIFTER_COARSETUNE, - EAXPITCHSHIFTER_FINETUNE -} EAXPITCHSHIFTER_PROPERTY; - -// OR these flags with property id -#define EAXPITCHSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXPITCHSHIFTER_DEFERRED 0x80000000 // changes take effect later -#define EAXPITCHSHIFTER_COMMITDEFERREDSETTINGS (EAXPITCHSHIFTER_NONE | \ - EAXPITCHSHIFTER_IMMEDIATE) - -// Use this structure for EAXPITCHSHIFTER_ALLPARAMETERS -typedef struct _EAXPITCHSHIFTERPROPERTIES -{ - long lCoarseTune; // Amount of pitch shift (semitones) - long lFineTune; // Amount of pitch shift (cents) -} EAXPITCHSHIFTERPROPERTIES, *LPEAXPITCHSHIFTERPROPERTIES; - -// Property ranges and defaults: - -#define EAXPITCHSHIFTER_MINCOARSETUNE (-12) -#define EAXPITCHSHIFTER_MAXCOARSETUNE 12 -#define EAXPITCHSHIFTER_DEFAULTCOARSETUNE 12 - -#define EAXPITCHSHIFTER_MINFINETUNE (-50) -#define EAXPITCHSHIFTER_MAXFINETUNE 50 -#define EAXPITCHSHIFTER_DEFAULTFINETUNE 0 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Ring Modulator Effect - -// EAX RING MODULATOR {B89FE60-AFB5-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_RINGMODULATOR_EFFECT, - 0xb89fe60, - 0xafb5, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Ring Modulator properties -typedef enum -{ - EAXRINGMODULATOR_NONE, - EAXRINGMODULATOR_ALLPARAMETERS, - EAXRINGMODULATOR_FREQUENCY, - EAXRINGMODULATOR_HIGHPASSCUTOFF, - EAXRINGMODULATOR_WAVEFORM -} EAXRINGMODULATOR_PROPERTY; - -// OR these flags with property id -#define EAXRINGMODULATOR_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXRINGMODULATOR_DEFERRED 0x80000000 // changes take effect later -#define EAXRINGMODULATOR_COMMITDEFERREDSETTINGS (EAXRINGMODULATOR_NONE | \ - EAXRINGMODULATOR_IMMEDIATE) - -// used by EAXRINGMODULATOR_WAVEFORM -enum -{ - EAX_RINGMODULATOR_SINUSOID, - EAX_RINGMODULATOR_SAWTOOTH, - EAX_RINGMODULATOR_SQUARE -}; - -// Use this structure for EAXRINGMODULATOR_ALLPARAMETERS -typedef struct _EAXRINGMODULATORPROPERTIES -{ - float flFrequency; // Frequency of modulation (Hz) - float flHighPassCutOff; // Cut-off frequency of high-pass filter (Hz) - unsigned long ulWaveform; // Waveform selector - see enum above -} EAXRINGMODULATORPROPERTIES, *LPEAXRINGMODULATORPROPERTIES; - -// Property ranges and defaults: - -#define EAXRINGMODULATOR_MINFREQUENCY 0.0f -#define EAXRINGMODULATOR_MAXFREQUENCY 8000.0f -#define EAXRINGMODULATOR_DEFAULTFREQUENCY 440.0f - -#define EAXRINGMODULATOR_MINHIGHPASSCUTOFF 0.0f -#define EAXRINGMODULATOR_MAXHIGHPASSCUTOFF 24000.0f -#define EAXRINGMODULATOR_DEFAULTHIGHPASSCUTOFF 800.0f - -#define EAXRINGMODULATOR_MINWAVEFORM 0 -#define EAXRINGMODULATOR_MAXWAVEFORM 2 -#define EAXRINGMODULATOR_DEFAULTWAVEFORM 0 - -//////////////////////////////////////////////////////////////////////////// - -#pragma pack(pop) - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif diff --git a/neo/openal/include/eax5.h b/neo/openal/include/eax5.h deleted file mode 100644 index e4cba6d9..00000000 --- a/neo/openal/include/eax5.h +++ /dev/null @@ -1,1792 +0,0 @@ -/*******************************************************************\ -* * -* EAX.H - Environmental Audio Extensions version 5.0 * -* for OpenAL and DirectSound3D * -* * -* File revision 0.9.6 version a (July 14th 2004) * -* EAX 5.0 API Spec version 1.5 * -* * -\*******************************************************************/ - -#ifndef EAX_H_INCLUDED -#define EAX_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#ifndef OPENAL - #include <dsound.h> - - /* - * EAX Unified Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5} - */ - DEFINE_GUID(CLSID_EAXDirectSound, - 0x4ff53b81, - 0x1ce0, - 0x11d3, - 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5); - - /* - * EAX Unified Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C} - */ - DEFINE_GUID(CLSID_EAXDirectSound8, - 0xca503b60, - 0xb176, - 0x11d4, - 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc); - - - -#ifdef DIRECTSOUND_VERSION -#if DIRECTSOUND_VERSION >= 0x0800 - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*); -#endif -#endif - - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*); - -#else // OPENAL - #include <al.h> - - #ifndef GUID_DEFINED - #define GUID_DEFINED - typedef struct _GUID - { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; - } GUID; - #endif // GUID_DEFINED - - #ifndef DEFINE_GUID - #ifndef INITGUID - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID /*FAR*/ name - #else - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } - #endif // INITGUID - #endif // DEFINE_GUID - - /* - * EAX OpenAL Extensions - */ - typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALboolean (*EAXSetBufferMode)(ALsizei, ALuint*, ALint); - typedef ALenum (*EAXGetBufferMode)(ALuint, ALint*); -#endif - -#pragma pack(push, 4) - - - - -//////////////////////////////////////////////////////////////////////////// -// Constants - -#define EAX_MAX_FXSLOTS 4 -#define EAX_MAX_ACTIVE_FXSLOTS 4 - -// The EAX_NULL_GUID is used by EAXFXSLOT_LOADEFFECT, EAXCONTEXT_PRIMARYFXSLOTID -// and EAXSOURCE_ACTIVEFXSLOTID - -// {00000000-0000-0000-0000-000000000000} -DEFINE_GUID(EAX_NULL_GUID, - 0x00000000, - 0x0000, - 0x0000, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); - -// The EAX_PrimaryFXSlotID GUID is used by EAXSOURCE_ACTIVEFXSLOTID -// {F317866D-924C-450C-861B-E6DAA25E7C20} -DEFINE_GUID(EAX_PrimaryFXSlotID, - 0xf317866d, - 0x924c, - 0x450c, - 0x86, 0x1b, 0xe6, 0xda, 0xa2, 0x5e, 0x7c, 0x20); - - - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Structures - -// Use this structure for EAXCONTEXT_EAXSESSION property -#ifndef EAXSESSIONPROPERTIES_DEFINED -#define EAXSESSIONPROPERTIES_DEFINED -typedef struct _EAXSESSIONPROPERTIES -{ - unsigned long ulEAXVersion; - unsigned long ulMaxActiveSends; -} EAXSESSIONPROPERTIES, *LPEAXSESSIONPROPERTIES; -#endif - -// Use this structure for EAXCONTEXT_ALL property. -#ifndef EAXCONTEXTPROPERTIES_DEFINED -#define EAXCONTEXTPROPERTIES_DEFINED -typedef struct _EAXCONTEXTPROPERTIES -{ - GUID guidPrimaryFXSlotID; - float flDistanceFactor; - float flAirAbsorptionHF; - float flHFReference; - float flMacroFXFactor; -} EAXCONTEXTPROPERTIES, *LPEAXCONTEXTPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myBuffer.lDirect = 0; -// myBuffer.lDirectHF = -200; -// ... -// myBuffer.dwFlags = myFlags /* see EAXSOURCEFLAGS below */ ; -// instead of: -// myBuffer = { 0, -200, ... , 0x00000003 }; -// -#ifndef EAXSOURCEPROPERTIES_DEFINED -#define EAXSOURCEPROPERTIES_DEFINED -typedef struct _EAXSOURCEPROPERTIES -{ - long lDirect; // direct path level (at low and mid frequencies) - long lDirectHF; // relative direct path level at high frequencies - long lRoom; // room effect level (at low and mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lObstruction; // main obstruction control (attenuation at high frequencies) - float flObstructionLFRatio; // obstruction low-frequency level re. main control - long lOcclusion; // main occlusion control (attenuation at high frequencies) - float flOcclusionLFRatio; // occlusion low-frequency level re. main control - float flOcclusionRoomRatio; // relative occlusion control for room effect - float flOcclusionDirectRatio; // relative occlusion control for direct path - long lExclusion; // main exlusion control (attenuation at high frequencies) - float flExclusionLFRatio; // exclusion low-frequency level re. main control - long lOutsideVolumeHF; // outside sound cone level at high frequencies - float flDopplerFactor; // like DS3D flDopplerFactor but per source - float flRolloffFactor; // like DS3D flRolloffFactor but per source - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - float flAirAbsorptionFactor; // multiplies EAXREVERB_AIRABSORPTIONHF - unsigned long ulFlags; // modifies the behavior of properties - float flMacroFXFactor; //###TODO### add comment here -} EAXSOURCEPROPERTIES, *LPEAXSOURCEPROPERTIES; -#endif - - -// Use this structure for EAXSOURCE_ALL2DPARAMETERS -// - all levels are hundredths of decibels -// - all delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myBuffer.lDirect = 0; -// myBuffer.lDirectHF = -200; -// ... -// myBuffer.dwFlags = myFlags /* see EAXSOURCEFLAGS below */ ; -// instead of: -// myBuffer = { 0, -200, ... , 0x00000003 }; -// -#ifndef EAXSOURCE2DPROPERTIES_DEFINED -#define EAXSOURCE2DPROPERTIES_DEFINED -typedef struct _EAXSOURCE2DPROPERTIES -{ - long lDirect; // direct path level (at low and mid frequencies) - long lDirectHF; // relative direct path level at high frequencies - long lRoom; // room effect level (at low and mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - unsigned long ulFlags; // modifies the behavior of properties -} EAXSOURCE2DPROPERTIES, *LPEAXSOURCE2DPROPERTIES; -#endif - - -// Use this structure for EAXSOURCE_ALLSENDPARAMETERS -// - all levels are hundredths of decibels -// -#ifndef EAXSOURCEALLSENDPROPERTIES_DEFINED -#define EAXSOURCEALLSENDPROPERTIES_DEFINED -typedef struct _EAXSOURCEALLSENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lSend; // send level (at low and mid frequencies) - long lSendHF; // relative send level at high frequencies - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; - long lExclusion; - float flExclusionLFRatio; -} EAXSOURCEALLSENDPROPERTIES, *LPEAXSOURCEALLSENDPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_SPEAKERLEVELS -// - level is in hundredths of decibels -// -#ifndef EAXSPEAKERLEVELPROPERTIES_DEFINED -#define EAXSPEAKERLEVELPROPERTIES_DEFINED -typedef struct _EAXSPEAKERLEVELPROPERTIES -{ - long lSpeakerID; - long lLevel; -} EAXSPEAKERLEVELPROPERTIES, *LPEAXSPEAKERLEVELPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_ACTIVEFXSLOTID -#ifndef EAXACTIVEFXSLOTS_DEFINED -#define EAXACTIVEFXSLOTS_DEFINED -typedef struct _EAXACTIVEFXSLOTS -{ - GUID guidActiveFXSlots[EAX_MAX_ACTIVE_FXSLOTS]; -} EAXACTIVEFXSLOTS, *LPEAXACTIVEFXSLOTS; -#endif - -// Use this structure for EAXSOURCE_OBSTRUCTIONPARAMETERS property. -#ifndef EAXOBSTRUCTIONPROPERTIES_DEFINED -#define EAXOBSTRUCTIONPROPERTIES_DEFINED -typedef struct _EAXOBSTRUCTIONPROPERTIES -{ - long lObstruction; - float flObstructionLFRatio; -} EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_OCCLUSIONPARAMETERS property. -#ifndef EAXOCCLUSIONPROPERTIES_DEFINED -#define EAXOCCLUSIONPROPERTIES_DEFINED -typedef struct _EAXOCCLUSIONPROPERTIES -{ - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; -} EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_EXCLUSIONPARAMETERS property. -#ifndef EAXEXCLUSIONPROPERTIES_DEFINED -#define EAXEXCLUSIONPROPERTIES_DEFINED -typedef struct _EAXEXCLUSIONPROPERTIES -{ - long lExclusion; - float flExclusionLFRatio; -} EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_SENDPARAMETERS properties. -#ifndef EAXSOURCESENDPROPERTIES_DEFINED -#define EAXSOURCESENDPROPERTIES_DEFINED -typedef struct _EAXSOURCESENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lSend; - long lSendHF; -} EAXSOURCESENDPROPERTIES, *LPEAXSOURCESENDPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_OCCLUSIONSENDPARAMETERS -#ifndef EAXSOURCEOCCLUSIONSENDPROPERTIES_DEFINED -#define EAXSOURCEOCCLUSIONSENDPROPERTIES_DEFINED -typedef struct _EAXSOURCEOCCLUSIONSENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; -} EAXSOURCEOCCLUSIONSENDPROPERTIES, *LPEAXSOURCEOCCLUSIONSENDPROPERTIES; -#endif - -// Use this structure for EAXSOURCE_EXCLUSIONSENDPARAMETERS -#ifndef EAXSOURCEEXCLUSIONSENDPROPERTIES_DEFINED -#define EAXSOURCEEXCLUSIONSENDPROPERTIES_DEFINED -typedef struct _EAXSOURCEEXCLUSIONSENDPROPERTIES -{ - GUID guidReceivingFXSlotID; - long lExclusion; - float flExclusionLFRatio; -} EAXSOURCEEXCLUSIONSENDPROPERTIES, *LPEAXSOURCEEXCLUSIONSENDPROPERTIES; -#endif - -// Use this structure for EAXFXSLOT_ALLPARAMETERS -// - all levels are hundredths of decibels -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myFXSlot.guidLoadEffect = EAX_REVERB_EFFECT; -// myFXSlot.lVolume = 0; -// myFXSlot.lLock = 1; -// myFXSlot.ulFlags = myFlags /* see EAXFXSLOTFLAGS below */ ; -// instead of: -// myFXSlot = { EAX_REVERB_EFFECT, 0, 1, 0x00000001 }; -// -#ifndef EAXFXSLOTPROPERTIES_DEFINED -#define EAXFXSLOTPROPERTIES_DEFINED -typedef struct _EAXFXSLOTPROPERTIES -{ - GUID guidLoadEffect; - long lVolume; - long lLock; - unsigned long ulFlags; - long lOcclusion; - float flOcclusionLFRatio; -} EAXFXSLOTPROPERTIES, *LPEAXFXSLOTPROPERTIES; -#endif - - -// Use this structure for EAXREVERB_REFLECTIONSPAN and EAXREVERB_REVERBPAN properties. -#ifndef EAXVECTOR_DEFINED -#define EAXVECTOR_DEFINED -typedef struct _EAXVECTOR { - float x; - float y; - float z; -} EAXVECTOR; -#endif - - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Error Codes - -#define EAX_OK 0 -#define EAXERR_INVALID_OPERATION (-1) -#define EAXERR_INVALID_VALUE (-2) -#define EAXERR_NO_EFFECT_LOADED (-3) -#define EAXERR_UNKNOWN_EFFECT (-4) -#define EAXERR_INCOMPATIBLE_SOURCE_TYPE (-5) -#define EAXERR_INCOMPATIBLE_EAX_VERSION (-6) -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Context Object - -// {57E13437-B932-4ab2-B8BD-5266C1A887EE} -DEFINE_GUID(EAXPROPERTYID_EAX50_Context, - 0x57e13437, - 0xb932, - 0x4ab2, - 0xb8, 0xbd, 0x52, 0x66, 0xc1, 0xa8, 0x87, 0xee); - -// For compatibility with future EAX versions: -#define EAXPROPERTYID_EAX_Context EAXPROPERTYID_EAX50_Context - -typedef enum -{ - EAXCONTEXT_NONE = 0, - EAXCONTEXT_ALLPARAMETERS, - EAXCONTEXT_PRIMARYFXSLOTID, - EAXCONTEXT_DISTANCEFACTOR, - EAXCONTEXT_AIRABSORPTIONHF, - EAXCONTEXT_HFREFERENCE, - EAXCONTEXT_LASTERROR, - EAXCONTEXT_SPEAKERCONFIG, - EAXCONTEXT_EAXSESSION, - EAXCONTEXT_MACROFXFACTOR -} EAXCONTEXT_PROPERTY; - -// OR these flags with property id -#define EAXCONTEXT_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXCONTEXT_PARAMETER_DEFER 0x80000000 // changes take effect later -#define EAXCONTEXT_PARAMETER_COMMITDEFERREDSETTINGS (EAXCONTEXT_NONE | \ - EAXCONTEXT_PARAMETER_IMMEDIATE) - -// EAX Context property ranges and defaults: -#define EAXCONTEXT_DEFAULTPRIMARYFXSLOTID EAXPROPERTYID_EAX50_FXSlot0 - -#define EAXCONTEXT_MINDISTANCEFACTOR FLT_MIN //minimum positive value -#define EAXCONTEXT_MAXDISTANCEFACTOR FLT_MAX -#define EAXCONTEXT_DEFAULTDISTANCEFACTOR 1.0f - -#define EAXCONTEXT_MINAIRABSORPTIONHF (-100.0f) -#define EAXCONTEXT_MAXAIRABSORPTIONHF 0.0f -#define EAXCONTEXT_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAXCONTEXT_MINHFREFERENCE 1000.0f -#define EAXCONTEXT_MAXHFREFERENCE 20000.0f -#define EAXCONTEXT_DEFAULTHFREFERENCE 5000.0f - -#define EAXCONTEXT_DEFAULTLASTERROR EAX_OK - -enum { - HEADPHONES = 0, - SPEAKERS_2, - SPEAKERS_4, - SPEAKERS_5, // 5.1 speakers - SPEAKERS_6, // 6.1 speakers - SPEAKERS_7, // 7.1 speakers -}; - -enum { - EAX_40 = 5, // EAX 4.0 - EAX_50 = 6, // EAX 5.0 -}; - -// min,max, default values for ulEAXVersion in struct EAXSESSIONPROPERTIES -#define EAXCONTEXT_MINEAXSESSION EAX_40 -#define EAXCONTEXT_MAXEAXSESSION EAX_50 -#define EAXCONTEXT_DEFAULTEAXSESSION EAX_40 - -// min,max, default values for ulMaxActiveSends in struct EAXSESSIONPROPERTIES -#define EAXCONTEXT_MINMAXACTIVESENDS 2 -#define EAXCONTEXT_MAXMAXACTIVESENDS 4 -#define EAXCONTEXT_DEFAULTMAXACTIVESENDS 2 - -#define EAXCONTEXT_MINMACROFXFACTOR 0.0f -#define EAXCONTEXT_MAXMACROFXFACTOR 1.0f -#define EAXCONTEXT_DEFAULTMACROFXFACTOR 0.0f - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Effect Slot Objects - -// {91F9590F-C388-407a-84B0-1BAE0EF71ABC} -DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot0, - 0x91f9590f, - 0xc388, - 0x407a, - 0x84, 0xb0, 0x1b, 0xae, 0xe, 0xf7, 0x1a, 0xbc); - -// {8F5F7ACA-9608-4965-8137-8213C7B9D9DE} -DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot1, - 0x8f5f7aca, - 0x9608, - 0x4965, - 0x81, 0x37, 0x82, 0x13, 0xc7, 0xb9, 0xd9, 0xde); - -// {3C0F5252-9834-46f0-A1D8-5B95C4A00A30} -DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot2, - 0x3c0f5252, - 0x9834, - 0x46f0, - 0xa1, 0xd8, 0x5b, 0x95, 0xc4, 0xa0, 0xa, 0x30); - -// {E2EB0EAA-E806-45e7-9F86-06C1571A6FA3} -DEFINE_GUID(EAXPROPERTYID_EAX50_FXSlot3, - 0xe2eb0eaa, - 0xe806, - 0x45e7, - 0x9f, 0x86, 0x6, 0xc1, 0x57, 0x1a, 0x6f, 0xa3); - - -// For compatibility with future EAX versions: -#define EAXPROPERTYID_EAX_FXSlot0 EAXPROPERTYID_EAX50_FXSlot0 -#define EAXPROPERTYID_EAX_FXSlot1 EAXPROPERTYID_EAX50_FXSlot1 -#define EAXPROPERTYID_EAX_FXSlot2 EAXPROPERTYID_EAX50_FXSlot2 -#define EAXPROPERTYID_EAX_FXSlot3 EAXPROPERTYID_EAX50_FXSlot3 - -// FXSlot object properties -typedef enum -{ - EAXFXSLOT_PARAMETER = 0, // range 0-0x40 reserved for loaded effect parameters - EAXFXSLOT_NONE = 0x10000, - EAXFXSLOT_ALLPARAMETERS, - EAXFXSLOT_LOADEFFECT, - EAXFXSLOT_VOLUME, - EAXFXSLOT_LOCK, - EAXFXSLOT_FLAGS, - EAXFXSLOT_OCCLUSION, - EAXFXSLOT_OCCLUSIONLFRATIO -} EAXFXSLOT_PROPERTY; - -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXFXSLOTFLAGS_ENVIRONMENT; -// instead of: -// myFlags = 0x00000001; -// -#define EAXFXSLOTFLAGS_ENVIRONMENT 0x00000001 -#define EAXFXSLOTFLAGS_UPMIX 0x00000002 -#define EAXFXSLOTFLAGS_RESERVED 0xFFFFFFFC // reserved future use - -// EAX Effect Slot property ranges and defaults: -#define EAXFXSLOT_MINVOLUME (-10000) -#define EAXFXSLOT_MAXVOLUME 0 -#define EAXFXSLOT_DEFAULTVOLUME 0 - -enum -{ - EAXFXSLOT_UNLOCKED = 0, - EAXFXSLOT_LOCKED = 1 -}; - -#define EAXFXSLOT_MINLOCK 0 -#define EAXFXSLOT_MAXLOCK 1 - -#define EAXFXSLOT_MINOCCLUSION (-10000) -#define EAXFXSLOT_MAXOCCLUSION 0 -#define EAXFXSLOT_DEFAULTOCCLUSION 0 - -#define EAXFXSLOT_MINOCCLUSIONLFRATIO 0.0f -#define EAXFXSLOT_MAXOCCLUSIONLFRATIO 1.0f -#define EAXFXSLOT_DEFAULTOCCLUSIONLFRATIO 0.25f - -#define EAXFXSLOT_DEFAULTFLAGS (EAXFXSLOTFLAGS_ENVIRONMENT | \ - EAXFXSLOTFLAGS_UPMIX ) // ignored for reverb -//////////////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////////////// -// Source Object - -// {5EDF82F0-24A7-4f38-8E64-2F09CA05DEE1} -DEFINE_GUID(EAXPROPERTYID_EAX50_Source, - 0x5edf82f0, - 0x24a7, - 0x4f38, - 0x8e, 0x64, 0x2f, 0x9, 0xca, 0x5, 0xde, 0xe1); - - -// For compatibility with future EAX versions: -#define EAXPROPERTYID_EAX_Source EAXPROPERTYID_EAX50_Source - -// Source object properties -typedef enum -{ - EAXSOURCE_NONE, - EAXSOURCE_ALLPARAMETERS, - EAXSOURCE_OBSTRUCTIONPARAMETERS, - EAXSOURCE_OCCLUSIONPARAMETERS, - EAXSOURCE_EXCLUSIONPARAMETERS, - EAXSOURCE_DIRECT, - EAXSOURCE_DIRECTHF, - EAXSOURCE_ROOM, - EAXSOURCE_ROOMHF, - EAXSOURCE_OBSTRUCTION, - EAXSOURCE_OBSTRUCTIONLFRATIO, - EAXSOURCE_OCCLUSION, - EAXSOURCE_OCCLUSIONLFRATIO, - EAXSOURCE_OCCLUSIONROOMRATIO, - EAXSOURCE_OCCLUSIONDIRECTRATIO, - EAXSOURCE_EXCLUSION, - EAXSOURCE_EXCLUSIONLFRATIO, - EAXSOURCE_OUTSIDEVOLUMEHF, - EAXSOURCE_DOPPLERFACTOR, - EAXSOURCE_ROLLOFFFACTOR, - EAXSOURCE_ROOMROLLOFFFACTOR, - EAXSOURCE_AIRABSORPTIONFACTOR, - EAXSOURCE_FLAGS, - EAXSOURCE_SENDPARAMETERS, - EAXSOURCE_ALLSENDPARAMETERS, - EAXSOURCE_OCCLUSIONSENDPARAMETERS, - EAXSOURCE_EXCLUSIONSENDPARAMETERS, - EAXSOURCE_ACTIVEFXSLOTID, - EAXSOURCE_MACROFXFACTOR, - EAXSOURCE_SPEAKERLEVELS, - EAXSOURCE_ALL2DPARAMETERS, -} EAXSOURCE_PROPERTY; - -// OR these flags with property id -#define EAXSOURCE_PARAMETER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXSOURCE_PARAMETER_DEFERRED 0x80000000 // changes take effect later -#define EAXSOURCE_PARAMETER_COMMITDEFERREDSETTINGS (EAXSOURCE_NONE | \ - EAXSOURCE_PARAMETER_IMMEDIATE) -// Used by EAXSOURCE_FLAGS for EAXSOURCEFLAGS_xxxAUTO -// TRUE: value is computed automatically - property is an offset -// FALSE: value is used directly -// -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXSOURCE_DIRECTHFAUTO | EAXSOURCE_ROOMAUTO; -// instead of: -// myFlags = 0x00000003; -// -#define EAXSOURCEFLAGS_DIRECTHFAUTO 0x00000001 // relates to EAXSOURCE_DIRECTHF -#define EAXSOURCEFLAGS_ROOMAUTO 0x00000002 // relates to EAXSOURCE_ROOM -#define EAXSOURCEFLAGS_ROOMHFAUTO 0x00000004 // relates to EAXSOURCE_ROOMHF -#define EAXSOURCEFLAGS_3DELEVATIONFILTER 0x00000008 -#define EAXSOURCEFLAGS_UPMIX 0x00000010 -#define EAXSOURCEFLAGS_APPLYSPEAKERLEVELS 0x00000020 -#define EAXSOURCEFLAGS_RESERVED 0xFFFFFFC0 // reserved future use - -// EAX Source property ranges and defaults: -#define EAXSOURCE_MINSEND (-10000) -#define EAXSOURCE_MAXSEND 0 -#define EAXSOURCE_DEFAULTSEND 0 - -#define EAXSOURCE_MINSENDHF (-10000) -#define EAXSOURCE_MAXSENDHF 0 -#define EAXSOURCE_DEFAULTSENDHF 0 - -#define EAXSOURCE_MINDIRECT (-10000) -#define EAXSOURCE_MAXDIRECT 1000 -#define EAXSOURCE_DEFAULTDIRECT 0 - -#define EAXSOURCE_MINDIRECTHF (-10000) -#define EAXSOURCE_MAXDIRECTHF 0 -#define EAXSOURCE_DEFAULTDIRECTHF 0 - -#define EAXSOURCE_MINROOM (-10000) -#define EAXSOURCE_MAXROOM 1000 -#define EAXSOURCE_DEFAULTROOM 0 - -#define EAXSOURCE_MINROOMHF (-10000) -#define EAXSOURCE_MAXROOMHF 0 -#define EAXSOURCE_DEFAULTROOMHF 0 - -#define EAXSOURCE_MINOBSTRUCTION (-10000) -#define EAXSOURCE_MAXOBSTRUCTION 0 -#define EAXSOURCE_DEFAULTOBSTRUCTION 0 - -#define EAXSOURCE_MINOBSTRUCTIONLFRATIO 0.0f -#define EAXSOURCE_MAXOBSTRUCTIONLFRATIO 1.0f -#define EAXSOURCE_DEFAULTOBSTRUCTIONLFRATIO 0.0f - -#define EAXSOURCE_MINOCCLUSION (-10000) -#define EAXSOURCE_MAXOCCLUSION 0 -#define EAXSOURCE_DEFAULTOCCLUSION 0 - -#define EAXSOURCE_MINOCCLUSIONLFRATIO 0.0f -#define EAXSOURCE_MAXOCCLUSIONLFRATIO 1.0f -#define EAXSOURCE_DEFAULTOCCLUSIONLFRATIO 0.25f - -#define EAXSOURCE_MINOCCLUSIONROOMRATIO 0.0f -#define EAXSOURCE_MAXOCCLUSIONROOMRATIO 10.0f -#define EAXSOURCE_DEFAULTOCCLUSIONROOMRATIO 1.5f - -#define EAXSOURCE_MINOCCLUSIONDIRECTRATIO 0.0f -#define EAXSOURCE_MAXOCCLUSIONDIRECTRATIO 10.0f -#define EAXSOURCE_DEFAULTOCCLUSIONDIRECTRATIO 1.0f - -#define EAXSOURCE_MINEXCLUSION (-10000) -#define EAXSOURCE_MAXEXCLUSION 0 -#define EAXSOURCE_DEFAULTEXCLUSION 0 - -#define EAXSOURCE_MINEXCLUSIONLFRATIO 0.0f -#define EAXSOURCE_MAXEXCLUSIONLFRATIO 1.0f -#define EAXSOURCE_DEFAULTEXCLUSIONLFRATIO 1.0f - -#define EAXSOURCE_MINOUTSIDEVOLUMEHF (-10000) -#define EAXSOURCE_MAXOUTSIDEVOLUMEHF 0 -#define EAXSOURCE_DEFAULTOUTSIDEVOLUMEHF 0 - -#define EAXSOURCE_MINDOPPLERFACTOR 0.0f -#define EAXSOURCE_MAXDOPPLERFACTOR 10.f -#define EAXSOURCE_DEFAULTDOPPLERFACTOR 1.0f - -#define EAXSOURCE_MINROLLOFFFACTOR 0.0f -#define EAXSOURCE_MAXROLLOFFFACTOR 10.f -#define EAXSOURCE_DEFAULTROLLOFFFACTOR 0.0f - -#define EAXSOURCE_MINROOMROLLOFFFACTOR 0.0f -#define EAXSOURCE_MAXROOMROLLOFFFACTOR 10.f -#define EAXSOURCE_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXSOURCE_MINAIRABSORPTIONFACTOR 0.0f -#define EAXSOURCE_MAXAIRABSORPTIONFACTOR 10.0f -#define EAXSOURCE_DEFAULTAIRABSORPTIONFACTOR 0.0f - -#define EAXSOURCE_MINMACROFXFACTOR 0.0f -#define EAXSOURCE_MAXMACROFXFACTOR 1.0f -#define EAXSOURCE_DEFAULTMACROFXFACTOR 1.0f - -#define EAXSOURCE_MINSPEAKERLEVEL (-10000) -#define EAXSOURCE_MAXSPEAKERLEVEL 0 -#define EAXSOURCE_DEFAULTSPEAKERLEVEL (-10000) - -enum -{ - EAXSPEAKER_FRONT_LEFT = 1, - EAXSPEAKER_FRONT_CENTER = 2, - EAXSPEAKER_FRONT_RIGHT = 3, - EAXSPEAKER_SIDE_RIGHT = 4, - EAXSPEAKER_REAR_RIGHT = 5, - EAXSPEAKER_REAR_CENTER = 6, - EAXSPEAKER_REAR_LEFT = 7, - EAXSPEAKER_SIDE_LEFT = 8, - EAXSPEAKER_LOW_FREQUENCY = 9 -}; - - -// EAXSOURCEFLAGS_DIRECTHFAUTO, EAXSOURCEFLAGS_ROOMAUTO and EAXSOURCEFLAGS_ROOMHFAUTO are ignored for 2D sources -// EAXSOURCEFLAGS_UPMIX is ignored for 3D sources -#define EAXSOURCE_DEFAULTFLAGS (EAXSOURCEFLAGS_DIRECTHFAUTO | \ - EAXSOURCEFLAGS_ROOMAUTO | \ - EAXSOURCEFLAGS_ROOMHFAUTO | \ - EAXSOURCEFLAGS_UPMIX ) - - -// A 3D Source's default ACTIVEFXSLOTID is { EAX_NULL_GUID, EAX_PrimaryFXSlotID, EAX_NULL_GUID, EAX_NULL_GUID } -#define EAXSOURCE_3DDEFAULTACTIVEFXSLOTID {{ EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \ - { EAX_PrimaryFXSlotID.Data1, EAX_PrimaryFXSlotID.Data2, \ - EAX_PrimaryFXSlotID.Data3, EAX_PrimaryFXSlotID.Data4[0], \ - EAX_PrimaryFXSlotID.Data4[1],EAX_PrimaryFXSlotID.Data4[2], \ - EAX_PrimaryFXSlotID.Data4[3],EAX_PrimaryFXSlotID.Data4[4], \ - EAX_PrimaryFXSlotID.Data4[5],EAX_PrimaryFXSlotID.Data4[6], \ - EAX_PrimaryFXSlotID.Data4[7] }, \ - { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \ - { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] } } - -// A 2D Source's default ACTIVEFXSLOTID is { EAX_NULL_GUID, EAX_NULL_GUID, EAX_NULL_GUID, EAX_NULL_GUID } -#define EAXSOURCE_2DDEFAULTACTIVEFXSLOTID {{ EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \ - { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \ - { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] }, \ - { EAX_NULL_GUID.Data1, EAX_NULL_GUID.Data2, EAX_NULL_GUID.Data3, \ - EAX_NULL_GUID.Data4[0],EAX_NULL_GUID.Data4[1],EAX_NULL_GUID.Data4[2],\ - EAX_NULL_GUID.Data4[3],EAX_NULL_GUID.Data4[4],EAX_NULL_GUID.Data4[5],\ - EAX_NULL_GUID.Data4[6],EAX_NULL_GUID.Data4[7] } } - - -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// -// Reverb Effect - -// EAX REVERB {0CF95C8F-A3CC-4849-B0B6-832ECC1822DF} -DEFINE_GUID(EAX_REVERB_EFFECT, - 0xcf95c8f, - 0xa3cc, - 0x4849, - 0xb0, 0xb6, 0x83, 0x2e, 0xcc, 0x18, 0x22, 0xdf); - -// Reverb effect properties -typedef enum -{ - EAXREVERB_NONE, - EAXREVERB_ALLPARAMETERS, - EAXREVERB_ENVIRONMENT, - EAXREVERB_ENVIRONMENTSIZE, - EAXREVERB_ENVIRONMENTDIFFUSION, - EAXREVERB_ROOM, - EAXREVERB_ROOMHF, - EAXREVERB_ROOMLF, - EAXREVERB_DECAYTIME, - EAXREVERB_DECAYHFRATIO, - EAXREVERB_DECAYLFRATIO, - EAXREVERB_REFLECTIONS, - EAXREVERB_REFLECTIONSDELAY, - EAXREVERB_REFLECTIONSPAN, - EAXREVERB_REVERB, - EAXREVERB_REVERBDELAY, - EAXREVERB_REVERBPAN, - EAXREVERB_ECHOTIME, - EAXREVERB_ECHODEPTH, - EAXREVERB_MODULATIONTIME, - EAXREVERB_MODULATIONDEPTH, - EAXREVERB_AIRABSORPTIONHF, - EAXREVERB_HFREFERENCE, - EAXREVERB_LFREFERENCE, - EAXREVERB_ROOMROLLOFFFACTOR, - EAXREVERB_FLAGS, -} EAXREVERB_PROPERTY; - -// OR these flags with property id -#define EAXREVERB_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXREVERB_DEFERRED 0x80000000 // changes take effect later -#define EAXREVERB_COMMITDEFERREDSETTINGS (EAXREVERB_NONE | \ - EAXREVERB_IMMEDIATE) - -// used by EAXREVERB_ENVIRONMENT -enum -{ - EAX_ENVIRONMENT_GENERIC, - EAX_ENVIRONMENT_PADDEDCELL, - EAX_ENVIRONMENT_ROOM, - EAX_ENVIRONMENT_BATHROOM, - EAX_ENVIRONMENT_LIVINGROOM, - EAX_ENVIRONMENT_STONEROOM, - EAX_ENVIRONMENT_AUDITORIUM, - EAX_ENVIRONMENT_CONCERTHALL, - EAX_ENVIRONMENT_CAVE, - EAX_ENVIRONMENT_ARENA, - EAX_ENVIRONMENT_HANGAR, - EAX_ENVIRONMENT_CARPETEDHALLWAY, - EAX_ENVIRONMENT_HALLWAY, - EAX_ENVIRONMENT_STONECORRIDOR, - EAX_ENVIRONMENT_ALLEY, - EAX_ENVIRONMENT_FOREST, - EAX_ENVIRONMENT_CITY, - EAX_ENVIRONMENT_MOUNTAINS, - EAX_ENVIRONMENT_QUARRY, - EAX_ENVIRONMENT_PLAIN, - EAX_ENVIRONMENT_PARKINGLOT, - EAX_ENVIRONMENT_SEWERPIPE, - EAX_ENVIRONMENT_UNDERWATER, - EAX_ENVIRONMENT_DRUGGED, - EAX_ENVIRONMENT_DIZZY, - EAX_ENVIRONMENT_PSYCHOTIC, - - EAX_ENVIRONMENT_UNDEFINED, - - EAX_ENVIRONMENT_COUNT -}; - -// Used by EAXREVERB_FLAGS -// -// Note: The number and order of flags may change in future EAX versions. -// It is recommended to use the flag defines as follows: -// myFlags = EAXREVERBFLAGS_DECAYTIMESCALE | EAXREVERBFLAGS_REVERBSCALE; -// instead of: -// myFlags = 0x00000009; -// -// These flags determine what properties are affected by environment size. -#define EAXREVERBFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time -#define EAXREVERBFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level -#define EAXREVERBFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time -#define EAXREVERBFLAGS_REVERBSCALE 0x00000008 // reflections level -#define EAXREVERBFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time -#define EAXREVERBFLAGS_ECHOTIMESCALE 0x00000040 // echo time -#define EAXREVERBFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time -// This flag limits high-frequency decay time according to air absorption. -#define EAXREVERBFLAGS_DECAYHFLIMIT 0x00000020 -#define EAXREVERBFLAGS_RESERVED 0xFFFFFF00 // reserved future use - -// Use this structure for EAXREVERB_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all times and delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myReverb.lRoom = -1000; -// myReverb.lRoomHF = -100; -// ... -// myReverb.dwFlags = myFlags /* see EAXREVERBFLAGS below */ ; -// instead of: -// myReverb = { -1000, -100, ... , 0x00000009 }; -// If you want to save and load presets in binary form, you -// should define your own structure to insure future compatibility. -// -#ifndef EAXREVERBPROPERTIES_DEFINED -#define EAXREVERBPROPERTIES_DEFINED -typedef struct _EAXREVERBPROPERTIES -{ - unsigned long ulEnvironment; // sets all reverb properties - float flEnvironmentSize; // environment size in meters - float flEnvironmentDiffusion; // environment diffusion - long lRoom; // room effect level (at mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lRoomLF; // relative room effect level at low frequencies - float flDecayTime; // reverberation decay time at mid frequencies - float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio - float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio - long lReflections; // early reflections level relative to room effect - float flReflectionsDelay; // initial reflection delay time - EAXVECTOR vReflectionsPan; // early reflections panning vector - long lReverb; // late reverberation level relative to room effect - float flReverbDelay; // late reverberation delay time relative to initial reflection - EAXVECTOR vReverbPan; // late reverberation panning vector - float flEchoTime; // echo time - float flEchoDepth; // echo depth - float flModulationTime; // modulation time - float flModulationDepth; // modulation depth - float flAirAbsorptionHF; // change in level per meter at high frequencies - float flHFReference; // reference high frequency - float flLFReference; // reference low frequency - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - unsigned long ulFlags; // modifies the behavior of properties -} EAXREVERBPROPERTIES, *LPEAXREVERBPROPERTIES; -#endif - -// Property ranges and defaults: -#define EAXREVERB_MINENVIRONMENT 0 -#define EAXREVERB_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1) -#define EAXREVERB_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC - -#define EAXREVERB_MINENVIRONMENTSIZE 1.0f -#define EAXREVERB_MAXENVIRONMENTSIZE 100.0f -#define EAXREVERB_DEFAULTENVIRONMENTSIZE 7.5f - -#define EAXREVERB_MINENVIRONMENTDIFFUSION 0.0f -#define EAXREVERB_MAXENVIRONMENTDIFFUSION 1.0f -#define EAXREVERB_DEFAULTENVIRONMENTDIFFUSION 1.0f - -#define EAXREVERB_MINROOM (-10000) -#define EAXREVERB_MAXROOM 0 -#define EAXREVERB_DEFAULTROOM (-1000) - -#define EAXREVERB_MINROOMHF (-10000) -#define EAXREVERB_MAXROOMHF 0 -#define EAXREVERB_DEFAULTROOMHF (-100) - -#define EAXREVERB_MINROOMLF (-10000) -#define EAXREVERB_MAXROOMLF 0 -#define EAXREVERB_DEFAULTROOMLF 0 - -#define EAXREVERB_MINDECAYTIME 0.1f -#define EAXREVERB_MAXDECAYTIME 20.0f -#define EAXREVERB_DEFAULTDECAYTIME 1.49f - -#define EAXREVERB_MINDECAYHFRATIO 0.1f -#define EAXREVERB_MAXDECAYHFRATIO 2.0f -#define EAXREVERB_DEFAULTDECAYHFRATIO 0.83f - -#define EAXREVERB_MINDECAYLFRATIO 0.1f -#define EAXREVERB_MAXDECAYLFRATIO 2.0f -#define EAXREVERB_DEFAULTDECAYLFRATIO 1.00f - -#define EAXREVERB_MINREFLECTIONS (-10000) -#define EAXREVERB_MAXREFLECTIONS 1000 -#define EAXREVERB_DEFAULTREFLECTIONS (-2602) - -#define EAXREVERB_MINREFLECTIONSDELAY 0.0f -#define EAXREVERB_MAXREFLECTIONSDELAY 0.3f -#define EAXREVERB_DEFAULTREFLECTIONSDELAY 0.007f - -#define EAXREVERB_DEFAULTREFLECTIONSPAN {0.0f, 0.0f, 0.0f} - -#define EAXREVERB_MINREVERB (-10000) -#define EAXREVERB_MAXREVERB 2000 -#define EAXREVERB_DEFAULTREVERB 200 - -#define EAXREVERB_MINREVERBDELAY 0.0f -#define EAXREVERB_MAXREVERBDELAY 0.1f -#define EAXREVERB_DEFAULTREVERBDELAY 0.011f - -#define EAXREVERB_DEFAULTREVERBPAN {0.0f, 0.0f, 0.0f} - -#define EAXREVERB_MINECHOTIME 0.075f -#define EAXREVERB_MAXECHOTIME 0.25f -#define EAXREVERB_DEFAULTECHOTIME 0.25f - -#define EAXREVERB_MINECHODEPTH 0.0f -#define EAXREVERB_MAXECHODEPTH 1.0f -#define EAXREVERB_DEFAULTECHODEPTH 0.0f - -#define EAXREVERB_MINMODULATIONTIME 0.04f -#define EAXREVERB_MAXMODULATIONTIME 4.0f -#define EAXREVERB_DEFAULTMODULATIONTIME 0.25f - -#define EAXREVERB_MINMODULATIONDEPTH 0.0f -#define EAXREVERB_MAXMODULATIONDEPTH 1.0f -#define EAXREVERB_DEFAULTMODULATIONDEPTH 0.0f - -#define EAXREVERB_MINAIRABSORPTIONHF (-100.0f) -#define EAXREVERB_MAXAIRABSORPTIONHF 0.0f -#define EAXREVERB_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAXREVERB_MINHFREFERENCE 1000.0f -#define EAXREVERB_MAXHFREFERENCE 20000.0f -#define EAXREVERB_DEFAULTHFREFERENCE 5000.0f - -#define EAXREVERB_MINLFREFERENCE 20.0f -#define EAXREVERB_MAXLFREFERENCE 1000.0f -#define EAXREVERB_DEFAULTLFREFERENCE 250.0f - -#define EAXREVERB_MINROOMROLLOFFFACTOR 0.0f -#define EAXREVERB_MAXROOMROLLOFFFACTOR 10.0f -#define EAXREVERB_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXREVERB_DEFAULTFLAGS (EAXREVERBFLAGS_DECAYTIMESCALE | \ - EAXREVERBFLAGS_REFLECTIONSSCALE | \ - EAXREVERBFLAGS_REFLECTIONSDELAYSCALE | \ - EAXREVERBFLAGS_REVERBSCALE | \ - EAXREVERBFLAGS_REVERBDELAYSCALE | \ - EAXREVERBFLAGS_DECAYHFLIMIT) -//////////////////////////////////////////////////////////////////////////// - - - - -//////////////////////////////////////////////////////////////////////////// - -// New Effect Types - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// AGC Compressor Effect - -// EAX AGC COMPRESSOR {BFB7A01E-7825-4039-927F-3AABDA0C560} - -DEFINE_GUID(EAX_AGCCOMPRESSOR_EFFECT, - 0xbfb7a01e, - 0x7825, - 0x4039, - 0x92, 0x7f, 0x3, 0xaa, 0xbd, 0xa0, 0xc5, 0x60); - -// AGC Compressor properties -typedef enum -{ - EAXAGCCOMPRESSOR_NONE, - EAXAGCCOMPRESSOR_ALLPARAMETERS, - EAXAGCCOMPRESSOR_ONOFF -} EAXAGCCOMPRESSOR_PROPERTY; - -// OR these flags with property id -#define EAXAGCCOMPRESSOR_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXAGCCOMPRESSOR_DEFERRED 0x80000000 // changes take effect later -#define EAXAGCCOMPRESSOR_COMMITDEFERREDSETTINGS (EAXAGCCOMPRESSOR_NONE | \ - EAXAGCCOMPRESSOR_IMMEDIATE) - -// Use this structure for EAXAGCCOMPRESSOR_ALLPARAMETERS -#ifndef EAXAGCCOMPRESSORPROPERTIES_DEFINED -#define EAXAGCCOMPRESSORPROPERTIES_DEFINED -typedef struct _EAXAGCCOMPRESSORPROPERTIES -{ - unsigned long ulOnOff; // Switch Compressor on or off -} EAXAGCCOMPRESSORPROPERTIES, *LPEAXAGCCOMPRESSORPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXAGCCOMPRESSOR_MINONOFF 0 -#define EAXAGCCOMPRESSOR_MAXONOFF 1 -#define EAXAGCCOMPRESSOR_DEFAULTONOFF 1 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Autowah Effect - -// EAX AUTOWAH {EC3130C0-AC7A-11D2-88DD-A024D13CE1} -DEFINE_GUID(EAX_AUTOWAH_EFFECT, - 0xec3130c0, - 0xac7a, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Autowah properties -typedef enum -{ - EAXAUTOWAH_NONE, - EAXAUTOWAH_ALLPARAMETERS, - EAXAUTOWAH_ATTACKTIME, - EAXAUTOWAH_RELEASETIME, - EAXAUTOWAH_RESONANCE, - EAXAUTOWAH_PEAKLEVEL -} EAXAUTOWAH_PROPERTY; - -// OR these flags with property id -#define EAXAUTOWAH_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXAUTOWAH_DEFERRED 0x80000000 // changes take effect later -#define EAXAUTOWAH_COMMITDEFERREDSETTINGS (EAXAUTOWAH_NONE | \ - EAXAUTOWAH_IMMEDIATE) - -// Use this structure for EAXAUTOWAH_ALLPARAMETERS -#ifndef EAXAUTOWAHPROPERTIES_DEFINED -#define EAXAUTOWAHPROPERTIES_DEFINED -typedef struct _EAXAUTOWAHPROPERTIES -{ - float flAttackTime; // Attack time (seconds) - float flReleaseTime; // Release time (seconds) - long lResonance; // Resonance (mB) - long lPeakLevel; // Peak level (mB) -} EAXAUTOWAHPROPERTIES, *LPEAXAUTOWAHPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXAUTOWAH_MINATTACKTIME 0.0001f -#define EAXAUTOWAH_MAXATTACKTIME 1.0f -#define EAXAUTOWAH_DEFAULTATTACKTIME 0.06f - -#define EAXAUTOWAH_MINRELEASETIME 0.0001f -#define EAXAUTOWAH_MAXRELEASETIME 1.0f -#define EAXAUTOWAH_DEFAULTRELEASETIME 0.06f - -#define EAXAUTOWAH_MINRESONANCE 600 -#define EAXAUTOWAH_MAXRESONANCE 6000 -#define EAXAUTOWAH_DEFAULTRESONANCE 6000 - -#define EAXAUTOWAH_MINPEAKLEVEL (-9000) -#define EAXAUTOWAH_MAXPEAKLEVEL 9000 -#define EAXAUTOWAH_DEFAULTPEAKLEVEL 2100 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Chorus Effect - -// EAX CHORUS {DE6D6FE0-AC79-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_CHORUS_EFFECT, - 0xde6d6fe0, - 0xac79, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - - -// Chorus properties -typedef enum -{ - EAXCHORUS_NONE, - EAXCHORUS_ALLPARAMETERS, - EAXCHORUS_WAVEFORM, - EAXCHORUS_PHASE, - EAXCHORUS_RATE, - EAXCHORUS_DEPTH, - EAXCHORUS_FEEDBACK, - EAXCHORUS_DELAY -} EAXCHORUS_PROPERTY; - -// OR these flags with property id -#define EAXCHORUS_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXCHORUS_DEFERRED 0x80000000 // changes take effect later -#define EAXCHORUS_COMMITDEFERREDSETTINGS (EAXCHORUS_NONE | \ - EAXCHORUS_IMMEDIATE) - -// used by EAXCHORUS_WAVEFORM -enum -{ - EAX_CHORUS_SINUSOID, - EAX_CHORUS_TRIANGLE -}; - -// Use this structure for EAXCHORUS_ALLPARAMETERS -#ifndef EAXCHORUSPROPERTIES_DEFINED -#define EAXCHORUSPROPERTIES_DEFINED -typedef struct _EAXCHORUSPROPERTIES -{ - unsigned long ulWaveform; // Waveform selector - see enum above - long lPhase; // Phase (Degrees) - float flRate; // Rate (Hz) - float flDepth; // Depth (0 to 1) - float flFeedback; // Feedback (-1 to 1) - float flDelay; // Delay (seconds) -} EAXCHORUSPROPERTIES, *LPEAXCHORUSPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXCHORUS_MINWAVEFORM 0 -#define EAXCHORUS_MAXWAVEFORM 1 -#define EAXCHORUS_DEFAULTWAVEFORM 1 - -#define EAXCHORUS_MINPHASE (-180) -#define EAXCHORUS_MAXPHASE 180 -#define EAXCHORUS_DEFAULTPHASE 90 - -#define EAXCHORUS_MINRATE 0.0f -#define EAXCHORUS_MAXRATE 10.0f -#define EAXCHORUS_DEFAULTRATE 1.1f - -#define EAXCHORUS_MINDEPTH 0.0f -#define EAXCHORUS_MAXDEPTH 1.0f -#define EAXCHORUS_DEFAULTDEPTH 0.1f - -#define EAXCHORUS_MINFEEDBACK (-1.0f) -#define EAXCHORUS_MAXFEEDBACK 1.0f -#define EAXCHORUS_DEFAULTFEEDBACK 0.25f - -#define EAXCHORUS_MINDELAY 0.0002f -#define EAXCHORUS_MAXDELAY 0.016f -#define EAXCHORUS_DEFAULTDELAY 0.016f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Distortion Effect - -// EAX DISTORTION {975A4CE0-AC7E-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_DISTORTION_EFFECT, - 0x975a4ce0, - 0xac7e, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Distortion properties -typedef enum -{ - EAXDISTORTION_NONE, - EAXDISTORTION_ALLPARAMETERS, - EAXDISTORTION_EDGE, - EAXDISTORTION_GAIN, - EAXDISTORTION_LOWPASSCUTOFF, - EAXDISTORTION_EQCENTER, - EAXDISTORTION_EQBANDWIDTH -} EAXDISTORTION_PROPERTY; - -// OR these flags with property id -#define EAXDISTORTION_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXDISTORTION_DEFERRED 0x80000000 // changes take effect later -#define EAXDISTORTION_COMMITDEFERREDSETTINGS (EAXDISTORTION_NONE | \ - EAXDISTORTION_IMMEDIATE) - -// Use this structure for EAXDISTORTION_ALLPARAMETERS -#ifndef EAXDISTORTIONPROPERTIES_DEFINED -#define EAXDISTORTIONPROPERTIES_DEFINED -typedef struct _EAXDISTORTIONPROPERTIES -{ - float flEdge; // Controls the shape of the distortion (0 to 1) - long lGain; // Controls the post distortion gain (mB) - float flLowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz) - float flEQCenter; // Controls the center frequency of the EQ post-distortion (Hz) - float flEQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz) -} EAXDISTORTIONPROPERTIES, *LPEAXDISTORTIONPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXDISTORTION_MINEDGE 0.0f -#define EAXDISTORTION_MAXEDGE 1.0f -#define EAXDISTORTION_DEFAULTEDGE 0.2f - -#define EAXDISTORTION_MINGAIN (-6000) -#define EAXDISTORTION_MAXGAIN 0 -#define EAXDISTORTION_DEFAULTGAIN (-2600) - -#define EAXDISTORTION_MINLOWPASSCUTOFF 80.0f -#define EAXDISTORTION_MAXLOWPASSCUTOFF 24000.0f -#define EAXDISTORTION_DEFAULTLOWPASSCUTOFF 8000.0f - -#define EAXDISTORTION_MINEQCENTER 80.0f -#define EAXDISTORTION_MAXEQCENTER 24000.0f -#define EAXDISTORTION_DEFAULTEQCENTER 3600.0f - -#define EAXDISTORTION_MINEQBANDWIDTH 80.0f -#define EAXDISTORTION_MAXEQBANDWIDTH 24000.0f -#define EAXDISTORTION_DEFAULTEQBANDWIDTH 3600.0f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Echo Effect - -// EAX ECHO {E9F1BC0-AC82-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_ECHO_EFFECT, - 0xe9f1bc0, - 0xac82, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Echo properties -typedef enum -{ - EAXECHO_NONE, - EAXECHO_ALLPARAMETERS, - EAXECHO_DELAY, - EAXECHO_LRDELAY, - EAXECHO_DAMPING, - EAXECHO_FEEDBACK, - EAXECHO_SPREAD -} EAXECHO_PROPERTY; - -// OR these flags with property id -#define EAXECHO_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXECHO_DEFERRED 0x80000000 // changes take effect later -#define EAXECHO_COMMITDEFERREDSETTINGS (EAXECHO_NONE | \ - EAXECHO_IMMEDIATE) - -// Use this structure for EAXECHO_ALLPARAMETERS -#ifndef EAXECHOPROPERTIES_DEFINED -#define EAXECHOPROPERTIES_DEFINED -typedef struct _EAXECHOPROPERTIES -{ - float flDelay; // Controls the initial delay time (seconds) - float flLRDelay; // Controls the delay time between the first and second taps (seconds) - float flDamping; // Controls a low-pass filter that dampens the echoes (0 to 1) - float flFeedback; // Controls the duration of echo repetition (0 to 1) - float flSpread; // Controls the left-right spread of the echoes -} EAXECHOPROPERTIES, *LPEAXECHOPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXECHO_MINDAMPING 0.0f -#define EAXECHO_MAXDAMPING 0.99f -#define EAXECHO_DEFAULTDAMPING 0.5f - -#define EAXECHO_MINDELAY 0.002f -#define EAXECHO_MAXDELAY 0.207f -#define EAXECHO_DEFAULTDELAY 0.1f - -#define EAXECHO_MINLRDELAY 0.0f -#define EAXECHO_MAXLRDELAY 0.404f -#define EAXECHO_DEFAULTLRDELAY 0.1f - -#define EAXECHO_MINFEEDBACK 0.0f -#define EAXECHO_MAXFEEDBACK 1.0f -#define EAXECHO_DEFAULTFEEDBACK 0.5f - -#define EAXECHO_MINSPREAD (-1.0f) -#define EAXECHO_MAXSPREAD 1.0f -#define EAXECHO_DEFAULTSPREAD (-1.0f) - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Equalizer Effect - -// EAX EQUALIZER {65F94CE0-9793-11D3-939D-C0F02DD6F0} - -DEFINE_GUID(EAX_EQUALIZER_EFFECT, - 0x65f94ce0, - 0x9793, - 0x11d3, - 0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0); - - -// Equalizer properties -typedef enum -{ - EAXEQUALIZER_NONE, - EAXEQUALIZER_ALLPARAMETERS, - EAXEQUALIZER_LOWGAIN, - EAXEQUALIZER_LOWCUTOFF, - EAXEQUALIZER_MID1GAIN, - EAXEQUALIZER_MID1CENTER, - EAXEQUALIZER_MID1WIDTH, - EAXEQUALIZER_MID2GAIN, - EAXEQUALIZER_MID2CENTER, - EAXEQUALIZER_MID2WIDTH, - EAXEQUALIZER_HIGHGAIN, - EAXEQUALIZER_HIGHCUTOFF -} EAXEQUALIZER_PROPERTY; - -// OR these flags with property id -#define EAXEQUALIZER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXEQUALIZER_DEFERRED 0x80000000 // changes take effect later -#define EAXEQUALIZER_COMMITDEFERREDSETTINGS (EAXEQUALIZER_NONE | \ - EAXEQUALIZER_IMMEDIATE) - -// Use this structure for EAXEQUALIZER_ALLPARAMETERS -#ifndef EAXEQUALIZERPROPERTIES_DEFINED -#define EAXEQUALIZERPROPERTIES_DEFINED -typedef struct _EAXEQUALIZERPROPERTIES -{ - long lLowGain; // (mB) - float flLowCutOff; // (Hz) - long lMid1Gain; // (mB) - float flMid1Center; // (Hz) - float flMid1Width; // (octaves) - long lMid2Gain; // (mB) - float flMid2Center; // (Hz) - float flMid2Width; // (octaves) - long lHighGain; // (mB) - float flHighCutOff; // (Hz) -} EAXEQUALIZERPROPERTIES, *LPEAXEQUALIZERPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXEQUALIZER_MINLOWGAIN (-1800) -#define EAXEQUALIZER_MAXLOWGAIN 1800 -#define EAXEQUALIZER_DEFAULTLOWGAIN 0 - -#define EAXEQUALIZER_MINLOWCUTOFF 50.0f -#define EAXEQUALIZER_MAXLOWCUTOFF 800.0f -#define EAXEQUALIZER_DEFAULTLOWCUTOFF 200.0f - -#define EAXEQUALIZER_MINMID1GAIN (-1800) -#define EAXEQUALIZER_MAXMID1GAIN 1800 -#define EAXEQUALIZER_DEFAULTMID1GAIN 0 - -#define EAXEQUALIZER_MINMID1CENTER 200.0f -#define EAXEQUALIZER_MAXMID1CENTER 3000.0f -#define EAXEQUALIZER_DEFAULTMID1CENTER 500.0f - -#define EAXEQUALIZER_MINMID1WIDTH 0.01f -#define EAXEQUALIZER_MAXMID1WIDTH 1.0f -#define EAXEQUALIZER_DEFAULTMID1WIDTH 1.0f - -#define EAXEQUALIZER_MINMID2GAIN (-1800) -#define EAXEQUALIZER_MAXMID2GAIN 1800 -#define EAXEQUALIZER_DEFAULTMID2GAIN 0 - -#define EAXEQUALIZER_MINMID2CENTER 1000.0f -#define EAXEQUALIZER_MAXMID2CENTER 8000.0f -#define EAXEQUALIZER_DEFAULTMID2CENTER 3000.0f - -#define EAXEQUALIZER_MINMID2WIDTH 0.01f -#define EAXEQUALIZER_MAXMID2WIDTH 1.0f -#define EAXEQUALIZER_DEFAULTMID2WIDTH 1.0f - -#define EAXEQUALIZER_MINHIGHGAIN (-1800) -#define EAXEQUALIZER_MAXHIGHGAIN 1800 -#define EAXEQUALIZER_DEFAULTHIGHGAIN 0 - -#define EAXEQUALIZER_MINHIGHCUTOFF 4000.0f -#define EAXEQUALIZER_MAXHIGHCUTOFF 16000.0f -#define EAXEQUALIZER_DEFAULTHIGHCUTOFF 6000.0f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Flanger Effect - -// EAX FLANGER {A70007C0-7D2-11D3-9B1E-A024D13CE1} - -DEFINE_GUID(EAX_FLANGER_EFFECT, - 0xa70007c0, - 0x7d2, - 0x11d3, - 0x9b, 0x1e, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Flanger properties -typedef enum -{ - EAXFLANGER_NONE, - EAXFLANGER_ALLPARAMETERS, - EAXFLANGER_WAVEFORM, - EAXFLANGER_PHASE, - EAXFLANGER_RATE, - EAXFLANGER_DEPTH, - EAXFLANGER_FEEDBACK, - EAXFLANGER_DELAY -} EAXFLANGER_PROPERTY; - -// OR these flags with property id -#define EAXFLANGER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXFLANGER_DEFERRED 0x80000000 // changes take effect later -#define EAXFLANGER_COMMITDEFERREDSETTINGS (EAXFLANGER_NONE | \ - EAXFLANGER_IMMEDIATE) - -// used by EAXFLANGER_WAVEFORM -enum -{ - EAX_FLANGER_SINUSOID, - EAX_FLANGER_TRIANGLE -}; - -// Use this structure for EAXFLANGER_ALLPARAMETERS -#ifndef EAXFLANGERPROPERTIES_DEFINED -#define EAXFLANGERPROPERTIES_DEFINED -typedef struct _EAXFLANGERPROPERTIES -{ - unsigned long ulWaveform; // Waveform selector - see enum above - long lPhase; // Phase (Degrees) - float flRate; // Rate (Hz) - float flDepth; // Depth (0 to 1) - float flFeedback; // Feedback (0 to 1) - float flDelay; // Delay (seconds) -} EAXFLANGERPROPERTIES, *LPEAXFLANGERPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXFLANGER_MINWAVEFORM 0 -#define EAXFLANGER_MAXWAVEFORM 1 -#define EAXFLANGER_DEFAULTWAVEFORM 1 - -#define EAXFLANGER_MINPHASE (-180) -#define EAXFLANGER_MAXPHASE 180 -#define EAXFLANGER_DEFAULTPHASE 0 - -#define EAXFLANGER_MINRATE 0.0f -#define EAXFLANGER_MAXRATE 10.0f -#define EAXFLANGER_DEFAULTRATE 0.27f - -#define EAXFLANGER_MINDEPTH 0.0f -#define EAXFLANGER_MAXDEPTH 1.0f -#define EAXFLANGER_DEFAULTDEPTH 1.0f - -#define EAXFLANGER_MINFEEDBACK (-1.0f) -#define EAXFLANGER_MAXFEEDBACK 1.0f -#define EAXFLANGER_DEFAULTFEEDBACK (-0.5f) - -#define EAXFLANGER_MINDELAY 0.0002f -#define EAXFLANGER_MAXDELAY 0.004f -#define EAXFLANGER_DEFAULTDELAY 0.002f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Frequency Shifter Effect - -// EAX FREQUENCY SHIFTER {DC3E1880-9212-11D3-939D-C0F02DD6F0} - -DEFINE_GUID(EAX_FREQUENCYSHIFTER_EFFECT, - 0xdc3e1880, - 0x9212, - 0x11d3, - 0x93, 0x9d, 0x0, 0xc0, 0xf0, 0x2d, 0xd6, 0xf0); - -// Frequency Shifter properties -typedef enum -{ - EAXFREQUENCYSHIFTER_NONE, - EAXFREQUENCYSHIFTER_ALLPARAMETERS, - EAXFREQUENCYSHIFTER_FREQUENCY, - EAXFREQUENCYSHIFTER_LEFTDIRECTION, - EAXFREQUENCYSHIFTER_RIGHTDIRECTION -} EAXFREQUENCYSHIFTER_PROPERTY; - -// OR these flags with property id -#define EAXFREQUENCYSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXFREQUENCYSHIFTER_DEFERRED 0x80000000 // changes take effect later -#define EAXFREQUENCYSHIFTER_COMMITDEFERREDSETTINGS (EAXFREQUENCYSHIFTER_NONE | \ - EAXFREQUENCYSHIFTER_IMMEDIATE) - -// used by EAXFREQUENCYSHIFTER_LEFTDIRECTION and EAXFREQUENCYSHIFTER_RIGHTDIRECTION -enum -{ - EAX_FREQUENCYSHIFTER_DOWN, - EAX_FREQUENCYSHIFTER_UP, - EAX_FREQUENCYSHIFTER_OFF -}; - -// Use this structure for EAXFREQUENCYSHIFTER_ALLPARAMETERS -#ifndef EAXFREQUENCYSHIFTERPROPERTIES_DEFINED -#define EAXFREQUENCYSHIFTERPROPERTIES_DEFINED -typedef struct _EAXFREQUENCYSHIFTERPROPERTIES -{ - float flFrequency; // (Hz) - unsigned long ulLeftDirection; // see enum above - unsigned long ulRightDirection; // see enum above -} EAXFREQUENCYSHIFTERPROPERTIES, *LPEAXFREQUENCYSHIFTERPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXFREQUENCYSHIFTER_MINFREQUENCY 0.0f -#define EAXFREQUENCYSHIFTER_MAXFREQUENCY 24000.0f -#define EAXFREQUENCYSHIFTER_DEFAULTFREQUENCY 0.0f - -#define EAXFREQUENCYSHIFTER_MINLEFTDIRECTION 0 -#define EAXFREQUENCYSHIFTER_MAXLEFTDIRECTION 2 -#define EAXFREQUENCYSHIFTER_DEFAULTLEFTDIRECTION 0 - -#define EAXFREQUENCYSHIFTER_MINRIGHTDIRECTION 0 -#define EAXFREQUENCYSHIFTER_MAXRIGHTDIRECTION 2 -#define EAXFREQUENCYSHIFTER_DEFAULTRIGHTDIRECTION 0 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Vocal Morpher Effect - -// EAX VOCAL MORPHER {E41CF10C-3383-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_VOCALMORPHER_EFFECT, - 0xe41cf10c, - 0x3383, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Vocal Morpher properties -typedef enum -{ - EAXVOCALMORPHER_NONE, - EAXVOCALMORPHER_ALLPARAMETERS, - EAXVOCALMORPHER_PHONEMEA, - EAXVOCALMORPHER_PHONEMEACOARSETUNING, - EAXVOCALMORPHER_PHONEMEB, - EAXVOCALMORPHER_PHONEMEBCOARSETUNING, - EAXVOCALMORPHER_WAVEFORM, - EAXVOCALMORPHER_RATE -} EAXVOCALMORPHER_PROPERTY; - -// OR these flags with property id -#define EAXVOCALMORPHER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXVOCALMORPHER_DEFERRED 0x80000000 // changes take effect later -#define EAXVOCALMORPHER_COMMITDEFERREDSETTINGS (EAXVOCALMORPHER_NONE | \ - EAXVOCALMORPHER_IMMEDIATE) - -// used by EAXVOCALMORPHER_PHONEMEA and EAXVOCALMORPHER_PHONEMEB -enum -{ - A, E, I, O, U, AA, AE, AH, AO, EH, ER, IH, IY, UH, UW, B, D, F, G, - J, K, L, M, N, P, R, S, T, V, Z -}; - -// used by EAXVOCALMORPHER_WAVEFORM -enum -{ - EAX_VOCALMORPHER_SINUSOID, - EAX_VOCALMORPHER_TRIANGLE, - EAX_VOCALMORPHER_SAWTOOTH -}; - -// Use this structure for EAXVOCALMORPHER_ALLPARAMETERS -#ifndef EAXVOCALMORPHERPROPERTIES_DEFINED -#define EAXVOCALMORPHERPROPERTIES_DEFINED -typedef struct _EAXVOCALMORPHERPROPERTIES -{ - unsigned long ulPhonemeA; // see enum above - long lPhonemeACoarseTuning; // (semitones) - unsigned long ulPhonemeB; // see enum above - long lPhonemeBCoarseTuning; // (semitones) - unsigned long ulWaveform; // Waveform selector - see enum above - float flRate; // (Hz) -} EAXVOCALMORPHERPROPERTIES, *LPEAXVOCALMORPHERPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXVOCALMORPHER_MINPHONEMEA 0 -#define EAXVOCALMORPHER_MAXPHONEMEA 29 -#define EAXVOCALMORPHER_DEFAULTPHONEMEA 0 - -#define EAXVOCALMORPHER_MINPHONEMEACOARSETUNING (-24) -#define EAXVOCALMORPHER_MAXPHONEMEACOARSETUNING 24 -#define EAXVOCALMORPHER_DEFAULTPHONEMEACOARSETUNING 0 - -#define EAXVOCALMORPHER_MINPHONEMEB 0 -#define EAXVOCALMORPHER_MAXPHONEMEB 29 -#define EAXVOCALMORPHER_DEFAULTPHONEMEB 10 - -#define EAXVOCALMORPHER_MINPHONEMEBCOARSETUNING (-24) -#define EAXVOCALMORPHER_MAXPHONEMEBCOARSETUNING 24 -#define EAXVOCALMORPHER_DEFAULTPHONEMEBCOARSETUNING 0 - -#define EAXVOCALMORPHER_MINWAVEFORM 0 -#define EAXVOCALMORPHER_MAXWAVEFORM 2 -#define EAXVOCALMORPHER_DEFAULTWAVEFORM 0 - -#define EAXVOCALMORPHER_MINRATE 0.0f -#define EAXVOCALMORPHER_MAXRATE 10.0f -#define EAXVOCALMORPHER_DEFAULTRATE 1.41f - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Pitch Shifter Effect - -// EAX PITCH SHIFTER {E7905100-AFB2-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_PITCHSHIFTER_EFFECT, - 0xe7905100, - 0xafb2, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Pitch Shifter properties -typedef enum -{ - EAXPITCHSHIFTER_NONE, - EAXPITCHSHIFTER_ALLPARAMETERS, - EAXPITCHSHIFTER_COARSETUNE, - EAXPITCHSHIFTER_FINETUNE -} EAXPITCHSHIFTER_PROPERTY; - -// OR these flags with property id -#define EAXPITCHSHIFTER_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXPITCHSHIFTER_DEFERRED 0x80000000 // changes take effect later -#define EAXPITCHSHIFTER_COMMITDEFERREDSETTINGS (EAXPITCHSHIFTER_NONE | \ - EAXPITCHSHIFTER_IMMEDIATE) - -// Use this structure for EAXPITCHSHIFTER_ALLPARAMETERS -#ifndef EAXPITCHSHIFTERPROPERTIES_DEFINED -#define EAXPITCHSHIFTERPROPERTIES_DEFINED -typedef struct _EAXPITCHSHIFTERPROPERTIES -{ - long lCoarseTune; // Amount of pitch shift (semitones) - long lFineTune; // Amount of pitch shift (cents) -} EAXPITCHSHIFTERPROPERTIES, *LPEAXPITCHSHIFTERPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXPITCHSHIFTER_MINCOARSETUNE (-12) -#define EAXPITCHSHIFTER_MAXCOARSETUNE 12 -#define EAXPITCHSHIFTER_DEFAULTCOARSETUNE 12 - -#define EAXPITCHSHIFTER_MINFINETUNE (-50) -#define EAXPITCHSHIFTER_MAXFINETUNE 50 -#define EAXPITCHSHIFTER_DEFAULTFINETUNE 0 - -//////////////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////////////// -// Ring Modulator Effect - -// EAX RING MODULATOR {B89FE60-AFB5-11D2-88DD-A024D13CE1} - -DEFINE_GUID(EAX_RINGMODULATOR_EFFECT, - 0xb89fe60, - 0xafb5, - 0x11d2, - 0x88, 0xdd, 0x0, 0xa0, 0x24, 0xd1, 0x3c, 0xe1); - -// Ring Modulator properties -typedef enum -{ - EAXRINGMODULATOR_NONE, - EAXRINGMODULATOR_ALLPARAMETERS, - EAXRINGMODULATOR_FREQUENCY, - EAXRINGMODULATOR_HIGHPASSCUTOFF, - EAXRINGMODULATOR_WAVEFORM -} EAXRINGMODULATOR_PROPERTY; - -// OR these flags with property id -#define EAXRINGMODULATOR_IMMEDIATE 0x00000000 // changes take effect immediately -#define EAXRINGMODULATOR_DEFERRED 0x80000000 // changes take effect later -#define EAXRINGMODULATOR_COMMITDEFERREDSETTINGS (EAXRINGMODULATOR_NONE | \ - EAXRINGMODULATOR_IMMEDIATE) - -// used by EAXRINGMODULATOR_WAVEFORM -enum -{ - EAX_RINGMODULATOR_SINUSOID, - EAX_RINGMODULATOR_SAWTOOTH, - EAX_RINGMODULATOR_SQUARE -}; - -// Use this structure for EAXRINGMODULATOR_ALLPARAMETERS -#ifndef EAXRINGMODULATORPROPERTIES_DEFINED -#define EAXRINGMODULATORPROPERTIES_DEFINED -typedef struct _EAXRINGMODULATORPROPERTIES -{ - float flFrequency; // Frequency of modulation (Hz) - float flHighPassCutOff; // Cut-off frequency of high-pass filter (Hz) - unsigned long ulWaveform; // Waveform selector - see enum above -} EAXRINGMODULATORPROPERTIES, *LPEAXRINGMODULATORPROPERTIES; -#endif - -// Property ranges and defaults: - -#define EAXRINGMODULATOR_MINFREQUENCY 0.0f -#define EAXRINGMODULATOR_MAXFREQUENCY 8000.0f -#define EAXRINGMODULATOR_DEFAULTFREQUENCY 440.0f - -#define EAXRINGMODULATOR_MINHIGHPASSCUTOFF 0.0f -#define EAXRINGMODULATOR_MAXHIGHPASSCUTOFF 24000.0f -#define EAXRINGMODULATOR_DEFAULTHIGHPASSCUTOFF 800.0f - -#define EAXRINGMODULATOR_MINWAVEFORM 0 -#define EAXRINGMODULATOR_MAXWAVEFORM 2 -#define EAXRINGMODULATOR_DEFAULTWAVEFORM 0 - -//////////////////////////////////////////////////////////////////////////// - -#pragma pack(pop) - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif diff --git a/neo/openal/include/eaxac3.h b/neo/openal/include/eaxac3.h deleted file mode 100644 index 450224e7..00000000 --- a/neo/openal/include/eaxac3.h +++ /dev/null @@ -1,232 +0,0 @@ -/************************************************************************************************ -/ -/ EAX-AC3 Open AL Extension Header file -/ -/ Description : The EAX-AC3 extension to Open AL provides a way to playback Dolby Digital AC3 -/ files on systems equipped with a SB Live! card. The packaged AC3 data is output -/ via the MMSYSTEM Wave device. -/ If a SB Live! 5.1 card is installed then the AC3 data will be decoded by the -/ audio card. -/ If a legacy SB Live! card is installed then the AC3 data will be sent directly -/ to the S/PDIF Out. -/ The API supports multiple EAX-AC3 devices, and multiple AC3 streams. However -/ the current implementation provides one EAX-AC3 device capable of playing -/ one AC3 Stream at a time. -/ -/ Programmer : Daniel Peacock Creative Labs, Inc February 2001 -/ -/************************************************************************************************/ - -#ifndef _EAXAC3_H_ -#define _EAXAC3_H_ - -// Do not define the symbol EAXAC3_EXPORTS in any projects that use the EAX-AC3 Open AL Extension -#ifdef EAXAC3_EXPORTS -#define EAXAC3_API __declspec(dllexport) -#else -#define EAXAC3_API __declspec(dllimport) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _HRESULT_DEFINED -#define _HRESULT_DEFINED -typedef signed long HRESULT; -#endif - -enum POSFORMAT { MILLISECONDS, BYTES, AC3FRAMES }; - -enum SOURCE { AC3FILE, MEMORY }; - -// Success Codes -#define EAXAC3_OK 0 -#define EAXAC3_ALREADYPLAYING 1 -#define EAXAC3_EOF 2 - -// Error Codes -#define EAXAC3ERR_UNABLETOOPENEAXAC3DEVICE -1 -#define EAXAC3ERR_WAVEOUTPREPAREHEADERFAILURE -2 -#define EAXAC3ERR_OUTOFMEMORY -3 -#define EAXAC3ERR_FILENOTFOUND -4 -#define EAXAC3ERR_AC3FILETOBIG -5 -#define EAXAC3ERR_AC3FRAMENOTFOUND -6 -#define EAXAC3ERR_AC3NOTAT48KHZ -7 -#define EAXAC3ERR_INVALIDAC3FRAME -8 -#define EAXAC3ERR_AC3FILENOTOPEN -9 -#define EAXAC3ERR_BUFFERNOTMULTIPLEOFAC3FRAMESIZE -10 -#define EAXAC3ERR_WAVEOUTERROR -11 -#define EAXAC3ERR_FAILEDTOCREATEEVENT -12 -#define EAXAC3ERR_EAXAC3DEVICENOTOPEN -13 -#define EAXAC3ERR_AC3STREAMALREADYOPEN -14 -#define EAXAC3ERR_POSITIONOUTOFRANGE -15 -#define EAXAC3ERR_NOTATSTARTOFAC3FRAME -16 -#define EAXAC3ERR_AC3STREAMNOTOPEN -17 -#define EAXAC3ERR_SETPOSITIONONLYWORKSONAC3FILES -18 -#define EAXAC3ERR_WRITEDATAONLYWORKSWITHMEMORYSTREAMS -19 -#define EAXAC3ERR_INVALIDPARAMETER -20 -#define EAXAC3ERR_NOTENOUGHAC3DATAINAC3DATABUFFER -21 -#define EAXAC3ERR_NOTENOUGHDATA -22 -#define EAXAC3ERR_EAXAC3DEVICEALREADYOPEN -23 -#define EAXAC3ERR_EAXAC3DEVICENOTFOUND -24 -#define EAXAC3ERR_UNSUPPORTED -25 -#define EAXAC3ERR_FAILEDTOCREATEFNTABLE -26 - -#define DEFAULTEAXAC3DEVICE 0 - -#define ENTIREBUFFER 0 -#define FROMWRITECURSOR 1 - -#define LOOPING 1 - -#define ENDOFDATA 1 - -typedef unsigned int EAXAC3HANDLE; - -typedef unsigned int AC3STREAM; - -// Callback function -typedef void (__stdcall *LPAC3CALLBACK)(AC3STREAM AC3Stream, int msg); - -// Callback messages -#define EAXAC3NEEDMOREDATA 0 -#define EAXAC3REACHEDEND 1 - -typedef struct -{ - unsigned int nNumOfAC3Frames; - unsigned int nAC3FrameSize; - unsigned int nSizeOfFile; - unsigned int nDuration; - unsigned int nFrequency; -} AC3FILEINFO, *LPAC3FILEINFO; - -#define UNKNOWN 1 -#define SPDIFPASSTHRU 2 -#define FULLDECODE 4 - -typedef struct -{ - char szDeviceName[256]; - unsigned int uFlags; - unsigned int uStreams; - unsigned int uReserved; -} EAXAC3DEVICEINFO, *LPEAXAC3DEVICEINFO; - -// Function typedefs - -typedef int (*LPEAXAC3QUERYNUMBEROFDEVICES) (void); -typedef HRESULT (*LPEAXAC3QUERYFILE) (char *, LPAC3FILEINFO, int); -typedef HRESULT (*LPEAXAC3QUERYMEMORY) (char *, int, LPAC3FILEINFO, int); -typedef int (*LPEAXAC3QUERYNOOFFRAMESREQFORPLAYBACK) (AC3STREAM); -typedef HRESULT (*LPEAXAC3OPENPLAYBACKDEVICE) (EAXAC3HANDLE); -typedef HRESULT (*LPEAXAC3CLOSEPLAYBACKDEVICE) (EAXAC3HANDLE); -typedef HRESULT (*LPEAXAC3QUERYDEVICECAPS) (EAXAC3HANDLE, LPEAXAC3DEVICEINFO, int); -typedef HRESULT (*LPEAXAC3GETPOSITION) (AC3STREAM, enum POSFORMAT, int *); -typedef HRESULT (*LPEAXAC3SETFILEPOSITION) (AC3STREAM, enum POSFORMAT, int); -typedef HRESULT (*LPEAXAC3OPENSTREAM) (EAXAC3HANDLE, AC3STREAM *, LPAC3CALLBACK, char *, enum SOURCE); -typedef HRESULT (*LPEAXAC3CLOSESTREAM) (AC3STREAM); -typedef HRESULT (*LPEAXAC3PREPLAYSTREAM) (AC3STREAM); -typedef HRESULT (*LPEAXAC3PLAYSTREAM) (AC3STREAM, int); -typedef HRESULT (*LPEAXAC3STOPSTREAM) (AC3STREAM); -typedef HRESULT (*LPEAXAC3PAUSESTREAM) (AC3STREAM); -typedef HRESULT (*LPEAXAC3RESUMESTREAM) (AC3STREAM); -typedef HRESULT (*LPEAXAC3LOCKBUFFER) (AC3STREAM, unsigned long, void **, unsigned long *, void **, - unsigned long *, unsigned long); -typedef HRESULT (*LPEAXAC3UNLOCKBUFFER) (AC3STREAM, void *, unsigned long, void *, unsigned long, int); -typedef HRESULT (*LPEAXAC3SETPLAYBACKMODE) (EAXAC3HANDLE, unsigned int); -typedef char * (*LPEAXAC3GETERRORSTRING) (HRESULT, char *, int); -typedef HRESULT (*LPEAXAC3GETLASTERROR) (HRESULT *); - -// Function table declaration -typedef struct -{ - LPEAXAC3QUERYNUMBEROFDEVICES EAXAC3QueryNumberOfDevices; - LPEAXAC3QUERYFILE EAXAC3QueryFile; - LPEAXAC3QUERYMEMORY EAXAC3QueryMemory; - LPEAXAC3QUERYNOOFFRAMESREQFORPLAYBACK EAXAC3QueryNoOfFramesReqForPlayback; - LPEAXAC3OPENPLAYBACKDEVICE EAXAC3OpenPlaybackDevice; - LPEAXAC3CLOSEPLAYBACKDEVICE EAXAC3ClosePlaybackDevice; - LPEAXAC3QUERYDEVICECAPS EAXAC3QueryDeviceCaps; - LPEAXAC3GETPOSITION EAXAC3GetPosition; - LPEAXAC3SETFILEPOSITION EAXAC3SetFilePosition; - LPEAXAC3OPENSTREAM EAXAC3OpenStream; - LPEAXAC3CLOSESTREAM EAXAC3CloseStream; - LPEAXAC3PREPLAYSTREAM EAXAC3PrePlayStream; - LPEAXAC3PLAYSTREAM EAXAC3PlayStream; - LPEAXAC3STOPSTREAM EAXAC3StopStream; - LPEAXAC3PAUSESTREAM EAXAC3PauseStream; - LPEAXAC3RESUMESTREAM EAXAC3ResumeStream; - LPEAXAC3LOCKBUFFER EAXAC3LockBuffer; - LPEAXAC3UNLOCKBUFFER EAXAC3UnLockBuffer; - LPEAXAC3SETPLAYBACKMODE EAXAC3SetPlaybackMode; - LPEAXAC3GETERRORSTRING EAXAC3GetErrorString; - LPEAXAC3GETLASTERROR EAXAC3GetLastError; -} EAXAC3FNTABLE, *LPEAXAC3FNTABLE; - - -#ifndef OPENAL -typedef EAXAC3_API HRESULT (*LPEAXAC3GETFUNCTIONTABLE) (LPEAXAC3FNTABLE); -#else -typedef ALboolean (*LPALEAXAC3GETFUNCTIONTABLE) (LPEAXAC3FNTABLE); -#endif - -// Functions exposed in the DLL - -EAXAC3_API HRESULT EAXAC3GetFunctionTable(LPEAXAC3FNTABLE lpEAXAC3FnTable); - -EAXAC3_API int EAXAC3QueryNumberOfDevices(); - -EAXAC3_API HRESULT EAXAC3QueryFile(char *szAC3Filename, LPAC3FILEINFO lpAC3Caps, int nSizeOfAC3FileInfoStruct); - -EAXAC3_API HRESULT EAXAC3QueryMemory(char *lpBuffer, int nSizeOfBuffer, LPAC3FILEINFO lpAC3FileInfo, - int nSizeOfAC3FileInfoStruct); - -EAXAC3_API int EAXAC3QueryNoOfFramesReqForPlayback(AC3STREAM AC3Stream); - -EAXAC3_API HRESULT EAXAC3OpenPlaybackDevice(EAXAC3HANDLE EAXAC3Handle); - -EAXAC3_API HRESULT EAXAC3ClosePlaybackDevice(EAXAC3HANDLE EAXAC3Handle); - -EAXAC3_API HRESULT EAXAC3QueryDeviceCaps(EAXAC3HANDLE EAXAC3Handle, LPEAXAC3DEVICEINFO lpEAXAC3DeviceInfo, - int nSizeOfAC3DeviceInfoStruct); - -EAXAC3_API HRESULT EAXAC3GetPosition(AC3STREAM AC3Stream, enum POSFORMAT posFormat, int *lpAmount); - -EAXAC3_API HRESULT EAXAC3SetFilePosition(AC3STREAM AC3Stream, enum POSFORMAT posFormat, int nAmount); - -EAXAC3_API HRESULT EAXAC3OpenStream(EAXAC3HANDLE EAXAC3Handle, AC3STREAM *lpAC3Stream, - LPAC3CALLBACK pAC3CallbackFn, char *szAC3Filename, enum SOURCE src); - -EAXAC3_API HRESULT EAXAC3CloseStream(AC3STREAM AC3Stream); - -EAXAC3_API HRESULT EAXAC3PrePlayStream(AC3STREAM AC3Stream); - -EAXAC3_API HRESULT EAXAC3PlayStream(AC3STREAM AC3Stream, int nLooping); - -EAXAC3_API HRESULT EAXAC3StopStream(AC3STREAM AC3Stream); - -EAXAC3_API HRESULT EAXAC3PauseStream(AC3STREAM AC3Stream); - -EAXAC3_API HRESULT EAXAC3ResumeStream(AC3STREAM AC3Stream); - -EAXAC3_API HRESULT EAXAC3LockBuffer(AC3STREAM AC3Stream, unsigned long ulBytes, void **ppvPointer1, - unsigned long *pdwBytes1, void **ppvPointer2, unsigned long *pdwBytes2, - unsigned long ulFlags); - -EAXAC3_API HRESULT EAXAC3UnLockBuffer(AC3STREAM AC3Stream, void *pvPointer1, unsigned long ulSize1, - void *pvPointer2, unsigned long ulSize2, int nFinished); - -EAXAC3_API HRESULT EAXAC3SetPlaybackMode(EAXAC3HANDLE EAXAC3Handle, unsigned int ulPlayMode); - -EAXAC3_API char * EAXAC3GetErrorString(HRESULT hr, char *szErrorString, int nSizeOfErrorString); - -EAXAC3_API HRESULT EAXAC3GetLastError(HRESULT *hr); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/include/eaxman.h b/neo/openal/include/eaxman.h deleted file mode 100644 index b54ea1d8..00000000 --- a/neo/openal/include/eaxman.h +++ /dev/null @@ -1,171 +0,0 @@ -/* -*/ -#ifndef __EAXMANH -#define __EAXMANH - -#define COM_NO_WINDOWS_H -#include <objbase.h> -#include "eax3.h" - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -//#define CLSID_EAXMANAGER CLSID_EAX20_Manager -//#define IID_IEaxManager IID_EAX20_Manager -#define EM_MAX_NAME 32 - -#define EMFLAG_IDDEFAULT (-1) -#define EMFLAG_IDNONE (-2) -#define EMFLAG_LOCKPOSITION 1 -#define EMFLAG_LOADFROMMEMORY 2 -#define EMFLAG_NODIFFRACTION 4 - -typedef struct _EMPOINT { - float fX; - float fY; - float fZ; -} EMPOINT; -typedef EMPOINT FAR *LPEMPOINT; - -typedef struct _LISTENERATTRIBUTES { - float fDistanceFactor; - float fRolloffFactor; - float fDopplerFactor; -} LISTENERATTRIBUTES; -typedef LISTENERATTRIBUTES FAR *LPLISTENERATTRIBUTES; - -typedef struct _SOURCEATTRIBUTES { - EAXBUFFERPROPERTIES eaxAttributes; - unsigned long ulInsideConeAngle; - unsigned long ulOutsideConeAngle; - long lConeOutsideVolume; - float fConeXdir; - float fConeYdir; - float fConeZdir; - float fMinDistance; - float fMaxDistance; - long lDupCount; - long lPriority; -} SOURCEATTRIBUTES; -typedef SOURCEATTRIBUTES FAR *LPSOURCEATTRIBUTES; - -typedef struct _MATERIALATTRIBUTES { - long lLevel; - float fLFRatio; - float fRoomRatio; - DWORD dwFlags; -} MATERIALATTRIBUTES; -typedef MATERIALATTRIBUTES FAR *LPMATERIALATTRIBUTES; - -#define EMMATERIAL_OBSTRUCTS 1 -#define EMMATERIAL_OCCLUDES 3 - -typedef struct _DIFFRACTIONBOX { - long lSubspaceID; - EMPOINT empMin; - EMPOINT empMax; -} DIFFRACTIONBOX; -typedef DIFFRACTIONBOX FAR *LPDIFFRACTIONBOX; - -// {7CE4D6E6-562F-11d3-8812-005004062F83} -DEFINE_GUID(CLSID_EAXMANAGER, 0x60b721a1, 0xf7c8, 0x11d2, 0xa0, 0x2e, 0x0, 0x50, 0x4, 0x6, 0x18, 0xb8); - -#ifdef __cplusplus -struct IEaxManager; -#endif // __cplusplus - -typedef struct IEaxManager *LPEAXMANAGER; - -// {7CE4D6E8-562F-11d3-8812-005004062F83} -DEFINE_GUID(IID_IEaxManager, 0x60b721a2, 0xf7c8, 0x11d2, 0xa0, 0x2e, 0x0, 0x50, 0x4, 0x6, 0x18, 0xb8); - -#undef INTERFACE -#define INTERFACE IEaxManager - -extern HRESULT __stdcall EaxManagerCreate(LPEAXMANAGER*); -typedef HRESULT (__stdcall *LPEAXMANAGERCREATE)(LPEAXMANAGER*); - -DECLARE_INTERFACE_(IEaxManager, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - STDMETHOD(GetDataSetSize) (THIS_ unsigned long*, DWORD) PURE; - STDMETHOD(LoadDataSet) (THIS_ char*, DWORD) PURE; - STDMETHOD(FreeDataSet) (THIS_ DWORD) PURE; - STDMETHOD(GetListenerAttributes) (THIS_ LPLISTENERATTRIBUTES) PURE; - STDMETHOD(GetSourceID) (THIS_ char*, long*) PURE; - STDMETHOD(GetSourceAttributes) (THIS_ long, LPSOURCEATTRIBUTES) PURE; - STDMETHOD(GetSourceNumInstances) (THIS_ long, long*) PURE; - STDMETHOD(GetSourceInstancePos) (THIS_ long, long, LPEMPOINT) PURE; - STDMETHOD(GetEnvironmentID) (THIS_ char*, long*) PURE; - STDMETHOD(GetEnvironmentAttributes) (THIS_ long, LPEAXLISTENERPROPERTIES) PURE; - STDMETHOD(GetMaterialID) (THIS_ char*, long*) PURE; - STDMETHOD(GetMaterialAttributes) (THIS_ long, LPMATERIALATTRIBUTES) PURE; - STDMETHOD(GetGeometrySetID) (THIS_ char*, long*) PURE; - STDMETHOD(GetListenerDynamicAttributes) (THIS_ long, LPEMPOINT, long*, DWORD) PURE; - STDMETHOD(GetSourceDynamicAttributes) (THIS_ long, LPEMPOINT, long*, float*, long*, float*, float*, LPEMPOINT, DWORD) PURE; -// STDMETHOD(GetSubSpaceID) (THIS_ long, LPEMPOINT, long *) PURE; - STDMETHOD(GetEnvironmentName) (THIS_ long, char *szString, long lStrlen) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IEaxManager_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IEaxManager_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IEaxManager_Release(p) (p)->lpVtbl->Release(p) -#define IEaxManager_GetDataSetSize(p,a,b) (p)->lpVtbl->GetDataSetSize(p,a,b) -#define IEaxManager_LoadDataSet(p,a,b) (p)->lpVtbl->LoadDataSet(p,a,b) -#define IEaxManager_FreeDataSet(p,a) (p)->lpVtbl->FreeDataSet(p,a) -#define IEaxManager_GetListenerAttributes(p,a) (p)->lpVtbl->GetListenerAttributes(p,a) -#define IEaxManager_GetSourceID(p,a,b) (p)->lpVtbl->GetSourceID(p,a,b) -#define IEaxManager_GetSourceAttributes(p,a,b) (p)->lpVtbl->GetSourceAttributes(p,a,b) -#define IEaxManager_GetSourceNumInstances(p,a,b) (p)->lpVtbl->GetSourceNumInstances(p,a,b) -#define IEaxManager_GetSourceInstancePos(p,a,b,c) (p)->lpVtbl->GetSourceInstancePos(p,a,b,c) -#define IEaxManager_GetEnvironmentID(p,a,b) (p)->lpVtbl->GetEnvironmentID(p,a,b) -#define IEaxManager_GetEnvironmentAttributes(p,a,b) (p)->lpVtbl->GetEnvironmentAttributes(p,a,b) -#define IEaxManager_GetMaterialID(p,a,b) (p)->lpVtbl->GetMaterialID(p,a,b) -#define IEaxManager_GetMaterialAttributes(p,a,b) (p)->lpVtbl->GetMaterialAttributes(p,a,b) -#define IEaxManager_GetGeometrySetID(p,a,b) (p)->lpVtbl->GetGeometrySetID(p,a,b) -#define IEaxManager_GetListenerDynamicAttributes(p,a,b,c,d) (p)->lpVtbl->GetListenerDynamicAttributes(p,a,b,c,d) -#define IEaxManager_GetSourceDynamicAttributes(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->GetSourceDynamicAttributes(p,a,b,c,d,e,f,g,h,i) -//#define IEaxManager_GetSubSpaceID(p,a,b,c) (p)->lpVtbl->GetSubSpaceID(p,a,b,c) -#define IEaxManager_GetEnvironmentName(p,a,b,c) (p)->lpVtbl->GetEnvironmentName(p,a,b,c) -#else -#define IEaxManager_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IEaxManager_AddRef(p) (p)->AddRef() -#define IEaxManager_Release(p) (p)->Release() -#define IEaxManager_GetDataSetSize(p,a,b) (p)->GetDataSetSize(a,b) -#define IEaxManager_LoadDataSet(p,a,b) (p)->LoadDataSet(a,b) -#define IEaxManager_FreeDataSet(p,a) (p)->FreeDataSet(a) -#define IEaxManager_GetListenerAttributes(p,a) (p)->GetListenerAttributes(a) -#define IEaxManager_GetSourceID(p,a,b) (p)->GetSourceID(a,b) -#define IEaxManager_GetSourceAttributes(p,a,b) (p)->GetSourceAttributes(a,b) -#define IEaxManager_GetSourceNumInstances(p,a,b) (p)->GetSourceNumInstances(a,b) -#define IEaxManager_GetSourceInstancePos(p,a,b,c) (p)->GetSourceInstancePos(a,b,c) -#define IEaxManager_GetEnvironmentID(p,a,b) (p)->GetEnvironmentID(a,b) -#define IEaxManager_GetEnvironmentAttributes(p,a,b) (p)->GetEnvironmentAttributes(a,b) -#define IEaxManager_GetMaterialID(p,a,b) (p)->GetMaterialID(a,b) -#define IEaxManager_GetMaterialAttributes(p,a,b) (p)->GetMaterialAttributes(a,b) -#define IEaxManager_GetGeometrySetID(p,a,b) (p)->GetGeometrySetID(a,b) -#define IEaxManager_GetListenerDynamicAttributes(p,a,b,c,d) (p)->GetListenerDynamicAttributes(a,b,c,d) -#define IEaxManager_GetSourceDynamicAttributes(p,a,b,c,d,e,f,g,h,i) (p)->GetSourceDynamicAttributes(a,b,c,d,e,f,g,h,i) -//#define IEaxManager_GetSubSpaceID(p,a,b,c) (p)->GetSubSpaceID(a,b,c) -#define IEaxManager_GetEnvironmentName(p,a,b,c) (p)->GetEnvironmentName(a,b,c) -#endif - -#define EM_OK 0 -#define EM_INVALIDID MAKE_HRESULT(1, FACILITY_ITF, 1) -#define EM_IDNOTFOUND MAKE_HRESULT(1, FACILITY_ITF, 2) -#define EM_FILENOTFOUND MAKE_HRESULT(1, FACILITY_ITF, 3) -#define EM_FILEINVALID MAKE_HRESULT(1, FACILITY_ITF, 4) -#define EM_VERSIONINVALID MAKE_HRESULT(1, FACILITY_ITF, 5) -#define EM_INSTANCENOTFOUND MAKE_HRESULT(1, FACILITY_ITF, 6) - -#ifdef __cplusplus -}; -#endif // __cplusplus - -#endif diff --git a/neo/openal/lib/eaxguid.lib b/neo/openal/lib/eaxguid.lib deleted file mode 100644 index 83618ae5..00000000 Binary files a/neo/openal/lib/eaxguid.lib and /dev/null differ diff --git a/neo/openal/lib/openal32.lib b/neo/openal/lib/openal32.lib deleted file mode 100644 index 0ec190db..00000000 Binary files a/neo/openal/lib/openal32.lib and /dev/null differ diff --git a/neo/openal/osx/OpenAL.framework/Headers b/neo/openal/osx/OpenAL.framework/Headers deleted file mode 100644 index a177d2a6..00000000 --- a/neo/openal/osx/OpenAL.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/neo/openal/osx/OpenAL.framework/OpenAL b/neo/openal/osx/OpenAL.framework/OpenAL deleted file mode 100644 index 7a4d340e..00000000 --- a/neo/openal/osx/OpenAL.framework/OpenAL +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/OpenAL \ No newline at end of file diff --git a/neo/openal/osx/OpenAL.framework/Resources b/neo/openal/osx/OpenAL.framework/Resources deleted file mode 100644 index 953ee36f..00000000 --- a/neo/openal/osx/OpenAL.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/al.h b/neo/openal/osx/OpenAL.framework/Versions/A/Headers/al.h deleted file mode 100644 index 8759876a..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/al.h +++ /dev/null @@ -1,498 +0,0 @@ -#ifndef _AL_H_ -#define _AL_H_ - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - -#include "altypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 - #ifdef _LIB - #define ALAPI __declspec(dllexport) - #else - #define ALAPI __declspec(dllimport) - #endif - #define ALAPIENTRY __cdecl - #define AL_CALLBACK -#else - #ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export on - #endif - #endif - #define ALAPI - #define ALAPIENTRY - #define AL_CALLBACK -#endif - -#define OPENAL - -#ifndef AL_NO_PROTOTYPES - -/** - * OpenAL Maintenance Functions - * Initialization and exiting. - * State Management and Query. - * Error Handling. - * Extension Support. - */ - -/** State management. */ -ALAPI ALvoid ALAPIENTRY alEnable( ALenum capability ); -ALAPI ALvoid ALAPIENTRY alDisable( ALenum capability ); -ALAPI ALboolean ALAPIENTRY alIsEnabled( ALenum capability ); - -/** Application preferences for driver performance choices. */ -ALAPI ALvoid ALAPIENTRY alHint( ALenum target, ALenum mode ); - -/** State retrieval. */ -ALAPI ALboolean ALAPIENTRY alGetBoolean( ALenum param ); -ALAPI ALint ALAPIENTRY alGetInteger( ALenum param ); -ALAPI ALfloat ALAPIENTRY alGetFloat( ALenum param ); -ALAPI ALdouble ALAPIENTRY alGetDouble( ALenum param ); -ALAPI ALvoid ALAPIENTRY alGetBooleanv( ALenum param, ALboolean* data ); -ALAPI ALvoid ALAPIENTRY alGetIntegerv( ALenum param, ALint* data ); -ALAPI ALvoid ALAPIENTRY alGetFloatv( ALenum param, ALfloat* data ); -ALAPI ALvoid ALAPIENTRY alGetDoublev( ALenum param, ALdouble* data ); -ALAPI ALubyte* ALAPIENTRY alGetString( ALenum param ); - -ALAPI ALvoid ALAPIENTRY alSetInteger( ALenum pname, ALint value ); -ALAPI ALvoid ALAPIENTRY alSetDouble( ALenum pname, ALdouble value ); - -/** - * Error support. - * Obtain the most recent error generated in the AL state machine. - */ -ALAPI ALenum ALAPIENTRY alGetError(); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALboolean ALAPIENTRY alIsExtensionPresent( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALvoid* ALAPIENTRY alGetProcAddress( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the integer value of an enumeration (usually an extension) with the name ename. - */ -ALAPI ALenum ALAPIENTRY alGetEnumValue( ALubyte* ename ); - - - - -/** - * LISTENER - * Listener is the sample position for a given context. - * The multi-channel (usually stereo) output stream generated - * by the mixer is parametrized by this Listener object: - * its position and velocity relative to Sources, within - * occluder and reflector geometry. - */ - - - -/** - * - * Listener Environment: default 0. - */ -ALAPI ALvoid ALAPIENTRY alListeneri( ALenum param, ALint value ); - - -/** - * - * Listener Gain: default 1.0f. - */ -ALAPI ALvoid ALAPIENTRY alListenerf( ALenum param, ALfloat value ); - - -/** - * - * Listener Position. - * Listener Velocity. - */ -ALAPI ALvoid ALAPIENTRY alListener3f( ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); - - -/** - * - * Listener Position: ALfloat[3] - * Listener Velocity: ALfloat[3] - * Listener Orientation: ALfloat[6] (forward and up vector). - */ -ALAPI ALvoid ALAPIENTRY alListenerfv( ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY alGetListeneri( ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY alGetListenerf( ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY alGetListener3f( ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 ); -ALAPI ALvoid ALAPIENTRY alGetListenerfv( ALenum param, ALfloat* values ); - - -/** - * SOURCE - * Source objects are by default localized. Sources - * take the PCM data provided in the specified Buffer, - * apply Source-specific modifications, and then - * submit them to be mixed according to spatial - * arrangement etc. - */ - - - -/** Create Source objects. */ -ALAPI ALvoid ALAPIENTRY alGenSources( ALsizei n, ALuint* sources ); - -/** Delete Source objects. */ -ALAPI ALvoid ALAPIENTRY alDeleteSources( ALsizei n, ALuint* sources ); - -/** Verify a handle is a valid Source. */ -ALAPI ALboolean ALAPIENTRY alIsSource( ALuint id ); - -/** Set an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY alSourcei( ALuint source, ALenum param, ALint value ); -ALAPI ALvoid ALAPIENTRY alSourcef( ALuint source, ALenum param, ALfloat value ); -ALAPI ALvoid ALAPIENTRY alSource3f( ALuint source, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); -ALAPI ALvoid ALAPIENTRY alSourcefv( ALuint source, ALenum param, ALfloat* values ); - -/** Get an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY alGetSourcei( ALuint source, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY alGetSourcef( ALuint source, ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY alGetSource3f( ALuint source, ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 ); -ALAPI ALvoid ALAPIENTRY alGetSourcefv( ALuint source, ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY alSourcePlayv( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY alSourcePausev( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY alSourceStopv( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY alSourceRewindv(ALsizei n,ALuint *sources); - -/** Activate a source, start replay. */ -ALAPI ALvoid ALAPIENTRY alSourcePlay( ALuint source ); - -/** - * Pause a source, - * temporarily remove it from the mixer list. - */ -ALAPI ALvoid ALAPIENTRY alSourcePause( ALuint source ); - -/** - * Stop a source, - * temporarily remove it from the mixer list, - * and reset its internal state to pre-Play. - * To remove a Source completely, it has to be - * deleted following Stop, or before Play. - */ -ALAPI ALvoid ALAPIENTRY alSourceStop( ALuint source ); - -/** - * Rewinds a source, - * temporarily remove it from the mixer list, - * and reset its internal state to pre-Play. - */ -ALAPI ALvoid ALAPIENTRY alSourceRewind( ALuint source ); - - - -/** - * BUFFER - * Buffer objects are storage space for sample data. - * Buffers are referred to by Sources. There can be more than - * one Source using the same Buffer data. If Buffers have - * to be duplicated on a per-Source basis, the driver has to - * take care of allocation, copying, and deallocation as well - * as propagating buffer data changes. - */ - - - - -/** Buffer object generation. */ -ALAPI ALvoid ALAPIENTRY alGenBuffers( ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY alDeleteBuffers( ALsizei n, ALuint* buffers ); -ALAPI ALboolean ALAPIENTRY alIsBuffer( ALuint buffer ); - -/** - * Specify the data to be filled into a buffer. - */ -ALAPI ALvoid ALAPIENTRY alBufferData( ALuint buffer, - ALenum format, - ALvoid* data, - ALsizei size, - ALsizei freq ); - - -ALAPI ALvoid ALAPIENTRY alGetBufferi( ALuint buffer, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY alGetBufferf( ALuint buffer, ALenum param, ALfloat* value ); - - - - -/** - * Queue stuff - */ - -ALAPI ALvoid ALAPIENTRY alSourceQueueBuffers( ALuint source, ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY alSourceUnqueueBuffers( ALuint source, ALsizei n, ALuint* buffers ); - -/** - * Knobs and dials - */ -ALAPI ALvoid ALAPIENTRY alDistanceModel( ALenum value ); -ALAPI ALvoid ALAPIENTRY alDopplerFactor( ALfloat value ); -ALAPI ALvoid ALAPIENTRY alDopplerVelocity( ALfloat value ); - -#else /* AL_NO_PROTOTYPES */ - -/** - * OpenAL Maintenance Functions - * Initialization and exiting. - * State Management and Query. - * Error Handling. - * Extension Support. - */ - -/** State management. */ -ALAPI ALvoid ALAPIENTRY (*alEnable)( ALenum capability ); -ALAPI ALvoid ALAPIENTRY (*alDisable)( ALenum capability ); -ALAPI ALboolean ALAPIENTRY (*alIsEnabled)( ALenum capability ); - -/** Application preferences for driver performance choices. */ -ALAPI ALvoid ALAPIENTRY (*alHint)( ALenum target, ALenum mode ); - -/** State retrieval. */ -ALAPI ALboolean ALAPIENTRY (*alGetBoolean)( ALenum param ); -ALAPI ALint ALAPIENTRY (*alGetInteger)( ALenum param ); -ALAPI ALfloat ALAPIENTRY (*alGetFloat)( ALenum param ); -ALAPI ALdouble ALAPIENTRY (*alGetDouble)( ALenum param ); -ALAPI ALvoid ALAPIENTRY (*alGetBooleanv)( ALenum param, ALboolean* data ); -ALAPI ALvoid ALAPIENTRY (*alGetIntegerv)( ALenum param, ALint* data ); -ALAPI ALvoid ALAPIENTRY (*alGetFloatv)( ALenum param, ALfloat* data ); -ALAPI ALvoid ALAPIENTRY (*alGetDoublev)( ALenum param, ALdouble* data ); -ALAPI ALubyte* ALAPIENTRY (*alGetString)( ALenum param ); - -ALAPI ALvoid ALAPIENTRY (*alSetInteger)( ALenum pname, ALint value ); -ALAPI ALvoid ALAPIENTRY (*alSetDouble)( ALenum pname, ALdouble value ); - -/** - * Error support. - * Obtain the most recent error generated in the AL state machine. - */ -ALAPI ALenum ALAPIENTRY (*alGetError)( ALvoid ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALboolean ALAPIENTRY (*alIsExtensionPresent)( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the address of a function (usually an extension) - * with the name fname. All addresses are context-independent. - */ -ALAPI ALvoid* ALAPIENTRY (*alGetProcAddress)( ALubyte* fname ); - - -/** - * Extension support. - * Obtain the integer value of an enumeration (usually an extension) with the name ename. - */ -ALAPI ALenum ALAPIENTRY (*alGetEnumValue)( ALubyte* ename ); - - - - -/** - * LISTENER - * Listener is the sample position for a given context. - * The multi-channel (usually stereo) output stream generated - * by the mixer is parametrized by this Listener object: - * its position and velocity relative to Sources, within - * occluder and reflector geometry. - */ - - - -/** - * - * Listener Environment: default 0. - */ -ALAPI ALvoid ALAPIENTRY (*alListeneri)( ALenum param, ALint value ); - - -/** - * - * Listener Gain: default 1.0f. - */ -ALAPI ALvoid ALAPIENTRY (*alListenerf)( ALenum param, ALfloat value ); - - -/** - * - * Listener Position. - * Listener Velocity. - */ -ALAPI ALvoid ALAPIENTRY (*alListener3f)( ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); - - -/** - * - * Listener Position: ALfloat[3] - * Listener Velocity: ALfloat[3] - * Listener Orientation: ALfloat[6] (forward and up vector). - */ -ALAPI ALvoid ALAPIENTRY (*alListenerfv)( ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY (*alGetListeneri)( ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY (*alGetListenerf)( ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY (*alGetListener3f)( ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 ); -ALAPI ALvoid ALAPIENTRY (*alGetListenerfv)( ALenum param, ALfloat* values ); - - -/** - * SOURCE - * Source objects are by default localized. Sources - * take the PCM data provided in the specified Buffer, - * apply Source-specific modifications, and then - * submit them to be mixed according to spatial - * arrangement etc. - */ - - - -/** Create Source objects. */ -ALAPI ALvoid ALAPIENTRY (*alGenSources)( ALsizei n, ALuint* sources ); - -/** Delete Source objects. */ -ALAPI ALvoid ALAPIENTRY (*alDeleteSources)( ALsizei n, ALuint* sources ); - -/** Verify a handle is a valid Source. */ -ALAPI ALboolean ALAPIENTRY (*alIsSource)( ALuint id ); - -/** Set an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY (*alSourcei)( ALuint source, ALenum param, ALint value ); -ALAPI ALvoid ALAPIENTRY (*alSourcef)( ALuint source, ALenum param, ALfloat value ); -ALAPI ALvoid ALAPIENTRY (*alSource3f)( ALuint source, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 ); -ALAPI ALvoid ALAPIENTRY (*alSourcefv)( ALuint source, ALenum param, ALfloat* values ); - -/** Get an integer parameter for a Source object. */ -ALAPI ALvoid ALAPIENTRY (*alGetSourcei)( ALuint source, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY (*alGetSourcef)( ALuint source, ALenum param, ALfloat* value ); -ALAPI ALvoid ALAPIENTRY (*alGetSourcefv)( ALuint source, ALenum param, ALfloat* values ); - -ALAPI ALvoid ALAPIENTRY (*alSourcePlayv)( ALsizei n, ALuint *sources ); -ALAPI ALvoid ALAPIENTRY (*alSourceStopv)( ALsizei n, ALuint *sources ); - -/** Activate a source, start replay. */ -ALAPI ALvoid ALAPIENTRY (*alSourcePlay)( ALuint source ); - -/** - * Pause a source, - * temporarily remove it from the mixer list. - */ -ALAPI ALvoid ALAPIENTRY (*alSourcePause)( ALuint source ); - -/** - * Stop a source, - * temporarily remove it from the mixer list, - * and reset its internal state to pre-Play. - * To remove a Source completely, it has to be - * deleted following Stop, or before Play. - */ -ALAPI ALvoid ALAPIENTRY (*alSourceStop)( ALuint source ); - - - -/** - * BUFFER - * Buffer objects are storage space for sample data. - * Buffers are referred to by Sources. There can be more than - * one Source using the same Buffer data. If Buffers have - * to be duplicated on a per-Source basis, the driver has to - * take care of allocation, copying, and deallocation as well - * as propagating buffer data changes. - */ - - - - -/** Buffer object generation. */ -ALAPI ALvoid ALAPIENTRY (*alGenBuffers)( ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY (*alDeleteBuffers)( ALsizei n, ALuint* buffers ); -ALAPI ALboolean ALAPIENTRY (*alIsBuffer)( ALuint buffer ); - -/** - * Specify the data to be filled into a buffer. - */ -ALAPI ALvoid ALAPIENTRY (*alBufferData)( ALuint buffer, - ALenum format, - ALvoid* data, - ALsizei size, - ALsizei freq ); - -ALAPI ALvoid ALAPIENTRY (*alGetBufferi)( ALuint buffer, ALenum param, ALint* value ); -ALAPI ALvoid ALAPIENTRY (*alGetBufferf)( ALuint buffer, ALenum param, ALfloat* value ); - - - - -/** - * Queue stuff - */ -ALAPI ALvoid ALAPIENTRY (*alSourceQueueBuffers)( ALuint source, ALsizei n, ALuint* buffers ); -ALAPI ALvoid ALAPIENTRY (*alSourceUnqueueBuffers)( ALuint source, ALsizei n, ALuint* buffers ); - -/** - * Knobs and dials - */ -ALAPI ALvoid ALAPIENTRY (*alDistanceModel)( ALenum value ); -ALAPI ALvoid ALAPIENTRY (*alDopplerFactor)( ALfloat value ); -ALAPI ALvoid ALAPIENTRY (*alDopplerVelocity)( ALfloat value ); - - -#endif /* AL_NO_PROTOTYPES */ - -#ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export off - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alc.h b/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alc.h deleted file mode 100644 index 641e2fd8..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alc.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef _ALC_H_ -#define _ALC_H_ - -#include "altypes.h" -#include "alctypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 - #ifdef _LIB - #define ALCAPI __declspec(dllexport) - #else - #define ALCAPI __declspec(dllimport) - typedef ALCvoid ALCdevice; - typedef ALCvoid ALCcontext; - #endif - #define ALCAPIENTRY __cdecl -#else - #ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export on - #endif - #endif - #define ALCAPI - #define ALCAPIENTRY - typedef ALCvoid ALCdevice; - typedef ALCvoid ALCcontext; -#endif - -#ifndef ALC_NO_PROTOTYPES - -ALCAPI ALCubyte* ALCAPIENTRY alcGetString(ALCdevice *device,ALCenum param); -ALCAPI ALCvoid ALCAPIENTRY alcGetIntegerv(ALCdevice *device,ALCenum param,ALCsizei size,ALCint *data); - -ALCAPI ALCdevice* ALCAPIENTRY alcOpenDevice(ALCubyte *deviceName); -ALCAPI ALCvoid ALCAPIENTRY alcCloseDevice(ALCdevice *device); - -ALCAPI ALCcontext*ALCAPIENTRY alcCreateContext(ALCdevice *device,ALCint *attrList); -ALCAPI ALCboolean ALCAPIENTRY alcMakeContextCurrent(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY alcProcessContext(ALCcontext *context); -ALCAPI ALCcontext*ALCAPIENTRY alcGetCurrentContext(); -ALCAPI ALCdevice* ALCAPIENTRY alcGetContextsDevice(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY alcSuspendContext(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY alcDestroyContext(ALCcontext *context); - -ALCAPI ALCenum ALCAPIENTRY alcGetError(ALCdevice *device); - -ALCAPI ALCboolean ALCAPIENTRY alcIsExtensionPresent(ALCdevice *device,ALCubyte *extName); -ALCAPI ALCvoid * ALCAPIENTRY alcGetProcAddress(ALCdevice *device,ALCubyte *funcName); -ALCAPI ALCenum ALCAPIENTRY alcGetEnumValue(ALCdevice *device,ALCubyte *enumName); - -#else /* AL_NO_PROTOTYPES */ - -ALCAPI ALCubyte* ALCAPIENTRY (*alcGetString)(ALCdevice *device,ALCenum param); -ALCAPI ALCvoid ALCAPIENTRY (*alcGetIntegerv)(ALCdevice * device,ALCenum param,ALCsizei size,ALCint *data); - -ALCAPI ALCdevice* ALCAPIENTRY (*alcOpenDevice)(ALubyte *deviceName); -ALCAPI ALCvoid ALCAPIENTRY (*alcCloseDevice)(ALCdevice *device); - -ALCAPI ALCcontext*ALCAPIENTRY (*alcCreateContext)(ALCdevice *device,ALCint *attrList); -ALCAPI ALCboolean ALCAPIENTRY (*alcMakeContextCurrent)(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY (*alcProcessContext)(ALCcontext *context); -ALCAPI ALCcontext*ALCAPIENTRY (*alcGetCurrentContext)(ALCvoid); -ALCAPI ALCdevice* ALCAPIENTRY (*alcGetContextsDevice)(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY (*alcSuspendContext)(ALCcontext *context); -ALCAPI ALCvoid ALCAPIENTRY (*alcDestroyContext)(ALCcontext *context); - -ALCAPI ALCenum ALCAPIENTRY (*alcGetError)(ALCdevice *device); - -ALCAPI ALCboolean ALCAPIENTRY (*alcIsExtensionPresent)(ALCdevice *device,ALCubyte *extName); -ALCAPI ALCvoid * ALCAPIENTRY (*alcGetProcAddress)(ALCdevice *device,ALCubyte *funcName); -ALCAPI ALCenum ALCAPIENTRY (*alcGetEnumValue)(ALCdevice *device,ALCubyte *enumName); - -#endif /* AL_NO_PROTOTYPES */ - -#ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export off - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alctypes.h b/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alctypes.h deleted file mode 100644 index 90364609..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alctypes.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef _ALCTYPES_H_ -#define _ALCTYPES_H_ - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * Portions Copyright (C) 2004 by Apple Computer Inc. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - - -#ifdef __cplusplus -extern "C" { -#endif - -/** ALC boolean type. */ -typedef char ALCboolean; - -/** ALC 8bit signed byte. */ -typedef char ALCbyte; - -/** ALC 8bit unsigned byte. */ -typedef unsigned char ALCubyte; - -/** ALC 16bit signed short integer type. */ -typedef short ALCshort; - -/** ALC 16bit unsigned short integer type. */ -typedef unsigned short ALCushort; - -/** ALC 32bit unsigned integer type. */ -typedef unsigned ALCuint; - -/** ALC 32bit signed integer type. */ -typedef int ALCint; - -/** ALC 32bit floating point type. */ -typedef float ALCfloat; - -/** ALC 64bit double point type. */ -typedef double ALCdouble; - -/** ALC 32bit type. */ -typedef unsigned int ALCsizei; - -/** ALC void type */ -typedef void ALCvoid; - -/** ALC enumerations. */ -typedef int ALCenum; - -/* Bad value. */ -#define ALC_INVALID (-1) - -/* Boolean False. */ -#define ALC_FALSE 0 - -/* Boolean True. */ -#define ALC_TRUE 1 - -/** Errors: No Error. */ -#define ALC_NO_ERROR ALC_FALSE - -#define ALC_MAJOR_VERSION 0x1000 -#define ALC_MINOR_VERSION 0x1001 -#define ALC_ATTRIBUTES_SIZE 0x1002 -#define ALC_ALL_ATTRIBUTES 0x1003 - -#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 -#define ALC_DEVICE_SPECIFIER 0x1005 -#define ALC_EXTENSIONS 0x1006 - -#define ALC_FREQUENCY 0x1007 -#define ALC_REFRESH 0x1008 -#define ALC_SYNC 0x1009 - -/** - * The device argument does not name a valid dvice. - */ -#define ALC_INVALID_DEVICE 0xA001 - -/** - * The context argument does not name a valid context. - */ -#define ALC_INVALID_CONTEXT 0xA002 - -/** - * A function was called at inappropriate time, - * or in an inappropriate way, causing an illegal state. - * This can be an incompatible ALenum, object ID, - * and/or function. - */ -#define ALC_INVALID_ENUM 0xA003 - -/** - * Illegal value passed as an argument to an AL call. - * Applies to parameter values, but not to enumerations. - */ -#define ALC_INVALID_VALUE 0xA004 - -/** - * A function could not be completed, - * because there is not enough memory available. - */ -#define ALC_OUT_OF_MEMORY 0xA005 - - -//********************************************************************************* -// OSX Specific Properties -//********************************************************************************* - -/** - * Convert Data When Loading. Default false, currently applies only to monophonic sounds - */ -#define ALC_CONVERT_DATA_UPON_LOADING 0xF001 - -/** - * Render Quality. - */ -#define ALC_SPATIAL_RENDERING_QUALITY 0xF002 - #define ALC_SPATIAL_RENDERING_QUALITY_HIGH 'rqhi' - #define ALC_SPATIAL_RENDERING_QUALITY_LOW 'rdlo' - -/** - * Mixer Output Rate. - */ -#define ALC_MIXER_OUTPUT_RATE 0xF003 - -/** - * Maximum Mixer Busses. - * Set this before opening a new OAL device to indicate how many busses on the mixer - * are desired. Get returns either the current devices bus count value, or the value - * that will be used to open a device - */ -#define ALC_MIXER_MAXIMUM_BUSSES 0xF004 - -/** - * Render Channels. - * Allows a user to force OpenAL to render to stereo, regardless of the audio hardware being used - */ -#define ALC_RENDER_CHANNEL_COUNT 0xF005 - #define ALC_RENDER_CHANNEL_COUNT_STEREO 'rcst' - #define ALC_RENDER_CHANNEL_COUNT_MULTICHANNEL 'rcmc' - - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/altypes.h b/neo/openal/osx/OpenAL.framework/Versions/A/Headers/altypes.h deleted file mode 100644 index 6e96d334..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/altypes.h +++ /dev/null @@ -1,326 +0,0 @@ -#ifndef _ALTYPES_H_ -#define _ALTYPES_H_ - -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - - -#ifdef __cplusplus -extern "C" { -#endif - -/** OpenAL boolean type. */ -typedef char ALboolean; - -/** OpenAL 8bit signed byte. */ -typedef char ALbyte; - -/** OpenAL 8bit unsigned byte. */ -typedef unsigned char ALubyte; - -/** OpenAL 16bit signed short integer type. */ -typedef short ALshort; - -/** OpenAL 16bit unsigned short integer type. */ -typedef unsigned short ALushort; - -/** OpenAL 32bit unsigned integer type. */ -typedef unsigned ALuint; - -/** OpenAL 32bit signed integer type. */ -typedef int ALint; - -/** OpenAL 32bit floating point type. */ -typedef float ALfloat; - -/** OpenAL 64bit double point type. */ -typedef double ALdouble; - -/** OpenAL 32bit type. */ -typedef unsigned int ALsizei; - -/** OpenAL void type */ -typedef void ALvoid; - -/** OpenAL enumerations. */ -typedef int ALenum; - -/* Bad value. */ -#define AL_INVALID (-1) - -/* Disable value. */ -#define AL_NONE 0 - -/* Boolean False. */ -#define AL_FALSE 0 - -/* Boolean True. */ -#define AL_TRUE 1 - -/** - * Indicate the type of AL_SOURCE. - * Sources can be spatialized - */ -#define AL_SOURCE_TYPE 0x200 - -/** Indicate source has absolute coordinates. */ -#define AL_SOURCE_ABSOLUTE 0x201 - -/** Indicate Source has listener relative coordinates. */ -#define AL_SOURCE_RELATIVE 0x202 - -/** - * Directional source, inner cone angle, in degrees. - * Range: [0-360] - * Default: 360 - */ -#define AL_CONE_INNER_ANGLE 0x1001 - -/** - * Directional source, outer cone angle, in degrees. - * Range: [0-360] - * Default: 360 - */ -#define AL_CONE_OUTER_ANGLE 0x1002 - -/** - * Specify the pitch to be applied, either at source, - * or on mixer results, at listener. - * Range: [0.5-2.0] - * Default: 1.0 - */ -#define AL_PITCH 0x1003 - -/** - * Specify the current location in three dimensional space. - * OpenAL, like OpenGL, uses a right handed coordinate system, - * where in a frontal default view X (thumb) points right, - * Y points up (index finger), and Z points towards the - * viewer/camera (middle finger). - * To switch from a left handed coordinate system, flip the - * sign on the Z coordinate. - * Listener position is always in the world coordinate system. - */ -#define AL_POSITION 0x1004 - -/** Specify the current direction as forward vector. */ -#define AL_DIRECTION 0x1005 - -/** Specify the current velocity in three dimensional space. */ -#define AL_VELOCITY 0x1006 - -/** - * Indicate whether source has to loop infinite. - * Type: ALboolean - * Range: [AL_TRUE, AL_FALSE] - * Default: AL_FALSE - */ -#define AL_LOOPING 0x1007 - -/** - * Indicate the buffer to provide sound samples. - * Type: ALuint. - * Range: any valid Buffer id. - */ -#define AL_BUFFER 0x1009 - -/** - * Indicate the gain (volume amplification) applied. - * Type: ALfloat. - * Range: ]0.0- ] - * A value of 1.0 means un-attenuated/unchanged. - * Each division by 2 equals an attenuation of -6dB. - * Each multiplicaton with 2 equals an amplification of +6dB. - * A value of 0.0 is meaningless with respect to a logarithmic - * scale; it is interpreted as zero volume - the channel - * is effectively disabled. - */ -#define AL_GAIN 0x100A - -/** - * Indicate minimum source attenuation. - * Type: ALfloat - * Range: [0.0 - 1.0] - */ -#define AL_MIN_GAIN 0x100D - -/** - * Indicate maximum source attenuation. - * Type: ALfloat - * Range: [0.0 - 1.0] - */ -#define AL_MAX_GAIN 0x100E - -/** - * Specify the current orientation. - * Type: ALfv6 (at/up) - * Range: N/A - */ -#define AL_ORIENTATION 0x100F - -/* byte offset into source (in canon format). -1 if source - * is not playing. Don't set this, get this. - * - * Type: ALfloat - * Range: [0.0 - ] - * Default: 1.0 - */ -#define AL_REFERENCE_DISTANCE 0x1020 - - /** - * Indicate the rolloff factor for the source. - * Type: ALfloat - * Range: [0.0 - ] - * Default: 1.0 - */ -#define AL_ROLLOFF_FACTOR 0x1021 - -/** - * Indicate the gain (volume amplification) applied. - * Type: ALfloat. - * Range: ]0.0- ] - * A value of 1.0 means un-attenuated/unchanged. - * Each division by 2 equals an attenuation of -6dB. - * Each multiplicaton with 2 equals an amplification of +6dB. - * A value of 0.0 is meaningless with respect to a logarithmic - * scale; it is interpreted as zero volume - the channel - * is effectively disabled. - */ -#define AL_CONE_OUTER_GAIN 0x1022 - -/** - * Specify the maximum distance. - * Type: ALfloat - * Range: [0.0 - ] - */ -#define AL_MAX_DISTANCE 0x1023 - -/** - * Source state information - */ -#define AL_SOURCE_STATE 0x1010 -#define AL_INITIAL 0x1011 -#define AL_PLAYING 0x1012 -#define AL_PAUSED 0x1013 -#define AL_STOPPED 0x1014 - -/** - * Buffer Queue params - */ -#define AL_BUFFERS_QUEUED 0x1015 -#define AL_BUFFERS_PROCESSED 0x1016 - -/** Sound buffers: format specifier. */ -#define AL_FORMAT_MONO8 0x1100 -#define AL_FORMAT_MONO16 0x1101 -#define AL_FORMAT_STEREO8 0x1102 -#define AL_FORMAT_STEREO16 0x1103 - -/** - * Sound buffers: frequency, in units of Hertz [Hz]. - * This is the number of samples per second. Half of the - * sample frequency marks the maximum significant - * frequency component. - */ -#define AL_FREQUENCY 0x2001 -#define AL_BITS 0x2002 -#define AL_CHANNELS 0x2003 -#define AL_SIZE 0x2004 -#define AL_DATA 0x2005 - -/** - * Buffer state. - * - * Not supported for public use (yet). - */ -#define AL_UNUSED 0x2010 -#define AL_PENDING 0x2011 -#define AL_PROCESSED 0x2012 - -/** Errors: No Error. */ -#define AL_NO_ERROR AL_FALSE - -/** - * Illegal name passed as an argument to an AL call. - */ -#define AL_INVALID_NAME 0xA001 - -/** - * Illegal enum passed as an argument to an AL call. - */ -#define AL_INVALID_ENUM 0xA002 -/** - * Illegal value passed as an argument to an AL call. - * Applies to parameter values, but not to enumerations. - */ -#define AL_INVALID_VALUE 0xA003 - -/** - * A function was called at inappropriate time, - * or in an inappropriate way, causing an illegal state. - * This can be an incompatible ALenum, object ID, - * and/or function. - */ -#define AL_INVALID_OPERATION 0xA004 - -/** - * A function could not be completed, - * because there is not enough memory available. - */ -#define AL_OUT_OF_MEMORY 0xA005 - -/** Context strings: Vendor Name. */ -#define AL_VENDOR 0xB001 -#define AL_VERSION 0xB002 -#define AL_RENDERER 0xB003 -#define AL_EXTENSIONS 0xB004 - -/** Global tweakage. */ - -/** - * Doppler scale. Default 1.0 - */ -#define AL_DOPPLER_FACTOR 0xC000 - -/** - * Doppler velocity. Default 1.0 - */ -#define AL_DOPPLER_VELOCITY 0xC001 - -/** - * Distance model. Default AL_INVERSE_DISTANCE_CLAMPED - */ -#define AL_DISTANCE_MODEL 0xD000 - -/** Distance models. */ - -#define AL_INVERSE_DISTANCE 0xD001 -#define AL_INVERSE_DISTANCE_CLAMPED 0xD002 - - /** - * enables - */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alut.h b/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alut.h deleted file mode 100644 index 0b1baea4..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Headers/alut.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * OpenAL cross platform audio library - * Copyright (C) 1999-2000 by authors. - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * Or go to http://www.gnu.org/copyleft/lgpl.html - */ - -#ifndef _ALUT_H_ -#define _ALUT_H_ - -#define ALUTAPI -#define ALUTAPIENTRY - -#include "al.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export on - #endif -#endif - -ALUTAPI ALvoid ALUTAPIENTRY alutInit(ALint *argc,ALbyte **argv); -ALUTAPI ALvoid ALUTAPIENTRY alutExit(ALvoid); -ALUTAPI ALvoid ALUTAPIENTRY alutLoadWAVFile(ALbyte *file,ALenum *format,ALvoid **data,ALsizei *size,ALsizei *freq); -ALUTAPI ALvoid ALUTAPIENTRY alutLoadWAVMemory(ALbyte *memory,ALenum *format,ALvoid **data,ALsizei *size,ALsizei *freq); -ALUTAPI ALvoid ALUTAPIENTRY alutUnloadWAV(ALenum format,ALvoid *data,ALsizei size,ALsizei freq); - -#ifdef TARGET_OS_MAC - #if TARGET_OS_MAC - #pragma export off - #endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/OpenAL b/neo/openal/osx/OpenAL.framework/Versions/A/OpenAL deleted file mode 100644 index b03b04f1..00000000 Binary files a/neo/openal/osx/OpenAL.framework/Versions/A/OpenAL and /dev/null differ diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/neo/openal/osx/OpenAL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings deleted file mode 100644 index fa858023..00000000 Binary files a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/English.lproj/InfoPlist.strings and /dev/null differ diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/Info.plist b/neo/openal/osx/OpenAL.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index a811c8bf..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleExecutable</key> - <string>OpenAL</string> - <key>CFBundleGetInfoString</key> - <string>OpenAL</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>OpenAL</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>OpenAL</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0.1d1</string> - <key>CSResourcesFileMapped</key> - <true/> -</dict> -</plist> diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/READ_ME b/neo/openal/osx/OpenAL.framework/Versions/A/Resources/READ_ME deleted file mode 100644 index 378b7817..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/READ_ME +++ /dev/null @@ -1,86 +0,0 @@ - -February 13th, 2004 - Apple Computer Inc. -updated: March 15th, 2004 - Apple Computer Inc. - ----------------------------------------------------------------------------------------------------------------------- -READ ME: OPEN AL - OSX IMPLEMENTATION USING THE 3DMIXER AUDIOUNIT ----------------------------------------------------------------------------------------------------------------------- - -This Read Me should accompany the 3DMixer implementation of OpenAL (Open Audio Library). - -CoreAUdio SDK Requirements ------------------------ -Building this implementation of OpenAL for Mac OSX requires the latest CoreAudio SDK (version 1.3.1), due to it use -of new CoreAudio Public Utility classes. - -CoreAudio Version requirements ------------------------ -There are Recommended and Minimum CoreAudio framework and component pieces for running this implementation -of OpenAL for Mac OSX: - - Recommended: - ------------ - OSX: version 10.2.6 AND - QuickTime: version 6.5.1 - AudioToolbox.framework (version 1.3.2) - AudioUnit.framework (version 1.3.2) - CoreAudio.component (version 1.3.2 - this version contains the 2.0 version of the 3DMixer AudioUnit) - - Minimum: - ------------ - OSX: version 10.2 (Jaguar) AND - QuickTime: version 6.4 - AudioToolbox.framework (version 1.2xxxxx) - AudioUnit.framework (version 1.2xxxxx) - CoreAudio.component (version 1.2xxxxxx - this version contains the 1.3 version of the 3DMixer AudioUnit) - ----------------------------------------------------------------------------------------------------------------------- -OpenAL Extensions: ----------------------------------------------------------------------------------------------------------------------- - -This implementation has the following OpenAL extensions. These constants can be found in the included "alctypes.h" header. - -***** ALC_CONVERT_DATA_UPON_LOADING -This extension allows the caller to tell OpenAL to preconvert to the native CoreAudio format, the audio data passed to the -library with the alBufferData() call. Preconverting the audio data, reduces CPU usage by removing an audio data conversion -(per source) at render timem at the expense of a larger memory footprint. - -This feature is toggled on/off by using the alDisable() & alEnable() APIs. This setting will be applied to all subsequent -calls to alBufferData(). - -***** ALC_SPATIAL_RENDERING_QUALITY -This extension allows the application to specify the quality of spatial rendering to better suit the resources of the CPU. -At this time, the quality settings are only applied when rendering to stereo hw. All multichannel rendering uses the same -spatilaization setting on the 3DMixer. Use the alSetInteger() & alGetInteger() APIs to specify and retrieve this setting. -This implmentation provides 2 setting constants: ALC_SPATIAL_RENDERING_QUALITY_HIGH (HRTF) - ALC_SPATIAL_RENDERING_QUALITY_LOW (EqualPowerPanning) - -note: This implementation applies the setting to all the OAL Sources of an OAL Context. However, spatial settings can be applied to -each input bus of the 3DMixer, so it is possible to have this setting on a per OAL Source basis, allowing the developer to give -quality priorities to the various sounds used in an application. - -note: Currently, all stereo sounds are 'passed thru' with no spatial rendering applied. This has the best output quality for rendering -what are typically background sound tracks. However, the 3DMixer has the ability to render a stereo source to a spatial coordinate -if this was desired and support to do so would be trivial. - -***** ALC_MIXER_OUTPUT_RATE -This extension allows the developer to let the AudioGraph be efficient about sample rate conversion. If for example, all sounds -being played have a sample rate of 44k, but the output hardware is set to 48k, then it is best for the 3DMixer to leave the -the audio data (Mixer Outputut Rate) at 44k, letting the output AU rate convert the streams after they have been mixed. By default, -this is set to 44k which is very common sample rate for sound hw. - -***** ALC_MIXER_MAXIMUM_BUSSES -This extension allows the developer to optimize the 3DMixer by setting it available input bus count. This allows the 3DMixer to be as -efficient as possible in resource allocations. By default, the 3DMixer currently defaults to 64 busses (note: the 1.3 version of the -3DMixer does not respect this setting, so always confirm the bus count with a get call, after setting the bus count and creating a new device). -Use: set the bus count before making a call to alOpenDevice(). This will cause the library to set the mixer to you desired bus count. -as it creates the AUGraph. Use the alSetInteger() & alGetInteger() APIs to specify and retrieve this setting. - -***** ALC_RENDER_CHANNEL_COUNT -Because the audio system has no way to know if a user has actually connected a speaker to an output of the audio hardware, it may be desired -to allow the user to clamp all rendering to stereo. Use the alSetInteger() & alGetInteger() APIs to specify and retrieve this setting. -This implmentation provides 2 setting constants: ALC_RENDER_CHANNEL_COUNT_STEREO (clamp the 3DMixer output rendering to stereo, regardless of the hw capabilities) - ALC_RENDER_CHANNEL_COUNT_MULTICHANNEL (try and render to the maximum speakers possible by interrogating the device) - ----------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------- diff --git a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/pbdevelopment.plist b/neo/openal/osx/OpenAL.framework/Versions/A/Resources/pbdevelopment.plist deleted file mode 100644 index 151e2d61..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/A/Resources/pbdevelopment.plist +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>PBXProjectSourcePath</key> - <string>/Users/mmarks/Development/OpenAL/openal/macosx/al_osx.xcode</string> -</dict> -</plist> diff --git a/neo/openal/osx/OpenAL.framework/Versions/Current b/neo/openal/osx/OpenAL.framework/Versions/Current deleted file mode 100644 index 8c7e5a66..00000000 --- a/neo/openal/osx/OpenAL.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/neo/sound/efxlib.h b/neo/sound/efxlib.h index 97de084c..a6331a84 100644 --- a/neo/sound/efxlib.h +++ b/neo/sound/efxlib.h @@ -5,7 +5,7 @@ #define __EFXLIBH #if ID_OPENAL_EAX -#include "../openal/include/eax4.h" +#include <eax4.h> #endif diff --git a/neo/sound/snd_local.h b/neo/sound/snd_local.h index a2a45543..f6a85736 100644 --- a/neo/sound/snd_local.h +++ b/neo/sound/snd_local.h @@ -31,8 +31,8 @@ If you have questions concerning this license or the applicable additional terms // you need the OpenAL headers for build, even if AL is not enabled - http://www.openal.org/ #ifdef _WIN32 -#include "../openal/include/al.h" -#include "../openal/include/alc.h" +#include <al.h> +#include <alc.h> #include "../sys/win32/idal.h" // broken OpenAL SDK ? #define ID_ALCHAR (ALubyte *) diff --git a/neo/sys/win32/eax.h b/neo/sys/win32/eax.h deleted file mode 100644 index d857cc01..00000000 --- a/neo/sys/win32/eax.h +++ /dev/null @@ -1,533 +0,0 @@ -/****************************************************************** -* -* EAX.H - Environmental Audio Extensions version 3.0 -* for OpenAL and DirectSound3D -* Updated May 22, 2001 by Jean-Marc Jot, Sam Dicker (version 1.0). -* -******************************************************************* -*/ - -#ifndef EAX_H_INCLUDED -#define EAX_H_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#ifndef OPENAL - #include <dsound.h> - - /* - * EAX Wrapper Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5} - */ - DEFINE_GUID(CLSID_EAXDirectSound, - 0x4ff53b81, - 0x1ce0, - 0x11d3, - 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5); - - /* - * EAX Wrapper Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C} - */ - DEFINE_GUID(CLSID_EAXDirectSound8, - 0xca503b60, - 0xb176, - 0x11d4, - 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc); - - - -#ifdef DIRECTSOUND_VERSION -#if DIRECTSOUND_VERSION == 0x0800 - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND*, IUnknown FAR*); -#endif -#endif - - __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *); - typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*); - -#else // OPENAL - #include "..\Sdk\OpenAL\Include\al.h" - - #ifndef GUID_DEFINED - #define GUID_DEFINED - typedef struct _GUID - { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; - } GUID; - #endif // !GUID_DEFINED - - #ifndef DEFINE_GUID - #ifndef INITGUID - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID FAR name - #else - #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } - #endif // INITGUID - #endif // DEFINE_GUID - - - /* - * EAX OpenAL Extension - */ - typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); - typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint); -#endif - -#pragma pack(push, 4) - -/* - * EAX 3.0 listener property set {A8FA6880-B476-11d3-BDB9-00C0F02DDF87} - */ -DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties, - 0xa8fa6882, - 0xb476, - 0x11d3, - 0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87); - -// For compatibility with future EAX versions: -#define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX30_ListenerProperties - -typedef enum -{ - DSPROPERTY_EAXLISTENER_NONE, - DSPROPERTY_EAXLISTENER_ALLPARAMETERS, - DSPROPERTY_EAXLISTENER_ENVIRONMENT, - DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE, - DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION, - DSPROPERTY_EAXLISTENER_ROOM, - DSPROPERTY_EAXLISTENER_ROOMHF, - DSPROPERTY_EAXLISTENER_ROOMLF, - DSPROPERTY_EAXLISTENER_DECAYTIME, - DSPROPERTY_EAXLISTENER_DECAYHFRATIO, - DSPROPERTY_EAXLISTENER_DECAYLFRATIO, - DSPROPERTY_EAXLISTENER_REFLECTIONS, - DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY, - DSPROPERTY_EAXLISTENER_REFLECTIONSPAN, - DSPROPERTY_EAXLISTENER_REVERB, - DSPROPERTY_EAXLISTENER_REVERBDELAY, - DSPROPERTY_EAXLISTENER_REVERBPAN, - DSPROPERTY_EAXLISTENER_ECHOTIME, - DSPROPERTY_EAXLISTENER_ECHODEPTH, - DSPROPERTY_EAXLISTENER_MODULATIONTIME, - DSPROPERTY_EAXLISTENER_MODULATIONDEPTH, - DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF, - DSPROPERTY_EAXLISTENER_HFREFERENCE, - DSPROPERTY_EAXLISTENER_LFREFERENCE, - DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR, - DSPROPERTY_EAXLISTENER_FLAGS -} DSPROPERTY_EAX_LISTENERPROPERTY; - -// OR these flags with property id -#define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately -#define DSPROPERTY_EAXLISTENER_DEFERRED 0x80000000 // changes take effect later -#define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \ - DSPROPERTY_EAXLISTENER_IMMEDIATE) - -typedef struct _EAXVECTOR { - float x; - float y; - float z; -} EAXVECTOR; - -// Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all times and delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myListener.lRoom = -1000; -// myListener.lRoomHF = -100; -// ... -// myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ; -// instead of: -// myListener = { -1000, -100, ... , 0x00000009 }; -// If you want to save and load presets in binary form, you -// should define your own structure to insure future compatibility. -// -typedef struct _EAXLISTENERPROPERTIES -{ - unsigned long ulEnvironment; // sets all listener properties - float flEnvironmentSize; // environment size in meters - float flEnvironmentDiffusion; // environment diffusion - long lRoom; // room effect level (at mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lRoomLF; // relative room effect level at low frequencies - float flDecayTime; // reverberation decay time at mid frequencies - float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio - float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio - long lReflections; // early reflections level relative to room effect - float flReflectionsDelay; // initial reflection delay time - EAXVECTOR vReflectionsPan; // early reflections panning vector - long lReverb; // late reverberation level relative to room effect - float flReverbDelay; // late reverberation delay time relative to initial reflection - EAXVECTOR vReverbPan; // late reverberation panning vector - float flEchoTime; // echo time - float flEchoDepth; // echo depth - float flModulationTime; // modulation time - float flModulationDepth; // modulation depth - float flAirAbsorptionHF; // change in level per meter at high frequencies - float flHFReference; // reference high frequency - float flLFReference; // reference low frequency - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - unsigned long ulFlags; // modifies the behavior of properties -} EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES; - -// used by DSPROPERTY_EAXLISTENER_ENVIRONMENT -enum -{ - EAX_ENVIRONMENT_GENERIC, - EAX_ENVIRONMENT_PADDEDCELL, - EAX_ENVIRONMENT_ROOM, - EAX_ENVIRONMENT_BATHROOM, - EAX_ENVIRONMENT_LIVINGROOM, - EAX_ENVIRONMENT_STONEROOM, - EAX_ENVIRONMENT_AUDITORIUM, - EAX_ENVIRONMENT_CONCERTHALL, - EAX_ENVIRONMENT_CAVE, - EAX_ENVIRONMENT_ARENA, - EAX_ENVIRONMENT_HANGAR, - EAX_ENVIRONMENT_CARPETEDHALLWAY, - EAX_ENVIRONMENT_HALLWAY, - EAX_ENVIRONMENT_STONECORRIDOR, - EAX_ENVIRONMENT_ALLEY, - EAX_ENVIRONMENT_FOREST, - EAX_ENVIRONMENT_CITY, - EAX_ENVIRONMENT_MOUNTAINS, - EAX_ENVIRONMENT_QUARRY, - EAX_ENVIRONMENT_PLAIN, - EAX_ENVIRONMENT_PARKINGLOT, - EAX_ENVIRONMENT_SEWERPIPE, - EAX_ENVIRONMENT_UNDERWATER, - EAX_ENVIRONMENT_DRUGGED, - EAX_ENVIRONMENT_DIZZY, - EAX_ENVIRONMENT_PSYCHOTIC, - - EAX_ENVIRONMENT_UNDEFINED, - - EAX_ENVIRONMENT_COUNT -}; - -// Used by DSPROPERTY_EAXLISTENER_FLAGS -// -// Note: The number and order of flags may change in future EAX versions. -// It is recommended to use the flag defines as follows: -// myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE; -// instead of: -// myFlags = 0x00000009; -// -// These flags determine what properties are affected by environment size. -#define EAXLISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time -#define EAXLISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level -#define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time -#define EAXLISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level -#define EAXLISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time -#define EAXLISTENERFLAGS_ECHOTIMESCALE 0x00000040 // echo time -#define EAXLISTENERFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time - -// This flag limits high-frequency decay time according to air absorption. -#define EAXLISTENERFLAGS_DECAYHFLIMIT 0x00000020 - -#define EAXLISTENERFLAGS_RESERVED 0xFFFFFF00 // reserved future use - -// Property ranges and defaults: - -#define EAXLISTENER_MINENVIRONMENT 0 -#define EAXLISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1) -#define EAXLISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC - -#define EAXLISTENER_MINENVIRONMENTSIZE 1.0f -#define EAXLISTENER_MAXENVIRONMENTSIZE 100.0f -#define EAXLISTENER_DEFAULTENVIRONMENTSIZE 7.5f - -#define EAXLISTENER_MINENVIRONMENTDIFFUSION 0.0f -#define EAXLISTENER_MAXENVIRONMENTDIFFUSION 1.0f -#define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f - -#define EAXLISTENER_MINROOM (-10000) -#define EAXLISTENER_MAXROOM 0 -#define EAXLISTENER_DEFAULTROOM (-1000) - -#define EAXLISTENER_MINROOMHF (-10000) -#define EAXLISTENER_MAXROOMHF 0 -#define EAXLISTENER_DEFAULTROOMHF (-100) - -#define EAXLISTENER_MINROOMLF (-10000) -#define EAXLISTENER_MAXROOMLF 0 -#define EAXLISTENER_DEFAULTROOMLF 0 - -#define EAXLISTENER_MINDECAYTIME 0.1f -#define EAXLISTENER_MAXDECAYTIME 20.0f -#define EAXLISTENER_DEFAULTDECAYTIME 1.49f - -#define EAXLISTENER_MINDECAYHFRATIO 0.1f -#define EAXLISTENER_MAXDECAYHFRATIO 2.0f -#define EAXLISTENER_DEFAULTDECAYHFRATIO 0.83f - -#define EAXLISTENER_MINDECAYLFRATIO 0.1f -#define EAXLISTENER_MAXDECAYLFRATIO 2.0f -#define EAXLISTENER_DEFAULTDECAYLFRATIO 1.00f - -#define EAXLISTENER_MINREFLECTIONS (-10000) -#define EAXLISTENER_MAXREFLECTIONS 1000 -#define EAXLISTENER_DEFAULTREFLECTIONS (-2602) - -#define EAXLISTENER_MINREFLECTIONSDELAY 0.0f -#define EAXLISTENER_MAXREFLECTIONSDELAY 0.3f -#define EAXLISTENER_DEFAULTREFLECTIONSDELAY 0.007f - -#define EAXLISTENER_MINREVERB (-10000) -#define EAXLISTENER_MAXREVERB 2000 -#define EAXLISTENER_DEFAULTREVERB 200 - -#define EAXLISTENER_MINREVERBDELAY 0.0f -#define EAXLISTENER_MAXREVERBDELAY 0.1f -#define EAXLISTENER_DEFAULTREVERBDELAY 0.011f - -#define EAXLISTENER_MINECHOTIME 0.075f -#define EAXLISTENER_MAXECHOTIME 0.25f -#define EAXLISTENER_DEFAULTECHOTIME 0.25f - -#define EAXLISTENER_MINECHODEPTH 0.0f -#define EAXLISTENER_MAXECHODEPTH 1.0f -#define EAXLISTENER_DEFAULTECHODEPTH 0.0f - -#define EAXLISTENER_MINMODULATIONTIME 0.04f -#define EAXLISTENER_MAXMODULATIONTIME 4.0f -#define EAXLISTENER_DEFAULTMODULATIONTIME 0.25f - -#define EAXLISTENER_MINMODULATIONDEPTH 0.0f -#define EAXLISTENER_MAXMODULATIONDEPTH 1.0f -#define EAXLISTENER_DEFAULTMODULATIONDEPTH 0.0f - -#define EAXLISTENER_MINAIRABSORPTIONHF (-100.0f) -#define EAXLISTENER_MAXAIRABSORPTIONHF 0.0f -#define EAXLISTENER_DEFAULTAIRABSORPTIONHF (-5.0f) - -#define EAXLISTENER_MINHFREFERENCE 1000.0f -#define EAXLISTENER_MAXHFREFERENCE 20000.0f -#define EAXLISTENER_DEFAULTHFREFERENCE 5000.0f - -#define EAXLISTENER_MINLFREFERENCE 20.0f -#define EAXLISTENER_MAXLFREFERENCE 1000.0f -#define EAXLISTENER_DEFAULTLFREFERENCE 250.0f - -#define EAXLISTENER_MINROOMROLLOFFFACTOR 0.0f -#define EAXLISTENER_MAXROOMROLLOFFFACTOR 10.0f -#define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXLISTENER_DEFAULTFLAGS (EAXLISTENERFLAGS_DECAYTIMESCALE | \ - EAXLISTENERFLAGS_REFLECTIONSSCALE | \ - EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \ - EAXLISTENERFLAGS_REVERBSCALE | \ - EAXLISTENERFLAGS_REVERBDELAYSCALE | \ - EAXLISTENERFLAGS_DECAYHFLIMIT) - - - -/* -* EAX 3.0 buffer property set {A8FA6881-B476-11d3-BDB9-00C0F02DDF87} -*/ -DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties, - 0xa8fa6881, - 0xb476, - 0x11d3, - 0xbd, 0xb9, 0x0, 0xc0, 0xf0, 0x2d, 0xdf, 0x87); - -// For compatibility with future EAX versions: -#define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX30_BufferProperties -#define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX30_BufferProperties - -typedef enum -{ - DSPROPERTY_EAXBUFFER_NONE, - DSPROPERTY_EAXBUFFER_ALLPARAMETERS, - DSPROPERTY_EAXBUFFER_OBSTRUCTIONPARAMETERS, - DSPROPERTY_EAXBUFFER_OCCLUSIONPARAMETERS, - DSPROPERTY_EAXBUFFER_EXCLUSIONPARAMETERS, - DSPROPERTY_EAXBUFFER_DIRECT, - DSPROPERTY_EAXBUFFER_DIRECTHF, - DSPROPERTY_EAXBUFFER_ROOM, - DSPROPERTY_EAXBUFFER_ROOMHF, - DSPROPERTY_EAXBUFFER_OBSTRUCTION, - DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO, - DSPROPERTY_EAXBUFFER_OCCLUSION, - DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO, - DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO, - DSPROPERTY_EAXBUFFER_OCCLUSIONDIRECTRATIO, - DSPROPERTY_EAXBUFFER_EXCLUSION, - DSPROPERTY_EAXBUFFER_EXCLUSIONLFRATIO, - DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF, - DSPROPERTY_EAXBUFFER_DOPPLERFACTOR, - DSPROPERTY_EAXBUFFER_ROLLOFFFACTOR, - DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR, - DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR, - DSPROPERTY_EAXBUFFER_FLAGS -} DSPROPERTY_EAX_BUFFERPROPERTY; - -// OR these flags with property id -#define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately -#define DSPROPERTY_EAXBUFFER_DEFERRED 0x80000000 // changes take effect later -#define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \ - DSPROPERTY_EAXBUFFER_IMMEDIATE) - -// Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS -// - all levels are hundredths of decibels -// - all delays are in seconds -// -// NOTE: This structure may change in future EAX versions. -// It is recommended to initialize fields by name: -// myBuffer.lDirect = 0; -// myBuffer.lDirectHF = -200; -// ... -// myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ; -// instead of: -// myBuffer = { 0, -200, ... , 0x00000003 }; -// -typedef struct _EAXBUFFERPROPERTIES -{ - long lDirect; // direct path level (at low and mid frequencies) - long lDirectHF; // relative direct path level at high frequencies - long lRoom; // room effect level (at low and mid frequencies) - long lRoomHF; // relative room effect level at high frequencies - long lObstruction; // main obstruction control (attenuation at high frequencies) - float flObstructionLFRatio; // obstruction low-frequency level re. main control - long lOcclusion; // main occlusion control (attenuation at high frequencies) - float flOcclusionLFRatio; // occlusion low-frequency level re. main control - float flOcclusionRoomRatio; // relative occlusion control for room effect - float flOcclusionDirectRatio; // relative occlusion control for direct path - long lExclusion; // main exlusion control (attenuation at high frequencies) - float flExclusionLFRatio; // exclusion low-frequency level re. main control - long lOutsideVolumeHF; // outside sound cone level at high frequencies - float flDopplerFactor; // like DS3D flDopplerFactor but per source - float flRolloffFactor; // like DS3D flRolloffFactor but per source - float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect - float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF - unsigned long ulFlags; // modifies the behavior of properties -} EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES; - -// Use this structure for DSPROPERTY_EAXBUFFER_OBSTRUCTION, -typedef struct _EAXOBSTRUCTIONPROPERTIES -{ - long lObstruction; - float flObstructionLFRatio; -} EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES; - -// Use this structure for DSPROPERTY_EAXBUFFER_OCCLUSION -typedef struct _EAXOCCLUSIONPROPERTIES -{ - long lOcclusion; - float flOcclusionLFRatio; - float flOcclusionRoomRatio; - float flOcclusionDirectRatio; -} EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES; - -// Use this structure for DSPROPERTY_EAXBUFFER_EXCLUSION -typedef struct _EAXEXCLUSIONPROPERTIES -{ - long lExclusion; - float flExclusionLFRatio; -} EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES; - -// Used by DSPROPERTY_EAXBUFFER_FLAGS -// TRUE: value is computed automatically - property is an offset -// FALSE: value is used directly -// -// Note: The number and order of flags may change in future EAX versions. -// To insure future compatibility, use flag defines as follows: -// myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO; -// instead of: -// myFlags = 0x00000003; -// -#define EAXBUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF -#define EAXBUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM -#define EAXBUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF - -#define EAXBUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use - -// Property ranges and defaults: - -#define EAXBUFFER_MINDIRECT (-10000) -#define EAXBUFFER_MAXDIRECT 1000 -#define EAXBUFFER_DEFAULTDIRECT 0 - -#define EAXBUFFER_MINDIRECTHF (-10000) -#define EAXBUFFER_MAXDIRECTHF 0 -#define EAXBUFFER_DEFAULTDIRECTHF 0 - -#define EAXBUFFER_MINROOM (-10000) -#define EAXBUFFER_MAXROOM 1000 -#define EAXBUFFER_DEFAULTROOM 0 - -#define EAXBUFFER_MINROOMHF (-10000) -#define EAXBUFFER_MAXROOMHF 0 -#define EAXBUFFER_DEFAULTROOMHF 0 - -#define EAXBUFFER_MINOBSTRUCTION (-10000) -#define EAXBUFFER_MAXOBSTRUCTION 0 -#define EAXBUFFER_DEFAULTOBSTRUCTION 0 - -#define EAXBUFFER_MINOBSTRUCTIONLFRATIO 0.0f -#define EAXBUFFER_MAXOBSTRUCTIONLFRATIO 1.0f -#define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f - -#define EAXBUFFER_MINOCCLUSION (-10000) -#define EAXBUFFER_MAXOCCLUSION 0 -#define EAXBUFFER_DEFAULTOCCLUSION 0 - -#define EAXBUFFER_MINOCCLUSIONLFRATIO 0.0f -#define EAXBUFFER_MAXOCCLUSIONLFRATIO 1.0f -#define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f - -#define EAXBUFFER_MINOCCLUSIONROOMRATIO 0.0f -#define EAXBUFFER_MAXOCCLUSIONROOMRATIO 10.0f -#define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO 1.5f - -#define EAXBUFFER_MINOCCLUSIONDIRECTRATIO 0.0f -#define EAXBUFFER_MAXOCCLUSIONDIRECTRATIO 10.0f -#define EAXBUFFER_DEFAULTOCCLUSIONDIRECTRATIO 1.0f - -#define EAXBUFFER_MINEXCLUSION (-10000) -#define EAXBUFFER_MAXEXCLUSION 0 -#define EAXBUFFER_DEFAULTEXCLUSION 0 - -#define EAXBUFFER_MINEXCLUSIONLFRATIO 0.0f -#define EAXBUFFER_MAXEXCLUSIONLFRATIO 1.0f -#define EAXBUFFER_DEFAULTEXCLUSIONLFRATIO 1.0f - -#define EAXBUFFER_MINOUTSIDEVOLUMEHF (-10000) -#define EAXBUFFER_MAXOUTSIDEVOLUMEHF 0 -#define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF 0 - -#define EAXBUFFER_MINDOPPLERFACTOR 0.0f -#define EAXBUFFER_MAXDOPPLERFACTOR 10.f -#define EAXBUFFER_DEFAULTDOPPLERFACTOR 0.0f - -#define EAXBUFFER_MINROLLOFFFACTOR 0.0f -#define EAXBUFFER_MAXROLLOFFFACTOR 10.f -#define EAXBUFFER_DEFAULTROLLOFFFACTOR 0.0f - -#define EAXBUFFER_MINROOMROLLOFFFACTOR 0.0f -#define EAXBUFFER_MAXROOMROLLOFFFACTOR 10.f -#define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f - -#define EAXBUFFER_MINAIRABSORPTIONFACTOR 0.0f -#define EAXBUFFER_MAXAIRABSORPTIONFACTOR 10.0f -#define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f - -#define EAXBUFFER_DEFAULTFLAGS (EAXBUFFERFLAGS_DIRECTHFAUTO | \ - EAXBUFFERFLAGS_ROOMAUTO | \ - EAXBUFFERFLAGS_ROOMHFAUTO ) - -#pragma pack(pop) - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif diff --git a/neo/sys/win32/eaxguid.lib b/neo/sys/win32/eaxguid.lib deleted file mode 100644 index 5247dd7e..00000000 Binary files a/neo/sys/win32/eaxguid.lib and /dev/null differ