Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

797 lines
40 KiB

  1. /*
  2. *
  3. */
  4. #ifndef _DMUSICI_
  5. #define _DMUSICI_
  6. #include <windows.h>
  7. #define COM_NO_WINDOWS_H
  8. #include <objbase.h>
  9. #include <mmsystem.h>
  10. #include <dmusicc.h>
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. typedef WORD TRANSITION_TYPE;
  15. typedef LONGLONG REFERENCE_TIME;
  16. typedef long MUSIC_TIME;
  17. #define DMUS_PPQ 768 /* parts per quarter note */
  18. /*//////////////////////////////////////////////////////////////////////
  19. // Custom success codes */
  20. #define DMUS_S_REQUEUE 0x00000222 /* returned to requeue a PMSG */
  21. #define DMUS_S_FREE 0x00000223 /* returned to cause the PMSG to be freed */
  22. #define DMUS_S_END 0x00000224 /* returned by IDirectMusicSegment::Play indicating the end of the segment */
  23. interface IDirectMusic;
  24. interface IDirectMusicTrack;
  25. interface IDirectMusicPerformance;
  26. interface IDirectMusicTool;
  27. interface IDirectMusicSegment;
  28. interface IDirectMusicSegmentState;
  29. interface IDirectMusicBuffer;
  30. interface IDirectMusicGraph;
  31. interface IDirectMusicPort;
  32. interface IDirectMusicBuffer;
  33. interface IDirectMusicPort;
  34. interface IDirectMusicInstrument;
  35. interface IDirectMusicDownloadedInstrument;
  36. interface IDirectMusicBand;
  37. interface IDirectMusicPersonality;
  38. interface IDirectMusicLoader;
  39. interface IDirectMusicObject;
  40. interface IDirectMusicBand;
  41. #ifndef __cplusplus
  42. typedef interface IDirectMusic IDirectMusic;
  43. typedef interface IDirectMusicTrack IDirectMusicTrack;
  44. typedef interface IDirectMusicPerformance IDirectMusicPerformance;
  45. typedef interface IDirectMusicTool IDirectMusicTool;
  46. typedef interface IDirectMusicSegment IDirectMusicSegment;
  47. typedef interface IDirectMusicSegmentState IDirectMusicSegmentState;
  48. typedef interface IDirectMusicBuffer IDirectMusicBuffer;
  49. typedef interface IDirectMusicGraph IDirectMusicGraph;
  50. typedef interface IDirectMusicPort IDirectMusicPort;
  51. typedef interface IDirectMusicBuffer IDirectMusicBuffer;
  52. typedef interface IDirectMusicPort IDirectMusicPort;
  53. typedef interface IDirectMusicInstrument IDirectMusicInstrument;
  54. typedef interface IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument;
  55. typedef interface IDirectMusicBand IDirectMusicBand;
  56. typedef interface IDirectMusicPersonality IDirectMusicPersonality;
  57. typedef interface IDirectMusicObject IDirectMusicObject;
  58. typedef interface IDirectMusicLoader IDirectMusicLoader;
  59. typedef interface IDirectMusicBand IDirectMusicBand;
  60. #endif
  61. typedef enum enumDMUS_COMMANDT_TYPES
  62. {
  63. DMUS_COMMANDT_GROOVE = 0,
  64. DMUS_COMMANDT_FILL = 1,
  65. DMUS_COMMANDT_INTRO = 2,
  66. DMUS_COMMANDT_BREAK = 3,
  67. DMUS_COMMANDT_END = 4
  68. } DMUS_COMMANDT_TYPES;
  69. typedef enum enumDMUS_SHAPET_TYPES
  70. {
  71. DMUS_SHAPET_FALLING = 0,
  72. DMUS_SHAPET_LEVEL = 1,
  73. DMUS_SHAPET_LOOPABLE = 2,
  74. DMUS_SHAPET_LOUD = 3,
  75. DMUS_SHAPET_QUIET = 4,
  76. DMUS_SHAPET_PEAKING = 5,
  77. DMUS_SHAPET_RANDOM = 6,
  78. DMUS_SHAPET_RISING = 7,
  79. DMUS_SHAPET_SONG = 8
  80. } DMUS_SHAPET_TYPES;
  81. typedef enum enumDMUS_COMPOSEF_FLAGS
  82. {
  83. DMUS_COMPOSEF_NONE = 0,
  84. DMUS_COMPOSEF_ALIGN = 0x1,
  85. DMUS_COMPOSEF_OVERLAP = 0x2,
  86. DMUS_COMPOSEF_IMMEDIATE = 0x4,
  87. DMUS_COMPOSEF_GRID = 0x8,
  88. DMUS_COMPOSEF_BEAT = 0x10,
  89. DMUS_COMPOSEF_MEASURE = 0x20,
  90. DMUS_COMPOSEF_MODULATE = 0x1000,
  91. DMUS_COMPOSEF_LONG = 0x2000
  92. } DMUS_COMPOSEF_FLAGS;
  93. #define DMUS_PMSG_PART \
  94. DWORD dwSize; \
  95. REFERENCE_TIME rtTime; /* real time (in 100 nanosecond increments) */ \
  96. MUSIC_TIME mtTime; /* music time */ \
  97. DWORD dwFlags; /* various bits (see DMUS_PMSG_FLAGS enumeration) */ \
  98. DWORD dwPChannel; /* Performance Channel. The Performance can */ \
  99. /* use this to determine the port/channel. */ \
  100. DWORD dwVirtualTrackID; /* virtual track ID */ \
  101. IDirectMusicTool* pTool; /* tool interface pointer */ \
  102. IDirectMusicGraph* pGraph; /* tool graph interface pointer */ \
  103. DWORD dwType; /* PMSG type (see DMUS_PM_TYPE defines) */ \
  104. IUnknown* punkUser; /* user com pointer, auto released upon PMSG free */
  105. /* every DMUS_PMSG is based off of this structure. The Performance needs
  106. to access these members consistently in every PMSG that goes through it. */
  107. typedef struct _DMUS_PMSG
  108. {
  109. /* begin DMUS_PMSG_PART */
  110. DMUS_PMSG_PART
  111. /* end DMUS_PMSG_PART */
  112. } DMUS_PMSG;
  113. /* DMUS_PMSGF_FLAGS fill the DMUS_PMSG's dwFlags member */
  114. typedef enum enumDMUS_PMSGF_FLAGS
  115. {
  116. DMUS_PMSGF_REFTIME = 1, /* if rtTime is valid */
  117. DMUS_PMSGF_MUSICTIME = 2, /* if mtTime is valid */
  118. DMUS_PMSGF_TOOL_IMMEDIATE = 4, /* if PMSG should be processed immediately */
  119. DMUS_PMSGF_TOOL_QUEUE = 8, /* if PMSG should be processed a little early, at Queue time */
  120. DMUS_PMSGF_TOOL_ATTIME = 16, /* if PMSG should be processed at the time stamp */
  121. DMUS_PMSGF_TOOL_FLUSH = 32 /* if PMSG is being flushed */
  122. } DMUS_PMSGF_FLAGS;
  123. /* DMUS_PMSGT_TYPES fill the DMUS_PMSG's dwType member */
  124. typedef enum enumDMUS_PMSGT_TYPES
  125. {
  126. DMUS_PMSGT_MIDI = 0, /* MIDI short message */
  127. DMUS_PMSGT_NOTE = 1, /* Interactive Music Note */
  128. DMUS_PMSGT_SYSEX = 2, /* MIDI long message (system exclusive message) */
  129. DMUS_PMSGT_NOTIFICATION = 3, /* Notification message */
  130. DMUS_PMSGT_TEMPO = 4, /* Tempo message */
  131. DMUS_PMSGT_CURVE = 5, /* Control change / pitch bend, etc. curve */
  132. DMUS_PMSGT_TIMESIG = 6, /* Time signature */
  133. DMUS_PMSGT_PATCH = 7, /* Patch changes */
  134. DMUS_PMSGT_TRANSPOSE = 8, /* Transposition messages */
  135. DMUS_PMSGT_USER = 255 /* User message */
  136. } DMUS_PMSGT_TYPES;
  137. /* DMUS_SEGF_FLAGS correspond to IDirectMusicPerformance::PlaySegment, and other API */
  138. typedef enum enumDMUS_SEGF_FLAGS
  139. {
  140. DMUS_SEGF_IMMEDIATE = 0, /* play on music or reference time boundary */
  141. DMUS_SEGF_RESMASK = 7, /* masks resolution bits */
  142. DMUS_SEGF_GRID = 2, /* play on grid boundary */
  143. DMUS_SEGF_BEAT = 3, /* play on beat boundary */
  144. DMUS_SEGF_MEASURE = 4, /* play on measure boundary */
  145. DMUS_SEGF_DEFAULT = 5, /* use segment's default boundary */
  146. DMUS_SEGF_NOW = 64, /* play now (asap) */
  147. DMUS_SEGF_REFTIME = 16, /* time parameter is in reference time */
  148. DMUS_SEGF_SECONDARY = 32, /* secondary segment */
  149. DMUS_SEGF_QUEUE = 128, /* queue at the end of the primary segment queue (primary only) */
  150. DMUS_SEGF_CONTROL = 256 /* play as a control track (secondary segments only) */
  151. } DMUS_SEGF_FLAGS;
  152. /* The following flags are sent in the IDirectMusicTrack::Play() method */
  153. /* inside the dwFlags parameter */
  154. typedef enum enumDMUS_TRACKF_FLAGS
  155. {
  156. DMUS_TRACKF_SEEK = 1, /* set on a seek */
  157. DMUS_TRACKF_LOOP = 2, /* set on a loop (repeat) */
  158. DMUS_TRACKF_START = 4, /* set on first call to Play */
  159. DMUS_TRACKF_FLUSH = 8 /* set when this call is in response to a flush on the perfomance */
  160. } DMUS_TRACKF_FLAGS;
  161. #define DMUS_MAXSUBCHORD 8
  162. /* DMUS_NOTE_PMSG */
  163. typedef struct _DMUS_NOTE_PMSG
  164. {
  165. /* begin DMUS_PMSG_PART */
  166. DMUS_PMSG_PART
  167. /* end DMUS_PMSG_PART */
  168. MUSIC_TIME mtDuration; /* duration */
  169. WORD wMusicValue; /* Description of note in chord and key. */
  170. WORD wMeasure; /* Measure in which this note occurs */
  171. short nOffset; /* Offset from grid at which this note occurs */
  172. BYTE bBeat; /* Beat (in measure) at which this note occurs */
  173. BYTE bGrid; /* Grid offset from beat at which this note occurs */
  174. BYTE bVelocity; /* Note velocity */
  175. BYTE bFlags; /* see DMUS_NOTE_FLAGS */
  176. BYTE bTimeRange; /* Range to randomize time. */
  177. BYTE bDurRange; /* Range to randomize duration. */
  178. BYTE bVelRange; /* Range to randomize velocity. */
  179. BYTE bInversionID; /* Identifies inversion group to which this note belongs */
  180. BYTE bPlayModeFlags; /* Play mode */
  181. BYTE bMidiValue; /* The MIDI note value, converted from wMusicValue */
  182. } DMUS_NOTE_PMSG;
  183. typedef enum enumDMUS_NOTEF_FLAGS
  184. {
  185. DMUS_NOTEF_NOTEON = 1, /* Set if this is a MIDI Note On. Otherwise, it is MIDI Note Off */
  186. } DMUS_NOTEF_FLAGS;
  187. /* DMUS_MIDI_PMSG */
  188. typedef struct _DMUS_MIDI_PMSG
  189. {
  190. /* begin DMUS_PMSG_PART */
  191. DMUS_PMSG_PART
  192. /* end DMUS_PMSG_PART */
  193. BYTE bStatus;
  194. BYTE bByte1;
  195. BYTE bByte2;
  196. BYTE bPad[1];
  197. } DMUS_MIDI_PMSG;
  198. /* DMUS_PATCH_PMSG */
  199. typedef struct _DMUS_PATCH_PMSG
  200. {
  201. /* begin DMUS_PMSG_PART */
  202. DMUS_PMSG_PART
  203. /* end DMUS_PMSG_PART */
  204. BYTE byInstrument;
  205. BYTE byMSB;
  206. BYTE byLSB;
  207. BYTE byPad[1];
  208. DWORD dwGroup;
  209. DWORD dwMChannel;
  210. } DMUS_PATCH_PMSG;
  211. /* DMUS_TRANSPOSE_PMSG */
  212. typedef struct _DMUS_TRANSPOSE_PMSG
  213. {
  214. /* begin DMUS_PMSG_PART */
  215. DMUS_PMSG_PART
  216. /* end DMUS_PMSG_PART */
  217. short nTranspose;
  218. } DMUS_TRANSPOSE_PMSG;
  219. /* DMUS_TEMPO_PMSG */
  220. typedef struct _DMUS_TEMPO_PMSG
  221. {
  222. /* begin DMUS_PMSG_PART */
  223. DMUS_PMSG_PART
  224. /* end DMUS_PMSG_PART */
  225. double dblTempo; /* the tempo */
  226. } DMUS_TEMPO_PMSG;
  227. #define DMUS_TEMPO_MAX 350
  228. #define DMUS_TEMPO_MIN 10
  229. #define DMUS_MASTERTEMPO_MAX 2.0
  230. #define DMUS_MASTERTEMPO_MIN 0.25
  231. #define DMUS_MASTERVOLUME_MAX 6
  232. #define DMUS_MASTERVOLUME_MIN -100
  233. /* DMUS_SYSEX_PMSG */
  234. typedef struct _DMUS_SYSEX_PMSG
  235. {
  236. /* begin DMUS_PMSG_PART */
  237. DMUS_PMSG_PART
  238. /* end DMUS_PMSG_PART */
  239. DWORD dwLen; /* length of the data */
  240. BYTE abData[1]; /* array of data, length equal to dwLen */
  241. } DMUS_SYSEX_PMSG;
  242. /* DMUS_CURVE_PMSG */
  243. typedef struct _DMUS_CURVE_PMSG
  244. {
  245. /* begin DMUS_PMSG_PART */
  246. DMUS_PMSG_PART
  247. /* end DMUS_PMSG_PART */
  248. MUSIC_TIME mtDuration; /* how long this curve lasts */
  249. MUSIC_TIME mtOriginalStart; /* must be set to either zero when this PMSG is created or to the original mtTime of the curve */
  250. MUSIC_TIME mtResetDuration; /* how long after the curve is finished to reset to the
  251. reset value, nResetValue */
  252. short nStartValue; /* curve's start value */
  253. short nEndValue; /* curve's end value */
  254. short nResetValue; /* curve's reset value, sent after mtResetDuration or
  255. upon a flush or invalidation */
  256. WORD wMeasure; /* Measure in which this curve occurs */
  257. short nOffset; /* Offset from grid at which this curve occurs */
  258. BYTE bBeat; /* Beat (in measure) at which this curve occurs */
  259. BYTE bGrid; /* Grid offset from beat at which this curve occurs */
  260. BYTE bType; /* type of curve */
  261. BYTE bCurveShape; /* shape of curve */
  262. BYTE bCCData; /* CC# if this is a control change type */
  263. BYTE bFlags; /* set to 1 if the nResetValue must be sent when the
  264. time is reached or an invalidate occurs because
  265. of a transition. If 0, the curve stays
  266. permanently stuck at the new value. All bits besides
  267. 1 are reserved. */
  268. } DMUS_CURVE_PMSG;
  269. /* Curve shapes */
  270. enum
  271. {
  272. DMUS_CURVES_LINEAR = 0,
  273. DMUS_CURVES_INSTANT = 1,
  274. DMUS_CURVES_EXP = 2,
  275. DMUS_CURVES_LOG = 3,
  276. DMUS_CURVES_SINE = 4
  277. };
  278. /* curve types */
  279. #define DMUS_CURVET_PBCURVE 0x03
  280. #define DMUS_CURVET_CCCURVE 0x04
  281. #define DMUS_CURVET_MATCURVE 0x05
  282. #define DMUS_CURVET_PATCURVE 0x06
  283. /* DMUS_TIMESIG_PMSG */
  284. typedef struct _DMUS_TIMESIG_PMSG
  285. {
  286. /* begin DMUS_PMSG_PART */
  287. DMUS_PMSG_PART
  288. /* end DMUS_PMSG_PART */
  289. /* Time signatures define how many beats per measure, which note receives */
  290. /* the beat, and the grid resolution. */
  291. BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */
  292. BYTE bBeat; /* what note receives the beat (bottom of time sig.) */
  293. /* we can assume that 0 means 256th note */
  294. WORD wGridsPerBeat; /* grids per beat */
  295. } DMUS_TIMESIG_PMSG;
  296. /* notification type values */
  297. /* The following correspond to GUID_NOTIFICATION_SEGMENT */
  298. #define DMUS_NOTIFICATION_SEGSTART 0
  299. #define DMUS_NOTIFICATION_SEGEND 1
  300. #define DMUS_NOTIFICATION_SEGALMOSTEND 2
  301. #define DMUS_NOTIFICATION_MUSICSTOPPED 3
  302. #define DMUS_NOTIFICATION_SEGLOOP 4
  303. /* The following corresponds to GUID_NOTIFICATION_MEASUREANDBEAT */
  304. #define DMUS_NOTIFICATION_MEASUREBEAT 0
  305. /* DMUS_NOTIFICATION_PMSG */
  306. typedef struct _DMUS_NOTIFICATION_PMSG
  307. {
  308. /* begin DMUS_PMSG_PART */
  309. DMUS_PMSG_PART
  310. /* end DMUS_PMSG_PART */
  311. GUID guidNotificationType;
  312. DWORD dwNotificationOption;
  313. DWORD dwField1;
  314. DWORD dwField2;
  315. } DMUS_NOTIFICATION_PMSG;
  316. /* Time Signature structure, used by IDirectMusicStyle */
  317. typedef struct _DMUS_TIMESIGNATURE
  318. {
  319. long lTime;
  320. BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */
  321. BYTE bBeat; /* what note receives the beat (bottom of time sig.) */
  322. /* we can assume that 0 means 256th note */
  323. WORD wGridsPerBeat; /* grids per beat */
  324. } DMUS_TIMESIGNATURE;
  325. #define DMUS_MAX_NAME 64 /* Maximum object name length. */
  326. #define DMUS_MAX_CATEGORY 64 /* Maximum object category name length. */
  327. #define DMUS_MAX_FILENAME MAX_PATH
  328. typedef struct _DMUS_VERSION {
  329. DWORD dwVersionMS;
  330. DWORD dwVersionLS;
  331. }DMUS_VERSION, FAR *LPDMUS_VERSION;
  332. /* The DMUSOBJECTDESC structure is used to communicate everything you could */
  333. /* possibly use to describe a DirectMusic object. */
  334. typedef struct _DMUS_OBJECTDESC
  335. {
  336. DWORD dwSize; /* Size of this structure. */
  337. DWORD dwValidData; /* Flags indicating which fields below are valid. */
  338. GUID guidObject; /* Unique ID for this object. */
  339. GUID guidClass; /* GUID for the class of object. */
  340. FILETIME ftDate; /* Last edited date of object. */
  341. DMUS_VERSION vVersion; /* Version. */
  342. WCHAR wszName[DMUS_MAX_NAME]; /* Name of object. */
  343. WCHAR wszCategory[DMUS_MAX_CATEGORY]; /* Category for object (optional). */
  344. WCHAR wszFileName[DMUS_MAX_FILENAME]; /* File path. */
  345. } DMUS_OBJECTDESC;
  346. typedef DMUS_OBJECTDESC *LPDMUS_OBJECTDESC;
  347. /* Flags for dwValidData. When set, a flag indicates that the */
  348. /* corresponding field in DMUSOBJECTDESC holds valid data. */
  349. #define DMUS_OBJ_OBJECT (1 << 0) /* Object GUID is valid. */
  350. #define DMUS_OBJ_CLASS (1 << 1) /* Class GUID is valid. */
  351. #define DMUS_OBJ_NAME (1 << 2) /* Name is valid. */
  352. #define DMUS_OBJ_CATEGORY (1 << 3) /* Category is valid. */
  353. #define DMUS_OBJ_FILENAME (1 << 4) /* File path is valid. */
  354. #define DMUS_OBJ_FULLPATH (1 << 5) /* Path is full path. */
  355. #define DMUS_OBJ_URL (1 << 6) /* Path is URL. */
  356. #define DMUS_OBJ_VERSION (1 << 7) /* Version is valid. */
  357. #define DMUS_OBJ_DATE (1 << 8) /* Date is valid. */
  358. #define DMUS_OBJ_LOADED (1 << 9) /* Object is currently loaded in memory. */
  359. typedef IDirectMusicObject __RPC_FAR *LPDMUS_OBJECT;
  360. typedef IDirectMusicLoader __RPC_FAR *LPDMUS_LOADER;
  361. typedef IDirectMusicBand __RPC_FAR *LPDMUS_BAND;
  362. #define DMUSB_LOADED (1 << 0) /* Set when band has been loaded */
  363. #define DMUSB_DEFAULT (1 << 1) /* Set when band is default band for a style */
  364. #undef INTERFACE
  365. #define INTERFACE IDirectMusicBand
  366. DECLARE_INTERFACE_(IDirectMusicBand, IUnknown)
  367. {
  368. /* IUnknown */
  369. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  370. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  371. STDMETHOD_(ULONG,Release) (THIS) PURE;
  372. /* IDirectMusicBand */
  373. STDMETHOD(CreateSegment) (THIS_ IDirectMusicSegment** ppSegment) PURE;
  374. STDMETHOD(Download) (THIS_ IDirectMusicPerformance* pPerformance) PURE;
  375. STDMETHOD(Unload) (THIS_ IDirectMusicPerformance* pPerformance) PURE;
  376. };
  377. #undef INTERFACE
  378. #define INTERFACE IDirectMusicObject
  379. DECLARE_INTERFACE_(IDirectMusicObject, IUnknown)
  380. {
  381. /* IUnknown */
  382. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  383. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  384. STDMETHOD_(ULONG,Release) (THIS) PURE;
  385. /* IDirectMusicObject */
  386. STDMETHOD(GetDescriptor) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
  387. STDMETHOD(SetDescriptor) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
  388. STDMETHOD(ParseDescriptor) (THIS_ LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) PURE;
  389. };
  390. #undef INTERFACE
  391. #define INTERFACE IDirectMusicLoader
  392. DECLARE_INTERFACE_(IDirectMusicLoader, IUnknown)
  393. {
  394. /* IUnknown */
  395. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  396. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  397. STDMETHOD_(ULONG,Release) (THIS) PURE;
  398. /* IDirectMusicLoader */
  399. STDMETHOD(GetObject) (THIS_ IDirectMusicObject **ppObject,LPDMUS_OBJECTDESC pDesc) PURE;
  400. STDMETHOD(SetSearchDirectory) (THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;
  401. STDMETHOD(ScanDirectory) (THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;
  402. STDMETHOD(CacheObject) (THIS_ IDirectMusicObject * pObject) PURE;
  403. STDMETHOD(ReleaseObject) (THIS_ IDirectMusicObject * pObject) PURE;
  404. STDMETHOD(ClearCache) (THIS_ REFGUID rguidClass) PURE;
  405. STDMETHOD(EnableCache) (THIS_ REFGUID rguidClass, BOOL fEnable) PURE;
  406. STDMETHOD(EnumObject) (THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;
  407. };
  408. /* Stream object supports IDirectMusicGetLoader interface to access loader while file parsing. */
  409. #undef INTERFACE
  410. #define INTERFACE IDirectMusicGetLoader
  411. DECLARE_INTERFACE_(IDirectMusicGetLoader, IUnknown)
  412. {
  413. /* IUnknown */
  414. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  415. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  416. STDMETHOD_(ULONG,Release) (THIS) PURE;
  417. /* IDirectMusicGetLoader */
  418. STDMETHOD(GetLoader) (THIS_ IDirectMusicLoader ** ppLoader) PURE;
  419. };
  420. /*////////////////////////////////////////////////////////////////////
  421. // IDirectMusicSegment */
  422. #undef INTERFACE
  423. #define INTERFACE IDirectMusicSegment
  424. DECLARE_INTERFACE_(IDirectMusicSegment, IUnknown)
  425. {
  426. /* IUnknown */
  427. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  428. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  429. STDMETHOD_(ULONG,Release) (THIS) PURE;
  430. /* IDirectMusicSegment */
  431. STDMETHOD(GetLength) (THIS_ MUSIC_TIME* pmtLength) PURE;
  432. STDMETHOD(SetLength) (THIS_ MUSIC_TIME mtLength) PURE;
  433. STDMETHOD(GetRepeats) (THIS_ DWORD* pdwRepeats) PURE;
  434. STDMETHOD(SetRepeats) (THIS_ DWORD dwRepeats) PURE;
  435. STDMETHOD(GetDefaultResolution) (THIS_ DWORD* pdwResolution) PURE;
  436. STDMETHOD(SetDefaultResolution) (THIS_ DWORD dwResolution) PURE;
  437. STDMETHOD(GetTrack) (THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack) PURE;
  438. STDMETHOD(InsertTrack) (THIS_ IDirectMusicTrack* pTrack, DWORD dwGroupBits) PURE;
  439. STDMETHOD(RemoveTrack) (THIS_ IDirectMusicTrack* pTrack) PURE;
  440. STDMETHOD(InitPlay) (THIS_ IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance) PURE;
  441. STDMETHOD(GetGraph) (THIS_ IDirectMusicGraph** ppGraph) PURE;
  442. STDMETHOD(SetGraph) (THIS_ IDirectMusicGraph* pGraph) PURE;
  443. STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
  444. STDMETHOD(RemoveNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
  445. STDMETHOD(GetParam) (THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) PURE;
  446. STDMETHOD(SetParam) (THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam) PURE;
  447. STDMETHOD(Clone) (THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment) PURE;
  448. STDMETHOD(SetStartPoint) (THIS_ MUSIC_TIME mtStart) PURE;
  449. STDMETHOD(GetStartPoint) (THIS_ MUSIC_TIME* pmtStart) PURE;
  450. STDMETHOD(SetLoopPoints) (THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;
  451. STDMETHOD(GetLoopPoints) (THIS_ MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd) PURE;
  452. STDMETHOD(SetPChannelsUsed) (THIS_ DWORD dwNumPChannels, DWORD* paPChannels) PURE;
  453. };
  454. /*/////////////////////////////////////////////////////////////////////
  455. // IDirectMusicSegmentState */
  456. #undef INTERFACE
  457. #define INTERFACE IDirectMusicSegmentState
  458. DECLARE_INTERFACE_(IDirectMusicSegmentState, IUnknown)
  459. {
  460. /* IUnknown */
  461. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  462. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  463. STDMETHOD_(ULONG,Release) (THIS) PURE;
  464. /* IDirectMusicSegmentState */
  465. STDMETHOD(GetRepeats) (THIS_ DWORD* pdwRepeats) PURE;
  466. STDMETHOD(GetSegment ) (THIS_ IDirectMusicSegment** ppSegment) PURE;
  467. STDMETHOD(GetStartTime) (THIS_ MUSIC_TIME* pmtStart) PURE;
  468. STDMETHOD(GetSeek) (THIS_ MUSIC_TIME* pmtSeek) PURE;
  469. STDMETHOD(GetStartPoint) (THIS_ MUSIC_TIME* pmtStart) PURE;
  470. };
  471. /*////////////////////////////////////////////////////////////////////
  472. // IDirectMusicTrack */
  473. #undef INTERFACE
  474. #define INTERFACE IDirectMusicTrack
  475. DECLARE_INTERFACE_(IDirectMusicTrack, IUnknown)
  476. {
  477. /* IUnknown */
  478. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  479. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  480. STDMETHOD_(ULONG,Release) (THIS) PURE;
  481. /* IDirectMusicTrack */
  482. STDMETHOD(Init) (THIS_ IDirectMusicSegment* pSegment) PURE;
  483. STDMETHOD(InitPlay) (THIS_ IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID) PURE;
  484. STDMETHOD(EndPlay) (THIS_ void* pStateData) PURE;
  485. STDMETHOD(Play) (THIS_ void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) PURE;
  486. STDMETHOD(GetParam) (THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) PURE;
  487. STDMETHOD(SetParam) (THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) PURE;
  488. STDMETHOD(IsParamSupported) (THIS_ REFGUID rguidType) PURE;
  489. STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
  490. STDMETHOD(RemoveNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
  491. STDMETHOD(Clone) (THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) PURE;
  492. };
  493. /*////////////////////////////////////////////////////////////////////
  494. // IDirectMusicPerformance */
  495. #undef INTERFACE
  496. #define INTERFACE IDirectMusicPerformance
  497. DECLARE_INTERFACE_(IDirectMusicPerformance, IUnknown)
  498. {
  499. /* IUnknown */
  500. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  501. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  502. STDMETHOD_(ULONG,Release) (THIS) PURE;
  503. /* IDirectMusicPerformance */
  504. STDMETHOD(Init) (THIS_ IDirectMusic** ppDirectMusic) PURE;
  505. STDMETHOD(PlaySegment) (THIS_ IDirectMusicSegment* pSegment, DWORD dwFlags, REFERENCE_TIME rtStartTime, IDirectMusicSegmentState** ppSegmentState) PURE;
  506. STDMETHOD(Stop) (THIS_ IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;
  507. STDMETHOD(GetSegmentState) (THIS_ IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime) PURE;
  508. STDMETHOD(SetPrepareTime) (THIS_ DWORD dwMilliSeconds) PURE;
  509. STDMETHOD(GetPrepareTime) (THIS_ DWORD* pdwMilliSeconds) PURE;
  510. STDMETHOD(SetBumperLength) (THIS_ DWORD dwMilliSeconds) PURE;
  511. STDMETHOD(GetBumperLength) (THIS_ DWORD* pdwMilliSeconds) PURE;
  512. STDMETHOD(SendPMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
  513. STDMETHOD(MusicToReferenceTime) (THIS_ MUSIC_TIME mtTime, REFERENCE_TIME* prtTime) PURE;
  514. STDMETHOD(ReferenceToMusicTime) (THIS_ REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime) PURE;
  515. STDMETHOD(IsPlaying) (THIS_ IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState) PURE;
  516. STDMETHOD(GetTime) (THIS_ REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow) PURE;
  517. STDMETHOD(AllocPMsg) (THIS_ ULONG cb, DMUS_PMSG** ppPMSG) PURE;
  518. STDMETHOD(FreePMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
  519. STDMETHOD(GetGraph) (THIS_ IDirectMusicGraph** ppGraph) PURE;
  520. STDMETHOD(SetGraph) (THIS_ IDirectMusicGraph* pGraph) PURE;
  521. STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;
  522. STDMETHOD(GetNotificationPMsg) (THIS_ DMUS_NOTIFICATION_PMSG** ppNotificationPMsg) PURE;
  523. STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
  524. STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
  525. STDMETHOD(AddPort) (THIS_ IDirectMusicPort* pPort) PURE;
  526. STDMETHOD(RemovePort) (THIS_ IDirectMusicPort* pPort ) PURE;
  527. STDMETHOD(AssignPChannelBlock) (THIS_ DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup ) PURE;
  528. STDMETHOD(AssignPChannel) (THIS_ DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel ) PURE;
  529. STDMETHOD(PChannelInfo) (THIS_ DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel ) PURE;
  530. STDMETHOD(DownloadInstrument) (THIS_ IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel ) PURE;
  531. STDMETHOD(Invalidate) (THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;
  532. STDMETHOD(GetParam) (THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) PURE;
  533. STDMETHOD(SetParam) (THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam) PURE;
  534. STDMETHOD(GetGlobalParam) (THIS_ REFGUID rguidType, void* pParam, DWORD dwSize) PURE;
  535. STDMETHOD(SetGlobalParam) (THIS_ REFGUID rguidType, void* pParam, DWORD dwSize) PURE;
  536. STDMETHOD(GetLatencyTime) (THIS_ REFERENCE_TIME* prtTime) PURE;
  537. STDMETHOD(GetQueueTime) (THIS_ REFERENCE_TIME* prtTime) PURE;
  538. STDMETHOD(AdjustTime) (THIS_ REFERENCE_TIME rtAmount) PURE;
  539. STDMETHOD(CloseDown) (THIS) PURE;
  540. };
  541. /*////////////////////////////////////////////////////////////////////
  542. // IDirectMusicTool */
  543. #undef INTERFACE
  544. #define INTERFACE IDirectMusicTool
  545. DECLARE_INTERFACE_(IDirectMusicTool, IUnknown)
  546. {
  547. /* IUnknown */
  548. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  549. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  550. STDMETHOD_(ULONG,Release) (THIS) PURE;
  551. /* IDirectMusicTool */
  552. STDMETHOD(Init) (THIS_ IDirectMusicGraph* pGraph) PURE;
  553. STDMETHOD(GetMsgDeliveryType) (THIS_ DWORD* pdwDeliveryType ) PURE;
  554. STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD* pdwNumElements ) PURE;
  555. STDMETHOD(GetMediaTypes) (THIS_ DWORD** padwMediaTypes, DWORD dwNumElements) PURE;
  556. STDMETHOD(ProcessPMsg) (THIS_ IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG) PURE;
  557. STDMETHOD(Flush) (THIS_ IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime) PURE;
  558. };
  559. /*////////////////////////////////////////////////////////////////////
  560. // IDirectMusicGraph */
  561. #undef INTERFACE
  562. #define INTERFACE IDirectMusicGraph
  563. DECLARE_INTERFACE_(IDirectMusicGraph, IUnknown)
  564. {
  565. /* IUnknown */
  566. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  567. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  568. STDMETHOD_(ULONG,Release) (THIS) PURE;
  569. /* IDirectMusicGraph */
  570. STDMETHOD(StampPMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
  571. STDMETHOD(Shutdown) (THIS) PURE;
  572. STDMETHOD(InsertTool) (THIS_ IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex) PURE;
  573. STDMETHOD(GetTool) (THIS_ DWORD dwIndex, IDirectMusicTool** ppTool) PURE;
  574. STDMETHOD(RemoveTool) (THIS_ IDirectMusicTool* pTool) PURE;
  575. };
  576. /*/////////////////////////////////////////////////////////////////////
  577. // IDirectMusicStyle */
  578. #undef INTERFACE
  579. #define INTERFACE IDirectMusicStyle
  580. DECLARE_INTERFACE_(IDirectMusicStyle, IUnknown)
  581. {
  582. /* IUnknown */
  583. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  584. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  585. STDMETHOD_(ULONG,Release) (THIS) PURE;
  586. /* IDirectMusicStyle */
  587. STDMETHOD(GetBand) (THIS_ WCHAR* pwszName, IDirectMusicBand** ppBand) PURE;
  588. STDMETHOD(EnumBand) (THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
  589. STDMETHOD(GetDefaultBand) (THIS_ IDirectMusicBand** ppBand) PURE;
  590. STDMETHOD(EnumMotif) (THIS_ DWORD dwIndex, WCHAR* pwszName) PURE;
  591. STDMETHOD(GetMotif) (THIS_ WCHAR* pwszName, IDirectMusicSegment** ppSegment) PURE;
  592. STDMETHOD(GetDefaultPersonality)(THIS_ IDirectMusicPersonality** ppPersonality) PURE;
  593. STDMETHOD(EnumPersonality) (THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
  594. STDMETHOD(GetPersonality) (THIS_ WCHAR* pwszName, IDirectMusicPersonality** ppPersonality) PURE;
  595. STDMETHOD(GetTimeSignature) (THIS_ DMUS_TIMESIGNATURE* pTimeSig) PURE;
  596. STDMETHOD(GetEmbellishmentLength) (THIS_ DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax) PURE;
  597. STDMETHOD(GetTempo) (THIS_ double* pTempo) PURE;
  598. };
  599. /*/////////////////////////////////////////////////////////////////////
  600. // IDirectMusicPersonality */
  601. #undef INTERFACE
  602. #define INTERFACE IDirectMusicPersonality
  603. DECLARE_INTERFACE_(IDirectMusicPersonality, IUnknown)
  604. {
  605. /* IUnknown */
  606. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  607. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  608. STDMETHOD_(ULONG,Release) (THIS) PURE;
  609. /* IDirectMusicPersonality */
  610. STDMETHOD(GetScale) (THIS_ DWORD* pdwScale) PURE;
  611. };
  612. /*/////////////////////////////////////////////////////////////////////
  613. // IDirectMusicComposer */
  614. #undef INTERFACE
  615. #define INTERFACE IDirectMusicComposer
  616. DECLARE_INTERFACE_(IDirectMusicComposer, IUnknown)
  617. {
  618. /* IUnknown */
  619. STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
  620. STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  621. STDMETHOD_(ULONG,Release) (THIS) PURE;
  622. /* IDirectMusicComposer */
  623. STDMETHOD(ComposeSegmentFromTemplate) (THIS_ IDirectMusicStyle* pStyle, IDirectMusicSegment* pTempSeg, WORD wActivity, IDirectMusicPersonality* pPersonality, IDirectMusicSegment** ppSectionSeg) PURE;
  624. STDMETHOD(ComposeSegmentFromShape) (THIS_ IDirectMusicStyle* pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicPersonality* pPersonality, IDirectMusicSegment** ppSectionSeg ) PURE;
  625. STDMETHOD(ComposeTransition) (THIS_ IDirectMusicSegment* pFromSeg, IDirectMusicSegment* pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicPersonality* pPersonality, IDirectMusicSegment** ppSectionSeg) PURE;
  626. STDMETHOD(AutoTransition) (THIS_ IDirectMusicPerformance* pPerformance, IDirectMusicSegment* pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicPersonality* pPersonality, IDirectMusicSegment** ppTransSeg, IDirectMusicSegmentState** ppToSegState, IDirectMusicSegmentState** ppTransSegState) PURE;
  627. STDMETHOD(ComposeTemplateFromShape) (THIS_ WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment** ppTempSeg) PURE;
  628. STDMETHOD(ChangePersonality) (THIS_ IDirectMusicSegment* pSectionSeg, BOOL fTrackScale, IDirectMusicPersonality* pPersonality) PURE;
  629. };
  630. /* CLSID's */
  631. DEFINE_GUID(CLSID_DirectMusicPerformance,0xd2ac2881, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  632. DEFINE_GUID(CLSID_DirectMusicSegment,0xd2ac2882, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  633. DEFINE_GUID(CLSID_DirectMusicSegmentState,0xd2ac2883, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  634. DEFINE_GUID(CLSID_DirectMusicGraph,0xd2ac2884, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  635. DEFINE_GUID(CLSID_DirectMusicTempoTrack,0xd2ac2885, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  636. DEFINE_GUID(CLSID_DirectMusicSeqTrack,0xd2ac2886, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  637. DEFINE_GUID(CLSID_DirectMusicSysExTrack,0xd2ac2887, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  638. DEFINE_GUID(CLSID_DirectMusicTimeSigTrack,0xd2ac2888, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  639. DEFINE_GUID(CLSID_DirectMusicStyle,0xd2ac288a, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  640. DEFINE_GUID(CLSID_DirectMusicChordTrack,0xd2ac288b, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  641. DEFINE_GUID(CLSID_DirectMusicCommandTrack,0xd2ac288c, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  642. DEFINE_GUID(CLSID_DirectMusicStyleTrack,0xd2ac288d, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  643. DEFINE_GUID(CLSID_DirectMusicMotifTrack,0xd2ac288e, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  644. DEFINE_GUID(CLSID_DirectMusicPersonality,0xd2ac288f, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  645. DEFINE_GUID(CLSID_DirectMusicComposer,0xd2ac2890, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  646. DEFINE_GUID(CLSID_DirectMusicSignPostTrack,0xf17e8672, 0xc3b4, 0x11d1, 0x87, 0xb, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  647. DEFINE_GUID(CLSID_DirectMusicLoader,0xd2ac2892, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  648. DEFINE_GUID(CLSID_DirectMusicBandTrk,0xd2ac2894, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  649. DEFINE_GUID(CLSID_DirectMusicBand,0x79ba9e00, 0xb6ee, 0x11d1, 0x86, 0xbe, 0x0, 0xc0, 0x4f, 0xbf, 0x8f, 0xef);
  650. DEFINE_GUID(CLSID_DirectMusicPersonalityTrack,0xd2ac2896, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  651. DEFINE_GUID(CLSID_DirectMusicAuditionTrack,0xd2ac2897, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  652. DEFINE_GUID(CLSID_DirectMusicMuteTrack,0xd2ac2898, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  653. /* Special GUID for all object types. This is used by the loader. */
  654. DEFINE_GUID(GUID_DirectMusicAllTypes,0xd2ac2893, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  655. /* Notification guids */
  656. DEFINE_GUID(GUID_NOTIFICATION_SEGMENT,0xd2ac2899, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  657. DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT,0xd2ac289a, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  658. DEFINE_GUID(GUID_NOTIFICATION_CHORD,0xd2ac289b, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  659. DEFINE_GUID(GUID_NOTIFICATION_COMMANDANDGROOVE,0xd2ac289c, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  660. /* Track param type guids */
  661. DEFINE_GUID(GUID_CommandTrack,0xd2ac289d, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  662. DEFINE_GUID(GUID_ChordTrackChord,0xd2ac289e, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  663. DEFINE_GUID(GUID_ChordTrackRhythm,0xd2ac289f, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  664. DEFINE_GUID(GUID_StyleTrackRepeats,0xd2ac28a0, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  665. DEFINE_GUID(GUID_StyleTrackStyle,0xd2ac28a1, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  666. DEFINE_GUID(GUID_MotifTrack,0xd2ac28a2, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  667. DEFINE_GUID(GUID_SignPostTrack,0xd2ac28a3, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  668. DEFINE_GUID(GUID_TimeSigTrack,0xd2ac28a4, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  669. DEFINE_GUID(GUID_TempoTrack,0xd2ac28a5, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  670. DEFINE_GUID(GUID_BandTrack,0xd2ac28a6, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  671. DEFINE_GUID(GUID_BandTrack_Download,0xd2ac28a7, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  672. DEFINE_GUID(GUID_BandTrack_Unload,0xd2ac28a8, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  673. DEFINE_GUID(GUID_BandTrack_Enable_Auto_Download,0xd2ac28a9, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  674. DEFINE_GUID(GUID_BandTrack_Disable_Auto_Download,0xd2ac28aa, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  675. DEFINE_GUID(GUID_BandTrack_Clear_All_Bands,0xd2ac28ab, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  676. DEFINE_GUID(GUID_BandTrack_AddBand,0xd2ac28ac, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  677. DEFINE_GUID(GUID_PersonalityTrack,0xd2ac28ad, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  678. DEFINE_GUID(GUID_AuditionTrack,0xd2ac28ae, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  679. DEFINE_GUID(GUID_MuteTrack,0xd2ac28af, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  680. /* Global data guids */
  681. DEFINE_GUID(GUID_PerfMasterTempo,0xd2ac28b0, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  682. DEFINE_GUID(GUID_PerfMasterVolume,0xd2ac28b1, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  683. DEFINE_GUID(GUID_PerfMasterGrooveLevel,0xd2ac28b2, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  684. /* GUID for default GM/GS dls collection. */
  685. DEFINE_GUID(GUID_DefaultGMCollection, 0xf17e8673, 0xc3b4, 0x11d1, 0x87, 0xb, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  686. /* IID's */
  687. DEFINE_GUID(IID_IDirectMusicLoader,0x68a04842, 0xd13d, 0x11d1, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
  688. DEFINE_GUID(IID_IDirectMusicGetLoader,0x68a04844, 0xd13d, 0x11d1, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
  689. DEFINE_GUID(IID_IDirectMusicObject,0xd2ac28b5, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  690. DEFINE_GUID(IID_IDirectMusicSegment, 0xde5e3a31, 0xd31b, 0x11d1, 0xbc, 0x8b, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
  691. DEFINE_GUID(IID_IDirectMusicSegmentState, 0xa3afdcc7, 0xd3ee, 0x11d1, 0xbc, 0x8d, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
  692. DEFINE_GUID(IID_IDirectMusicTrack, 0xde5e3a32, 0xd31b, 0x11d1, 0xbc, 0x8b, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
  693. DEFINE_GUID(IID_IDirectMusicPerformance, 0xde5e3a33, 0xd31b, 0x11d1, 0xbc, 0x8b, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
  694. DEFINE_GUID(IID_IDirectMusicTool,0xd2ac28ba, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  695. DEFINE_GUID(IID_IDirectMusicGraph,0x1ee21dc8, 0xc370, 0x11d1, 0xbc, 0x84, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
  696. DEFINE_GUID(IID_IDirectMusicStyle,0xd2ac28bd, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  697. DEFINE_GUID(IID_IDirectMusicPersonality,0xd2ac28be, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  698. DEFINE_GUID(IID_IDirectMusicComposer,0xd2ac28bf, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  699. DEFINE_GUID(IID_IDirectMusicBand,0xd2ac28c0, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
  700. #ifdef __cplusplus
  701. }; /* extern "C" */
  702. #endif
  703. #endif /* #ifndef _DMUSICI_ */