mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2024-12-13 13:40:56 +00:00
VoIP: functionality to adjust incoming audio gain, per-user.
This commit is contained in:
parent
cc18323a99
commit
020704d2ff
4 changed files with 41 additions and 3 deletions
|
@ -935,6 +935,8 @@ void CL_FirstSnapshot( void ) {
|
||||||
clc.speexInitialized = qtrue;
|
clc.speexInitialized = qtrue;
|
||||||
clc.voipMuteAll = qfalse;
|
clc.voipMuteAll = qfalse;
|
||||||
Cmd_AddCommand ("voip", CL_Voip_f);
|
Cmd_AddCommand ("voip", CL_Voip_f);
|
||||||
|
Cvar_Set("cl_voipSendTarget", "all");
|
||||||
|
clc.voipTarget1 = clc.voipTarget2 = clc.voipTarget3 = 0x7FFFFFFF;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -759,6 +759,33 @@ void CL_WritePacket( void ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USE_VOIP
|
#if USE_VOIP
|
||||||
|
// Move cl_voipSendTarget from a string to a
|
||||||
|
if (cl_voipSendTarget->modified) {
|
||||||
|
const char *target = cl_voipSendTarget->string;
|
||||||
|
if ((*target == '\0') || (Q_stricmp(target, "all") == 0)) {
|
||||||
|
clc.voipTarget1 = clc.voipTarget2 = clc.voipTarget3 = 0x7FFFFFFF;
|
||||||
|
} else if (Q_stricmp(target, "none") == 0) {
|
||||||
|
clc.voipTarget1 = clc.voipTarget2 = clc.voipTarget3 = 0;
|
||||||
|
} else {
|
||||||
|
clc.voipTarget1 = clc.voipTarget2 = clc.voipTarget3 = 0;
|
||||||
|
const char *ptr = target;
|
||||||
|
do {
|
||||||
|
if ((*ptr == ',') || (*ptr == '\0')) {
|
||||||
|
const int val = atoi(target);
|
||||||
|
target = ptr + 1;
|
||||||
|
if ((val >= 0) && (val < 31)) {
|
||||||
|
clc.voipTarget1 |= (1 << (val-0));
|
||||||
|
} else if ((val >= 31) && (val < 62)) {
|
||||||
|
clc.voipTarget2 |= (1 << (val-31));
|
||||||
|
} else if ((val >= 62) && (val < 93)) {
|
||||||
|
clc.voipTarget3 |= (1 << (val-62));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (*(ptr++));
|
||||||
|
}
|
||||||
|
cl_voipSendTarget->modified = qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
if (clc.voipOutgoingDataSize > 0) { // only send if data.
|
if (clc.voipOutgoingDataSize > 0) { // only send if data.
|
||||||
MSG_WriteByte (&buf, clc_EOF); // placate legacy servers.
|
MSG_WriteByte (&buf, clc_EOF); // placate legacy servers.
|
||||||
MSG_WriteByte (&buf, clc_extension);
|
MSG_WriteByte (&buf, clc_extension);
|
||||||
|
@ -766,9 +793,9 @@ void CL_WritePacket( void ) {
|
||||||
MSG_WriteByte (&buf, clc.voipOutgoingGeneration);
|
MSG_WriteByte (&buf, clc.voipOutgoingGeneration);
|
||||||
MSG_WriteLong (&buf, clc.voipOutgoingSequence);
|
MSG_WriteLong (&buf, clc.voipOutgoingSequence);
|
||||||
MSG_WriteByte (&buf, clc.voipOutgoingDataFrames);
|
MSG_WriteByte (&buf, clc.voipOutgoingDataFrames);
|
||||||
MSG_WriteLong (&buf, 0x7FFFFFFF); // !!! FIXME: send to specific people.
|
MSG_WriteLong (&buf, clc.voipTarget1);
|
||||||
MSG_WriteLong (&buf, 0x7FFFFFFF); // !!! FIXME: send to specific people.
|
MSG_WriteLong (&buf, clc.voipTarget2);
|
||||||
MSG_WriteLong (&buf, 0x7FFFFFFF); // !!! FIXME: send to specific people.
|
MSG_WriteLong (&buf, clc.voipTarget3);
|
||||||
MSG_WriteShort (&buf, clc.voipOutgoingDataSize);
|
MSG_WriteShort (&buf, clc.voipOutgoingDataSize);
|
||||||
MSG_WriteData (&buf, clc.voipOutgoingData, clc.voipOutgoingDataSize);
|
MSG_WriteData (&buf, clc.voipOutgoingData, clc.voipOutgoingDataSize);
|
||||||
clc.voipOutgoingSequence += clc.voipOutgoingDataFrames;
|
clc.voipOutgoingSequence += clc.voipOutgoingDataFrames;
|
||||||
|
|
|
@ -35,6 +35,7 @@ cvar_t *cl_mumbleScale;
|
||||||
|
|
||||||
#if USE_VOIP
|
#if USE_VOIP
|
||||||
cvar_t *cl_voipSend;
|
cvar_t *cl_voipSend;
|
||||||
|
cvar_t *cl_voipSendTarget;
|
||||||
cvar_t *cl_voipGainDuringCapture;
|
cvar_t *cl_voipGainDuringCapture;
|
||||||
cvar_t *voip;
|
cvar_t *voip;
|
||||||
#endif
|
#endif
|
||||||
|
@ -3052,6 +3053,7 @@ void CL_Init( void ) {
|
||||||
|
|
||||||
#if USE_VOIP
|
#if USE_VOIP
|
||||||
cl_voipSend = Cvar_Get ("cl_voipSend", "0", 0);
|
cl_voipSend = Cvar_Get ("cl_voipSend", "0", 0);
|
||||||
|
cl_voipSendTarget = Cvar_Get ("cl_voipSendTarget", "all", 0);
|
||||||
cl_voipGainDuringCapture = Cvar_Get ("cl_voipGainDuringCapture", "0.2", CVAR_ARCHIVE);
|
cl_voipGainDuringCapture = Cvar_Get ("cl_voipGainDuringCapture", "0.2", CVAR_ARCHIVE);
|
||||||
voip = Cvar_Get ("voip", "1", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_LATCH);
|
voip = Cvar_Get ("voip", "1", CVAR_USERINFO | CVAR_ARCHIVE | CVAR_LATCH);
|
||||||
|
|
||||||
|
|
|
@ -244,6 +244,9 @@ typedef struct {
|
||||||
qboolean voipMuteAll;
|
qboolean voipMuteAll;
|
||||||
|
|
||||||
// outgoing data...
|
// outgoing data...
|
||||||
|
int voipTarget1; // these three ints make up a bit mask of 92 bits.
|
||||||
|
int voipTarget2; // the bits say who a VoIP pack is addressed to:
|
||||||
|
int voipTarget3; // (1 << clientnum). See cl_voipSendTarget cvar.
|
||||||
SpeexBits speexEncoderBits;
|
SpeexBits speexEncoderBits;
|
||||||
void *speexEncoder;
|
void *speexEncoder;
|
||||||
int voipOutgoingDataSize;
|
int voipOutgoingDataSize;
|
||||||
|
@ -402,7 +405,11 @@ extern cvar_t *cl_mumbleScale;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if USE_VOIP
|
#if USE_VOIP
|
||||||
|
// cl_voipSendTarget is a string: "all" to broadcast to everyone, "none" to
|
||||||
|
// send to no one, or a comma-separated list of client numbers:
|
||||||
|
// "0,7,2,23" ... an empty string is treated like "all".
|
||||||
extern cvar_t *cl_voipSend;
|
extern cvar_t *cl_voipSend;
|
||||||
|
extern cvar_t *cl_voipSendTarget;
|
||||||
extern cvar_t *cl_voipGainDuringCapture;
|
extern cvar_t *cl_voipGainDuringCapture;
|
||||||
extern cvar_t *voip;
|
extern cvar_t *voip;
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue