⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmdsound.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{========================================================================}
{=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
{========================================================================}
{=                          All Rights Reserved                         =}
{========================================================================}
{=  D 01099 Dresden             = Fax.: +49(0)351-8037944               =}
{=  Loewenstr.7a                = info@swiftsoft.de                     =}
{========================================================================}
{=  Actual versions on http://www.swiftsoft.de/index.html               =}
{========================================================================}
{=  This code is for reference purposes only and may not be copied or   =}
{=  distributed in any format electronic or otherwise except one copy   =}
{=  for backup purposes.                                                =}
{=                                                                      =}
{=  No Delphi Component Kit or Component individually or in a collection=}
{=  subclassed or otherwise from the code in this unit, or associated   =}
{=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
{=  without express permission from SwiftSoft.                          =}
{=                                                                      =}
{=  For more licence informations please refer to the associated        =}
{=  HelpFile.                                                           =}
{========================================================================}
{=  $Date: 11.11.98 - 18:19:23 $                                        =}
{========================================================================}
unit MMDSound;

{$I COMPILER.INC}

interface

uses
    Windows,
    SysUtils,
    Classes,
    MMOLE2,
    MMSystem,
    MMRegs,
    MMD3DTyp;

type
    LONG        = LongInt;
    PLONG       = ^LONG;

const
    // Direct Sound Component GUID    {47D4D946-62E8-11cf-93BC-444553540000}
    CLSID_DirectSound           : TGUID =
        (D1:$47d4d946;D2:$62e8;D3:$11cf;D4:($93,$bc,$44,$45,$53,$54,$0,$0));

    // DirectSound 279afa83-4981-11ce-a521-0020af0be560
    IID_IDirectSound            : TGUID =
        (D1:$279AFA83;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));

    // DirectSoundBuffer 279afa85-4981-11ce-a521-0020af0be560
    IID_IDirectSoundBuffer      : TGUID =
        (D1:$279AFA85;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));

    // DirectSound3DListener 279afa84-4981-11ce-a521-0020af0be560
    IID_IDirectSound3DListener  : TGUID =
        (D1:$279AFA84;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));

    // DirectSound3DBuffer 279afa86-4981-11ce-a521-0020af0be560
    IID_IDirectSound3DBuffer    : TGUID =
        (D1:$279AFA86;D2:$4981;D3:$11CE;D4:($A5,$21,$00,$20,$AF,$0B,$E5,$60));

    // DirectSoundCapture B0210781-89CD-11D0-AF08-00A0C925CD16
    IID_IDirectSoundCapture: TGUID =
        (D1:$b0210781;D2:$89cd;D3:$11d0;D4:($af,$8,$0,$a0,$c9,$25,$cd,$16));

    // DirectSoundCapureBuffer B0210782-89CD-11D0-AF08-00A0C925CD16
    IID_IDirectSoundCaptureBuffer: TGUID =
        (D1:$b0210782;D2:$89cd;D3:$11d0;D4:($af,$8,$0,$a0,$c9,$25,$cd,$16));

    // DirectSoundNotify B0210783-89CD-11D0-AF08-00A0C925CD16
    IID_IDirectSoundNotify      : TGUID =
        (D1:$b0210783;D2:$89cd;D3:$11d0;D4:($af,$08,$00,$a0,$c9,$25,$cd,$16));

