Skip to main content
Игры

Как услышать войс вражеской команды в демке CS2

Услышите ли вы врагов в демке CS2, решает то, что записал сервер, а не ваша консоль. В каких демках есть их голос и какая маска нужна для одной стороны.

Автор: 7 min read
Обложка статьи. Две колонки по пять точек по обе стороны пунктирной линии, левая янтарная, правая серая, и подпись: кого записать, решает сервер

Во время матча вы не слышите противника. Это не мьют на вашей стороне - это сервер вообще не отправляет вам их голос. Демка это решение не отменяет, она его воспроизводит.

Поэтому вопрос распадается на два, и только второй касается консольных команд: попал ли голос противника в этот файл вообще, и если да, как выделить их из десяти?

Выделить одного игрока - более простая версия той же задачи, её разбирает статья как услышать войс в демке CS2, а остальная часть этой страницы про случай посложнее.

Нужно только число? Загрузите демку в калькулятор войса для демок CS2: он читает таблицу слотов и подписывает каждого игрока его командой, так что "другую пятёрку" вы выбираете кликом, а не угадываете.

Короткий ответ

Поставьте обе переменные на -1 перед воспроизведением, и вы услышите всех, кто есть в файле, включая противника:

tv_listen_voice_indices -1
tv_listen_voice_indices_h -1

Если противника после этого всё равно не слышно, дело не в пропущенной команде. Их голоса нет в демке, а остальная часть страницы о том, почему так и какой файл взять вместо этого.

Почему противника изначально нет

Голос в Counter-Strike маршрутизируется по командам. Переключатель - sv_alltalk, и что происходит при его включении, игра сама описывает так: игроки слышат голосовую связь всех остальных игроков без ограничений по командам.3 Соревновательные матчи идут с выключенным alltalk, и в этом весь смысл: вы не должны слышать колл по плэнту от тех, кто этот плэнт берёт.

Теперь доведите это до записи. POV-демка, та, что вы делаете сами через record, - это запись сетевого потока, который получал ваш клиент. При выключенном alltalk голосовых пакетов противника в этом потоке не было. Потом включать нечего, потому что ничего и не пришло.

Схема. Блок стороны T из пяти игроков и блок стороны CT из пяти стоят друг напротив друга через перечёркнутую пунктирную линию с подписью sv_alltalk 0. Пунктирные стрелки идут от обоих блоков вниз в блок SourceTV с надписью 'hears both sides only if the server lets it' (слышит обе стороны, только если сервер разрешает), а от него стрелка ведёт в файл demo.dem.
Голос доходит до тех, кому его отправляет сервер. SourceTV - ещё один слушатель, и что ему разрешено слышать, то и оказывается в демке.

SourceTV тоже слушатель, и в этом весь механизм

Демки, которые вы скачиваете, - запись не вашего клиента, а SourceTV. Отсюда тот же вопрос уровнем выше: что было разрешено слышать SourceTV?

В CS2 ответ по умолчанию - ничего. SourceTV не записывает голосовой чат игроков, если на сервере не стоит sv_alltalk 1, а комьюнити-плагин, созданный чтобы это исправить, работает так: он меняет голосовые флаги самого SourceTV, чтобы тот слышал голоса всех игроков.2 Не добавляет функцию записи, а выводит SourceTV из-под правил маршрутизации по командам, которые не пускали к нему половину матча.

В этом и всё объяснение, почему в демках FACEIT есть обе команды, а в вашей демке матчмейкинга нет.

В каких демках противник действительно есть

Источник демкиГолос противника в файле?
Ваша собственная POV-запись (record)Нет - вашему клиенту его не отправляли
Матчмейкинг ValveНет - в файле вообще нет голоса
Premier ValveНет - то же самое
FACEITДа
ESEA и другие лигиДа, если лига записывает войс
Комьюнити-сервер с SourceTVТолько если сервер это включил

