Hmm.. was da genau ausschlaggebend ist: Fast alles.
Denn eine mp3-datei ist variabel aufgebaut, und für die korrekte Berechnung sollte man auf fast alles vorbereitet sein.
Der Kern einer mp3 besteht aus mehreren hundert (je nach Länge) MPEG -Frames. diese beinhalten die Audiodaten. Jeder Frame beginnt mit einem Header, in dem die nötigen Informationen drin stehen, die zum Abspielen benötigt werden. Diese werden auch für die Längenberechnung benötigt.
Den Teil MPEG-HEADER auslesen ist also Pflicht. Ein MPEG HEADER beginnt mit 11 gesetzten Bits.
Jetzt KANN am Anfang einer mp3-Datei der ID3v2Tag stehen. Der kann bis zu 256MB groß sein. Diesen sollte man auch (teilweise) auslesen, um schneller zum ersten MPEG-Frame zu gelangen.
Mit VBR wirds ganz kompliziert. Normalerweise reicht es, aus der Bitrate und der Dateigröße die Anzahl der Frames zu berechnen, um die Spieldauer zu bekommen. Jeder Frame hat bei CBR die gleiche Größe.
Bei VBR kann jeder Frame eine andere Bitrate haben, also geht diese Berechnung schief. Daher haben sich die XING-Entwickler geacht: "Entwickeln wir doch einen XING-HEADER". Dieser versteckt sich im ersten MPEG-Frame. JA, ein gültiger MPEG-Frame, der keine Audiodaten enthält, sondern Informationen über das MP3-File. So zum Beispiel die Anzahl der Frames, die man zur Berechnung der Spieldauer braucht. Also muss man auch diesen auswerten.
D.h. wenn man nur den ersten MPEG-Frame sucht, kann es passieren, dass man den Xing-header trifft und Murks berechnet.
Und am Ende KANN der id3v1 (v1.1) Tag stehen. Diesen kann man vernachlässigen. 128 Bytes machen keinen Ärger.
Wie Winamp das macht? Ich vermute mal ungefähr genauso wie ich, denn ich bekomme immer diegleichen Ergebnisse wie Winamp

Auch bei "vermurksten" mp3s, wo noch anderer Müll drin steht.
Und btw: es sieht lang aus, aber es geht schnell. Eine einzelne Info ist in Nullkommanix da, und eine MP3-CD ist schneller ausgwertet als Winamp die Playlist vollständig hat.
Nur noch zur Kalrheit: Man kann die Länge nicht "auslesen", weil sie nirgendwo verlässlich drinsteht! Schliesslich ist mp3 ja kein eigentlcihes Dateiformat. Es ist ja Streaming-fähig, d.h. man kann die ersten 2 MB verpassen, und dann in das Stück einsteigen, auch wenn man das Ende noch nicht kennt. Wozu also die Länge speichern?
We are, we were and will not be.