Please support our sponsor:
DirectX4VB.Com - All You Need For Multimedia Visual Basic Programming

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
This site is hosted by Exhedra Solutions, Inc., the parent company of RentACoder.com and PlanetSourceCode.com