Две строки про Valve заслуживают отдельного пояснения, потому что причина там другая, чем в первой строке. В демках матчмейкинга и Premier нет вообще никаких голосовых данных: инструмент, который вытаскивает голосовые дорожки из демок Counter-Strike, держит это предупреждение в самом верху README, потому что из ММ-демки извлекать нечего.1 Вашей собственной команды там тоже нет. Дорожка пустая, так что маршрутизация по командам тут вообще ни при чём.

Так что если хотите разобрать, что коллила другая сторона, нужен файл этого матча с FACEIT, а не от Valve.

Как слышать только противника

-1 даёт вам всех десятерых, перебивающих друг друга: для одного момента сойдёт, а для разбора того, как соперник коллит посреди раунда, бесполезно. Чтобы выделить сторону, число придётся собрать самому.

Значение - это битовое поле: один бит на слот игрока, младшие 32 бита в tv_listen_voice_indices и старшие 32 в tv_listen_voice_indices_h. Именно так их делят инструменты для демок, когда генерируют эти команды за вас.4 В 5v5 задействована только младшая половина, так что вторая команда остаётся на 0, если только вы не включаете всех.

Пять слотов подряд дают два числа, которые стоит запомнить:

СлотыБитыЗначение
Первая пятёрка1 + 2 + 4 + 8 + 1631
Вторая пятёрка32 + 64 + 128 + 256 + 512992
Все десятьобе строки1023

992 - это противник, только если противник действительно занимает вторую пятёрку слотов, а это ничем не гарантировано. Порядок слотов берётся из порядка сущностей игроков, записанного в демке, и никак не связан ни с таблицей счёта, ни с командами. Когда в какой-то демке стороны случайно сгруппированы, 992 работает и начинает казаться правилом; а на демке, где двое ваших тиммейтов попали во вторую половину, вы потратите двадцать минут в уверенности, что команда сломана.

Проверьте, прежде чем доверять. Вручную это значит перебрать слоты и посмотреть, кто появляется:

spec_player 1
spec_player 2
spec_player 3

Игрок в spec_player N - это бит N-1, так что слот 6 даёт 32. Или пропустите перебор: калькулятор читает таблицу слотов прямо из демки, подписывает каждого игрока ником и командой, а кнопки Все T и Все CT собирают маску для целой стороны в один клик.

Командные алиасы врут после смены сторон

Если вы пользуетесь CS Demo Manager, в нём есть алиасы voice_ct и voice_t, плюс voice_STEAMID64 для одного игрока.5 Они удобные, но с одним острым углом: командные алиасы следуют за стартовой стороной каждого игрока, а не за той, за которую он играет сейчас.5

В большинстве случаев это мелочь. Здесь же это главное, потому что "противник" - движущаяся цель: после смены сторон voice_t выбирает пятерых, которые начинали за T, а теперь играют за CT. Половину матча алиас означает противоположное тому, что вы имели в виду. У маски, собранной по реальным слотам, этой проблемы нет, потому что слоты при смене сторон не меняются.

Как отличить "голоса нет" от "только одна сторона"

Стоит потратить тридцать секунд, прежде чем делать выводы, потому что у этих двух проблем разные решения.

Поставьте обе переменные на -1, запустите демку и перемотайте на конец раунда - самый разговорчивый момент в любом матче. Дальше:

  • Никого не слышно вообще. В файле нет голосовой дорожки. Проверьте, кто записал демку; если это матчмейкинг или Premier, вот и ответ, и никакая команда его не изменит.
  • Слышно пятерых, и все они ваши. Голосовая дорожка есть, но SourceTV получал только одну сторону. Это следствие настроек сервера, а не воспроизведения.
  • Слышно десятерых. Обе стороны на месте. Теперь собирайте маску.

Общий чат - вторая запись

В файле есть не только голос:

tv_relaytextchat 2

2 показывает всё, включая общий чат, 0 скрывает чат полностью, и FACEIT выдаёт эту команду вместе с двумя голосовыми, когда объясняет игрокам, как разбирать демку.6 Здесь она особенно к месту: сообщения в общем чате во время матча шли обеим командам, поэтому они сохраняются в демках, где голоса противника нет. Когда голосовая дорожка односторонняя, лог чата часто единственное, что у вас есть от другой стороны.

