[Speex-dev] Re: problems decoding speex... please help

Mo Win mowin.dev at gmail.com
Tue Dec 6 07:01:23 PST 2005


Correction: speex_encoder_destroy(state);
should be: speex_decoder_destroy(state);
in my message below.

Mon

On 12/6/05, Mo Win <mowin.dev at gmail.com> wrote:
>
> Hi all. I'm trying to decode speex using version 1.1.10's libspeex with
> fixed_point enabled. copied the sample in the manual (1.1.11) with minor
> revisions. While running the program, encountered this warning:
>
> "Packet is larger than allocated buffer : 38"
>
> when calling speex_bits_read_from (&bits, cbits, nBytes)
>
> then my program terminated unexpectedly with errors (Unhandled exception
> at 0x10225e1f ( msvcr80d.dll) in sampleDEC.exe: 0xC0000005: Access
> violation reading location 0x645c3a63.)
>
> I declared cbits as char *cbits [500]. nBytes is 38, bit rate is 15000
> bps. I'm decoding a 'speex' file created using a program much like
> sampleENC. Can anyone tell me what is wrong and how I can correct the
> problem? Thank you. For your reference I'm attaching the code. Please feel
> free to ask me questions if the information I provided is lacking. By the
> way, I am compiling for Windows using VS2005 Beta2.
>
> Thanks,
> Mon
>
> #define FIXED_POINT
>
> int main (int argc, char ** argv)
> {
>     printf ("sampleDEC.exe started!\n"); /**/
>
>     int nBytes, FrameSize, BitRate;
>     FILE *fin, *fout;
>     char *inFile, *outFile, *PEnhancement;
>     short out [500];
>     char cbits [500];
>     void *state;
>     SpeexBits bits;
>
>     state = speex_decoder_init (&speex_nb_mode);
>     speex_decoder_ctl (state, SPEEX_GET_FRAME_SIZE, &FrameSize);
>
>     inFile = argv [1];
>     outFile = argv [2];
>     PEnhancement = argv [3];
>
>     fout = fopen (outFile, "w");
>     if (fout == NULL)
>     {
>         printf ("Error creating file\n");
>         return 1;
>     }
>     printf ("Successfully opened %s for writing! \n", outFile); /**/
>
>     fin = fopen (inFile, "rb");
>     if (fin == NULL)
>     {
>         printf ("Error opening file\n");
>         return 1;
>     }
>     printf ("Successfully opened %s for decoding!\n\n", inFile); /**/
>
>     fseek (fin,(sizeof(char))*12+sizeof(int),SEEK_SET); // because of the
> way I encoded a PCM file
>
>     speex_decoder_ctl (state, SPEEX_GET_BITRATE, &BitRate);
>     printf ("decoding... BIT RATE: %i\n",BitRate);
>
>     switch (*PEnhancement)
>     { // Here I use BitRate to toggle Perceptual Enhancement
>         case 'Y':
>             BitRate = 1;
>             break;
>         case 'y':
>             BitRate = 1;
>             break;
>         case 'N':
>             BitRate = 0;
>             break;
>         case 'n':
>             BitRate = 0;
>             break;
>         default:
>             BitRate = 1;
>             break;
>     }
>     speex_decoder_ctl (state, SPEEX_SET_ENH, &BitRate);
>
>     BitRate = 0; // Henceforth BitRate is used to count the number of
> frames decoded
>
>     while (1)
>     {
>         fread(&nBytes, sizeof(int), 1, fin);
>
>         if (feof(fin))
>             break;
>
>         fread(cbits, sizeof(char), nBytes, fin);
>
>         speex_bits_read_from(&bits, cbits, nBytes);
>
>         speex_decode_int(state, &bits, out);
>
>         fwrite(out, sizeof(short), FrameSize, fout);
>         BitRate++;
>     }
>
>     printf ("nBytes is %i.\n",nBytes);
>     printf ("Decoded %i frames\n",BitRate);
>
>     speex_encoder_destroy(state);
>     speex_bits_destroy(&bits);
>
>     fclose (fin);
>     fclose(fout);
>
>     return 0;
> }
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20051206/dee6c1db/attachment.htm


More information about the Speex-dev mailing list