# Mpg123

mpg123 ist ein freier Audioplayer an der Kommandozeile für MPEG-1-Audio. Die unterstützten Formate sind die MPEG-1-Layer 1, 2 und 3 (letzteres ist bekannt als MP3). Sein Name begründet sich in der Unterstützung dieser drei Formate. Er gehört zu den verbreitetsten MP3-Playern, und viele weitere Projekte nutzen dessen Code.

## Funktion und Eigenschaften

mpg123 dient dazu, im MPEG-1-Audio-Format vorliegende Daten zu dekomprimieren und gegebenenfalls auszugeben. Dies bedeutet, dass das Programm als kommandozeilenbasierter Abspieler für Musik dienen kann. Durch seine Optionen kann es jedoch auch als Dekomprimierstufe für andere Programme genutzt werden.

### Benötigte Rechenleistung

mpg123 hat das Ziel, die Daten in Echtzeit zu dekodieren und abzuspielen. Das heißt, das Programm soll schneller dekodieren, als der Ton ausgegeben wird. Das ermöglicht, einen Musiktitel während des Abspielens zu dekodieren. Laut Homepage ist dies beispielsweise schon mit einem auf 120 MHz getakteten 80486-Prozessor möglich. Auf vielen moderneren Rechnern erzeugt mpg123 eine sehr geringe Systembelastung, deshalb kann man mehrere Instanzen von mpg123 gleichzeitig ausführen, um beispielsweise verschiedene Räume zu beschallen. Mixerprogramme wie dermixd nutzen mehrere Instanzen von mpg123, um eine sanfte Überblendung – sogenanntes Crossfading – zwischen zwei Musiktiteln zu implementieren. Darüber hinaus hat mpg123 speziell optimierten Code für 80386, 80486, Pentium, AltiVec, MMX und 3DNow. Auf Systemen mit solchen Architekturen kann daher ein Geschwindigkeitsgewinn erreicht werden. Sollte die Rechenleistung für eine bestimmte Nutzung nicht genügen, kann man das eingebaute 2:1- und 4:1-Downsampling nutzen, welches die Samplingrate der Ausgabe auf die Hälfte oder ein Viertel reduziert, um eine höhere Geschwindigkeit zu erzielen.

### Technische Eigenschaften

Das Programm läuft auf diversen Unix-Betriebssystemen. Offiziell unterstützt werden Linux, FreeBSD, SunOS 4.1.3, Solaris 2.5, HP-UX 9.x, IRIX und seit neuerem auch macOS und Cygwin (Unix-Schicht für Windows). Weitere Portierungen auf Windows und Mac OS X existieren.
Ebenso werden viele verschiedene Geräte zur Ausgabe des Tons unterstützt. Außerdem beherrscht aber mpg123 auch die Variante, die dekodierten Daten an der Standardausgabe auszugeben. So können die Daten von einem anderen Programm weiterverarbeitet werden. Die Daten können auch als WAV in eine Datei oder roh auf die Standardausgabe geschrieben werden.
mpg123 nutzt normalerweise Gleitkommaarithmetik für die mathematischen Berechnungen, kann jedoch auch für die Nutzung von Festkommaarithmetik kompiliert werden. Dies unterscheidet mpg123 beispielsweise von MAD, welches immer Festkommaarithmetik nutzt. In vielen modernen Desktopprozessoren ist Gleitkommaarithmetik fest eingebaut und kann damit schnell verarbeitet werden. Auf Prozessoren für PDAs kann jedoch mit Festkommaarithmetik eine höhere Ausführungsgeschwindigkeit erreicht werden.

### Weitere Eigenschaften

Die MPEG-Spezifikation legt Bedingungen fest, unter denen die Wiedergabe eines Dekoders als „korrekt“ bezeichnet werden kann. Dazu wird die Abweichung der dekodierten Ausgabe zur Referenz gemessen. Diese Abweichungen dürfen einen bestimmten Wert nicht überschreiten, um die Bedingungen für die korrekte Wiedergabe nicht zu verletzen. Durch Tests wurde gezeigt, dass mpg123 diese Anforderungen erfüllt.
Pausenfreie Wiedergabe – sogenanntes Gapless Playback – bedeutet, dass zwischen abgespielten Titeln keine Pause hörbar ist. Das MP3-Format speichert die Daten jedoch in Abschnitten (Frames), so dass die Titellänge des Musikstücks nicht unbedingt der Summe der Länge der einzelnen Frames entsprechen muss. Zudem benötigt der zugrundeliegende Algorithmus zusätzliche Länge zur korrekten Wiedergabe. Daher werden zusätzliche Informationen zum korrekten Beginn und Ende des Musikstücks benötigt, um Gapless Playback zu realisieren. mpg123 wertet dafür Informationen von LAME aus. Auch wertet es die ID3-Tags aus und gibt die so gewonnenen Informationen auf der Konsole aus. Replay Gain wird ebenfalls unterstützt. mpg123 nimmt auch während des Dekodierens Tastaturbefehle an. Es gibt aber auch eine weitere Steuerungs-Schnittstelle über Standardein- und -ausgabe, mit welcher die Musikausgabe gesteuert werden kann. Einige Bedienoberflächen nutzen diese Funktionalität.

