Программа предотвращает засыпание цифровых аудиовыходов SPDIF и HDMI при отсутствии сигнала, и таким образом решает проблему обрезки начала звука при начале воспроизведения, которая вызвана тем, что звуковому тракту требуется небольшое время на пробуждение. Если у вас нет такой проблемы — значит драйвер аудиокарты не отправляет аудиотракт в сон при остановке воспроизведения. Если же проблема имеет место — Sound Keeper решит проблему непрерывным воспроизведением тишины.
Скачать: soundkeeper.7z (17КБ). Исходный код →
Особенности
Sound Keeper работает через WASAPI на Windows 7 и новее. Программа написана на C++, без использования тяжёлых фреймворков вроде .NET, поэтому она очень легковесна и расходует минимум памяти.
Sound Keeper внешне никак себя не проявляет и работает полностью автоматически: находит все цифровые выходы (SPDIF или HDMI) и предотвращает их засыпание. Если во время работы программы появится новый цифровой выход (например, если вы подключили компьютер по HDMI к телевизору) — это будет корректно обработано, перезапуск программы не требуется. Для отключения Sound Keeper вы должны либо выключить звук в микшере для этой программы (после чего Sound Keeper автоматически закроется), либо просто убить процесс soundkeeper.exe. Для автоматической загрузки программы вместе с системой просто скопируйте исполняемый файл soundkeeper.exe в каталог Автозагрузка (чтобы открыть его, нажмите Win+R, введите "shell:startup" и нажмите Enter).
Настройки
- Поведение по умолчанию может быть изменено добавлением опций к имени исполняемого файла.
- По умолчанию используется основной аудио выход. Добавьте "All" к имени исполняемого файла программы для включения Sound Keeper на всех аудио выходах.
- По умолчанию используется неслышимый сигнал. Добавьте "Zero" к имени исполняемого файла чтобы использовать поток нулей в качестве сигнала (как это было в Sound Keeper v1.0).
Если режим по умолчанию не помогает, попробуйте новый тип потока "Sine". Он генерирует синусоиду, и может быть настроен. Имеется два параметра: F (частота) и A (амплитуда). Значение параметра идёт сразу за символом параметра. Например, добавьте "SineF10A5" к имени исполняемого файла для генерации синусоиды 10Hz с амплитудой 5%. Низкие частоты (ниже 20Hz) и высокие частоты (выше 20000Hz) с низкой амплитудой (до 10%) являются неслышимыми.
Sound Keeper vs. SPDIF Keep Alive vs. SPDIF-KA
Sound Keeper v1.0 | SPDIF Keep Alive v1.2 | SPDIF-KA v1.4 | |
Полный автомат: | Да | Нет | Нет |
Поддержка нескольких выходов: | Да | Нет | Нет |
Графический интерфейс: | Нет | Есть | Есть |
Требует .NET: | Нет | Требует | Требует |
Объём EXE-файла: | 17КБ | 668КБ | 163КБ |
Расход CPU (на Intel Core i5 4460): | 0.004% | 0.06% | 0.06% |
Расход RAM (Private Working Set): | 1636КБ | 13704КБ | 10600КБ |
Спасибо за ответ. Сначала искал командные аргументы, оказалось все куда проще, чеерез имя файла.
Поигрался с настройкой, оказалось что слышу независимо от частоты.
Видимо какой то гремлин в Windows, ибо на громкость этого звука влияет именно громкость в микшере для SoundKeeper
Алексей, странно. Loudness Equalization в настройках аудиовыхода выключен? Оно должно быть на вкладке Enhancements (Улучшения) в свойствах аудиовыхода.
VEG, вкладки Enhancements вообще нет для этого устройства, проверил по вашему совету раньше.
Алексей, а в режиме Zero проблема тоже проявляется?
VEG, в случае с Zero к сожалению SoundKeeper перестает "работать". Звуковое устройство засыпает, и появляются тихие щелчки при старте/остановке звука в приложениях. Собственно то, что я им и решаю :)
Здравствуйте!
Объясните пожалуйста как сделать, чтобы Sound Keeper не мешал уходить ПК на Windows 10 в сон? Пробовал разные комбинации в переименовывании exe файла. Никак не решить проблему. Если Sound Keeper запущен, то ПК в сон не уходит.
Sound Keeper 123, убедитесь, что у вас последняя версия Sound Keeper. На Windows 10 в сон должно уходить нормально.
Причина в том, что Windows отключает автоматический переход в режим сна, когда любая программа воспроизводит какой-то звук (даже если это тишина). Для Windows 7-10 нашёлся способ это обойти, но он не работает в Windows 11 (так как там сломана функция, которая сообщает, сколько осталось до сна). Если у вас Windows 10, то на последней версии Sound Keeper v1.2 автоматический переход в режим сна должен работать.
Windows 10 Домашняя x64 21H2
Sound Keeper 1.2.1
Порядок действий:
Скачиваю Sound Keeper. Переименовываю SoundKeeper64.exe в DigitalSoundKeeper64.exe (требуется чтобы не засыпал SPDIF).
Добавляю ярлык в автозагрузку через run -> shell:startup
Как я не пробовал... Не уходит в сон ПК.
Список запущенных процессов:
Забыл добавить, что я пробовал убивать не важные для системы процессы один за одним. Думал исключением получится вычислить какой процесс может мешать, но безуспешно.
Нет указания на какой-то процесс. Только на устройство.
Судя по выводу powercfg -requests, система не уходит в сон именно из-за вывода звука. Если это только Sound Keeper, то он должен автоматически выключиться, когда таймер до выхода в сон приблизился к нулю. Если же какие-то другие программы кроме Sound Keeper выводят звук, то компьютер всё равно не уйдёт в сон.
Доработал вывод отладочной информации относительно оставшегося время до сна. Можете собрать самостоятельно или использовать этот отладочный билд, который выводит на экран отладочную информацию. Запустите, подождите минут пять, в норме, когда вы ничего не делаете (нельзя даже мышкой водить), где-то раз в минуту должно выводить сколько времени осталось до сна, и это число должно уменьшаться. После теста отправьте сюда копию вывода.
После отсчета система не ушла в сон, а перезапустила таймер с 4294967266 секунд. Я не знаю связано это как-то или нет, но может быть дело в том, что на последних чипсетах Intel (500 и 600 серии) встроенный звук материнской платы сидит на USB линиях чипсета и это как-то конфликтует с Sound Keeper. Я честно не знаю какой еще процесс может мешать Sound Keeper. Я даже Realtek Audio Universal Service и DTS в службы отключал.
Вот что выдала отладочная версия:
Список процессов:
Попробовал оставить из задействованных устройств только аудио выход монитора (Display Port). Все остальные устройства отключил. Тоже не уходит в сон. Значит все таки какой-то процесс.
Огромные числа в секундах — это -30 и -60 секунд, прочитанные как положительные числа (из-за особенностей представления отрицательных чисел в памяти). Это сюрприз, что таймер может зайти в минус. Подправлю код, чтобы учитывать это.
Тем не менее, судя по этому участку, Sound Keeper отключался на почти 30 секунд, и в это время система должна была уйти в сон. Но по-видимому почему-то не ушла. Вы пробовали проверять, работает ли автоматический переход в режим сна без Sound Keeper?
Да. Без Sound Keeper система автоматически уходит в сон без проблем.
Я разрабатывал и тестировал Sound Keeper на Windows 7. Там система уходит в сон как только таймер до сна доходит до 0 и нет предотвращающих сон факторов. Потестировал сейчас как оно работает на Windows 10. Оказалось, что поведение изменилось. Во-первых, таймер до сна почему-то сбрасывается после первых 5 минут бездействия (не выяснил виновника, возможно, так на чистой системе тоже). Во-вторых, при достижении 0 он идёт в минус, если есть активные аудио-сессии, плюс ещё 2 минуты после закрытия последней аудио-сессии. То есть, если установлен уход в сон через 10 минут неактивности, из-за всех этих факторов система уйдёт в сон через 17 минут. Вместо 60 минут, по-видимому, получится 67 минут, и т.д.
Обучил Sound Keeper понимать отрицательные значения таймера, и обновил отладочный билд. Проверьте как оно работает у вас. Для отслеживания как меняется состояние powercfg /requests можно воспользоваться следующим bat-файлом, который нужно запускать с правами администратора:
При тестировании имейте в виду, что даже обычный браузер может предотвращать уход в сон. Например, у меня просто запущенный Firefox удерживает аудио-сессию открытой и предотвращает сон. Судя по сообщениям в интернете, в Chrome может быть тоже самое, в зависимости от открытых сайтов (например, YouTube).
Так-с. Что-то нащупали. Поставил сон через 1 минуту, чтобы проверить. Прошла минута, потом еще где-то полторы и система уснула.
Попробуйте новую отладочную или бета-версию. Добавил больше отладочной инфы; обучил Sound Keeper более разумно реагировать на случай, когда нет ни одного доступного аудио-устройства вывода; оптимизировал код, обрабатывающий появление или исчезновение аудио-устройств; поднял версию до 1.2.2; добавил в ReadMe.txt информацию, как можно попробовать разрешить системе уходить в сон даже с активными аудио-сессиями.
Скачал бета-версию. Запустил, система уснула, но после пробуждения слышу характерные щелчки на SPDIF выходе. Открыл диспетчер задач и выяснилось, что Sound Keeper нет среди процессов. Стал смотреть журнал событий и там видно, что Sound Keeper был сбой.
Проверил несколько раз. Сценарий повторяется.
Из журнала событий:
Из монитора стабильности:
Обновленная отладочная версия продолжает работу после выхода из сна.
Действительно, в новом коде ошибку допустил. Спасибо за информацию. Исправлено. Обновил отладочную и бета версии.
Сбой вызван переименовыванием исполняемого файла.
Сбой происходит на обеих версиях если переименовать исполняемые файлы.
Если переименовать отладочную версию из SoundKeeper64d.exe в DigitalSoundKeeper64.exe, то она тоже сбоит.
Если бета-версию переименовать обратно из DigitalSoundKeeper64.exe в SoundKeeper64.exe, то соответственно и сбоев нет.
В обновлённой версии тоже сбоит? Кажется, по смещению ошибки 0x00000000000029c4 из журнала событий не хватало именно той проверки что я только что добавил.
Обновленную сейчас буду проверять.
И бета, и отладочная версии пережили пробуждение будучи переименованными в DigitalSoundKeeper64.exe
Сбоев не было. Я еще бету погоняю. Если что, то сразу отпишусь. Спасибо.
Отлично! Если больше проблем не будет найдено, выпущу релиз со свежими изменениями.
Sound Keeper v1.2.2