HI Hermann,<br>I am not sure I understand exactly what you are trying to do.<br>Let me try to describe what I understood (I assumed your byte array starts @ 1 and not 0 as it is supposed to be in C) : <br><br>##############################<br>

CASE 1: (output is good)<br>##############################<br>   - INITILIAZE_DECODER (reset state memory)<br>   - READ bytes 1 to 124 <br>   - SpxDecode(DinBuf, DoutBuf, unsigned int Dinlen)<br>   - DECODE bytes 1 to 62<br>

             ---OUTPUT Frame 1----<br>             -293<br>             -8234<br>             2134<br>             17<br>   - DECODE bytes 63 to 124 <br>             ---OUTPUT Frame 2----<br>        -9323<br>       -732<br>

       189<br>       2329<br><br>##############################<br>CASE 2: (output is not as expected)<br>##############################<br>   - INITILIAZE_DECODER (reset state memory)<br>   - SKIP bytes 1 to 62 (This is where I get confused, do you actually skip FRAME 1 ?)<br>

   - READ bytes 63 to 124 <br>   - DECODE bytes 63 to 124 (and not 125 as you mentioned, I think it&#39;s a typo but I just want to make sure)<br>             ---OUTPUT Frame 2----<br>       732<br>       9273<br>       -799<br>

       -723<br><br><br><br>If what is described above is what you are doing, you can not expect both outputs to be identical.<br>The reason is because the decoder has a different state prior to processing FRAME 2.<br>    - In case 2, the decoder has its state reset to the default state.<br>

    - In case 1, the decoder memory state has been modified by the processing of FRAME 1.<br><br>If I got it wrong, please provide more details.<br>L.<br><br><br><div class="gmail_quote">On Wed, Dec 21, 2011 at 6:03 PM, Hermann Weber <span dir="ltr">&lt;<a href="mailto:hermie.weber@gmx.de" target="_blank">hermie.weber@gmx.de</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Sorry, it seems I have only replied to Lakhdar, not to the newsgroup.<br>
Below is my reply to Lakhdar, and I would like to make it more clear<br>
now, using some pseudo values for simplicity:<br>
<br>
I read bytes 1 to 124 from my encoded spx file.<br>
I decode themt and get the values:<br>
---Frame 1----<br>
-293<br>
-8234<br>
2134<br>
17<br>
---Frame 2----<br>
-9323<br>
-732<br>
189<br>
2329<br>
<br>
Both frames are just perfect as I need them.<br>
<br>
But now when I read bytes 63 to 125 from my encoded spx and decode it, I<br>
get the values<br>
732<br>
9273<br>
-799<br>
-723<br>
<br>
This is weird because I expected to get the encoded values<br>
-9323<br>
-732<br>
189<br>
2329<br>
<div><br>
I hope I could explain it well.<br>
</div>Am I missing something here?<br>
<div><div><br>
Thank you very much.<br>
Hermann<br>
<br>
<br>
<br>
Hi Lakhdar,<br>
<br>
I am not sure if I do anything wrong with the dec state memory.<br>
Could you perhaps take a look at what I am (perhaps wrongly) doing?<br>
<br>
int __stdcall SpxDecode(unsigned char* DinBuf, float* DoutBuf, unsigned<br>
int Dinlen)<br>
{<br>
<br>
     //char *testFile;<br>
     //FILE *ftest;<br>
     //testFile = &quot;test2&quot;;<br>
     //ftest = fopen(testFile, &quot;wb&quot;);<br>
     //fwrite(inBuf,1,inlen,ftest);<br>
     //fwrite(outBuf, 1, outBufpos, ftest);<br>
     //fclose(ftest);<br>
<br>
     //take every 62 bytes<br>
     //decode, then write to outbuf<br>
<br>
     char cbits[MAX_FRAME_BYTES];<br>
     float output[MAX_FRAME_SIZE];<br>
     short out[MAX_FRAME_SIZE];<br>
     unsigned int i,j;<br>
<br>
     unsigned char* tout; tout = (unsigned char*)&amp;out;<br>
<br>
     for (i=0; i&lt;(Dinlen/62); i++)<br>
         {<br>
         for (j=0;j&lt;62;j++)    cbits[j] = DinBuf[(i*62)+j];<br>
<br>
         speex_bits_read_from(&amp;bits, cbits, 62);<br>
         speex_decode(decstate, &amp;bits, output);<br>
<br>
         for (j=0;j&lt;160;j++) DoutBuf[j+(i*160)] = output[j];<br>
         }<br>
<br>
     return 43;<br>
}<br>
<br>
Btw, just if you wondering what I am doing... I am feeding (62 *<br>
NumberOfFramesThatIWantToRead) bytes from VB6 and return it as a float<br>
array.<br>
<br>
Greetings,<br>
Hermann<br>
<br>
Am 21.12.2011 15:26, schrieb Lakhdar Bourokba:<br>
 &gt; Hi Hermann,<br>
 &gt; Could it be your decoder state memory that is not longer sync ?<br>
 &gt; When a decoder processes a frame, it uses that frame and its memory<br>
state (affected by the previous frames) to generate the output samples.<br>
If you skip the previous frames, the decoder state memory will not be<br>
the same (as when you do full decoding) which causes the output to be<br>
different.<br>
 &gt; I hope this helps.<br>
 &gt; L.<br>
 &gt;<br>
 &gt;<br>
 &gt; On Wed, Dec 21, 2011 at 5:17 AM, Hermann Weber &lt;<a href="mailto:hermie.weber@gmx.de" target="_blank">hermie.weber@gmx.de</a>&gt;<br>
wrote:<br>
 &gt;<br>
 &gt;     Hello!<br>
 &gt;<br>
 &gt;     I am still using version 1.0.4.<br>
 &gt;<br>
 &gt;     When I have encoded a larger file and then only want to decode<br>
only one<br>
 &gt;     frame from it (for example the 2nd frame), is there anything special<br>
 &gt;     that I have to keep in mind?<br>
 &gt;<br>
 &gt;     I thought that I could simply read the bytes from the encoded<br>
file for<br>
 &gt;     example from the start position of the 2nd frame and then decode<br>
it. I<br>
 &gt;     did that, and I can play it play, but the values in the decoded 2nd<br>
 &gt;     frame are different than they are when I decode the entire file<br>
and then<br>
 &gt;     look at the values for the 2nd frame.<br>
 &gt;     I hope I could explain it well.<br>
 &gt;<br>
 &gt;     I noticed that there is a pattern in the beginning of the encoded<br>
file,<br>
 &gt;     and I am not sure if I have to take it into account somehow.<br>
 &gt;<br>
 &gt;     It would be nice if someone could tell me if something comes to<br>
his/her<br>
 &gt;     mind that I might be doing wrong.<br>
 &gt;<br>
 &gt;     Thank you very much.<br>
 &gt;<br>
 &gt;     Hermann<br>
 &gt;     _______________________________________________<br>
 &gt;     Speex-dev mailing list<br>
 &gt;     <a href="mailto:Speex-dev@xiph.org" target="_blank">Speex-dev@xiph.org</a><br>
 &gt;     <a href="http://lists.xiph.org/mailman/listinfo/speex-dev" target="_blank">http://lists.xiph.org/mailman/listinfo/speex-dev</a><br>
 &gt;<br>
 &gt;<br>
<br>
<br>
Hello!<br>
<br>
I am still using version 1.0.4.<br>
<br>
When I have encoded a larger file and then only want to decode only one<br>
frame from it (for example the 2nd frame), is there anything special<br>
that I have to keep in mind?<br>
<br>
I thought that I could simply read the bytes from the encoded file for<br>
example from the start position of the 2nd frame and then decode it. I<br>
did that, and I can play it play, but the values in the decoded 2nd<br>
frame are different than they are when I decode the entire file and then<br>
look at the values for the 2nd frame.<br>
I hope I could explain it well.<br>
<br>
I noticed that there is a pattern in the beginning of the encoded file,<br>
and I am not sure if I have to take it into account somehow.<br>
<br>
It would be nice if someone could tell me if something comes to his/her<br>
mind that I might be doing wrong.<br>
<br>
Thank you very much.<br>
<br>
Hermann<br>
_______________________________________________<br>
Speex-dev mailing list<br>
<a href="mailto:Speex-dev@xiph.org" target="_blank">Speex-dev@xiph.org</a><br>
<a href="http://lists.xiph.org/mailman/listinfo/speex-dev" target="_blank">http://lists.xiph.org/mailman/listinfo/speex-dev</a><br>
</div></div></blockquote></div><br>