const
  { Return Codes }
  DS_OK                           = 0;
  { The call failed because resources (such as a priority level)
    were already being used by another caller. }
  DSERR_ALLOCATED                 = $88780000 + 10;
  { The control (vol,pan,etc.) requested by the caller is not available. }
  DSERR_CONTROLUNAVAIL            = $88780000 + 30;
  { An invalid parameter was passed to the returning function }
  DSERR_INVALIDPARAM              = E_INVALIDARG;
  { This call is not valid for the current state of this object }
  DSERR_INVALIDCALL               = $88780000 + 50;
  { An undetermined error occured inside the DSound subsystem }
  DSERR_GENERIC                   = E_FAIL;
  { The caller does not have the priority level required for the function
    to succeed. }                    
  DSERR_PRIOLEVELNEEDED           = $88780000 + 70;
  { The DSound subsystem couldn't allocate sufficient memory to complete
    the caller's request. }
  DSERR_OUTOFMEMORY               = E_OUTOFMEMORY;
  { The specified WAVE format is not supported }
  DSERR_BADFORMAT                 = $88780000 + 100;
  { The function called is not supported at this time }
  DSERR_UNSUPPORTED               = E_NOTIMPL;
  { No sound driver is available for use }
  DSERR_NODRIVER                  = $88780000 + 120;
  { This object is already initialized }
  DSERR_ALREADYINITIALIZED        = $88780000 + 130;
  { This object does not support aggregation }
  DSERR_NOAGGREGATION             = CLASS_E_NOAGGREGATION ;
  { The buffer memory has been lost, and must be Restored. }
  DSERR_BUFFERLOST                = $88780000 + 150;
  { Another app has a higher priority level, preventing this call from
    succeeding. }
  DSERR_OTHERAPPHASPRIO           = $88780000 + 160;

  { DSound v2.0 }
  { The Initialize() member on the Direct Sound Object has not been
    called or called successfully before calls to other members. }
  DSERR_UNINITIALIZED             = $88780000 + 170;

const
  { Flags }
  DSCAPS_PRIMARYMONO          = $00000001;
  DSCAPS_PRIMARYSTEREO        = $00000002;
  DSCAPS_PRIMARY8BIT          = $00000004;
  DSCAPS_PRIMARY16BIT         = $00000008;
  DSCAPS_CONTINUOUSRATE       = $00000010;
  DSCAPS_EMULDRIVER           = $00000020;
  DSCAPS_CERTIFIED            = $00000040;
  DSCAPS_SECONDARYMONO        = $00000100;
  DSCAPS_SECONDARYSTEREO      = $00000200;
  DSCAPS_SECONDARY8BIT        = $00000400;
  DSCAPS_SECONDARY16BIT       = $00000800;

  DSBPLAY_LOOPING             = $00000001;

  DSBSTATUS_PLAYING           = $00000001;
  DSBSTATUS_BUFFERLOST        = $00000002;
  DSBSTATUS_LOOPING           = $00000004;

  DSBLOCK_FROMWRITECURSOR     = $00000001;
  DSBLOCK_ENTIREBUFFER        = $00000002;

  DSSCL_NORMAL                = 1;
  DSSCL_PRIORITY              = 2;
  DSSCL_EXCLUSIVE             = 3;
  DSSCL_WRITEPRIMARY          = 4;

  { DSound v3.0 }
  { flags for IDirectSound3DBuffer::SetMode }
  DS3DMODE_NORMAL             = 0; { default must be 0 }
  DS3DMODE_HEADRELATIVE       = 1;
  DS3DMODE_DISABLE            = 2;

  { flags for dwApply parameter of some 3D functions }
  DS3D_IMMEDIATE              = 0;
  DS3D_DEFERRED               = 1;

  DS3D_MINDISTANCEFACTOR      = 0.0;
  DS3D_MAXDISTANCEFACTOR      = 10.0;
  DS3D_DEFAULTDISTANCEFACTOR  = 1.0;

  DS3D_MINROLLOFFFACTOR       = 0.0;
  DS3D_MAXROLLOFFFACTOR       = 10.0;
  DS3D_DEFAULTROLLOFFFACTOR   = 1.0;

  DS3D_MINDOPPLERFACTOR       = 0.0;
  DS3D_MAXDOPPLERFACTOR       = 10.0;
  DS3D_DEFAULTDOPPLERFACTOR   = 1.0;

  DS3D_DEFAULTMINDISTANCE     = 1.0;
  DS3D_DEFAULTMAXDISTANCE     = 1000000000.0;

  DS3D_MINCONEANGLE           = 0;
  DS3D_MAXCONEANGLE           = 360;
  DS3D_DEFAULTCONEANGLE       = 360;

  DS3D_DEFAULTCONEOUTSIDEVOLUME = 0;

  DSBCAPS_PRIMARYBUFFER       = $00000001;
  DSBCAPS_STATIC              = $00000002;
  DSBCAPS_LOCHARDWARE         = $00000004;
  DSBCAPS_LOCSOFTWARE         = $00000008;

  DSBCAPS_CTRL3D              = $00000010; { v3.0 }
  DSBCAPS_CTRLFREQUENCY       = $00000020; { v3.0 }
  DSBCAPS_CTRLPAN             = $00000040; { v3.0 }
  DSBCAPS_CTRLVOLUME          = $00000080; { v3.0 }
  DSBCAPS_CTRLDEFAULT         = $000000E0; { Pan + volume + frequency. }
  DSBCAPS_CTRLPOSITIONNOTIFY  = $00000100; { v5.0 }
  DSBCAPS_CTRLALL             = $000001F0; { All control capabilities }
  DSBCAPS_STICKYFOCUS         = $00004000; { v2.0 }
  DSBCAPS_GLOBALFOCUS         = $00008000; { v3.0 }

  DSBCAPS_GETCURRENTPOSITION2 = $00010000; { More accurate play cursor under emulation }
  DSBCAPS_MUTE3DATMAXDISTANCE = $00020000; { The sound is reduced to silence at the maximum distance. }

  DSBCAPS_LIMITED             = $80000000; { used only for SwiftSoft Audio Engine}
                                           { buffers with this Flag will be Mono when 3D to save HW Buffers }

  DSCBCAPS_WAVEMAPPED         = $80000000;

  DSSPEAKER_HEADPHONE         = 1;
  DSSPEAKER_MONO              = 2;
  DSSPEAKER_QUAD              = 3;
  DSSPEAKER_STEREO            = 4;
  DSSPEAKER_SURROUND          = 5;

  DSSPEAKER_GEOMETRY_MIN      = $00000005;  {   5 degrees }
  DSSPEAKER_GEOMETRY_NARROW   = $0000000A;  {  10 degrees }
  DSSPEAKER_GEOMETRY_WIDE     = $00000014;  {  20 degrees }
  DSSPEAKER_GEOMETRY_MAX      = $000000B4;  { 180 degrees }

  DSCCAPS_EMULDRIVER          = $00000020;

  DSCBLOCK_ENTIREBUFFER       = $00000001;

  DSCBSTATUS_CAPTURING        = $00000001;
  DSCBSTATUS_LOOPING          = $00000002;

  DSCBSTART_LOOPING           = $00000001;

  DSBFREQUENCY_MIN            = 100;
  DSBFREQUENCY_MAX            = 100000;
  DSBFREQUENCY_ORIGINAL       = 0;

  DSBPAN_LEFT                 = -10000;
  DSBPAN_CENTER               = 0;
  DSBPAN_RIGHT                = 10000;

  DSBVOLUME_NONE              = -100000;
  DSBVOLUME_MIN               = -10000;
  DSBVOLUME_MAX               = 0;

  DSBSIZE_MIN                 = 4;
  DSBSIZE_MAX                 = $0FFFFFFF;

  DSBPN_OFFSETSTOP            = $FFFFFFFF;

type
  IDirectSound       = class;
  IDirectSoundBuffer = class;

  { Structures }
  PDSCAPS = ^TDSCAPS;
  TDSCAPS = record
    dwSize                        : DWORD;
    dwFlags                       : DWORD;
    dwMinSecondarySampleRate      : DWORD;
    dwMaxSecondarySampleRate      : DWORD;
    dwPrimaryBuffers              : DWORD;
    dwMaxHwMixingAllBuffers       : DWORD;
    dwMaxHwMixingStaticBuffers    : DWORD;
    dwMaxHwMixingStreamingBuffers : DWORD;
    dwFreeHwMixingAllBuffers      : DWORD;
    dwFreeHwMixingStaticBuffers   : DWORD;
    dwFreeHwMixingStreamingBuffers: DWORD;
    dwMaxHw3DAllBuffers           : DWORD;
    dwMaxHw3DStaticBuffers        : DWORD;
    dwMaxHw3DStreamingBuffers     : DWORD;
    dwFreeHw3DAllBuffers          : DWORD;
    dwFreeHw3DStaticBuffers       : DWORD;
    dwFreeHw3DStreamingBuffers    : DWORD;
    dwTotalHwMemBytes             : DWORD;
    dwFreeHwMemBytes              : DWORD;
    dwMaxContigFreeHwMemBytes     : DWORD;
    dwUnlockTransferRateHwBuffers : DWORD;
    dwPlayCpuOverheadSwBuffers    : DWORD;
    dwReserved1                   : DWORD;
    dwReserved2                   : DWORD;
  end;

  PDSBCAPS = ^TDSBCAPS;
  TDSBCAPS = record
    dwSize              : DWORD;
    dwFlags             : DWORD;
    dwBufferBytes       : DWORD;
    dwUnlockTransferRate: DWORD;
    dwPlayCpuOverhead   : DWORD;
  end;

  PDSBUFFERDESC = ^TDSBUFFERDESC;
  TDSBUFFERDESC = record
    dwSize       : DWORD;
    dwFlags      : DWORD;
    dwBufferBytes: DWORD;
    dwReserved   : DWORD;
    lpwfxFormat  : PWaveFormatEx;
  end;

  PDS3DBUFFER   = ^TDS3DBUFFER;
  TDS3DBUFFER   = record
    dwSize              : DWORD;
    vPosition           : TD3DVECTOR;
    vVelocity           : TD3DVECTOR;
    dwInsideConeAngle   : DWORD;
    dwOutsideConeAngle  : DWORD;
    vConeOrientation    : TD3DVECTOR;
    lConeOutsideVolume  : LONG;
    flMinDistance       : D3DVALUE;
    flMaxDistance       : D3DVALUE;
    dwMode              : DWORD;
  end;

  PDS3DLISTENER = ^TDS3DLISTENER;
  TDS3DLISTENER = record
    dwSize              : DWORD;
    vPosition           : TD3DVECTOR;
    vVelocity           : TD3DVECTOR;
    vOrientFront        : TD3DVECTOR;
    vOrientTop          : TD3DVECTOR;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -