hey guys, I just compiled an application similar to sampledec.c (for
speex 1.1.10) and it was fine but when I executed it, the app exited
without doing anything. I'm using MS VC 6.0 and this was all I got -<span style="font-weight: bold;"> First-chance exception in sampledec.exe : 0xC0000005: Access Violation. </span>Has anyone encountered this / does anyone know how to deal with it? by the way, sampleenc executed perfectly...
<br>
<br>
When I removed the &quot;while&quot; loop in sampledec, the program executed fine
(I placed printf's to check which lines were executed). I also tried
running the loop only once (erasing only the while statement and
retaining the code within it) and it worked fine again. Something seems
to be happening during loop iteration that causes the program to
terminate abnormally.. any clues? thanks very much for any tip..<br>
<br>
In gratitude,<br>
Mon<br>
<br>
(Below is my code. it's almost exactly like sampleenc except I read a file stream instead of stdin)<br>
<br>
#include &quot;speex/speex.h&quot;<br>
<br>
#include &lt;stdio.h&gt;<br>
#include &lt;iostream.h&gt;<br>
<br>
void main ()<br>
{<br>
&nbsp;&nbsp;&nbsp; <span style="color: rgb(153, 255, 153);">// Definitions</span><br>
&nbsp;&nbsp;&nbsp; #define FRAME_SIZE 160<br>
&nbsp;&nbsp;&nbsp; #define FIXED_POINT<br>
<br>
&nbsp;&nbsp;&nbsp;<span style="color: rgb(153, 255, 153);"> // Variable Declarations</span><br>
&nbsp;&nbsp;&nbsp; FILE *fo, *fs;<br>
&nbsp;&nbsp;&nbsp; short spx [FRAME_SIZE];<br>
&nbsp;&nbsp;&nbsp; float pcm [FRAME_SIZE];<br>
&nbsp;&nbsp;&nbsp; char cbits [200];<br>
&nbsp;&nbsp;&nbsp; int nbBytes, n, temp;<br>
<br>
&nbsp;&nbsp;&nbsp; void *decstate;<br>
&nbsp;&nbsp;&nbsp; SpeexBits spxbits;<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; <span style="color: rgb(153, 255, 153);">// Program starts here:</span><br>
&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Starting spxdec...\n&quot;;<br>
&nbsp;&nbsp;&nbsp; fo = fopen(&quot;samp.spx&quot;,&quot;rb&quot;);<br>
<br>
&nbsp;&nbsp;&nbsp; if (fo == NULL)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Error!\n&quot;;<br>
&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Okay!\n&quot;;<br>
<br>
&nbsp;&nbsp;&nbsp; fs = fopen (&quot;pcmfile&quot;, &quot;wb&quot;);<br>
<br>
&nbsp;&nbsp;&nbsp; if (fs == NULL)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Error creating file!\n&quot;;<br>
&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;File created!\n&quot;;<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; while (!(feof(fo)))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; decstate = speex_decoder_init (&amp;speex_nb_mode);<br>
<br>
&nbsp;&nbsp;&nbsp; // Set default options for decoding:<br>
&nbsp;&nbsp;&nbsp; temp = 1;<br>
&nbsp;&nbsp;&nbsp; speex_decoder_ctl(decstate, SPEEX_SET_ENH, &amp;temp);<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; // Initialize spxbits (structure SpeexBits)<br>
&nbsp;&nbsp;&nbsp; speex_bits_init (&amp;spxbits);<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fread (&amp;nbBytes, sizeof(int), 1, fo);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fread (cbits, 1, nbBytes, fo);<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;1&quot;; // just to see whether the loop iterates<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_bits_read_from (&amp;spxbits, cbits, nbBytes);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_decode (decstate, &amp;spxbits, pcm);<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Copy 1 frame from float pcm to short spx<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (n=0; n&lt;FRAME_SIZE; n++)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; spx [n] = pcm [n];<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fwrite (spx, sizeof(short), FRAME_SIZE, fs);<br>
<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;// end of&nbsp; loop<br>
&nbsp;&nbsp;&nbsp; // Entire file has been read, decoded and saved<br>
<br>
&nbsp;&nbsp;&nbsp; speex_decoder_destroy (decstate);<br>
&nbsp;&nbsp;&nbsp; speex_bits_destroy (&amp;spxbits);<br>
&nbsp;&nbsp;&nbsp; fclose (fo);<br>
&nbsp;&nbsp;&nbsp; fclose (fs);<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Finished processing!\n&quot;;<br>
}<br>
<br>