Why You Can't Hear Voice in Your CS2 Demo (Fixes)
Can't hear voice comms in a CS2 or FACEIT demo? The real reasons - no voice in MM/Premier demos, unset tv_listen_voice_indices, commands resetting - and the fixes.
You loaded a demo to review comms and there is total silence - or it worked yesterday and now it doesn't. Before you reinstall anything, here are the actual reasons CS2 demo voice goes quiet, in the order they catch people out.
Most likely cause: your demo is a Valve matchmaking or Premier demo, which records no voice at all. Download the FACEIT demo of the match instead, then set the voice commands with the CS2 Voice Comms Calculator .
1. Matchmaking and Premier demos have no voice data
This is the number-one cause and it is not fixable with a command. Valve matchmaking and Premier demos do not record player voice. There is no audio in the file, so tv_listen_voice_indices -1 or any other value will do nothing.
Voice is only stored in FACEIT, ESEA and other server (SourceTV) demos. If you want to hear comms from a match you played, download the FACEIT demo (a .dem.zst file), not the Valve one. This single distinction trips up most "no voice in CS2 demo" threads.
2. The voice command is still at its default of 0
Even in a FACEIT demo, voice is muted until you turn it on. tv_listen_voice_indices defaults to 0 - hear nobody. Fix it by setting both convars:
tv_listen_voice_indices -1
tv_listen_voice_indices_h -1
-1 unmutes everyone. To hear only specific players, set both to a slot bitmask instead - the voice comms calculator builds that number for you.
3. You're watching the wrong file
A FACEIT match has both a Valve demo and a FACEIT demo. If you grabbed the one from your match history in-game, it is probably the Valve copy - silent. Make sure you downloaded the FACEIT room's demo (.dem.zst). The calculator decompresses and reads .dem.zst directly, which is a quick way to confirm a file actually contains player slots.
4. The commands reset every time you restart CS2
A classic "it worked yesterday" trap: tv_listen_voice_indices and tv_listen_voice_indices_h are not persistent. They reset to default whenever you close the game, so each new session starts muted again. Re-enter them for every demo, or keep the generated commands in a note (or a bind) so you can paste them in instantly.
5. The slot number now points at the wrong player
If you used a specific bitmask and suddenly hear the wrong person, the spectator slots probably shifted. Slots are assigned from the player entity order in the demo, which can change between playback sessions, so a hard-coded number can drift. Re-read the slots with spec_player 1, spec_player 2, … - or upload the demo to the calculator, which reports the slot that is actually correct for this session.
6. You can hear voice but can't tell who's talking
That is expected - the demo plays voice without always making the speaker obvious. Turn on text chat to cross-reference:
tv_relaytextchat 2
This relays in-game chat into the demo so you can match calls to names.
7. You typed tv_listen_voices_indices
Easy to miss: the command is tv_listen_voice_indices - singular "voice", not "voices". The plural version (tv_listen_voices_indices) does not exist in CS2 and fails silently, so it looks like voice playback is broken when it is just a typo. Copy the command exactly, or copy it from the calculator to be safe.
Still stuck? The quick checklist
- FACEIT or server demo, not matchmaking/Premier.
- Both
tv_listen_voice_indicesandtv_listen_voice_indices_hset (to-1, or a slot bitmask). - Command spelled
voice, notvoices. - Re-entered this session (they reset on restart).
- Watching the FACEIT
.dem.zst, not the Valve copy.
Get the exact commands without guessing: upload your demo to the CS2 Voice Comms Calculator , tick who you want to hear, and copy.
Tools mentioned in this article
- CS2 Voice Comms Calculator - Hear specific players in a CS2 or FACEIT demo - upload it to auto-fill players and get the tv_listen_voice_indices commands.
- CS2 Crosshair Code Decoder - Decode a CSGO-xxxxx crosshair share code into cl_crosshair console commands.
- SteamID Converter - Convert between SteamID64, STEAM_0:Y:Z, SteamID3 [U:1:W], account ID and profile URL.