## Geschichte

mpg123 wurde von Michael Hipp 1995 als Weiterentwicklung des mpegaudio-Pakets begonnen. Mit der Zeit kamen Beiträge weiterer Programmierer hinzu, hauptsächlich optimierte Dekodierroutinen für verschiedene Prozessorarchitekturen.
Beginnend 2001 reduzierte sich die Aktivität der Weiterentwicklung an mpg123, nachdem zuvor mehrere Versionen in der 0.59-Reihe herausgebracht worden waren. Da mit der Zeit mehrere schwere Sicherheitslücken bekannt wurden, entwickelten die Linux-Distributionen Debian (ausgehend von mpg123 0.59r) und Gentoo (ausgehend von mpg123 0.59s) Patches zur Behebung dieser Sicherheitslücken. Michael Hipp wies Anfang 2005 auf diese Probleme hin und riet von der Nutzung der offiziellen, aber ungepflegten Version ab.
Neben diesen Varianten wurden von diversen Autoren Weiterentwicklungen als Patches angeboten. Im April 2005 startete Nicholas Humfrey ein Projekt auf SourceForge. Er veröffentlichte eine Version namens mpg123-gpl, basierend auf der Version 0.59 und den Debian-Patches. Als Weiterentwicklung implementierte er die Nutzung von GNU-Autoconf und portierte das Projekt auf Mac OS X. Unabhängig davon entwickelte Thomas Orgis 2005 mehrere Versionen von mpg123-thor, die basierend auf Version 0.59r einige frei verfügbare Patches einarbeitete, darunter die Debian-Sicherheitspatches. Darüber hinaus wurde die Kontrollschnittstelle für Frontends überarbeitet.
Diese beiden Projekte begannen Ende 2005 zusammenzuarbeiten. Mit der Zustimmung von Michael Hipp entwickelten sie die neue „offizielle“ Version von mpg123. Nach mehreren Beta-Versionen erschien so am 29. August 2006 die Version 0.60 von mpg123. Das Datum wurde symbolisch gewählt, eines der MP3 betreffenden Patente lief an dem Tag in Deutschland aus.

## Lizenz und Patente

Ab der Version 0.60 ist mpg123 unter der LGPL lizenziert und erfüllt so die Bedingungen für freie Software und Open Source.
Zu Beginn seiner Entwicklung wurde mpg123 jedoch noch unter der folgenden Bedingung veröffentlicht: free for private use, ask me when you want to do something commercial. Die Einschränkungen für die kommerzielle Nutzung vertragen sich jedoch nicht mit den Grundgedanken für freie Software. Viele Linux-Distributionen setzten mpg123 daher in eine non-free-Sektion oder verzichteten ganz auf diese Software.
Aufgrund dieser Situation entwickelte Joe Drew 1999 ein Skript, um mpg123 für die Nutzung in FreeAmp zu ersetzen. Er entschied sich 2001, daraus einen kompletten Ersatz namens mpg321 zu entwickeln, der sowohl vollkommen kompatibel zu mpg123 als auch freie Software sein sollte.
Michael Hipp änderte bei späteren Veröffentlichungen von mpg123 die Lizenz auf GPL und die Lizenz der mpglib auf LGPL. Damit wurde das Programm freie Software, der Bedarf für eine freie Alternative entfiel. Mit dem Release der Version 0.60 änderten die neuen Projektleiter die Lizenz für das gesamte Paket auf LGPL.
Die Fraunhofer-Gesellschaft und Thomson halten eine ganze Reihe von Softwarepatenten rund um Techniken zur Nutzung des MP3-Formats. Laut eigener Aussage verlangen sie jedoch keine Lizenzgebühren von kostenlosen Decodern. Zudem ist ein Teil dieser Patente bereits abgelaufen.

## Verbreitung und Varianten

Seit der Veröffentlichung der Version 0.60 wird mpg123 täglich rund hundert Mal von Sourceforge heruntergeladen. Hinzu kommen die Möglichkeit, das Programm direkt von der Projektseite herunterzuladen. Auch ist es in den wichtigsten Linux-Distributionen enthalten.
Michael Hipp erstellte 1998 eine Java-Variante unter dem Namen jmpg123. Diese Variante kam jedoch nie über die Version 0.1 hinaus.
Von dem Programm gibt es eine Windows-Portierung. mpg123 oder Codebestandteile davon wurden in vielen weiteren Projekten als Decoder für MP3 eingesetzt, beispielsweise XMMS, MPlayer, LAME, Xine und als Plugin für Winamp.