SPDIF/HDMI Sound Keeper v1.2.1 [2021/11/05]

Программа предотвращает засыпание цифровых аудиовыходов 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КБ

Ссылки

  1. #1
    Сергей

    Спасибо большое. на realtek 1220 (ASUS maxsumus ix formula) на всех драйверах такая проблема, на стандартных майкросовых нет ( эх

  2. #2
    Владимир

    Такая же проблема была с оптикой на Edifier R2700. Утилитка помогла, спасибо.

  3. #3
    Вова

    Что-то не помогает в Win 10 Через AUX

  4. #4
    VEG Автор

    Вова, если под AUX понимается аналоговое устройство вывода — то оно и не должно пока что помогать. Для аналоговых выходов нужно применять другой подход.

  5. #5
    VEG Автор

    Вышла версия 1.0.3. Решена проблема с работой Sound Keeper после окончания вывода звука в эксклюзивном режиме.

  6. #6
    ALEKSEI

    А можно сделать это приложение под андроид? В частности, необходимо запускать его на Nvidia shield tv.

  7. #7
    VEG Автор

    ALEKSEI, увы, для этого придётся писать Sound Keeper с нуля, так как он полагается на API Windows.

  8. #8
    Роман

    Спасибо за программу :)

  9. #9
    Максим

    Спасибо за приложение!

    Проблем с SPDIF или HDMI у меня нет, но есть схожая проблема с Bluetooth-трансмиттером Avantree Audikast. При подключении к компу через USB он постоянно переключается на дефолтный оптический тип ввода каждый раз, когда звуковое устройство не используется, а потом - снова на USB ввод, что приводит к обрезанию первых 2-3 секунд звука во время этого переключения.

    Мне очень помогли твои исходники, нужно было всего лишь изменить условие, фильтрующее устройства по типу SPDIF/HDMI на устройства, содержащие в имени "Avantree Audikast". С нуля я бы такое писал очень долго, т.к. последние 13 лет занимаюсь только разработкой под мобильные устройства.

    Если кому интересно, вот ссылка на мой форк:
    https://bitbucket.org/MarauderMax/soundkeeper_avantree
    Надеюсь, этим я не нарушил авторские права :)

  10. #10
    VEG Автор

    Максим, если бы я был против форков, то я бы наверное не стал публиковать исходный код =) Мне даже приятно, что кому-то этот код пригодился.

  11. #11
    CompMan

    Приветствую. Спасибо за отличную программу, давно ей пользуюсь. Возник вопрос по поводу последнего обновления. Для включения только цифрового аудио выхода мне надо сменить название файла программы на "Digital" или могу просто к названию через пробел добавить "SoundKeeper64 Digital"?

  12. #12
    VEG Автор

    Можно и без пробела в любое место добавить Digital. Например, DigitalSoundKeeper64.exe. Если ваш цифровой аудио выход выбран в системе как основной (Primary), то можете ничего не делать — по умолчанию используется именно основной аудио выход. Добавление Digital откатывает поведение до того как было в версии 1.0, то есть Sound Keeper находит все цифровые аудио выходы и работает на них. Изменил поведение по умолчанию так как обычно люди используют только основной выход, и нет необходимости поддерживать все остальные аудио выходы во включённом состоянии.

    В будущем, может быть, сделаю нормальные настройки в реестре или ini-файле. Пока что было проще всего организовать это через изменение имени файла =)

  13. #13
    CompMan

    Понял, благодарю за быстрый ответ. Мне нужна активация только цифрового выхода, так как к компьютеру подключены еще монитор с колонками по DisplayPort и наушники с усилителем по USB. И я часто переключаюсь между ними.

  14. #14
    VEG Автор

    Если вы переключаетесь между ними путём изменения основного аудио выхода, то стандартный режим для этого и предназначен. То есть, как только вы переключитесь с SPDIF на HDMI/DisplayPort, то Sound Keeper должен это определить и переключиться на поддержание нового основного аудио выхода.

  15. #15
    CompMan

    Да, именно так и переключаюсь, но проблема у меня только с SPDIF. Как я понимаю, нет смысла переключения программы на другие аудио выходы, если в этом нет необходимости.

  16. #16
    VEG Автор

    В режиме Digital она будет работать на всех цифровых аудио-выходах одновременно (как это было в версии 1.0). То есть, в вашем случае стандартный режим выглядит лучше, так как он будет генерировать только один поток, а не несколько (кроме SPDIF, как минимум, DisplayPort тоже должен быть распознан как цифровой). В идеале, конечно, надо бы добавить возможность выбора конкретных аудио-выходов, за которыми нужно следить, но сделать нормальные настройки руки никак не доходят =)

  17. #17
    CompMan

    Спасибо за разъяснение. Тогда ничего менять не буду )

  18. #18
    VEG Автор

    Гуглу и некоторым антивирусам не понравилась новая версия программы (особенно 32-битная версия, почему-то). Залил новый архив, на который антивирусы должны смотреть с меньшей подозрительностью. Теперь программа больше на пару килобайт, так как в ней больше лишнего кода, но обычно чем больше программа, тем меньше у антивирусов вопросов. Ждём когда Google переиндексирует мой сайт, и браузера перестанут мешать пользователям качать файлы.

  19. #19
    Виталий

    Здравствуйте VEG,

    Хотел посмотреть код - ссылка не работает bitbucket показывает 404. )))) Я в общем искал код для передачи данных через аудио. Для этого там надо быстродействие на прием и передачу сигнала, чтобы типа отправить запрос на микрофон-прослушать_раскодировать_обработать-отправить ответ. Чтобы была быстрая скорость передачи данных это надо делать в ОЗУ, так как диск намного медленнее да и нет смысла записывать туда промежуточные пакеты. Я сам код делать не умею или не хочу (лень). Такого кода пока не нашел. Находил только с записью на диск - воспроизведением с диска. Хотя, можно RAM диск сделать но это уже извращение.
    Но Вы же наверное уже знаете, как делается этот ввод-вывод, раз Ваша программа непрерывно посылает нули. Может Вы бы сделали новый проект... передача данных через аудио, с компьютера на компьютер через audio порт.
    На самом деле, я хотел бы купить пару дешевых раций и использовать их таким образом для передачи данных на расстоянии. Без платы за трафик и с защитой от отслеживания, если использовать кодированный сигнал.

    Прошу прощение также за плохое знание русского.

  20. #20
    VEG Автор

    К сожалению, Bitbucket удалил все репозитории на Mercurial. Пока что не решил как с ними поступить. Скорее всего переведу всё на Git и соответственно GitHub. Чтобы сделать то что вы хотите, в Windows SDK есть примеры работы с WASAPI - там всё нужное продемонстрировано. Но, конечно, вам придётся всё равно попрограммировать, никто не сделает за вас то что нужно именно вам.

  21. #21
    Виталий

    Спасибо за ответ! Буду изучать.

  22. #22
    Санёк

    А с аналоговыми выходами программа тоже работает?

  23. #23
    VEG Автор

    Можете попробовать последнюю версию. Скорее всего не поможет, так как для аналоговых выходов наверняка дело не в драйвере, а в самом устройстве, и оно требует какой-то более заметный (для устройства, а не для уха) сигнал, чтобы не засыпать.

    Расскажите что у вас за устройство, как быстро оно засыпает, как проявляется засыпание, как оно просыпается? Если станет понятно, какой неслышимый сигнал (амплитуда, форма, частота) ему нужен, чтобы не дать ему заснуть, то в одном из следующих обновлений можно будет попробовать добавить поддержку.

  24. #24
    Санёк

    Звуковая карта Xonar AE. Изредка появляется белый шум, треск, на полной громкости. Когда сидишь в ушах это жесть, там ведь ещё усилок для наушников есть. Говорят, что это может быть из-за простоя карты. Пришёл по ссылке сюда, типо решение, а тут про цифру. Я думал это проблема старых Xonar, а оказалось нет... Кто-то говорит можно микрофон поставить на прослушивание в настройках и убавить его в 0, типо тоже решение. Никогда больше не куплю карты Асус и аналога ведь нет по цене плюс-минус.

  25. #25
    VEG Автор

    То что вы описываете больше похоже на неисправность оборудования. Но ничто не мешает вам попробовать Sound Keeper, чтобы убедиться, что он не поможет =)

  26. #26
    trubadur

    Здравствуйте, после начала использования вашей программы компьютер (windows 10) перестал уходить в спящий режим. Это нормально?

  27. #27
    VEG Автор

    trubadur, Sound Keeper имитирует воспроизведение тишины через WASAPI. Вполне возможно, система решает не уходить самостоятельно в спящий режим, если хоть какая-то программа воспроизводит что угодно. Увы, сейчас нет возможности протестировать, так как я далеко от своей системы с выводом звука через S/PDIF. В интернете смог найти аналогичную проблему в другой программе. Возможно, это стандартное поведение самого WASAPI, или зависит от драйвера аудиокарты, не знаю.

    Сам я всегда отправляю компьютер в сон явно, при помощи комбинации Win+Shift+L (по умолчанию в Windows такой комбинации нет, я её добавил через AutoHotKey). Как-то в привычку вошло уже пользоваться этой комбинацией каждый раз, когда отхожу от компьютера надолго.

  28. #28
    Алекс

    Всем привет!
    Во-первых, сразу благодарность и респект автору за такую необходимую в быту прогу-полезняшку. К сожалению, для некоторых обладателей стареньких ПК это походу единственное решение, и им без подобного саундкипера ну никак не обойтись. Прошерстил множество форумов, но так особо и не нашел другого выхода из ситуации с "засыпанием" S/PDIF-сигнала при выводе его на акустику Edifier R2800.
    Так что вопрос в общем такой: можно ли как-то сделать эту программку совместимой со старенькой Windows XP? А то тоже вот столкнулся с такой же точно проблемой в материнке Gigabyte GA-P43-ES3G на WinXP Pro SP3 (x86). От родных реалтековских дров на эту мать толку нет никакого, а стандартные виндовские драйвера типа Microsoft UAA Bus driver for HD Audio на третий сервис пак не ставятся. А если и ставятся, то тоже проблемы со звуком не решают (пробовал как идущие в комплекте на диске, так и более новые с оф.сайта Майкрософт). В результате имею на этой винде очень неприятную ситуевину в виде периодического треска включения-отключения коаксиального входа на Edifier r2800. Стандартных звуков винды вообще нет, потому как S/PDIF попросту не успевает на них срабатывать. Был бы очень признателен за доработку проги еще и для WinXP. Если для этого требуются значительные изменения проги или даже перепись ее с нуля, то думаю мы с автором могли б как-то договориться. За разумное вознаграждение.
    Ну и вообще, если вдруг кто знает еще какое-то решение, пишите сюда тоже. Думаю, полезно в любом случае будет многим.

  29. #29
    VEG Автор

    Алекс, увы, программа полностью полагается на вывод звука через WASAPI, который появился в Windows Vista. Под Windows XP оно никак не заведётся, нужно переписывать с использованием более старого API вывода звука.

    Реализовать отдельную версию для XP в принципе возможно, но вы первый кто спрашивает про поддержку XP за столько лет, то есть на практике крайне мало людей использует эту версию ОС, так что шансы что я выделю время на реализацию такой версии Sound Keeper невелики.

  30. #30
    Иван

    Пишу от лица всех обладателей карт Asus xonar dx\d1\STX и тд. огромное спасибо за программу! теперь можно не переживать что на 100% громкости словишь шум в наушниках и получишь инсульт.

  31. #31
    Иван

    Санёк, вот как раз тот самый случай когда эта программа помогает. по факту почти все карты asus имеют такой заводской брак, и без таких костылей ими пользоваться невозможно.

  32. #32
    VEG Автор

    Sound Keeper v1.2.0

    • Sound Keeper более не предотвращает сон компьютера.
    • Новый тип потока "Sine", который может быть полезен для аналоговых или «слишком умных» аудио выходов.
    • Когда пользователь запускает Sound Keeper, ранее запущенная копия автоматически завершается.
    • Поток "Fluctuate" учитывает формат семплов аудио выхода (16/24/32-bit integer, и 32-bit float).
    • Поддержка параметров командной строки. Пример: "SoundKeeper64.exe sine -f 1000 -a 10".
    • Временный костыль для обхода ошибки в Windows 10, приводящей к утечке памяти в сервисе аудио при использовании эксклюзивного режима, включается только на подверженных проблеме версиях Windows (8, 8.1, и 10).
  33. #33
    CompMan

    Приветствую! После обновления на версию 1.2.0, программа перестала работать. Запускается, но цифровой выход не просыпается... Windows 11.

  34. #34
    VEG Автор

    Какая версия Sound Keeper у вас была до этого? Тот аудио вывод, который вам нужно поддерживать включённым — стоит основным в системе?

  35. #35
    CompMan

    Предыдущая 1.1.0, да.

  36. #36
    VEG Автор

    Попробуйте переименовать исполняемый файл в SoundKeeperSineF1000A100.exe, с таким именем программа должна генерировать слышимый сигнал. Работает ли так?

  37. #38
    VEG Автор

    Попробуйте вот эту отладочную версию. Что она выводит на экран?

  38. #39
    CompMan

    13:58:45.091 [ 7668] Windows Build Number: 22000.
    13:58:45.091 [ 7668] Main thread started.
    13:58:45.092 [ 7668] Exe File Name: SoundKeeper64d.exe.
    13:58:45.092 [ 7668] Device Type: Primary.
    13:58:45.092 [ 7668] Stream Type: Fluctuate.

  39. #40
    VEG Автор

    Это точно всё? Как-то маловато. Если больше ничего не пишет, программа почему-то зависает почти на самом старте. Посмотрю чем это может быть вызвано.

  40. #41
    CompMan

    Да, только это выводится. Хорошо, буду ждать.

  41. #42
    VEG Автор

    А окно консоли остаётся, или исчезает через секунду (то есть, программа сама закрывается)?

  42. #43
    CompMan

    Окно консоли остается, курсор мигает и всё.

  43. #44
    VEG Автор

    Обновил отладочную версию, она должна вывести больше информации, чтобы было понятно, где именно она зависает. Что она выводит?

  44. #45
    CompMan

    14:13:42.565 [ 2840] Windows Build Number: 22000.
    14:13:42.565 [ 2840] Main thread started.
    14:13:42.566 [ 2840] Exe File Name: SoundKeeper64d.exe.
    14:13:42.566 [ 2840] Device Type: Primary.
    14:13:42.566 [ 2840] Stream Type: Fluctuate.
    14:13:42.566 [ 2840] 1
    14:13:42.566 [ 2840] 2
    14:13:42.566 [ 2840] 3
    14:13:42.566 [ 2840] 4
    14:13:42.567 [ 2840] 5
    14:13:42.572 [ 2840] 6
    14:13:42.572 [ 2840] 7
    14:13:43.085 [ 2840] 7
    14:13:43.592 [ 2840] 7
    14:13:44.098 [ 2840] 7
    14:13:44.603 [ 2840] 7
    14:13:45.110 [ 2840] 7
    14:13:45.617 [ 2840] 7
    14:13:46.124 [ 2840] 7
    14:13:46.631 [ 2840] 7

  45. #46
    CompMan

    И после этого бесконечно символ "7".

  46. #47
    VEG Автор

    Спасибо. Значит, проблема где-то с запуском нити, что воспроизводит какой-то поток. Прямо сейчас я не могу более детально разобрать проблему, но в ближайшее время хотелось бы её исправить и выпустить обновление с исправлением. У вас есть Telegram, чтобы можно было в реальном времени вместе выяснить точную причину? Если есть, свяжитесь со мной, мой юзернейм @vrubleg. Или же можно по email.

  47. #48
    VEG Автор

    Sound Keeper v1.2.1

    • Sound Keeper работает на Windows 11.
    • Код, который позволял компьютеру автоматически уходить в сон, пришлось отключить на Windows 11 из-за бага в ОС.

    Когда любая программа проигрывает любое аудио (даже тишину), система не уходит в сон автоматически. Sound Keeper использует функцию NtPowerInformation(SystemPowerInformation, ...), чтобы узнать, когда система собирается уйти в сон, чтобы позволить ей сделать это. По какой-то причине, Windows 11 всегда сообщает, что система собирается заснуть через 0 секунд. Похоже, что это новая ошибка в OS. В результате, Sound Keeper считал, что система собирается спать прямо сейчас, и отключал сам себя, чтобы не мешать сну компьютера. Это поведение пришлось отключить на Windows 11, пока не найдено лучшее решение проблемы.