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

📄 mmdmusic.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 5 页
字号:

   PDMUS_REGION = ^TDMUS_REGION;
   TDMUS_REGION = record
     RangeKey     : TRGNRANGE;
     RangeVelocity: TRGNRANGE;
     fusOptions   : WORD;
     usKeyGroup   : WORD;
     ulRegionArtIdx: DWORD;         // If zero the region does not have an articulation */
     ulNextRegionIdx: DWORD;        // If zero no more regions */
     ulFirstExtCkIdx: DWORD;        // If zero no 3rd party entenstion chunks associated with the region */
     WaveLink: TWAVELINK;
     WSMP: TWSMPL;                   //  If WSMP.cSampleLoops > 1 then a WLOOP is included */
     WLOOP: TWLOOP;
   end;

   PDMUS_LFOPARAMS = ^TDMUS_LFOPARAMS;
   TDMUS_LFOPARAMS = record
     pcFrequency: PCENT;
     tcDelay: TCENT;
     gcVolumeScale: GCENT;
     pcPitchScale: PCENT;
     gcMWToVolume: GCENT;
     pcMWToPitch: PCENT;
   end;

   PDMUS_VEGPARAMS = ^TDMUS_VEGPARAMS;
   TDMUS_VEGPARAMS = record
     tcAttack: TCENT;
     tcDecay: TCENT;
     ptSustain: PERCENT;
     tcRelease: TCENT;
     tcVel2Attack: TCENT;
     tcKey2Decay: TCENT;
   end;

   PDMUS_PEGPARAMS = ^TDMUS_PEGPARAMS;
   TDMUS_PEGPARAMS = record
     tcAttack: TCENT;
     tcDecay: TCENT;
     ptSustain: PERCENT;
     tcRelease: TCENT;
     tcVel2Attack: TCENT;
     tcKey2Decay: TCENT;
     pcRange: PCENT;
   end;

   PDMUS_MSCPARAMS = ^TDMUS_MSCPARAMS;
   TDMUS_MSCPARAMS = record
     ptDefaultPan: PERCENT;
   end;

   PDMUS_ARTICPARAMS = ^TDMUS_ARTICPARAMS;
   TDMUS_ARTICPARAMS = record
      LFO    : TDMUS_LFOPARAMS;
      VolEG  : TDMUS_VEGPARAMS;
      PitchEG: TDMUS_PEGPARAMS;
      Misc   : TDMUS_MSCPARAMS;
   end;

   PDMUS_ARTICULATION = ^TDMUS_ARTICULATION;
   TDMUS_ARTICULATION = record
      ulArt1Idx      : DWORD;     // If zero no DLS Level 1 articulation chunk */
      ulFirstExtCkIdx: DWORD;     // If zero no 3rd party entenstion chunks associated with the articulation */
   end;

const
   DMUS_MIN_DATA_SIZE = 4;

   //  The actual number is determined by cbSize of struct _DMUS_EXTENSIONCHUNK
type
   PDMUS_EXTENSIONCHUNK = ^TDMUS_EXTENSIONCHUNK;
   TDMUS_EXTENSIONCHUNK = record
      cbSize        : DWORD;              //  Size of extension chunk  */
      ulNextExtCkIdx: DWORD;              //  If zero no more 3rd party entenstion chunks */
      ExtCkID       : FOURCC;
      byExtCk: array[0..DMUS_MIN_DATA_SIZE-1] of byte;//  The actual number that follows is determined by cbSize */
   end;

   //  The actual number is determined by cbSize of struct _DMUS_COPYRIGHT */
   PDMUS_COPYRIGHT = ^TDMUS_COPYRIGHT;
   TDMUS_COPYRIGHT = record
      cbSize: DWORD;                             //  Size of copyright information */
      byCopyright: array[0..DMUS_MIN_DATA_SIZE-1] of Byte; //  The actual number that follows is determined by cbSize */
   end;

   PDMUS_WAVEDATA = ^TDMUS_WAVEDATA;
   TDMUS_WAVEDATA = record
      cbSize: DWORD;
      byData: array[0..DMUS_MIN_DATA_SIZE-1] of Byte;
   end;

   PDMUS_WAVE = ^TDMUS_WAVE;
   TDMUS_WAVE = record
      ulFirstExtCkIdx: DWORD;    // If zero no 3rd party entenstion chunks associated with the wave */
      ulCopyrightIdx : DWORD;    // If zero no Copyright information associated with the wave */
      WaveformatEx   : TWaveFormatEx;
      WaveData       : TDMUS_WAVEDATA;  // Wave data
   end;

   PDMUS_NOTERANGE = ^TDMUS_NOTERANGE;
   TDMUS_NOTERANGE = record
      dwLowNote  : DWORD; // Sets the low note for the range of MIDI note events to which the instrument responds.*/
      dwHighNote : DWORD; // Sets the high note for the range of MIDI note events to which the instrument responds.*/
   end;

