app-annotations.sgml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <appendix>
  2. <title>Miscellaneous Annotations</title>
  3. <section id="reverb-objects">
  4. <title>Reverberation Objects?</title>
  5. <para>
  6. In a generalization of the I3DL2 Extension for
  7. listener specific reverberation effects, it might
  8. be best to implement Reverb Objects. A Reverb Object
  9. is one example of a parametrized filter. Each
  10. such object encapsulates a set of attributes (the
  11. filter parameters). Sources and Listener alike
  12. have an attribute that allows the application coder
  13. to choose a reverb object for application either
  14. at the origin of the sound, or at the position of
  15. the listener. Initial implementation would only
  16. support one Reverb Object per Context, applied at
  17. the listener position.
  18. </para>
  19. <para>
  20. The I3DL2 Environment is a filter that alters the
  21. way the user experiences the virtual world. As
  22. filters require DSP operations it is limited by hardware
  23. processing capabilities.
  24. </para>
  25. <para>
  26. The I3DL2 Environment models the surroundings of the
  27. listener by simplifying the presumed acoustic properties
  28. of those surroundings into a small set of parameters.
  29. It allows to reproduce the effects of sound reflections
  30. and reverberation caused by walls and obstacles, and
  31. the muffling effects of obstacles inside environments
  32. or partitions between environments.
  33. </para>
  34. <para>
  35. Environment properties:
  36. Early reflections level and delay.
  37. Late reverberation level and delay, low- and high-frequency decay time.
  38. Reverberation diffusion, density and spectrum.
  39. </para>
  40. <para>
  41. Source properties:
  42. Direct path intensity and spectrum.
  43. Reverberation intensity and spectrum.
  44. </para>
  45. </section>
  46. <section id="al-objects-filters">
  47. <title>On Filters</title>
  48. <para>
  49. RFC/bk000502: Filters as the general concept of modifiers?
  50. Environment as a special case filter?
  51. Can we break down EAX environments into ReverbFilters where we
  52. parametrize late reflections, and ReflectFilters, which fake
  53. early reflections? Do we need this separation if we have
  54. calculated or distinct echo effect reflections instead of
  55. stocastic ones? Does it make sense to superimpose a general
  56. reverb kicking in after a delay t, with reflections (random
  57. or not) or should reverb only kick in after reflections are
  58. discarded?
  59. </para>
  60. <para>
  61. RFC/bk000502: old text.
  62. (Environment) Properties:
  63. Geometry - geometry is specified using an immediate mode API which is
  64. similar to OpenGL. Support for scene lists are also provided on a basis
  65. similar to OpenGL's display lists.
  66. Materials - specify the absorptive and reflective qualities of a piece
  67. of geometry. &AL; should provide a facility for accessing preset
  68. materials, and storing and retrieving new materials at runtime.
  69. </para>
  70. <para>
  71. RFC/nn: Atmospheric/ambient properties?
  72. REF/nn: A3D 2.0 IA3dMaterial
  73. </para>
  74. <section id="al-objects-filters-atmospheric">
  75. <title>Atmospheric Filter</title>
  76. <para>
  77. The atmospheric filter the effects of media with constant density,
  78. on propagating sound waves. The effect of the atmospheric filter
  79. is distance dependent. Atmospheric effects can be parameterized
  80. by specifying attenuation per unit distance, the scale for the
  81. unit distance, for one of a minimum of two frequency ranges
  82. (low frequency and high frequency roll-off).
  83. </para>
  84. <para>
  85. RFC/bk000502: do we specify the atmospheric filter per-source?
  86. The effect is clearly dominated by the most dense medium, but
  87. we have little chance simulating crossings between different
  88. media this way. Distance attenuation in media clearly depends
  89. on source and listener being embedded in the same medium,
  90. without any obstruction along the LOS.
  91. </para>
  92. </section>
  93. <section id="al-objects-filters-listenerreverb">
  94. <title>Listener Reverb</title>
  95. <para>
  96. Listener Reverb is a parameterized filter that modifies the sound at
  97. listener position to emulate effects of the surroundings, namely
  98. effects of late reflections. Without simulating sound propagation
  99. this reverb accounts for the averaged outcome of different arrangements
  100. of reflecting/absorbing surfaces around the listener.
  101. </para>
  102. </section>
  103. <section id="al-objects-filters-sourcereverb">
  104. <title>Source Reverb</title>
  105. <para>
  106. There is currently no support for reverb at the source position.
  107. </para>
  108. </section>
  109. <section id="al-objects-filters-reflection">
  110. <title>Reflection Filter</title>
  111. <para>
  112. First order reflection (and, if support, O(n) reflection for small n)
  113. can choose to simulate the effects of different materials by
  114. parametrizing reflection filters.
  115. There is currently no support for reflections.
  116. </para>
  117. </section>
  118. <section id="al-objects-filters-transmission">
  119. <title>Transmission Filter</title>
  120. <para>
  121. Sound propagation along the LOS can pass through obstructions
  122. specified as convex polygons. The effects of lossy transmission
  123. can be approximated by applying a once-off filtering. Like
  124. atmospheric filters, this can be a frequency-dependent roll-off,
  125. unlike atmospheric filters this does not take distance into
  126. account. Transmission filters can be used to emulate losses
  127. on crossing separating surfaces between different media (water/air
  128. borders).
  129. There is currently no support for transmissions.
  130. </para>
  131. </section>
  132. </section>
  133. <section>
  134. <title>Parameterization over Time</title>
  135. <para>
  136. Fading and cross-fading. There are three ways to handle any kind
  137. of gain control as a function of time:
  138. <itemizedlist>
  139. <listitem>
  140. <para>
  141. manipulate gain per frame/sufficiently often
  142. </para>
  143. </listitem>
  144. <listitem>
  145. <para>
  146. parameterize, i.e. specify a target gain,
  147. a duration over which to interpolate, and an interpolation function
  148. </para>
  149. </listitem>
  150. <listitem>
  151. <para>
  152. provide an buffer that indicates amplitude, stretched over
  153. a duration/by a frequency
  154. </para>
  155. </listitem>
  156. The last mechanism also works for early reflections and echos,
  157. and any other temporal filtering. The first and second approach
  158. also work for attributes like Pitch.
  159. </para>
  160. </section>
  161. <section>
  162. <title>On Geometry</title>
  163. <para>
  164. Both the A3D API and implementation as well as EAX related utilities
  165. like EAGLE seem to indicate that any effort to handle scene geoemtry
  166. at API level will inevitably duplicate modules found in common game
  167. engines for purposes of collision detection, path planning, AI
  168. support, visibility and sound propagation culling.
  169. </para>
  170. <para>
  171. In other words, any such effort will inevitably lead to competing
  172. subsystems and multiple use of processing and memory resources to
  173. implement the same functionality. While it makes sense to provide
  174. templates, examples, and even utilities like EAGLE and SDK's to
  175. developers, it makes no sense to integrate any such functionality
  176. with the API.
  177. </para>
  178. <para>
  179. The geometry based processing inevitably leads to a scene graph
  180. API, with all the resulting problems. On closer examination it
  181. seems that the specification and storage of source and listener
  182. positions is a red herring.
  183. </para>
  184. <para>
  185. Second and higher order reflections seem to be irrelevant.
  186. </para>
  187. <para>
  188. Reflection can be faked by stochastic means, but an actual
  189. presence/immersion effect will require smooth transitions
  190. depending on the continuous change of distance between
  191. sources, listener, and dominant reflectors.
  192. </para>
  193. <para>
  194. Dominant reflectors are presumed to be 1st order,
  195. with material properties that incur little or no loss
  196. (or even provide amplification), and significant
  197. surface area.
  198. </para>
  199. <para>
  200. Transmission loss through dense media is equivalent to
  201. the distance attenuation model.
  202. </para>
  203. <para>
  204. Refraction/reflection loss at border surfaces separating
  205. media....
  206. </para>
  207. <para>
  208. No explicit geometry to check whether there is any indirect
  209. (1st order reflection, multiple reflections) path between
  210. source and listener - the application is usually better
  211. equipped to handle this (portal states, PHS). The benefit
  212. of forcing the AL implementation to check for obstruction
  213. (object inersecting LOS) is questionable at best - LOS
  214. checking is also better done by the main application.
  215. In essence, the application might even handle the 1st
  216. order reflections IFF we provide the means to generate
  217. early reflection instead of rolling dice, and if we
  218. make it cheap to enable a path between a source and
  219. the listener complete with a material. Come to think of
  220. it: the implementation guarantees n paths with m filters
  221. one of which is transmission or reflection, one is
  222. distance attenuation, one is source reverb, one is
  223. listener reverb....
  224. </para>
  225. </section>
  226. <section>
  227. <title>No ALU</title>
  228. <note id="bk000019-01"><title>RFC</title><para>
  229. ALU, like GLU, is a problem: linkage dependencies, multiple drivers
  230. sharing one ALU etc. It would be best to not clutter the specification
  231. with ALU/ALUT. Any support code/template repository/SDK can be
  232. maintained as a separate open source project.
  233. </para></note>
  234. <para>
  235. ALU provides operations that do not affect driver or hardware state.
  236. These can be resampling/conversion methods or other sample data
  237. processing, or utilities for (optimized) filter generation. ALU
  238. does not provide I/O operations. At this time,
  239. ALU is not specified and not implemented.
  240. </para>
  241. <para>
  242. RFC/bk000502: GLU is becoming a bit of a problem right now, with
  243. most applications avoiding it as they load GL DLL's explicitely,
  244. but do not trust the ABI specification enough to link against GLU,
  245. and not bothering to load it. A vendor-neutral open source ALU
  246. works for me, but we can not accept link time dependencies to AL.
  247. ALU (like GLU) is meant for minimal convenience, in small
  248. building blocks, it is not meant as an SDK.
  249. </para>
  250. <para>
  251. RFC/bk000502: old text.
  252. ALU is the AL Utility library, and provide functions for performing audio
  253. conversion, preset material properties, and a compatability layer for
  254. legacy stereo format audio. This includes support for panning and per
  255. channel volume control.
  256. </para>
  257. <para>
  258. RFC/nn: Er, what else does the world of 2D sound usually need?
  259. </para>
  260. </section>
  261. <section>
  262. <title>No ALUT</title>
  263. <para>
  264. Application coders frequently request additional support for sound
  265. handling to the extent of sophisticated SDKs. It is expected that
  266. SDK vendors will provide such products on top of AL. ALUT (in analogy
  267. to GLUT) would constitute an "official" SDK if desired. At this time,
  268. ALUT is not specified and not implemented, and not intended to be part
  269. of &AL; proper.
  270. </para>
  271. <para>
  272. ALUT is a utility toolkit for &AL;. It sits on top of ALC.
  273. It provides convenience functions for accessing files, for playing sounds,
  274. and an API for accessing CDROM functionality.
  275. </para>
  276. </section>
  277. <!-- Driver DDK section
  278. http://www.microsoft.com/directx/
  279. http://www.microsoft.com/DDK/DDKdocs/win98ddk/ds-ddk_8eas.htm
  280. -->
  281. </appendix>