To download the header files, libraries, and documentation for EAX 2.0, go to:

The I3DL2 standard was created by the Interactive Audio Special Interest Group (IA-SIG). For more information go to:

To utilize the SDK for 3-D audio by Sensaura, which offers some property set-based features in addition to EAX 2.0, go to:

Creative Labs and Sensaura are not the only companies to provide property-set access to their hardware. NVidea, C-Media, Yamaha, Philips, Crystal Semiconductors, and no doubt others have also enabled property sets covering EAX, I3DL2 or other voice-management functions for their sound cards.


In this chapter, we described a sample that demonstrates the EAX 2.0 environmental sound settings. The sample demonstrated how to use a property set interface to set one of the predefined environments, and individual settings for obstruction and occlusion . Driving the hardware directly with property sets can create convincing atmosphere and sound effects with very little performance cost.

Coding property sets is fairly easy and, given the high-quality results, is the recommended way to get great environmental sound effects.

Chapter 8: Building an Application with the Concertina Framework


The Concertina framework is a header file that combines the functionality of the audio samples that you have seen, and presents it all in an SDK format. So if you accept the design decisions that we have made in designing this framework, you need do no more than include the headers and sources in your project, amend the tables of wave files to match those that you require, and you re ready to go. Of course, you will probably want to tailor the code to suit your particular application, but as a framework that wraps all the complexity of DirectSound and presents the programmer with a powerful, flexible, and obvious set of calls, it s not bad.

The purpose of the Concertina framework is to provide the kind of layer that simply involves calls to methods whose names and functions match the movement of objects around a 3-D world, or the playing of background music or ambient sounds.

The Concertina.exe program is a small sample showing how to call into the framework (see Figure 8.1). It only has Play Game, Stop Game and Exit buttons , with text telling you what is going on in our mock 3-D world. Run this program now, which is located in the AVBook\bin directory.

click to expand
Figure 8.1: Concertina framework test dialog box.

This chapter describes the design philosophy behind the framework, how to initialize it for your own project, and finally, all the methods that it implements.

Design Philosophy

The main assumption in the design is that you have created a 3-D world, with objects moving around within that world. These objects make a variety of noises: there are environmental effects, there is atmospheric music, and there are some ambient and random sounds. With this scenario, you do not know exactly how many times any one sound will need to be played, and in particular, how many buffers of the same sound that might need to be played at once.

For this reason, the Concertina framework operates using a table of best guesses at how many buffers you need for each sound, but includes an overflow set of buffers that can be used when your guess is wrong. It also prints out a report at the end of the program letting you know the actual requirement for sound buffers. The idea is that you can improve your best guesses with the testing of your game, but that you need never get it exactly right as the overflow area will take care of most of the excesses as they occur.

Another design decision is that there are a small number of streaming buffers to handle the music that may be required. We have not enabled applying 3-D or special effects processing to the streaming buffers, although you could amend the code to do this.

Of course another design decision is that you want the full range of 3-D and special effects that have been demonstrated in the Cacophony, Rumpus and Circular Streams samples.

To include the Concertina framework in your own project, go through the following steps.