QUOTE(CiTay @ Apr 21 2004, 01:25 PM)
And please don't double-post again.
I am sorry, I am a newbie on this forum and did not notice a forum dedicated to codecs.
Actually, I would like to show you what I do in my application and would really appreaciate if you point me the spot where I am wrong.
I am sorry for my previous post. I made a mistake assuming that I get mu-law data. No. I get linear PCM, 8 bits per second, signed. So the sequence of my actions is the following:
void CompressAndDecompress (const char* cData, int iLength = /*160*/)
{
vector <short> vecLinearPCMdata
// Speex needs linear PCM, 16 bit per sample
// Convert my signed 8 bit to signed 16 bits
for (i = 0; i < iLength; i++)
{
short cTemp = (short) (cData[i] >> 8);
short_buffer.push_back ( cTemp);
}
// now we have 160 samples. Encode the frame
// array to keep encoded frame
char cEncodedFrame [38];
speex_bits_reset(&bits);
speex_encode(state, &short_buffer [0], &bits);
int nbBytes = speex_bits_write(&bits, cEncodedFrame, 38);
/// now decode the frame
short cDecodedData [160];
char cLinearPCM8Bits [160];
speex_bits_read_from (&dec_bits, cEncodedFrame, 38);
speex_decode (speex_dec, &dec_bits, cDecodedData );
for (int j=0; j < 160; j++)
{
// convert each sample back to signed 8 bits PCM
cLinearPCM8Bits [j] = (char) (cDecodedData [j] >> 8) ;
}
}
As a result, decompressed data does not match original data. They are totally different and I can't play them. Where am I wrong?
Thanks