diff options
author | icculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2008-06-07 14:39:49 +0000 |
---|---|---|
committer | icculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2008-06-07 14:39:49 +0000 |
commit | 3140bde1ea10558f821c22baaa646a4f92b195af (patch) | |
tree | 45cbba7b32a10d4e2cf3009dcbf9a72eb7464f54 | |
parent | 1f46e87bfdfd90e5af9927af7e19bf29389ab27e (diff) | |
download | ioquake3-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
-rw-r--r-- | code/client/cl_cgame.c | 10 | ||||
-rw-r--r-- | code/client/cl_main.c | 4 | ||||
-rw-r--r-- | code/client/client.h | 2 |
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; |