Registriert seit: 19. Apr 2003
407 Beiträge
Delphi 2006 Professional
|
Re: TBassDllPlayer + Visualisierung (Komponenten)
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.
|
|
Zitat
|