Sound Keeper v1.3.3 [2023/08/19]

Программа предотвращает засыпание цифровых аудиовыходов SPDIF и HDMI при отсутствии сигнала, и таким образом решает проблему обрезки начала звука при начале воспроизведения, которая вызвана тем, что звуковому тракту требуется небольшое время на пробуждение. Если у вас нет такой проблемы — значит драйвер аудиокарты не отправляет аудиотракт в сон при остановке воспроизведения. Если же проблема имеет место — Sound Keeper решит проблему непрерывным воспроизведением тишины.

Скачать: soundkeeper.7z (23КБ). Исходный код →

Особенности

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%) являются неслышимыми.

Что нового в v1.3.3

  • Исправлена ошибка разбора параметров: All или Analog после выбора типа сигнала приводило сбросу амплитуды в 0.

Что нового в v1.3.2

  • Fluctuate учитывает, что WASAPI по какой-то причине репортит вывод аудио 24-bit PCM как 32-bit.
  • Fluctuate генерирует 50 флуктуаций по умолчанию. Это помогает в гораздо большем числе случаев.
  • Sound Keeper больше не закрывается когда он замьючен.

Что нового в v1.3.1

  • Исправлена ошибка, которая могла приводить к зависанию программы при добавлении и удалении аудио устройств.
  • Fluctuate воспринимает не-PCM форматы вывода (вроде Dolby Atmos) как 24-разрядные вместо 16-разрядных.
  • Параметр частоты F ограничен половиной текущей частоты дискретизации, чтобы избежать генерацию неожиданного шума.
  • Более детальные логи в отладочной версии. Отладочный вывод может быть перенаправлен в файл.

Что нового в v1.3.0

  • Fluctuate делает одну флуктуацию в секунду по умолчанию. Частота может быть изменена параметром F.
  • Возможность периодичного проигрывания сигнала (параметры L и W) с опциональным фейдингом (параметр T).
  • Новые виды сигналов, генерирующих шум: White, Brown, и Pink.
  • Новая команда для остановки уже запущенной копии программы: soundkeeper kill
  • Новый режим Analog, который работает как противоположность Digital.
  • Аудио-устройства Remote Desktop игнорируются (это может быть отключено параметром Remote).
  • Новый режим OpenOnly, который просто открывает аудио-устройство, но не отправляет на него сигнал.
  • Новый режим NoSleep, который отключает код определения автоматического ухода системы в сон (Windows 7-10).
  • При отсутствии подходящих аудио-устройств, программа работает как заглушка в ожидании подходящих устройств.
  • Sound Keeper не должен предотвращать Windows 10 от автоматического перехода в сон.
  • Программа работает корректно, когда автоматический переход в сон в Windows 10 отключён.
  • Код, позволяющий системе уснуть, пришлось отключить в Windows 11 из-за особенностей этой версии ОС.

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КБ

