Main Site Links Resources Tutorials
News VB Gaming Code Downloads DirectX 7
Contact Webmaster VB Programming Product Reviews DirectX 8
  General Multimedia Articles DirectX 9
      Miscellaneous

DirectSound: Stream From a File
By: Jack Hoxley
Written: June 2000

Download: Ds_StreamFromFile.zip (16kb)


This is probably the hardest way of using sounds in DirectX. It requires you to know how a wave files data is stored; then reading it into a blank buffer. It is quite easy once you have the code, as it's self adapting.

Streaming from a file basically means that it won't store the entire file in memory, which is what happens when you use CreateBufferFromFile. Streaming basically creates a half-a-second buffer with only that much data in it, as the sound is played it updates this buffer by adding new information to it. Because of this you only need a buffer the size of a 500ms sound file - tiny. This becomes extremely useful when you want to play a large file, for example, a speech. If you used the easy (and traditional) method you would need 10-20Mb of space to hold that sound in memory, which will easily bring anything but the fastest PC's to their knees. Not a good idea when performance is critical. If, however, you used a streaming method you could have hundreds of large files taking up less memory than 2 small sounds - as each streaming buffer only needs 500ms (1/2 a second) of memory.

DirectSound has no native, and easy, method of streaming sound into it's buffers; you have to write the code for yourself. This flowchart explains (simply) how it works:

Open up the Wave file
|
Look through the header and gather information on the file
|
Create a blank buffer with the settings stored in the header
|
The blank buffer is created to be 500ms Long
|
We then use arrays to load the wave data straight from the file
|
We then copy this data straight to the blank buffer
|
The Sound starts playing
|
We use DirectXEvents to keep track of where it is *
|
As it gets to the end we load some more data into the buffer *
|
This small loop(*) keeps going until the sound has finished.

 

You can download a copy of this program from the top of the page, or from the downloads page

DirectX 4 VB © 2000 Jack Hoxley. All rights reserved.
Reproduction of this site and it's contents, in whole or in part, is prohibited,
except where explicitly stated otherwise.
Design by Mateo
Contact Webmaster