[mad-dev] frame decoding questions
Russell O'Connor
roconnor@Math.Berkeley.EDU
Sat, 25 May 2002 00:15:02 -0700 (PDT)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[To: mad-dev@lists.mars.org]
On Fri, 24 May 2002, Rob Leslie wrote:
> I'm not sure what units you're using, so to clarify: the number of samples
> per channel in a frame is generally
>
> 32 * MAD_NSBSAMPLES(&frame.header)
>
> however after synthesis it is best to use the value in synth.pcm.length
> instead. (The above expression is wrong if MAD_OPTION_HALFSAMPLERATE is in
> effect.)
Hmmm, basically I'm looking for the length in bytes. Since the bytes per
sample per channel is 2, then we get 64*NBSAMPLES*NCHANNELS. Or so I was
thinking.
Since I'm seeking though the file to get the the spot the user has
requested, I don't want to be synthing data.
> > I think decode_frame returns -1 after I call decode_header. I'm not sure
> > if this the the behaviour to expect, or if I'm doing something wrong.
>
> Probably this is due to a real decoding error. If you're seeking around a
> Layer III stream, the bit reservoir may not have had an opportunity to be
> refilled, and it's normal to get errors on a few frames in this case.
So since I haven't decoded the last couple of frames, getting an error on
the first frame I decode in the middle of the stream is to be expeded?
Do you know how many frames back I would at most have to decode before I
can correctly decode my target frame? Do I need to synth those frames
too?
So basically to do perfect seeking in MP3, I would have to skip though the
headers, and keep a point back n number of frames, until I find where I
want to be. Reinitalize mad_stream, etc. Seek the file to where my back
pointer is indicating. Decode n frames silently, and then start playing
at the appropriate place in the nth frame. Whew.
- --
Russell O'Connor roconnor@alumni.uwaterloo.ca
<http://www.math.berkeley.edu/~roconnor/>
``Later generations will regard set theory as a disease from which one
has recovered.'' -- Poincare
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (SunOS)
Comment: For info see http://www.gnupg.org
iD8DBQE87zn7uZUa0PWVyWQRAqjAAJ4gZyjJPEln0HODk9ryCmTuv4IY2QCgj+iO
X8a1OKNEV5Dixg3Ryxa4Mzk=
=ttYm
-----END PGP SIGNATURE-----