Einzelnen Beitrag anzeigen

Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TBassDllPlayer + Visualisierung (Komponenten)

  Alt 1. Sep 2005, 11:54
Wow die Visual sieht ziemlich gut aus.

Ich hab jetzt auch die entsprechenden Erweiterungen ergänzt.

Die Dll muss jetzt so aussehen:

Delphi-Quellcode:
library Project1;

{keine normalen strings übergeben sonder nur PChar}

uses
  Windows, Classes, Graphics,
  math, Controls, Messages, ExtCtrls, mmsystem, Dialogs, Contnrs, SysUtils;
{$R *.res}

type
  TFFTData256= array[0..256] of Extended;
  TFFTData512= array[0..512] of Extended;
  TWaveData = array [ 0..2048] of DWORD;

  TFFTandWaveData = record
    FFTdata256: TFFTdata256;
    FFTdata512: TFFTdata512;
    waveData: TwaveData;
    leftpeak,rightpeak: dword; {von 0 bis 32768}
  end;

  TVisInfo = record
    VisName: PChar;
    Author: Pchar;
    AuthorHomepage: Pchar;
    FFTdata256Flag: boolean;
    FFTdata512Flag: boolean;
    waveDataFlag: boolean;
    Peaks: boolean;
  end;

  TEinstellungen = record
    Backgroundcolor,Bordercolor,BalkenColor: Graphics.TColor;
    width,height: integer;
  end;

var
  Einstellungen: TEinstellungen;

function getVersion: integer; stdcall;
begin
  result:=2;
end;

procedure setEinstellungen(neuEinstellungen: TEinstellungen); stdcall;
begin
  Einstellungen := neuEinstellungen;
end;

function getVisInfo: TVisInfo; stdcall;
var
  temp: TVisInfo;
begin
  temp.VisName := 'test';
  temp.Author:= 'Henning Brackmann';
  temp.AuthorHomepage:= 'www.blubplayer.de';
  temp.FFTdata256Flag := true;
  temp.FFTdata512Flag := false;
  temp.waveDataFlag := false;
  temp.Peaks := false;
  result:=temp;
end;

procedure draw(CanvasHandle: HDC; var FFTData: TFFTandWaveData); stdcall;
var
  data: TFFTdata256;
  i: integer;
  TempBitmap: TBitmap;
begin
  IF CanvasHandle=0 then exit;
  data := FFTData.FFTdata256;

  TempBitmap := TBitmap.create;
  TempBitmap.Width := Einstellungen.width;
  TempBitmap.height := Einstellungen.height;

  for i := 1 to 256 do
  begin
    Data[i] := Data[i]*ln(i)*4*((Einstellungen.height));
    if Data[i] > (Einstellungen.height) then Data[i] := (Einstellungen.height);
  end;
  TempBitmap.canvas.pen.color := Einstellungen.Bordercolor;
  TempBitmap.canvas.brush.color := Einstellungen.Backgroundcolor;
  TempBitmap.canvas.Rectangle(0,0,Einstellungen.width,Einstellungen.height);
  TempBitmap.canvas.pen.color := Einstellungen.BalkenColor;
  for i := 1 to 256 do
  begin
    TempBitmap.Canvas.MoveTo(i,Einstellungen.height);
    TempBitmap.canvas.lineTo(i,(Einstellungen.height)-round(Data[i]));
  end;

  BitBlt(CanvasHandle, 0, 0, TempBitmap.width, TempBitmap.height, TempBitmap.canvas.Handle , 0, 0 , SRCCOPY);

  TempBitmap.free;
end;

exports
  draw,
  getVisInfo,
  setEinstellungen,
  getVersion;

begin

end.
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat