aboutsummaryrefslogtreecommitdiffstats
path: root/code
diff options
context:
space:
mode:
authoricculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-06-07 14:38:46 +0000
committericculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-06-07 14:38:46 +0000
commit1f46e87bfdfd90e5af9927af7e19bf29389ab27e (patch)
treec0749d9f0473d3abf60d71e0f57c7e320476bcf4 /code
parentc5f253e8b3c5b8907a568db81586885e0c71f9b5 (diff)
downloadioquake3-aero-1f46e87bfdfd90e5af9927af7e19bf29389ab27e.tar.gz
ioquake3-aero-1f46e87bfdfd90e5af9927af7e19bf29389ab27e.zip
VoIP: Don't hardcode Speex sample rate.
git-svn-id: svn://svn.icculus.org/quake3/trunk@1372 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code')
-rw-r--r--code/client/cl_cgame.c8
-rw-r--r--code/client/cl_main.c4
-rw-r--r--code/client/cl_parse.c8
-rw-r--r--code/client/client.h1
-rw-r--r--code/client/snd_openal.c4
5 files changed, 17 insertions, 8 deletions
diff --git a/code/client/cl_cgame.c b/code/client/cl_cgame.c
index e93a73e..1c7dd2b 100644
--- a/code/client/cl_cgame.c
+++ b/code/client/cl_cgame.c
@@ -923,6 +923,12 @@ void CL_FirstSnapshot( void ) {
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);
+
for (i = 0; i < MAX_CLIENTS; i++) {
speex_bits_init(&clc.speexDecoderBits[i]);
speex_bits_reset(&clc.speexDecoderBits[i]);
@@ -930,8 +936,6 @@ void CL_FirstSnapshot( void ) {
clc.voipIgnore[i] = qfalse;
clc.voipGain[i] = 1.0f;
}
- speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_FRAME_SIZE,
- &clc.speexFrameSize);
clc.speexInitialized = qtrue;
clc.voipMuteAll = qfalse;
Cmd_AddCommand ("voip", CL_Voip_f);
diff --git a/code/client/cl_main.c b/code/client/cl_main.c
index cd6a146..0129558 100644
--- a/code/client/cl_main.c
+++ b/code/client/cl_main.c
@@ -310,14 +310,14 @@ void CL_CaptureVoip(void)
}
if ((cl_voipSend->integer) || (finalFrame)) { // user wants to capture audio?
- // !!! FIXME: 8000, MONO16, 4096 samples are hardcoded in snd_openal.c
int samples = S_AvailableCaptureSamples();
const int mult = (finalFrame) ? 1 : 12; // 12 == 240ms of audio.
// enough data buffered in audio hardware to process yet?
if (samples >= (clc.speexFrameSize * mult)) {
// audio capture is always MONO16 (and that's what speex wants!).
- static int16_t sampbuffer[4096]; // !!! FIXME: don't hardcode.
+ // 2048 will cover 12 uncompressed frames in narrowband mode.
+ static int16_t sampbuffer[2048];
int16_t voipPower = 0;
int speexFrames = 0;
int wpos = 0;
diff --git a/code/client/cl_parse.c b/code/client/cl_parse.c
index e8d78dc..b00e861 100644
--- a/code/client/cl_parse.c
+++ b/code/client/cl_parse.c
@@ -759,8 +759,8 @@ void CL_ParseVoip ( msg_t *msg ) {
if ((written + clc.speexFrameSize) * 2 > sizeof (decoded)) {
Com_DPrintf("VoIP: playback %d bytes, %d samples, %d frames\n",
written * 2, written, i);
- S_RawSamples(sender + 1, written, 8000, 2, 1,
- (const byte *) decoded, clc.voipGain[sender]); // !!! FIXME: hardcoding!
+ S_RawSamples(sender + 1, written, clc.speexSampleRate, 2, 1,
+ (const byte *) decoded, clc.voipGain[sender]);
written = 0;
}
@@ -784,8 +784,8 @@ void CL_ParseVoip ( msg_t *msg ) {
written * 2, written, i);
if (written > 0) {
- S_RawSamples(sender + 1, written, 8000, 2, 1,
- (const byte *) decoded, clc.voipGain[sender]); // !!! FIXME: hardcoding!
+ S_RawSamples(sender + 1, written, clc.speexSampleRate, 2, 1,
+ (const byte *) decoded, clc.voipGain[sender]);
}
clc.voipIncomingSequence[sender] = sequence + frames;
diff --git a/code/client/client.h b/code/client/client.h
index 152d0b9..9e9b212 100644
--- a/code/client/client.h
+++ b/code/client/client.h
@@ -232,6 +232,7 @@ typedef struct {
#if USE_VOIP
qboolean speexInitialized;
int speexFrameSize;
+ int speexSampleRate;
// incoming data...
// !!! FIXME: convert from parallel arrays to array of a struct.
diff --git a/code/client/snd_openal.c b/code/client/snd_openal.c
index 5f88ab0..1cb48b8 100644
--- a/code/client/snd_openal.c
+++ b/code/client/snd_openal.c
@@ -2088,6 +2088,10 @@ qboolean S_AL_Init( soundInterface_t *si )
if (qalcCaptureOpenDevice == NULL) {
Com_Printf("No ALC_EXT_capture support, can't record audio.\n");
} else {
+ // !!! FIXME: 8000Hz is what Speex narrowband mode needs, but we
+ // !!! FIXME: should probably open the capture device after
+ // !!! FIXME: initializing Speex so we can change to wideband
+ // !!! FIXME: if we like.
Com_Printf("OpenAL default capture device is '%s'\n",
qalcGetString(NULL, ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER));
alCaptureDevice = qalcCaptureOpenDevice(NULL, 8000, AL_FORMAT_MONO16, 4096);