Prevents SPDIF/HDMI/Bluetooth digital audio playback devices from sleeping. Uses WASAPI, requires Windows 7+. It doesn't have GUI and starts to do its job right after the program is started. To make it autorun, copy the soundkeeper.exe into the startup directory that you can access by pressing Win+R and entering shell:startup. To close the program, run the soundkeeper.exe kill command or just kill its process.
Download: soundkeeper.7z (90KB). Source code →
The archive contains a few builds (you can remove unused ones):
- SoundKeeper64.exe is for x86-64 versions of Windows, most people need this version.
- SoundKeeper32.exe is for x86-32 versions of Windows, if you have a very old PC with 32-bit Windows.
- SoundKeeperARM64.exe is a native ARM64 build, if you have a new ARM based PC.
There is also a debug version that outputs all debug logs into a console window. Please provide the logs when you report issues.
Features
- Sound Keeper is fully automatic and doesn't require any user interaction.
- Supports keeping on multiple sound outputs (e.g. an SPDIF and an HDMI).
- Detects new sound outputs on the fly (e.g. when you connected a TV via HDMI).
- Supports various stream types that should help in all possible cases.
Settings
Default behavior can be changed by changing file name of the Sound Keeper executable (just add desired settings to the Sound Keeper file name) or by passing them as command line arguments. All settings are case insensitive.
Primary audio output is used by default. If current primary audio output has changed, the Sound Keeper detects this and switches to the new output automatically. If you want to run Sound Keeper on all enabled audio outputs, just add All to executable file name to enable Sound Keeper on all outputs.
All supported audio output type modes:
- Primary keeps on primary audio output only. It is used by default.
- All keeps on all enabled audio outputs.
- Digital keeps on all enabled SPDIF and HDMI audio outputs (like it was in Sound Keeper v1.0).
- Analog keeps on all enabled audio outputs except SPDIF and HDMI.
Inaudible stream of zeroes with infrequent smallest possible non-zero samples (fluctuations) is used by default. Add Zero to executable file name to use stream of zeroes only.
All supported stream types:
- OpenOnly opens audio output, but doesn't stream anything. Sometimes it helps if it's a driver only issue.
- Zero plays stream of zeroes. It may be not enough for some hardware.
- Fluctuate plays stream of zeroes with the smallest non-zero samples once in a second. Used by default.
- Sine plays 1Hz sine wave at 1% volume. The frequency and amplitude can be changed. Useful for analog outputs.
- White, Brown, or Pink play named noise, with the same parameters as the sine (except frequency).
If the default inaudible stream doesn't help, try the new Sine stream type. It generates a sine wave, and can be customized. There are two parameters: F (frequency) and A (amplitude). The value goes right after the parameter character. For example, add SineF10A5 to executable file name to generate 10Hz sine wave with 5% amplitude. Low frequencies (below 20Hz) and high frequencies (above 20000Hz) with low amplitude (up to 10%) are inaudible.
Stream parameters:
- F is frequency. Default: 1Hz for Sine and 50Hz for Fluctuate. Applicable for: Fluctuate, Sine.
- A is amplitude (i.e. volume). Default: 1%. If you want to use inaudible noise, set it to 0.1%. Applicable for: Sine, Noise.
- L is length of sound (in seconds). Default: infinite.
- W is waiting time between sounds if L is set. Use to enable periodic sound.
- T is transition or fading time. Default: 0.1 second. Applicable for: Sine, Noise.
Examples:
- SoundKeeperAll.exe generates default inaudible stream on all enabled audio outputs.
- SoundKeeperZero.exe generates zero stream on primary audio output.
- SoundKeeperAllZero.exe generates zero amplitude stream on all enabled audio outputs.
- SoundKeeperSineF10A5.exe generates 10Hz sine wave with 5% amplitude on primary audio output. It is inaudible.
- SoundKeeperSineF1000A100.exe generates 1000Hz sine wave with 100% amplitude. It is audible! Use it for testing.
- SoundKeeper.exe sine -f 1000 -a 100 is command line version of the previous example.
- SoundKeeper.exe brown -a 0.1 generates brown noise with 0.1% amplitude.
What's new in v1.3.4
- Tune the Windows 8-10 WASAPI memory leak workaround to make it working for longer time.
- Native ARM64 build (with statically linked runtime hence the bigger binary).
- [2024/11/12] Added digital signature.
What's new in v1.3.3
- Fixed arguments parsing bug: All or Analog after specifying stream type led to amplitude set to 0.
What's new in v1.3.2
- Fluctuate treats 32-bit PCM output format as 24-bit since WASAPI reports 24-bit as 32-bit for some reason.
- Fluctuate generates 50 fluctuations per second by default. It helps in many more cases.
- Sound Keeper doesn't exit when it is muted.
What's new in v1.3.1
- A potential deadlock when audio devices are being added or removed has been fixed.
- Fluctuate treats non-PCM output formats (like Dolby Atmos) as 24-bit instead of 16-bit.
- Frequency parameter F is limited by half of current sample rate to avoid generation of unexpected noise.
- More detailed logs in debug build. Debug output is flushed immediately, so it can be redirected to a file.
What's new in v1.3.0
- Fluctuate is 1 fluctuation per second by default. Frequency can be changed using the F parameter.
- Periodic playing of a sound (parameters L and W) with optional fading (parameter T).
- New White, Brown, and Pink noise signal types.
- Self kill command is added. Run soundkeeper kill to stop running Sound Keeper instance.
- Analog switch was added. It works as the opposite of Digital.
- Ignores remote desktop audio device (this feature can be disabled using the Remote switch).
- New OpenOnly mode that just opens audio output, but doesn't stream anything.
- New NoSleep switch which disables PC sleep detection (Windows 7-10).
- Work as a dummy when no suitable devices found.
- Sound Keeper shouldn't prevent PC from automatic going into sleep mode on Windows 10.
- The program is not confused anymore when PC auto sleep is disabled on Windows 10.
- The workaround that allowed PC to auto sleep had to be disabled on Windows 11.
Sound Keeper vs. SPDIF Keep Alive vs. SPDIF-KA
Sound Keeper v1.3 | SPDIF Keep Alive v1.2 | SPDIF-KA v1.4 | |
Fully automatic: | Yes | No | No |
Multiple outputs: | Yes | No | No |
Stream types: | 7 | 2 | 2 |
Periodicity: | Yes | No | No |
GUI: | No | Yes | Yes |
Requires .NET: | No | Yes | Yes |
Executable size: | 20KB | 668KB | 163KB |
CPU usage (on Intel Core i5 4460): | 0.004% | 0.06% | 0.06% |
RAM usage (Private Working Set): | 1636KB | 13704KB | 10600KB |
Known issue: streaming audio prevents automatic sleep mode
When a program streams any audio (even silence), the system doesn't go into sleep mode automatically after specified time of inactivity. Sound Keeper uses the NtPowerInformation(SystemPowerInformation, ...) function to retrieve time when system is going to sleep, and disables itself right before this time. On Windows 7, it works perfectly. Windows 10 waits for 2 minutes more after any sound was streamed, so the PC goes into sleep mode after 2 minutes when Sound Keeper disabled itself. For some reason, Windows 11 always reports that the system is going to sleep in 0 seconds. So, the workaround had to be disabled on this OS until a better solution is found. You can try to use the powercfg to workaround this issue at the system level. Details →
The program is very good, but there is one problem. It prevents windows from automatically standing by. My computer cannot go into hibernation. It would be nice if it was fixed.
Kevin, it's a known issue and it's even documented right on this page, with potential workarounds provided here. Windows doesn't go into sleep mode automatically when an audio device is being used, it's a default behavior, there is no known way to bypass it without drawbacks, so you have to choose a workaround that is suitable for you.
This issue is related to the automatic sleep only. If you manually hibernate or sleep your computer, the Sound Keeper shouldn't prevent it.
Well it seems that the only thing that worked was to disable Exclusive Mode in Windows sound panel. (maybe I was supposed to do that from the beginning, sorry if that's the case and I'm just a bit slow. ^^)
Sorry, me again. Actually I'll have to let the Exclusive mode on, otherwise I won't have the proper soundtracks for the movies mixed with DTS-X or Dolby Atmos. Back to square one, I guess. :/
To fix this issue, I need more debugging info. Could you please follow the instructions that I provided on the previous page?
Hi, sorry for the delay, I finally tried the debug mode, and this is what happened:
I should have been more specific: That was what happened when I ran the Soundkeeper debug mode, then launched a movie on VLC, then closed VLC after a few seconds. Hope that helps!
This debug log looks OK, and it seems like the program proceeded to work properly. You told before that only the release version was crashing. This is why I was asking here for a crash dump and a Process Monitor log recorded with the latest release version.
OK, here's the link at last. I'm not really tech-saavy, so I hope I did things properly:
https://drive.google.com/file/d/1BlOHYjSB8dfJbj9NMCoxxqSXd7KuFfhZ/view?usp=sharing
Gaël, according to the log, the program didn't crash after VLC was used. It probably just stuck if the program didn't do what is expected.
I noticed in the path that it says soundkeeper_v1.1.0 that looks more like v1.1.0 than v1.3.3 =) Please don't use that old version. You need to use the latest v1.3.3 that has a few such bugs fixed.
I never bothered renaming the Soundkeeper folder where I drag and drop the new versions, but I'm definitely using v1.3.3 :)
The thing is, if, for instance, I exit VLC and try to watch a non-exclusive video like Youtube or Twitter, I'll hear the little "poc" and miss the 1st second of the audio. I have to manually restart Soundkeeper in order for this problem to be fixed, until the next use of VLC, where the problem will happen again.
OK, let's try to make a dump of this process that apparently stuck for some reason. Reproduce the issue and then make a dump of the Sound Keeper process (run Task Manager via Ctrl+Shift+Esc, right click on the SoundKeeper process, click Create dump file) and share it. It will be visible from the dump where the program stuck.
There it is : https://drive.google.com/file/d/1xlEfo5-_P3VrW0iDTrftwKZAyXELO9Kj/view?usp=sharing
(and I'm sorry to be flooding the comments section, btw)
Hello!!! Thank you for creating this! I recently purchased an SMSL 300SE..Have two pops when a song starts, two a few after it ends...Your program works only when playing 44.1khz, not high res...is there an adjustment? And every time i restart my pc or the soundcard do I have to run your program again? Seems so..Cheers mate Thank you
Gaël, thanks, I'll look into it later when I have more free time.
Chris, it should work with high sample rates too. Maybe you are talking about exclusive mode? When an audio output is used in exclusive mode, the Sound Keeper can't use it at the same time obvioulsy.
To make it automatically starting with your Windows, copy the program into the Startup directory as it is written in the Readme file and on this page.
Gaël,
TL;DR: upgrading your OS to Windows 11 should help.
The issue is in the workaround for a Windows 10 specific issue (when any program tries to open an audio device that is already used in exclusive mode, Windows Audio Service leaks significant amount of memory). The workaround doesn't work for you as expected, I'll think what to do with this. Meanwhile, you could consider upgrading your OS to Windows 11 where the original memory leak issue is apparently fixed and the workaround is not used.
I reported that bug to Microsoft a few years before before Windows 11 release. They fixed it, but for some reason in Windows 11 only. I expected that the bugfix would be delivered with Windows 10 updates to Windows 10, but it didn't happen. Apparently, somebody at Microsoft thinks that a memory leak is not critical enough to port the fix to Windows 10.
Thank you for taking the time to look into it, but infortunately my computer is not W11 compatible. Oh well. :/
Thanks anyway, and keep up the good work!
Gaël, you can use Rufus to make it "compatible". It's not officially compatible, but it is actually compatible with almost anything that is supported by Windows 10 =)
Anyway, I'll look for a better workaround for the Windows 10 issue later, maybe I'll come up with something.
Thank you so much for this program, for years I had massive crackling sound/robot death-screech problems with my Denon Receiver, 4090 and LG CX - your program solved all that. Finally I can enjoy Dolby Atmos. Microsoft, Denon and NVIDIA all tried to lay blame on each other over the years... and apparently its a simple Software fix in Windows.
Well, thank you.
Gaël, I updated the latest beta to make it trying the workaround for longer, maybe it helps a bit.
Thanx Veg!
I can definitely hear a double "pop" now when I stop an exclusive video on VLC, meaning that Sound Keeper restarts itself automatically.
So this definitely does the trick, thank you ! :D
Does this work for DAC/AMPS that are using usb input. (DAC-X6)?
It should work. You always can try =)
is there anything else to it other than running it? I downloaded, unzipped and ran the program (SOUNDKEEPER64) but nothing changed. Still getting pops. Either way if it doesn't work you're an OG for still supporting this and responding so fast. I will figure this out one way or another
Try different modes that are described on this page, e.g. SineF1A5 or SineF10A5.
Holy crap it worked. VEG you're a gangster.
Also check if SineF1A1 works for you and tell the results here in the comments, so other users with the same hardware would know what they could use.
Confirmed SineF1A1 works!
Just the app I was looking for!
While using this app, a small suggestion came to mind, if this makes any sense.
It's regarding the previously mentioned "windows audio device graph isolation's excessive cpu utilization"
I'm on Win11 and have a dolby atmos soundbar hooked up via HDMI. Also have dolby atmos for home theater selected in the audio control panel.
(disabling dolby atmos solves the utilization problem, but what's the point in having it then right XD)
With soundkeeper running, or whenever the system plays a non-dolby atmos stream, like a youtube video or mp3 audio, windows audio device graph isolation percentage spikes(up to 20% on my N100 base htpc).
However, strangely, the utilization drops significantly when a dolby atmos or dolby digital stream is played.
(Bitstreamed in kmplayer. I'm not sure if this depicts an absolute utilization since percentage is relative, anyway)
So I was thinking, if soundkeeper could generate an inaudible bit stream, could it prevent the percentage spike?
I'm not at all knowledgable on this subject, just an observation I had while trying to troubleshoot on my own. Thanks for a great app!
Hyun,
Most probably it's because when you use Dolby Atmos, your software uses exclusive mode that disables processing of the audio.
You can try to disable all the processing for this audio output that is used in shared mode (it's when a few programs can produce sounds simultaneously). If there is nothing to disable, it might be just your system mixer that is activated whenever two or more audio streams are played simultaneously (e.g. Sound Keeper's inaudible stream and Youtube). It is not that CPU expensive to consume so much of your CPU though, so I think it does some additional processing when you use your audio device in shared mode.
VEG,
You're right, I checked and they are in exclusive mode. I guess it's just how it works then. I also noticed on my other pc with a 5800x3d its percentage is negligible (0~1%). Didn't realize difference in cpu performance was that big until now.
Anyway, soundkeeper stays on. Thanks for your work!!
This program completely solves the popping on my Surface Laptop Studio 2 when a notification comes in or something starts playing at first. It was driving me nuts and had no idea it was a Windows issue! Does anyone know if running this on a laptop has any impact on battery life. I was able to do the powercfg workaround to get sleep working.
Thanks!
David,
Any running app has some impact, but in case of Sound Keeper it should be negligible.
I have connected Marshal Middleton with aux. 1.3.3 version dont disable sleep mode
Пожалуйста помоги, на хабре писать не могу, старый топчик
Oleg, try non-default modes, e.g. SineF10A5 or others, something should help. Also, the newest periodicity settings could be useful if your speaker goes into sleep mode with a huge delay. All these settings are documented on this page or in the readme file.
It seems like SoundKeeper doesn't prevent machines that support Modern Standby from automatically sleeping. VEG, do you know if this is indeed the case or if I'm misinterpreting something.
David, I don't know.
I checked in Event Viewer. After letting the sleep timer go it does say entering Modern Standby and putting my ear to the bottom of my laptop and pressing a key I can hear the fans ramp up and then Event Viewer says exiting Modern Standby. It seems like on newer devices sleep just works!
Windows prevented automatic sleep when audio device is being used since Vista. Maybe Microsoft updated default behavior. I'm still on Windows 10 and didn't test Windows 11 much.
I frequently play music on my laptop in Roon, and if I let the music play and walk away the screen will shut off and the workstation will lock but the music will still play.
When this happens an event viewer log showing the machine has entered modern standby appears. It may only happen on newer hardware that supports modern standby and not traditional sleep.
Although I haven't gotten it to work for me yet, let me say thanks for the work on this project. As a suggestion, could help others if there was a database or wiki of some sort that the users could contribute to as to what options worked for them.
GregMo,
If standard mode doesn't help, you can try something like SineF5A1 or SineF10A5, it usually helps.
I tried it on my pc . It kind of doesn't work, and my soundbar still goes to sleep and have to manually turn on the bar with remote/button on the bar itself.
Edifier B700 on Optical connection.
Please help.
Stuart Lee,
If standard mode doesn't help, you can try something like SineF5A1 or SineF10A5, it usually helps. Just append it to the SoundKeeper.exe file name and start it again. It is documented on this page.
Hi, Thanks for your reply~
I tried all of the ' examples '... listed above. After 20 minutes, the soundbar still turns off.
Do i need to add ' L ' and ' W ' ?
Windows volume is a 100%, Soundbar volume is at 20% ( max is 30% )
I tried the brown, pink , and white, i did it hear make noise but the bar still goes to sleep/off.
According to the Spec Sheet of Edifier B700, the Frequency Response is 45Hz - 20kHz, could it be that i need to append 'SineF45A1' to the file name?
I not very sure how and what to append to the file name...
Stuart Lee,
This is something new. So even audible sound doesn't prevent it from sleeping? Can you try an audible sine, e.g. SineF1000A10. It will generate an annoying sound, but we need to test it to understand if anything actually can prevent your soundbar from sleeping, and start from there. If SineF1000A10 helps, try to lower frequency (F) and amplitude (A) until you find the lowest value that still works for your soundbar. When you find this value, you may add L and W parameters to make sure that a short low frequency sound is generated e.g. once in 19 minutes so your sound bar won't go into sleep mode in 20 minutes.
If you want to understand how L and W parameters work, you can experiment with them when some clearly audible signal is used. For example, SineF1000A10L1W10 will make a 1000Hz sine sound with 10% amplitude for 1 second, and then it will 10 seconds before making another 1-second sound.
SoundKeeperSineF1000A0.1L1W10
Currently i go with that file name, Did i do it right?
I put my soundbar at MAX ( 30 ) volume, and i hear it make a ' beep ' sound like every 10 seconds.
I will see if it stays awake.
Changing the value of 10hz to 1000hz changes how the Sine make sound... How low and high does this Sine can go?
oh yes, can i do it this way? ' SoundKeeperbrownA0.1L1W10 ' on the file name?
Stuart Lee,
Frequency can be any value from 1Hz up to 24000Hz.
Yeah, looks OK. You can check with debug version how these parameters are parsed. Also, you probably need a bigger delay time between sounds. If you replace W10 to W900, it will make a short sound once in 15 minutes (900 seconds).