Re: Heuristic for determining valid MP3 file

Erik Jälevik <[email protected]>
Newsgroups gmane.comp.audio.mad.devel
Message-ID <012d01c41830$91c52610$a59d0050@Komputer>
Thanks, Glenn.

I'll have a look at your code.

Erik

----- Original Message ----- 
From: "Glenn Maynard" <[email protected]>
To: <[email protected]>
Sent: Thursday, April 01, 2004 9:58 PM
Subject: Re: [mad-dev] Heuristic for determining valid MP3 file


> On Thu, Apr 01, 2004 at 02:00:44PM +0100, Erik Jälevik wrote:
> > What's a good heuristic for determining whether a file is a valid MP3 or
not?
> >
> > My first thought was to grab a chunk at the beginning of the file and
repeatedly
> > call mad_header_decode until it comes back with a header and take that as an
> > indication that the file is valid.
> >
> > However, on trying this out on the first 10k of a plain text file,
> > mad_header_decode still returns a header found at 8k but with wrong data in
it.
> > Maybe this is due to it just looking for the sync bits and this file
happened to
> > have them within its first 10k?
> >
> > Is there a better way of doing this? Maybe start trying to decode and if
more
> > errors than a certain threshold occur, assume the file is not valid?
>
> I read up to 25000 (arbitrary) bytes of data.  Fatal errors are fatal;
> the only errors I handle are MAD_ERROR_LOSTSYNC, MAD_ERROR_BADCRC (which
> I don't have a test case for), and MAD_ERROR_BUFLEN/MAD_ERROR_BUFPTR.
>
> More specifically, I count the number of bytes read in a given pass; if
> more than the threshold is read without getting a good packet, I bail.
> (I also explicitly subtract things like Xing and ID3 headers from this
> count; ID3v2 headers can easily be larger than that.)
>
> The primary case where this matters is WAVs with MP3 data in them, and
> unknown headers.  This handles those fine (though why people are putting
> MP3 data in WAVs is well beyond my comprehension).
>
> My actual code is at
>
>
http://cvs.sourceforge.net/viewcvs.py/*checkout*/stepmania/stepmania/src/RageSoundReader_MP3.cpp?rev=HEAD
>
> See RageSoundReader_MP3::do_mad_frame_decode.
>
> (Any comments on the way I'm doing this are appreciated.  I havn't received
> any bug reports due to mis-detected files in quite a while.)
>
> -- 
> Glenn Maynard
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.