<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Lakhdar,<br>
    <br>
    yes, sorry, it was a typo. I am decoding bytes 63 to 124, not 63 to
    125.<br>
    Yes, Case 1 is good.<br>
    Yes, what you said is correct: As soon as I reset the memory state,
    the output is not as expected anymore.<br>
    In Case 1 (which is good), I don't reset the memory state after
    decoding 1 frame.<br>
    <br>
    In Case 2 I am not skipping the frame by skipping some bytes.<br>
    Instead I only read the bytes 63 to 124 from the encoded file and
    decode it.<br>
    <br>
    Personally, I do not care if the results are binarily the same, but
    for some reason, the output in Case 2 is so that I can not work with
    it.<br>
    I can play it, but processing it further is not possible because the
    values are different than what I expected. <br>
    <br>
    In the encoded file (when viewed with WinHex) I see something like a
    header. Is it really a header? Does it affect the decoding somehow?
    I am asking because when I decode bytes 63 to 124 only, I skip this
    header of course, and it might be an explanation why the results are
    different.<br>
    <br>
    In which way does the previous frame affect the next frame?<br>
    <br>
    Thank you so much for the help.<br>
    <br>
    Greetings,<br>
    Hermann<br>
    <br>
    Am 22.12.2011 19:53, schrieb Lakhdar Bourokba:
    <blockquote
cite="mid:CAN7bMhx0WOp99gYm=0n1Rk6FY+mSJtznfxHRr5X9qXvO96=o5A@mail.gmail.com"
      type="cite">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>
      &nbsp;&nbsp; - INITILIAZE_DECODER (reset state memory)<br>
      &nbsp;&nbsp; - READ bytes 1 to 124 <br>
      &nbsp;&nbsp; - SpxDecode(DinBuf, DoutBuf, unsigned int Dinlen)<br>
      &nbsp;&nbsp; - DECODE bytes 1 to 62<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---OUTPUT Frame 1----<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -293<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -8234<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2134<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17<br>
      &nbsp;&nbsp; - DECODE bytes 63 to 124 <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---OUTPUT Frame 2----<br>
      &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -9323<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -732<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 189<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2329<br>
      <br>
      ##############################<br>
      CASE 2: (output is not as expected)<br>
      ##############################<br>
      &nbsp;&nbsp; - INITILIAZE_DECODER (reset state memory)<br>
      &nbsp;&nbsp; - SKIP bytes 1 to 62 (This is where I get confused, do you
      actually skip FRAME 1 ?)<br>
      &nbsp;&nbsp; - READ bytes 63 to 124 <br>
      &nbsp;&nbsp; - DECODE bytes 63 to 124 (and not 125 as you mentioned, I think
      it's a typo but I just want to make sure)<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---OUTPUT Frame 2----<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 732<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 9273<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -799<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; -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>
      &nbsp;&nbsp;&nbsp; - In case 2, the decoder has its state reset to the default
      state.<br>
      &nbsp;&nbsp;&nbsp; - 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 moz-do-not-send="true"
            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>
              &nbsp; &nbsp; //char *testFile;<br>
              &nbsp; &nbsp; //FILE *ftest;<br>
              &nbsp; &nbsp; //testFile = "test2";<br>
              &nbsp; &nbsp; //ftest = fopen(testFile, "wb");<br>
              &nbsp; &nbsp; //fwrite(inBuf,1,inlen,ftest);<br>
              &nbsp; &nbsp; //fwrite(outBuf, 1, outBufpos, ftest);<br>
              &nbsp; &nbsp; //fclose(ftest);<br>
              <br>
              &nbsp; &nbsp; //take every 62 bytes<br>
              &nbsp; &nbsp; //decode, then write to outbuf<br>
              <br>
              &nbsp; &nbsp; char cbits[MAX_FRAME_BYTES];<br>
              &nbsp; &nbsp; float output[MAX_FRAME_SIZE];<br>
              &nbsp; &nbsp; short out[MAX_FRAME_SIZE];<br>
              &nbsp; &nbsp; unsigned int i,j;<br>
              <br>
              &nbsp; &nbsp; unsigned char* tout; tout = (unsigned char*)&amp;out;<br>
              <br>
              &nbsp; &nbsp; for (i=0; i&lt;(Dinlen/62); i++)<br>
              &nbsp; &nbsp; &nbsp; &nbsp; {<br>
              &nbsp; &nbsp; &nbsp; &nbsp; for (j=0;j&lt;62;j++) &nbsp; &nbsp;cbits[j] =
              DinBuf[(i*62)+j];<br>
              <br>
              &nbsp; &nbsp; &nbsp; &nbsp; speex_bits_read_from(&amp;bits, cbits, 62);<br>
              &nbsp; &nbsp; &nbsp; &nbsp; speex_decode(decstate, &amp;bits, output);<br>
              <br>
              &nbsp; &nbsp; &nbsp; &nbsp; for (j=0;j&lt;160;j++) DoutBuf[j+(i*160)] =
              output[j];<br>
              &nbsp; &nbsp; &nbsp; &nbsp; }<br>
              <br>
              &nbsp; &nbsp; 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>
              &nbsp;&gt; Hi Hermann,<br>
              &nbsp;&gt; Could it be your decoder state memory that is not
              longer sync ?<br>
              &nbsp;&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>
              &nbsp;&gt; I hope this helps.<br>
              &nbsp;&gt; L.<br>
              &nbsp;&gt;<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; On Wed, Dec 21, 2011 at 5:17 AM, Hermann Weber &lt;<a
                moz-do-not-send="true" href="mailto:hermie.weber@gmx.de"
                target="_blank">hermie.weber@gmx.de</a>&gt;<br>
              wrote:<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; Hello!<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; I am still using version 1.0.4.<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; When I have encoded a larger file and then only
              want to decode<br>
              only one<br>
              &nbsp;&gt; &nbsp; &nbsp; frame from it (for example the 2nd frame), is
              there anything special<br>
              &nbsp;&gt; &nbsp; &nbsp; that I have to keep in mind?<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; I thought that I could simply read the bytes
              from the encoded<br>
              file for<br>
              &nbsp;&gt; &nbsp; &nbsp; example from the start position of the 2nd frame
              and then decode<br>
              it. I<br>
              &nbsp;&gt; &nbsp; &nbsp; did that, and I can play it play, but the values
              in the decoded 2nd<br>
              &nbsp;&gt; &nbsp; &nbsp; frame are different than they are when I decode
              the entire file<br>
              and then<br>
              &nbsp;&gt; &nbsp; &nbsp; look at the values for the 2nd frame.<br>
              &nbsp;&gt; &nbsp; &nbsp; I hope I could explain it well.<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; I noticed that there is a pattern in the
              beginning of the encoded<br>
              file,<br>
              &nbsp;&gt; &nbsp; &nbsp; and I am not sure if I have to take it into
              account somehow.<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; It would be nice if someone could tell me if
              something comes to<br>
              his/her<br>
              &nbsp;&gt; &nbsp; &nbsp; mind that I might be doing wrong.<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; Thank you very much.<br>
              &nbsp;&gt;<br>
              &nbsp;&gt; &nbsp; &nbsp; Hermann<br>
              &nbsp;&gt; &nbsp; &nbsp; _______________________________________________<br>
              &nbsp;&gt; &nbsp; &nbsp; Speex-dev mailing list<br>
              &nbsp;&gt; &nbsp; &nbsp; <a moz-do-not-send="true"
                href="mailto:Speex-dev@xiph.org" target="_blank">Speex-dev@xiph.org</a><br>
              &nbsp;&gt; &nbsp; &nbsp; <a moz-do-not-send="true"
                href="http://lists.xiph.org/mailman/listinfo/speex-dev"
                target="_blank">http://lists.xiph.org/mailman/listinfo/speex-dev</a><br>
              &nbsp;&gt;<br>
              &nbsp;&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 moz-do-not-send="true" href="mailto:Speex-dev@xiph.org"
                target="_blank">Speex-dev@xiph.org</a><br>
              <a moz-do-not-send="true"
                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>
    </blockquote>
    <br>
  </body>
</html>