AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Bass.dll] CPU auslastung wegen Visualization

Ein Thema von DIET3RIX · begonnen am 5. Apr 2007 · letzter Beitrag vom 6. Apr 2007
Antwort Antwort
DIET3RIX

Registriert seit: 21. Feb 2006
Ort: Bonn
78 Beiträge
 
Delphi 2007 Professional
 
#1

[Bass.dll] CPU auslastung wegen Visualization

  Alt 5. Apr 2007, 12:28
Hey Leute,

ich hab da ma 'n Problem mit meinem Projekt und zwar mit der Visualization mit Hilfe von Bass.dll (2.3.0.2) [Spektrum].
Durch die hab ich ca. 80% CPU Auslastung, deaktiviere ich den Timer2 [Interval: 33] hab ich 10-20% der CPU Auslastung. Deaktiviere ich noch einen Timer1 [Interval: 100] habe ich eine Auslastung von max 2% (habe 2 Timer drin').

Wie kann ich die Auslastung vermeiden bzw. womit kann ich die Timer ersetzen?

Hier die Procedure von dem Timer, der für die Visualization verantwortlich ist:

Delphi-Quellcode:
procedure TMain_Form.Timer2Timer(Sender: TObject);
var
  FFTFata : TFFTData;
begin
  if BASS_ChannelIsActive(aChannel) <> BASS_ACTIVE_PLAYING then Exit;

  BASS_ChannelGetData(aChannel, @FFTFata, BASS_DATA_FFT1024);
  Spectrum.Draw(vis_img.Canvas.Handle, FFTFata, 0, 0);
  vis_img.Repaint; // lasse ich das Weg, kriege ich nichts angezeigt :/
//^-- Den Befehl hab ich nirgendswo in den Demos gefunden.
end;
Ach ja, habe P4 3GHz HT (FSB: 800 MHz) und 1,5 GB RAM (FSB: 400 MHz)
Dieter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 5. Apr 2007, 17:03
Zitat von DIET3RIX:
Hey Leute,

ich hab da ma 'n Problem mit meinem Projekt und zwar mit der Visualization mit Hilfe von Bass.dll (2.3.0.2) [Spektrum].
Durch die hab ich ca. 80% CPU Auslastung, deaktiviere ich den Timer2 [Interval: 33] hab ich 10-20% der CPU Auslastung. Deaktiviere ich noch einen Timer1 [Interval: 100] habe ich eine Auslastung von max 2% (habe 2 Timer drin').

Wie kann ich die Auslastung vermeiden bzw. womit kann ich die Timer ersetzen?

Hier die Procedure von dem Timer, der für die Visualization verantwortlich ist:

Delphi-Quellcode:
procedure TMain_Form.Timer2Timer(Sender: TObject);
var
  FFTFata : TFFTData;
begin
  if BASS_ChannelIsActive(aChannel) <> BASS_ACTIVE_PLAYING then Exit;

  BASS_ChannelGetData(aChannel, @FFTFata, BASS_DATA_FFT1024);
  Spectrum.Draw(vis_img.Canvas.Handle, FFTFata, 0, 0);
  vis_img.Repaint; // lasse ich das Weg, kriege ich nichts angezeigt :/
//^-- Den Befehl hab ich nirgendswo in den Demos gefunden.
end;
Ach ja, habe P4 3GHz HT (FSB: 800 MHz) und 1,5 GB RAM (FSB: 400 MHz)
Naja eigentlich gehört das nach Multimedia
Versuchs doch einfach mal weniger Samples zu übergeben wenn das Spectrum nur 32 bars zur verfügung stellt
reicht es aus wenn du nur 512 übergibst.

Mit den Schnipsel kann auch niemand was anfangen.
Die frage ist doch wie das Render Event aussieht, wie umfangreich das ist.
Die auslastung müßte eigentlich bei 0% liegen

gruss Emil
  Mit Zitat antworten Zitat
DIET3RIX

Registriert seit: 21. Feb 2006
Ort: Bonn
78 Beiträge
 
Delphi 2007 Professional
 
#3

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 5. Apr 2007, 17:28
Oke, ich hab ma ein bissle rumprobiert und habe festgestellt, dass das an "vis_img.Repaint;" [Image] liegt.

Lasse ich den weg, dann passiert nichts, also keine Visualization.
Das komische ist, dass ich den Befehl in dem Demo nicht gefunden habe.

So, dann hab ich den Befehl auskommentiert und den 2. Timer angemacht und siehe da ich hab wieder 40-50 % an Auslastung.

D.h. dann also, dass das an dem repaint Befehl, aber auch an dem Timer liegt.

Gibt es 'ne Möglichkeit den Timer durch irgendwas anderes Ähnliches zu ersetzen?
Dieter
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#4

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 5. Apr 2007, 17:34
Moin schau dir mal folgenden Thread, vielleicht hilft dir das ja.

http://www.delphipraxis.net/internal...light=spectrum

Gruß
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
DIET3RIX

Registriert seit: 21. Feb 2006
Ort: Bonn
78 Beiträge
 
Delphi 2007 Professional
 
#5

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 5. Apr 2007, 18:33
leider funzt das immer noch nicht.

Hab versucht den Code mit der Zeile: "Self.Canvas.Brush.Style := bsClear;" zu ergänzen, aber ich bekomme das nicht Compiliert: "[Fehler] spectrum_vis.pas(130): Undefinierter Bezeichner: 'Canvas'"

Und wieso muss ich immer Repaint hinzufügen in dem Demo sieht man nichts von.
Dieter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 5. Apr 2007, 21:49
Zitat von DIET3RIX:
leider funzt das immer noch nicht.

Hab versucht den Code mit der Zeile: "Self.Canvas.Brush.Style := bsClear;" zu ergänzen, aber ich bekomme das nicht Compiliert: "[Fehler] spectrum_vis.pas(130): Undefinierter Bezeichner: 'Canvas'"

Und wieso muss ich immer Repaint hinzufügen in dem Demo sieht man nichts von.
Würde vielleicht mal die eigenschaften des Image untersuchen
ob es da nicht eine automatische refresh methode gibt.

Untersuche doch mal die eigenschaft des image aus dem Sample und mit deiner..

gruss Emil
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 6. Apr 2007, 07:39
Du kannst statt Repaint mal ein invalidate benutzen. Das zeichnet zwar auch das image neu, aber macht etwas weniger als repaint (soweit ich das im Kopf hab).

Wie EWeiss schon meinte reichen dir auch 512 aus.

Alternativ kannst du es auch so machen, das du statt das ganze "zufuss" zeichnest, einfach die entsprechenden Teile aus einem Bitmap kopierst. So hab ich das mal gemacht. Wenn du ein Beispiel brauchst -> sag bescheid
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 6. Apr 2007, 08:56
Zitat von Ghostwalker:
Du kannst statt Repaint mal ein invalidate benutzen. Das zeichnet zwar auch das image neu, aber macht etwas weniger als repaint (soweit ich das im Kopf hab).

Wie EWeiss schon meinte reichen dir auch 512 aus.

Alternativ kannst du es auch so machen, das du statt das ganze "zufuss" zeichnest, einfach die entsprechenden Teile aus einem Bitmap kopierst. So hab ich das mal gemacht. Wenn du ein Beispiel brauchst -> sag bescheid
Genau!
Ich benutze für das Originale Spectrum (Winamp) nur 256.
Allerdings unterstützt Bass das mit seinen Flag nicht, da muss man sich schon selbst was basteln.

Die Samples durch eine Schleife laufen lassen und dem array neu zuordnen.
Habe selbst unter Vb eine CPU last von -80%

Gruss Emil
  Mit Zitat antworten Zitat
DIET3RIX

Registriert seit: 21. Feb 2006
Ort: Bonn
78 Beiträge
 
Delphi 2007 Professional
 
#9

Re: [Bass.dll] CPU auslastung wegen Visualization

  Alt 6. Apr 2007, 11:06
So Leute vielen Dank für eure Hilfe und hiermit entschuldige ich mich für meine Dummheit

Für die Visualization wird TPaintBox benutzt und das Image wird dahintergelegt

So sieht das jetzt aus und man braucht kein Repaint usw

Delphi-Quellcode:
procedure TMain_Form.Timer2Timer(Sender: TObject);
var
  FFTFata : TFFTData;
begin
  if BASS_ChannelIsActive(aChannel) <> BASS_ACTIVE_PLAYING then Exit;

  BASS_ChannelGetData(aChannel, @FFTFata, BASS_DATA_FFT512);
  Spectrum.Draw(vis.Canvas.Handle, FFTFata,0,0);
end;
Ein Problem hab ich noch mit dem 2. Timer, aber das guck mir jetzt mal in Ruhe an.

Nochmals vielen Dank
Dieter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz