22.5 Challenges for New Game Audio Systems
323
less resources is merely a bonus from a computational point of view. This can
lead to perceptually sparser, cleaner mixes, without the “grey goo” phenomena
that comes from the superposition of an overwhelming number of channels of
sampled audio. LOAD utilises many similar principles to those used in audio
compression like MPEG layer 3. Different behavioural models for swarms, vol-
umetric extents, composites, and causally linked sequences may take advantage
of critical band and temporal masking. Because we get to compute them at run
time we can take account of live dynamics or other constraints like framing,
focus, player task, relevance, etc.
SECTION 22.5
Challenges for New Game Audio Systems
As technology is still in development it’s important to realise that no audio
engine currently offers all the necessary pieces of the jigsaw needed for perfect
procedural audio. Pure Data and Max currently offer the best DSP develop-
ment environment, but even where their run-time schedulers can be embedded
into game code they suffer limitations that must be solved to obtain a highly
robust and flexible real-time game audio engine. There are competing philoso-
phies that must be weighed up as we converge on the ideal system. Parallelism,
threading, object inheritance, and granularity are some of the issues on the
table at the time of writing this. For an excellent overview of audio computa-
tion systems see G¨
unter Geiger’s thesis (Geiger 2006). I will briefly mention a
few of the more interesting issues next.
Dynamic Graph Configuration
Ideally we want to be able to construct DSP graphs on the fly, to add, delete,
and modify objects without causing clicks or dropouts. If it is necessary to
remove one object and replace it with another before one signal block has com-
puted that there is a potential for overrun. One approach is to hot swap objects
via an intermediate crossfade. A new object X is inserted in parallel with object
A, which we wish to replace. X is a wrapper that contains B, the replacement
object, but can deactivate and deallocate the wrapping code leaving only B.
Once inserted a signal crossfade occurs over several blocks as the threading/
timing allows, and then the wrapper is pulled off B. A problem arises as the
DSP graph becomes large. To insert or delete a node it is necessary to traverse
and sort the entire graph. Several data structures are interesting candidates
for building DSP schedulers, including adjacency matrices of pointers, various
tree structures, and linked graphs. Pure Data and Max both use the linked
structure approach, because it is flexible both at run time and at design time,
but it suffers unpredictable traversal times that mean dynamic reconfiguration
is a problem.
Do'stlaringiz bilan baham: |