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

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 MMDSETyp;
  26. interface
  27. uses
  28.     MMDSMix,
  29.     MMUtils,
  30.     MMWave,
  31.     MM3D;
  32. type
  33.     PMMDSEDMixerParams      = ^TMMDSEDMixerParams;
  34.     TMMDSEDMixerParams      = record
  35.         BitLength           : TMMBits;
  36.         DeviceId            : Integer;
  37.         Level               : TMMDSLevel;
  38.         SampleRate          : LongInt;
  39.         SpeakerConfig       : TMMDSSpeakerConfig
  40.     end;
  41.     PMMDSEDListenerParams   = ^TMMDSEDListenerParams;
  42.     TMMDSEDListenerParams   = record
  43.         DistanceFactor      : TMM3DValue;
  44.         DopplerFactor       : TMM3DValue;
  45.         OrientFront         : TMM3DVector;
  46.         OrientTop           : TMM3DVector;
  47.         Position            : TMM3DVector;
  48.         RollOffFactor       : TMM3DValue;
  49.         Velocity            : TMM3DVector;
  50.     end;
  51.     PMMDSEDSourceParams     = ^TMMDSEDSourceParams;
  52.     TMMDSEDSourceParams     = record
  53.         ConeOrientation     : TMM3DVector;
  54.         ConeOutsideVolume   : LongInt;
  55.         InsideConeAngle     : LongInt;
  56.         MaxDistance         : TMM3DValue;
  57.         MinDistance         : TMM3DValue;
  58.         Mode                : TMMDS3DBufferMode;
  59.         OutsideConeAngle    : LongInt;
  60.         Position            : TMM3DVector;
  61.         Velocity            : TMM3DVector;
  62.     end;
  63.     PMMDSEDBufferParams     = ^TMMDSEDBufferParams;
  64.     TMMDSEDBufferParams     = record
  65.         Frequency           : LongInt;
  66.         Panning             : LongInt;
  67.         Volume              : LongInt;
  68.     end;
  69.     PMMDSEDWaveRecord       = ^TMMDSEDWaveRecord;
  70.     TMMDSEDWaveRecord       = record
  71.         Data                : Pointer;
  72.         Size                : LongInt;
  73.     end;
  74. procedure MMDSEDRecordFromMixer(Mix: TMMDSWaveMixer; var MixPar: TMMDSEDMixerParams);
  75. procedure MMDSEDRecordFromBuffer(Ch: TMMDSMixChannel; var BufPar: TMMDSEDBufferParams);
  76. procedure MMDSEDMixerFromRecord(Mix: TMMDSWaveMixer; const MixPar: TMMDSEDMixerParams);
  77. procedure MMDSEDBufferFromRecord(Ch: TMMDSMixChannel; const BufPar: TMMDSEDBufferParams);
  78. procedure MMDSEDRecordFromListener(Mix: TMMDSWaveMixer; var ListPar: TMMDSEDListenerParams);
  79. procedure MMDSEDRecordFromSource(Ch: TMMDSMixChannel; var SrcPar: TMMDSEDSourceParams);
  80. procedure MMDSEDListenerFromRecord(Mix: TMMDSWaveMixer; const ListPar: TMMDSEDListenerParams);
  81. procedure MMDSEDSourceFromRecord(Ch: TMMDSMixChannel; const SrcPar: TMMDSEDSourceParams);
  82. function  MMDSEDCreateWaveRecord(Wave: TMMWave): TMMDSEDWaveRecord;
  83. procedure MMDSEDFreeWaveRecord(R: TMMDSEDWaveRecord);
  84. procedure MMDSEDLoadWaveFromRecord(R: TMMDSEDWaveRecord; Wave: TMMWave);
  85. implementation
  86. uses
  87.     Windows,
  88.     Classes;
  89. procedure MMDSEDRecordFromMixer(Mix: TMMDSWaveMixer; var MixPar: TMMDSEDMixerParams);
  90. begin
  91.     with Mix do
  92.     begin
  93.         MixPar.BitLength        := BitLength;
  94.         MixPar.DeviceId         := DeviceId;
  95.         MixPar.Level            := Level;
  96.         MixPar.SampleRate       := SampleRate;
  97.         MixPar.SpeakerConfig    := SpeakerConfiguration;
  98.     end;
  99. end;
  100. procedure MMDSEDRecordFromBuffer(Ch: TMMDSMixChannel; var BufPar: TMMDSEDBufferParams);
  101. begin
  102.     with Ch do
  103.     begin
  104.         BufPar.Frequency    := Frequency;
  105.         BufPar.Panning      := Panning;
  106.         BufPar.Volume       := Volume;
  107.     end;
  108. end;
  109. procedure MMDSEDMixerFromRecord(Mix: TMMDSWaveMixer; const MixPar: TMMDSEDMixerParams);
  110. begin
  111.     with Mix do
  112.     begin
  113.         BitLength           := MixPar.BitLength;
  114.         DeviceId            := MixPar.DeviceId;
  115.         Level               := MixPar.Level;
  116.         SampleRate          := MixPar.SampleRate;
  117.         SpeakerConfiguration:= MixPar.SpeakerConfig;
  118.     end;
  119. end;
  120. procedure MMDSEDBufferFromRecord(Ch: TMMDSMixChannel; const BufPar: TMMDSEDBufferParams);
  121. begin
  122.     with Ch do
  123.     begin
  124.         Frequency    := BufPar.Frequency;
  125.         Panning      := BufPar.Panning;
  126.         Volume       := BufPar.Volume;
  127.     end;
  128. end;
  129. procedure MMDSEDRecordFromListener(Mix: TMMDSWaveMixer; var ListPar: TMMDSEDListenerParams);
  130. begin
  131.     with Mix.Sound3D do
  132.     begin
  133.         ListPar.DistanceFactor  := DistanceFactor;
  134.         ListPar.DopplerFactor   := DopplerFactor;
  135.         ListPar.OrientFront     := OrientFront.AsVector;
  136.         ListPar.OrientTop       := OrientTop.AsVector;
  137.         ListPar.Position        := Position.AsVector;
  138.         ListPar.RollOffFactor   := RollOffFactor;
  139.         ListPar.Velocity        := Velocity.AsVector;
  140.     end;
  141. end;
  142. procedure MMDSEDRecordFromSource(Ch: TMMDSMixChannel; var SrcPar: TMMDSEDSourceParams);
  143. begin
  144.     with Ch.Sound3D do
  145.     begin
  146.         SrcPar.ConeOrientation      := ConeOrientation.AsVector;
  147.         SrcPar.ConeOutsideVolume    := ConeOutsideVolume;
  148.         SrcPar.InsideConeAngle      := InsideConeAngle;
  149.         SrcPar.MaxDistance          := MaxDistance;
  150.         SrcPar.MinDistance          := MinDistance;
  151.         SrcPar.Mode                 := Mode;
  152.         SrcPar.OutsideConeAngle     := OutsideConeAngle;
  153.         SrcPar.Position             := Position.AsVector;
  154.         SrcPar.Velocity             := Velocity.AsVector;
  155.     end;
  156. end;
  157. procedure MMDSEDListenerFromRecord(Mix: TMMDSWaveMixer; const ListPar: TMMDSEDListenerParams);
  158. begin
  159.     with Mix.Sound3D do
  160.     begin
  161.         DistanceFactor      := ListPar.DistanceFactor;
  162.         DopplerFactor       := ListPar.DopplerFactor;
  163.         OrientFront.AsVector:= ListPar.OrientFront;
  164.         OrientTop.AsVector  := ListPar.OrientTop;
  165.         Position.AsVector   := ListPar.Position;
  166.         RollOffFactor       := ListPar.RollOffFactor;
  167.         Velocity.AsVector   := ListPar.Velocity;
  168.     end;
  169. end;
  170. procedure MMDSEDSourceFromRecord(Ch: TMMDSMixChannel; const SrcPar: TMMDSEDSourceParams);
  171. begin
  172.     with Ch.Sound3D do
  173.     begin
  174.         ConeOrientation.AsVector := SrcPar.ConeOrientation;
  175.         ConeOutsideVolume   := SrcPar.ConeOutsideVolume;
  176.         InsideConeAngle     := SrcPar.InsideConeAngle;
  177.         MaxDistance         := SrcPar.MaxDistance;
  178.         MinDistance         := SrcPar.MinDistance;
  179.         Mode                := SrcPar.Mode;
  180.         OutsideConeAngle    := SrcPar.OutsideConeAngle;
  181.         Position.AsVector   := SrcPar.Position;
  182.         Velocity.AsVector   := SrcPar.Velocity;
  183.     end;
  184. end;
  185. type
  186.     TStreamHack = class(TMemoryStream)
  187.     public
  188.         procedure   SetPtr(Ptr: Pointer; Size: LongInt);
  189.     end;
  190. procedure TStreamHack.SetPtr(Ptr: Pointer; Size: LongInt);
  191. begin
  192.     SetPointer(Ptr,Size);
  193. end;
  194. function  MMDSEDCreateWaveRecord(Wave: TMMWave): TMMDSEDWaveRecord;
  195. var
  196.     S : TMemoryStream;
  197. begin
  198.     FillChar(Result,SizeOf(Result),0);
  199.     S := TMemoryStream.Create;
  200.     try
  201.         if Wave <> nil then
  202.         begin
  203.             Wave.SaveToStream(S);
  204.             Result.Data := S.Memory;
  205.             Result.Size := S.Size;
  206.             TStreamHack(S).SetPtr(nil,0);
  207.         end;
  208.     finally
  209.         S.Free;
  210.     end;
  211. end;
  212. procedure MMDSEDFreeWaveRecord(R: TMMDSEDWaveRecord);
  213. begin
  214.     if R.Data <> nil then
  215.         GlobalFreePtr(R.Data);
  216. end;
  217. procedure MMDSEDLoadWaveFromRecord(R: TMMDSEDWaveRecord; Wave: TMMWave);
  218. var
  219.     S: TMemoryStream;
  220. begin
  221.     S := TMemoryStream.Create;
  222.     try
  223.         if R.Data <> nil then
  224.         begin
  225.             TStreamHack(S).SetPtr(R.Data,R.Size);
  226.             try
  227.                 Wave.LoadFromStream(S);
  228.             finally
  229.                 TStreamHack(S).SetPtr(nil,0);
  230.             end;
  231.         end;
  232.     finally
  233.         S.Free;
  234.     end;
  235. end;
  236. end.