Einzelnen Beitrag anzeigen

Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#16

Re: Bass.dll Wave Data / FFT Data ?

  Alt 25. Jan 2009, 22:46
Nachdem ich gerade noch die DrawTimeLine angepasst und eingebaut habe tut sich mir wieder ein kleines Problem auf, welches ich noch nicht lösen konnte.

Code in der BassPlayer.pas:

Delphi-Quellcode:
procedure TBassPlayer.DrawTimeLine(y: integer; PB: TPaintBox; cl: TColor);
var
  sectime: integer;
  str: string;
  x: integer;
  bpp: DWORD;
begin

  bpp := BASS_ChannelGetLength(channel) div PB.ClientWidth; // stream bytes per pixel
  if (bpp < BASS_ChannelSeconds2Bytes(channel, 0.02)) then // minimum 20ms per pixel (BASS_ChannelGetLevel scans 20ms)
    bpp := BASS_ChannelSeconds2Bytes(channel, 0.02);

  sectime := round(BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel)));
  x := BASS_ChannelGetPosition(channel) div bpp;

  //format time
  str := '';
  if (sectime mod 60 < 10) then str := '0';
  str := str + inttostr(sectime mod 60);
  str := inttostr(sectime div 60) + ':' + str;

  //drawline
  PB.Canvas.Pen.Color := cl;
  PB.Canvas.MoveTo(x, 0);
  PB.Canvas.LineTo(x, PB.ClientHeight);

  //drawtext
  PB.Canvas.Font.Color := cl;
  PB.Canvas.Font.Style := [fsBold];
  if x > PB.ClientWidth - 20 then
    dec(x, 40);
  SetBkMode(PB.Canvas.Handle, TRANSPARENT);
  PB.Canvas.TextOut(x + 2, y, str);

  PB.Refresh;
end;
Aufrufen tue ich sie momentan im OnTimer Event mit 20ms:

Delphi-Quellcode:
procedure TFMain.Timer1Timer(Sender: TObject);
begin
fBassPlayer.DrawTimeLine(10,PaintBox,clRed);
end;
Nun funktioniert das ganze soweit auch ganz gut, außer das die Time Line extrem flackert. Wenn ich mir hingegen das CustomLoop Beispiel ansehe läuft sie sehr sauber. Der Aufruf erfolgt dort aber auch in einem 20ms Intervall.

Jemand eine Idee woran das liegen kann ? (PaintBox.Parent.DoubleBuffered:= true; habe ich im OnCreate testweise auch gesetzt, brachte aber leider keinen wirklichen Erfolg)

mfg Blamaster
  Mit Zitat antworten Zitat