314 lines
12 KiB
Text
314 lines
12 KiB
Text
* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* mpg123 - MPEG 1.0/2.0/2.5 audio player *
|
|
* README for version 1.x.y, dated at 29.06.2025 *
|
|
* *
|
|
* ...still the fastest MPEG audio player for UNIX ;) *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
0. Stuff
|
|
|
|
For building/installation info see INSTALL.
|
|
|
|
The mpg123 project was started by Michel Hipp and is now being maintained
|
|
by Thomas Orgis. The source code contains contributions from quite a few
|
|
people - see AUTHORS for more info.
|
|
|
|
It is Open Source software licensed mostly under the LGPL v2.1, COPYING
|
|
for details. Patents on MPEG audio used to be an issue, but around 2017
|
|
the last patents should have expired. I'm no lawyer, that is just my
|
|
opinion, of course. Get your own to make sure (opinion or lawyer, whatever
|
|
you prefer).
|
|
|
|
Project's official website URL is
|
|
|
|
https://mpg123.org
|
|
|
|
(or https://mpg123.orgis.org as fallback address if there is a problem
|
|
with the DNS forwarding)
|
|
|
|
for the traditional home page and
|
|
|
|
https://sourceforge.net/projects/mpg123
|
|
|
|
for sourceforge.net based services like download mirrors, mailing lists
|
|
and bug/feature trackers.
|
|
|
|
|
|
1. Introduction
|
|
|
|
This is a console based decoder/player for mono/stereo mpeg audio files,
|
|
probably more familiar as MP3 or MP2 files.
|
|
It's focus is speed. We still need some low-end benchmarks for the
|
|
current version, but playback should be possible even on i486 CPUs. There
|
|
is hand-optimized assembly code for i586, MMX, 3DNow, SEE and 3DNowExt
|
|
instructions, while generic code runs on a variety of different platforms
|
|
and CPUs.
|
|
It can play MPEG1.0/2.0/2.5 layer I, II, II (1, 2, 3;-) files (VBR files
|
|
are fine, too) and produce output on a number of different ways: raw
|
|
data to stdout and different sound systems depending on your platform
|
|
(see INSTALL).
|
|
Most tested are Linux on x86 and Alpha/AXP and MacOSX on ppc as the
|
|
environments the current developers work in.
|
|
We are always thankful for user reports on success (and failure) on
|
|
any platform!
|
|
|
|
|
|
2. Contact
|
|
|
|
short:
|
|
|
|
mpg123-devel@lists.sourceforge.net
|
|
mpg123-users@lists.sourceforge.net
|
|
or
|
|
maintainer@mpg123.org
|
|
|
|
long: see doc/CONTACT
|
|
|
|
|
|
3. Interface/Usage
|
|
|
|
Please consult the manpage mpg123(1). Some starter info follows.
|
|
|
|
3.1 Simple Console Usage
|
|
|
|
Mpg123 is a console program - normally it just plays a list of files
|
|
you specify on command line and that's it. See the included manpage or
|
|
|
|
mpg123 --help
|
|
|
|
or, for the full story,
|
|
|
|
mpg123 --longhelp
|
|
|
|
on command line syntax/options. I encourage you to check out the --gapless
|
|
and --rva-album/--rva-mix options:-)
|
|
|
|
In the simple "mpg123 file1.mp3 file2.mp3" mode, the only thing you can
|
|
do to interact is to press Ctrl+C to skip to next track or end the whole
|
|
playback if pressing it twice.
|
|
|
|
Note that this Ctrl+C behaviour is special to this mode; when any of
|
|
the following is activated, Ctrl+C will just kill the program like you
|
|
would expect normally (this changed from earlier versions).
|
|
|
|
3.2 Advanced Console Usage
|
|
|
|
You can specify the option -C to enable a terminal control interface
|
|
enabling to influence playback on current title/playlist by pressing
|
|
some key:
|
|
-= terminal control keys =-
|
|
[s] or [ ] interrupt/restart playback (i.e. '(un)pause')
|
|
[f] next track
|
|
[d] previous track
|
|
[]] next directory (next track until directory part changes)
|
|
[[] previous directory (previous track until directory part changes)
|
|
[b] back to beginning of track
|
|
[p] loop around current position (don't combine with output buffer)
|
|
[.] forward
|
|
[,] rewind
|
|
[:] fast forward
|
|
[;] fast rewind
|
|
[>] fine forward
|
|
[<] fine rewind
|
|
[+] volume up
|
|
[-] volume down
|
|
[u] (un)mute volume
|
|
[r] RVA switch
|
|
[v] verbose switch
|
|
[l] list current playlist, indicating current track there
|
|
[t] display tag info (again)
|
|
[m] print MPEG header info (again)
|
|
[c] or [C] pitch up (small step, big step)
|
|
[x] or [X] pitch down (small step, big step)
|
|
[w] reset pitch to zero
|
|
[k] print out current position in playlist and track, for the benefit
|
|
of some external tool to store bookmarks
|
|
[h] this help
|
|
[q] quit
|
|
|
|
You can change these bindings to key to your liking by modifying term.h .
|
|
|
|
Note: This interface needs not to be available on _every_ platform/build.
|
|
|
|
Another note: The volume up and down is performed by changing the scale
|
|
factor (like the -f parameter) ... so the audio is scaled digitally in
|
|
the given range of the output format (usually 16bits). That means the
|
|
lowering the volume will decrease the dynamic range and possibly lessen
|
|
the quality while increasing volume can in fact increase the dynamic
|
|
range and thus make it better, if you deal with a silent source and no
|
|
clipping is necessary.
|
|
It is a good idea to use RVA values stored in the file for adjusting
|
|
low volume files, though - mpg123 handles that in addition to your
|
|
volume setting.
|
|
|
|
3.3 Control Interface for Frontends
|
|
|
|
There used to be several interfaces for frontends left over from that
|
|
past, but only one of them remains for the present and future:
|
|
|
|
The Generic Control Interface
|
|
|
|
It contains of communication of textual messages via standard input to
|
|
mpg123 and responses to standard output unless the -s switch for output
|
|
of audio data on stdout is used - then the responses come via stderr.
|
|
|
|
See doc/README.remote for usage.
|
|
|
|
|
|
4. Speed
|
|
|
|
mpg123 is fast. Any faster software player is probably based on some
|
|
hacked mpg123;-)
|
|
MPlayer included mpg123 source code in it's mp3lib and we have to
|
|
be thankful for the MPlayer folks adding SSE, 3DNowExt and AltiVec
|
|
optimizations over the years, which we were able to backport.
|
|
|
|
mpg123 includes the AltiVec optimization since version 0.61 and the SSE
|
|
and 3DNowExt optimizations since 0.66 .
|
|
Also, version 0.66 adds the merged x86 optimization build, which includes
|
|
every applicable optimization for x86 cpus except the one for i486,
|
|
wich is a bit special.
|
|
|
|
Now mpg123 catched up with MPlayer's mp3lib concerning decoding speed
|
|
on my Pentium M (which supports SSE):
|
|
Decoding a certain album (Queensryche's Rage for Order) to /dev/null took
|
|
22.4s user time with mpg123-0.66 compared to 24.7s with MPlayer-1.0rc1 .
|
|
|
|
Also, beginning with mpg123 1.8.0, there are fresh x86-64 SSE
|
|
optimizations (provided by Taihei Monma) which make mpg123 the fastest
|
|
MPEG audio decoder in my knowledge also on current 64bit x86 systems.
|
|
Manual optimizations continued with AVX probably being the last vector
|
|
instruction set that makes sense to implement the decoder for.
|
|
|
|
In 2025, a Core i7-10710U CPU needs 5.97 s for Queensryche's Rage for
|
|
Order with the AVX decoder, 6.01 s with x86-64 (SSE) and 9.05 s with
|
|
generic C code from the Ubuntu 22.04 build of mpg123 1.29.3.
|
|
|
|
|
|
5. Accuracy
|
|
|
|
The mpg123 engine is able to decode in full compliance to ISO/IEC 11172-3,
|
|
for all three layers, using floating point or integer math (the latter
|
|
since 1.8.1).
|
|
Accuracy of 16bit output depends on specific optimization in use and
|
|
compile-time choice about the rounding mode (which is performance
|
|
relevant).
|
|
|
|
The ISO test suite is incorporated in the mpg123 subversion repository
|
|
under svn://orgis.org/mpg123/test, nightly tests of a build (with
|
|
high-quality 16bit rounding) are published on the mpg123 website.
|
|
|
|
Dithered 16bit output is available as an option (the --cpu choices ending
|
|
with _dither). See
|
|
|
|
http://dither123.dyndns.org
|
|
|
|
on the whereabouts.
|
|
|
|
6. History
|
|
|
|
A looooong time ago (mid-90s), Michael Hipp wrote some initial mpg123
|
|
and made it _the_ Unix console mp3 player in the following years.
|
|
The exact date of birth is fuzzy in human memory, but according to the
|
|
master himself (Michael) mpg123 started in 1994 as an MP2 player which
|
|
a year later, 1995, gained MP3 ability.
|
|
The core decoder files have mostly 1995 as their birth year listed,
|
|
so one can say that mpg123 as the layer1,2,3 player was born in 1995.
|
|
In any case, that is a looooong time ago for a media player - especially
|
|
for one that is still alive!
|
|
|
|
This is the historic description:
|
|
|
|
This isn't a new player. It's a fully rewritten version originally
|
|
based
|
|
on the mpegaudio (FHG-version) package. The DCT algorithm in the
|
|
synthesis filter is a rewritten version of the DCT first seen
|
|
in the maplay
|
|
package, which was written by Tobias Bading
|
|
(bading@cs.tu-berlin.de). The
|
|
rewrite was necessary, because the GPL may not allow this
|
|
copyright mix.
|
|
The mpegaudio package was written by various people from the
|
|
MPEG/audio
|
|
software simulation group. The maplay is under GPL .. You can
|
|
find the
|
|
original source code and the mpegaudio package on:
|
|
ftp.tnt.uni-hannover.de.
|
|
|
|
Especially layer3.c common.c and mpg123.h is based on the
|
|
dist10 package.
|
|
The code is fully rewritten but I'm using sometimes the
|
|
same variable names or similar function names as in the
|
|
original package.
|
|
|
|
In the current layer3.c I'm using a DCT36 first seen in Jeff
|
|
Tsay's
|
|
(ctsay@pasteur.eecs.berkeley.edu) maplay 1.2+ package. His code is
|
|
under GPL .. I also tried the enhancement from Mikko Tommila. His
|
|
code is also in layer3.c (but it's disabled at the moment, because
|
|
it was slightly slower than the unrolled 9 point DCT (at least on
|
|
_my_ system)). Theoretically it should be faster. You may try
|
|
it on
|
|
your system.
|
|
|
|
Well, that's how it started...
|
|
Official development ceased due to the typical lack-of-time syndrome
|
|
around 2002 and the free-floating patches began to seize the day.
|
|
|
|
But before that, Michael wrote or rewrote the essential code; others
|
|
contributed their bits.
|
|
The main message is:
|
|
|
|
Code is copyrighted by Michael Hipp, who made it free software under
|
|
the terms of the LGPL 2.1.
|
|
|
|
Please see doc/ROAD_TO_LGPL, COPYING and AUTHORS for details on that. Note
|
|
that the only notable legacy non-LGPL file was the old alsa output that
|
|
didn't work with alsa 0.9/1.0 anymore.
|
|
Also, there has been a libao output in the betas 0.60 for a short
|
|
period. Libao being generally problematic for us because of its
|
|
GPL license, this output is not distributed anymore in the release
|
|
packages. There is now a new, LGPLed alsa output that made both the old
|
|
alsa and libao obsolete for our purposes.
|
|
So, the distributed mpg123 releases actually only contain LGPL code, but
|
|
you get the other files from our subversion repository if you checkout
|
|
the trunk / version tags.
|
|
|
|
There has been quite some confusion about the licensing and "freeness"
|
|
of mpg123 in the past.
|
|
The initial "free for private use, ask me when you want to do something
|
|
commercial" license caused some people to avoid mpg123 and even to write
|
|
a replacement mimicking the interface but using a different decoding
|
|
engine - what was not actively developed for too long but entered the
|
|
"free" software sections.
|
|
|
|
The Debian (non-free section) and Gentoo distributions cared about the
|
|
last stable and the last development release of mpg123 over the years
|
|
with mainly applying security fixes. Thanks go to the distribution
|
|
maintainers for not letting it alone to bitrot over the years.
|
|
|
|
Thomas Orgis started to hack on mpg123 in 2004 while working on his
|
|
personal audio experience with mixplayd and later DerMixD, utilizing
|
|
the generic control interface. In Feb 2005, he crammed control interface
|
|
improvements together with Debian's r19 fixes and released the personal
|
|
fork/patch named mpg123-thor.
|
|
Little later that year, Nicholas J. Humphrey independently created the
|
|
sourceforge project and released an autotooled 0.59r under official GPL
|
|
flag with Debian and MacOSX fixes.
|
|
In the beginning of 2006, Thomas finally decided that he could work
|
|
"officially" on mpg123 and contacted Michael Hipp for taking over
|
|
maintainership.
|
|
Michael was all-positive about letting mpg123 really live again (and
|
|
perhaps see version 1.0 some time;-) and also pointed at the sourceforge
|
|
project that didn't see much activity since the initial release.
|
|
A lot of emails and some weeks later there was the two-developer team
|
|
of Nicholas and Thomas working on merging their mpg123 variants as well
|
|
as adding some features and fixes to let it shine again.
|
|
|
|
And there we are now...
|
|
|
|
7. End
|
|
|
|
Have fun!
|
|
____________
|
|
Thomas Orgis
|