Вводите все три команды до playdemo, а не во время воспроизведения.

Они каждый раз сбрасываются

Обе переменные возвращаются к 0, когда CS2 закрывается. Это ловушка "вчера вечером же работало": ничего не сломалось, просто сессия снова началась с тишины. Держите команды там, откуда их можно вставить.

В каком порядке делать

  1. Проверьте, кто записал демку. FACEIT или лига, а не матчмейкинг и не Premier.
  2. Вставьте tv_listen_voice_indices -1, tv_listen_voice_indices_h -1 и tv_relaytextchat 2 до запуска демки.
  3. Убедитесь, что слышите десять голосов, а не пять.
  4. Выясните, какие слоты занимает другая сторона, и сложите значения их битов.
  5. Поставьте tv_listen_voice_indices на это число, _h оставьте на 0 и запустите заново.

Шаги 3 и 4 калькулятор войса для демок CS2 берёт на себя: загрузите демку, посмотрите команды в списке слотов, нажмите Все T или Все CT и скопируйте две строки.

Шаг 1 решается сам собой, когда демка с FACEIT, который записывает обе стороны, - там важно не ошибиться только в одном: какой файл остаётся после матча на FACEIT.

Источники

Каждое число в этой статье подтверждено источником ниже. Утверждения, которые не удалось подтвердить, убраны, а не смягчены.

  1. Рецензируемый источникAkiVer

    That Valve matchmaking demos contain no voice audio data at all, stated as a standing warning by the author of the tool that extracts voice tracks from CS:GO and CS2 demos.

  2. Рецензируемый источникb0ink

    That CS2's SourceTV does not record player voice chat by default unless the server has sv_alltalk 1, and that the fix is a plugin that modifies SourceTV's own voice flags so it hears the voices of all players.

  3. Публикация в СМИFUNPLAY

    The convar's own description string as shipped in CS2 - that sv_alltalk lets players hear all other players' voice communication with no team restrictions - which is the behaviour that is off during a normal match.

  4. ПервоисточникCS Demo Manager

    That the value is one bitmap split into two 32-bit halves, the low one for ids 0 to 31 and the high one for ids 32 to 63, as implemented by the demo tool that generates these commands.

  5. ПервоисточникCS Demo Manager

    The voice_ct, voice_t and voice_STEAMID64 aliases, and that the team aliases refer to each player's starting side rather than their current one.

  6. ПервоисточникFACEIT

    The exact three-command recipe FACEIT tells players to paste when reviewing a FACEIT demo, and that FACEIT demos carry the voice comms that recipe unmutes.

Темы

Инструменты из статьи

Новые инструменты на почту

Новые инструменты и иногда подробный разбор, примерно раз в месяц. Без спама, адрес никому не передаем, отписка в один клик.

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

Article title card. A loudspeaker icon with three arcs beside it, the innermost in amber, with the line: the file with the voice in it is the .dem.zst
Gaming Tools Guide

How to Hear Voice Comms in a FACEIT Demo (CS2)

FACEIT records both teams' voice, but only in one of the two demos a match leaves you. Which file to open, the three FACEIT commands, and the slot bitmask.

Article title card. A loudspeaker icon struck through by a thick amber line, with the line: the demo has no voice in it
Gaming Tools

Why You Can't Hear Voice in Your CS2 Demo (Fixes)

Can't hear voice comms in a CS2 or FACEIT demo? The real causes - no voice in MM/Premier demos, unset tv_listen_voice_indices, reset commands - and fixes.

A player seen from behind in a dark room, wearing an over-ear headset lit red and blue, facing a blurred monitor.
Gaming Tools

Every Way to Hear FACEIT Demo Voice Comms, Compared

Console commands, a web calculator, CS Demo Manager, a voice extractor and extensions: what each does for FACEIT demo voice and what it leaves to you.