I need assistance with my Voice Chat system.

So I tried making a custom VoiceChatSubsystem in C++ using UE5’s Voice Chat Class, and I believe I’ve done the code correctly, as my debug print it displays that I am talking, but players can’t communicate with each other. I noticed that despite the fact that both my friend and I would talk simultaneously, it would only recognize the local player speaking.

I don’t think it’s a code error, but it is possible. However, I think it may be an issue with my game settings. Either in the Dev Portal for my game or in the GameEngine.ini.

If you think you have a solution, please contact me on Discord (ChamillionOG). If you are unable to, then just respond here. Thank you.

Local-only recognition usually means the voice data isn’t being routed between the clients, rather than anything wrong in your subsystem code. Things to verify:

  • Voice needs an online subsystem session: both players must be in the same session/lobby and registered as talkers. Check that bHasVoiceEnabled/voice is enabled in the session settings, and that players are registered via the voice interface (RegisterRemoteTalker / the Online Subsystem’s Voice interface) when they join.
  • In DefaultEngine.ini make sure [OnlineSubsystem] has bHasVoiceEnabled=true and under [/Script/OnlineSubsystemUtils.OnlineEngineInterfaceImpl]/[Voice] bEnabled=true. For the Voice Chat plugin (EOS), you must also enable the EOS Voice/RTC feature in the Dev Portal and the plugin settings, and the product must have RTC enabled.
  • Make sure each client joins the same voice room: log the room name and the participants list. If each player ends up in a separate room (e.g. a name derived from a per-player id), they’ll only hear themselves.
  • Your debug print showing “I’m talking” only proves local capture. Also log OnVoiceChatPlayerAdded / participant callbacks to see if remote participants show up, and check that they aren’t muted, and that audio output device/volume are set.
  • Test with two separate machines/accounts (not two instances with the same login) and look at the log with LogVoiceChat, LogEOSSDK set to Verbose; the connection/room join errors usually point to the config problem.

First off, thank you so much for the response! I added bEnabled to the script you referred to and will check out my DevPortal soon.

Also, in case you didn’t see it when I edited my original post, I added a screenshot showing the output from a lobby I hosted with a friend. Lastly, my game is published on Steam, so that’s the platform we’re using to host and join lobbies.

Another thing, if it helps, these are the settings I have in my DefaultEngine.ini:

[OnlineSubsystem]
DefaultPlatformService=EOS
NativePlatformService=Steam
bHasVoiceEnabled=true

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=4877970
bInitServerOnClient=true
bUseSteamNetworking=false
bHasVoiceEnabled=true

[OnlineSubsystemEOS]
bEnabled=true
bEnableVoiceChat=true
bIsUsingP2PSockets=true

[EOSSDK]
bEnablePlatformIntegration=true
+IntegratedPlatformManagementFlags=LibraryManagedByApplication

[Voice]
bEnabled=true
DefaultVoiceChatSystem=EOSVoiceChat

[/Script/OnlineSubsystemUtils.OnlineEngineInterfaceImpl]
bEnabled=true

[/Script/OnlineSubsystemEOS.EOSSettings]

bUseEAS=False
bUseEOSConnect=True
bUseLobbies=True
bUseSessions=True