Page 1 of 2 1 2 LastLast
Results 1 to 15 of 19

Thread: Bug in AudioLab van Mitov?

  1. #1
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458

    Bug in AudioLab van Mitov?

    Beste allemaal,

    Is er iemand bekend met AudioLab van Mitov? Ik heb een vermoeden dat er een bug in zit.
    De duration time van een *.mp3 is lager dan de Current time en dat is toch gek?

    Ik heb om te illustreren een form met een TALLAVAudioPlayer en een memo.

    Code:
    procedure TForm1.ALLAVAudioPlayer1Progress(Sender: TObject; StartSample,
      EndSample, CurrentSample: Int64);
    begin
    Memo1.Lines[0] :='Current time: '+ IntToStr(ALLAVAudioPlayer1.CurrentTime);
    Memo1.Lines[2] := 'Duration time: '+ IntToStr(ALLAVAudioPlayer1.DurationTime);
    end;
    Name:  Screen.jpg
Views: 416
Size:  16.5 KB

    Iemand bekend hiermee? Ik heb de 'free for non commercial use' versie dus alleen de dcu's
    En het is niet met wave bestanden, maar alleen met gecomprimeerd formaat. (IIG bij *.mp3).
    Greetzz Jacco

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Durationtime wordt soms geschat en gaat ook bij veel "echte" mp3 spelers mis bij variabele bitrate mp3s.

    Je kan de duur van een nummer op twee manieren berekenen:

    - Grootte van file (minus headers) delen door de bitrate in de eerste header
    - door de hele file heenlopen en per frame grootte/bitrate te berekenen en bij elkaar op te tellen.

    De laatste werkte sowieso niet bij streaming, en leest de file twee keer, wat niet altijd gewenst is.


    Het zou ook nog kunnen dat de definitie van het tijdstype simpelweg anders is.

  3. #3
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    marcov: fantastisch. Om eens bij de eerste te beginnen. Hoe doe ik dat? Oftewel: hoe splits ik een file in headers etc.?
    Maar goed: de duur heb ik al want die klopt (duration time). alleen current time klopt niet, die is dus groter dan de duration.
    Misschien kan iemand me op weg helpen om met een kloppende durationtime de current time te berekenen. De player heeft geen onstart of onplay event oid. alleen een onstop en onprogress event.


    Definitie van tijdstypen is volgens de site van Mitov hetzelfe (nano secs).
    Greetzz Jacco

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Als het probleem in de currenttime zit, dan weet ik het niet. Wat ik zei gold voor de totaaltijd.

    Begint currenttime soms niet met 0 aan het begin van het nummer?

  5. #5
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Ja currenttime begint wel met 0. Ik weet niet of er forumlezers zijn die ook AudioLab gebruiken en er ook tegenaan lopen en/of er een oplossing voor gevonden hebben.


    [Edit] Er zit wel regelmaat in. Als ik 2 players op een form zet met elk een ander mp3 file lopen de currenttime wel gelijk. dus het moet om te rekenen zijn
    Misschien kan iemand me helpen met omrekenen 10 seconden heeft een waarde van 32266448979. Dit is uitgerekend met 'GetTickCount'
    Ik heb weinig verstand van wiskunde dus hier een formule voor verzinnen gaat even boven mijn pet.
    Dus:
    DurationTime (in nanosecs) = 1577534693
    10 sec. CurrentTime heeft een waarde van 32266448979
    Hoe reken ik dit dan om?
    [/Edit]
    Last edited by Bolus; 22-Feb-15 at 11:15.
    Greetzz Jacco

  6. #6
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik heb er geen verstand van. Maar als ik jouw waarde omzet via een omrekentabel dat kom ik uit op 1,5 seconde (1577534693) en 32,3 seconde (32266448979).
    In principe wordt het getal met 9 stappen opgeschroven naar links.
    Dan zal het worden:

    Seconde (double) := nanoseconde / 1000000000
    Delphi is great. Lazarus is more powerfull

  7. #7
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Bedankt voor je reactie, maar was het maar zo.
    Nu is dus (met of zonder rekentabel) de current time hoger dan de duration time. Dus een liedje duurt 1,5 seconde en na het intro zit je op een current van 32,3 seconde. Zo rekenen we dus de verkeerde kant op.

    Als je van nanoseconde rekent naar een TimeFormat dan is 1577534693 geformat: (nn:ss:zzz , 02:37:753);
    Dit is durationtime.
    Bij de currenttime zou ik volgens Mitov ook nanosecs terug moeten krijgen, maar dat is niet zo. Ik krijg iedere seconde (32266448979 / 10 = 3226644897,9) terug.
    Mijn vraag is dus eigenlijk: hoe reken ik van 3226644897,9 (1 seconde) naar 1577534693 ( 2 minuut 37 en 753 milisecs)?
    Kun je met deze waardes een formule maken die altijd klopt?
    Greetzz Jacco

  8. #8
    Dan zou het dus 1577534693 / 157,753 (2:37.753) = 10000029,74903805 per seconden moeten zijn? Waarschijnlijk dus gewoon 10000000. Dus die eindtijd klopt wel. (als dit bestand ook 2 minuut 37 seconden en 753 milliseconden duurt.)

    Die 32266448979 is echter wel heel raar. Krijg je die ook echt elke 10 seconden? Je zou dit eens met een loopje kunnen echo'en naar een memo en kijken of er elke 10 seconden ook echt 32266448979 tussen zit. Test dit overigens ook uit met meerdere bestanden want het zou zo maar kunnen zijn dat het bij een ander bestand weer anders is (bijvoorbeeld vermenigvuldigd met een bitrate factor ofzo)

    Wat betreft de formule... (als die 3226644897,9 p/seconden klopt). Dan zou je dus een factor van 322,66448979 hebben.... (3226644897,9/10000000) en heeee... zou dat niet de bitrate van 320Kbps kunnen zijn (misschien zit er een kleine afwijking in jouw meting)

    Je zou je currenttime dus moeten delen door 322,66448979 (of 320 afhankelijk van de nauwkeurigheid van jouw meting) en daarna door 10000000 om op de goede seconden uit te komen. Maar nogmaals... dit moet je dus ook met bestanden uittesten die een variabele bitrate hebben of een lagere bitrate om te zien of het altijd hetzelfde is.

  9. #9
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Ik heb het getest met GetTickCount en gestart met een button. en getimed in de OnProgress van de player. Heb het ook getest met 20 seconden en zelf vermenigvuldigd en ik had een verschil van 1. Lijkt me op zo'n getal te verwaarlozen (misschien met afronden te maken?).
    Ik heb ook getest om 2 players op een form 2 verschillende files gelijktijdig te laten lopen en de currenttime liep toen precies gelijk. Dus de bitrate zou een logische verklaring zijn.
    Als alle mp3's in dezelfde bitrate staan zou de formule kloppen. Ik heb niet zoveel verstand van bitrate en zo, maar is elke mp3 dezelfde bitrate? of kun je de bitrate van een bestand bepalen in Delphi? Dan kun je dat ook in de formule toepassen uiteraard.

    Wat mij, na jou verhaal, het meest logisch lijkt is inderdaad dat je de bitratefactor terugkrijgt.

    Dank voor je antwoord!
    Greetzz Jacco

  10. #10
    Je zou de theorie vrij gemakkelijk uit kunnen testen door even een bestand te pakken met een bitrate van 196Kbps of 128Kbps. Als de factor dan 196 of 128 dan klopt de theorie. Een mp3 heeft een bitrate (zie ook http://en.wikipedia.org/wiki/MP3#Bit_rate). Deze bitrate zal waarschijnlijk ook wel ergens in het ALLAVAudioPlayer-object staan (lijkt mij) en anders valt ie wel uit de header of ID3 info te halen. Het wordt echter wat moeilijker als de bitrate variabel (VBR) is. Dan ben ik nenieuwd wat voor waardes je voor die currenttime terug krijgt.

  11. #11
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Eeuuhh ik denk toch niet dat we gelijk hebben.

    Even wachten.......
    Greetzz Jacco

  12. #12
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Filename: Alpenzusjes - Kontebonke.mp3
    Folder: C:\Users\Jacco\Music\Carnaval
    File Type: 44100Hz, 16-bit, Stereo
    Uncompressed Size: 26.54 MB (27,833,020 bytes)
    File Format: mp3PRO® (FhG)
    MPEG Layer-3, 256 Kbps (Stereo)
    Size on Disk: 4.81 MB (5,059,202 bytes)
    Last Written (local): 2/19/2015 18:34:45.923
    Length: 2:37.783
    6,958,255 samples

    Informatie uit Cool Edit
    Greetzz Jacco

  13. #13
    Hobby fröbelaar
    Join Date
    Nov 2002
    Location
    Goes
    Posts
    458
    Dus de bitrate klopt dan niet als ik het goed begrijp :S
    Aantal Samples ook niet helemaal Player.SampleCount(Int64) geeft 6956928 terug. Klopt dus wel een heel eind, maar niet helemaal.
    Alleen de bitrate zoals we die hierboven benaderd hebben verschilt wel erg. 256-320Kbps

    En toch moet het bitrate gerelateerd zijn: 2 mp3 's met een verschillende bitrate hebben ook een andere CurrentTime
    Last edited by Bolus; 22-Feb-15 at 19:41.
    Greetzz Jacco

  14. #14
    Quote Originally Posted by Bolus View Post
    En toch moet het bitrate gerelateerd zijn: 2 mp3 's met een verschillende bitrate hebben ook een andere CurrentTime
    Is er een verhouding tussen te zien? Welke waarde bij 10 seconden met 128Kbps en 196Jbps?

    Ik kan trouwens geen TALLAVAudioPlayer vinden in AudioLab van Mitov.

    (Je kunt natuurlijk ook helemaal overschakelen op een andere Audio library, zoals BASS)

  15. #15
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Zo'n vijf jaar geleden heb ik eens een kleine MP3 scanner hier op het forum geplaatst,
    maar ik kan hem niet meer terugvinden helaas; ik kwam niet verder dan deze post,
    waarin ik een verwijzing maak naar betreffende project (maar later weer verwijderd heb).

    Click image for larger version. 

Name:	MPEGAudioTest.png 
Views:	141 
Size:	41.4 KB 
ID:	6899

    Hier nogmaals de code voor de liefhebber: MPEGAudioTest.zip
    • Eerst even de HexViewer installeren of de code zo aanpassen dat hij @runtime
      wordt neergezet
    • Ook zorgen dat je een (met mijn code) werkende MD5-unit hebt, anders even
      uitcommenten.

    Een gecompileerde versie heb ik eventueel nog hier staan.

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •