Die Soundobjekte erstellen
Nun geht es daran, die einzelnen Soundobjekte zu erstellen. In der DirectSound-Terminologie werden diese allerdings
SoundBuffer genannt. Jeder Soundbuffer steht dabei für einen im WAV-Format vorliegenden Sound, der den abzuspielenden
Sound enthält - und damit unabhängig von anderen Sounds abgespielt werden kann. Zu Beginn eines Programms können mehrere dieser
Buffer für die unterschiedlichsten Soundsituationen wie Explosionen, Kollisionen etc. erzeugt werden, um später bei Bedarf abgespielt
zu werden. Visual-Basic-Programmierer genießen dabei ein besonders komfortables Dasein,
denn sie können auf die Methode CreateSoundBufferFromFile zurückgreifen. Diese Methode akzeptiert den Dateinamen einer
WAV-Datei, die den abzuspielenden Sound enthält. Darüber hinaus müssen
zwei weitere Parameter übergeben werden, die zum einen die Fähigkeiten des zu erzeugenden Soundbuffers festlegen, zum anderen aber
das Format des abzuspielenden Sounds bestimmen:
Dim dsbuffer As _
DirectSoundBuffer
Dim bufferDesc As DSBUFFERDESC
Dim waveFormat As _
WAVEFORMATEX
bufferDesc.lFlags = DSBCAPS
CTRLFREQUENCY Or DSBCAPS
CTRLPAN Or DSBCAPS_
CTRLVOLUME Or DSBCAPS_STATIC
waveFormat.nFormatTag = _
WAVE_FORMAT_PCM
waveFormat.nChannels = 2
waveFormat.lSamplesPerSec _
= 22050
waveFormat.nBitsPerSample = 16
waveFormat.nBlockAlign = _
waveFormat.nBitsPerSample _
/ 8 * waveFormat.nChannels
waveFormat.lAvgBytesPerSec _
= waveFormat.lSamplesPerSec * _
waveFormat.nBlockAlign
Set dsbuffer = _
ds.CreateSoundBufferFromFile _
(App.Path & "\tutb.wav", _
bufferDesc, waveFormat)
In der DSBUFFERDESC-Struktur werden die vom Soundbuffer gewünschten Fertigkeiten hinterlegt. Dazu wird dessen
lFlags-Variable initialisiert. Durch Angabe des Flags DSBCAPS_CTRLFREQUENCY wird ein Soundbuffer erzeugt,
dessen Abspielgeschwindigkeit sich beliebig ändern lässt. Durch Angabe von DSBCAPS_CTRLPAN lässt sich das Panorama,
also die Balance bei der Ausgabe des Sounds im Soundbuffer, ändern. DSBCAPS_CTRLVOLUME bestimmt, dass sich die
Ausgabelautstärke ändern lässt, und DSBCAPS_STATIC gibt an, dass die Sounddaten im Speicher gehalten und nicht
von der Festplatte nachgeladen werden. Vor allem bei kurzen "Actionsounds" ist diese Einstellung wichtig. Neben der
DSBUFFERDESC-Struktur, die die Fertigkeiten des Soundbuffers bestimmt, muss eine WAVEFORMATEX-Struktur
initialisiert werden, die den später in den Soundbuffer zu ladenden Sound beschreibt. Im Element nFormatTag wird
dazu das Formatkennzeichen des zu verwendenden Audiokompressors verwendet. Auf einem typischen System sind üblicherweise
verschiedene Audiokompressoren wie beispielsweise der ADPCM-Kompressor und weitere installiert. Weil die Audiokompression
und Dekompression aber entweder Taktzyklen der
CPU auffrisst oder aber auf eine spezielle Unterstützung durch die
Soundkarte angewiesen ist, verwendet man im allgemeinen unkomprimierte Sounddaten,
was durch Angabe des Flags WAVE_FORMAT_PCM ausgedrückt wird.