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.
Hinweis
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 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 20. Januar 2012