Ссылки

  1. #101
    VEG Автор

    Также в отладочной и бета версиях появилась настройка NoSleep, которая отключает уход Sound Keeper в сон. Если вам не нужно, чтобы компьютер сам засыпал, можете воспользоваться этой настройкой.

  2. #102
    Шнипер

    У меня нет автоматического ухода в сон, по крайней мере в Control Panel\All Control Panel Items\Power Options\Edit Plan Settings\Put the computer to sleep: Never

  3. #103
    VEG Автор

    Странно. Можете попробовать воспроизвести проблему с отладочной версией и показать что она выводит в консоль?

  4. #104
    Шнипер

    Готово. См. 10:21 (отошел о компа) и 10:43 (пошевелил мышкой)

    10:15:42.772 [ 4504] Windows Build Number: 19044 (buggy WASAPI).
    10:15:42.776 [ 4504] Remaining time to sleeping: -1 seconds.
    10:15:42.778 [ 4504] Main thread started.
    10:15:42.783 [ 4504] Exe File Name: SoundKeeper64dDigitalSineF1A0.1.exe.
    10:15:42.785 [ 4504] Device Type: Digital.
    10:15:42.789 [ 4504] Stream Type: Sine (Frequency: 1.000Hz; Amplitude: 0.100%).
    10:15:42.794 [ 4504] Main loop started.
    10:15:42.794 [ 4504] Starting...
    10:15:42.797 [30240] Rendering thread started. Device ID: '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}'.
    10:15:42.797 [30240] Render. Device State: 1.
    10:15:42.798 [30772] Rendering thread started. Device ID: '{0.0.0.00000000}.{0e856358-8c39-4316-b582-5306e2211c4c}'.
    10:15:42.798 [30772] Render. Device State: 1.
    10:15:42.800 [30240] Getting output format...
    10:15:42.800 [30772] Getting output format...
    10:15:42.800 [30240] Format: PCM 2ch 96000Hz 32-bit integer.
    10:15:42.801 [30240] Getting mixing format...
    10:15:42.801 [30772] Format: PCM 2ch 48000Hz 16-bit integer.
    10:15:42.802 [30772] Getting mixing format...
    10:15:42.802 [30240] Format: PCM 2ch 96000Hz 32-bit float.
    10:15:42.802 [30772] Format: PCM 2ch 48000Hz 32-bit float.
    10:15:42.809 [30240] Starting rendering...
    10:15:42.809 [30772] Starting rendering...
    10:15:42.810 [30772] Rendering loop started.
    10:15:42.811 [30240] Rendering loop started.
    10:21:18.325 [ 4504] Remaining time to sleeping: -31 seconds.
    10:21:18.325 [ 4504] Going to sleep...
    10:21:18.325 [30240] Stopping rendering...
    10:21:18.327 [30240] Rendering thread finished. Return code: 0.
    10:21:18.328 [30772] Stopping rendering...
    10:21:18.329 [30772] Rendering thread finished. Return code: 0.
    10:21:47.370 [ 4504] Remaining time to sleeping: -61 seconds.
    10:22:17.391 [ 4504] Remaining time to sleeping: -91 seconds.
    10:22:47.446 [ 4504] Remaining time to sleeping: -121 seconds.
    10:23:17.478 [ 4504] Remaining time to sleeping: -151 seconds.
    10:23:47.513 [ 4504] Remaining time to sleeping: -181 seconds.
    10:24:17.546 [ 4504] Remaining time to sleeping: -211 seconds.
    ...
    10:43:17.093 [ 4504] Remaining time to sleeping: -1351 seconds.
    10:43:47.129 [ 4504] Remaining time to sleeping: -1 seconds.
    10:43:47.129 [ 4504] Starting...
    10:43:47.131 [ 4728] Rendering thread started. Device ID: '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}'.
    10:43:47.131 [ 4728] Render. Device State: 1.
    10:43:47.131 [16544] Rendering thread started. Device ID: '{0.0.0.00000000}.{0e856358-8c39-4316-b582-5306e2211c4c}'.
    10:43:47.132 [16544] Render. Device State: 1.
    10:43:47.132 [ 4728] Getting output format...
    10:43:47.132 [ 4728] Format: PCM 2ch 96000Hz 32-bit integer.
    10:43:47.133 [ 4728] Getting mixing format...
    10:43:47.133 [16544] Getting output format...
    10:43:47.133 [ 4728] Format: PCM 2ch 96000Hz 32-bit float.
    10:43:47.133 [16544] Format: PCM 2ch 48000Hz 16-bit integer.
    10:43:47.134 [16544] Getting mixing format...
    10:43:47.134 [16544] Format: PCM 2ch 48000Hz 32-bit float.
    10:43:47.137 [ 4728] Starting rendering...
    10:43:47.139 [ 4728] Rendering loop started.
    10:43:47.140 [16544] Starting rendering...
    10:43:47.141 [16544] Rendering loop started.
  5. #105
    Шнипер

    Проверил, через сколько оно думает что нужен слип:
    вот это, 10:50:47, написало рочно через 40с после последнего движения мышкой в 10:50:07.

    10:43:47.141 [16544] Rendering loop started.
    10:50:47.817 [ 4504] Remaining time to sleeping: -31 seconds.
    10:50:47.817 [ 4504] Going to sleep...
  6. #106
    VEG Автор

    Нда... У функции получения остатка времени до сна какое-то неадекватное поведение в Windows 10. Предсказуемо она работала походу только в Windows 7. Неудивительно, что эту функцию совсем отключили в Windows 11. Судя по всему, когда система возвращает отрицательное время, заканчивающееся на единицу, это значит, что сон выключен.

    Наверное, стоит убрать автодетект сна вообще. Но пока что попробую всё же исправить её хотя бы для Windows 10. Обновил отладочную и бета версии. Должно теперь не отключаться при таких странных показаниях системы.

  7. #107
    Шнипер

    Спасибо! Теперь пишет так, так и задумано?
    19:14:16.464 [ 4644] Rendering loop started.
    19:15:16.552 [ 6436] Remaining time to sleeping: -31 seconds.
    19:15:46.604 [ 6436] Remaining time to sleeping: -61 seconds.
    19:16:16.648 [ 6436] Remaining time to sleeping: -1 seconds.
    Сам слип не проверял, работает ли, позже проверю, и погоняю.

  8. #108
    Шнипер

    Вроде бы все хорошо. Комп в слип уходит по запросу, при этом пишет такое.

    22:50:40.515 [13244] Device '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}' is default for flow 0 and role 0.
    22:50:40.515 [13244] Device '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}' is default for flow 0 and role 1.
    22:50:40.638 [13244] Device '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}' is default for flow 0 and role 1.
    22:50:40.639 [13244] Device '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}' is default for flow 0 and role 0.
    22:50:40.763 [13244] Device '{0.0.0.00000000}.{0b3e0a6e-d9cf-45a7-892e-70ed9309bdd1}' is default for flow 0 and role 2.

    По таймеру не знаю, уйдет ли, не пользовался никогда автослипом.
    Спасибо!

  9. #109
    VEG Автор

    Шнипер, оно выводит те же значения что и раньше (так как их сообщает система), просто теперь они интерпретируются иначе и Sound Keeper не уходит в сон. Можете дописать NoSleep, чтобы он не проверял сколько до сна осталось.

    Сообщения про изменение устройств по умолчанию — это просто то что WASAPI сообщает о работе аудиоподсистемы. Sound Keeper по этим событиям определяет, нужно ли ему перезапуститься. Если он как-то на это отреагировал (кроме вывода информации в лог) — вы увидели бы это в логе следом.

  10. #110
    VEG Автор

    Sound Keeper v1.3.0

    • Fluctuate делает одну флуктуацию в секунду по умолчанию. Частота может быть изменена параметром F.
    • Возможность периодичного проигрывания сигнала (параметры L и W) с опциональным фейдингом (параметр T).
    • Новые виды сигналов, генерирующих шум: White, Brown, и Pink.
    • Новая команда для остановки уже запущенной копии программы: soundkeeper kill
    • Новый режим Analog, который работает как противоположность Digital.
    • Аудио-устройства Remote Desktop игнорируются (это может быть отключено параметром Remote).
    • Новый режим OpenOnly, который просто открывает аудио-устройство, но не отправляет на него сигнал.
    • Новый режим NoSleep, который отключает код определения автоматического ухода системы в сон (Windows 7-10).
    • При отсутствии подходящих аудио-устройств, программа работает как заглушка в ожидании подходящих устройств.
    • Sound Keeper не должен предотвращать Windows 10 от автоматического перехода в сон.
    • Программа работает корректно, когда автоматический переход в сон в Windows 10 отключён.
    • Код, позволяющий системе уснуть, пришлось отключить в Windows 11 из-за особенностей этой версии ОС.

    Спасибо AnaLogiC76 за идеи и код для OpenOnly и NoSleep.

  11. #111
    Павел

    Спасибо! Год искал решение проблемы.

  12. #112
    VEG Автор

    Sound Keeper v1.3.1

    • Исправлена ошибка, которая могла приводить к зависанию программы при добавлении и удалении аудио устройств.
    • Fluctuate воспринимает не-PCM форматы вывода (вроде Dolby Atmos) как 24-разрядные вместо 16-разрядных.
    • Параметр частоты F ограничен половиной текущей частоты дискретизации, чтобы избежать генерацию неожиданного шума.
    • Более детальные логи в отладочной версии. Отладочный вывод может быть перенаправлен в файл.
  13. #113
    VEG Автор

    Sound Keeper v1.3.2

    • Fluctuate учитывает, что WASAPI по какой-то причине репортит вывод аудио 24-bit PCM как 32-bit.
    • Fluctuate генерирует 50 флуктуаций по умолчанию. Это помогает в гораздо большем числе случаев.
    • Sound Keeper больше не закрывается когда он замьючен.
  14. #114
    VEG Автор

    Sound Keeper v1.3.3

    • Исправлена ошибка разбора параметров: All или Analog после выбора типа сигнала приводило сбросу амплитуды в 0.
  15. #115
    Алексей

    Добрый день!
    Система microlab A-H500D и более новая H-500D "проглатывает" начала аудиотреков, и проглатывает все, что следует после непродолжительной паузы: https://fcenter.ru/online/hardarticles/multimedia/15305-Microlab_A_H500D_akusticheskaya_sistema_dlya_domashnego_kinoteatra
    Пробовал Sound Keeper 30.01.2022 - не помогло(
    Была запущена и висела в процессах. Мне по аудиосвязи говорят "двадцать три", а слышно только "цать три".
    По индикации на выносном блоке управления (который подключен по оптике к компу) видно что сигнал пропадает.
    В новой версии Sound Keeper есть изменения для такой системы microlab H-500D?

  16. #116
    VEG Автор

    Последняя версия почти наверняка решит вашу проблему, но вам возможно надо будет немного поиграться с настройками для подбора подходящего режима. Попробуйте сразу стандартный режим, и если он не поможет, можете выбрать, например, SineF1A5 или SineF10A5 или что-то подобное. Подробности про настройку расписаны на английской версии этой страницы и в файле readme.

  17. #117
    Алексей

    Все работает) крутая вещь)
    На дисплее теперь всегда горит надпись ProLogic II что логично, значит сигнал всегда есть. Пока никаких тормозов не заметил, система и комп работают как и раньше

  18. #118
    VEG Автор

    Алексей, вы используете стандартный режим, или какой-то другой настроили? Будет полезно указать для других обладателей такой же акустической системы.

Комментарии временно закрыты.