aboutsummaryrefslogtreecommitdiffstats
path: root/code
diff options
context:
space:
mode:
authoricculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-06-07 14:39:49 +0000
committericculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-06-07 14:39:49 +0000
commit3140bde1ea10558f821c22baaa646a4f92b195af (patch)
tree45cbba7b32a10d4e2cf3009dcbf9a72eb7464f54 /code
parent1f46e87bfdfd90e5af9927af7e19bf29389ab27e (diff)
downloadioquake3-aero-3140bde1ea10558f821c22baaa646a4f92b195af.tar.gz
ioquake3-aero-3140bde1ea10558f821c22baaa646a4f92b195af.zip
VoIP: Initial work on adding Speex preprocessor.
git-svn-id: svn://svn.icculus.org/quake3/trunk@1373 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code')
-rw-r--r--code/client/cl_cgame.c10
-rw-r--r--code/client/cl_main.c4
-rw-r--r--code/client/client.h2
3 files changed, 14 insertions, 2 deletions
diff --git a/code/client/cl_cgame.c b/code/client/cl_cgame.c
index 1c7dd2b..18a9630 100644
--- a/code/client/cl_cgame.c
+++ b/code/client/cl_cgame.c
@@ -922,12 +922,20 @@ void CL_FirstSnapshot( void ) {
int i;
speex_bits_init(&clc.speexEncoderBits);
speex_bits_reset(&clc.speexEncoderBits);
+
clc.speexEncoder = speex_encoder_init(&speex_nb_mode);
speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_FRAME_SIZE,
&clc.speexFrameSize);
speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_SAMPLING_RATE,
- &clc.speexSamplingRate);
+ &clc.speexSampleRate);
+
+ clc.speexPreprocessor = speex_preprocess_state_init(clc.speexFrameSize,
+ clc.speexSampleRate);
+
+ i = 1;
+ speex_preprocess_ctl(clc.speexPreprocessor,
+ SPEEX_PREPROCESS_SET_DENOISE, &i);
for (i = 0; i < MAX_CLIENTS; i++) {
speex_bits_init(&clc.speexDecoderBits[i]);
diff --git a/code/client/cl_main.c b/code/client/cl_main.c
index 0129558..8d72ed4 100644
--- a/code/client/cl_main.c
+++ b/code/client/cl_main.c
@@ -345,6 +345,8 @@ void CL_CaptureVoip(void)
voipPower = s; // !!! FIXME: this isn't very clever.
}
+ speex_preprocess_run(clc.speexPreprocessor, &sampbuffer[pos]);
+
// Encode raw audio samples into Speex data...
speex_bits_reset(&clc.speexEncoderBits);
speex_encode_int(clc.speexEncoder, &sampbuffer[pos],
@@ -1136,12 +1138,12 @@ void CL_Disconnect( qboolean showMainMenu ) {
int i;
speex_bits_destroy(&clc.speexEncoderBits);
speex_encoder_destroy(clc.speexEncoder);
+ speex_preprocess_state_destroy(clc.speexPreprocessor);
for (i = 0; i < MAX_CLIENTS; i++) {
speex_bits_destroy(&clc.speexDecoderBits[i]);
speex_decoder_destroy(clc.speexDecoder[i]);
}
}
-
Cmd_RemoveCommand ("voip");
#endif
diff --git a/code/client/client.h b/code/client/client.h
index 9e9b212..3df4874 100644
--- a/code/client/client.h
+++ b/code/client/client.h
@@ -36,6 +36,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#if USE_VOIP
#include "speex/speex.h"
+#include "speex/speex_preprocess.h"
#endif
// file full of random crap that gets used to create cl_guid
@@ -248,6 +249,7 @@ typedef struct {
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.
+ SpeexPreprocessState *speexPreprocessor;
SpeexBits speexEncoderBits;
void *speexEncoder;
int voipOutgoingDataSize;