Files
funnygame/external/steamworks/steamworksexample/voicechat.h
2025-07-13 15:47:42 +03:00

60 lines
1.5 KiB
C++

//========= Copyright © 1996-2010, Valve LLC, All rights reserved. ============
//
// Purpose: Class for P2P voice chat
//
// $NoKeywords: $
//=============================================================================
#ifndef VOICE_CHAT_H
#define VOICE_CHAT_H
#include "GameEngine.h"
#include "SpaceWar.h"
#include "Messages.h"
#include "steam/isteamnetworkingsockets.h"
typedef struct VoiceChatConnection_s
{
uint64 ulLastReceiveVoiceTime;
HGAMEVOICECHANNEL hVoiceChannel; // engine voice channel for this player
bool bActive;
} VoiceChatConnection_t;
class CVoiceChat
{
public:
CVoiceChat( IGameEngine *pGameEngine );
~CVoiceChat();
bool StartVoiceChat();
void StopVoiceChat();
// chat control
void MarkAllPlayersInactive();
void MarkPlayerAsActive( CSteamID steamID );
bool IsPlayerTalking( CSteamID steamID );
// chat engine
void RunFrame();
void HandleVoiceChatData( const void *pMessage );
HSteamNetConnection m_hConnServer;
private:
// Pointer to engine instance (so we can play sound)
IGameEngine *m_pGameEngine;
// map of voice chat sessions with other players
std::map< uint64, VoiceChatConnection_t > m_MapConnections;
CSteamID m_SteamIDLocalUser; // ourself
bool m_bIsActive; // is voice chat system active
uint64 m_ulLastTimeTalked; // last time we've talked ourself
HGAMEVOICECHANNEL m_hVoiceLoopback;
uint8 m_ubUncompressedVoice[ VOICE_OUTPUT_SAMPLE_RATE * BYTES_PER_SAMPLE ]; // too big for the stack
};
#endif