You are viewing a potentially older version of this package. View all versions.
efmeow-MicSnitch-1.1.0 icon

MicSnitch

Snitches on whoever is talking - quiet background noise filtered out, loud shouters highlighted in red. Toggle with F8.

By efmeow
Date uploaded 5 months ago
Version 1.1.0
Download link efmeow-MicSnitch-1.1.0.zip
Downloads 76
Dependency string efmeow-MicSnitch-1.1.0

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2100

README

Mic Snitch

Snitches on whoever is talking. Shows the nicknames of every player currently transmitting voice, right on your screen — so the soundboard spammer on the loading screen has nowhere to hide.

A working replacement for the old, deprecated See_who_is_talking mod, which stopped showing names in current R.E.P.O. builds.

What you see

  • A list of currently-talking players in the upper-right corner.
  • Loud / shouting players — bold red, stay visible for 3 seconds. A sudden shout always pops out, even when 10 other people are also on the mic.
  • Normal speech — soft yellow, fades after ~0.7s.
  • Quiet background noise is filtered out by amplitude — open-mic players who are just breathing into the headset don't pollute the list.
  • Sorted with loud people on top.

Hotkey

  • F8 — toggle the overlay on/off. When hidden, a faint [F8] Mic Snitch hint stays in the corner so you never forget the toggle.

Why

In R.E.P.O. voice is proximity-based in a level, but global on loading screens and in the lobby — that's where someone always blasts a soundboard and you have no idea who. The old mod hooked the per-player Speaker component to find out. Problem: when other players run cosmetic mods (MoreHead & co.), their SetupCosmeticsModdedRPC fails, the Speaker never gets created, and the old mod sees nothing.

How it's fixed

Mic Snitch hooks RemoteVoiceLink.OnDecodedFrameFloatAction — the per-frame decoded audio callback at the VoiceClient level, before the player init / Speaker step. It fires for every remote voice that has a stream, including not-inited players. From the decoded float samples it computes the peak amplitude, classifies the speaker (quiet / normal / loud) and resolves the nickname through PhotonNetwork.CurrentRoom.GetPlayer(actorNumber).NickName, which keeps working even when a player's local object is broken by RPC errors.

Local mic state is read directly from LocalVoice.IsCurrentlyTransmitting, so your own name shows when you talk too — works even alone in a lobby for testing.

Everything is resolved via reflection — if a future game patch renames a type, the mod logs a warning and degrades gracefully instead of crashing.

Install

Use a mod manager (r2modman / Thunderstore app) — it handles the BepInExPack dependency. Manual install: drop MicSnitch.dll into BepInEx/plugins/.

Credits

Concept inspired by the original See_who_is_talking by xiaolei. Rebuilt from scratch.

CHANGELOG

Changelog

1.1.1

  • Fixed nickname resolution. Some players were showing as Player 9 / Player 23 instead of their real nicknames. The voice subsystem uses a separate Photon room with its own actor numbering, so feeding the voice playerId straight into Room.GetPlayer() resolves the wrong player (or no one).
  • The fix reads the PhotonView ID that PUN packs into VoiceInfo.UserData (this is the same hint PunVoiceClient.InstantiateSpeakerForRemoteVoice uses to link a Speaker to a player), and derives the real game ActorNumber from it (PUN's standard viewID = actorNumber * 1000 + viewNumber layout). Falls back to the voice playerId only if UserData is missing.

1.1.0

  • Loudness filter: quiet background noise (passing the open-mic threshold but contributing nothing) no longer pollutes the list. Only real speech registers.
  • Loud shouters in red: anyone speaking above the loud threshold is highlighted in bold red and stays visible for 3 seconds, so a sudden shout pops out from the always-on chatter.
  • F8 toggles the overlay. A faint [F8] Mic Snitch hint stays in the corner when hidden, so the hotkey is never forgotten.
  • Sort order: loud speakers on top (most recent first), then normal-volume speakers below.
  • Smaller, semi-transparent text — readable but not in your face when 10 people are on a loading screen.
  • Internal: dropped the redundant Speaker.OnAudioFrame / VoiceClient.onFrame / Transport.onVoiceFrameEvent hooks; everything now flows through RemoteVoiceLink.OnDecodedFrameFloatAction which fires for every decoded voice (init-broken or not) and gives access to the audio samples for the loudness analysis.

1.0.0

  • Initial release.
  • Shows nicknames of currently-talking players in the upper-right corner.
  • Hooks LoadBalancingTransport.onVoiceFrameEvent so detection works even when other players' cosmetic mods break Speaker initialization.
  • Local mic detection via LocalVoice.IsCurrentlyTransmitting — shows your own name too.
  • All game/Photon types resolved via reflection for forward-compatibility.