MMSlow.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:7k
源码类别:

Delphi控件源码

开发平台:

Delphi

  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 MMSLow;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29. {$IFDEF WIN32}
  30.     Windows,
  31. {$ELSE}
  32.     WinTypes,
  33.     WinProcs,
  34. {$ENDIF}
  35.     SysUtils,
  36.     Classes,
  37.     Controls,
  38.     MMSystem,
  39.     MMRegs,
  40.     MMObj,
  41.     MMDSPObj,
  42.     MMUtils,
  43.     MMPCMSup,
  44.     MMFX;
  45. type
  46.    EMMSimpleLowPassError = class(Exception);
  47.    TMMFilterType = (ftNone,ftSoftLowPass,ftLowPass);
  48.    {-- TMMSimpleLowPass -------------------------------------------------}
  49.    TMMSimpleLowPass = class(TMMDSPComponent)
  50.    private
  51.       FEnabled   : Boolean;
  52.       FOpen      : Boolean;
  53.       FPFilter   : PSimpleFilter;
  54.       FFilterType: TMMFilterType;
  55.       procedure SetEnabled(aValue: Boolean);
  56.       procedure SetFilterType(aValue: TMMFilterType);
  57.    protected
  58.       procedure SetPWaveFormat(aValue: PWaveFormatEx); override;
  59.       procedure Update; virtual;
  60.       procedure Opened; override;
  61.       procedure Closed; override;
  62.       procedure Started; override;
  63.       procedure BufferReady(lpwh: PWaveHdr); override;
  64.       procedure BufferLoad(lpwh: PWaveHdr; var MoreBuffers: Boolean); override;
  65.    public
  66.       constructor Create(aOwner: TComponent); override;
  67.       destructor Destroy; override;
  68.       procedure Open;
  69.       procedure Close;
  70.       procedure Process(Buffer: PChar; Length: integer);
  71.    published
  72.       property Input;
  73.       property Output;
  74.       property Enabled: Boolean read FEnabled write SetEnabled default True;
  75.       property FilterType: TMMFilterType read FFilterType write SetFilterType default ftNone;
  76.    end;
  77. implementation
  78. {== TMMSimpleLowPass ====================================================}
  79. constructor TMMSimpleLowPass.Create(aOwner: TComponent);
  80. begin
  81.    inherited Create(aOwner);
  82.    FEnabled    := True;
  83.    FOpen       := False;
  84.    FPFilter    := nil;
  85.    FFilterType := ftNone;
  86. end;
  87. {-- TMMSimpleLowPass ----------------------------------------------------}
  88. destructor TMMSimpleLowPass.Destroy;
  89. begin
  90.    Close;
  91.    inherited Destroy;
  92. end;
  93. {-- TMMSimpleLowPass ----------------------------------------------------}
  94. procedure TMMSimpleLowPass.SetEnabled(aValue: Boolean);
  95. begin
  96.    if (aValue <> FEnabled) then
  97.    begin
  98.       FEnabled := aValue;
  99.       if FEnabled then Update;
  100.    end;
  101. end;
  102. {-- TMMSimpleLowPass ----------------------------------------------------}
  103. procedure TMMSimpleLowPass.SetFilterType(aValue: TMMFilterType);
  104. begin
  105.    if (aValue <> FFilterType) then
  106.    begin
  107.       FFilterType := aValue;
  108.       Update;
  109.    end;
  110. end;
  111. {-- TMMSimpleLowPass ----------------------------------------------------}
  112. procedure TMMSimpleLowPass.SetPWaveFormat(aValue: PWaveFormatEx);
  113. begin
  114.    if (aValue <> nil) then
  115.    begin
  116.       if not (csDesigning in ComponentState) then
  117.          if not pcmIsValidFormat(aValue) then
  118.             raise EMMSimpleLowPassError.Create(LoadResStr(IDS_INVALIDFORMAT));
  119.    end;
  120.    inherited SetPWaveFormat(aValue);
  121. end;
  122. {-- TMMSimpleLowPass ----------------------------------------------------}
  123. procedure TMMSimpleLowPass.Open;
  124. begin
  125.    if not FOpen then
  126.    begin
  127.       if pcmIsValidFormat(PWaveFormat) then
  128.       begin
  129.          FPFilter := InitSimpleLowPass(PWaveFormat);
  130.          if (FPFilter = nil) then OutOfMemoryError
  131.          else
  132.          begin
  133.             FOpen := True;
  134.             Update;
  135.          end;
  136.       end;
  137.    end;
  138. end;
  139. {-- TMMSimpleLowPass ----------------------------------------------------}
  140. procedure TMMSimpleLowPass.Close;
  141. begin
  142.    if FOpen then
  143.    begin
  144.       FOpen := False;
  145.       DoneSimpleLowPass(FPFilter);
  146.    end;
  147. end;
  148. {-- TMMSimpleLowPass ----------------------------------------------------}
  149. procedure TMMSimpleLowPass.Process(Buffer: PChar; Length: integer);
  150. begin
  151.    { process the buffer trough the filter }
  152.    if (FPFilter <> nil) then DoSimpleLowPass(FPFilter, Buffer, Length);
  153. end;
  154. {-- TMMSimpleLowPass ----------------------------------------------------}
  155. procedure TMMSimpleLowPass.Update;
  156. begin
  157.    { setup the filter with the params }
  158.    if FOpen then
  159.    begin
  160.       SetSimpleLowPass(FPFilter, Ord(FFilterType));
  161.    end;
  162. end;
  163. {-- TMMSimpleLowPass ----------------------------------------------------}
  164. procedure TMMSimpleLowPass.Opened;
  165. begin
  166.    Open;
  167.    inherited Opened;
  168. end;
  169. {-- TMMSimpleLowPass ----------------------------------------------------}
  170. procedure TMMSimpleLowPass.Closed;
  171. begin
  172.    Close;
  173.    inherited Closed;
  174. end;
  175. {-- TMMSimpleLowPass ----------------------------------------------------}
  176. procedure TMMSimpleLowPass.Started;
  177. begin
  178.    Update;
  179.    inherited Started;
  180. end;
  181. {-- TMMSimpleLowPass ----------------------------------------------------}
  182. procedure TMMSimpleLowPass.BufferReady(lpwh: PWaveHdr);
  183. begin
  184.    if Enabled and FOpen then
  185.    begin
  186.       Process(lpwh^.lpData, lpwh^.dwBytesRecorded);
  187.    end;
  188.    inherited BufferReady(lpwh);
  189. end;
  190. {-- TMMSimpleLowPass ----------------------------------------------------}
  191. procedure TMMSimpleLowPass.BufferLoad(lpwh: PWaveHdr; var MoreBuffers: Boolean);
  192. begin
  193.    inherited BufferLoad(lpwh, MoreBuffers);
  194.    if Enabled and FOpen then
  195.    begin
  196.       Process(lpwh^.lpData, lpwh^.dwBytesRecorded);
  197.    end;
  198. end;
  199. end.