[Vorbis-dev] Missing audio when converting PCM to Ogg

Ilya Ganelin ilganeli at gmail.com
Tue Oct 22 19:21:08 PDT 2013


Thank you for the suggestions Ian and Ralph.

I was able to get around the issue by adding an additional call to this
chunk of code :


    vorbis_analysis_wrote(&vd,0); /* Length set to 0 to signal end of buffer */


    /* vorbis does some data preanalysis, then divvies up blocks for
       more involved (potentially parallel) processing.  Get a single
       block for encoding now */
    while(vorbis_analysis_blockout(&vd,&vb)==1){

      /* analysis, assume we want to use bitrate management */
      vorbis_analysis(&vb,NULL);
      vorbis_bitrate_addblock(&vb);

      while(vorbis_bitrate_flushpacket(&vd,&op)){

        /* weld the packet into the bitstream */
        ogg_stream_packetin(&os,&op);

        /* write out pages (if any) */
        while(!eos){
          int result=ogg_stream_pageout(&os,&og);
          if(result==0)break;
          fwrite(og.header,1,og.header_len,stdout);
          fwrite(og.body,1,og.body_len,stdout);

          /* this could be set above, but for illustrative purposes, I do
             it here (to show that vorbis does know where the stream ends) */

          if(ogg_page_eos(&og))eos=1;
        }
      }


I still have a small issue in that a small amount of the audio is
clipped at the start of the stream. In general, my input is a buffer
of PCM data that I convert to either OGG or WAV. A small amount of
data is missing in the ogg relative to the wav. Any thoughts on what
could cause this?


-Ilya Ganelin


On Tue, Oct 22, 2013 at 5:28 PM, Ian Malone <ibmalone at gmail.com> wrote:

> On 22 October 2013 22:09, Ilya Ganelin <ilganeli at gmail.com> wrote:
> > Hello,
> >
> > I am using the Ogg Vorbis library to encode PCM data into ogg format. The
> > conversion seems to work fine with the exception that the first and last
> > little bit of audio appears cut off in each converted stream. It's about
> .25
> > seconds that are lost.
> >
> > I am essentially following the example from here:
> > http://svn.xiph.org/trunk/vorbis/examples/encoder_example.c
> >
> > When I added a "Sleep(5)" between writing the ogg data to file, and
> clearing
> > the ogg/vorbis state structures, the ogg output files were closer in
> length
> > but still seemed somewhat shorter. I figured that I might have been
> > interrupting the output but this seems like a hacky way of doing things.
> >
> > Is there a more proper way of solving this issue?
> >
>
> It's very hard to say without seeing the code. What I do know is the
> sleep function[1] should not affect a simple procedural program. So,
> randomly guessing, I suspect problems with file handling and not
> closing the output stream explaining the end of the output file
> missing. Not sure about the start.
>
> [1] I assume we do both mean the C function sleep:
> #include <unistd.h>
>
>        unsigned int sleep(unsigned int seconds);
>
>
> --
> imalone
> http://ibmalone.blogspot.co.uk
> _______________________________________________
> Vorbis-dev mailing list
> Vorbis-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/vorbis-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/vorbis-dev/attachments/20131022/3dc52c8c/attachment.htm 


More information about the Vorbis-dev mailing list