Autor Beitrag
JacFab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: Fr 02.05.03 19:57 
Ich habe einr Art Audioplayer programmiert und nun möchte ich die Länge der mp3s, die ich in eine Liste einfüge, ermitteln, bevor ich sie mit fmod abspiele!
Ist das irgentwie möglich? Ich habe in diesem Forum schon einen thread gelesen, wo dies anhand der bitrate erklärt war.
Diese Methode gefällt mir allerdings nicht, da sie
A: bei variabler bitrate kompliziert wird
B: für mich nicht zu verstehen ist ;)

Kann mir jemand von euch eine andere methode sagen?
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 02.05.03 20:37 
FMod, ja?
Da gibt's die Funktion FSund_Stream_GetLengthMS, die die Länge in Millisekunden zurückgibt. Wenn du eine VBR-Datei hast, musst du vorher allerdings mit dem MPEGACCURATE-Flag die Datei öffnen, damit der MPeg-Stream durchsucht wird und die Bitraten der einzelnen Frames erkannt werden. Machst du das nicht, liefert die Funktion bei VBR-Dateien falsche Werte (mitunter seeeehr falsche Werte *g*).

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
JacFab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: Sa 03.05.03 13:08 
ich habe diese funktion schon benutzt und dann mit folgender rechnung das ganze in minuten umgerechnet.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
laenge:=FSOUND_Stream_GetLengthms(stream[2]);
                    SetRoundMode(rmdown);
                    min:=round(laenge/60000);
                    SetRoundMode(rmNearest);
                    sek:=round((laenge/60000-min)*60);
                    ListItem.SubItems.Add(inttostr(min)+':'+inttostr(sek));



leider weicht das ergebniss manchmal, besonders bei großen mp3s von dem wirklichen wert ab. allerdings nur um 2 sekunden oder so.
kann das daran liegen, dass ich diesen flag nicht benutzt habe, oder ist meine rechnung falsch?


Moderiert von user profile icontommie-lie: Code-Tags hinzugefügt
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 03.05.03 20:47 
Es könnte an dem fehlenden Flag liegen. Allerdings sollte es eigentlich keine Probleme geben, wenn es CBR-MP3s sind, weil da ja die Bitrate immer gleich ist.
Dann könnte es an deiner Referenz liegen, woher weißt du denn, daß es 2 Sekunden Fehler sind? Vielleicht ist ja dein Referenzprogramm das fehlerhafte und nicht FMod.
Oder es liegt aus irgendeiner Art und Weise an FMod selbst, daß die Bitrate falsch ausgelesen oder gedeutet wird.

An der Rechnung kann ich nichts falsches erkennen, aber du könntest Haltepunkte setzen und die Variablen in die Watch-Liste aufnehmen und zur Laufzeit überprüfen, was in ihnen steht. Vielleicht siehst du dann schon den Fehler.
Wie lang sollten denn die Dateien eigentlich sein, wenn du sagst "sehr lang"?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
JacFab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: So 04.05.03 01:26 
diese 2 sekunden unterschied treten ab ungefähr 8 minuten mp3länge auf. ich habe dies mit winamp verglichen.
aber mir ist eingefallen, dass es ja eigentlich gar nicht so schlimm ist, wenn der fehler auftritt. ich benutze einfach in meinem gesamten programm diese rechnung, dann sind bei mir halt die mp3s etwas länger ;)
das kann man ja immer noch beheben!