Downloads
Please tell me about any bugs that you find!
Current Version
Version 0.20 — 2019-09-21
Changes since the previous version:
- Fix how Doppler Factor is used
- This fixes the bad engine revving sounds in Drome Racers
- This also correctly constrains the amount of frequency change that can happen
as a result of Doppler calculations
- Fix buffer description copies for old versions of DirectSound
- IndirectSound had assumed that buffer descriptions were always the same size as DirectSound 7 or later
A list of all currently-known issues can be found here.
License
Copyright © 2012-2019 John-Paul Ownby
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Previous Versions
Version 0.19 — 2019-02-14 💝
Changes since the previous version:
- Accept GUID_NULL as a request for the primary device
- This fixes Oldunreal using FMOD
Version 0.18 — 2019-02-12
Changes since the previous version:
- Fix sound positions not updating when only the listener orientation changed
(e.g. in first person perspective when only moving the mouse
sounds might keep playing out of the same speakers until a movement key was pressed)
- This fixes a known issue with No One Lives Forever 2,
but would have affected any game with stationary sounds
- Fix behavior of play and write cursors at the end of a buffer
- These should always be a valid offset and wrap around to 0 immediately.
In past versions of IndirectSound they would instead be set to one past the last valid offset
and only wrap around when the buffer looped or stopped.
This would only be a problem for applications that relied on this behavior
and got unlucky and queried for the position at exactly the wrong time.
(The Bink player used in Red Faction could encounter this
when constantly querying the position.)
- Fix notifications that were close to the end of buffers
- This was discovered investigating playback problems in Elite Starfighter.
Unfortunately, it still has playback problems
because it uses software buffers and it appears that
Microsoft's current DirectSound has a similar bug.
Version 0.17 — 2018-07-08
Changes since the previous version:
- Fix side/rear channel assignment bug
- This fixes 3D audio on some games that use the Miles Sound System
(e.g. Duke Nukem Forever and Defense Grid 2)
that would only output stereo with some speaker configurations.
- Add Miles Sound System compatibility mode
- This enables 7.1 surround (and other speaker configurations)
on games that use a version of the Miles Sound System
that only supports 5.1 rear surround natively
- See the
milesCompatibility
setting in dsound.ini
for more information
- Add option to fade out sounds that the application stops while they are still playing
- This fixes the occasional glitches and pops in Silent Hill 2
- See the
earlyStopFadeOutTime
setting in dsound.ini
for more information
- Improve handling of FPU exceptions
- This restores the FPU stack in Little Big Adventure 2
to the same state it was in before calls to DirectSound
- Although this is a theoretical improvement
to the implementation in version 0.16
there are no known audible differences
Version 0.16 — 2018-03-14 🥧
Changes since the previous version:
- Fix stereo panning bugs
- This fixes popping with footsteps in Little Big Adventure 2
- In addition to bugs that were fixed
the behavior of a 3D voice with a stereo source is improved.
In previous versions the stereo panning algorithm
was based on theoretical Windows drivers behavior
but didn't accurately reflect how Sound Blaster hardware worked.
- Fix some FPU stack overflow exceptions for older games with assembly instructions
that left the FPU in an unexpected state
- This fixes all sound cutting out when using the jet pack in Little Big Adventure 2
- Fix 3D software algorithm assignment for games using DirectSound versions older than 7
- Only print error about unavailable "FX" once
- This prevents the
dsound.log
file from becoming huge
when playing The Suffering: Ties That Bind
Version 0.15 — 2018-01-30
Changes since the previous version:
- Emulate the way that Sound Blasters decide
what volume to play a 3D sound at in different speakers
- In previous versions this was mostly done using X3DAudio,
a Microsoft library associated with XAudio2.
This provided a good match for how DirectSound works
on modern Windows operating systems,
but there were several important differences
from actual Sound Blaster hardware.
- This new version of IndirectSound completely removes X3DAudio,
and implements all 3D positioning functionality with custom code.
I have tried to emulate how a Sound Blaster actually behaves
(by testing and measuring my own Sound Blaster in Windows XP),
although there are several behaviors that can be tweaked.
- The most important changes are:
- Improved surround panning
- This determines how a sound moves from one speaker to another
- The new implementation should make these transitions less noticeable
- Speaker configuration
- IndirectSound can now be configured to match the locations
of your actual physical speakers
- This improves the accuracy of the 3D positioning effect
- Normalization when a sound is close to the listener
- Many games position sounds very close to the listener
but slightly to one side or behind.
In previous versions of IndirectSound this was very distracting,
leading to things like footsteps always being in the left speaker
or gunshots sounding like they were behind you.
- This new implementation "normalizes" the sound in all speakers
when it gets too close
- Elevation changes
- Sound Blaster hardware starts playing a sound in all speakers
as it gets higher or lower above the horizontal plane
- This new implementation emulates this effect
- Add the ability to globally configure IndirectSound
- In addition to the local
dsound.ini
file
which must be located in a specific game directory
IndirectSound now supports a global configuration file
which will affect its behavior in all games
- This can be used as a way to set standard preferences,
but a local
dsound.ini
can still be used to
override your global preferences for a specific game
- (A global configuration file is particularly convenient
for specifying your physical speaker configuration)
- Add support for 2D buffers with more than two channels
- This fixes an error in Max Payne 2
- Fix an infinite loop bug with buffer notifications
- This bug caused Grand Theft Autio IV to become non-responsive on startup
Version 0.14 — 2017-12-17
Changes since the previous version:
- Fix Doppler effect when a non-default distance factor was set
- This fixes the incorrect frequencies of sounds in Drakan
- Use Microsoft's COM object when IID {2A8AF120-E9DE-4132-AAA5-4BDDA5F325B8} is queried
- This can at least partially fix DirectMusic in some games,
but it may also cause problems of its own
(in No One Lives Forever 2, for example,
this changes restores missing music
but there can still be crashes inside DirectMusic
which may or may not be related)
- DirectMusic's
IDirectMusicPerformance8::CreateAudioPath()
can call DirectSound and query it for an undocumented IID.
IndirectSound will now recognize this IID,
pass it on directly to Microsoft's official DirectSound,
and return the resulting COM object to the application.
This means, however, that DirectMusic is using a pure DirectSound COM object
that is not controlled by IndirectSound in any way
(specifically, the COM object that DirectMusic has
does not support hardware acceleration).
- Explicitly use the
dsound.dll
directory for dsound.ini
and dsound.log
- In previous versions IndirectSound would always use the current working directory
(i.e. it would only use the file names themselves).
Now it explicitly uses the directory where
dsound.dll
is located.
- This makes all applications behave consistently even if they change the current working directory
(e.g. the Drakan level editor)
Version 0.13 — 2017-08-27
Changes since the previous version:
- Disable emulated EAX support by default
- It works the same as it always has, but it now must be explicitly enabled with a
dsound.ini
file
- Fix DLL dependency bug with GetDeviceID()
- This would cause some games (e.g. Halo and possibly Guild Wars) to not start
- Add configurable maxFrequencyRatio setting
- This value has always existed (and been 2), but has not been configurable.
Some games (e.g. racing games), however, set a higher frequency
- IndirectSound will now output a message in the
dsound.log
file
if an application sets a frequency above the maximum value,
and maxFrequencyRatio can then be adjusted accordingly in the dsound.ini
file.
- Clarify errors that are the application's fault
- Fix rare bug with Doppler shift
Version 0.12 — 2014-12-12
Changes since the previous version:
- Fix terrible performance in Mafia
- This will help any game that creates large numbers of deferred buffers
- Fix deferred and default-location buffer duplication
- Fix how EAX settings interact with each other
dsound.log
also now outputs whether a game actually uses EAX 1.0 or 2.0
- Minor fixes to voice management
Version 0.11 — 2014-10-25
Changes since the previous version:
- Fix crash when a WAVE_FORMAT_PCM format has bogus cbSize data
- Fix crash when a software 3D buffer was duplicated
- Fix notification positions
- This was causing no audio to play in Mafia
- Minor improvements to log file
Version 0.10 — 2014-02-09
Changes since the previous version:
- Fix crash when a buffer is manually stopped at the same time it finishes playing
- Fix crash when a buffer's data was deleted while still being queued in XAudio2
- Provide alternate modes for 3D sounds with disabled processing
- This provides different behavior for when DS3DMODE_DISABLE is set
- The default behavior hasn't changed from the previous version:
Sounds play the same as they would if they were 2D.
This matches Creative's implementation.
- Look in
dsound.ini
under disabled3dBehavior
for more details
- Fix looping buffers that are smaller than the number of bytes
the XAudio2 thread needs to avoid starvation
- This vastly improves choppy playback on extremely short buffers
- Fix the appropriate volume matrix not being set on duplicated buffers
Version 0.9 — 2014-01-24
Changes since the previous version:
- Provide alternate modes for mono sources played in 2D
- The new default plays them in the front center speakers to match Microsoft's implementation
- An alternate mode plays them in the front left/right speakers to match Creative's implementation
- Look in
dsound.ini
under monoSourceBehavior
for more details
- Fix duplication when buffer is playing
- This fixes positional audio in BloodRayne (it wouldn't play at all before)
- Emulate when an application writes to a software buffer outside of the valid lock
- This change can make software buffers play as intended in some applications
- It is illegal for an application to write outside of a valid lock,
but doing so could work depending on how specific audio hardware used system memory
(it would probably not work on older hardware with on-card memory)
- IndirectSound's behavior for software and emulated hardware buffers is now consistent
- Fix static on some sounds
- This was caused by some games setting a misaligned offset
- IndirectSound now aligns invalid values the same as DirectSound does
- Fix setting frequency on sounds with DS3DMODE_DISABLE set
- This fixes menu sounds in BloodRayne that only played once
Version 0.8 — 2013-08-23
Changes since the previous version:
- Fix bad framerate when sampling rates were changed
- This caused F.E.A.R. to suffer when entering or exiting slow motion
- Emulate fake EAX support
- This isn't EAX emulation; rather, IndirectSound pretends that EAX is supported
- This restores 3D positional sound in games that rely on EAX support being present for any positional audio (e.g. Deus Ex)
Version 0.7 — 2013-07-29
Changes since the previous version:
- Fix crash when exiting Deus Ex
- Fix panning
- Even works properly for 3D emitters with stereo sources
- Fix 3D emitters when 3D processing is disabled
- Enable recovery from XAudio2 critical errors
- Applications often don't recover from the corresponding DirectSound errors,
but at least IndirectSound is now as robust as I can think to make it
Version 0.6 — 2013-07-26
Changes since the previous version:
- Fix rolloff calculations
- Fix deferred 3D parameters in software buffers
- Improve changing buffer sample rates
Version 0.5 — 2013-07-24
Changes since the previous version:
- Fix crash caused by hardware voice resource mismanagement
- Fix crash when the application released the device without first releasing all buffers
Version 0.4 — 2013-07-24
Changes since the previous version:
- Add Mhook to ensure IndirectSound's interfaces are used on all machines
Version 0.3 — 2013-07-23
Changes since the previous version:
- Voice management
- Position notifications
- Panning mono sources
Version 0.2 — 2013-07-17
This is the initial public release of IndirectSound.
🇺🇦 Slava Ukraini! 🇺🇦
Copyright © 2012-2019 John-Paul Ownby
[email protected]
Return Home