VoIP: Initial work on adding Speex preprocessor.

This commit is contained in:
Ryan C. Gordon 2008-06-07 14:39:49 +00:00
parent 26c706df15
commit c50799fcf7
3 changed files with 14 additions and 2 deletions

View file

@ -922,12 +922,20 @@ void CL_FirstSnapshot( void ) {
int i; int i;
speex_bits_init(&clc.speexEncoderBits); speex_bits_init(&clc.speexEncoderBits);
speex_bits_reset(&clc.speexEncoderBits); speex_bits_reset(&clc.speexEncoderBits);
clc.speexEncoder = speex_encoder_init(&speex_nb_mode); clc.speexEncoder = speex_encoder_init(&speex_nb_mode);
speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_FRAME_SIZE, speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_FRAME_SIZE,
&clc.speexFrameSize); &clc.speexFrameSize);
speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_SAMPLING_RATE, 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++) { for (i = 0; i < MAX_CLIENTS; i++) {
speex_bits_init(&clc.speexDecoderBits[i]); speex_bits_init(&clc.speexDecoderBits[i]);

View file

@ -345,6 +345,8 @@ void CL_CaptureVoip(void)
voipPower = s; // !!! FIXME: this isn't very clever. voipPower = s; // !!! FIXME: this isn't very clever.
} }
speex_preprocess_run(clc.speexPreprocessor, &sampbuffer[pos]);
// Encode raw audio samples into Speex data... // Encode raw audio samples into Speex data...
speex_bits_reset(&clc.speexEncoderBits); speex_bits_reset(&clc.speexEncoderBits);
speex_encode_int(clc.speexEncoder, &sampbuffer[pos], speex_encode_int(clc.speexEncoder, &sampbuffer[pos],
@ -1136,12 +1138,12 @@ void CL_Disconnect( qboolean showMainMenu ) {
int i; int i;
speex_bits_destroy(&clc.speexEncoderBits); speex_bits_destroy(&clc.speexEncoderBits);
speex_encoder_destroy(clc.speexEncoder); speex_encoder_destroy(clc.speexEncoder);
speex_preprocess_state_destroy(clc.speexPreprocessor);
for (i = 0; i < MAX_CLIENTS; i++) { for (i = 0; i < MAX_CLIENTS; i++) {
speex_bits_destroy(&clc.speexDecoderBits[i]); speex_bits_destroy(&clc.speexDecoderBits[i]);
speex_decoder_destroy(clc.speexDecoder[i]); speex_decoder_destroy(clc.speexDecoder[i]);
} }
} }
Cmd_RemoveCommand ("voip"); Cmd_RemoveCommand ("voip");
#endif #endif

View file

@ -36,6 +36,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#if USE_VOIP #if USE_VOIP
#include "speex/speex.h" #include "speex/speex.h"
#include "speex/speex_preprocess.h"
#endif #endif
// file full of random crap that gets used to create cl_guid // 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 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 voipTarget2; // the bits say who a VoIP pack is addressed to:
int voipTarget3; // (1 << clientnum). See cl_voipSendTarget cvar. int voipTarget3; // (1 << clientnum). See cl_voipSendTarget cvar.
SpeexPreprocessState *speexPreprocessor;
SpeexBits speexEncoderBits; SpeexBits speexEncoderBits;
void *speexEncoder; void *speexEncoder;
int voipOutgoingDataSize; int voipOutgoingDataSize;