MMLIGHT.INT 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. {========================================================================}
  2. {= (c) 1995-98 SwiftSoft Ronald Dittrich =}
  3. {========================================================================}
  4. {= All Rights Reserved =}
  5. {========================================================================}
  6. {= D 01099 Dresden = Tel.: +0351-8012255 =}
  7. {= Loewenstr.7a = info@swiftsoft.de =}
  8. {========================================================================}
  9. {= Actual versions on http://www.swiftsoft.de/mmtools.html =}
  10. {========================================================================}
  11. {= This code is for reference purposes only and may not be copied or =}
  12. {= distributed in any format electronic or otherwise except one copy =}
  13. {= for backup purposes. =}
  14. {= =}
  15. {= No Delphi Component Kit or Component individually or in a collection=}
  16. {= subclassed or otherwise from the code in this unit, or associated =}
  17. {= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
  18. {= without express permission from SwiftSoft. =}
  19. {= =}
  20. {= For more licence informations please refer to the associated =}
  21. {= HelpFile. =}
  22. {========================================================================}
  23. {= $Date: 20.01.1998 - 18:00:00 $ =}
  24. {========================================================================}
  25. Unit MMLight;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29. {$IFDEF WIN32}
  30. Windows,
  31. {$ELSE}
  32. WinTypes,
  33. WinProcs,
  34. {$ENDIF}
  35. SysUtils,
  36. Messages,
  37. Classes,
  38. Graphics,
  39. Controls,
  40. Forms,
  41. Menus,
  42. MMUtils,
  43. MMObj,
  44. MMString,
  45. MMMath,
  46. MMMulDiv,
  47. MMFFT,
  48. MMRegs,
  49. MMPCMSup,
  50. MMDIBCv;
  51. const
  52. MAX_FFTLEN = 4096; { Define the maximum FFT buffer length. }
  53. MAXDECAYCOUNT = 32; { Maximum amount of temporal averaging allowed }
  54. type
  55. TMMLightKind = (lkCircle,lkSphere);
  56. TMMLightArrange = (laLine,laTriangle);
  57. TMMLightPeakMode= (pmRMS,pmPeak,pmAverage);
  58. const
  59. defRealize = True;
  60. defEnabled = True;
  61. defHeight = 90;
  62. defWidth = 194;
  63. defMode = mMono;
  64. defBitLength = b8bit;
  65. defChannel = chBoth;
  66. defSampleRate = 11025;
  67. defFFTLen = 128;
  68. defWindow = fwHamming;
  69. defDecayMode = dmNone;
  70. defDecay = 1;
  71. defPeakMode = pmPeak;
  72. defKind = lkCircle;
  73. defArrange = laLine;
  74. defTriangleDist = 10;
  75. defSphereHorz = 1.0;
  76. defSphereVert = 1.0;
  77. defZoneCount = 60;
  78. defColor = clBlack;
  79. type
  80. EMMLightError = class(Exception);
  81. { array for uniform decay mode values }
  82. PDataBuf = ^TDataBuf;
  83. TDataBuf = array[0..MAXDECAYCOUNT-1] of PLongArray;
  84. { struct to hold pre-calculated values for every band }
  85. Values = record
  86. OldValue: Longint;
  87. CurValue: Longint;
  88. end;
  89. PValues = ^TValues;
  90. TValues = array[0..0] of Values;
  91. {-- TMMLight --------------------------------------------------------}
  92. TMMLight = class(TMMDIBGraphicControl)
  93. public
  94. constructor Create(AOwner: TComponent); override;
  95. destructor Destroy; override;
  96. procedure RefreshPCMData(PCMData: Pointer);
  97. procedure RefreshFFTData(FFTData: Pointer);
  98. procedure RefreshMagnitudeData(MagData: Pointer);
  99. procedure ResetData;
  100. property BytesPerLight: Longint read FBytes;
  101. property PCMWaveFormat: TPCMWaveFormat read GetPCMWaveFormat write SetPCMWaveFormat;
  102. published
  103. { Events }
  104. property OnClick;
  105. property OnDblClick;
  106. property OnMouseDown;
  107. property OnMouseMove;
  108. property OnMouseUp;
  109. property OnPcmOverflow: TNotifyEvent read FOnPcmOverflow write FOnPcmOverflow;
  110. property Align;
  111. property Bevel;
  112. property Color default defColor;
  113. property ParentShowHint;
  114. property ShowHint;
  115. property Visible;
  116. property PopupMenu;
  117. property PaletteRealize default defRealize;
  118. property PaletteMapped;
  119. property Enabled: Boolean read FEnabled write SetEnabled default defEnabled;
  120. property Height default defHeight;
  121. property Width default defWidth;
  122. property Mode: TMMMode read FMode write SetMode default defMode;
  123. property BitLength: TMMBits read FBits write SetBits default defBitLength;
  124. property Channel: TMMChannel read FChannel write SetChannel default defChannel;
  125. property SampleRate: Longint read FSampleRate write SetSampleRate default defSampleRate;
  126. property FFTLength: integer read FFTLen write SetFFTLen default defFFTLen;
  127. property Window: TMMFFTWindow read FWindow write SetWindow default defWindow;
  128. property DecayMode: TMMDecayMode read FDecayMode write SetDecayMode default defDecayMode;
  129. property Decay: integer read FDecay write SetDecay default defDecay;
  130. property AmplitudeScale: integer index 0 read GetAmpScale write SetAmpScale;
  131. property GainBass: integer index 1 read GetAmpScale write SetAmpScale;
  132. property GainMiddle: integer index 2 read GetAmpScale write SetAmpScale;
  133. property GainTreble: integer index 3 read GetAmpScale write SetAmpScale;
  134. property PeakMode: TMMLightPeakMode read FPeakMode write SetPeakMode default defPeakMode;
  135. property Kind: TMMLightKind read FKind write SetKind default defKind;
  136. property Arrange: TMMLightArrange read FArrange write SetArrange default defArrange;
  137. property TriangleDist: Integer read FTriangleDist write SetTriangleDist default defTriangleDist;
  138. property SphereHorz: Float read FSphereHorz write SetSphereHorz;
  139. property SphereVert: Float read FSphereVert write SetSphereVert;
  140. property ZoneCount: Integer read FZoneCount write SetZoneCount default defZoneCount;
  141. end;
  142. implementation