Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ms in sekunden und minuten stunden umrechen ? (https://www.delphipraxis.net/44263-ms-sekunden-und-minuten-stunden-umrechen.html)

mimi 16. Apr 2005 13:58


ms in sekunden und minuten stunden umrechen ?
 
Hallo,
ich habe unter DelphiForum und DelphiPraxis schon gesucht und einiges gefunden, was aber immer die gleichen fehler hatten:
die sekunden waren sprungehaft obwohl der timer auf interval 1 eingestellt ist.

ich möchte gerne die, MS umrechnen in Stunden:Minuten:Sekunden habe mir dafür eine funktion geschrieben(die soll noch mehr können, aber ich habe schon den paramter mo hinzugefügt, der jetzt noch nicht verwendet wird)

Delphi-Quellcode:
function TFmod.GetPositionStr(mo:Integer = 0):String;
var
  m,s,ms:Integer;
begin
  ms:=(FSOUND_Stream_GetTime(Music.Stream) div 1000);
  s:=ms;
  m:=s div 60;

  if s >= 60 then begin
    s:=ms+(s div 60);
    s:=s-60*(s div 60);
  end;

  result:=Format('%.2d : %.2d ',[m,s]);
  m:=0; s:=0;
end;
das mit if s > 60 habe ich gemacht weil die s größer sein können als 60 aber irgenwie stimmt die zeit nicht mit Winamp überein: habe ein zeit vergleich gemacht habe bei bis zu einer bestimmten stelle vorgeschplut und dann bei WinAmp das gleiche und es waren unterschiedliche sachen zu höhren bei und dem selben Lied(mp3)).

ich nutze FMod

mimi 16. Apr 2005 15:12

Re: ms in sekunden und minuten stunden umrechen ?
 
habs hinbekommen, hier der neue code(mit einer zusatzt funktion)
Delphi-Quellcode:
function GetMSToMinSek(ms:Integer; mo:boolean = True;ms2:Integer = 0):String;
var
  m,s:Integer;
begin
  if mo = True then begin
    ms:=ms div 1000;
    s:=ms;
    m:=s div 60;

    if s >= 60 then
      s:=s-60*(s div 60)+1;

    result:=Format('%.2d:%.2d ',[m,s]);
  end
  else begin
    ms:=(ms2-ms) div 1000;
    s:=ms;
    m:=s div 60;

    if s >= 60 then
      s:=s-60*(s div 60)+1;

    result:=Format('%.2d:%.2d ',[m,s]);
  end;

end;
wenn einer verbessungsvorschläge hatt, währe dies nicht schlecht

Gina 16. Apr 2005 15:45

Re: ms in sekunden und minuten stunden umrechen ?
 
Hallo,

s sind doch die Sekunden, oder? Hast du schonmal

Delphi-Quellcode:
s := ms mod 60;
probiert?

Oder hab ich das jetzt falsch verstanden? :gruebel:

Liebe Grüße, Gina.

mimi 16. Apr 2005 17:01

Re: ms in sekunden und minuten stunden umrechen ?
 
ja am anfang, ging aber nicht weil er mit den zaheln gesprungen ist damitmeine ich folgendes:
normalerweise gehen die sekunden ja so:
1
2
3
4
und er hat gemacht:
3
6
20
59
99
1 sek
ich vermute mal es waren ms die er da ausgeben hatte

3_of_8 16. Apr 2005 17:12

Re: ms in sekunden und minuten stunden umrechen ?
 
Vielleicht hast du das falsch verstanden, der Interval beim Timer wird in ms angegeben, nicht in s.

Gina 16. Apr 2005 17:43

Re: ms in sekunden und minuten stunden umrechen ?
 
Woher bekommst du denn die Zeit? Vom Timer?

mimi 16. Apr 2005 17:51

Re: ms in sekunden und minuten stunden umrechen ?
 
