📄 mmdmusic.pas
字号:
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 + -