SPDIF/HDMI Sound Keeper v1.1.0 [2020/07/18]

Если вы когда-нибудь пользовались цифровыми аудио-выходами (SPDIF или HDMI), наверняка вы сталкивались с проблемой, когда во время тишины акустика «засыпала», после чего начало следующего звука обрезалось из-за того, что акустике нужно время на «пробуждение» и инициализацию после сна. Это сильно раздражает. Если у вас никогда не было такой проблемы — значит вам повезло с драйвером. Если же проблема имеет место — она решается непрерывным воспроизведением абсолютной тишины.

Ранее для этих целей существовала одна программа с названием SPDIF Keep Alive. Но на мой взгляд она слишком тяжёлая для решения такой простой задачи: требует наличия фреймворка .NET, расходует слишком много памяти и процессорного времени. Поэтому я написал на C++ новую программу для решения проблемы.

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

Особенности

Программа использует современную звуковую подсистему WASAPI, поэтому будет работать только на Windows 7 и новее. Sound Keeper внешне никак себя не проявляет и работает полностью автоматически: находит все цифровые выходы (SPDIF или HDMI) и предотвращает их засыпание. Если во время работы программы появится новый цифровой выход (например, если вы подключили компьютер по HDMI к телевизору) — это будет корректно обработано, перезапуск программы не требуется. Для отключения Sound Keeper вы должны либо выключить звук в микшере для этой программы (после чего Sound Keeper автоматически закроется), либо просто убить процесс soundkeeper.exe. Для автоматической загрузки программы вместе с системой просто скопируйте исполняемый файл soundkeeper.exe в каталог Автозагрузка (чтобы открыть его, нажмите Win+R, введите «shell:startup» и нажмите Enter). В будущих версиях, возможно, будет добавлена иконка в область уведомлений с возможностью ручного управления и функцией закрытия приложения из простого меню.

Настройки

  • Поведение по умолчанию может быть изменено добавлением опций к имени исполняемого файла.
  • По умолчанию используется основной аудио выход. Добавьте «All» или «Digital» к имени исполняемого файла Sound Keeper для включения Sound Keeper на всех или только на цифровых аудио выходах.
  • По умолчанию используется неслышимый сигнал. Добавьте «Zero» к имени исполняемого файла чтобы использовать поток нулей в качестве сигнала (как это было в Sound Keeper v1.0).

Sound Keeper vs. SPDIF Keep Alive

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, прошу прощение не по теме.
    Почему на погодном радаре нет Радара Запорожье который тоже редко работает, как и Брест. Но Брест есть, а Запорожья нет )) И надо идти отдельно на meteoby чтобы смотреть.

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

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

  20. #20
    VEG Автор

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

    По метеорадару вопросы задавайте в последнем посте про метеорадар.