[Speex-dev] Decoding only a certain frame results in different values than when decoding the entire file

Hermann Weber hermie.weber at gmx.de
Thu Dec 22 11:55:18 PST 2011

To make it complete, here is the code that I am using to encode a large 

int __stdcall SpxEncode(unsigned char* inBuf, unsigned char* outBuf, 
unsigned int inlen)
     //char *testFile;
     //FILE *ftest;
     //testFile = "test";
     //ftest = fopen(testFile, "wb");

     //take every 320 bytes
     //copy every short to float array, and make sure to put null in 
unused area

     float input[MAX_FRAME_SIZE];
     char cbits[MAX_FRAME_BYTES];
     unsigned int inBufpos = 0, j, outBufpos = 0;
     short *sinBuf;

     sinBuf = (short*) inBuf;

         j = 0;
             //copy to float array
             input[j] = sinBuf[inBufpos];
             inBufpos++; j++;
         while ((inBufpos % 160 != 0) && (inBufpos != (inlen/2)));

         //fill the rest with null
         if (inBufpos == (inlen/2))
             for (j=(inBufpos%160); j<160; j++)    input[j] = 0;

         speex_encode(encstate, input, &bits);

         /*Copy the bits to an array of char that can be written*/
         speex_bits_write(&bits, cbits, MAX_FRAME_BYTES);
         for (j=0; j<62; j++)
             outBuf[outBufpos] = cbits[j];

     while (inBufpos != (inlen/2));

     //fwrite(outBuf, 1, outBufpos, ftest);
     return 42;

More information about the Speex-dev mailing list