In meinem Player lese ich über einen VU-Meter den aktuellen Pegel aus und lasse in Abhängigkeit des Pegels Ellipsen auf ein DXDraw (DelphiX) zeichnen. Um die Koordinaten der Ellipsen zu bestimmen, benutze ich die Formeln:
Delphi-Quelltext
1: 2: 3: 4:
| x1 := (Screen.Height div 2) - ((VuMeter1.ValueRight * (Screen.Height div 2)) div 32768); y1 := (Screen.Width div 2) - ((VuMeter1.ValueRight * (Screen.Width div 2)) div 32768); x2 := Screen.Height - x1; y2 := Screen.Width - y1; |
Da ich insgesamt 4 Ellipsen zeichne (2 für den Pegel links, rechts & 2 für den Peak links, rechts), habe ich 16 Formeln und das geht ziemlich auf die CPU.
Die ganze Prozedur läuft in einem Extra-Thread und hat einen Sleep von 100 msek.
Trotzdem habe ich rund 10-25% CPU-Last auf meinem P4 2,53GHz. Bei einem Sleep von 200 msek sinkt die CPU-Last nicht mal um 5%. Wenn ich die Ellipsen nicht zeichnen lasse, habe ich max. 1-2% CPU-Last - es liegt also nicht am Programm selbst.
Ich nehme mal an, dass die große Menge an Ganzzahl-Divisionen ausschlaggebend dafür ist. Gibt es eine schnellere Alternative? Oder kann man die Formeln optimieren?
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.