mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-11 15:47:55 +00:00
engine: client: voice: open microphone only after server sends svc_voiceinit to us and shutdown immediately after disconnect
This commit is contained in:
parent
edc08e39ef
commit
5d6cf62405
@ -3139,7 +3139,7 @@ void CL_Init( void )
|
||||
|
||||
VID_Init(); // init video
|
||||
S_Init(); // init sound
|
||||
Voice_Init( VOICE_DEFAULT_CODEC, 3 ); // init voice
|
||||
Voice_Init( VOICE_DEFAULT_CODEC, 3, true ); // init voice (do not open the device)
|
||||
|
||||
// unreliable buffer. unsed for unreliable commands and voice stream
|
||||
MSG_Init( &cls.datagram, "cls.datagram", cls.datagram_buf, sizeof( cls.datagram_buf ));
|
||||
|
@ -1778,7 +1778,7 @@ void CL_ParseVoiceInit( sizebuf_t *msg )
|
||||
char *pszCodec = MSG_ReadString( msg );
|
||||
int quality = MSG_ReadByte( msg );
|
||||
|
||||
Voice_Init( pszCodec, quality );
|
||||
Voice_Init( pszCodec, quality, false ); // init requested codec and the device
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -428,6 +428,9 @@ void Voice_Disconnect( void )
|
||||
voice.players_status[i].talking_ack = false;
|
||||
}
|
||||
}
|
||||
|
||||
VoiceCapture_Shutdown();
|
||||
voice.device_opened = false;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -588,23 +591,22 @@ Voice_Init
|
||||
Initialize the voice subsystem
|
||||
=========================
|
||||
*/
|
||||
qboolean Voice_Init( const char *pszCodecName, int quality )
|
||||
qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit )
|
||||
{
|
||||
if( !voice_enable.value )
|
||||
return false;
|
||||
|
||||
// reinitialize only if codec parameters are different
|
||||
if( Q_strcmp( pszCodecName, voice.codec ) || voice.quality != quality )
|
||||
{
|
||||
Voice_Shutdown();
|
||||
|
||||
if( Q_strcmp( pszCodecName, VOICE_OPUS_CUSTOM_CODEC ))
|
||||
{
|
||||
Con_Printf( S_ERROR "Server requested unsupported codec: %s\n", pszCodecName );
|
||||
return false;
|
||||
}
|
||||
|
||||
// reinitialize only if codec parameters are different
|
||||
if( !Q_strcmp( voice.codec, pszCodecName ) && voice.quality == quality )
|
||||
return true;
|
||||
|
||||
Voice_Shutdown();
|
||||
|
||||
voice.autogain.block_size = 128;
|
||||
|
||||
if( !Voice_InitOpusDecoder( ))
|
||||
@ -627,9 +629,15 @@ qboolean Voice_Init( const char *pszCodecName, int quality )
|
||||
}
|
||||
|
||||
voice.quality = quality;
|
||||
}
|
||||
|
||||
if( !VoiceCapture_Init( ))
|
||||
if( !preinit )
|
||||
{
|
||||
voice.device_opened = VoiceCapture_Init();
|
||||
|
||||
if( !voice.device_opened )
|
||||
Con_Printf( S_WARN "No microphone is available.\n" );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -53,6 +53,7 @@ typedef struct voice_state_s
|
||||
|
||||
qboolean initialized;
|
||||
qboolean is_recording;
|
||||
qboolean device_opened;
|
||||
double start_time;
|
||||
|
||||
voice_status_t local;
|
||||
@ -92,7 +93,7 @@ extern voice_state_t voice;
|
||||
void CL_AddVoiceToDatagram( void );
|
||||
|
||||
void Voice_RegisterCvars( void );
|
||||
qboolean Voice_Init( const char *pszCodecName, int quality );
|
||||
qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit );
|
||||
void Voice_Idle( double frametime );
|
||||
qboolean Voice_IsRecording( void );
|
||||
void Voice_RecordStop( void );
|
||||
|
Loading…
Reference in New Issue
Block a user