[Speex-dev] Re: High pitched whine with Speex

Kevin Jenkins gameprogrammer at rakkar.org
Sun May 21 15:33:48 PDT 2006


When I just copy the microphone input buffer to the output buffer the 
sound plays OK.  But if I encode and decode the buffer through Speex I 
get a high pitched constant tone in the background.  I actually do hear 
my voice speaking when I talk, but it's faint and much quieter than the 
tone.

Here's what my data looks like:
Input is the first 5 floats of each input buffer.
Output is after Speex runs on it.

Input: 0.000 0.000 0.000 0.000 -0.000
Out: -0.029 -0.008 0.020 0.018 -0.001
Input: 0.000 0.000 0.000 0.000 0.000
Out: -0.029 -0.008 0.020 0.018 -0.001
Input: -0.000 0.000 0.000 0.000 -0.000
Out: -0.029 -0.008 0.020 0.018 -0.001
Input: -0.000 -0.000 -0.000 -0.000 0.000
Out: -0.029 -0.008 0.020 0.018 -0.001

My samples are 4 byte floats.

My sample rate is 8000

Here's pretty much all my speex code:
ENCODING INIT:
channel->enc_state=speex_encoder_init(&speex_nb_mode);
speex_encoder_ctl(channel->enc_state, SPEEX_GET_FRAME_SIZE, 
&channel->speexOutgoingFrameSampleCount);

DECODING INIT:
channel->dec_state=speex_decoder_init(&speex_nb_mode);
speex_decoder_ctl(channel->dec_state, SPEEX_GET_FRAME_SIZE, 
&channel->speexIncomingFrameSampleCount);

ENCODING:
speex_encode(channel->enc_state, (float *) inputBuffer, &speexBits);
bytesWritten = speex_bits_write(&speexBits, tempOutput+1, 2048-1);

DECODING:
speex_bits_read_from(&speexBits, (char*)(packet->data+1), packet->length-1);
speex_decode(channel->dec_state, &speexBits, (float*)tempOutput);

That's pretty much the extent of the Speex code.  For the output, I 
write all 0.0 to the buffer first, then add the equivalent inputs from 
speex.

When I copy bytes of input data, I use that 
speexOutgoingFrameSampleCount * sizeof(float) to determine how many 
bytes to consider read and written.

Any idea?


More information about the Speex-dev mailing list