Skip to main content

Notice

Please be aware that much of the software linked to or mentioned on this forum is niche and therefore infrequently downloaded. Lots of anti-virus scanners and so-called malware detectors like to flag infrequently downloaded software as bad until it is either downloaded enough times, or its developer actually bothers with getting each individual release allow listed by every single AV vendor. You can do many people a great favor when encountering such a "problem" example by submitting them to your AV vendor for examination. For almost everything on this forum, it is a false positive.
Topic: Speex codec (Read 5187 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Speex codec

Hello guys,

Has somebody had any experience with Speex codec? I have some questions about that. I would really appreciate your help

Speex codec

Reply #1
Just ask the questions.

Speex codec

Reply #2
And please don't double-post again.

Speex codec

Reply #3
Quote
Has somebody had any experience with Speex codec?

I do 

Speex codec

Reply #4
Can we have the latest unstable version (1.1.5) for windows ?? In http://www.rarewares.org , only the 1.1.4 is available.

Thanks.

Speex codec

Reply #5
Quote
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 >> 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

Speex codec

Reply #6
I have the same problem,
i am trying to add to my application the speex,i get stream of audio of wideband(16khz) and each smaple have 16 bit, as i understood from the manual is that speex get one frame at the time to encode , (one frame for wide band is 320 sample, mean 640 bit), after encode i send it on tcp\ip to the other size and then take the stream i got from the encoder and do decode.
i see that the buf i got after decoder has many zero , and not like the stream before.
i use quality=10 and stiil it sound bad!!!
what do i do wrong?

is it write that the encoder of wideband get frame at size 640 bit , and put them in float array of 320, and in decoder i get array of float of 320 and put them into 640 bit, each 4 bit insert to 2 bit of short?

i would be greatfull if someone who understand the code behind the speex could help me with this.


Thanks,
Ayelet

 
SimplePortal 1.0.0 RC1 © 2008-2021