|
Tipp 0146
|
DirectSound - Effekte
|
|
|
Autor/Einsender: Datum: |
|
Alexander Csadek 03.11.2006 |
|
Entwicklungsumgebung: |
|
VB.Net 2003 |
DirectX-Version: |
|
DirectX 9 |
|
|
In DirectX 9 stehen durch DirectX Audio standardmässig ein paar interesante Effekte als
DirectX Media Object's (DMO) zur Verfügung. Mehr Informationen über DMO's findet ihr in der
Direct Show Dokumentation von Microsoft oder in der
MSDN.
|
Jede DirectX-Applikation kann auf diese Standard-Effekte zugreifen. Folgende Effekte stehen zur Auswahl:
|
- Chorus
- Compression
- Distortion
- Echo
- Environmental Reverberation
- Flange
- Gargle
- Parametric Equalizer
- Waves Reverberation
|
Dieser Tipp beschäftigt sich nur mit dem Einsatz der Effekte mittels DirectSound.
|
Jeder Effekt, ausser Waves Reverberation, verarbeitet 8- oder 16-bit PCM Wave Format mit einem oder zwei Kanälen und jeder Sample Rate.
Waves Reverberation kann keine 8-bit Wave's verarbeiten.
Die Effekte arbeiten nicht ganz sauber bei sehr kleinen SoundBuffern und bei weniger als 150 Millisekunden kann kein Effekt auf dem
SoundBuffer erzeugt werden.
|
In einer DirectSound-Applikation wird immer direkt mit dem SoundBuffer gearbeitet. Das bedeutet, wir können nicht auf den Effekt zugreifen
solange er nicht auf einen SoundBuffer gesetzt wurde.
Um einen SoundBuffer zu erzeugen, der einen Effekt akzeptiert, muss beim Erstellen des SecondaryBuffer die Eigenschaft
ControlEffects auf True gesetzt werden.
|
|
|
Dim myDSoundBufferDesc As New BufferDescription
'ControlEffects Flag setzen
myDSoundBufferDesc.ControlEffects = True
'Sound laden
DSSecondaryBuffer = New SecondaryBuffer(Application.StartupPath & _
"\vbfun.wav", myDSoundBufferDesc, DSoundDevice)
|
|
|
Der Effekt selbst wird über die Methode SetEffects des SecondaryBuffer gesetzt und erwartet ein Array vom Typ
EffectDescription. Ein Effekt kann nur gesetzt werden, wenn der Sound nicht gerade spielt und das ControlEffects gesetzt
wurde.
|
Ein einfaches Beispiel für einen Chorus-Effekt:
|
|
|
Dim myEffectDescription As EffectDescription()
Dim myEffectsReturnValue As EffectsReturnValue()
ReDim myEffectDescription(0)
ReDim myEffectsReturnValue(0)
myEffectDescription(0).GuidEffectClass = _
DSoundHelper.StandardChorusGuid
myEffectsReturnValue = _
DSSecondaryBuffer.SetEffects(myEffectDescription)
|
|
|
Das sieht vielleicht verwirrend aus, ist es aber nicht. Der Datentyp EffectDescription besitzt die Eigenschaft
GuidEffectClass. Und in diese Eigenschaft könnt ihr die folgenden Standard-GUIDs der jeweiligen Effekte setzen (benützt
den DSoundHelper, der verfügt über eine Auflistung aller GUIDs).
|
|
|
DSoundHelper.StandardChorusGuid
DSoundHelper.StandardCompressorGuid
DSoundHelper.StandardDistortionGuid
DSoundHelper.StandardEchoGuid
DSoundHelper.StandardFlangerGuid
DSoundHelper.StandardGargleGuid
DSoundHelper.StandardParamEqGuid
DSoundHelper.StandardWavesReverbGuid
|
|
|
Die Methode SetEffects liefert für jeden Effekt der gesetzt werden soll einen Rückgabewert. Dieser Wert entspricht den folgenden
Konstanten:
|
|
EffectsReturnValue.Failed |
Der Effekt wurde nicht erstellt, da die Ressource nicht zur Verfügung steht. |
EffectsReturnValue.LocatedInHardware |
Der Effekt arbeitet in der Soundkarte. |
EffectsReturnValue.LocatedInSoftware |
Der Effekt arbeitet im Speicher. |
EffectsReturnValue.Present |
Der Effekt ist verfügbar, aber aus einem anderem Grund nicht erstellt. |
EffectsReturnValue.SendLoop |
Eine Endlosschleife beim Setzen der Effekte wurde festgestellt. |
EffectsReturnValue.Unallocated |
Der Effekt wurde noch nicht platziert. |
EffectsReturnValue.Unknown |
Der Effekt wurde nicht erstellt, da er dem System nicht bekannt ist. |
|
Ein Effekt kann mehrmals gesetzt werden.
|
Nun könnt ihr den Sound abspielen und euch der Effekte erfreuen.
|
|
|
Um diesen Tipp ausführen zu können, wird die DirectX 9 for Managed Code Runtime benötigt.
|
Dieses Beispiel funktioniert mit allen DirectX 9.0 SDK Versionen. Erstellt wurde es mit der folgenden Version:
|
Update DirectX 9.0 SDK (October 2005)
|
Pfad: C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.dll
Laufzeitversion: v1.1.4322
Assemblyversion: 1.0.2902.0
|
Pfad: C:\WINDOWS\Microsoft.NET\DirectX for Managed Code\1.0.2902.0\Microsoft.DirectX.Direct3D.dll
Laufzeitversion: v1.1.4322
Assemblyversion: 1.0.2902.0
|
|
Windows-Version |
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
|
Download (121
kB)
|
Downloads bisher: [ 259 ]
|
|
|