Author Topic: Sonique Visualization  (Read 53678 times)

Irrational86

  • Posts: 960
Sonique Visualization
« on: 21 Nov '03 - 00:23 »
Hey People,

I've been working on an addon for Bass which allows the usage of Sonique Visualizations...now, I have the C/C++, Delphi and VB apis made, but i dont have C/C++ nor VB examples made (only Delphi), if anyone is wanting to help and translate the example, it'd be great. Anyways, if you want the package, goto http://xminionx.swillservices.com/ ...

This package is still under development, and Winamp Visualization plugins are coming soon. I also need feedback from you, so please help out! :D
« Last Edit: 24 Nov '03 - 04:00 by XMinioNX »

Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #1 on: 7 Dec '03 - 22:07 »
Well...I think its done, Ian has been notified of the release of BassVis, so as soon as he receives the Email, it will be put on the Bass Addons section...

There is no C/C++ example made, please if anyone is interested and wants to contribute, you can translate it and send it to me...

The VB example I was sent doesnt not work properly...If you are interested, you can email me...

=====================================

Winamp visualization was removed afterall, because Winamp vis is kinda funky, and I need some time to work it out. It may finally be added later on...not sure though
« Last Edit: 8 Dec '03 - 04:11 by XMinioNX »

Al Meyer

  • Posts: 20
Re:Sonique Visualization
« Reply #2 on: 8 Dec '03 - 20:25 »
Hi, where is the link?
Can't find in your site.

Thanks

Alberto


Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #3 on: 8 Dec '03 - 20:55 »
Under the "Programming" section on the left...

Al Meyer

  • Posts: 20
Re:Sonique Visualization
« Reply #4 on: 8 Dec '03 - 22:37 »
Thanks a lot man, but the link looks like a page title.  ::) Thanks a lot again

Al Meyer

  • Posts: 20
Re:Sonique Visualization
« Reply #5 on: 9 Dec '03 - 14:22 »
Nice work. Congratulations!

Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #6 on: 9 Dec '03 - 22:17 »
Heh thanks...version 1.1 will be released in a few days, i am adding Stereo visualization support to it (which doesnt have it now) but there is one little problem, how do you (or anybody) think would be best to handle this multi-channel kinda of files...if mono or stereo i know what to do, but what about if the channel has 4, 6, or 8 channels? How would i consider it? As mono?

Al Meyer

  • Posts: 20
Re:Sonique Visualization
« Reply #7 on: 10 Dec '03 - 11:24 »
Great.  I will wait for the 1.1. Great. I think you should make this multi-channels streams act like mono. I don't know how much CPU the sonique plug-ins use, but we have to consider users with low spec machines.

Sorry for the poor english. It's not my native language.

Cheers

Alberto

Derek Wildstar

  • Posts: 29
Re:Sonique Visualization (BUG?)
« Reply #8 on: 10 Dec '03 - 12:01 »
Sometimes the visualization seems to "visualize" "clicks", showing peaks of sound...
To view this effect more easily get this Vis

http://support.xmplay.com/Visuals_Files/Spec_n_Hopp.zip

And please make possible to configure (via properties or functions of bass_vis.dll) the sensitivity of the data, to make low frequencies mor visible.


I'm modifying the simple vis examples, that came with the "bass package" and i create some interesting features...

if you want i can send it to you...

Al Meyer

  • Posts: 20
Re:Sonique Visualization
« Reply #9 on: 10 Dec '03 - 13:42 »
Hey, man. If the stream has more than 2 channel, I think it's better to make the vis act like stereo.
All the best

Irrational86

  • Posts: 960
Re:Sonique Visualization (BUG?)
« Reply #10 on: 10 Dec '03 - 21:33 »
Sometimes the visualization seems to "visualize" "clicks", showing peaks of sound...
To view this effect more easily get this Vis
I dont understand what you mean...?

And please make possible to configure (via properties or functions of bass_vis.dll) the sensitivity of the data, to make low frequencies mor visible.
Will do...

I'm modifying the simple vis examples, that came with the "bass package" and i create some interesting features...

if you want i can send it to you...
Tell me what kind of interesting features and i might add them...

Derek Wildstar

  • Posts: 29
Re:Sonique Visualization (BUG?)
« Reply #11 on: 11 Dec '03 - 04:02 »
Quote
Sometimes the visualization seems to "visualize" "clicks", showing peaks of sound...
To view this effect more easily get this Vis
Well... On some frames of the visualization (canvas of PaintBox) i can see some peaks of sound, but not hear it, cuz this peaks dosn't exist in fact.  Your vis algorithm seems generate aleatory peaks.

Imagine a bar visualization and a sound in MP3 playing...

Imagine that MP3 recorded from old LP... On some parts of music you have "clicks" and "pops" but on other parts of music the sound is clear...

Can you imagine how will be the bar visualization?? On parts w/ clicks and pops the bars will grow to maximum....

this ocurs into your vis... BUT MY MP3 ARE ALL 192K AND CD QUALITY

Please, to see more clearly this erroneous effect get the Spec_n_Hopp vis http://support.xmplay.com/Visuals_Files/Spec_n_Hopp.zip

This a bar graphic 3D

Quote
I'm modifying the simple vis examples, that came with the "bass package" and i create some interesting features...

As you can see, my english is poor... So i will send to you my modified version of the "Simple Vis" unit. This Unit was originally called "DisplayRender" by the creators of AudioObject Project... Basically are two things:

Skip Sample = a number indicating the amount of data not used.
Ex.:
  I have 1024 values to plot (vis) but with SkipSample = 1, only 512 will be plotted like:

  buffer = (Value1, Value2, Value3, ..., Value1204);
  SkipSample = 1 will use
  (Value1, Value3, Value5, Value7,..., Value1203);

  This is good to get a GENERAL VIEW, seeing more frequencies, like a ZOOM-Out on the vis, of course, less details will be seen.

Start Of Range = a number indicating the start of value usable, like:
  buffer = (Value1, Value2, Value3, ..., Value1204);
StatOfRange = 10 will use
(Value10, Value11, Value12, ..., Value1204);

This make sense to view the visualization of more high frequencies


This is the first part of UDisplayRender


Code: [Select]
unit UDisplayRender;
(* Original TDisplayRender by Alessandro Cappellozza                          *)
(* Version 0.8 02/2002                                                        *)
(* http://digilander.iol.it/Kappe/audioobject                                 *)
(*                                                                            *)
(* This is a modified version (v2) of the original one.                       *)
interface

uses
   Windows, SysUtils, Classes, Graphics, Controls, Forms,
   ExtCtrls;


type
   TWaveData = array [0..2047] of Dword;

   TFFTData  = array [0..511] of Single;

   TFFTStartOfRange = 0..447; // 447 = 511 - 64 -> 64 é o menor range

   TSensitivity = 1..16;

   TSkipSample  = 1..5;

   TFFTFallOffPeaksTimeOut = 100..3000;

   TFFTFallOffPeaksSpeed = 1..5;

   TFFTFallOffBarsSpeed = 1..5;

   TBarWidth = 5..80;

   TLineMode = 0..2;

   TLineWidth = 1..5;

   TCoordinate = packed record
      LX: SmallInt;
      LY: SmallInt;
      RX: SmallInt;
      RY: SmallInt;
   end;

   TDisplayRender = class(TObject)
   private
      VideoBuffer : TBitmap;
      BackImg: TImage;
      DrawMode : Integer;

      FFTPeaks : array [1..512] of Word;
      FFTPeaksFloat: array [1..512] of Single;
      FFTBars : array [1..512] of Word;

      FFTFallOffPeaksTimeOuts: array [1..512] of TTime;

      FFTFallOffPeaksTimeOutFatSpectrum, FFTFallOffPeaksTimeOutThinSpectrum,
      FFTFallOffPeaksTimeOutContinuousSpectrum: TFFTFallOffPeaksTimeOut;

      CircleOsciloscopeWidth, SimpleOsciloscopeWidth: TLineWidth;

      BarFallOffSpeedThinSpectrum, BarFallOffSpeedFatSpectrum,
      BarFallOffSpeedContinuousSpectrum: TFFTFallOffBarsSpeed;

      PeakFallOffSpeedThinSpectrum, PeakFallOffSpeedFatSpectrum,
      PeakFallOffSpeedContinuousSpectrum: TFFTFallOffPeaksSpeed;

      BarWidth: TBarWidth;
      LineModeSimpleOsciloscope, LineModeCircleOsciloscope: TLineMode;

      CircOsciloscopeRadiusLeft, CircOsciloscopeRadiusRight: Byte;
      
      SensitivitySimpleOsciloscope, SensitivityCircleOsciloscope,
         SensitivityCrossedOsciloscope, SensitivityDeltaOsciloscope,
         SensitivityFatSpectrum, SensitivityThinSpectrum,
         SensitivityContinuousSpectrum: TSensitivity;


Derek Wildstar

  • Posts: 29
Re:Sonique Visualization
« Reply #12 on: 11 Dec '03 - 04:03 »
Second Part of DisplayRender
Code: [Select]
      ShowPeaksFatSpectrum, ShowPeaksThinSpectrum, ShowPeaksContinuousSpectrum,
      KeepMaxdBValues, ShowdBValues, ShowBarsFatSpectrum, ShowBarsThinSpectrum,
      ShowBarsContinuousSpectrum: Boolean;

      BkColor: TColor;

      PositionSimpleOsciloscope, PositionCircleOsciloscope, PositionCrossedOsciloscope, PositionDeltaOsciloscope,
         PositionFatSpectrum, PositionThinSpectrum, PositionContinuousSpectrum,
         PositionForwardTime, PositionBackwardTime: TCoordinate;

      SORFatSpectrum, SORThinSpectrum, SORContinuousSpectrum: TFFTStartOfRange;

      FatSpectrumSkipSample, ThinSpectrumSkipSample, ContinuousSpectrumSkipSample: TSkipSample;
      procedure DrawTime(posTime : Integer);
      procedure DrawChar(ch, X, Y : Integer);
      procedure RenderWave (HWND: THandle; aWaveData: TWaveData);
      procedure RenderFFT (HWND: THandle; aFFTData: TFFTData);
    procedure SetCircleLineMode(const Value: TLineMode);
    procedure SetSimpleLineMode(const Value: TLineMode);
   public
      PaletteBitmap, NumFontBMP: TBitmap;
      { TODO : Se pretender aumentar o número de cores utilizadas na paleta,
      altere a quantidade de elementos neste vetor. }
      ColorPal: array[0..6] of TColor;

      constructor Create(Width, Heigth: Word; BackImage: TImage = nil; BackColor: TColor = clBlack);
      destructor Destroy; override;
      procedure Render (HWND: THandle; aWaveData: TWaveData; aFFTData: TFFTData; posTime, aRenderMode: Integer);

      property ModoDesenhoOsciloscopioSimples: TLineMode read LineModeSimpleOsciloscope write SetSimpleLineMode;
      property ModoDesenhoOsciloscopioCircular: TLineMode read LineModeCircleOsciloscope write SetCircleLineMode;

      property LarguraOsciloscopioSimples: TLineWidth read SimpleOsciloscopeWidth write SimpleOsciloscopeWidth;
      property LarguraOsciloscopioCircular: TLineWidth read CircleOsciloscopeWidth write CircleOsciloscopeWidth;

      property MostrarBarrasEspectroEspesso: Boolean read ShowBarsFatSpectrum write ShowBarsFatSpectrum;
      property MostrarPicosEspectroEspesso: Boolean read ShowPeaksFatSpectrum write ShowPeaksFatSpectrum;
      property MostrarDecibeis: Boolean read ShowdBValues write ShowdBValues;
      property ManterDecibeisMaximos: Boolean read KeepMaxdBValues write KeepMaxdBValues;

      property MostrarBarrasEspectroEstreito: Boolean read ShowBarsThinSpectrum write ShowBarsThinSpectrum;
      property MostrarPicosEspectroEstreito: Boolean read ShowPeaksThinSpectrum write ShowPeaksThinSpectrum;

      property MostrarBarrasEspectroContinuo: Boolean read ShowBarsContinuousSpectrum write ShowBarsContinuousSpectrum;
      property MostrarPicosEspectroContinuo: Boolean read ShowPeaksContinuousSpectrum write ShowPeaksContinuousSpectrum;

      property VelocidadeQuedaEspectroEspesso: TFFTFallOffBarsSpeed read BarFallOffSpeedFatSpectrum write BarFallOffSpeedFatSpectrum;
      property VelocidadeQuedaEspectroEstreito: TFFTFallOffBarsSpeed read BarFallOffSpeedThinSpectrum write BarFallOffSpeedThinSpectrum;
      property VelocidadeQuedaEspectroContinuo: TFFTFallOffBarsSpeed read BarFallOffSpeedContinuousSpectrum write BarFallOffSpeedContinuousSpectrum;

      property VelocidadeQuedaPicosEspectroEspesso: TFFTFallOffPeaksSpeed read PeakFallOffSpeedFatSpectrum write PeakFallOffSpeedFatSpectrum;
      property VelocidadeQuedaPicosEspectroEstreito: TFFTFallOffPeaksSpeed read PeakFallOffSpeedThinSpectrum write PeakFallOffSpeedThinSpectrum;
      property VelocidadeQuedaPicosEspectroContinuo: TFFTFallOffPeaksSpeed read PeakFallOffSpeedContinuousSpectrum write PeakFallOffSpeedContinuousSpectrum;

      property AtrasoQuedaPicosEspectroEspesso: TFFTFallOffPeaksTimeOut read FFTFallOffPeaksTimeOutFatSpectrum write FFTFallOffPeaksTimeOutFatSpectrum;
      property AtrasoQuedaPicosEspectroEstreito: TFFTFallOffPeaksTimeOut read FFTFallOffPeaksTimeOutThinSpectrum write FFTFallOffPeaksTimeOutThinSpectrum;
      property AtrasoQuedaPicosEspectroContinuo: TFFTFallOffPeaksTimeOut read FFTFallOffPeaksTimeOutContinuousSpectrum write FFTFallOffPeaksTimeOutContinuousSpectrum;

      property LaguraBarra: TBarWidth read BarWidth write BarWidth;

      property SensibilidadeOsciloscopioSimples: TSensitivity read SensitivitySimpleOsciloscope write SensitivitySimpleOsciloscope;
      property SensibilidadeOsciloscopioCircular: TSensitivity read SensitivityCircleOsciloscope write SensitivityCircleOsciloscope;
      property SensibilidadeOsciloscopioCruzado: TSensitivity read SensitivityCrossedOsciloscope write SensitivityCrossedOsciloscope;
      property SensibilidadeOsciloscopioDelta: TSensitivity read SensitivityDeltaOsciloscope write SensitivityDeltaOsciloscope;
      property SensibilidadeEspectroEspesso: TSensitivity read SensitivityFatSpectrum write SensitivityFatSpectrum;
      property SensibilidadeEspectroEstreito: TSensitivity read SensitivityThinSpectrum write SensitivityThinSpectrum;
      property SensibilidadeEspectroContinuo: TSensitivity read SensitivityContinuousSpectrum write SensitivityContinuousSpectrum;

      property RaioOsciloscopioCircularEsquerdo: Byte read CircOsciloscopeRadiusLeft write CircOsciloscopeRadiusLeft;
      property RaioOsciloscopioCircularDireito: Byte read CircOsciloscopeRadiusRight write CircOsciloscopeRadiusRight;

      property XYOsciloscopioSimples: TCoordinate read PositionSimpleOsciloscope write PositionSimpleOsciloscope;
      property XYOsciloscopioCircular: TCoordinate read PositionCircleOsciloscope write PositionCircleOsciloscope;
      property XYOsciloscopioCruzado: TCoordinate read PositionCrossedOsciloscope write PositionCrossedOsciloscope;
      property XYOsciloscopioDelta: TCoordinate read PositionDeltaOsciloscope write PositionDeltaOsciloscope;
      property XYEspectroEspesso: TCoordinate read PositionFatSpectrum write PositionFatSpectrum;
      property XYEspectroEstreito: TCoordinate read PositionThinSpectrum write PositionThinSpectrum;
      property XYEspectroContinuo: TCoordinate read PositionContinuousSpectrum write PositionContinuousSpectrum;
      property XYTempoFrente: TCoordinate read PositionForwardTime write PositionForwardTime;
      property XYTempoTras: TCoordinate read PositionBackwardTime write PositionBackwardTime;

      property ResolucaoEspectroEspesso: TSkipSample read FatSpectrumSkipSample write FatSpectrumSkipSample;
      property ResolucaoEspectroEstreito: TSkipSample read ThinSpectrumSkipSample write ThinSpectrumSkipSample;
      property ResolucaoEspectroContinuo: TSkipSample read ContinuousSpectrumSkipSample write ContinuousSpectrumSkipSample;

      property FaixaInicialEspectroEspesso: TFFTStartOfRange read SORFatSpectrum write SORFatSpectrum;
      property FaixaInicialEspectroEstreito: TFFTStartOfRange read SORThinSpectrum write SORThinSpectrum;
      property FaixaInicialEspectroContinuo: TFFTStartOfRange read SORContinuousSpectrum write SORContinuousSpectrum;
end;

{ TODO : Declare as variaveis dos tipos TWaveData e TFFTData. Essas variaveis
serão usadas pelos métodos de desenho dos gráficos. }
var
   DisplayRender: TDisplayRender;
   WaveData: TWaveData;
   FFTData: TFFTData;

implementation


Derek Wildstar

  • Posts: 29
Re:Sonique Visualization
« Reply #13 on: 11 Dec '03 - 04:05 »
Third Part of UDisplayRender
Code: [Select]
uses UPrincipal, Math;
{ TODO :
Existem 3 bitmaps: um é o fundo do grafico e tem de ter as dimensões idênticas as
do mesmo.. 127 x 70 o outro é um bitmap q representa o grafico em si (PaletteBitmap) e suas cores,
ele é uma simples barra que contém as cores utilizadas pelos vários tipos de visualizaçao,
alem de ter a barra vertical padrao para o tipo de grafico BARRA. O ultimo é o grafico
que contém os números (NumFontBMP) para a visualização do tempo. Altere-os para
que eles se mesclem com sua aplicação}
constructor TDisplayRender.Create(Width, Heigth: Word; BackImage: TImage = nil; BackColor: TColor = clBlack);
begin
   NumFontBMP := TBitmap.Create;
      NumFontBMP.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Resources\NumFont.BMP');
   PaletteBitmap := TBitmap.Create;
      PaletteBitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Resources\PaletaGrafico.BMP');
      ColorPal[0] := PaletteBitmap.Canvas.Pixels[0,0]; { Cor do canal direito}
      ColorPal[1] := PaletteBitmap.Canvas.Pixels[0,1]; { Cor do canal esquerdo}
      ColorPal[2] := PaletteBitmap.Canvas.Pixels[0,2]; { Cor do meio p/ o osciloscópio cruzado}
      ColorPal[3] := PaletteBitmap.Canvas.Pixels[0,3]; { Cor dos picos no modo 1 do analizador spectro (Fat) }
      ColorPal[4] := PaletteBitmap.Canvas.Pixels[0,4]; { Cor dos picos no modo 2 do analizador spectro (Thin) }
      ColorPal[5] := PaletteBitmap.Canvas.Pixels[0,5]; { Cor dos picos no modo 3 do analizador spectro (Continuous) }
      ColorPal[6] := PaletteBitmap.Canvas.Pixels[0,6]; { Cor da diferença entre os osciloscópios direito e esquerdo }
   VideoBuffer := TBitmap.Create;
   VideoBuffer.Height := Heigth;
   VideoBuffer.Width := Width;
   BackImg := BackImage;
   BkColor := BackColor;
   DrawMode := 0;

   LineModeSimpleOsciloscope := 0;
   LineModeCircleOsciloscope := 0;

   CircleOsciloscopeWidth := 1;
   SimpleOsciloscopeWidth := 1;

   ShowBarsFatSpectrum := True;
   ShowPeaksFatSpectrum := True;
   KeepMaxdBValues := False;
   ShowdBValues := True;

   ShowBarsContinuousSpectrum := True;
   ShowPeaksContinuousSpectrum := True;

   ShowBarsThinSpectrum := True;
   ShowPeaksThinSpectrum := True;

   BarFallOffSpeedFatSpectrum := 1;
   BarFallOffSpeedThinSpectrum := 1;
   BarFallOffSpeedContinuousSpectrum := 1;

   PeakFallOffSpeedFatSpectrum := 1;
   PeakFallOffSpeedThinSpectrum := 1;
   PeakFallOffSpeedContinuousSpectrum := 1;

   FFTFallOffPeaksTimeOutFatSpectrum := 700;
   FFTFallOffPeaksTimeOutThinSpectrum := 700;
   FFTFallOffPeaksTimeOutContinuousSpectrum := 700;

   BarWidth := 13;

   SORFatSpectrum := 0;
   SORThinSpectrum := 0;
   SORContinuousSpectrum := 0;

   FatSpectrumSkipSample := 1;
   ThinSpectrumSkipSample := 1;
   ContinuousSpectrumSkipSample := 1;

   SensitivitySimpleOsciloscope := 2;
   SensitivityCircleOsciloscope := 2;
   SensitivityCrossedOsciloscope := 2;
   SensitivityDeltaOsciloscope := 2;

   SensitivityFatSpectrum := 2;
   SensitivityThinSpectrum := 2;
   SensitivityContinuousSpectrum := 2;

   PositionSimpleOsciloscope.LX := 0;
   PositionSimpleOsciloscope.LY := 23;
   PositionSimpleOsciloscope.RX := 0;
   PositionSimpleOsciloscope.RY := 45;

   PositionCircleOsciloscope.LX := 43;
   PositionCircleOsciloscope.LY := 35;
   PositionCircleOsciloscope.RX := 83;
   PositionCircleOsciloscope.RY := 35;
   CircOsciloscopeRadiusLeft := (Heigth - 20) div 2;
   CircOsciloscopeRadiusRight := CircOsciloscopeRadiusLeft;

   PositionCrossedOsciloscope.LX := 0;
   PositionCrossedOsciloscope.LY := 35;

   PositionDeltaOsciloscope.LX := 0;
   PositionDeltaOsciloscope.LY := 30;
   PositionDeltaOsciloscope.RX := 0;
   PositionDeltaOsciloscope.RY := 40;

   PositionFatSpectrum.LX := 0;
   PositionFatSpectrum.LY := 0;

   PositionThinSpectrum.LX := 0;
   PositionThinSpectrum.LY := 0;

   PositionContinuousSpectrum.LX := 0;
   PositionContinuousSpectrum.LY := 0;
{
   PositionForwardTime.X1
   PositionForwardTime.Y1

   PositionBackwardTime.X1
   PositionBackwardTime.Y1}
end;

destructor TDisplayRender.Destroy;
begin
   NumFontBMP.Free;
   PaletteBitmap.Free;
   VideoBuffer.Free;
   inherited;
end;

Derek Wildstar

  • Posts: 29
Re:Sonique Visualization
« Reply #14 on: 11 Dec '03 - 04:06 »
4ª part of UDisplayRender
Code: [Select]
procedure TDisplayRender.RenderWave(HWND: THandle; aWaveData: TWaveData);

var
   i, yPos: LongInt;
   LCh, RCh: SmallInt;
   Rd: Integer;
   Angle: Single;
   R, L: SmallInt;
   XcR, XcL, YcR, YcL: Word;
   QtdInteracoes: Word;
begin
   {Draw Background}
   VideoBuffer.Canvas.Pen.Color := BkColor;
   VideoBuffer.Canvas.Pen.Width := 1;
   VideoBuffer.Canvas.Brush.Color := BkColor;
   VideoBuffer.Canvas.Brush.Style := bsSolid;

   if Assigned(BackImg) then
      VideoBuffer.Canvas.CopyRect(Rect(0,0,VideoBuffer.Width,VideoBuffer.Height),BackImg.Canvas,Rect(0,0,VideoBuffer.Width,VideoBuffer.Height))
   else
      VideoBuffer.Canvas.Rectangle(0, 0, VideoBuffer.Width, VideoBuffer.Height);

   VideoBuffer.Canvas.MoveTo(0,23);
   VideoBuffer.Canvas.Pen.Color := ColorPal[0];

   case DrawMode of
      3: begin //circulos
         VideoBuffer.Canvas.Pen.Width := CircleOsciloscopeWidth;

         {R Circle}
         YcR := PositionCircleOsciloscope.RY;
         XcR := PositionCircleOsciloscope.RX;

         VideoBuffer.Canvas.Pen.Color := ColorPal[1];
         R := HIWORD(aWaveData[0]);
         Rd := Trunc((R / 65535) * (CircOsciloscopeRadiusRight div 2) * SensitivityCircleOsciloscope) + CircOsciloscopeRadiusRight;
         VideoBuffer.Canvas.MoveTo(XcR, YcR + Rd);

         { TODO : A quantidade de interações no gráfico  circular, varia de  acordo
         com o raio do mesmo.  Quanto maior o  raio mais detalhes  podem ser usados
         por  isso  o  limite  superior do loop  é o  comprimento da circunferência
         (2 * PI * R) desde que o valor retornado seja menor ou igual a 2048.  2048
         é total de dados que podem ser obtidos. }
         QtdInteracoes := Min(Floor(2 * pi * CircOsciloscopeRadiusRight),2047);
         for i := 1 to QtdInteracoes do
         begin
            Angle := (i / QtdInteracoes)  * (6.28);
            R := HIWORD(aWaveData[i]);
            Rd := Trunc((R / 65535) * (CircOsciloscopeRadiusRight div 2) * SensitivityCircleOsciloscope) + CircOsciloscopeRadiusRight;
            case LineModeCircleOsciloscope of
               0: VideoBuffer.Canvas.LineTo(XcR + Trunc(sin(Angle) * Rd), YcR + Trunc(cos(Angle) * Rd));
               1: begin
                  VideoBuffer.Canvas.MoveTo(XcR, YcR);
                  VideoBuffer.Canvas.LineTo(XcR + Trunc(sin(Angle) * Rd), YcR + Trunc(cos(Angle) * Rd));
               end;
               2: VideoBuffer.Canvas.Pixels[XcR + Trunc(sin(Angle) * Rd), YcR + Trunc(cos(Angle) * Rd)] := ColorPal[1];
            end;
         end;
         R := HIWORD(aWaveData[0]);
         Rd := Trunc((R / 65535) * (CircOsciloscopeRadiusRight div 2) * SensitivityCircleOsciloscope) + CircOsciloscopeRadiusRight;
         VideoBuffer.Canvas.lineto(XcR, YcR + Rd);

         {L Circle}
         YcL := PositionCircleOsciloscope.LY;
         XcL := PositionCircleOsciloscope.LX;
         VideoBuffer.Canvas.Pen.Color := ColorPal[0];
         L := LOWORD(aWaveData[0]);
         Rd := Trunc((L / 65535) * (CircOsciloscopeRadiusLeft div 2) * SensitivityCircleOsciloscope) + CircOsciloscopeRadiusLeft;
         VideoBuffer.Canvas.MoveTo(XcL, YcL + Rd);

         QtdInteracoes := Min(Floor(2 * pi * CircOsciloscopeRadiusLeft),2048);

         for i := 1 to QtdInteracoes do
         begin
            Angle := (i / QtdInteracoes) * (6.28);

            L := LOWORD(aWaveData[i]);
            Rd := Trunc((L / 65535) * (CircOsciloscopeRadiusLeft div 2) * SensitivityCircleOsciloscope) + CircOsciloscopeRadiusLeft;
            case LineModeCircleOsciloscope of
               0: VideoBuffer.Canvas.LineTo(XcL + Trunc(sin(Angle) * Rd), YcL + Trunc(cos(Angle) * Rd));
               1: begin
                  VideoBuffer.Canvas.MoveTo(XcL, YcL);
                  VideoBuffer.Canvas.LineTo(XcL + Trunc(sin(Angle) * Rd), YcL + Trunc(cos(Angle) * Rd));
               end;
               2: VideoBuffer.Canvas.Pixels[XcL + Trunc(sin(Angle) * Rd), YcL + Trunc(cos(Angle) * Rd)] := ColorPal[0];
            end;
         end;
         L := LOWORD(aWaveData[0]);
         Rd := Trunc((L / 65535) * (CircOsciloscopeRadiusLeft div 2) * SensitivityCircleOsciloscope) + CircOsciloscopeRadiusLeft;
         VideoBuffer.Canvas.lineto(XcL, YcL + Rd);
      end;
      2: begin //linhas cruzadas

         { TODO : A quantidade de interações nos gráficos de linha é função da
         largura de VisBuffer. Quanto maior VisBuffer, maior será o grafico de
         linha horizontalmente até o limite estabelecido (2047) }
         QtdInteracoes := Min(VideoBuffer.Width,2047);

         for i := 0 to QtdInteracoes do
         begin
            LCh := LOWORD(aWaveData[i]);
            RCh := HIWORD(aWaveData[i]);
            yPos := (LCh + RCh) div 2; //Média entre os dois canais
            yPos := Trunc((yPos/65535) * (VideoBuffer.Height div 2) * SensitivityCrossedOsciloscope);
            VideoBuffer.Canvas.Pen.Color := ColorPal[2];
            VideoBuffer.Canvas.MoveTo(i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY);
            VideoBuffer.Canvas.LineTo(i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY - yPos);
            VideoBuffer.Canvas.Pixels[i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY - yPos] := ColorPal[0];
            VideoBuffer.Canvas.LineTo(i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY - yPos);
            VideoBuffer.Canvas.Pen.Color := ColorPal[2];
            VideoBuffer.Canvas.MoveTo(i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY);
            VideoBuffer.Canvas.LineTo(i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY + yPos);
            VideoBuffer.Canvas.Pixels[i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY + yPos] := ColorPal[1];
            VideoBuffer.Canvas.LineTo(i + PositionCrossedOsciloscope.LX, PositionCrossedOsciloscope.LY + yPos);
         end;
      end;
      1: begin //diferença
         QtdInteracoes := Min(VideoBuffer.Width,2047);

         for i := 0 to QtdInteracoes do
         begin
            VideoBuffer.Canvas.Pen.Color := ColorPal[6];

            LCh := LOWORD(aWaveData[i]);
            yPos := PositionDeltaOsciloscope.LY + Trunc((LCh/65535) * (VideoBuffer.Height div 3) * SensitivityDeltaOsciloscope);
            VideoBuffer.Canvas.MoveTo(PositionDeltaOsciloscope.LX + i, yPos + 1);
            VideoBuffer.Canvas.Pixels[PositionDeltaOsciloscope.LX + i, yPos] := ColorPal[0];

            RCh := HIWORD(aWaveData[i]);
            yPos := PositionDeltaOsciloscope.RY + Trunc((RCh/65535) * (VideoBuffer.Height div 3) * SensitivityDeltaOsciloscope);
            VideoBuffer.Canvas.LineTo(PositionDeltaOsciloscope.RX + i, yPos);
        VideoBuffer.Canvas.Pixels[PositionDeltaOsciloscope.RX + i, yPos] := ColorPal[1];
         end;
      end;
      0: begin // Linhas Simples
         QtdInteracoes := Min(VideoBuffer.Width,2047);

         VideoBuffer.Canvas.Pen.Width := SimpleOsciloscopeWidth;

         VideoBuffer.Canvas.Pen.Color := ColorPal[0];
         LCh := LOWORD(aWaveData[0]);
         yPos := PositionSimpleOsciloscope.LY + Trunc((LCh/65535) * (VideoBuffer.Height div 3) * SensitivitySimpleOsciloscope);
         VideoBuffer.Canvas.MoveTo(PositionSimpleOsciloscope.LX, yPos);
         for i := 0 to QtdInteracoes do
         begin
            LCh := LOWORD(aWaveData[i]);
            yPos := PositionSimpleOsciloscope.LY + Trunc((LCh/65535) * (VideoBuffer.Height div 3) * SensitivitySimpleOsciloscope);
            case LineModeSimpleOsciloscope of
               0: VideoBuffer.Canvas.LineTo(PositionSimpleOsciloscope.LX + i, yPos);
               1: begin
                  VideoBuffer.Canvas.MoveTo(PositionSimpleOsciloscope.LX + i, PositionSimpleOsciloscope.LY);
                  VideoBuffer.Canvas.LineTo(PositionSimpleOsciloscope.LX + i, yPos);
               end;
               2: VideoBuffer.Canvas.Pixels[PositionSimpleOsciloscope.LX + i, yPos] := ColorPal[0]
            end;
         end;

         VideoBuffer.Canvas.Pen.Color := ColorPal[1];
         RCh := HIWORD(aWaveData[0]);
         yPos := PositionSimpleOsciloscope.RY + Trunc((RCh/65535) * (VideoBuffer.Height div 3) * SensitivitySimpleOsciloscope);
         VideoBuffer.Canvas.MoveTo(PositionSimpleOsciloscope.RX, yPos);
         for i := 0 to QtdInteracoes do
         begin
            RCh := HIWORD(aWaveData[i]);
            yPos := PositionSimpleOsciloscope.RY + Trunc((RCh/65535) * (VideoBuffer.Height div 3) * SensitivitySimpleOsciloscope);
            case LineModeSimpleOsciloscope of
               0: VideoBuffer.Canvas.LineTo(PositionSimpleOsciloscope.RX + i, yPos);
               1: begin
                  VideoBuffer.Canvas.MoveTo(PositionSimpleOsciloscope.RX + i, PositionSimpleOsciloscope.RY);
                  VideoBuffer.Canvas.LineTo(PositionSimpleOsciloscope.RX + i, yPos);
               end;
               2: VideoBuffer.Canvas.Pixels[PositionSimpleOsciloscope.RX + i, yPos] := ColorPal[1]
            end;
         end;
      end;
   end;
   BitBlt(HWND,0,0,VideoBuffer.Width,VideoBuffer.Height,VideoBuffer.Canvas.Handle,0,0,srccopy);
end;

Derek Wildstar

  • Posts: 29
Re:Sonique Visualization
« Reply #15 on: 11 Dec '03 - 04:07 »
5º Part of UDisplayRender
Code: [Select]
procedure TDisplayRender.DrawTime(posTime: Integer);
var
   mm, ss, ms, Y: Integer;
begin
   y := 29; { Y position }
   if (DrawMode > 0) and (DrawMode < 5) then
      Y := 15;
   {Minutes Seconds and Milliseconds Calc}
   mm := posTime div (1000 * 60);
   ss := (posTime div 1000) - mm * 60;
   ms := (posTime ) - mm * 60000 - ss * 1000;
   {Draw Minutes}
   DrawChar((mm div 10), 3 , Y);
   DrawChar(mm - (mm div 10) * 10, 21, Y);
   DrawChar(12, 39, Y);
   {Draw Seconds}
   DrawChar((ss div 10), 47, Y);
   DrawChar(ss - (ss div 10) * 10, 65, Y);
   DrawChar(12, 83, Y);
   {Draw Millisecons, only first 2 numbers}
   ms := ms div 10;
   DrawChar((ms div 10), 91, Y);
   DrawChar(ms - (ms div 10) * 10, 109, Y);
end;
{ TODO : isso é usado pela visualização numerica! }
procedure TDisplayRender.DrawChar(ch, X, Y: Integer);
begin
   VideoBuffer.Canvas.CopyRect(Rect(X,Y,X + 16,Y + 14),NumFontBMP.Canvas,Rect(ch * 16,0,ch * 16 + 16,14));
end;
{ TODO : esse método é chamado sempre que uma visualização tipo barra é requerida }
procedure TDisplayRender.RenderFFT (HWND: THandle; aFFTData: TFFTData);
var
   i, yPos: Word;
   yVal: single;
   QtdBarras: Word;
   procedure CanvasTextOutCenteredFormatted(aCanvas: TCanvas; Valor: SmallInt);
   var
      StrTemp: ShortString;
      xMeio: Byte;
   begin
      aCanvas.Font.Name   := 'Tahoma';
      aCanvas.Brush.Style := bsClear;
      aCanvas.Font.Color  := VideoBuffer.Canvas.Pen.Color;
      aCanvas.Font.Size   := 6;
      StrTemp := IntToStr(Valor);
      xMeio := (BarWidth div 2) - (aCanvas.TextWidth(StrTemp) div 2);
      aCanvas.TextOut(PositionFatSpectrum.LX + (i - 1) * BarWidth + (i - 1) + xMeio + 1,PositionFatSpectrum.LY + VideoBuffer.Height - FFTPeaks[i] - 2 - aCanvas.TextHeight(StrTemp), StrTemp);
   end;
begin
   {Draw Background}
   VideoBuffer.Canvas.Pen.Color := BkColor;
   VideoBuffer.Canvas.Pen.Width := 1;
   VideoBuffer.Canvas.Brush.Color := BkColor;
   VideoBuffer.Canvas.Brush.Style := bsSolid;

   if Assigned(BackImg) then
      VideoBuffer.Canvas.CopyRect(Rect(0,0,VideoBuffer.Width,VideoBuffer.Height),BackImg.Canvas,Rect(0,0,VideoBuffer.Width,VideoBuffer.Height))
   else
      VideoBuffer.Canvas.Rectangle(0, 0, VideoBuffer.Width, VideoBuffer.Height);

   VideoBuffer.Canvas.MoveTo(0, VideoBuffer.Height);

   { TODO : Definindo as cores dos picos }
   case DrawMode of
      4: VideoBuffer.Canvas.Pen.Color := ColorPal[3]; { Fat - 1 }
      6: VideoBuffer.Canvas.Pen.Color := ColorPal[4]; { Thin - 2}
      5: VideoBuffer.Canvas.Pen.Color := ColorPal[5]; { Continuous - 3 }
   end;

   { TODO : A  quantidade  de barras  a serem  desenhadas  depende da  largura de
   VideoBuffer e também da largura esperada de cada barra. O loop FOR mais abaixo
   tem como limite final o número de barras a serem desenhadas levando em conta a
   largura de VideoBuffer e a largura de cada barra, assim como o tipo de grafico
   a ser  desenhado, pois, por  exemplo, em um grafico de barras finas cada barra
   ocupa um pixel e tem um pixel  de separação  o calculo do número de barras é o
   que se vê abaixo. O número máximo de barras é 512, que é a quantidade total de
   dados FFT disponíveis (aFFTData). No calculo abaixo,  ColumnWidth é somado com
   1 porque  cada  barra é separada  de um pixel  uma da  outra. Como  cada barra
   representa um dado de aFFTData então a  quantidade de  barras  coincide  com a
   faixa de amplitudes }

   case DrawMode of
      4: QtdBarras := Min((VideoBuffer.Width div (BarWidth + 1)),512);
      6: QtdBarras := Min((VideoBuffer.Width div 2),512);
      5: QtdBarras := Min(VideoBuffer.Width,512);                      
   end;

   for i := 1 to QtdBarras do
   begin
      { TODO : A altura da barra é  definida abaixo...  Evidentemente quanto maior
      for o número dentro do elemento do vetor aFFTData  mais alto a  barra da vez
      chegará. Os  elementos  do vetor  em questão  são Single  e variam de 0 a 1,
      logo, para obter um valor usável, devemos multiplicar o valor do item da vez
      do vetor pela  altura de  VisBuffer.  Entretanto,  fazendo  isso faz com que
      frequencias mais baixas fiquem "invisiveis", logo, além  de multiplicar pela
      altura de VisBuffer, nós  multiplicamos  também  pela  sensibilidade. Quanto
      maior a sensibilidade, mais  niveladas  ficarão  as  barras  de  frequencias
      diferentes até um ponto limite onde todas se igualam (Você  não  vai  querer
      isso!). }

      case DrawMode of
         4: begin
            yVal := aFFTData[Min((i + SORFatSpectrum) * FatSpectrumSkipSample,511)];
            yPos := Trunc(Min((yVal * VideoBuffer.Height) * SensitivityFatSpectrum,VideoBuffer.Height - 3));
         end;
         5: begin
            yVal := aFFTData[Min((i + SORContinuousSpectrum) * ContinuousSpectrumSkipSample,511)];
            yPos := Trunc(Min((yVal * VideoBuffer.Height) * SensitivityContinuousSpectrum,VideoBuffer.Height - 3));
         end;
         6: begin
            yVal := aFFTData[Min((i + SORThinSpectrum) * ThinSpectrumSkipSample,511)];
            yPos := Trunc(Min((yVal * VideoBuffer.Height) * SensitivityThinSpectrum,VideoBuffer.Height - 3));
         end;
      end;


      if yPos > VideoBuffer.Height then
         yPos := VideoBuffer.Height;

      if yPos >= FFTPeaks[i] then
      begin
         FFTPeaks[i] := yPos;
         FFTPeaksFloat[i] := yVal;

         case DrawMode of
            4: if (ShowPeaksFatSpectrum or ShowdBValues) then FFTFallOffPeaksTimeOuts[i] := now + (FFTFallOffPeaksTimeOutFatSpectrum/86400)/1000;
            5: if ShowPeaksContinuousSpectrum then FFTFallOffPeaksTimeOuts[i] := now + (FFTFallOffPeaksTimeOutContinuousSpectrum/86400)/1000;
            6: if ShowPeaksThinSpectrum then FFTFallOffPeaksTimeOuts[i] := now + (FFTFallOffPeaksTimeOutThinSpectrum/86400)/1000;
         end;
      end
      else
         if now >= FFTFallOffPeaksTimeOuts[i] then
            case DrawMode of
               4: if ShowPeaksFatSpectrum or ((BarWidth >= 13) and ShowdBValues)then begin
                  FFTPeaks[i] := Max(FFTPeaks[i] - PeakFallOffSpeedFatSpectrum,0);
                  if not KeepMaxdBValues then
                     FFTPeaksFloat[i] := FFTPeaks[i]/VideoBuffer.Height;
               end;
               5: if ShowPeaksContinuousSpectrum then
                  FFTPeaks[i] := Max(FFTPeaks[i] - PeakFallOffSpeedContinuousSpectrum,0);
               6: if ShowPeaksThinSpectrum then
                  FFTPeaks[i] := Max(FFTPeaks[i] - PeakFallOffSpeedThinSpectrum,0);
            end;

      if yPos >= FFTBars[i] then
         FFTBars[i] := yPos
      else
         case DrawMode of
            4: FFTBars[i] := Max(FFTBars[i] - BarFallOffSpeedFatSpectrum,0);
            5: FFTBars[i] := Max(FFTBars[i] - BarFallOffSpeedContinuousSpectrum,0);
            6: FFTBars[i] := Max(FFTBars[i] - BarFallOffSpeedThinSpectrum,0);
         end;

      case DrawMode of
         4: begin //Barras Grossas
            if ShowPeaksFatSpectrum then VideoBuffer.Canvas.MoveTo(PositionFatSpectrum.LX + (i - 1) * BarWidth + (i - 1) + 1, PositionFatSpectrum.LY + VideoBuffer.Height - FFTPeaks[i] - 1);
            if ShowPeaksFatSpectrum then VideoBuffer.Canvas.LineTo(PositionFatSpectrum.LX + (i - 1) * BarWidth + BarWidth + (i - 1) + 1, PositionFatSpectrum.LY + VideoBuffer.Height - FFTPeaks[i] - 1);
            if (BarWidth >= 13) and ShowdBValues then
            begin
               if FFTPeaks[i] > 0 then
                  CanvasTextOutCenteredFormatted(VideoBuffer.Canvas,Trunc(20 * Log10(FFTPeaksFloat[i])))
               else
                  CanvasTextOutCenteredFormatted(VideoBuffer.Canvas,-40);
            end;

            if ShowBarsFatSpectrum then VideoBuffer.Canvas.CopyRect(Rect(PositionFatSpectrum.LX + (i - 1) * BarWidth + (i - 1) + 1, PositionFatSpectrum.LY + VideoBuffer.Height - FFTBars[i] - 1, PositionFatSpectrum.LX + (i - 1) * BarWidth + BarWidth + (i - 1) + 1, PositionFatSpectrum.LY + VideoBuffer.Height - 1), PaletteBitmap.Canvas, Rect(0, 80 - FFTBars[i], BarWidth, 80));
         end;
         5: begin //Contínuo
            if ShowPeaksContinuousSpectrum then VideoBuffer.Canvas.Pixels[PositionContinuousSpectrum.LX + (i - 1), PositionContinuousSpectrum.LY + VideoBuffer.Height - FFTPeaks[i] - 1] := VideoBuffer.Canvas.Pen.Color;
            if ShowBarsContinuousSpectrum then VideoBuffer.Canvas.CopyRect(Rect(PositionContinuousSpectrum.LX + (i - 1), PositionContinuousSpectrum.LY + VideoBuffer.Height - 1 - FFTBars[i], PositionContinuousSpectrum.LX + (i - 1) + 1 , PositionContinuousSpectrum.LY + VideoBuffer.Height - 1) , PaletteBitmap.Canvas, Rect (0, 80 - FFTBars[i], 1, 80));
         end;
         6: begin //Barras Finas
            if ShowPeaksThinSpectrum then VideoBuffer.Canvas.Pixels[PositionThinSpectrum.LX + 2 * (i - 1), PositionThinSpectrum.LY + VideoBuffer.Height - FFTPeaks[i] - 1] := VideoBuffer.Canvas.Pen.Color;
            if ShowBarsThinSpectrum then VideoBuffer.Canvas.CopyRect(Rect(PositionThinSpectrum.LX + 2 * (i - 1), PositionThinSpectrum.LY + VideoBuffer.Height - 1 - FFTBars[i], PositionThinSpectrum.LX + 2 * (i - 1) + 1, PositionThinSpectrum.LY + VideoBuffer.Height - 1) , PaletteBitmap.Canvas, Rect (0, 80 - FFTBars[i], 1, 80));
         end;
      end;
   end;
   BitBlt(HWND,0,0,VideoBuffer.Width,VideoBuffer.Height,VideoBuffer.Canvas.Handle,0,0,srccopy);
end;

Derek Wildstar

  • Posts: 29
Re:Sonique Visualization
« Reply #16 on: 11 Dec '03 - 04:08 »
The last Part of UDisplayRender

Code: [Select]
procedure TDisplayRender.Render(HWND: THandle; aWaveData: TWaveData; aFFTData: TFFTData; posTime, aRenderMode: Integer);
begin
   DrawMode := aRenderMode;
   case aRenderMode of
      0..3: RenderWave(HWND, aWaveData);
      4..6: RenderFFT(HWND, aFFTData);
          7: begin
             {Draw Background}
             VideoBuffer.Canvas.Pen.Color := BkColor;
             VideoBuffer.Canvas.Brush.Color := BkColor;
             VideoBuffer.Canvas.Brush.Style := bsSolid;

             if Assigned(BackImg) then
               VideoBuffer.Canvas.CopyRect(Rect(0,0,VideoBuffer.Width,VideoBuffer.Height),BackImg.Canvas,Rect(0,0,VideoBuffer.Width,VideoBuffer.Height))
             else
                VideoBuffer.Canvas.Rectangle(0, 0, VideoBuffer.Width, VideoBuffer.Height);

             DrawTime(posTime);
             BitBlt(HWND,0,0,VideoBuffer.Width,VideoBuffer.Height,VideoBuffer.Canvas.Handle,0,0,srccopy);
          end;
   end;
end;

procedure TDisplayRender.SetCircleLineMode(const Value: TLineMode);
begin
   if Value <> LineModeCircleOsciloscope then
      LineModeCircleOsciloscope := Value;
end;

procedure TDisplayRender.SetSimpleLineMode(const Value: TLineMode);
begin
   if Value <> LineModeSimpleOsciloscope then
      LineModeSimpleOsciloscope := Value
end;

end.

Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #17 on: 12 Dec '03 - 01:16 »
Whoaa :o ...thats too long a code to go through...but i understood what you asked for, and its done...

The only thing i didnt do was the StartOfRange...i will work on it if all goes OK with this beta...

Anyways, about the Multi-channel considered stereo, not gonna happen now...too much trouble to mix down so many channels into 2, will do it later...

Well, any beta testers out there??
« Last Edit: 12 Dec '03 - 01:19 by XMinioNX »

Al Meyer

  • Posts: 20
Re:Sonique Visualization
« Reply #18 on: 12 Dec '03 - 15:46 »
Yes, If you post in your site, I will be happy to test it.

Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #19 on: 23 Dec '03 - 02:43 »
BassVis 1.1 is released ... check it out and give any feedback please...

http://xminionx.swillservices.com/

georgebou

  • Posts: 189
Re:Sonique Visualization
« Reply #20 on: 24 Dec '03 - 10:34 »
Hi XMinioNX,
Does this plugin works with your  bass_vis.dll?
http://support.xmplay.com/Visuals_Files/Spec_n_Hopp.zip

I have included support for sonique plugins in my application for  a long time, and this is a plugin that i cann't figure out why it doesn't work.
I'm using Delphi 6 Personal, update pack 3, and the problem occurs at the function

loadlibrary('Spec_n_Hopp.svp') function. (i get an exception from kernel32.dll)

That means that the problem is in Delphi's loadlibrary function and not in my code.
It halts before it loads ???

Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #21 on: 24 Dec '03 - 15:34 »
Of course, all the plugins i've tried work in it without any problem (and i have tested a lot of them...that means, including Spec'n'Hopp, which is one of my favorites)
« Last Edit: 24 Dec '03 - 15:37 by XMinioNX »

georgebou

  • Posts: 189
Re:Sonique Visualization
« Reply #22 on: 24 Dec '03 - 18:07 »
Which version of Delphi do you use?

Irrational86

  • Posts: 960
Re:Sonique Visualization
« Reply #23 on: 25 Dec '03 - 05:15 »
Delphi 7

Philip Hadar

  • Posts: 79
Re:Sonique Visualization
« Reply #24 on: 4 Jan '04 - 18:17 »
Nice work But... I checked it using Delphi and I find out that the CPU usage rize up to 70% !!!!  >:(

Are you aware of that ?

Philip
« Last Edit: 4 Jan '04 - 18:18 by Philip Hadar »