efmeow-MicSnitch icon

MicSnitch

Snitches on whoever is talking - quiet background filtered, loud shouters in red. Toggle with F8. Resolves real nicknames via PhotonView ID.

By efmeow

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.