This page is about mp3guessenc, a small utility for analysis of audio mpeg
files and detection of the encoder used (when layer III).
Further, mp3guessenc can detect many details about the mpeg audio stream and print out lots of useful
information.
Supported streams are mpeg 1, mpeg 2 and unofficial mpeg 2.5 - layer I, layer II and layer III
of course.
Xing tag, lame tag, VBRI tag, Id3 tags (both 1.x and 2.x), APE tags (both v1 and v2), Lyrics3
tags (both v1 and v2) and MusicMatch tag (any version) are detected as well.
Now you can look inside your digital audio collection as you never did before!
length of the source audio (in samples, where available)
audio mode
global gain per channel
flags (crc, copy protection, original content, emphasis)
joint stereo frame usage
long/mixed/short/switch block usage
ancillary data details
bit reservoir, scalefactor usage and padding detection
frame histogram
Decoding of both Xing/lame and FhG VBRI vbr information tags
Encoding details from lame tag
Large file support up to 2^60 bytes (not available on old x86 OSs and on Android, though)
Support for freeformat bitstreams (up to 640 kbps)
CRC-16 verification in layer I, II and III
Validity check in bit allocation block (layer I) and in side information block (layer III)
Detected encoders:
lame
gogo
xing (new, old and very old)
helix
fraunhofer encoders (new, old and ancient)
blade
FhG enhanced bitstreams recognition: mp3Pro and mp3Surrond with detection of OFL block
Detection of the following metadata tags:
ID3v1.0 and ID3V1.1
ID3v2 (revisions 2, 3 and 4)
APE (both v1 and v2)
Lyrics3 (both v1 and v2)
MusicMatch (any versions)
Please note, however, that most of those information are only available into layer III streams.
mp3guessenc cannot get the same fine details from mpeg layer I and layer II streams.
Systems mp3guessenc will run on
mp3guessenc is available for POSIX
systems such as Linux
(it is actually developed on an Ubuntu
a LMDE
distribution) where I successfully build it on both x86 (32 bit) and AMD64 (64 bit) architectures using
gcc,
clang and
tcc, the Tiny C Compiler. Now metadata tag fields are parsed in an endian
indipendent mode, and mp3guessenc runs on big-endian architectures too
(it runs perfectly into a qemu emulated powerpc machine running
debian, so I assume any big-endian computer will run it as well
- it came to my attention that mp3guessenc-0.27.1 can be built (with minor modifications) on
AmigaOS run into
UAE emulating a
m680x0 processor). FreshPorts
provides mp3guessenc port & package for FreeBSD too.
It will also run in recent (nightly) builds of Haiku,
both 32 bit and 64 bit versions are supported. On 32 bit systems both gcc2 and latest gcc may be used for the build
(just tune the Makefile).
You will find a ready-to-go Windows(R) command line executable (mp3guessenc.exe) into the tarball,
built using mingw. It is a 32 bit executable and it runs
under ReactOS as well.
IBM's OS/2 Warp is supported too, even though its
HPFS doesn't support files bigger than 2 GB. Anyway, knowing backward compatibility is the common claim,
it should also run on any OS/2's current successor, be it
eComStation or ArcaOS.
Please note, I've built mp3guessenc on OS/2 using only the Open Watcom compiler.
Further, a prerelease version of 0.25beta2 builds into a
16 bit executable
and runs pretty well in
FreeDOS
thanks to DJGPP(read more).
I've built 0.26 preview for Android
also, and it runs smoothly on my samsung gt-i9100 (equipped with an arm v7 processor) under the geek-ish "Terminal Emulator" app.
This step is pretty straightforward (oh well, you're a dev, aren't you?) using Google's Android NDK.
If you want to feel the breeze, I suggest you to download the latest installer, unpack it and read the docs about Standalone Toolchain,
you will be able to build mp3guessenc for your preferred device using both gcc and
clang.
Last, (atm) mp3guessenc has no dependencies.
Downloads
Here you can download the latest release of mp3guessenc.
(Of course, you can also jump to
the project page on sourceforge.net and find all the previous releases)
2018/07/15, "It's happened before, it'll happen again"
Tiny fix to the loop searching for metadata before the mpeg stream.
(thruth be told, this fix was lying in my home directory shortly after 0.27.3 - lazy me it took so long before getting on sourceforge)
(and if you plan to build it by yourself, then read this)
mp3guessenc-0.27.3 (124.9 kb)
2018/02/11, "I Still Do"
More efficient metadata detection, optional integrity verifications for lame bitstreams, meaningful return codes.
2017/05/03, "Italian Espresso"
Stronger in bitstream recognition, ancillary data amount out of any layers.
mp3guessenc-0.27 (108.3 kb)
2016/12/15, "Ancient Melodies Enchanting Lightnings Into Art"
Summary:
more.
More messy files analyzed, more coherency checks, more crc16, more reliability, MORE SPEED!!!
mp3guessenc-0.26.2 (107.8 kb)
2016/12/14, "Dark Black"
Fix-only release with the only relevant change of a misplaced reference operator, now gone.
mp3guessenc-0.26.1 (104.8 kb)
2016/02/26, "Black"
Detection of mp3 streams wrapped into Wave Riff, ID3v2.4 may be found at the file tail also, various fixes (also speed related).
mp3guessenc-0.26 (125.1 kb)
2016/01/17, "Hotel Torino"
More and more tags detected and better Android support.
2016/01/18 UPDATE! My mistake, the MS Windows executables shipped into this tarball were built using a non-tested build environment, and they need a further dll (msys-2.0.dll) to run properly. I re-built the whole thing and re-packaged them into a new tarball for those who care. No changes in source code, so if you aren't a MS Windows user, there's no need to download this again.
mp3guessenc-0.26preview (109 kb)
2015/02/19, "Let It Snow"
More tags detected, Blade encoder detected and (clap, please) command line options!
mp3guessenc-0.25.2 (101 kb)
2014/07/16, "25 Days A Stranger"
Still a few more ancillary bits came to the analysis call. Furthermore, prepare for an impressive speed gain as you didn't see in the last two years!
mp3guessenc-0.25.1 (98 kb)
2014/04/28, "Fuori Dal Tempo"
Extended analysis to
the last broken frame of the stream,
more accuracy in ancillary detection (and there's a recently added screenshot too!).
UPDATE! The tarball was replaced due to a last minute critical bug fix! If you got it within 24 hours from release time, I recommend you to update!
mp3guessenc-0.25.0 (84.2 kb)
2013/09/22, "Farewell"
Small fix, source cleanup.
mp3guessenc-0.25beta2 (84.2 kb)
2013/05/24,
"List Games"
Added encoder delay and original file length for fraunhofer-encoded streams, several minor fixes
mp3guessenc-0.25beta1 (82.6 kb)
2013/03/24,
"Please Please Please Let Me Release What I Want"
Support for audio mpeg files up to 2^60 bytes (!!!), APE tag v1/v2 are now recognized, detection of
mp3Surround (here the site on the Wayback Machine) and mp3PRO streams
mp3guessenc-0.25alpha24 (64.6 kb)
2013/02/21,
"Owner Of A Lonely Release"
Finally updated the guessing engine, support for freeformat streams is now
waaay better and (I hope) complete - lots of bug-fixes, as usual
2012/04/21, "Sparrow's Nightmare"
Less warnings during analysis and more compatibility with layer III
streams
mp3guessenc-0.25alpha22 (48.1 kb)
2012/01/16, "70 Years Are Not Enough"
Free format bitstreams are now supported, new calculation for framesize
now brings great speed gain
mp3guessenc-0.25alpha21 (44.0 kb)
2011/12/26, "Smells Like Release Spirit"
This release fixes a buffer overflow, fixes printed information and
adds a Makefile
mp3guessenc-0.25alpha20 (44.2 kb)
2011/11/30, "A Release With No Name"
This release brings code optimizations, an enriched frame histogram and
compliancy with latest lame tags
mp3guessenc-0.25alpha19 (24.6 kb)
2011/05/03
Added workaround for a random appearing stack smashing error
mp3guessenc-0.25alpha18 (23.3 kb)
(I can't remember when it came)
Reworked the code for extracting lame string
mp3guessenc-0.25alpha (40.3 kb)
until 2011/03/04 (the code itself prints alpha 15)
Beginning of the journey... Added support for VBR tags and lame tag,
better support for id3v1/id3v2 tags, added lots of comments, fixed
compiler warnings, added early support for all layers (I/II/III),
string alignment, small code modifications and more, more, more...
(guess what? larger packages include win32 executable built using mingw)
You can browse all mp3guessenc releases here.
Full changelog is available here (trust me, it's worth reading).
Documentation
Lots of internet docs and technical details I've read before diving into mp3guessenc source code.
www.id3.org/d3v2.3.0
If you need to know more about id3v2, then there's no better place.
maaate.sourceforge.net/
This project is about an audio analyzer, nevertheless the home page
links to good in-depth documentation about mpeg layer I/II/III.
zlib.net/crc_v3.txt
Everything you wanted to know about CRC algorithms, but were afraid to ask.
www.mp3-tech.org/programmer/docs/mp3_theory.pdf (thanks to Gabriel Bouvigne for the link)
Another technical overview of MP3 stream format, including details for both encoding and decoding processes.
Of course there is also some stuff you can download.
standards.iso.org/ittf/PubliclyAvailableStandards/s022691_ISO_IEC_11172-4_1995(E)_Compliance_Testing.zip
Zip archive with a lot of audio mpeg files, and some of them quite challenging. Please note, the included .mpg files are actually text files (what a weird fashion of shipping mpeg samples!) and a conversion utility may do the trick for you: run xxd -r -p filename.mpg > filename.real.mpg in order to create actual audio mpeg files (I won't warn you about using proper file name, have I?).
MPEG-Layer 3 Bitstream Syntax and Decoding
(thanks to Naoki for pointing me to this)
Implementation details about an mp3 decoder. This zipfile contains the
original document in Microsoft(R) Word I-don't-know-the-version format, with a
messy layout and some missing images (they're actually a lot). I tried
to edit it in order to increase readability, so you can download this
recent version here in
OpenDocument format and here in
PDF. Note that some errors may still hide in there, you know, I'm just a human being :-)
History
In early months of 2011, I was seeking for a smart utility which
could simply tell me how much junk the many (fool) ripper/tagger/encoder
applications added into my music collection.
Surfing randomly, I stumbled upon this small utility, released back in
2002 by Naoki
Shibata. I enjoyed it very soon. I realized the code was fully
functional and reliable, nevertheless it offered room for improvements.
I made several small and tiny modifications and, after receiving
Naoki's agreement, I took over the task (and fun) to update the whole
utility. The project has its own detailed page on
SourceForge.
Contribute to the project!
Found a bug? A challenging file? Looking for usage guidelines?
Wrote a useful patch? Great ideas for new features?
Ask your questions and support the development on
the project ticket page.