// Software synths are enumerated from under this registry key.
const
     REGSTR_PATH_DIRECTMUSIC    =  'Software\Microsoft\DirectMusic';
     REGSTR_PATH_SOFTWARESYNTHS =  'Software\Microsoft\DirectMusic\SoftwareSynths';

type
    IDirectMusicBuffer = interface;
    IDirectMusicPort = interface;
//    IDirectMusicThru = interface;
    IReferenceClock = interface;
    IDirectMusicSynth = interface;
    IDirectMusicSynthSink = interface;

    PIDirectMusic = ^IDirectMusic;

    TFreeHandle = function(dw1,dw2: THANDLE): THANDLE;

    IDirectMusicSynth = interface(IUnknown)
       ['{f69b9165-bb60-11d1-afa6-00aa0024d8b6}']
       function Open(var pPortParams: TDMUS_PORTPARAMS): HRESULT;  stdcall;
       function Close: HRESULT; stdcall;
       function SetNumChannelGroups(dwGroups: DWORD): HRESULT; stdcall;
       function Download(var phDownload: THANDLE; pvData: Pointer; var pbFree: BOOL): HRESULT; stdcall;
       function Unload(hDownload: THandle; lpFreeHandle: TFreeHandle; hUserData: THandle): HRESULT; stdcall;
       function PlayBuffer(rt: TREFERENCE_TIME; pbBuffer: PByte; cbBuffer: DWORD): HRESULT; stdcall;
       function GetRunningStats(var pStats: TDMUS_SYNTHSTATS): HRESULT; stdcall;
       function GetPortCaps(var pCaps: TDMUS_PORTCAPS): HRESULT; stdcall;
       function SetMasterClock(pClock: IReferenceClock): HRESULT; stdcall;
       function GetLatencyClock(var pClock: IReferenceClock): HRESULT; stdcall;
       function Activate(hWnd: HWND; fEnable: BOOL): HRESULT; stdcall;
       function SetSynthSink(pSynthSink: IDirectMusicSynthSink): HRESULT; stdcall;
       function Render(pBuffer: PChar; dwLength, dwPosition: DWORD): HRESULT; stdcall;
    end;

    IDirectMusicSynthSink = interface(IUnknown)
       ['{d2ac2880-b39b-11d1-8704-00600893b1bd}']
       function Init(pSynth: IDirectMusicSynth): HRESULT; stdcall;
       function SetFormat(pWaveFormat: PWAVEFORMATEX): HRESULT; stdcall;
       function SetMasterClock(pClock: IReferenceClock): HRESULT; stdcall;
       function GetLatencyClock(var pClock: IReferenceClock): HRESULT; stdcall;
       function Activate(hwnd: HWND; fEnable: BOOL): HRESULT; stdcall;
       function SampleToRefTime(dwSampleTime: DWORD; var prfTime: TREFERENCE_TIME): HRESULT; stdcall;
       function RefTimeToSample(rfTime: TREFERENCE_TIME; var pdwSampleTime: DWORD): HRESULT; stdcall;
    end;

    IDirectMusic = interface(IUnknown)
       ['{d2ac2876-b39b-11d1-8704-00600893b1bd}']
       function EnumPort(dwIndex: DWORD; var pPortCaps: TDMUS_PORTCAPS): HRESULT; stdcall;
       function CreateMusicBuffer(pBufferDesc: PDMUS_BUFFERDESC;
                                  var ppBuffer: IDIRECTMUSICBUFFER;
                                  pUnkOuter: IUnknown): HRESULT; stdcall;
       function CreatePort(const rguidPort: TGUID;
                           const pPortParams: TDMUS_PORTPARAMS;
                           var ppPort: IDIRECTMUSICPORT;
                           pUnkOuter: IUnknown): HRESULT; stdcall;
       function EnumMasterClock(dwIndex: DWORD; var lpClockInfo: TDMUS_CLOCKINFO): HRESULT; stdcall;
       function GetMasterClock(var pguidClock: TGUID; var ppReferenceClock: IReferenceClock): HRESULT; stdcall;
       function SetMasterClock(const rguidClock: TGUID): HRESULT; stdcall;
       function Activate(fEnable: BOOL): HRESULT; stdcall;
       function GetDefaultPort(var pguidPort: TGUID): HRESULT; stdcall;
       function SetDirectSound(const pDirectSound: {LPDIRECTSOUND:} Pointer; hWnd: HWND): HRESULT; stdcall;
    end;

    IDirectMusicBuffer = interface(IUnknown)
       ['{d2ac2878-b39b-11d1-8704-00600893b1bd}']
       function Flush: HRESULT; stdcall;
       function TotalTime(var prtTime: TREFERENCE_TIME): HRESULT; stdcall;
       function PackStructured(rt: TREFERENCE_TIME; dwChannelGroup,dwChannelMessage: DWORD): HRESULT; stdcall;
       function PackUnstructured(rt: TREFERENCE_TIME;dwChannelGroup,cd: DWORD; lpb: PBYTE): HRESULT; stdcall;
       function ResetReadPtr: HRESULT; stdcall;
       function GetNextEvent(var prt: TREFERENCE_TIME;var pdwChannelGroup,pdwLength: DWORD;
                             var ppData: PByte): HRESULT; stdcall;
       function GetRawBufferPtr(var ppData: PByte): HRESULT; stdcall;
       function GetStartTime(var prt: TREFERENCE_TIME): HRESULT; stdcall;
       function GetUsedBytes(var pcb: DWORD): HRESULT; stdcall;
       function GetMaxBytes(var pcb: DWORD): HRESULT; stdcall;
       function GetBufferFormat(var pGuidFormat: TGUID): HRESULT; stdcall;
       function SetStartTime(rt: TREFERENCE_TIME): HRESULT; stdcall;
       function SetUsedBytes(cb: DWORD): HRESULT; stdcall;
    end;

    IDirectMusicInstrument = interface(IUnknown)
       ['{d2ac287d-b39b-11d1-8704-00600893b1bd}']
       function GetPatch(var pdwPatch: DWORD): HRESULT; stdcall;
       function SetPatch(dwPatch: DWORD): HRESULT; stdcall;
    end;

    IDirectMusicDownloadedInstrument = interface(IUnknown)
       ['{d2ac287e-b39b-11d1-8704-00600893b1bd}']
       // None at this time */
    end;

    IDirectMusicCollection = interface(IUnknown)
       ['{d2ac287c-b39b-11d1-8704-00600893b1bd}']
       function GetInstrument(dwPatch: DWORD;
                              var ppInstrument: IDirectMusicInstrument): HRESULT; stdcall;
       function EnumInstrument(dwIndex: DWORD; var pdwPatch: DWORD; pwszName: PWCHAR; dwNameLen: DWORD): HRESULT; stdcall;
    end;

    IDirectMusicDownload = interface(IUnknown)
       ['{d2ac287b-b39b-11d1-8704-00600893b1bd}']
       function GetBuffer(var ppvBuffer: Pointer;var pdwSize: DWORD): HRESULT; stdcall;
    end;

    IDirectMusicPortDownload = interface(IUnknown)
       ['{d2ac287a-b39b-11d1-8704-00600893b1bd}']
       function GetBuffer(dwDLId: DWORD; var ppIDMDownload: IDirectMusicDownload): HRESULT; stdcall;
       function AllocateBuffer(dwSize: DWORD; var ppIDMDownload: IDirectMusicDownload): HRESULT; stdcall;
       function GetDLId(var pdwStartDLId: DWORD; dwCount: DWORD): HRESULT; stdcall;
       function GetAppend(var pdwAppend: DWORD): HRESULT; stdcall;
       function Download(pIDMDownloads: IDirectMusicDownload): HRESULT; stdcall;
       function Unload(pIDMDownload: IDirectMusicDownload): HRESULT; stdcall;
    end;

    IDirectMusicPort = interface(IUnknown)
       ['{55e2edd8-cd7c-11d1-a76f-0000f875ac12}']
       function PlayBuffer(const pBuffer: IDIRECTMUSICBUFFER): HRESULT; stdcall;
       function SetReadNotificationHandle(hEvent: THANDLE): HRESULT; stdcall;
       function Read(var pBuffer: IDIRECTMUSICBUFFER): HRESULT; stdcall;
       function DownloadInstrument(pInstrument: IDirectMusicInstrument;
                                   var ppDownloadedInstrument: IDirectMusicDownloadedInstrument;
                                   pNoteRanges: PDMUS_NOTERANGE; dwNumNoteRanges: DWORD): HRESULT; stdcall;
       function UnloadInstrument(pDownloadedInstrument: IDirectMusicDownloadedInstrument): HRESULT; stdcall;
       function GetLatencyClock(var ppClock: IReferenceClock): HRESULT; stdcall;
       function GetRunningStats(var pStats: TDMUS_SYNTHSTATS): HRESULT; stdcall;
       function Compact: HRESULT; stdcall;
       function GetCaps(var pPortCaps: TDMUS_PORTCAPS): HRESULT; stdcall;
       function DeviceIoControl(dwIoControlCode: DWORD; lpInBuffer: Pointer; nInBufferSize: DWORD;
                                lpOutBuffer: Pointer; nOutBufferSize: DWORD;
                                var lpBytesReturned: DWORD;
                                var lpOverlapped: TOVERLAPPED): HRESULT; stdcall;
       function SetNumChannelGroups(dwChannelGroups: DWORD): HRESULT; stdcall;
       function GetNumChannelGroups(var pdwChannelGroups: DWORD): HRESULT; stdcall;
       function Activate(fActive: BOOL): HRESULT; stdcall;
       function SetChannelPriority(dwChannelGroup, dwChannel, dwPriority: DWORd): HRESULT; stdcall;
       function GetChannelPriority(dwChannelGroup, dwChannel: DWORD; var pdwPriority: DWORD): HRESULT; stdcall;
       function SetDirectSound(pDirectSound:{LPDIRECTSOUND} Pointer; pDirectSoundBuffer: {LPDIRECTSOUNDBUFFER} Pointer): HRESULT; stdcall;
       function GetFormat(pWaveFormatEx: PWAVEFORMATEX; var pdwWaveFormatExSize,pdwBufferSize: DWORd): HRESULT; stdcall;

    end;

    IReferenceClock = interface(IUnknown)
       ['{56a86897-0ad4-11ce-b03a-0020af0ba770}']
       function GetTime(var pTime: TREFERENCE_TIME): HRESULT; stdcall;
       //  ask for an async notification that a time has elapsed */
       function AdviseTime(baseTime: TREFERENCE_TIME;      //  base time */
                           streamTime: TREFERENCE_TIME;    //  stream offset time */
                           hEvent: Thandle;                //  advise via this event */
                           var pdwAdviseCookie: DWORD      //  where your cookie goes */
                           ): HRESULT; stdcall;
       //  ask for an async periodic notification that a time has elapsed */
       function AdvisePeriodic(startTime: TREFERENCE_TIME; //  starting at this time */
                               periodTime: TREFERENCE_TIME;//  time between notifications */
                               hSemaphore: Thandle;        //  advise via a semaphore */
                               var pdwAdviseCookie: DWORD  //  where your cookie goes */
                               ): HRESULT; stdcall;
       //  cancel a request for notification */
       function Unadvise(dwAdviseCookie: DWORD): HRESULT; stdcall;
    end;

const
    IID_IKsControl : TGUID =
        (D1:$28F54685;D2:$06FD;D3:$11D2;D4:($B2,$7A,$00,$A0,$C9,$22,$31,$96));

    IID_IReferenceClock : TGUID =
        (D1:$56a86897;D2:$0ad4;D3:$11ce;D4:($b0,$3a,$00,$20,$af,$0b,$a7,$70));

    CLSID_DirectMusic : TGUID =
        (D1:$636b9f10;D2:$0c7d;D3:$11d1;D4:($95,$b2,$00,$20,$af,$dc,$74,$21));

    CLSID_DirectMusicCollection : TGUID =
        (D1:$480ff4b0;D2:$28b2;D3:$11d1;D4:($be,$f7,$00,$c0,$4f,$bf,$8f,$ef));

    CLSID_DirectMusicSynth : TGUID =
        (D1:$58C2B4D0;D2:$46E7;D3:$11D1;D4:($89,$AC,$00,$A0,$C9,$05,$41,$29));

    CLSID_DirectMusicSynthSink : TGUID =
        (D1:$aec17ce3;D2:$a514;D3:$11d1;D4:($af,$a6,$00,$aa,$00,$24,$d8,$b6));

    IID_IDirectMusic : TGUID =
        //(D1:$d2ac2876;D2:$b39b;D3:$11d1;D4:($87,$04,$00,$60,$08,$93,$b1,$bd));
        (D1:$6536115a;D2:$7b2d;D3:$11d2;D4:($ba,$18,$00,$00,$f8,$75,$ac,$12));

    IID_IDirectMusicBuffer : TGUID =
        (D1:$d2ac2878;D2:$b39b;D3:$11d1;D4:($87,$04,$00,$60,$08,$93,$b1,$bd));

    IID_IDirectMusicPort : TGUID =

⌨️ 快捷键说明

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