Reading through the boards for this very question, I wasn't able to find this answer. So I dove in, and found it very easy to extract.
So here's the underworkings.
Total_Seconds = File_Length / (bitrate / 8) / 1000;
To retrieve the bitrate, you'll need to read the first 4 bytes of the file, and mask out a bitindex value. This is stored in the upper 4 bits of the 3rd byte in the file.
Examp. of mask:
BitIndex = (Byte3 AND 240) / 16
The division just shifts the bits over so we can use the result for the bitrate lookup table.
This value will be used in a lookup table.
For standard mpeg 1 layer 3, use this table
0: BitRate = -1 (currupt file?)
1: BitRate = 32
2: BitRate = 40
3: BitRate = 48
4: BitRate = 56
5: BitRate = 64
6: BitRate = 80
7: BitRate = 96
8: BitRate = 112
9: BitRate = 128
10: BitRate = 160
11: BitRate = 192
12: BitRate = 224
13: BitRate = 256
14: BitRate = 320
(Other MPEG tables exist, try
http://home.swipnet.se/grd/mp3info/frmheader/index.html for more info)
Now once you have the Bitrate, you can use the formula:
Total_Seconds = File_Length / (bitrate / 8) / 1000;
And you got the length in seconds. (simple math to calc Min:Sec).
NOTES: This does not account for variable bitrate files, or files with different Khz, Mono, etc.. So you may have to adjust accordingly.
Hope this helps someone.
Jikg