![]() |
reNamed: Umrechnungsprobleme bei Zeitanzeige von Sounddatei;
Hallo,
weiss vielleicht jemand den Umrechnungsfaktor, den ich einsetzen muss, wenn ich von Integer nach String konvertiere; es geht um einen Timer, also sollte er so genau wie möglich sein; Bislang hab ich immer gedacht, der sei exakt 1000; dann hat der Timer aber auf die Zuweisung
Delphi-Quellcode:
immer teilweise, d.h. alle 15 oder 20 Sekunden eine Sekunde übersprungen (z.B. von 18 auf 20, anstatt auf 19);
Sekunden := mediaplayer1.Position
Also, ich denke diesmal ist mit SourceCode nicht viel zu machen, da es sich diesmal um eine (mehr oder weniger) allgemeine Frage handelt; :mrgreen: DelphiUser7 |
Re: Umrechnungsfaktor bei der Zeit
Der umrechnungsfaktor ist schon 1000.
Kann es aber sein, das der Refrech für deine Anzeige der Zeit bei 1 Sekunde liegt? Wenn ja, versuche es mal mit wenniger. (0,3 oder 0,8 ... 0,9 Sekunden) Ich nehme meistens 300 Millisekunden, da bei grösseren Werten zwar jede Sekunde angezeigt wrd, aber die Uhr dann unrund zu laufen scheint. (versuchs mal mit 950, dann siehst du was ich meine) |
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
Der Umrechnungsfaktor beim Timer ist auf jeden Fall 1000...weil der mit ms läuft.
Ich schätz mal, dass es an deinem System liegt, wenn er ab und zu Zahlen überspringt. Das Problem liegt aber nicht am Umrechnungsfaktor von ms in sec |
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
hm...da war wohl jemand schneller
|
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
Noch eine Frage: Wie kann ich proggen, dass der Timer sich 'normal' verhält, d.h. dass der Sekundenzähler bei 60 aufhört, bzw. dann bei 0 wieder anfängt?;
Danke übrigens für den Tipp mit dem Timer, hat mir sehr geholfen! :-D ; MfG DelphiUser7 |
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
@ himitsu;
Wie hast du es denn bei dir gemacht, das mit den Sekunden; ich peil das irgendwie nicht, wie ich das machen soll; als ich noch den Timer einfach parallel zum Song hab laufen lassen, da ging es ja noch, aber jetzt, wo ich die Zuweisung mit dem Mediaplayer habe, geht das irgendwie nicht mehr; :cry: Um die Sache auf den Punkt zu bringen: Ich möchte den aktuellen Stand des Players mit einer TrackBar regeln, und dazu muss ich natürlich auch dann sozusagen 'die richtige Zeit am richtigen Ort' haben, wenn du verstehst was ich meine (-> der Timer soll sich nach dem aktuellen Standpunkt des Mediaplayers richten); DelphiUser7 |
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
Du hast doch nicht überall die 1000 geändert?
Der Faktor von 1000 ist schon richtig, nur das der Timer öffters die Position abfragen sollte. :zwinker: Ein Timer mit 1 Sekunde Interval läuft erfahrungsgemäß nicht genau 1 Sekunde, so das ab und zu mal eine untergeht. Es ist schwer zwei Timer (Timer1 und MediaPlayer1) zu syncronisieren, so das sie gleich laufen.
Delphi-Quellcode:
Hoffe dich stört es nicht, das hier alles abgerundet (DIV) wird, ist halt die einfachste und schnellste Methode.
{Timer1.Interval := 300;}
{TrackBar1.Max := MediaPlayer1.Length div 1000;} Procedure TForm1.Timer1Timer(Sender: TObject); Begin (* TrackBar-Position an die MediaPlayer-Position anpassen *) TrackBar1.Position := MediaPlayer1.Position div 1000; End; Procedure TForm1.TrackBar1Change(Sender: TObject); Var TBP, MPP: Integer; Begin TBP := TrackBar1.Position; MPP := MediaPlayer1.Position div 1000; (* MediaPlayer-Position an die TrackBar-Position anpassen, * * wenn der Unterschied grösser als 2 Sekunden ist *) If ABS(TBP - MPP) > 2 Then MediaPlayer1.Position := TBP * 1000; End; In TrackBar1Change wird der neue Wert nur bei grösseren Änderungen übernommen, so das nicht bei jeder Änderung von TrackBar1.Position der "Film" ins stocken kommt. Man könnte aber auch abfragen ob TrackBar1.Position im Timer1-Ereignis (Timer1Timer) gesetzt wurde, um in diesem Fall MediaPlayer1.Position nicht zu ändern. (der Aufwand dafür das lohnt sich aber nicht) :!: Der Umrechnungsfaktor von 1000 stimmt nur, wenn MediaPlayer1.TimeFormat = tfMilliseconds ist. (das ist der Standard) Bei MediaPlayer1.TimeFormat = tfHMS ist Stunden = MediaPlayer1.Position and $FF, Minuten = (MediaPlayer1.Position shr 8 ) and $FF, Sekunden = (MediaPlayer1.Position shr 16) and $FF. Die OH sagt jedoch: Zitat:
|
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
Neeee, :shock: darum ging es mir eigentlich weniger, dein letzter Beitrag wäre aber vielleicht trotzdem hilfreich; es geht mir jetzt vielmehr darum, dass die Sekundenzahl an sich, sobald sie 60 beträgt bzw. betragen würde wieder 0 ist (und zu den Minuten dann +1 gezählt wird);
das habe ich, wie schon gesagt, im unabhängig laufenden Timer auch geschafft; mein Problem ist jetzt, dass ich die Sekunden der Position des Mediaplayers zugewiesen habe, die Minuten nun aber vollkommen unberührt bleiben, und genau dieses Problem versteh ich 1.) nicht, und 2.) weiß ich dafür auch keine Lösung; darum mein letzter Beitrag; außerdem funktioniert dein Quellcode nicht, die untersten Zeilen waren doch für die Zuordnung timer -> TrackBar bestimmt, oder?; also wenn ich die so eingebe, dann kommt da nur wirres zahlengeknurzel raus, 2532 oder 3495, 322, 345, 6435 oder so; auf jeden Fall keine Zahlen, mit denen man was anfangen kann; MfG DelphiUser7 |
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
Hab den Code auch noch mal getestet.
Und da war rein zufällig mal MediaPlayer1.TimeFormat = tfFrames. Als ich aber nach dem öffnen der Datei das auf tfMilliseconds geändert hab ging es.
Delphi-Quellcode:
Was du aber sonst meinst (1 & 2) verstehe ich nicht so richtig, ist aber auch schon spät.
MediaPlayer1.TimeFormat := tfMilliseconds;
Geht es aber in diese Richtung?
Delphi-Quellcode:
{Var Minuten, Sekunden: Integer;}
Var I: Integer; MediaPlayer1.TimeFormat := tfMilliseconds; {sicher ist sicher} MediaPlayer1.Position := (Sekunden + (Minuten * 60)) * 1000; I := MediaPlayer1.Position div 1000; Minuten := I div 60; Sekunden := I mod 60; |
Re: reNamed: Umrechnungsprobleme bei Zeitanzeige von Soundda
Wenn dir das weiterhilft, hier ist der Quelltext, der die Infos über mein Problem enthält:
Delphi-Quellcode:
DelphiUser7
begin
if not (sender=BitBtn3) then begin Sekunden := Mediaplayer1.Position; //'Sekunden' wurde der Position des Mediaplayers zugeordnet Sekunden := Sekunden+1; end; if Sekunden = 60 then //hier fängt das Problemfeld an begin Sekunden:=0; // Sekunden soll '=0' sein, zählt aber weiter Minuten:=Minuten+1; // Minuten werden nicht wie gedacht '+1' gezählt, sondern bleiben auf 0 If Minuten=60 then // ich weiß gar nicht ob ich die Stunden nicht rausnehmen soll begin Stunden:=Stunden+1; Minuten:=0; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr. |
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