Einzelnen Beitrag anzeigen

Gandalfus

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

Re: TBassDllPlayer + Visualisierung (Komponenten)

  Alt 30. Aug 2005, 14:11
Zitat von dizzy:
Sooo, ich habe mal ein wenig darin gewühlt, und es sind mir ein paar Dinge aufgefallen:
gut, dass du dich damit beschäftigst.

Zitat von dizzy:
[list=1][*] Zunächst ein kleiner Fehler in dem DLL-Code oben: Exportierte Funktionen werden mit Kommata getrennt, nicht mit Semikola.[*] Mit dieser Änderung kompilierts, jedoch meldet der Player (Demo) beim Ladeversuch, dass die Version nicht unterstützt würde. Ich habe aber nirgends eine aktuelle Versionsnummer gefunden.
Ich habe folgendes mit Delphi 7 comiliert uns es funktionierte.
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
  TFFTData= array[0..256] of Extended;
  TWaveData = array [ 0..2048] of DWORD;

  TFFTandWaveData = record
    FFTdata: TFFTdata;
    waveData: TwaveData;
    leftpeak,rightpeak: dword; {von 0 bis 32768}
  end;

function getVersion: integer;
begin
  result:=1;
end;


procedure draw(CanvasHandle: HDC; Backgroundcolor,Bordercolor,BalkenColor: Graphics.TColor; width,height: integer; var FFTData: TFFTandWaveData); stdcall;
var
  data: TFFTdata;
  i: integer;
  TempBitmap: TBitmap;
begin
  IF CanvasHandle=0 then exit;
  data := FFTData.FFTdata;

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

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

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

  TempBitmap.free;
end;

exports
  draw,
  getVersion;

begin

end.
Zitat:
[*] 256 FFT-Daten sind mir für ein paar meiner Visuals etwas zu wenig. Ich wünschte mir so 1024 (von denen ja nur 512 nutzbar sind)
Hmm. Eigednlich wäre es ja am besten wenn man von der dll aus einstellen könnte welche Daten man haben will.

Zitat:
[*] Die Zeichenfläche der Visuals erscheint mir recht statisch. Es wäre viel schöner wenn die Größe entweder frei durch den Benutzer definierbar wäre, oder aber auch durch ein Visual vorgegeben werden könnte. Ich habe in dem Source zur Demo nicht finden können wo dort die Randdaten für das Visual gesetzt werden
Mann kann die grösse von der Visualiesierungs Komponenet ja im Programm verändern. wenn man die Grässe in der dll veändert würde sie unterumständen nichtmehr in das Design des Programms passe.
Der Sourcecode für dei Demo ist doch dabei oder nicht?

Zitat:
[*] Dem Visual werden eine Reihe Farbwerte mitgegeben. Hier frage ich mich warum - da ich denke dass ein Visual, wenn schon so öffen über ein PlugIn-System schreibbar, auch seine Farben frei wählen sollte. Klar, man kann die Werte ignorieren, aber es sind dann überflüssige Pushes da (*khorrintenkackerbin* )
Naja wenn man einene HIntergrundzecihenen will der zum Rest der Komponnete passt braucht man die Farben von dem Rest der Komponnete.
Dafür ist das gedacht.

Zitat:
Najo, das waren die Punkte bisher, wobei mich insbesondere die Sache mit der Verison am Weitermachen hindert. Zudem bräuchte ich einen Nasenstubs dahin, wo das Visual auf dem Form eingebettet wird.
CanvasHandle ist ein der Handel des TCanvas von einem TgraphicControll. Ich könnte auch einen Canvas oder eine TGraphicControll übergeben, wenn das besser passt.

Zitat:
\\edit: Hm, jetzt wo ich nochmal drüber nachdenke ist die Übergabe mit einem gemeinsamen Pointer evtl. doch nicht so sehr günstig, da dann ja bei jeder Verwendung 2 mal referenziert werden müsste, oder liege ich mit der Annahme falsch? Oder mit der Folgerung, dass dies Geschwindigkeitsnachteile haben könnte?
Vieleicht könntets du eine kleine liste der änderungen machen die brauchst.

mfg Henning
Du meinst, dass die höhe und Breite noch in den record mit rein kommt?
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat