Avatar billede fizz Nybegynder
06. september 2007 - 21:45 Der er 5 kommentarer og
1 løsning

længde på mp3/musik

nu har jeg bladret en time på eksperten uden at finde et svar der dur...

Hvordan finder jeg ud af hvor lang tid en musikfil varer?

og følgende svar dur ikke:
"opret en timer som tæller hvor mange frames der er spillet og divider... bla bla"

jeg vil helst holdemin kode til et modul hvis det kan lade sig gøre.... tak
Avatar billede fizz Nybegynder
08. september 2007 - 00:08 #1
jeg venter med spænding på et svar :-)
Avatar billede tjacob Juniormester
10. september 2007 - 17:50 #2
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.html

I 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.asp

Jeg ved godt, at dette ikke er præcist hvad du spurgte om, men det kan måske hjælpe dig lidt videre.
Avatar billede fizz Nybegynder
11. september 2007 - 22:54 #3
der er ikke en indbygget funktion til at gøre det med i feks. winmm.dll? eller sån noget?
Avatar billede tjacob Juniormester
12. september 2007 - 09:11 #4
Ikke såvidt jeg ved.
Det er normalt sådan at Microsoft ikke bruger ret meget energi på teknologier, de ikke selv har opfundet (har patent på), som f.eks. MP3 formatet.

Men der er naturligvis andre muligheder, f.eks, findes der en masse API-funktioner lavet til WinAmp.

Der er også en her: http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=1975&lngWId=10

men den er dog lavet til VB.NET
Avatar billede fizz Nybegynder
15. oktober 2007 - 12:23 #5
.... :-( lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester