home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 November / CDVD1105.ISO / Software / Freeware / programare / bass / Delphi / SampleVis / circle_vis.pas next >
Encoding:
Pascal/Delphi Source File  |  2002-05-08  |  3.7 KB  |  110 lines

  1. unit circle_vis;
  2. { Circle Visualyzation by Alessandro Cappellozza
  3.   version 0.5 05/2002
  4.   http://digilander.iol.it/Kappe/audioobject
  5. }
  6.  
  7. interface
  8.   uses Windows, Dialogs, Graphics, SysUtils, CommonTypes, Classes;
  9.  
  10.  type TCircleScope = Class(TObject)
  11.     private
  12.       VisBuff : TBitmap;
  13.       BackBmp : TBitmap;
  14.  
  15.       BkgColor : TColor;
  16.       ScopeRad : Integer;
  17.       ScopeOff : Integer;
  18.       PenColor : TColor;
  19.       DrawType : Integer;
  20.       DrawRes  : Integer;
  21.       FrmClear : Boolean;
  22.       UseBkg   : Boolean;
  23.  
  24.     public
  25.      Constructor Create (Width, Height : Integer);
  26.      procedure Draw(HWND : THandle; WaveData : TWaveData; X, Y : Integer);
  27.      procedure SetBackGround (Active : Boolean; BkgCanvas : TGraphic);
  28.  
  29.      property BackColor : TColor read BkgColor write BkgColor;
  30.      property Radius : Integer read ScopeRad write ScopeRad;
  31.      property Offset : Integer read ScopeOff write ScopeOff;
  32.      property Pen  : TColor read PenColor write PenColor;
  33.      property Mode : Integer read DrawType write DrawType;
  34.      property Res  : Integer read DrawRes write DrawRes;
  35.      property FrameClear : Boolean read FrmClear write FrmClear;
  36.   end;
  37.  
  38.  var CircleScope : TCircleScope;
  39.  
  40. implementation
  41.  
  42.      Constructor TCircleScope.Create(Width, Height : Integer);
  43.       begin
  44.         VisBuff := TBitmap.Create;
  45.         BackBmp := TBitmap.Create;
  46.  
  47.           VisBuff.Width := Width;
  48.           VisBuff.Height := Height;
  49.           BackBmp.Width := Width;
  50.           BackBmp.Height := Height;
  51.  
  52.           BkgColor := clBlack;
  53.           ScopeRad := 30;
  54.           ScopeOff := 30;
  55.           PenColor := clWhite;
  56.           DrawType := 0;
  57.           DrawRes  := 2;
  58.           FrmClear := True;
  59.           UseBkg := False;
  60.       end;
  61.  
  62.      procedure TCircleScope.SetBackGround (Active : Boolean; BkgCanvas : TGraphic);
  63.       begin
  64.         UseBkg := Active;
  65.         BackBmp.Canvas.Draw(0, 0, BkgCanvas);
  66.       end;
  67.  
  68.      procedure TCircleScope.Draw(HWND : THandle; WaveData : TWaveData; X, Y : Integer);
  69.         var i, Rd : Integer; Angle : Single; R, L : SmallInt;
  70.        begin
  71.        if FrmClear then begin
  72.         VisBuff.Canvas.Pen.Color := BkgColor;
  73.         VisBuff.Canvas.Brush.Color := BkgColor;
  74.         VisBuff.Canvas.Rectangle(0, 0, VisBuff.Width, VisBuff.Height);
  75.          if UseBkg then VisBuff.Canvas.CopyRect(Rect(0, 0, BackBmp.Width, BackBmp.Height), BackBmp.Canvas, Rect(0, 0, BackBmp.Width, BackBmp.Height));
  76.        end;
  77.  
  78.         VisBuff.Canvas.Pen.Color := PenColor;
  79.               R := LOWORD(WaveData[0]);
  80.               L := HIWORD(WaveData[0]);
  81.               Rd := Trunc(((R + L) / (2 * 65535)) * ScopeOff) + ScopeRad;
  82.               VisBuff.Canvas.MoveTo(X, Y + Rd);
  83.  
  84.          for i := 1 to 254 do begin
  85.              Angle := (i /256) * (6.28);
  86.               R := LOWORD(WaveData[i * DrawRes]);
  87.               L := HIWORD(WaveData[i * DrawRes]);
  88.               Rd := Trunc(((R + L) / (2 * 65535)) * ScopeOff) + ScopeRad;
  89.  
  90.               case DrawType of
  91.                 0 : VisBuff.Canvas.lineto(X + Trunc(sin(Angle) * Rd), Y + Trunc(cos(Angle) * Rd));
  92.  
  93.                 1 : begin
  94.                       VisBuff.Canvas.MoveTo(X, Y);
  95.                       VisBuff.Canvas.lineto(X + Trunc(sin(Angle) * Rd), Y + Trunc(cos(Angle) * Rd));
  96.                     end;
  97.  
  98.                 2 : VisBuff.Canvas.Pixels[X + Trunc(sin(Angle) * Rd), Y + Trunc(cos(Angle) * Rd)] := PenColor;
  99.               end;
  100.          end;
  101.  
  102.               R := LOWORD(WaveData[0]);
  103.               L := HIWORD(WaveData[0]);
  104.               Rd := Trunc(((R + L) / (2 * 65535)) * ScopeOff) + ScopeRad;
  105.               VisBuff.Canvas.lineto(X, Y + Rd);
  106.  
  107.           BitBlt(HWND, 0, 0, VisBuff.Width, VisBuff.Height, VisBuff.Canvas.Handle, 0, 0, srccopy)
  108.        end;
  109. end.
  110.