Platform SDK: DirectX

Buffer Basics

When you initialize DirectSound in your application, it automatically creates and manages a primary sound buffer for mixing sounds and sending them to the output device.

Your application must create at least one secondary sound buffer for storing and playing individual sounds. For more information on how to do this, see Creating Secondary Buffers.

A secondary buffer can exist throughout the life of an application or it may be destroyed when no longer needed. It may contain a single sound that is to be played repeatedly, such as a sound effect in a game, or it may be filled with new data from time to time. The application can play a sound stored in a secondary buffer as a single event or as a looping sound that plays continuously. Secondary buffers can also be used to stream data, in cases where a sound file contains more data than can conveniently be stored in memory.

[C++]

You can create two or more secondary buffers in the same physical memory by using the IDirectSound::DuplicateSoundBuffer method. You cannot duplicate the primary sound buffer. Note that if the original buffer is in hardware memory and hardware resources are not available for the duplicate buffer, this call may fail. Also, even if the call succeeds, there is no guarantee that the duplicate buffer actually shares memory with the original buffer, so it is unwise to make changes to one buffer in the expectation that these changes will be reflected in all duplicate buffers.

[Visual Basic]

You can create two or more secondary buffers in the same physical memory by using the DirectSound.DuplicateSoundBuffer method. You cannot duplicate the primary sound buffer. Note that if the original buffer is in hardware memory and hardware resources are not available for the duplicate buffer, this call may fail.

You mix sounds from different secondary buffers simply by playing them at the same time. Any number of secondary buffers can be played at one time, up to the limits of available processing power.

The DirectSound mixer can provide as little as 20 milliseconds of latency, so there is no perceptible delay before play begins. Under these conditions, if your application plays a buffer and immediately begins a screen animation, the audio and video appear to start at the same time. However, if DirectSound must emulate hardware features in software, the mixer cannot achieve low latency and a longer delay (typically 100-150 milliseconds) occurs before the sound is reproduced.

[C++]

Normally you do not have to concern yourself at all with the primary buffer; DirectSound manages it behind the scenes. However, if your application is to perform its own mixing, DirectSound will let you write directly to the primary buffer. If you do this, you cannot also use secondary buffers. For more information, see Access to the Primary Buffer.