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

Kevin Jenkins gameprogrammer at rakkar.org
Sun May 21 16:55:36 PDT 2006


Changing from using floats to shorts did fix the high pitched tone 
problem.  I'm having other problems but I'll look into it more first.

SteveK wrote:
> 
> On May 21, 2006, at 6:33 PM, Kevin Jenkins wrote:
> 
>> 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?
> 
> It seems like your samples may all be in the range -1.0 .. 1.0.  For 
> speex, they should be +-32767 or so.
> 
> -SteveK


More information about the Speex-dev mailing list