Du skal ind og aflæse frameheaders:
En Mp3 fil har IKKE en samlet header for hele filen. Der er kun headers for hver individuel frame. -Og der kan være
mange tusinde frames. Det er lavet sådan med vilje, for at afspillere kan gå ind hvorsomhelst i filen, og starte
afspilning. (Er velegnet til Streaming). En frameheader fylder 32 Bits = 4 Bytes.
Se mere om frameheadere her:
http://www.mp3-tech.org/programmer/frame_header.htmlI hver frameheader er der bl.a. oplysning om bitrate for framen, som du så kan gange med framens længde, og dermed finde spilletiden.
I teorien kunne du blot hente den første frameheader, og få bitraten der, og så regne den ud:
Spilletid = Filstørrelse / Bitrate * 8
Men, der findes MP3 encoding engines (bl.a. Xing) der bruger en variabel bitrate for at øge kvaliteten.
Hvis filen er med VBR (Varible Bit Rate), så vil der findes en VBR header umiddelbart efter den første frameheader, og i den findes tilsvarende information. Desværre er der ikke en standard for VBR headere.
Desuden er du nødt til at tage højde for diverse tags fra filen, da de godt kan være store:
ID3v1 tags ligger i enden af filen, og fylder altid 128 Bytes.
ID3v2 tags ligger i starten af filen, og kan være op til 256 MB.
Mange MP3 filer har begge tags.
Så det du skal er altså at gå ind og hente nogle klumper af Bytes ud af filen fra de rigtige steder, og derefter regne lidt på dem ;)
Det nemmeste ville nok være at finde et Type Library (en .dll), der kan hjælpe dig.
Her er en god beskrivelse af problematikken, med kildekode (men det er C++):
http://www.codeproject.com/audio/MPEGAudioInfo.aspJeg ved godt, at dette ikke er præcist hvad du spurgte om, men det kan måske hjælpe dig lidt videre.