letzendlich ja, der war auf 1 gestellt jetzt ist er auf 3 gestellt.
Das hat was mit Fmod zu tuen. Wenn ich ihn auf 1 stelle läuft das Programm zu langsamm, bei 3 geht es.
Ich habe deshalb mal im FMod.de forum gefragt, dort wurde mir gesagt, es hat was mit midi dateien zu tuen.... naja, jetzt geht ja alles.... *freu*

3_of_8 16. Apr 2005 17:54

Re: ms in sekunden und minuten stunden umrechen ?
 
Der Standard Delphi Timer ist äußerst ungenau, ich würde einen anderen verwenden.

SirThornberry 16. Apr 2005 18:25

Re: ms in sekunden und minuten stunden umrechen ?
 
ein timerinterval von 3 macht keinen sinn, dein programm bekommt nur ca alle 20 ms von windows rechenzeit zugeteilt und dementsprechend reicht es auch wenn ein timer 20 als interval hat.

mimi 16. Apr 2005 20:25

Re: ms in sekunden und minuten stunden umrechen ?
 
ich habe mich verschrieben oben ich meinte 3000 das hat was mit fmod zu tuen:
Die FMusic funktion spical midi sind zu langsam:

Zitat:

Hab das jetzt mal getestet, und das gleiche Problem mit den Buttons taucht hier auch auf, allerdings ausschließlich mit MIDI-files.

Hab dann mal weiter rumgetestet, und kam auf folgendes:
Wenn man in einer Schleife sowas laufen läßt wie
Code:

WHILE FSOUND_IsPlaying()
count += 1
WEND

erhöht sich count bei mir ca. um 500000 pro Sekunde bei wav, mp3, etc.
Wenn man ähnlich dies hier nutzt:
Code:

WHILE FMUSIC_IsPlaying()
count += 1
WEND

oder auch
Code:

REPEAT
count += 1
UNTIL FMUSIC_IsPlaying()

mit irgendwelchen mod, dann erhöht sich count ebenfalls um ca. 500000 pro Sekunde.
Nutzt man eine der beiden letzten Möglichkeiten jedoch für MIDI-files, dann erhöht sich count nur um etwa 10 (!) pro Sekunde.
Der Aufruf FMUSIC_IsPlaying() bzw. FMUSIC_IsFinished() auf eine MIDI-file dauert einfach extrem lange, so dass es nicht ratsam ist, diesen in die Event-Hauptschleife zu legen, da dann die ganzen Fenster-Events extrem lange zum Abarbeiten brauchen, bzw. es zu einem Totalstau kommt, da mehr Events eingehen, als abgearbeitet werden können.

Ich habe das dann mal hier gepostet:
http://www.fmod.org/forum/viewtopic.php?t=2490
aber da gabs noch keine Antwort (allerdings steht sie eigentlich auch schon davor).
FMOD nutzt in Version 3.* DirectMusic für MIDI-files und ist von deren Antwortzeiten abhängig.
Lösung derzeit ist also, diese Schleife in einen seperaten Thread zu packen, der einfach eine globale Variable 'isplaying' setzt, welche in der echten Hauptschleife dann ausgewertet werden kann.

Mit FMOD EX, welches ja seinen eigenen MIDI-Player mitbrint, läuft das übrigens, da wird auch FMUSIC_*** mit MIDI-files 500000 mal pro Sekunde aufgerufen.
aus dem www.fmod.de forum
(es gibt dort leider keinen link bei der deutschen version...)

@3_of_8
das der Timer ungeanu ist weiß ich, aber ich dachte, es reicht aus wenn ich den von delphi nehme, weil ich wollte ja nur eine zeit anzeige schreiben(die jetzt so funktioniert wie ich sie haben wollte)
(der richtig code ist mein zweiter beitrag)

@SirThornberry
soll das heißen es mach keinen sin einen wert von <= ca 20 zu machen ?
das wuste ich noch nicht. ich dachte 1 ms heißt das windows den timer jede ms aufruft....


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz