Я слышу шаги позже, чем их вижу

По умолчанию Windows отдаёт звук твоей звуковой карте буферами по 10 миллисекунд — это собственная цифра Microsoft, — и всё остальное укладывается сверху. Откуда берётся каждая миллисекунда, какие из них можно убрать и почему гарнитура, открывшая микрофон, становится резко хуже.

По умолчанию Windows гоняет звук между приложениями и твоим звуковым железом буферами по 10 миллисекунд, и это собственная цифра Microsoft, а не прикидка: «by default all applications in Windows 10 and later will use 10-ms buffers to render and capture audio». Всё остальное — эффекты, пространственная обработка, пересчёт частоты, беспроводная линия — укладывается поверх этой нижней границы. Если шаги доезжают до тебя позже вспышки выстрела, причина может быть в одной из добавок, и разделы ниже разбирают их по одной.

Путь звука, с цифрами самой Microsoft

Документ Microsoft Low Latency Audio разбирает путь воспроизведения на этапы и ставит числа тем из них, которыми управляет сама. Коротко:

ЭтапВо что обходитсяИсточник
Игра пишет звук в буфер——
Звуковой движок читает и обрабатывает его, подгружая эффекты как объекты обработки звука (APO)1,3 мс в Windows 10 и новее — против примерно 12 мс для приложений с плавающей точкой и примерно 6 мс для целочисленных до этогоMicrosoft
Каждый эффект в цепочке добавляет своё«The latency of the APOs varies based on the signal processing within the APOs» — фиксированной цифры нетMicrosoft
Движок пишет в буфер, который читает драйвер10 мс по умолчанию; минимум объявляет сам звуковой драйверMicrosoft
Драйвер отдаёт это железу, которое может обработать звук ещё разЗависит от устройства, не публикуется—
Динамик или наушникиФизика—

Два факта из этого документа стоит носить с собой:

Отсюда следует одна любопытная вещь. Microsoft пишет, что когда маленький буфер запрашивает одно приложение, «all applications that use the same endpoint and mode will automatically switch to that small buffer size», а движок возвращается к 10 мс, когда это приложение закрывается. То есть уже запущенное на том же выходе приложение с низкой задержкой может уменьшить буфер, которым пользуется твоя игра, а игра об этом даже не узнает.

Причина 1 — Bluetooth-гарнитура, которая открывает микрофон

Если ты пользуешься Bluetooth-гарнитурой и вдобавок говоришь в неё, эта причина касается тебя — и она задокументирована, а не пересказана по слухам.

Стерео Windows проигрывает через A2DP, а для микрофона использует профиль Hands-Free — и совместить их она не может. Страница Microsoft Bluetooth Classic Audio говорит, что на Windows 11 переключение с A2DP на HFP происходит, когда «an application opens the input (microphone) endpoint» или «an application creates an output (playback) stream with the category set to Communications». HFP работает на 8 кГц (узкая полоса) или 16 кГц (широкая полоса), в моно, и «Windows automatically resamples audio as needed for the currently selected profile» — то есть звук игры на 48 кГц пересчитывается вниз, под линию телефонного качества, в тот самый момент, когда голосовой чат открывает микрофон.

Вот почему гарнитура нормально звучит в меню и отвратительно в матче: это не один и тот же звуковой путь.

Что делать:

  1. Для соревновательной игры бери проводную гарнитуру или фирменную беспроводную на 2,4 ГГц со своим USB-приёмником. Они держат один путь и не переключают профили.
  2. Если надо остаться на Bluetooth, используй отдельный микрофон, чтобы вход гарнитуры никто не открывал и устройство оставалось на A2DP.
  3. Проверь, какой кодек тебе на самом деле достался. Windows берёт первый кодек, поддерживаемый обеими сторонами, в порядке aptX Adaptive, AAC, aptX Classic, SBC — таблица доступности по версиям Windows лежит на той же странице Microsoft.
  4. Если устройство плохо сопрягается или конечные точки вообще пропадают, это уже другая неисправность: Bluetooth — карточка восстановления для неё.

Bluetooth-линия добавляет время кодирования, передачи и декодирования в обе стороны, и ни один производитель не публикует одной цифры, годной для всех чипсетов и адаптеров, — поэтому и мы её не напечатаем. Что документация производителя действительно устанавливает — это механизм и то переключение профиля выше. Для принятия решения этого достаточно.

Причина 2 — частота дискретизации, которую приходится пересчитывать

Если игра выдаёт 48 кГц, а твоё устройство настроено на 44,1 кГц — или наоборот, — движок пересчитывает частоту, а это работа, и она не бесплатна. В Windows есть флаг, который приложение может выставить, когда «it is important to avoid resampling in the audio engine», — и это говорит тебе, что пересчёт достаточно реален, чтобы Microsoft дала разработчикам способ его обойти.

Что делать:

  1. Щёлкни правой кнопкой по значку динамика, открой Параметры звука, затем свойства своего устройства вывода.
  2. Найди формат по умолчанию (обычно на вкладке Дополнительно) и поставь 24 бита, 48000 Гц, если документация твоего железа не говорит иного. И игры, и Windows работают в 48 кГц.
  3. Если у твоей гарнитуры есть своя программа настройки, выставь в ней ту же частоту.
  4. Включи что-нибудь и убедись, что звук по-прежнему работает. Если сломалось конкретное приложение — верни настройку назад: это обратимо, и терять из-за неё приложение не стоит.

Причина 3 — стек эффектов, о котором ты не знал

Каждый эффект на пути — это объект обработки звука, и формулировка самой Microsoft говорит, что их задержка меняется вместе с обработкой внутри них. Пространственный звук, виртуальный объёмный звук, «улучшения», выравнивание громкости, эквалайзер от производителя гарнитуры и незаглушённый второй выход — все они добавляют этапы.

Для игроков любопытнее всего пространственная обработка, потому что это настоящий размен, а не ошибка: она существует, чтобы направление было легче различать, и она же — ещё один этап в цепочке. Суди о ней на слух, а не из принципа.

Что делать:

  1. Открой свойства своего устройства вывода и найди вкладку улучшений или эффектов. Выключи там всё и послушай.
  2. Временно выключи пространственный звук и сыграй раунд на обычном стерео. Если направление стало хуже, а тайминг лучше, ты теперь знаешь свой собственный размен.
  3. Так же, по одному, выключи эквалайзер и виртуализацию в программе своей гарнитуры.
  4. Верни обратно только то, чего не хватило.

Правильного ответа здесь нет, а кто говорит, что есть, тот не проводил этот тест на твоих ушах и с твоей гарнитурой.

Причина 4 — монопольный режим: что он даёт и чего стоит

Приложение может открыть устройство в монопольном режиме, и Microsoft описывает, что именно это значит: «the data bypasses the audio engine and goes directly from the application to the buffer where the driver reads it from. However, if an application opens an endpoint in exclusive mode, then there's no other application that can use that endpoint to render or capture audio.»

Собственная страница Microsoft про монопольный режим выражается ещё резче: «Exclusive-mode streams seize the audio endpoint—all system sounds, notifications, and audio from other applications are silenced.»

На той же странице есть и важная современная оговорка. Начиная с Windows 10 IAudioClient3 позволяет потоку в общем режиме работать с очень маленькими периодами, что «provides latency comparable to exclusive mode while preserving system sound mixing and interoperability», — то есть монопольный режим больше не тот автоматический выигрыш, каким он был в 2010 году.

Галочка в Windows — Разрешить приложениям использовать устройство в монопольном режиме — сама ничего в монопольный режим не переводит. Она только решает, дать ли приложению, которое попросит, такую возможность. Оставить её включённой не стоит ничего; выключить — значит не дать её тем приложениям, которые её хотят.

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

Что w0a здесь делает, а чего не делает

Страница Fix: по одной карточке восстановления на каждую вещь, которую можно изменить, и каждая возвращает значение Windows по умолчанию.
Страница Fix: по одной карточке восстановления на каждую вещь, которую можно изменить, и каждая возвращает значение Windows по умолчанию.

Что делает. На странице Твики реестра в группе ЗВУК ровно одна запись — Приоритет аудиопотоков (MMCSS). Она ставит Scheduling Category задачи Audio мультимедийного планировщика в High, по пути HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks\Audio. Твики звука — постатейная страница про эту запись.

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

Чего не делает. Он не меняет размер твоего буфера — просить об этом может только приложение. Он не меняет частоту дискретизации. Он не ставит звуковой драйвер. Он не трогает пространственный звук. И он не пишет SystemResponsiveness, который есть в каждом интернет-списке по настройке звука: ниже 10 значение всё равно ведёт себя как значение по умолчанию, а на машине, где уже стояло 10, запись нуля у нас в измерении сделала хуже. Страница Fix при этом всё равно может вернуть его к значению Windows по умолчанию, если его менял более старый инструмент.

На странице Оптимизации есть родственный переключатель — Держать профиль планировщика игр в категории High (MMCSS Games), — и он заслуживает той же честности. Он влияет только на те игры и звуковые стеки, которые действительно регистрируют задачу мультимедийного планировщика. На игры, которые её не регистрируют вовсе, он не влияет никак, и именно поэтому продукт не заявляет по этому переключателю никакого прироста фреймрейта.

Если сломан сам звуковой стек — звук пропадает, устройство исчезло, старая программа оставила значение планирования где-то в странном месте, — карточка восстановления Звук перезапускает звуковые службы и записывает значение Windows по умолчанию. Это восстановление, а не твик, и оно не зависит от того, вносил ли это изменение сам w0a.

Чего программа здесь не может

Остаётся короткий честный список того, что действительно твоё: транспорт (провод против беспроводного), частота дискретизации, стек эффектов и то, успевает ли звуковой поток получить своё время. Пройди эти четыре пункта — и ты убрал всё, что вообще можно убрать.

Похожие статьи

Из примерно дюжины этапов между кликом и сменой пикселя программе принадлежат три, остальное принадлежит прошивке, монитору и игре: Как уменьшить input lag в CS2 и других играх: что может программа, а что нет

w0a не меняет ни одной настройки Windows, пока ты не попросишь, а твик сохраняет старое значение, прежде чем записать новое. Сообщить мне

Эта страница помогла?

Чего не хватило или что не сработало? Мы читаем каждый такой ответ.

Если эта страница не решила проблему, напиши нам — скажи, какую статью ты читал, и мы её исправим.