AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bass.dll Wave Data / FFT Data ?
Thema durchsuchen
Ansicht
Themen-Optionen

Bass.dll Wave Data / FFT Data ?

Ein Thema von Blamaster · begonnen am 22. Jan 2009 · letzter Beitrag vom 7. Feb 2009
 
Blamaster

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

Re: Bass.dll Wave Data / FFT Data ?

  Alt 25. Jan 2009, 21: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
 


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 14:44 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