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

Delphi控件源码

开发平台:

Delphi

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      dls1.h dls2.h dmdls.h dmerror.h dmksctrl.h dmplugin.h         *}
  6. {*              dmusicc.h dmusici.h dmusicf.h dmusbuff.h                      *}
  7. {*  Content:    DirectMusic include files                                     *}
  8. {*                                                                            *}
  9. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  10. {*  E-Mail: clootie@reactor.ru                                                *}
  11. {*                                                                            *}
  12. {*  Modified: 27-Apr-2003                                                     *}
  13. {*                                                                            *}
  14. {*  Based upon :                                                              *}
  15. {*    DirectX 7.0 Delphi adaptation by Erik Unger                             *}
  16. {*    DirectX 8.0 Delphi adaptation by Ivo Steinmann                          *}
  17. {*                                                                            *}
  18. {*  Latest version can be downloaded from:                                    *}
  19. {*     http://clootie.narod.ru/delphi                                         *}
  20. {*                                                                            *}
  21. {******************************************************************************}
  22. {                                                                              }
  23. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  24. {                                                                              }
  25. { The contents of this file are used with permission, subject to the Mozilla   }
  26. { Public License Version 1.1 (the "License"); you may not use this file except }
  27. { in compliance with the License. You may obtain a copy of the License at      }
  28. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  29. {                                                                              }
  30. { Software distributed under the License is distributed on an "AS IS" basis,   }
  31. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  32. { the specific language governing rights and limitations under the License.    }
  33. {                                                                              }
  34. { Alternatively, the contents of this file may be used under the terms of the  }
  35. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  36. { provisions of the LGPL License are applicable instead of those above.        }
  37. { If you wish to allow use of your version of this file only under the terms   }
  38. { of the LGPL License and not to allow others to use your version of this file }
  39. { under the MPL, indicate your decision by deleting  the provisions above and  }
  40. { replace  them with the notice and other provisions required by the LGPL      }
  41. { License.  If you do not delete the provisions above, a recipient may use     }
  42. { your version of this file under either the MPL or the LGPL License.          }
  43. {                                                                              }
  44. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  45. {                                                                              }
  46. {******************************************************************************}
  47. {$I DirectX.inc}
  48. {$MINENUMSIZE 1}
  49. unit DirectMusic;
  50. interface
  51. (*$HPPEMIT '#include "ks.h"' *)
  52. (*$HPPEMIT '#include "dls1.h"' *)
  53. (*$HPPEMIT '#include "dls2.h"' *)
  54. (*$HPPEMIT '#include "dmdls.h"' *)
  55. (*$HPPEMIT '#include "dmerror.h"' *)
  56. (*$HPPEMIT '#include "dmplugin.h"' *)
  57. (*$HPPEMIT '#include "dmusicc.h"' *)
  58. (*$HPPEMIT '#include "dmusici.h"' *)
  59. (*$HPPEMIT '#include "dmusicf.h"' *)
  60. (*$HPPEMIT '#include "dmusbuff.h"' *)
  61. {$NOINCLUDE ActiveX}
  62. uses
  63.   Windows, MMSystem, ActiveX, DirectSound;
  64. (*==========================================================================;
  65. //
  66. //  dls1.h
  67. //
  68. //
  69. //  Description:
  70. //
  71. //  Interface defines and structures for the Instrument Collection Form
  72. //  RIFF DLS.
  73. //
  74. //
  75. //  Written by Sonic Foundry 1996.  Released for public use.
  76. //
  77. //=========================================================================*)
  78. (*)/////////////////////////////////////////////////////////////////////////
  79. //
  80. //
  81. // Layout of an instrument collection:
  82. //
  83. //
  84. // RIFF [] 'DLS ' [dlid,colh,INSTLIST,WAVEPOOL,INFOLIST]
  85. //
  86. // INSTLIST
  87. // LIST [] 'lins'
  88. //               LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
  89. //               LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
  90. //               LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
  91. //
  92. // RGNLIST
  93. // LIST [] 'lrgn'
  94. //               LIST [] 'rgn '  [rgnh,wsmp,wlnk,ARTLIST]
  95. //               LIST [] 'rgn '  [rgnh,wsmp,wlnk,ARTLIST]
  96. //               LIST [] 'rgn '  [rgnh,wsmp,wlnk,ARTLIST]
  97. //
  98. // ARTLIST
  99. // LIST [] 'lart'
  100. //         'art1' level 1 Articulation connection graph
  101. //         'art2' level 2 Articulation connection graph
  102. //         '3rd1' Possible 3rd party articulation structure 1
  103. //         '3rd2' Possible 3rd party articulation structure 2 .... and so on
  104. //
  105. // WAVEPOOL
  106. // ptbl [] [pool table]
  107. // LIST [] 'wvpl'
  108. //               [path],
  109. //               [path],
  110. //               LIST [] 'wave' [dlid,RIFFWAVE]
  111. //               LIST [] 'wave' [dlid,RIFFWAVE]
  112. //               LIST [] 'wave' [dlid,RIFFWAVE]
  113. //               LIST [] 'wave' [dlid,RIFFWAVE]
  114. //               LIST [] 'wave' [dlid,RIFFWAVE]
  115. //
  116. // INFOLIST
  117. // LIST [] 'INFO'
  118. //               'icmt' 'One of those crazy comments.'
  119. //               'icop' 'Copyright (C) 1996 Sonic Foundry'
  120. //
  121. ////////////////////////////////////////////////////////////////////////(*)
  122. (*)////////////////////////////////////////////////////////////////////////
  123. // FOURCC's used in the DLS file
  124. ////////////////////////////////////////////////////////////////////////(*)
  125. const
  126.   FOURCC_DLS  = DWORD(Byte('D') or (Byte('L') shl 8) or (Byte('S') shl 16) or (Byte(' ') shl 24));
  127.   {$EXTERNALSYM FOURCC_DLS}
  128.   FOURCC_DLID = DWORD(Byte('d') or (Byte('l') shl 8) or (Byte('i') shl 16) or (Byte('d') shl 24));
  129.   {$EXTERNALSYM FOURCC_DLID}
  130.   FOURCC_COLH = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('l') shl 16) or (Byte('h') shl 24));
  131.   {$EXTERNALSYM FOURCC_COLH}
  132.   FOURCC_WVPL = DWORD(Byte('w') or (Byte('v') shl 8) or (Byte('p') shl 16) or (Byte('l') shl 24));
  133.   {$EXTERNALSYM FOURCC_WVPL}
  134.   FOURCC_PTBL = DWORD(Byte('p') or (Byte('t') shl 8) or (Byte('b') shl 16) or (Byte('l') shl 24));
  135.   {$EXTERNALSYM FOURCC_PTBL}
  136.   FOURCC_PATH = DWORD(Byte('p') or (Byte('a') shl 8) or (Byte('t') shl 16) or (Byte('h') shl 24));
  137.   {$EXTERNALSYM FOURCC_PATH}
  138.   FOURCC_wave = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('v') shl 16) or (Byte('e') shl 24));
  139.   {$EXTERNALSYM FOURCC_wave}
  140.   FOURCC_LINS = DWORD(Byte('l') or (Byte('i') shl 8) or (Byte('n') shl 16) or (Byte('s') shl 24));
  141.   {$EXTERNALSYM FOURCC_LINS}
  142.   FOURCC_INS  = DWORD(Byte('i') or (Byte('n') shl 8) or (Byte('s') shl 16) or (Byte(' ') shl 24));
  143.   {$EXTERNALSYM FOURCC_INS}
  144.   FOURCC_INSH = DWORD(Byte('i') or (Byte('n') shl 8) or (Byte('s') shl 16) or (Byte('h') shl 24));
  145.   {$EXTERNALSYM FOURCC_INSH}
  146.   FOURCC_LRGN = DWORD(Byte('l') or (Byte('r') shl 8) or (Byte('g') shl 16) or (Byte('n') shl 24));
  147.   {$EXTERNALSYM FOURCC_LRGN}
  148.   FOURCC_RGN  = DWORD(Byte('r') or (Byte('g') shl 8) or (Byte('n') shl 16) or (Byte(' ') shl 24));
  149.   {$EXTERNALSYM FOURCC_RGN}
  150.   FOURCC_RGNH = DWORD(Byte('r') or (Byte('g') shl 8) or (Byte('n') shl 16) or (Byte('h') shl 24));
  151.   {$EXTERNALSYM FOURCC_RGNH}
  152.   FOURCC_LART = DWORD(Byte('l') or (Byte('a') shl 8) or (Byte('r') shl 16) or (Byte('t') shl 24));
  153.   {$EXTERNALSYM FOURCC_LART}
  154.   FOURCC_ART1 = DWORD(Byte('a') or (Byte('r') shl 8) or (Byte('t') shl 16) or (Byte('1') shl 24));
  155.   {$EXTERNALSYM FOURCC_ART1}
  156.   FOURCC_WLNK = DWORD(Byte('w') or (Byte('l') shl 8) or (Byte('n') shl 16) or (Byte('k') shl 24));
  157.   {$EXTERNALSYM FOURCC_WLNK}
  158.   FOURCC_WSMP = DWORD(Byte('w') or (Byte('s') shl 8) or (Byte('m') shl 16) or (Byte('p') shl 24));
  159.   {$EXTERNALSYM FOURCC_WSMP}
  160.   FOURCC_VERS = DWORD(Byte('v') or (Byte('e') shl 8) or (Byte('r') shl 16) or (Byte('s') shl 24));
  161.   {$EXTERNALSYM FOURCC_VERS}
  162. (*)////////////////////////////////////////////////////////////////////////
  163. // Articulation connection graph definitions
  164. ////////////////////////////////////////////////////////////////////////(*)
  165.   // Generic Sources
  166.   CONN_SRC_NONE              = $0000;
  167.   {$EXTERNALSYM CONN_SRC_NONE}
  168.   CONN_SRC_LFO               = $0001;
  169.   {$EXTERNALSYM CONN_SRC_LFO}
  170.   CONN_SRC_KEYONVELOCITY     = $0002;
  171.   {$EXTERNALSYM CONN_SRC_KEYONVELOCITY}
  172.   CONN_SRC_KEYNUMBER         = $0003;
  173.   {$EXTERNALSYM CONN_SRC_KEYNUMBER}
  174.   CONN_SRC_EG1               = $0004;
  175.   {$EXTERNALSYM CONN_SRC_EG1}
  176.   CONN_SRC_EG2               = $0005;
  177.   {$EXTERNALSYM CONN_SRC_EG2}
  178.   CONN_SRC_PITCHWHEEL        = $0006;
  179.   {$EXTERNALSYM CONN_SRC_PITCHWHEEL}
  180.   // Midi Controllers 0-127
  181.   CONN_SRC_CC1               = $0081;
  182.   {$EXTERNALSYM CONN_SRC_CC1}
  183.   CONN_SRC_CC7               = $0087;
  184.   {$EXTERNALSYM CONN_SRC_CC7}
  185.   CONN_SRC_CC10              = $008a;
  186.   {$EXTERNALSYM CONN_SRC_CC10}
  187.   CONN_SRC_CC11              = $008b;
  188.   {$EXTERNALSYM CONN_SRC_CC11}
  189.   // Generic Destinations
  190.   CONN_DST_NONE              = $0000;
  191.   {$EXTERNALSYM CONN_DST_NONE}
  192.   CONN_DST_ATTENUATION       = $0001;
  193.   {$EXTERNALSYM CONN_DST_ATTENUATION}
  194.   CONN_DST_PITCH             = $0003;
  195.   {$EXTERNALSYM CONN_DST_PITCH}
  196.   CONN_DST_PAN               = $0004;
  197.   {$EXTERNALSYM CONN_DST_PAN}
  198.   // LFO Destinations
  199.   CONN_DST_LFO_FREQUENCY     = $0104;
  200.   {$EXTERNALSYM CONN_DST_LFO_FREQUENCY}
  201.   CONN_DST_LFO_STARTDELAY    = $0105;
  202.   {$EXTERNALSYM CONN_DST_LFO_STARTDELAY}
  203.   // EG1 Destinations
  204.   CONN_DST_EG1_ATTACKTIME    = $0206;
  205.   {$EXTERNALSYM CONN_DST_EG1_ATTACKTIME}
  206.   CONN_DST_EG1_DECAYTIME     = $0207;
  207.   {$EXTERNALSYM CONN_DST_EG1_DECAYTIME}
  208.   CONN_DST_EG1_RELEASETIME   = $0209;
  209.   {$EXTERNALSYM CONN_DST_EG1_RELEASETIME}
  210.   CONN_DST_EG1_SUSTAINLEVEL  = $020a;
  211.   {$EXTERNALSYM CONN_DST_EG1_SUSTAINLEVEL}
  212.   // EG2 Destinations
  213.   CONN_DST_EG2_ATTACKTIME    = $030a;
  214.   {$EXTERNALSYM CONN_DST_EG2_ATTACKTIME}
  215.   CONN_DST_EG2_DECAYTIME     = $030b;
  216.   {$EXTERNALSYM CONN_DST_EG2_DECAYTIME}
  217.   CONN_DST_EG2_RELEASETIME   = $030d;
  218.   {$EXTERNALSYM CONN_DST_EG2_RELEASETIME}
  219.   CONN_DST_EG2_SUSTAINLEVEL  = $030e;
  220.   {$EXTERNALSYM CONN_DST_EG2_SUSTAINLEVEL}
  221.   CONN_TRN_NONE              = $0000;
  222.   {$EXTERNALSYM CONN_TRN_NONE}
  223.   CONN_TRN_CONCAVE           = $0001;
  224.   {$EXTERNALSYM CONN_TRN_CONCAVE}
  225. type
  226.   PDLSID = ^TDLSID;
  227.   _DLSID = packed record
  228.     ulData1: Cardinal;
  229.     usData2: Word;
  230.     usData3: Word;
  231.     abData4: array[0..7] of Byte;
  232.   end;
  233.   {$EXTERNALSYM _DLSID}
  234.   DLSID = _DLSID;
  235.   {$EXTERNALSYM DLSID}
  236.   TDLSID= _DLSID;
  237.   PDLSVersion = ^TDLSVersion;
  238.   _DLSVERSION = packed record
  239.     dwVersionMS: DWORD;
  240.     dwVersionLS: DWORD;
  241.   end;
  242.   {$EXTERNALSYM _DLSVERSION}
  243.   DLSVERSION = _DLSVERSION;
  244.   {$EXTERNALSYM DLSVERSION}
  245.   TDLSVersion = _DLSVERSION;
  246.   PConnection = ^TConnection;
  247.   _CONNECTION = packed record
  248.     usSource: Word;
  249.     usControl: Word;
  250.     usDestination: Word;
  251.     usTransform: Word;
  252.     lScale: Longint;
  253.   end;
  254.   {$EXTERNALSYM _CONNECTION}
  255.   CONNECTION = _CONNECTION;
  256.   {$EXTERNALSYM CONNECTION}
  257.   TConnection = _CONNECTION;
  258.   // Level 1 Articulation Data
  259.   PConnectionList = ^TConnectionList;
  260.   _CONNECTIONLIST = packed record
  261.     cbSize: Cardinal;            // size of the connection list structure
  262.     cConnections: Cardinal;      // count of connections in the list
  263.   end;
  264.   {$EXTERNALSYM _CONNECTIONLIST}
  265.   CONNECTIONLIST = _CONNECTIONLIST;
  266.   {$EXTERNALSYM CONNECTIONLIST}
  267.   TConnectionList = _CONNECTIONLIST;
  268. (*)////////////////////////////////////////////////////////////////////////
  269. // Generic type defines for regions and instruments
  270. ////////////////////////////////////////////////////////////////////////(*)
  271.   PRGNRange = ^TRGNRange;
  272.   _RGNRANGE = packed record
  273.     usLow: Word;
  274.     usHigh: Word;
  275.   end;
  276.   {$EXTERNALSYM _RGNRANGE}
  277.   RGNRANGE = _RGNRANGE;
  278.   {$EXTERNALSYM RGNRANGE}
  279.   TRGNRange = _RGNRANGE;
  280. const
  281.   F_INSTRUMENT_DRUMS      = $80000000;
  282.   {$EXTERNALSYM F_INSTRUMENT_DRUMS}
  283. type
  284.   PMIDILocale = ^TMIDILocale;
  285.   _MIDILOCALE = packed record
  286.     ulBank: Cardinal;
  287.     ulInstrument: Cardinal;
  288.   end;
  289.   {$EXTERNALSYM _MIDILOCALE}
  290.   MIDILOCALE = _MIDILOCALE;
  291.   {$EXTERNALSYM MIDILOCALE}
  292.   TMIDILocale = _MIDILOCALE;
  293. (*)////////////////////////////////////////////////////////////////////////
  294. // Header structures found in an DLS file for collection, instruments, and
  295. // regions.
  296. ////////////////////////////////////////////////////////////////////////(*)
  297. const
  298.   F_RGN_OPTION_SELFNONEXCLUSIVE  = $0001;
  299.   {$EXTERNALSYM F_RGN_OPTION_SELFNONEXCLUSIVE}
  300. type
  301.   PRGNHeader = ^TRGNHeader;
  302.   _RGNHEADER = packed record
  303.     RangeKey: TRGNRange;          // Key range
  304.     RangeVelocity: TRGNRange;     // Velocity Range
  305.     fusOptions: Word;             // Synthesis options for this range
  306.     usKeyGroup: Word;             // Key grouping for non simultaneous play
  307.                                   // 0 = no group, 1 up is group
  308.                                   // for Level 1 only groups 1-15 are allowed
  309.   end;
  310.   {$EXTERNALSYM _RGNHEADER}
  311.   RGNHEADER = _RGNHEADER;
  312.   {$EXTERNALSYM RGNHEADER}
  313.   TRGNHeader = _RGNHEADER;
  314.   PInstHeader = ^TInstHeader;
  315.   _INSTHEADER = packed record
  316.     cRegions: Cardinal;          // Count of regions in this instrument
  317.     Locale: TMIDILocale;         // Intended MIDI locale of this instrument
  318.   end;
  319.   {$EXTERNALSYM _INSTHEADER}
  320.   INSTHEADER = _INSTHEADER;
  321.   {$EXTERNALSYM INSTHEADER}
  322.   TInstHeader = _INSTHEADER;
  323.   PDLSHeader = ^TDLSHeader;
  324.   _DLSHEADER = packed record
  325.     cInstruments: Cardinal;      // Count of instruments in the collection
  326.   end;
  327.   {$EXTERNALSYM _DLSHEADER}
  328.   DLSHEADER = _DLSHEADER;
  329.   {$EXTERNALSYM DLSHEADER}
  330.   TDLSHeader = _DLSHEADER;
  331. (*)///////////////////////////////////////////////////////////////////////////
  332. // definitions for the Wave link structure
  333. ///////////////////////////////////////////////////////////////////////////(*)
  334. // ****  For level 1 only WAVELINK_CHANNEL_MONO is valid  ****
  335. // ulChannel allows for up to 32 channels of audio with each bit position
  336. // specifiying a channel of playback
  337. const
  338.   WAVELINK_CHANNEL_LEFT    = $0001;
  339.   {$EXTERNALSYM WAVELINK_CHANNEL_LEFT}
  340.   WAVELINK_CHANNEL_RIGHT   = $0002;
  341.   {$EXTERNALSYM WAVELINK_CHANNEL_RIGHT}
  342.   F_WAVELINK_PHASE_MASTER  = $0001;
  343.   {$EXTERNALSYM F_WAVELINK_PHASE_MASTER}
  344. type
  345.   PWaveLink = ^TWaveLink;
  346.   _WAVELINK = packed record // any paths or links are stored right after struct
  347.     fusOptions: Word;       // options flags for this wave
  348.     usPhaseGroup: Word;     // Phase grouping for locking channels
  349.     ulChannel: Cardinal;    // channel placement
  350.     ulTableIndex: Cardinal; // index into the wave pool table, 0 based
  351.   end;
  352.   {$EXTERNALSYM _WAVELINK}
  353.   WAVELINK = _WAVELINK;
  354.   {$EXTERNALSYM WAVELINK}
  355.   TWaveLink = _WAVELINK;
  356. const
  357.   POOL_CUE_NULL  = $ffffffff;
  358.   {$EXTERNALSYM POOL_CUE_NULL}
  359. type
  360.   PPoolCUE = ^TPoolCUE;
  361.   _POOLCUE = packed record
  362.     ulOffset:    Cardinal;       // Offset to the entry in the list
  363.   end;
  364.   {$EXTERNALSYM _POOLCUE}
  365.   POOLCUE = _POOLCUE;
  366.   {$EXTERNALSYM POOLCUE}
  367.   TPoolCUE = _POOLCUE;
  368.   PPoolTable = ^TPoolTable;
  369.   _POOLTABLE = packed record
  370.     cbSize: Cardinal;            // size of the pool table structure
  371.     cCues: Cardinal;             // count of cues in the list
  372.   end;
  373.   {$EXTERNALSYM _POOLTABLE}
  374.   POOLTABLE = _POOLTABLE;
  375.   {$EXTERNALSYM POOLTABLE}
  376.   TPoolTable = _POOLTABLE;
  377. (*)///////////////////////////////////////////////////////////////////////////
  378. // Structures for the "wsmp" chunk
  379. ///////////////////////////////////////////////////////////////////////////(*)
  380. const
  381.   F_WSMP_NO_TRUNCATION     = $0001;
  382.   {$EXTERNALSYM F_WSMP_NO_TRUNCATION}
  383.   F_WSMP_NO_COMPRESSION    = $0002;
  384.   {$EXTERNALSYM F_WSMP_NO_COMPRESSION}
  385. type
  386.   PWSMPL = ^TWSMPL;
  387.   _rwsmp = packed record
  388.     cbSize: Cardinal;
  389.     usUnityNote: Word;            // MIDI Unity Playback Note
  390.     sFineTune: SmallInt;          // Fine Tune in log tuning
  391.     lAttenuation: Longint;        // Overall Attenuation to be applied to data
  392.     fulOptions: Cardinal;         // Flag options
  393.     cSampleLoops: Cardinal;       // Count of Sample loops, 0 loops is one shot
  394.   end;
  395.   {$EXTERNALSYM _rwsmp}
  396.   WSMPL = _rwsmp;
  397.   {$EXTERNALSYM WSMPL}
  398.   TWSMPL = _rwsmp;
  399. // This loop type is a normal forward playing loop which is continually
  400. // played until the envelope reaches an off threshold in the release
  401. // portion of the volume envelope
  402. const
  403.   WLOOP_TYPE_FORWARD   = 0;
  404.   {$EXTERNALSYM WLOOP_TYPE_FORWARD}
  405. type
  406.   PWLoop = ^TWLoop;
  407.   _rloop = packed record
  408.     cbSize: Cardinal;
  409.     ulType: Cardinal;              // Loop Type
  410.     ulStart: Cardinal;             // Start of loop in samples
  411.     ulLength: Cardinal;            // Length of loop in samples
  412.   end;
  413.   {$EXTERNALSYM _rloop}
  414.   WLOOP = _rloop;
  415.   {$EXTERNALSYM WLOOP}
  416.   TWLoop = _rloop;
  417. (*
  418.   dls2.h
  419.   Description:
  420.   Interface defines and structures for the DLS2 extensions of DLS.
  421.      Written by Microsoft 1998.  Released for public use.
  422. *)
  423. (*
  424.      FOURCC's used in the DLS2 file, in addition to DLS1 chunks
  425. *)
  426. const
  427.   FOURCC_RGN2 = DWORD(Byte('r') or (Byte('g') shl 8) or (Byte('n') shl 16) or (Byte('2') shl 24));
  428.   {$EXTERNALSYM FOURCC_RGN2}
  429.   FOURCC_LAR2 = DWORD(Byte('l') or (Byte('a') shl 8) or (Byte('r') shl 16) or (Byte('2') shl 24));
  430.   {$EXTERNALSYM FOURCC_LAR2}
  431.   FOURCC_ART2 = DWORD(Byte('a') or (Byte('r') shl 8) or (Byte('t') shl 16) or (Byte('2') shl 24));
  432.   {$EXTERNALSYM FOURCC_ART2}
  433.   FOURCC_CDL  = DWORD(Byte('c') or (Byte('d') shl 8) or (Byte('l') shl 16) or (Byte(' ') shl 24));
  434.   {$EXTERNALSYM FOURCC_CDL}
  435. //  FOURCC_DLID = DWORD(Byte('d') or (Byte('l') shl 8) or (Byte('i') shl 16) or (Byte('d') shl 24)); //Already defined above
  436. (*
  437.      Articulation connection graph definitions. These are in addition to
  438.      the definitions in the DLS1 header.
  439. *)
  440.   // Generic Sources (in addition to DLS1 sources.
  441.   CONN_SRC_POLYPRESSURE           = $0007; // Polyphonic Pressure
  442.   {$EXTERNALSYM CONN_SRC_POLYPRESSURE}
  443.   CONN_SRC_CHANNELPRESSURE        = $0008; // Channel Pressure
  444.   {$EXTERNALSYM CONN_SRC_CHANNELPRESSURE}
  445.   CONN_SRC_VIBRATO                = $0009; // Vibrato LFO
  446.   {$EXTERNALSYM CONN_SRC_VIBRATO}
  447.   CONN_SRC_MONOPRESSURE           = $000a; // MIDI Mono pressure
  448.   {$EXTERNALSYM CONN_SRC_MONOPRESSURE}
  449.   // Midi Controllers
  450.   CONN_SRC_CC91                   = $00db; // Reverb Send
  451.   {$EXTERNALSYM CONN_SRC_CC91}
  452.   CONN_SRC_CC93                   = $00dd; // Chorus Send
  453.   {$EXTERNALSYM CONN_SRC_CC93}
  454.   (* Generic Destinations *)
  455.   CONN_DST_GAIN           = $0001; // Same as CONN_DST_ ATTENUATION, but more appropriate terminology.
  456.   {$EXTERNALSYM CONN_DST_GAIN}
  457.   CONN_DST_KEYNUMBER      = $0005; // Key Number Generator
  458.   {$EXTERNALSYM CONN_DST_KEYNUMBER}
  459.   // Audio Channel Output Destinations
  460.   CONN_DST_LEFT           = $0010; // Left Channel Send
  461.   {$EXTERNALSYM CONN_DST_LEFT}
  462.   CONN_DST_RIGHT          = $0011; // Right Channel Send
  463.   {$EXTERNALSYM CONN_DST_RIGHT}
  464.   CONN_DST_CENTER         = $0012; // Center Channel Send
  465.   {$EXTERNALSYM CONN_DST_CENTER}
  466.   CONN_DST_LEFTREAR       = $0013; // Left Rear Channel Send
  467.   {$EXTERNALSYM CONN_DST_LEFTREAR}
  468.   CONN_DST_RIGHTREAR      = $0014; // Right Rear Channel Send
  469.   {$EXTERNALSYM CONN_DST_RIGHTREAR}
  470.   CONN_DST_LFE_CHANNEL    = $0015; // LFE Channel Send
  471.   {$EXTERNALSYM CONN_DST_LFE_CHANNEL}
  472.   CONN_DST_CHORUS         = $0080; // Chorus Send
  473.   {$EXTERNALSYM CONN_DST_CHORUS}
  474.   CONN_DST_REVERB         = $0081; // Reverb Send
  475.   {$EXTERNALSYM CONN_DST_REVERB}
  476.   // Vibrato LFO Destinations
  477.   CONN_DST_VIB_FREQUENCY  = $0114; // Vibrato Frequency
  478.   {$EXTERNALSYM CONN_DST_VIB_FREQUENCY}
  479.   CONN_DST_VIB_STARTDELAY = $0115; // Vibrato Start Delay
  480.   {$EXTERNALSYM CONN_DST_VIB_STARTDELAY}
  481.   // EG1 Destinations
  482.   CONN_DST_EG1_DELAYTIME    = $020B; // EG1 Delay Time
  483.   {$EXTERNALSYM CONN_DST_EG1_DELAYTIME}
  484.   CONN_DST_EG1_HOLDTIME     = $020C; // EG1 Hold Time
  485.   {$EXTERNALSYM CONN_DST_EG1_HOLDTIME}
  486.   CONN_DST_EG1_SHUTDOWNTIME = $020D; // EG1 Shutdown Time
  487.   {$EXTERNALSYM CONN_DST_EG1_SHUTDOWNTIME}
  488.   // EG2 Destinations
  489.   CONN_DST_EG2_DELAYTIME  = $030F; // EG2 Delay Time
  490.   {$EXTERNALSYM CONN_DST_EG2_DELAYTIME}
  491.   CONN_DST_EG2_HOLDTIME   = $0310; // EG2 Hold Time
  492.   {$EXTERNALSYM CONN_DST_EG2_HOLDTIME}
  493.   // Filter Destinations
  494.   CONN_DST_FILTER_CUTOFF  = $0500; // Filter Cutoff Frequency
  495.   {$EXTERNALSYM CONN_DST_FILTER_CUTOFF}
  496.   CONN_DST_FILTER_Q       = $0501; // Filter Resonance
  497.   {$EXTERNALSYM CONN_DST_FILTER_Q}
  498.   // Transforms
  499.   CONN_TRN_CONVEX         = $0002; // Convex Transform
  500.   {$EXTERNALSYM CONN_TRN_CONVEX}
  501.   CONN_TRN_SWITCH         = $0003; // Switch Transform
  502.   {$EXTERNALSYM CONN_TRN_SWITCH}
  503.   // Conditional chunk operators
  504.   DLS_CDL_AND             = $0001;// X = X & Y
  505.   {$EXTERNALSYM DLS_CDL_AND}
  506.   DLS_CDL_OR              = $0002;// X = X | Y
  507.   {$EXTERNALSYM DLS_CDL_OR}
  508.   DLS_CDL_XOR             = $0003;// X = X ^ Y
  509.   {$EXTERNALSYM DLS_CDL_XOR}
  510.   DLS_CDL_ADD             = $0004;// X = X + Y
  511.   {$EXTERNALSYM DLS_CDL_ADD}
  512.   DLS_CDL_SUBTRACT        = $0005;// X = X - Y
  513.   {$EXTERNALSYM DLS_CDL_SUBTRACT}
  514.   DLS_CDL_MULTIPLY        = $0006;// X = X * Y
  515.   {$EXTERNALSYM DLS_CDL_MULTIPLY}
  516.   DLS_CDL_DIVIDE          = $0007;// X = X / Y
  517.   {$EXTERNALSYM DLS_CDL_DIVIDE}
  518.   DLS_CDL_LOGICAL_AND     = $0008;// X = X && Y
  519.   {$EXTERNALSYM DLS_CDL_LOGICAL_AND}
  520.   DLS_CDL_LOGICAL_OR      = $0009;// X = X || Y
  521.   {$EXTERNALSYM DLS_CDL_LOGICAL_OR}
  522.   DLS_CDL_LT              = $000A;// X = (X < Y)
  523.   {$EXTERNALSYM DLS_CDL_LT}
  524.   DLS_CDL_LE              = $000B;// X = (X <= Y)
  525.   {$EXTERNALSYM DLS_CDL_LE}
  526.   DLS_CDL_GT              = $000C;// X = (X > Y)
  527.   {$EXTERNALSYM DLS_CDL_GT}
  528.   DLS_CDL_GE              = $000D;// X = (X >= Y)
  529.   {$EXTERNALSYM DLS_CDL_GE}
  530.   DLS_CDL_EQ              = $000E;// X = (X == Y)
  531.   {$EXTERNALSYM DLS_CDL_EQ}
  532.   DLS_CDL_NOT             = $000F;// X = !X
  533.   {$EXTERNALSYM DLS_CDL_NOT}
  534.   DLS_CDL_CONST           = $0010;// 32-bit constant
  535.   {$EXTERNALSYM DLS_CDL_CONST}
  536.   DLS_CDL_QUERY           = $0011;// 32-bit value returned from query
  537.   {$EXTERNALSYM DLS_CDL_QUERY}
  538.   DLS_CDL_QUERYSUPPORTED  = $0012;// Test to see if query is supported by synth
  539.   {$EXTERNALSYM DLS_CDL_QUERYSUPPORTED}
  540.   (*
  541.     Loop and release
  542.   *)
  543.   WLOOP_TYPE_RELEASE = 1;
  544.   {$EXTERNALSYM WLOOP_TYPE_RELEASE}
  545.   (*
  546.     WaveLink chunk <wlnk-ck>
  547.   *)
  548.   F_WAVELINK_MULTICHANNEL = $0002;
  549.   {$EXTERNALSYM F_WAVELINK_MULTICHANNEL}
  550. const
  551.   (*
  552.     DLSID queries for <cdl-ck>
  553.   *)
  554.   DLSID_GMInHardware: TGUID = '{178f2f24-c364-11d1-a760-0000f875ac12}';
  555.   {$EXTERNALSYM DLSID_GMInHardware}
  556.   DLSID_GSInHardware: TGUID = '{178f2f25-c364-11d1-a760-0000f875ac12}';
  557.   {$EXTERNALSYM DLSID_GSInHardware}
  558.   DLSID_XGInHardware: TGUID = '{178f2f26-c364-11d1-a760-0000f875ac12}';
  559.   {$EXTERNALSYM DLSID_XGInHardware}
  560.   DLSID_SupportsDLS1: TGUID = '{178f2f27-c364-11d1-a760-0000f875ac12}';
  561.   {$EXTERNALSYM DLSID_SupportsDLS1}
  562.   DLSID_SupportsDLS2: TGUID = '{f14599e5-4689-11d2-afa6-00aa0024d8b6}';
  563.   {$EXTERNALSYM DLSID_SupportsDLS2}
  564.   DLSID_SampleMemorySize: TGUID = '{178f2f28-c364-11d1-a760-0000f875ac12}';
  565.   {$EXTERNALSYM DLSID_SampleMemorySize}
  566.   DLSID_ManufacturersID: TGUID = '{b03e1181-8095-11d2-a1ef-00600833dbd8}';
  567.   {$EXTERNALSYM DLSID_ManufacturersID}
  568.   DLSID_ProductID: TGUID = '{b03e1182-8095-11d2-a1ef-00600833dbd8}';
  569.   {$EXTERNALSYM DLSID_ProductID}
  570.   DLSID_SamplePlaybackRate: TGUID = '{2a91f713-a4bf-11d2-bbdf-00600833dbd8}';
  571.   {$EXTERNALSYM DLSID_SamplePlaybackRate}
  572. (************************************************************************
  573. *                                                                       *
  574. *   dmdls.h -- DLS download definitions for DirectMusic API's           *
  575. *                                                                       *
  576. *   Copyright (c) Microsoft Corporation.  All rights reserved.          *
  577. *                                                                       *
  578. ************************************************************************)
  579. type
  580.   PCENT = Longint;     (* Pitch cents *)
  581.   {$EXTERNALSYM PCENT}
  582.   GCENT = Longint;     (* Gain cents *)
  583.   {$EXTERNALSYM GCENT}
  584.   TCENT = Longint;     (* Time cents *)
  585.   {$EXTERNALSYM TCENT}
  586.   PERCENT = Longint;   (* Per.. cent! *)
  587.   {$EXTERNALSYM PERCENT}
  588.   PReferenceTime = ^TReferenceTime;
  589.   REFERENCE_TIME = LONGLONG;
  590.   {$EXTERNALSYM REFERENCE_TIME}
  591.   TReferenceTime = REFERENCE_TIME;
  592.   PReference_Time = PReferenceTime;
  593.   TReference_Time = TReferenceTime;
  594.   PDMusDownloadInfo = ^TDMusDownloadInfo;
  595.   _DMUS_DOWNLOADINFO = packed record
  596.     dwDLType: DWORD;                     // Instrument or Wave
  597.     dwDLId: DWORD;                       // Unique identifier to tag this download.
  598.     dwNumOffsetTableEntries: DWORD;      // Number of index in the offset address table.
  599.     cbSize: DWORD;                       // Total size of this memory chunk.
  600.   end;
  601.   {$EXTERNALSYM _DMUS_DOWNLOADINFO}
  602.   DMUS_DOWNLOADINFO = _DMUS_DOWNLOADINFO;
  603.   {$EXTERNALSYM DMUS_DOWNLOADINFO}
  604.   TDMusDownloadInfo = _DMUS_DOWNLOADINFO;
  605. const
  606.   DMUS_DOWNLOADINFO_INSTRUMENT        = 1;
  607.   {$EXTERNALSYM DMUS_DOWNLOADINFO_INSTRUMENT}
  608.   DMUS_DOWNLOADINFO_WAVE              = 2;
  609.   {$EXTERNALSYM DMUS_DOWNLOADINFO_WAVE}
  610.   DMUS_DOWNLOADINFO_INSTRUMENT2       = 3;   (* New version for better DLS2 support. *)
  611.   {$EXTERNALSYM DMUS_DOWNLOADINFO_INSTRUMENT2}
  612. (* Support for oneshot and streaming wave data 
  613.  *)
  614.   DMUS_DOWNLOADINFO_WAVEARTICULATION  = 4;   (* Wave articulation data *)
  615.   {$EXTERNALSYM DMUS_DOWNLOADINFO_WAVEARTICULATION}
  616.   DMUS_DOWNLOADINFO_STREAMINGWAVE     = 5;   (* One chunk of a streaming *)
  617.   {$EXTERNALSYM DMUS_DOWNLOADINFO_STREAMINGWAVE}
  618.   DMUS_DOWNLOADINFO_ONESHOTWAVE       = 6;
  619.   {$EXTERNALSYM DMUS_DOWNLOADINFO_ONESHOTWAVE}
  620.   DMUS_DEFAULT_SIZE_OFFSETTABLE   = 1;
  621.   {$EXTERNALSYM DMUS_DEFAULT_SIZE_OFFSETTABLE}
  622. (* Flags for DMUS_INSTRUMENT's ulFlags member *)
  623.   DMUS_INSTRUMENT_GM_INSTRUMENT   = (1 shr 0);
  624.   {$EXTERNALSYM DMUS_INSTRUMENT_GM_INSTRUMENT}
  625. type
  626.   PDMusOffsetTable = ^TDMusOffsetTable;
  627.   _DMUS_OFFSETTABLE = packed record
  628.     ulOffsetTable: array[0..DMUS_DEFAULT_SIZE_OFFSETTABLE - 1] of Cardinal;
  629.   end;
  630.   {$EXTERNALSYM _DMUS_OFFSETTABLE}
  631.   DMUS_OFFSETTABLE = _DMUS_OFFSETTABLE;
  632.   {$EXTERNALSYM DMUS_OFFSETTABLE}
  633.   TDMusOffsetTable = _DMUS_OFFSETTABLE;
  634.   PDMusInstrument = ^TDMusInstrument;
  635.   _DMUS_INSTRUMENT = packed record
  636.     ulPatch: Cardinal;
  637.     ulFirstRegionIdx: Cardinal;
  638.     ulGlobalArtIdx: Cardinal;         // If zero the instrument does not have an articulation
  639.     ulFirstExtCkIdx: Cardinal;        // If zero no 3rd party entenstion chunks associated with the instrument
  640.     ulCopyrightIdx: Cardinal;         // If zero no Copyright information associated with the instrument
  641.     ulFlags: Cardinal;
  642.   end;
  643.   {$EXTERNALSYM _DMUS_INSTRUMENT}
  644.   DMUS_INSTRUMENT = _DMUS_INSTRUMENT;
  645.   {$EXTERNALSYM DMUS_INSTRUMENT}
  646.   TDMusInstrument = _DMUS_INSTRUMENT;
  647.   PDMusRegion = ^TDMusRegion;
  648.   _DMUS_REGION = packed record
  649.     RangeKey: TRGNRange;
  650.     RangeVelocity: TRGNRange;
  651.     fusOptions: Word;
  652.     usKeyGroup: Word;
  653.     ulRegionArtIdx: Cardinal;         // If zero the region does not have an articulation
  654.     ulNextRegionIdx: Cardinal;        // If zero no more regions
  655.     ulFirstExtCkIdx: Cardinal;        // If zero no 3rd party entenstion chunks associated with the region
  656.     WaveLink: TWaveLink;
  657.     WSMP: TWSMPL;                     //  If WSMP.cSampleLoops > 1 then a WLOOP is included
  658.     WLOOP: array [0..0] of TWLoop;
  659.   end;
  660.   {$EXTERNALSYM _DMUS_REGION}
  661.   DMUS_REGION = _DMUS_REGION;
  662.   {$EXTERNALSYM DMUS_REGION}
  663.   TDMusRegion = _DMUS_REGION;
  664.   PDMusLFOParams = ^TDMusLFOParams;
  665.   _DMUS_LFOPARAMS = packed record
  666.     pcFrequency: PCENT;
  667.     tcDelay: TCENT;
  668.     gcVolumeScale: GCENT;
  669.     pcPitchScale: PCENT;
  670.     gcMWToVolume: GCENT;
  671.     pcMWToPitch: PCENT;
  672.   end;
  673.   {$EXTERNALSYM _DMUS_LFOPARAMS}
  674.   DMUS_LFOPARAMS = _DMUS_LFOPARAMS;
  675.   {$EXTERNALSYM DMUS_LFOPARAMS}
  676.   TDMusLFOParams = _DMUS_LFOPARAMS;
  677.   PDMusVEGParams = ^TDMusVEGParams;
  678.   _DMUS_VEGPARAMS = packed record
  679.     tcAttack: TCENT;
  680.     tcDecay: TCENT;
  681.     ptSustain: PERCENT;
  682.     tcRelease: TCENT;
  683.     tcVel2Attack: TCENT;
  684.     tcKey2Decay: TCENT;
  685.   end;
  686.   {$EXTERNALSYM _DMUS_VEGPARAMS}
  687.   DMUS_VEGPARAMS = _DMUS_VEGPARAMS;
  688.   {$EXTERNALSYM DMUS_VEGPARAMS}
  689.   TDMusVEGParams = _DMUS_VEGPARAMS;
  690.   PDMusPEGParams = ^TDMusPEGParams;
  691.   _DMUS_PEGPARAMS = packed record
  692.     tcAttack: TCENT;
  693.     tcDecay: TCENT;
  694.     ptSustain: PERCENT;
  695.     tcRelease: TCENT;
  696.     tcVel2Attack: TCENT;
  697.     tcKey2Decay: TCENT;
  698.     pcRange: PCENT;
  699.   end;
  700.   {$EXTERNALSYM _DMUS_PEGPARAMS}
  701.   DMUS_PEGPARAMS = _DMUS_PEGPARAMS;
  702.   {$EXTERNALSYM DMUS_PEGPARAMS}
  703.   TDMusPEGParams = _DMUS_PEGPARAMS;
  704.   PDMusMSCParams = ^TDMusMSCParams;
  705.   _DMUS_MSCPARAMS = packed record
  706.     ptDefaultPan: PERCENT;
  707.   end;
  708.   {$EXTERNALSYM _DMUS_MSCPARAMS}
  709.   DMUS_MSCPARAMS = _DMUS_MSCPARAMS;
  710.   {$EXTERNALSYM DMUS_MSCPARAMS}
  711.   TDMusMSCParams = _DMUS_MSCPARAMS;
  712.   PDMusArticParams = ^TDMusArticParams;
  713.   _DMUS_ARTICPARAMS = packed record
  714.     LFO: TDMusLFOParams;
  715.     VolEG: TDMusVEGParams;
  716.     PitchEG: TDMusPEGParams;
  717.     Misc: TDMusMSCParams;
  718.   end;
  719.   {$EXTERNALSYM _DMUS_ARTICPARAMS}
  720.   DMUS_ARTICPARAMS = _DMUS_ARTICPARAMS;
  721.   {$EXTERNALSYM DMUS_ARTICPARAMS}
  722.   TDMusArticParams = _DMUS_ARTICPARAMS;
  723.   PDMusArticulation = ^TDMusArticulation;
  724.   _DMUS_ARTICULATION = packed record (* Articulation chunk for DMUS_DOWNLOADINFO_INSTRUMENT format. *)
  725.     ulArt1Idx: Cardinal;              // DLS Level 1 articulation chunk
  726.     ulFirstExtCkIdx: Cardinal;        // 3rd party extenstion chunks associated with the articulation
  727.   end;
  728.   {$EXTERNALSYM _DMUS_ARTICULATION}
  729.   DMUS_ARTICULATION = _DMUS_ARTICULATION;
  730.   {$EXTERNALSYM DMUS_ARTICULATION}
  731.   TDMusArticulation = _DMUS_ARTICULATION;
  732.   PDMusArticulation2 = ^TDMusArticulation2;
  733.   _DMUS_ARTICULATION2 = packed record (* Articulation chunk for DMUS_DOWNLOADINFO_INSTRUMENT2 format. *)
  734.     ulArtIdx: Cardinal;               (* DLS Level 1/2 articulation chunk *)
  735.     ulFirstExtCkIdx: Cardinal;        (* 3rd party extenstion chunks associated with the articulation *)
  736.     ulNextArtIdx: Cardinal;           (* Additional articulation chunks *)
  737.   end;
  738.   {$EXTERNALSYM _DMUS_ARTICULATION2}
  739.   DMUS_ARTICULATION2 = _DMUS_ARTICULATION2;
  740.   {$EXTERNALSYM DMUS_ARTICULATION2}
  741.   TDMusArticulation2 = _DMUS_ARTICULATION2;
  742. const
  743.   DMUS_MIN_DATA_SIZE = 4;
  744.   {$EXTERNALSYM DMUS_MIN_DATA_SIZE}
  745. type
  746.   (*  The actual number is determined by cbSize of struct _DMUS_EXTENSIONCHUNK *)
  747.   PDMusExtensionChunk = ^TDMusExtensionChunk;
  748.   _DMUS_EXTENSIONCHUNK = packed record
  749.     cbSize: Cardinal;                      (*  Size of extension chunk  *)
  750.     ulNextExtCkIdx: Cardinal;              (*  If zero no more 3rd party entenstion chunks *)
  751.     ExtCkID: FOURCC;
  752.     byExtCk: array[0..DMUS_MIN_DATA_SIZE-1] of Byte; (*  The actual number that follows is determined by cbSize *)
  753.   end;
  754.   {$EXTERNALSYM _DMUS_EXTENSIONCHUNK}
  755.   DMUS_EXTENSIONCHUNK = _DMUS_EXTENSIONCHUNK;
  756.   {$EXTERNALSYM DMUS_EXTENSIONCHUNK}
  757.   TDMusExtensionChunk = _DMUS_EXTENSIONCHUNK;
  758.   (*  The actual number is determined by cbSize of struct _DMUS_COPYRIGHT *)
  759.   PDMusCopyright = ^TDMusCopyright;
  760.   _DMUS_COPYRIGHT = packed record
  761.     cbSize: Cardinal;                             (*  Size of copyright information *)
  762.     byCopyright: array[0..DMUS_MIN_DATA_SIZE-1] of Byte;    (*  The actual number that follows is determined by cbSize *)
  763.   end;
  764.   {$EXTERNALSYM _DMUS_COPYRIGHT}
  765.   DMUS_COPYRIGHT = _DMUS_COPYRIGHT;
  766.   {$EXTERNALSYM DMUS_COPYRIGHT}
  767.   TDMusCopyright = _DMUS_COPYRIGHT;
  768.   PDMusWaveData = ^TDMusWaveData;
  769.   _DMUS_WAVEDATA = packed record
  770.     cbSize:           Cardinal;
  771.     byData: array[0..DMUS_MIN_DATA_SIZE-1] of Byte;
  772.   end;
  773.   {$EXTERNALSYM _DMUS_WAVEDATA}
  774.   DMUS_WAVEDATA = _DMUS_WAVEDATA;
  775.   {$EXTERNALSYM DMUS_WAVEDATA}
  776.   TDMusWaveData = _DMUS_WAVEDATA;
  777.   PDMusWave = ^TDMusWave;
  778.   _DMUS_WAVE = packed record
  779.     ulFirstExtCkIdx: Cardinal;    (* If zero no 3rd party entenstion chunks associated with the wave *)
  780.     ulCopyrightIdx: Cardinal;     (* If zero no Copyright information associated with the wave *)
  781.     ulWaveDataIdx: Cardinal;      (* Location of actual wave data. *)
  782.     WaveformatEx: tWAVEFORMATEX;
  783.   end;
  784.   {$EXTERNALSYM _DMUS_WAVE}
  785.   DMUS_WAVE = _DMUS_WAVE;
  786.   {$EXTERNALSYM DMUS_WAVE}
  787.   TDMusWave = _DMUS_WAVE;
  788.   PDMusNoteRange = ^TDMusNoteRange;
  789.   _DMUS_NOTERANGE = packed record
  790.     dwLowNote: DWORD;  (* Sets the low note for the range of MIDI note events to which the instrument responds.*)
  791.     dwHighNote: DWORD; (* Sets the high note for the range of MIDI note events to which the instrument responds.*)
  792.   end;
  793.   {$EXTERNALSYM _DMUS_NOTERANGE}
  794.   DMUS_NOTERANGE = _DMUS_NOTERANGE;
  795.   {$EXTERNALSYM DMUS_NOTERANGE}
  796.   TDMusNoteRange = _DMUS_NOTERANGE;
  797.   PDMusWaveArtDL = ^TDMusWaveArtDL;
  798.   _DMUS_WAVEARTDL = packed record
  799.     ulDownloadIdIdx: Cardinal;    (* Download ID's of each buffer *)
  800.     ulBus: Cardinal;              (* Playback bus *)
  801.     ulBuffers: Cardinal;          (* Buffers *)
  802.     ulMasterDLId: Cardinal;       (* Download ID of master voice of slave group *)
  803.     usOptions: Word;              (* Same as DLS2 region options *)
  804.   end;
  805.   {$EXTERNALSYM _DMUS_WAVEARTDL}
  806.   DMUS_WAVEARTDL = _DMUS_WAVEARTDL;
  807.   {$EXTERNALSYM DMUS_WAVEARTDL}
  808.   TDMusWaveArtDL = _DMUS_WAVEARTDL;
  809.   PDMusWaveDL = ^TDMusWaveDL;
  810.   _DMUS_WAVEDL = packed record
  811.     cbWaveData: Cardinal;         (* Bytes of wave data *)
  812.   end;
  813.   {$EXTERNALSYM _DMUS_WAVEDL}
  814.   DMUS_WAVEDL = _DMUS_WAVEDL;
  815.   {$EXTERNALSYM DMUS_WAVEDL}
  816.   TDMusWaveDL = _DMUS_WAVEDL;
  817. (************************************************************************
  818. *                                                                       *
  819. *   dmerror.h -- Error codes returned by DirectMusic API's              *
  820. *                                                                       *
  821. *   Copyright (c) Microsoft Corporation.  All rights reserved.          *
  822. *                                                                       *
  823. ************************************************************************)
  824. const
  825.   FACILITY_DIRECTMUSIC      = $878;       (* Shared with DirectSound *)
  826.   {$EXTERNALSYM FACILITY_DIRECTMUSIC}
  827.   DMUS_ERRBASE              = $1000;      (* Make error codes human readable in hex *)
  828.   {$EXTERNALSYM DMUS_ERRBASE}
  829. // #define MAKE_DMHRESULTSUCCESS(code)     MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
  830. function MAKE_DMHRESULTSUCCESS(Code: DWord): DWord;
  831. {$EXTERNALSYM MAKE_DMHRESULTSUCCESS}
  832. // #define MAKE_DMHRESULTERROR(code)       MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
  833. function MAKE_DMHRESULTERROR(Code: DWord): DWord;
  834. {$EXTERNALSYM MAKE_DMHRESULTERROR}
  835. const
  836.   MAKE_DMHRESULTSUCCESS_R = (0 shl 31) or (FACILITY_DIRECTMUSIC shl 16) or DMUS_ERRBASE;
  837.   MAKE_DMHRESULTERROR_R =   (1 shl 31) or (FACILITY_DIRECTMUSIC shl 16) or DMUS_ERRBASE;
  838. (* DMUS_S_PARTIALLOAD
  839.  *
  840.  * The object could only load partially. This can happen if some components are
  841.  * not registered properly, such as embedded tracks and tools. This can also happen
  842.  * if some content is missing. For example, if a segment uses a DLS collection that
  843.  * is not in the loader's current search directory.
  844.  *)
  845.   DMUS_S_PARTIALLOAD               = (MAKE_DMHRESULTSUCCESS_R + $091);
  846.   {$EXTERNALSYM DMUS_S_PARTIALLOAD}
  847. (* DMUS_S_PARTIALDOWNLOAD
  848.  *
  849.  * Return value from IDirectMusicBand::Download() which indicates that
  850.  * some of the instruments safely downloaded, but others failed. This usually
  851.  * occurs when some instruments are on PChannels not supported by the performance
  852.  * or port.
  853.  *)
  854.   DMUS_S_PARTIALDOWNLOAD           = (MAKE_DMHRESULTSUCCESS_R + $092);
  855.   {$EXTERNALSYM DMUS_S_PARTIALDOWNLOAD}
  856. (* DMUS_S_REQUEUE
  857.  *
  858.  * Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
  859.  * performance that it should cue the PMsg again automatically.
  860.  *)
  861.   DMUS_S_REQUEUE                   = (MAKE_DMHRESULTSUCCESS_R + $200);
  862.   {$EXTERNALSYM DMUS_S_REQUEUE}
  863. (* DMUS_S_FREE
  864.  *
  865.  * Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
  866.  * performance that it should free the PMsg automatically.
  867.  *)
  868.   DMUS_S_FREE                      = (MAKE_DMHRESULTSUCCESS_R + $201);
  869.   {$EXTERNALSYM DMUS_S_FREE}
  870. (* DMUS_S_END
  871.  *
  872.  * Return value from IDirectMusicTrack::Play() which indicates to the
  873.  * segment that the track has no more data after mtEnd.
  874.  *)
  875.   DMUS_S_END                       = (MAKE_DMHRESULTSUCCESS_R + $202);
  876.   {$EXTERNALSYM DMUS_S_END}
  877. (* DMUS_S_STRING_TRUNCATED
  878.  *
  879.  * Returned string has been truncated to fit the buffer size.
  880.  *)
  881.   DMUS_S_STRING_TRUNCATED          = (MAKE_DMHRESULTSUCCESS_R + $210);
  882.   {$EXTERNALSYM DMUS_S_STRING_TRUNCATED}
  883. (* DMUS_S_LAST_TOOL
  884.  *
  885.  * Returned from IDirectMusicGraph::StampPMsg(), this indicates that the PMsg
  886.  * is already stamped with the last tool in the graph. The returned PMsg's
  887.  * tool pointer is now NULL.
  888.  *)
  889.   DMUS_S_LAST_TOOL                 = (MAKE_DMHRESULTSUCCESS_R + $211);
  890.   {$EXTERNALSYM DMUS_S_LAST_TOOL}
  891. (* DMUS_S_OVER_CHORD
  892.  *
  893.  * Returned from IDirectMusicPerformance::MusicToMIDI(), this indicates
  894.  * that no note has been calculated because the music value has the note
  895.  * at a position higher than the top note of the chord. This applies only
  896.  * to DMUS_PLAYMODE_NORMALCHORD play mode. This success code indicates
  897.  * that the caller should not do anything with the note. It is not meant
  898.  * to be played against this chord.
  899.  *)
  900.   DMUS_S_OVER_CHORD                = (MAKE_DMHRESULTSUCCESS_R + $212);
  901.   {$EXTERNALSYM DMUS_S_OVER_CHORD}
  902. (* DMUS_S_UP_OCTAVE
  903.  *
  904.  * Returned from IDirectMusicPerformance::MIDIToMusic(),  and
  905.  * IDirectMusicPerformance::MusicToMIDI(), this indicates
  906.  * that the note conversion generated a note value that is below 0,
  907.  * so it has been bumped up one or more octaves to be in the proper
  908.  * MIDI range of 0 through 127.
  909.  * Note that this is valid for MIDIToMusic() when using play modes
  910.  * DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
  911.  * which store MIDI values in wMusicValue. With MusicToMIDI(), it is
  912.  * valid for all play modes.
  913.  * Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
  914.  *)
  915.   DMUS_S_UP_OCTAVE                 = (MAKE_DMHRESULTSUCCESS_R + $213);
  916.   {$EXTERNALSYM DMUS_S_UP_OCTAVE}
  917. (* DMUS_S_DOWN_OCTAVE
  918.  *
  919.  * Returned from IDirectMusicPerformance::MIDIToMusic(),  and
  920.  * IDirectMusicPerformance::MusicToMIDI(), this indicates
  921.  * that the note conversion generated a note value that is above 127,
  922.  * so it has been bumped down one or more octaves to be in the proper
  923.  * MIDI range of 0 through 127.
  924.  * Note that this is valid for MIDIToMusic() when using play modes
  925.  * DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
  926.  * which store MIDI values in wMusicValue. With MusicToMIDI(), it is
  927.  * valid for all play modes.
  928.  * Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
  929.  *)
  930.   DMUS_S_DOWN_OCTAVE               = (MAKE_DMHRESULTSUCCESS_R + $214);
  931.   {$EXTERNALSYM DMUS_S_DOWN_OCTAVE}
  932. (* DMUS_S_NOBUFFERCONTROL
  933.  *
  934.  * Although the audio output from the port will be routed to the
  935.  * same device as the given DirectSound buffer, buffer controls
  936.  * such as pan and volume will not affect the output.
  937.  *
  938.  *)
  939.   DMUS_S_NOBUFFERCONTROL           = (MAKE_DMHRESULTSUCCESS_R + $215);
  940.   {$EXTERNALSYM DMUS_S_NOBUFFERCONTROL}
  941. (* DMUS_S_GARBAGE_COLLECTED
  942.  *
  943.  * The requested operation was not performed because during CollectGarbage
  944.  * the loader determined that the object had been released.
  945.  *)
  946.   DMUS_S_GARBAGE_COLLECTED         = (MAKE_DMHRESULTSUCCESS_R + $216);
  947.   {$EXTERNALSYM DMUS_S_GARBAGE_COLLECTED}
  948. (* DMUS_E_DRIVER_FAILED
  949.  *
  950.  * An unexpected error was returned from a device driver, indicating
  951.  * possible failure of the driver or hardware.
  952.  *)
  953.   DMUS_E_DRIVER_FAILED            = (MAKE_DMHRESULTERROR_R + $0101);
  954.   {$EXTERNALSYM DMUS_E_DRIVER_FAILED}
  955. (* DMUS_E_PORTS_OPEN
  956.  *
  957.  * The requested operation cannot be performed while there are
  958.  * instantiated ports in any process in the system.
  959.  *)
  960.   DMUS_E_PORTS_OPEN               = (MAKE_DMHRESULTERROR_R + $0102);
  961.   {$EXTERNALSYM DMUS_E_PORTS_OPEN}
  962. (* DMUS_E_DEVICE_IN_USE
  963.  *
  964.  * The requested device is already in use (possibly by a non-DirectMusic
  965.  * client) and cannot be opened again.
  966.  *)
  967.   DMUS_E_DEVICE_IN_USE            = (MAKE_DMHRESULTERROR_R + $0103);
  968.   {$EXTERNALSYM DMUS_E_DEVICE_IN_USE}
  969. (* DMUS_E_INSUFFICIENTBUFFER
  970.  *
  971.  * Buffer is not large enough for requested operation.
  972.  *)
  973.   DMUS_E_INSUFFICIENTBUFFER       = (MAKE_DMHRESULTERROR_R + $0104);
  974.   {$EXTERNALSYM DMUS_E_INSUFFICIENTBUFFER}
  975. (* DMUS_E_BUFFERNOTSET
  976.  *
  977.  * No buffer was prepared for the download data.
  978.  *)
  979.   DMUS_E_BUFFERNOTSET             = (MAKE_DMHRESULTERROR_R + $0105);
  980.   {$EXTERNALSYM DMUS_E_BUFFERNOTSET}
  981. (* DMUS_E_BUFFERNOTAVAILABLE
  982.  *
  983.  * Download failed due to inability to access or create download buffer.
  984.  *)
  985.   DMUS_E_BUFFERNOTAVAILABLE       = (MAKE_DMHRESULTERROR_R + $0106);
  986.   {$EXTERNALSYM DMUS_E_BUFFERNOTAVAILABLE}
  987. (* DMUS_E_NOTADLSCOL
  988.  *
  989.  * Error parsing DLS collection. File is corrupt.
  990.  *)
  991.   DMUS_E_NOTADLSCOL               = (MAKE_DMHRESULTERROR_R + $0108);
  992.   {$EXTERNALSYM DMUS_E_NOTADLSCOL}
  993. (* DMUS_E_INVALIDOFFSET
  994.  *
  995.  * Wave chunks in DLS collection file are at incorrect offsets.
  996.  *)
  997.   DMUS_E_INVALIDOFFSET            = (MAKE_DMHRESULTERROR_R + $0109);
  998.   {$EXTERNALSYM DMUS_E_INVALIDOFFSET}
  999. (* DMUS_E_ALREADY_LOADED
  1000.  *
  1001.  * Second attempt to load a DLS collection that is currently open.
  1002.  *)
  1003.   DMUS_E_ALREADY_LOADED           = (MAKE_DMHRESULTERROR_R + $0111);
  1004.   {$EXTERNALSYM DMUS_E_ALREADY_LOADED}
  1005. (* DMUS_E_INVALIDPOS
  1006.  *
  1007.  * Error reading wave data from DLS collection. Indicates bad file.
  1008.  *)
  1009.   DMUS_E_INVALIDPOS               = (MAKE_DMHRESULTERROR_R + $0113);
  1010.   {$EXTERNALSYM DMUS_E_INVALIDPOS}
  1011. (* DMUS_E_INVALIDPATCH
  1012.  *
  1013.  * There is no instrument in the collection that matches patch number.
  1014.  *)
  1015.   DMUS_E_INVALIDPATCH             = (MAKE_DMHRESULTERROR_R + $0114);
  1016.   {$EXTERNALSYM DMUS_E_INVALIDPATCH}
  1017. (* DMUS_E_CANNOTSEEK
  1018.  *
  1019.  * The IStream* doesn't support Seek().
  1020.  *)
  1021.   DMUS_E_CANNOTSEEK               = (MAKE_DMHRESULTERROR_R + $0115);
  1022.   {$EXTERNALSYM DMUS_E_CANNOTSEEK}
  1023. (* DMUS_E_CANNOTWRITE
  1024.  *
  1025.  * The IStream* doesn't support Write().
  1026.  *)
  1027.   DMUS_E_CANNOTWRITE              = (MAKE_DMHRESULTERROR_R + $0116);
  1028.   {$EXTERNALSYM DMUS_E_CANNOTWRITE}
  1029. (* DMUS_E_CHUNKNOTFOUND
  1030.  *
  1031.  * The RIFF parser doesn't contain a required chunk while parsing file.
  1032.  *)
  1033.   DMUS_E_CHUNKNOTFOUND            = (MAKE_DMHRESULTERROR_R + $0117);
  1034.   {$EXTERNALSYM DMUS_E_CHUNKNOTFOUND}
  1035. (* DMUS_E_INVALID_DOWNLOADID
  1036.  *
  1037.  * Invalid download id was used in the process of creating a download buffer.
  1038.  *)
  1039.   DMUS_E_INVALID_DOWNLOADID       = (MAKE_DMHRESULTERROR_R + $0119);
  1040.   {$EXTERNALSYM DMUS_E_INVALID_DOWNLOADID}
  1041. (* DMUS_E_NOT_DOWNLOADED_TO_PORT
  1042.  *
  1043.  * Tried to unload an object that was not downloaded or previously unloaded.
  1044.  *)
  1045.   DMUS_E_NOT_DOWNLOADED_TO_PORT   = (MAKE_DMHRESULTERROR_R + $0120);
  1046.   {$EXTERNALSYM DMUS_E_NOT_DOWNLOADED_TO_PORT}
  1047. (* DMUS_E_ALREADY_DOWNLOADED
  1048.  *
  1049.  * Buffer was already downloaded to synth.
  1050.  *)
  1051.   DMUS_E_ALREADY_DOWNLOADED       = (MAKE_DMHRESULTERROR_R + $0121);
  1052.   {$EXTERNALSYM DMUS_E_ALREADY_DOWNLOADED}
  1053. (* DMUS_E_UNKNOWN_PROPERTY
  1054.  *
  1055.  * The specified property item was not recognized by the target object.
  1056.  *)
  1057.   DMUS_E_UNKNOWN_PROPERTY         = (MAKE_DMHRESULTERROR_R + $0122);
  1058.   {$EXTERNALSYM DMUS_E_UNKNOWN_PROPERTY}
  1059. (* DMUS_E_SET_UNSUPPORTED
  1060.  *
  1061.  * The specified property item may not be set on the target object.
  1062.  *)
  1063.   DMUS_E_SET_UNSUPPORTED          = (MAKE_DMHRESULTERROR_R + $0123);
  1064.   {$EXTERNALSYM DMUS_E_SET_UNSUPPORTED}
  1065. (* DMUS_E_GET_UNSUPPORTED
  1066.  *
  1067.  * The specified property item may not be retrieved from the target object.
  1068.  *)
  1069.   DMUS_E_GET_UNSUPPORTED          = (MAKE_DMHRESULTERROR_R + $0124);
  1070.   {$EXTERNALSYM DMUS_E_GET_UNSUPPORTED}
  1071. (* DMUS_E_NOTMONO
  1072.  *
  1073.  * Wave chunk has more than one interleaved channel. DLS format requires MONO.
  1074.  *)
  1075.   DMUS_E_NOTMONO                  = (MAKE_DMHRESULTERROR_R + $0125);
  1076.   {$EXTERNALSYM DMUS_E_NOTMONO}
  1077. (* DMUS_E_BADARTICULATION
  1078.  *
  1079.  * Invalid articulation chunk in DLS collection.
  1080.  *)
  1081.   DMUS_E_BADARTICULATION          = (MAKE_DMHRESULTERROR_R + $0126);
  1082.   {$EXTERNALSYM DMUS_E_BADARTICULATION}
  1083. (* DMUS_E_BADINSTRUMENT
  1084.  *
  1085.  * Invalid instrument chunk in DLS collection.
  1086.  *)
  1087.   DMUS_E_BADINSTRUMENT            = (MAKE_DMHRESULTERROR_R + $0127);
  1088.   {$EXTERNALSYM DMUS_E_BADINSTRUMENT}
  1089. (* DMUS_E_BADWAVELINK
  1090.  *
  1091.  * Wavelink chunk in DLS collection points to invalid wave.
  1092.  *)
  1093.   DMUS_E_BADWAVELINK              = (MAKE_DMHRESULTERROR_R + $0128);
  1094.   {$EXTERNALSYM DMUS_E_BADWAVELINK}
  1095. (* DMUS_E_NOARTICULATION
  1096.  *
  1097.  * Articulation missing from instrument in DLS collection.
  1098.  *)
  1099.   DMUS_E_NOARTICULATION           = (MAKE_DMHRESULTERROR_R + $0129);
  1100.   {$EXTERNALSYM DMUS_E_NOARTICULATION}
  1101. (* DMUS_E_NOTPCM
  1102.  *
  1103.  * Downoaded DLS wave is not in PCM format.
  1104. *)
  1105.   DMUS_E_NOTPCM                   = (MAKE_DMHRESULTERROR_R + $012A);
  1106.   {$EXTERNALSYM DMUS_E_NOTPCM}
  1107. (* DMUS_E_BADWAVE
  1108.  *
  1109.  * Bad wave chunk in DLS collection
  1110.  *)
  1111.   DMUS_E_BADWAVE                  = (MAKE_DMHRESULTERROR_R + $012B);
  1112.   {$EXTERNALSYM DMUS_E_BADWAVE}
  1113. (* DMUS_E_BADOFFSETTABLE
  1114.  *
  1115.  * Offset Table for download buffer has errors.
  1116.  *)
  1117.   DMUS_E_BADOFFSETTABLE           = (MAKE_DMHRESULTERROR_R + $012C);
  1118.   {$EXTERNALSYM DMUS_E_BADOFFSETTABLE}
  1119. (* DMUS_E_UNKNOWNDOWNLOAD
  1120.  *
  1121.  * Attempted to download unknown data type.
  1122.  *)
  1123.   DMUS_E_UNKNOWNDOWNLOAD          = (MAKE_DMHRESULTERROR_R + $012D);
  1124.   {$EXTERNALSYM DMUS_E_UNKNOWNDOWNLOAD}
  1125. (* DMUS_E_NOSYNTHSINK
  1126.  *
  1127.  * The operation could not be completed because no sink was connected to
  1128.  * the synthesizer.
  1129.  *)
  1130.   DMUS_E_NOSYNTHSINK              = (MAKE_DMHRESULTERROR_R + $012E);
  1131.   {$EXTERNALSYM DMUS_E_NOSYNTHSINK}
  1132. (* DMUS_E_ALREADYOPEN
  1133.  *
  1134.  * An attempt was made to open the software synthesizer while it was already
  1135.  * open.
  1136.  * ASSERT?
  1137.  *)
  1138.   DMUS_E_ALREADYOPEN              = (MAKE_DMHRESULTERROR_R + $012F);
  1139.   {$EXTERNALSYM DMUS_E_ALREADYOPEN}
  1140. (* DMUS_E_ALREADYCLOSE
  1141.  *
  1142.  * An attempt was made to close the software synthesizer while it was already
  1143.  * open.
  1144.  * ASSERT?
  1145.  *)
  1146.   DMUS_E_ALREADYCLOSED            = (MAKE_DMHRESULTERROR_R + $0130);
  1147.   {$EXTERNALSYM DMUS_E_ALREADYCLOSED}
  1148. (* DMUS_E_SYNTHNOTCONFIGURED
  1149.  *
  1150.  * The operation could not be completed because the software synth has not
  1151.  * yet been fully configured.
  1152.  * ASSERT?
  1153.  *)
  1154.   DMUS_E_SYNTHNOTCONFIGURED       = (MAKE_DMHRESULTERROR_R + $0131);
  1155.   {$EXTERNALSYM DMUS_E_SYNTHNOTCONFIGURED}
  1156. (* DMUS_E_SYNTHACTIVE
  1157.  *
  1158.  * The operation cannot be carried out while the synthesizer is active.
  1159.  *)
  1160.   DMUS_E_SYNTHACTIVE              = (MAKE_DMHRESULTERROR_R + $0132);
  1161.   {$EXTERNALSYM DMUS_E_SYNTHACTIVE}
  1162. (* DMUS_E_CANNOTREAD
  1163.  *
  1164.  * An error occurred while attempting to read from the IStream* object.
  1165.  *)
  1166.   DMUS_E_CANNOTREAD               = (MAKE_DMHRESULTERROR_R + $0133);
  1167.   {$EXTERNALSYM DMUS_E_CANNOTREAD}
  1168. (* DMUS_E_DMUSIC_RELEASED
  1169.  *
  1170.  * The operation cannot be performed because the final instance of the
  1171.  * DirectMusic object was released. Ports cannot be used after final
  1172.  * release of the DirectMusic object.
  1173.  *)
  1174.   DMUS_E_DMUSIC_RELEASED          = (MAKE_DMHRESULTERROR_R + $0134);
  1175.   {$EXTERNALSYM DMUS_E_DMUSIC_RELEASED}
  1176. (* DMUS_E_BUFFER_EMPTY
  1177.  *
  1178.  * There was no data in the referenced buffer.
  1179.  *)
  1180.   DMUS_E_BUFFER_EMPTY             = (MAKE_DMHRESULTERROR_R + $0135);
  1181.   {$EXTERNALSYM DMUS_E_BUFFER_EMPTY}
  1182. (* DMUS_E_BUFFER_FULL
  1183.  *
  1184.  * There is insufficient space to insert the given event into the buffer.
  1185.  *)
  1186.   DMUS_E_BUFFER_FULL              = (MAKE_DMHRESULTERROR_R + $0136);
  1187.   {$EXTERNALSYM DMUS_E_BUFFER_FULL}
  1188. (* DMUS_E_PORT_NOT_CAPTURE
  1189.  *
  1190.  * The given operation could not be carried out because the port is a
  1191.  * capture port.
  1192.  *)
  1193.   DMUS_E_PORT_NOT_CAPTURE         = (MAKE_DMHRESULTERROR_R + $0137);
  1194.   {$EXTERNALSYM DMUS_E_PORT_NOT_CAPTURE}
  1195. (* DMUS_E_PORT_NOT_RENDER
  1196.  *
  1197.  * The given operation could not be carried out because the port is a
  1198.  * render port.
  1199.  *)
  1200.   DMUS_E_PORT_NOT_RENDER          = (MAKE_DMHRESULTERROR_R + $0138);
  1201.   {$EXTERNALSYM DMUS_E_PORT_NOT_RENDER}
  1202. (* DMUS_E_DSOUND_NOT_SET
  1203.  *
  1204.  * The port could not be created because no DirectSound has been specified.
  1205.  * Specify a DirectSound interface via the IDirectMusic::SetDirectSound
  1206.  * method; pass NULL to have DirectMusic manage usage of DirectSound.
  1207.  *)
  1208.   DMUS_E_DSOUND_NOT_SET           = (MAKE_DMHRESULTERROR_R + $0139);
  1209.   {$EXTERNALSYM DMUS_E_DSOUND_NOT_SET}
  1210. (* DMUS_E_ALREADY_ACTIVATED
  1211.  *
  1212.  * The operation cannot be carried out while the port is active.
  1213.  *)
  1214.   DMUS_E_ALREADY_ACTIVATED        = (MAKE_DMHRESULTERROR_R + $013A);
  1215.   {$EXTERNALSYM DMUS_E_ALREADY_ACTIVATED}
  1216. (* DMUS_E_INVALIDBUFFER
  1217.  *
  1218.  * Invalid DirectSound buffer was handed to port.
  1219.  *)
  1220.   DMUS_E_INVALIDBUFFER            = (MAKE_DMHRESULTERROR_R + $013B);
  1221.   {$EXTERNALSYM DMUS_E_INVALIDBUFFER}
  1222. (* DMUS_E_WAVEFORMATNOTSUPPORTED
  1223.  *
  1224.  * Invalid buffer format was handed to the synth sink.
  1225.  *)
  1226.   DMUS_E_WAVEFORMATNOTSUPPORTED   = (MAKE_DMHRESULTERROR_R + $013C);
  1227.   {$EXTERNALSYM DMUS_E_WAVEFORMATNOTSUPPORTED}
  1228. (* DMUS_E_SYNTHINACTIVE
  1229.  *
  1230.  * The operation cannot be carried out while the synthesizer is inactive.
  1231.  *)
  1232.   DMUS_E_SYNTHINACTIVE            = (MAKE_DMHRESULTERROR_R + $013D);
  1233.   {$EXTERNALSYM DMUS_E_SYNTHINACTIVE}
  1234. (* DMUS_E_DSOUND_ALREADY_SET
  1235.  *
  1236.  * IDirectMusic::SetDirectSound has already been called. It may not be
  1237.  * changed while in use.
  1238.  *)
  1239.   DMUS_E_DSOUND_ALREADY_SET       = (MAKE_DMHRESULTERROR_R + $013E);
  1240.   {$EXTERNALSYM DMUS_E_DSOUND_ALREADY_SET}
  1241. (* DMUS_E_INVALID_EVENT
  1242.  *
  1243.  * The given event is invalid (either it is not a valid MIDI message
  1244.  * or it makes use of running status). The event cannot be packed
  1245.  * into the buffer.
  1246.  *)
  1247.   DMUS_E_INVALID_EVENT            = (MAKE_DMHRESULTERROR_R + $013F);
  1248.   {$EXTERNALSYM DMUS_E_INVALID_EVENT}
  1249. (* DMUS_E_UNSUPPORTED_STREAM
  1250.  *
  1251.  * The IStream* object does not contain data supported by the loading object.
  1252.  *)
  1253.   DMUS_E_UNSUPPORTED_STREAM       = (MAKE_DMHRESULTERROR_R + $0150);
  1254.   {$EXTERNALSYM DMUS_E_UNSUPPORTED_STREAM}
  1255. (* DMUS_E_ALREADY_INITED
  1256.  *
  1257.  * The object has already been initialized.
  1258.  *)
  1259.   DMUS_E_ALREADY_INITED           = (MAKE_DMHRESULTERROR_R + $0151);
  1260.   {$EXTERNALSYM DMUS_E_ALREADY_INITED}
  1261. (* DMUS_E_INVALID_BAND
  1262.  *
  1263.  * The file does not contain a valid band.
  1264.  *)
  1265.   DMUS_E_INVALID_BAND             = (MAKE_DMHRESULTERROR_R + $0152);
  1266.   {$EXTERNALSYM DMUS_E_INVALID_BAND}
  1267. (* DMUS_E_TRACK_HDR_NOT_FIRST_CK
  1268.  *
  1269.  * The IStream* object's data does not have a track header as the first chunk,
  1270.  * and therefore can not be read by the segment object.
  1271.  *)
  1272.   DMUS_E_TRACK_HDR_NOT_FIRST_CK   = (MAKE_DMHRESULTERROR_R + $0155);
  1273.   {$EXTERNALSYM DMUS_E_TRACK_HDR_NOT_FIRST_CK}
  1274. (* DMUS_E_TOOL_HDR_NOT_FIRST_CK
  1275.  *
  1276.  * The IStream* object's data does not have a tool header as the first chunk,
  1277.  * and therefore can not be read by the graph object.
  1278.  *)
  1279.   DMUS_E_TOOL_HDR_NOT_FIRST_CK    = (MAKE_DMHRESULTERROR_R + $0156);
  1280.   {$EXTERNALSYM DMUS_E_TOOL_HDR_NOT_FIRST_CK}
  1281. (* DMUS_E_INVALID_TRACK_HDR
  1282.  *
  1283.  * The IStream* object's data contains an invalid track header (ckid is 0 and
  1284.  * fccType is NULL,) and therefore can not be read by the segment object.
  1285.  *)
  1286.   DMUS_E_INVALID_TRACK_HDR        = (MAKE_DMHRESULTERROR_R + $0157);
  1287.   {$EXTERNALSYM DMUS_E_INVALID_TRACK_HDR}
  1288. (* DMUS_E_INVALID_TOOL_HDR
  1289.  *
  1290.  * The IStream* object's data contains an invalid tool header (ckid is 0 and
  1291.  * fccType is NULL,) and therefore can not be read by the graph object.
  1292.  *)
  1293.   DMUS_E_INVALID_TOOL_HDR         = (MAKE_DMHRESULTERROR_R + $0158);
  1294.   {$EXTERNALSYM DMUS_E_INVALID_TOOL_HDR}
  1295. (* DMUS_E_ALL_TOOLS_FAILED
  1296.  *
  1297.  * The graph object was unable to load all tools from the IStream* object data.
  1298.  * This may be due to errors in the stream, or the tools being incorrectly
  1299.  * registered on the client.
  1300.  *)
  1301.   DMUS_E_ALL_TOOLS_FAILED         = (MAKE_DMHRESULTERROR_R + $0159);
  1302.   {$EXTERNALSYM DMUS_E_ALL_TOOLS_FAILED}
  1303. (* DMUS_E_ALL_TRACKS_FAILED
  1304.  *
  1305.  * The segment object was unable to load all tracks from the IStream* object data.
  1306.  * This may be due to errors in the stream, or the tracks being incorrectly
  1307.  * registered on the client.
  1308.  *)
  1309.   DMUS_E_ALL_TRACKS_FAILED        = (MAKE_DMHRESULTERROR_R + $0160);
  1310.   {$EXTERNALSYM DMUS_E_ALL_TRACKS_FAILED}
  1311. (* DMUS_E_NOT_FOUND
  1312.  *
  1313.  * The requested item was not contained by the object.
  1314.  *)
  1315.   DMUS_E_NOT_FOUND                = (MAKE_DMHRESULTERROR_R + $0161);
  1316.   {$EXTERNALSYM DMUS_E_NOT_FOUND}
  1317. (* DMUS_E_NOT_INIT
  1318.  *
  1319.  * A required object is not initialized or failed to initialize.
  1320.  *)
  1321.   DMUS_E_NOT_INIT                 = (MAKE_DMHRESULTERROR_R + $0162);
  1322.   {$EXTERNALSYM DMUS_E_NOT_INIT}
  1323. (* DMUS_E_TYPE_DISABLED
  1324.  *
  1325.  * The requested parameter type is currently disabled. Parameter types may
  1326.  * be enabled and disabled by certain calls to SetParam().
  1327.  *)
  1328.   DMUS_E_TYPE_DISABLED            = (MAKE_DMHRESULTERROR_R + $0163);
  1329.   {$EXTERNALSYM DMUS_E_TYPE_DISABLED}
  1330. (* DMUS_E_TYPE_UNSUPPORTED
  1331.  *
  1332.  * The requested parameter type is not supported on the object.
  1333.  *)
  1334.   DMUS_E_TYPE_UNSUPPORTED         = (MAKE_DMHRESULTERROR_R + $0164);
  1335.   {$EXTERNALSYM DMUS_E_TYPE_UNSUPPORTED}
  1336. (* DMUS_E_TIME_PAST
  1337.  *
  1338.  * The time is in the past, and the operation can not succeed.
  1339.  *)
  1340.   DMUS_E_TIME_PAST                = (MAKE_DMHRESULTERROR_R + $0165);
  1341.   {$EXTERNALSYM DMUS_E_TIME_PAST}
  1342. (* DMUS_E_TRACK_NOT_FOUND
  1343.  *
  1344.  * The requested track is not contained by the segment.
  1345.  *)
  1346.   DMUS_E_TRACK_NOT_FOUND = (MAKE_DMHRESULTERROR_R + $0166);
  1347.   {$EXTERNALSYM DMUS_E_TRACK_NOT_FOUND}
  1348. (* DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT
  1349.  *
  1350.  * The track does not support clock time playback or getparam.
  1351.  *)
  1352.   DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT   = (MAKE_DMHRESULTERROR_R + $0167);
  1353.   {$EXTERNALSYM DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT}
  1354. (* DMUS_E_NO_MASTER_CLOCK
  1355.  *
  1356.  * There is no master clock in the performance. Be sure to call
  1357.  * IDirectMusicPerformance::Init().
  1358.  *)
  1359.   DMUS_E_NO_MASTER_CLOCK          = (MAKE_DMHRESULTERROR_R + $0170);
  1360.   {$EXTERNALSYM DMUS_E_NO_MASTER_CLOCK}
  1361. (* DMUS_E_LOADER_NOCLASSID
  1362.  *
  1363.  * The class id field is required and missing in the DMUS_OBJECTDESC.
  1364.  *)
  1365.   DMUS_E_LOADER_NOCLASSID         = (MAKE_DMHRESULTERROR_R + $0180);
  1366.   {$EXTERNALSYM DMUS_E_LOADER_NOCLASSID}
  1367. (* DMUS_E_LOADER_BADPATH
  1368.  *
  1369.  * The requested file path is invalid.
  1370.  *)
  1371.   DMUS_E_LOADER_BADPATH           = (MAKE_DMHRESULTERROR_R + $0181);
  1372.   {$EXTERNALSYM DMUS_E_LOADER_BADPATH}
  1373. (* DMUS_E_LOADER_FAILEDOPEN
  1374.  *
  1375.  * File open failed - either file doesn't exist or is locked.
  1376.  *)
  1377.   DMUS_E_LOADER_FAILEDOPEN        = (MAKE_DMHRESULTERROR_R + $0182);
  1378.   {$EXTERNALSYM DMUS_E_LOADER_FAILEDOPEN}
  1379. (* DMUS_E_LOADER_FORMATNOTSUPPORTED
  1380.  *
  1381.  * Search data type is not supported.
  1382.  *)
  1383.   DMUS_E_LOADER_FORMATNOTSUPPORTED    = (MAKE_DMHRESULTERROR_R + $0183);
  1384.   {$EXTERNALSYM DMUS_E_LOADER_FORMATNOTSUPPORTED}
  1385. (* DMUS_E_LOADER_FAILEDCREATE
  1386.  *
  1387.  * Unable to find or create object.
  1388.  *)
  1389.   DMUS_E_LOADER_FAILEDCREATE      = (MAKE_DMHRESULTERROR_R + $0184);
  1390.   {$EXTERNALSYM DMUS_E_LOADER_FAILEDCREATE}
  1391. (* DMUS_E_LOADER_OBJECTNOTFOUND
  1392.  *
  1393.  * Object was not found.
  1394.  *)
  1395.   DMUS_E_LOADER_OBJECTNOTFOUND    = (MAKE_DMHRESULTERROR_R + $0185);
  1396.   {$EXTERNALSYM DMUS_E_LOADER_OBJECTNOTFOUND}
  1397. (* DMUS_E_LOADER_NOFILENAME
  1398.  *
  1399.  * The file name is missing from the DMUS_OBJECTDESC.
  1400.  *)
  1401.   DMUS_E_LOADER_NOFILENAME     = (MAKE_DMHRESULTERROR_R + $0186);
  1402.   {$EXTERNALSYM DMUS_E_LOADER_NOFILENAME}
  1403. (* DMUS_E_INVALIDFILE
  1404.  *
  1405.  * The file requested is not a valid file.
  1406.  *)
  1407.   DMUS_E_INVALIDFILE              = (MAKE_DMHRESULTERROR_R + $0200);
  1408.   {$EXTERNALSYM DMUS_E_INVALIDFILE}
  1409. (* DMUS_E_ALREADY_EXISTS
  1410.  *
  1411.  * The tool is already contained in the graph. Create a new instance.
  1412.  *)
  1413.   DMUS_E_ALREADY_EXISTS           = (MAKE_DMHRESULTERROR_R + $0201);
  1414.   {$EXTERNALSYM DMUS_E_ALREADY_EXISTS}
  1415. (* DMUS_E_OUT_OF_RANGE
  1416.  *
  1417.  * Value is out of range, for instance the requested length is longer than
  1418.  * the segment.
  1419.  *)
  1420.   DMUS_E_OUT_OF_RANGE             = (MAKE_DMHRESULTERROR_R + $0202);
  1421.   {$EXTERNALSYM DMUS_E_OUT_OF_RANGE}
  1422. (* DMUS_E_SEGMENT_INIT_FAILED
  1423.  *
  1424.  * Segment initialization failed, most likely due to a critical memory situation.
  1425.  *)
  1426.   DMUS_E_SEGMENT_INIT_FAILED      = (MAKE_DMHRESULTERROR_R + $0203);
  1427.   {$EXTERNALSYM DMUS_E_SEGMENT_INIT_FAILED}
  1428. (* DMUS_E_ALREADY_SENT
  1429.  *
  1430.  * The DMUS_PMSG has already been sent to the performance object via
  1431.  * IDirectMusicPerformance::SendPMsg().
  1432.  *)
  1433.   DMUS_E_ALREADY_SENT             = (MAKE_DMHRESULTERROR_R + $0204);
  1434.   {$EXTERNALSYM DMUS_E_ALREADY_SENT}
  1435. (* DMUS_E_CANNOT_FREE
  1436.  *
  1437.  * The DMUS_PMSG was either not allocated by the performance via
  1438.  * IDirectMusicPerformance::AllocPMsg(), or it was already freed via
  1439.  * IDirectMusicPerformance::FreePMsg().
  1440.  *)
  1441.   DMUS_E_CANNOT_FREE              = (MAKE_DMHRESULTERROR_R + $0205);
  1442.   {$EXTERNALSYM DMUS_E_CANNOT_FREE}
  1443. (* DMUS_E_CANNOT_OPEN_PORT
  1444.  *
  1445.  * The default system port could not be opened.
  1446.  *)
  1447.   DMUS_E_CANNOT_OPEN_PORT         = (MAKE_DMHRESULTERROR_R + $0206);
  1448.   {$EXTERNALSYM DMUS_E_CANNOT_OPEN_PORT}
  1449. (* DMUS_E_CANNOT_CONVERT
  1450.  *
  1451.  * A call to MIDIToMusic() or MusicToMIDI() resulted in an error because
  1452.  * the requested conversion could not happen. This usually occurs when the
  1453.  * provided DMUS_CHORD_KEY structure has an invalid chord or scale pattern.
  1454.  *)
  1455.   DMUS_E_CANNOT_CONVERT           = (MAKE_DMHRESULTERROR_R + $0207);
  1456.   {$EXTERNALSYM DMUS_E_CANNOT_CONVERT}
  1457. (* misspelling in previous versions of DirectX preserved for backward compatibility *)
  1458.   DMUS_E_CONNOT_CONVERT           = DMUS_E_CANNOT_CONVERT;
  1459.   {$EXTERNALSYM DMUS_E_CONNOT_CONVERT}
  1460. (* DMUS_E_DESCEND_CHUNK_FAIL
  1461.  *
  1462.  * DMUS_E_DESCEND_CHUNK_FAIL is returned when the end of the file
  1463.  * was reached before the desired chunk was found.
  1464.  *)
  1465.   DMUS_E_DESCEND_CHUNK_FAIL       = (MAKE_DMHRESULTERROR_R + $0210);
  1466.   {$EXTERNALSYM DMUS_E_DESCEND_CHUNK_FAIL}
  1467. (* DMUS_E_NOT_LOADED
  1468.  *
  1469.  * An attempt to use this object failed because it first needs to
  1470.  * be loaded.
  1471.  *)
  1472.   DMUS_E_NOT_LOADED               = (MAKE_DMHRESULTERROR_R + $0211);
  1473.   {$EXTERNALSYM DMUS_E_NOT_LOADED}
  1474. (* DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE
  1475.  *
  1476.  * The activeX scripting engine for the script's language is not compatible with
  1477.  * DirectMusic.
  1478.  *
  1479.  *)
  1480.   DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE  = (MAKE_DMHRESULTERROR_R + $0213);
  1481.   {$EXTERNALSYM DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE}
  1482. (* DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE
  1483.  *
  1484.  * A varient was used that had a type that is not supported by DirectMusic.
  1485.  *
  1486.  *)
  1487.   DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE    = (MAKE_DMHRESULTERROR_R + $0214);
  1488.   {$EXTERNALSYM DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE}
  1489. (* DMUS_E_SCRIPT_ERROR_IN_SCRIPT
  1490.  *
  1491.  * An error was encountered while parsing or executing the script.
  1492.  * The pErrorInfo parameter (if supplied) was filled with information about the error.
  1493.  *)
  1494.   DMUS_E_SCRIPT_ERROR_IN_SCRIPT        = (MAKE_DMHRESULTERROR_R + $0215);
  1495.   {$EXTERNALSYM DMUS_E_SCRIPT_ERROR_IN_SCRIPT}
  1496. (* DMUS_E_SCRIPT_CANTLOAD_OLEAUT32
  1497.  *
  1498.  * Loading of oleaut32.dll failed.  VBScript and other activeX scripting languages
  1499.  * require use of oleaut32.dll.  On platforms where oleaut32.dll is not present, only
  1500.  * the DirectMusicScript language, which doesn't require oleaut32.dll can be used.
  1501.  *)
  1502.   DMUS_E_SCRIPT_CANTLOAD_OLEAUT32      = (MAKE_DMHRESULTERROR_R + $0216);
  1503.   {$EXTERNALSYM DMUS_E_SCRIPT_CANTLOAD_OLEAUT32}
  1504. (* DMUS_E_SCRIPT_LOADSCRIPT_ERROR
  1505.  *
  1506.  * An error occured while parsing a script loaded using LoadScript.  The script that
  1507.  * was loaded contains an error.
  1508.  *)
  1509.   DMUS_E_SCRIPT_LOADSCRIPT_ERROR       = (MAKE_DMHRESULTERROR_R + $0217);
  1510.   {$EXTERNALSYM DMUS_E_SCRIPT_LOADSCRIPT_ERROR}
  1511. (* DMUS_E_SCRIPT_INVALID_FILE
  1512.  *
  1513.  * The script file is invalid.
  1514.  *)
  1515.   DMUS_E_SCRIPT_INVALID_FILE           = (MAKE_DMHRESULTERROR_R + $0218);
  1516.   {$EXTERNALSYM DMUS_E_SCRIPT_INVALID_FILE}
  1517. (* DMUS_E_INVALID_SCRIPTTRACK
  1518.  *
  1519.  * The file contains an invalid script track.
  1520.  *)
  1521.   DMUS_E_INVALID_SCRIPTTRACK           = (MAKE_DMHRESULTERROR_R + $0219);
  1522.   {$EXTERNALSYM DMUS_E_INVALID_SCRIPTTRACK}
  1523. (* DMUS_E_SCRIPT_VARIABLE_NOT_FOUND
  1524.  *
  1525.  * The script does not contain a variable with the specified name.
  1526.  *)
  1527.   DMUS_E_SCRIPT_VARIABLE_NOT_FOUND     = (MAKE_DMHRESULTERROR_R + $021A);
  1528.   {$EXTERNALSYM DMUS_E_SCRIPT_VARIABLE_NOT_FOUND}
  1529. (* DMUS_E_SCRIPT_ROUTINE_NOT_FOUND
  1530.  *
  1531.  * The script does not contain a routine with the specified name.
  1532.  *)
  1533.   DMUS_E_SCRIPT_ROUTINE_NOT_FOUND      = (MAKE_DMHRESULTERROR_R + $021B);
  1534.   {$EXTERNALSYM DMUS_E_SCRIPT_ROUTINE_NOT_FOUND}
  1535. (* DMUS_E_SCRIPT_CONTENT_READONLY
  1536.  *
  1537.  * Scripts variables for content referenced or embedded in a script cannot be set.
  1538.  *)
  1539.   DMUS_E_SCRIPT_CONTENT_READONLY       = (MAKE_DMHRESULTERROR_R + $021C);
  1540.   {$EXTERNALSYM DMUS_E_SCRIPT_CONTENT_READONLY}
  1541. (* DMUS_E_SCRIPT_NOT_A_REFERENCE
  1542.  *
  1543.  * Attempt was made to set a script's variable by reference to a value that was
  1544.  * not an object type.
  1545.  *)
  1546.   DMUS_E_SCRIPT_NOT_A_REFERENCE        = (MAKE_DMHRESULTERROR_R + $021D);
  1547.   {$EXTERNALSYM DMUS_E_SCRIPT_NOT_A_REFERENCE}
  1548. (* DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED
  1549.  *
  1550.  * Attempt was made to set a script's variable by value to an object that does
  1551.  * not support a default value property.
  1552.  *)
  1553.   DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED    = (MAKE_DMHRESULTERROR_R + $021E);
  1554.   {$EXTERNALSYM DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED}
  1555. (* DMUS_E_INVALID_SEGMENTTRIGGERTRACK
  1556.  *
  1557.  * The file contains an invalid segment trigger track.
  1558.  *)
  1559.   DMUS_E_INVALID_SEGMENTTRIGGERTRACK   = (MAKE_DMHRESULTERROR_R + $0220);
  1560.   {$EXTERNALSYM DMUS_E_INVALID_SEGMENTTRIGGERTRACK}
  1561. (* DMUS_E_INVALID_LYRICSTRACK
  1562.  *
  1563.  * The file contains an invalid lyrics track.
  1564.  *)
  1565.   DMUS_E_INVALID_LYRICSTRACK           = (MAKE_DMHRESULTERROR_R + $0221);
  1566.   {$EXTERNALSYM DMUS_E_INVALID_LYRICSTRACK}
  1567. (* DMUS_E_INVALID_PARAMCONTROLTRACK
  1568.  *
  1569.  * The file contains an invalid parameter control track.
  1570.  *)
  1571.   DMUS_E_INVALID_PARAMCONTROLTRACK     = (MAKE_DMHRESULTERROR_R + $0222);
  1572.   {$EXTERNALSYM DMUS_E_INVALID_PARAMCONTROLTRACK}
  1573. (* DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR
  1574.  *
  1575.  * A script written in AudioVBScript could not be read because it contained a statement that
  1576.  * is not allowed by the AudioVBScript language.
  1577.  *)
  1578.   DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR     = (MAKE_DMHRESULTERROR_R + $0223);
  1579.   {$EXTERNALSYM DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR}
  1580. (* DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR
  1581.  *
  1582.  * A script routine written in AudioVBScript failed because an invalid operation occurred.  For example,
  1583.  * adding the number 3 to a segment object would produce this error.  So would attempting to call a routine
  1584.  * that doesn't exist.
  1585.  *)
  1586.   DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR     = (MAKE_DMHRESULTERROR_R + $0224);
  1587.   {$EXTERNALSYM DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR}
  1588. (* DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE
  1589.  *
  1590.  * A script routine written in AudioVBScript failed because a function outside of a script failed to complete.
  1591.  * For example, a call to PlaySegment that fails to play because of low memory would return this error.
  1592.  *)
  1593.   DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE     = (MAKE_DMHRESULTERROR_R + $0225);
  1594.   {$EXTERNALSYM DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE}
  1595. (* DMUS_E_AUDIOPATHS_NOT_VALID
  1596.  *
  1597.  * The Performance has set up some PChannels using the AssignPChannel command, which
  1598.  * makes it not capable of supporting audio paths.
  1599.  *)
  1600.   DMUS_E_AUDIOPATHS_NOT_VALID     = (MAKE_DMHRESULTERROR_R + $0226);
  1601.   {$EXTERNALSYM DMUS_E_AUDIOPATHS_NOT_VALID}
  1602. (* DMUS_E_AUDIOPATHS_IN_USE
  1603.  *
  1604.  * This is the inverse of the previous error.
  1605.  * The Performance has set up some audio paths, which makes is incompatible
  1606.  * with the calls to allocate pchannels, etc.
  1607.  *)
  1608.   DMUS_E_AUDIOPATHS_IN_USE     = (MAKE_DMHRESULTERROR_R + $0227);
  1609.   {$EXTERNALSYM DMUS_E_AUDIOPATHS_IN_USE}
  1610. (* DMUS_E_NO_AUDIOPATH_CONFIG
  1611.  *
  1612.  * A segment was asked for its embedded audio path configuration,
  1613.  * but there isn't any.
  1614.  *)
  1615.   DMUS_E_NO_AUDIOPATH_CONFIG     = (MAKE_DMHRESULTERROR_R + $0228);
  1616.   {$EXTERNALSYM DMUS_E_NO_AUDIOPATH_CONFIG}
  1617. (* DMUS_E_AUDIOPATH_INACTIVE
  1618.  *
  1619.  * An audiopath is inactive, perhaps because closedown was called.
  1620.  *)
  1621.   DMUS_E_AUDIOPATH_INACTIVE     = (MAKE_DMHRESULTERROR_R + $0229);
  1622.   {$EXTERNALSYM DMUS_E_AUDIOPATH_INACTIVE}
  1623. (* DMUS_E_AUDIOPATH_NOBUFFER
  1624.  *
  1625.  * An audiopath failed to create because a requested buffer could not be created.
  1626.  *)
  1627.   DMUS_E_AUDIOPATH_NOBUFFER     = (MAKE_DMHRESULTERROR_R + $022A);
  1628.   {$EXTERNALSYM DMUS_E_AUDIOPATH_NOBUFFER}
  1629. (* DMUS_E_AUDIOPATH_NOPORT
  1630.  *
  1631.  * An audiopath could not be used for playback because it lacked port assignments.
  1632.  *)
  1633.   DMUS_E_AUDIOPATH_NOPORT     = (MAKE_DMHRESULTERROR_R + $022B);
  1634.   {$EXTERNALSYM DMUS_E_AUDIOPATH_NOPORT}
  1635. (* DMUS_E_NO_AUDIOPATH
  1636.  *
  1637.  * Attempt was made to play segment in audiopath mode and there was no audiopath.
  1638.  *)
  1639.   DMUS_E_NO_AUDIOPATH     = (MAKE_DMHRESULTERROR_R + $022C);
  1640.   {$EXTERNALSYM DMUS_E_NO_AUDIOPATH}
  1641. (* DMUS_E_INVALIDCHUNK
  1642.  *
  1643.  * Invalid data was found in a RIFF file chunk.
  1644.  *)
  1645.   DMUS_E_INVALIDCHUNK     = (MAKE_DMHRESULTERROR_R + $022D);
  1646.   {$EXTERNALSYM DMUS_E_INVALIDCHUNK}
  1647. (* DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER
  1648.  *
  1649.  * Attempt was made to create an audiopath that sends to a global effects buffer which did not exist.
  1650.  *)
  1651.   DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER     = (MAKE_DMHRESULTERROR_R + $022E);
  1652.   {$EXTERNALSYM DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER}
  1653. (* DMUS_E_INVALID_CONTAINER_OBJECT
  1654.  *
  1655.  * The file does not contain a valid container object.
  1656.  *)
  1657.   DMUS_E_INVALID_CONTAINER_OBJECT    = (MAKE_DMHRESULTERROR_R + $022F);
  1658.   {$EXTERNALSYM DMUS_E_INVALID_CONTAINER_OBJECT}
  1659. (************************************************************************
  1660. *                                                                       *
  1661. *   dmusicc.h -- This module defines the DirectMusic core API's         *
  1662. *                                                                       *
  1663. *   Copyright (c) Microsoft Corporation.  All rights reserved.          *
  1664. *                                                                       *
  1665. ************************************************************************)
  1666. type
  1667.   SAMPLE_TIME = Int64;
  1668.   {$EXTERNALSYM SAMPLE_TIME}
  1669.   TSampleTime = SAMPLE_TIME;
  1670.   PSampleTime = ^TSampleTime;
  1671.   SAMPLE_POSITION = Int64;
  1672.   {$EXTERNALSYM SAMPLE_POSITION}
  1673.   TSamplePosition = SAMPLE_POSITION;
  1674.   PSamplePosition = ^TSamplePosition;
  1675. const
  1676.   DMUS_MAX_DESCRIPTION  = 128;
  1677.   {$EXTERNALSYM DMUS_MAX_DESCRIPTION}
  1678.   DMUS_MAX_DRIVER       = 128;
  1679.   {$EXTERNALSYM DMUS_MAX_DRIVER}
  1680. type
  1681.   PDMusBufferDesc = ^TDMusBufferDesc;
  1682.   _DMUS_BUFFERDESC = packed record
  1683.     dwSize: DWORD;
  1684.     dwFlags: DWORD;
  1685.     guidBufferFormat: TGUID;
  1686.     cbBuffer: DWORD;
  1687.   end;
  1688.   {$EXTERNALSYM _DMUS_BUFFERDESC}
  1689.   DMUS_BUFFERDESC = _DMUS_BUFFERDESC;
  1690.   {$EXTERNALSYM DMUS_BUFFERDESC}
  1691.   TDMusBufferDesc = _DMUS_BUFFERDESC;
  1692. const  
  1693. (* DMUS_EFFECT_ flags are used in the dwEffectFlags fields of both DMUS_PORTCAPS
  1694.  * and DMUS_PORTPARAMS.
  1695.  *)
  1696.   DMUS_EFFECT_NONE             = $00000000;
  1697.   {$EXTERNALSYM DMUS_EFFECT_NONE}
  1698.   DMUS_EFFECT_REVERB           = $00000001;
  1699.   {$EXTERNALSYM DMUS_EFFECT_REVERB}
  1700.   DMUS_EFFECT_CHORUS           = $00000002;
  1701.   {$EXTERNALSYM DMUS_EFFECT_CHORUS}
  1702.   DMUS_EFFECT_DELAY            = $00000004;
  1703.   {$EXTERNALSYM DMUS_EFFECT_DELAY}
  1704. (* For DMUS_PORTCAPS dwClass
  1705.  *)
  1706.   DMUS_PC_INPUTCLASS       = (0);
  1707.   {$EXTERNALSYM DMUS_PC_INPUTCLASS}
  1708.   DMUS_PC_OUTPUTCLASS      = (1);
  1709.   {$EXTERNALSYM DMUS_PC_OUTPUTCLASS}
  1710. (* For DMUS_PORTCAPS dwFlags
  1711.  *)
  1712.   DMUS_PC_DLS              = ($00000001);   // Supports DLS downloading and DLS level 1.
  1713.   {$EXTERNALSYM DMUS_PC_DLS}
  1714.   DMUS_PC_EXTERNAL         = ($00000002);   // External MIDI module.
  1715.   {$EXTERNALSYM DMUS_PC_EXTERNAL}
  1716.   DMUS_PC_SOFTWARESYNTH    = ($00000004);   // Software synthesizer.
  1717.   {$EXTERNALSYM DMUS_PC_SOFTWARESYNTH}
  1718.   DMUS_PC_MEMORYSIZEFIXED  = ($00000008);   // Memory size is fixed.
  1719.   {$EXTERNALSYM DMUS_PC_MEMORYSIZEFIXED}
  1720.   DMUS_PC_GMINHARDWARE     = ($00000010);   // GM sound set is built in, no need to download.
  1721.   {$EXTERNALSYM DMUS_PC_GMINHARDWARE}
  1722.   DMUS_PC_GSINHARDWARE     = ($00000020);   // GS sound set is built in.
  1723.   {$EXTERNALSYM DMUS_PC_GSINHARDWARE}
  1724.   DMUS_PC_XGINHARDWARE     = ($00000040);   // XG sound set is built in.
  1725.   {$EXTERNALSYM DMUS_PC_XGINHARDWARE}
  1726.   DMUS_PC_DIRECTSOUND      = ($00000080);   // Connects to DirectSound via a DSound buffer.
  1727.   {$EXTERNALSYM DMUS_PC_DIRECTSOUND}
  1728.   DMUS_PC_SHAREABLE        = ($00000100);   // Synth can be actively shared by multiple apps at once.
  1729.   {$EXTERNALSYM DMUS_PC_SHAREABLE}
  1730.   DMUS_PC_DLS2             = ($00000200);   // Supports DLS2 instruments.
  1731.   {$EXTERNALSYM DMUS_PC_DLS2}
  1732.   DMUS_PC_AUDIOPATH        = ($00000400);   // Multiple outputs can be connected to DirectSound for audiopaths.
  1733.   {$EXTERNALSYM DMUS_PC_AUDIOPATH}
  1734.   DMUS_PC_WAVE             = ($00000800);   // Supports streaming and one shot waves.
  1735.   {$EXTERNALSYM DMUS_PC_WAVE}
  1736.   DMUS_PC_SYSTEMMEMORY     = ($7FFFFFFF);   // Sample memory is system memory.
  1737.   {$EXTERNALSYM DMUS_PC_SYSTEMMEMORY}
  1738. type
  1739.   PDMusPortCaps = ^TDMusPortCaps;
  1740.   _DMUS_PORTCAPS = packed record
  1741.     dwSize: DWORD;
  1742.     dwFlags: DWORD;
  1743.     guidPort: TGUID;
  1744.     dwClass: DWORD;
  1745.     dwType: DWORD;
  1746.     dwMemorySize: DWORD;
  1747.     dwMaxChannelGroups: DWORD;
  1748.     dwMaxVoices: DWORD;
  1749.     dwMaxAudioChannels: DWORD;
  1750.     dwEffectFlags: DWORD;
  1751.     wszDescription: array[0..DMUS_MAX_DESCRIPTION-1] of WideChar;
  1752.   end;
  1753.   {$EXTERNALSYM _DMUS_PORTCAPS}
  1754.   DMUS_PORTCAPS = _DMUS_PORTCAPS;
  1755.   {$EXTERNALSYM DMUS_PORTCAPS}
  1756.   TDMusPortCaps = _DMUS_PORTCAPS;
  1757. const
  1758. (* Values for DMUS_PORTCAPS dwType. This field indicates the underlying
  1759.  * driver type of the port.
  1760.  *)
  1761.   DMUS_PORT_WINMM_DRIVER      = (0);
  1762.   {$EXTERNALSYM DMUS_PORT_WINMM_DRIVER}
  1763.   DMUS_PORT_USER_MODE_SYNTH   = (1);
  1764.   {$EXTERNALSYM DMUS_PORT_USER_MODE_SYNTH}
  1765.   DMUS_PORT_KERNEL_MODE       = (2);
  1766.   {$EXTERNALSYM DMUS_PORT_KERNEL_MODE}
  1767. // These flags (set in dwValidParams) indicate which other members of the
  1768. // DMUS_PORTPARAMS are valid.
  1769. //
  1770.   DMUS_PORTPARAMS_VOICES           = $00000001;
  1771.   {$EXTERNALSYM DMUS_PORTPARAMS_VOICES}
  1772.   DMUS_PORTPARAMS_CHANNELGROUPS    = $00000002;
  1773.   {$EXTERNALSYM DMUS_PORTPARAMS_CHANNELGROUPS}
  1774.   DMUS_PORTPARAMS_AUDIOCHANNELS    = $00000004;
  1775.   {$EXTERNALSYM DMUS_PORTPARAMS_AUDIOCHANNELS}
  1776.   DMUS_PORTPARAMS_SAMPLERATE       = $00000008;
  1777.   {$EXTERNALSYM DMUS_PORTPARAMS_SAMPLERATE}
  1778.   DMUS_PORTPARAMS_EFFECTS          = $00000020;
  1779.   {$EXTERNALSYM DMUS_PORTPARAMS_EFFECTS}
  1780.   DMUS_PORTPARAMS_SHARE            = $00000040;
  1781.   {$EXTERNALSYM DMUS_PORTPARAMS_SHARE}
  1782.   DMUS_PORTPARAMS_FEATURES         = $00000080;     // DirectX 8.0 and above
  1783.   {$EXTERNALSYM DMUS_PORTPARAMS_FEATURES}
  1784. type
  1785.   PDMusPortParams7 = ^TDMusPortParams7;
  1786.   _DMUS_PORTPARAMS = packed record
  1787.     dwSize: DWORD;
  1788.     dwValidParams: DWORD;
  1789.     dwVoices: DWORD;
  1790.     dwChannelGroups: DWORD;
  1791.     dwAudioChannels: DWORD;
  1792.     dwSampleRate: DWORD;
  1793.     dwEffectFlags: DWORD;
  1794.     fShare: BOOL;
  1795.   end;
  1796.   {$EXTERNALSYM _DMUS_PORTPARAMS}
  1797.   DMUS_PORTPARAMS7 = _DMUS_PORTPARAMS;
  1798.   {$EXTERNALSYM DMUS_PORTPARAMS7}
  1799.   TDMusPortParams7 = _DMUS_PORTPARAMS;
  1800.   PDMusPortParams8 = ^TDMusPortParams8;
  1801.   _DMUS_PORTPARAMS8 = packed record
  1802.     dwSize: DWORD;
  1803.     dwValidParams: DWORD;
  1804.     dwVoices: DWORD;
  1805.     dwChannelGroups: DWORD;
  1806.     dwAudioChannels: DWORD;
  1807.     dwSampleRate: DWORD;
  1808.     dwEffectFlags: DWORD;
  1809.     fShare: BOOL;
  1810.     dwFeatures: DWORD;
  1811.   end;
  1812.   {$EXTERNALSYM _DMUS_PORTPARAMS8}
  1813.   DMUS_PORTPARAMS8 = _DMUS_PORTPARAMS8;
  1814.   {$EXTERNALSYM DMUS_PORTPARAMS8}
  1815.   TDMusPortParams8 = _DMUS_PORTPARAMS8;
  1816. const
  1817.   DMUS_PORT_FEATURE_AUDIOPATH     = $00000001; // Supports audiopath connection to DSound buffers.
  1818.   {$EXTERNALSYM DMUS_PORT_FEATURE_AUDIOPATH}
  1819.   DMUS_PORT_FEATURE_STREAMING     = $00000002; // Supports streaming waves through the synth.
  1820.   {$EXTERNALSYM DMUS_PORT_FEATURE_STREAMING}
  1821. type
  1822.   DMUS_PORTPARAMS = DMUS_PORTPARAMS8;
  1823.   {$EXTERNALSYM DMUS_PORTPARAMS}
  1824.   TDMusPortParams = DMUS_PORTPARAMS;
  1825.   PDMusPortParams = PDMusPortParams8;
  1826.   PDMusSynthStats = ^TDMusSynthStats;
  1827.   _DMUS_SYNTHSTATS = packed record
  1828.     dwSize: DWORD;             (* Size in bytes of the structure *)
  1829.     dwValidStats: DWORD;       (* Flags indicating which fields below are valid. *)
  1830.     dwVoices: DWORD;           (* Average number of voices playing. *)
  1831.     dwTotalCPU: DWORD;         (* Total CPU usage as percent * 100. *)
  1832.     dwCPUPerVoice: DWORD;      (* CPU per voice as percent * 100. *)
  1833.     dwLostNotes: DWORD;        (* Number of notes lost in 1 second. *)
  1834.     dwFreeMemory: DWORD;       (* Free memory in bytes *)
  1835.     lPeakVolume: Longint;      (* Decibel level * 100. *)
  1836.   end;
  1837.   {$EXTERNALSYM _DMUS_SYNTHSTATS}
  1838.   DMUS_SYNTHSTATS = _DMUS_SYNTHSTATS;
  1839.   {$EXTERNALSYM DMUS_SYNTHSTATS}
  1840.   TDMusSynthStats = _DMUS_SYNTHSTATS;
  1841.   PDMusSynthStats8 = ^TDMusSynthStats8;
  1842.   _DMUS_SYNTHSTATS8 = packed record
  1843.     dwSize: DWORD;             (* Size in bytes of the structure *)
  1844.     dwValidStats: DWORD;       (* Flags indicating which fields below are valid. *)
  1845.     dwVoices: DWORD;           (* Average number of voices playing. *)
  1846.     dwTotalCPU: DWORD;         (* Total CPU usage as percent * 100. *)
  1847.     dwCPUPerVoice: DWORD;      (* CPU per voice as percent * 100. *)
  1848.     dwLostNotes: DWORD;        (* Number of notes lost in 1 second. *)
  1849.     dwFreeMemory: DWORD;       (* Free memory in bytes *)
  1850.     lPeakVolume: Longint;      (* Decibel level * 100. *)
  1851.     dwSynthMemUse: DWORD;      (* Memory used by synth wave data *)
  1852.   end;
  1853.   {$EXTERNALSYM _DMUS_SYNTHSTATS8}
  1854.   DMUS_SYNTHSTATS8 = _DMUS_SYNTHSTATS8;
  1855.   {$EXTERNALSYM DMUS_SYNTHSTATS8}
  1856.   TDMusSynthStats8 = _DMUS_SYNTHSTATS8;
  1857. const
  1858.   DMUS_SYNTHSTATS_VOICES          = (1 shl 0);
  1859.   {$EXTERNALSYM DMUS_SYNTHSTATS_VOICES}
  1860.   DMUS_SYNTHSTATS_TOTAL_CPU       = (1 shl 1);
  1861.   {$EXTERNALSYM DMUS_SYNTHSTATS_TOTAL_CPU}
  1862.   DMUS_SYNTHSTATS_CPU_PER_VOICE   = (1 shl 2);
  1863.   {$EXTERNALSYM DMUS_SYNTHSTATS_CPU_PER_VOICE}
  1864.   DMUS_SYNTHSTATS_LOST_NOTES      = (1 shl 3);
  1865.   {$EXTERNALSYM DMUS_SYNTHSTATS_LOST_NOTES}
  1866.   DMUS_SYNTHSTATS_PEAK_VOLUME     = (1 shl 4);
  1867.   {$EXTERNALSYM DMUS_SYNTHSTATS_PEAK_VOLUME}
  1868.   DMUS_SYNTHSTATS_FREE_MEMORY     = (1 shl 5);
  1869.   {$EXTERNALSYM DMUS_SYNTHSTATS_FREE_MEMORY}
  1870.   DMUS_SYNTHSTATS_SYSTEMMEMORY    = DMUS_PC_SYSTEMMEMORY;
  1871.   {$EXTERNALSYM DMUS_SYNTHSTATS_SYSTEMMEMORY}
  1872. type
  1873.   PDMusWavesReverbParams = ^TDMusWavesReverbParams;
  1874.   _DMUS_WAVES_REVERB_PARAMS = packed record
  1875.     fInGain: Single;     (* Input gain in dB (to avoid output overflows) *)
  1876.     fReverbMix: Single;  (* Reverb mix in dB. 0dB means 100% wet reverb (no direct signal)
  1877.                             Negative values gives less wet signal.
  1878.                             The coeficients are calculated so that the overall output level stays
  1879.                             (approximately) constant regardless of the ammount of reverb mix. *)
  1880.     fReverbTime: Single;    (* The reverb decay time, in milliseconds. *)
  1881.     fHighFreqRTRatio: Single; (* The ratio of the high frequencies to the global reverb time.
  1882.                             Unless very 'splashy-bright' reverbs are wanted, this should be set to
  1883.                             a value < 1.0.
  1884.                             For example if dRevTime==1000ms and dHighFreqRTRatio=0.1 than the
  1885.                             decay time for high frequencies will be 100ms.*)
  1886.   end;
  1887.   {$EXTERNALSYM _DMUS_WAVES_REVERB_PARAMS}
  1888.   DMUS_WAVES_REVERB_PARAMS = _DMUS_WAVES_REVERB_PARAMS;
  1889.   {$EXTERNALSYM DMUS_WAVES_REVERB_PARAMS}
  1890.   TDMusWavesReverbParams = _DMUS_WAVES_REVERB_PARAMS;
  1891. (*  Note: Default values for Reverb are:
  1892.     fInGain             = 0.0dB   (no change in level)
  1893.     fReverbMix          = -10.0dB   (a reasonable reverb mix)
  1894.     fReverbTime         = 1000.0ms (one second global reverb time)
  1895.     fHighFreqRTRatio    = 0.001    (the ratio of the high frequencies to the global reverb time)
  1896. *)
  1897.   DMUS_CLOCKTYPE = (
  1898.     DMUS_CLOCK_SYSTEM {= 0},
  1899.     DMUS_CLOCK_WAVE {= 1}
  1900.   );
  1901.   {$EXTERNALSYM DMUS_CLOCKTYPE}
  1902.   TDMusClockType = DMUS_CLOCKTYPE;
  1903. const
  1904.   DMUS_CLOCKF_GLOBAL              = $00000001;
  1905.   {$EXTERNALSYM DMUS_CLOCKF_GLOBAL}
  1906. type
  1907.   PDMusClockInfo7 = ^TDMusClockInfo7;
  1908.   _DMUS_CLOCKINFO7 = packed record
  1909.     dwSize: DWORD;
  1910.     ctType: TDMusClockType;
  1911.     guidClock: TGUID;          // Identifies this time source
  1912.     wszDescription: array[0..DMUS_MAX_DESCRIPTION-1] of WideChar;
  1913.   end;
  1914.   {$EXTERNALSYM _DMUS_CLOCKINFO7}
  1915.   DMUS_CLOCKINFO7 = _DMUS_CLOCKINFO7;
  1916.   {$EXTERNALSYM DMUS_CLOCKINFO7}
  1917.   TDMusClockInfo7 = _DMUS_CLOCKINFO7;
  1918.   PDMusClockInfo8 = ^TDMusClockInfo8;
  1919.   _DMUS_CLOCKINFO8 = packed record
  1920.     dwSize: DWORD;
  1921.     ctType: TDMusClockType;
  1922.     guidClock: TGUID;          // Identifies this time source
  1923.     wszDescription: array[0..DMUS_MAX_DESCRIPTION-1] of WideChar;
  1924.     dwFlags: DWORD;
  1925.   end;
  1926.   {$EXTERNALSYM _DMUS_CLOCKINFO8}
  1927.   DMUS_CLOCKINFO8 = _DMUS_CLOCKINFO8;
  1928.   {$EXTERNALSYM DMUS_CLOCKINFO8}
  1929.   TDMusClockInfo8 = _DMUS_CLOCKINFO8;
  1930.   DMUS_CLOCKINFO = DMUS_CLOCKINFO8;
  1931.   {$EXTERNALSYM DMUS_CLOCKINFO}
  1932.   TDMusClockInfo = DMUS_CLOCKINFO;
  1933.   PDMusClockInfo = PDMusClockInfo8;
  1934. const
  1935. (* Default bus identifiers
  1936.  *
  1937.  * The first 17 are direct mappings to the destinations defined in both
  1938.  * the MMA DLS Level 2 specification and the Microsoft Multi-Channel audio
  1939.  * specification.
  1940.  *)
  1941.   DSBUSID_FIRST_SPKR_LOC              = 0;
  1942.   {$EXTERNALSYM DSBUSID_FIRST_SPKR_LOC}
  1943.   DSBUSID_FRONT_LEFT                  = 0;
  1944.   {$EXTERNALSYM DSBUSID_FRONT_LEFT}
  1945.   DSBUSID_LEFT                        = 0;   // Front left is also just left
  1946.   {$EXTERNALSYM DSBUSID_LEFT}
  1947.   DSBUSID_FRONT_RIGHT                 = 1;
  1948.   {$EXTERNALSYM DSBUSID_FRONT_RIGHT}
  1949.   DSBUSID_RIGHT                       = 1;   // Ditto front right
  1950.   {$EXTERNALSYM DSBUSID_RIGHT}
  1951.   DSBUSID_FRONT_CENTER                = 2;
  1952.   {$EXTERNALSYM DSBUSID_FRONT_CENTER}
  1953.   DSBUSID_LOW_FREQUENCY               = 3;
  1954.   {$EXTERNALSYM DSBUSID_LOW_FREQUENCY}
  1955.   DSBUSID_BACK_LEFT                   = 4;
  1956.   {$EXTERNALSYM DSBUSID_BACK_LEFT}
  1957.   DSBUSID_BACK_RIGHT                  = 5;
  1958.   {$EXTERNALSYM DSBUSID_BACK_RIGHT}
  1959.   DSBUSID_FRONT_LEFT_OF_CENTER        = 6;
  1960.   {$EXTERNALSYM DSBUSID_FRONT_LEFT_OF_CENTER}
  1961.   DSBUSID_FRONT_RIGHT_OF_CENTER       = 7;
  1962.   {$EXTERNALSYM DSBUSID_FRONT_RIGHT_OF_CENTER}
  1963.   DSBUSID_BACK_CENTER                 = 8;
  1964.   {$EXTERNALSYM DSBUSID_BACK_CENTER}
  1965.   DSBUSID_SIDE_LEFT                   = 9;
  1966.   {$EXTERNALSYM DSBUSID_SIDE_LEFT}
  1967.   DSBUSID_SIDE_RIGHT                 = 10;
  1968.   {$EXTERNALSYM DSBUSID_SIDE_RIGHT}
  1969.   DSBUSID_TOP_CENTER                 = 11;
  1970.   {$EXTERNALSYM DSBUSID_TOP_CENTER}
  1971.   DSBUSID_TOP_FRONT_LEFT             = 12;
  1972.   {$EXTERNALSYM DSBUSID_TOP_FRONT_LEFT}
  1973.   DSBUSID_TOP_FRONT_CENTER           = 13;
  1974.   {$EXTERNALSYM DSBUSID_TOP_FRONT_CENTER}
  1975.   DSBUSID_TOP_FRONT_RIGHT            = 14;
  1976.   {$EXTERNALSYM DSBUSID_TOP_FRONT_RIGHT}
  1977.   DSBUSID_TOP_BACK_LEFT              = 15;
  1978.   {$EXTERNALSYM DSBUSID_TOP_BACK_LEFT}
  1979.   DSBUSID_TOP_BACK_CENTER            = 16;
  1980.   {$EXTERNALSYM DSBUSID_TOP_BACK_CENTER}
  1981.   DSBUSID_TOP_BACK_RIGHT             = 17;
  1982.   {$EXTERNALSYM DSBUSID_TOP_BACK_RIGHT}
  1983.   DSBUSID_LAST_SPKR_LOC              = 17;
  1984.   {$EXTERNALSYM DSBUSID_LAST_SPKR_LOC}
  1985. // #define DSBUSID_IS_SPKR_LOC(id) ( ((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC) )
  1986. function DSBUSID_IS_SPKR_LOC(id: Integer): Boolean;
  1987. {$EXTERNALSYM DSBUSID_IS_SPKR_LOC}
  1988. const
  1989. (* These bus identifiers are for the standard DLS effect sends
  1990.  *)
  1991.   DSBUSID_REVERB_SEND                = 64;
  1992.   {$EXTERNALSYM DSBUSID_REVERB_SEND}
  1993.   DSBUSID_CHORUS_SEND                = 65;
  1994.   {$EXTERNALSYM DSBUSID_CHORUS_SEND}
  1995. (* Dynamic bus identifiers start here. See the documentation for how
  1996.  * synthesizers map the output of voices to static and dynamic
  1997.  * bus identifiers.
  1998.  *)
  1999.   DSBUSID_DYNAMIC_0                  = 512;
  2000.   {$EXTERNALSYM DSBUSID_DYNAMIC_0}
  2001. (* Null bus, used to identify busses that have no function mapping.
  2002. *)
  2003.   DSBUSID_NULL                       = $FFFFFFFF;
  2004.   {$EXTERNALSYM DSBUSID_NULL}
  2005. (* Standard values for voice priorities. Numerically higher priorities are higher in priority.
  2006.  * These priorities are used to set the voice priority for all voices on a channel. They are
  2007.  * used in the dwPriority parameter of IDirectMusicPort::GetPriority and returned in the
  2008.  * lpwPriority parameter of pdwPriority.
  2009.  *
  2010.  * These priorities are shared with DirectSound.
  2011.  *)
  2012. const
  2013.   DAUD_CRITICAL_VOICE_PRIORITY    = ($F0000000);
  2014.   {$EXTERNALSYM DAUD_CRITICAL_VOICE_PRIORITY}
  2015.   DAUD_HIGH_VOICE_PRIORITY        = ($C0000000);
  2016.   {$EXTERNALSYM DAUD_HIGH_VOICE_PRIORITY}
  2017.   DAUD_STANDARD_VOICE_PRIORITY    = ($80000000);
  2018.   {$EXTERNALSYM DAUD_STANDARD_VOICE_PRIORITY}
  2019.   DAUD_LOW_VOICE_PRIORITY         = ($40000000);
  2020.   {$EXTERNALSYM DAUD_LOW_VOICE_PRIORITY}
  2021.   DAUD_PERSIST_VOICE_PRIORITY     = ($10000000);
  2022.   {$EXTERNALSYM DAUD_PERSIST_VOICE_PRIORITY}
  2023. (* These are the default priorities assigned if not overridden. By default priorities are
  2024.  * equal across channel groups (e.g. channel 5 on channel group 1 has the same priority as
  2025.  * channel 5 on channel group 2).
  2026.  *
  2027.  * In accordance with DLS level 1, channel 10 has the highest priority, followed by 1 through 16
  2028.  * except for 10.
  2029.  *)
  2030.   DAUD_CHAN1_VOICE_PRIORITY_OFFSET    = ($0000000E);
  2031.   {$EXTERNALSYM DAUD_CHAN1_VOICE_PRIORITY_OFFSET}
  2032.   DAUD_CHAN2_VOICE_PRIORITY_OFFSET    = ($0000000D);
  2033.   {$EXTERNALSYM DAUD_CHAN2_VOICE_PRIORITY_OFFSET}
  2034.   DAUD_CHAN3_VOICE_PRIORITY_OFFSET    = ($0000000C);
  2035.   {$EXTERNALSYM DAUD_CHAN3_VOICE_PRIORITY_OFFSET}
  2036.   DAUD_CHAN4_VOICE_PRIORITY_OFFSET    = ($0000000B);
  2037.   {$EXTERNALSYM DAUD_CHAN4_VOICE_PRIORITY_OFFSET}
  2038.   DAUD_CHAN5_VOICE_PRIORITY_OFFSET    = ($0000000A);
  2039.   {$EXTERNALSYM DAUD_CHAN5_VOICE_PRIORITY_OFFSET}
  2040.   DAUD_CHAN6_VOICE_PRIORITY_OFFSET    = ($00000009);
  2041.   {$EXTERNALSYM DAUD_CHAN6_VOICE_PRIORITY_OFFSET}
  2042.   DAUD_CHAN7_VOICE_PRIORITY_OFFSET    = ($00000008);
  2043.   {$EXTERNALSYM DAUD_CHAN7_VOICE_PRIORITY_OFFSET}
  2044.   DAUD_CHAN8_VOICE_PRIORITY_OFFSET    = ($00000007);
  2045.   {$EXTERNALSYM DAUD_CHAN8_VOICE_PRIORITY_OFFSET}
  2046.   DAUD_CHAN9_VOICE_PRIORITY_OFFSET    = ($00000006);
  2047.   {$EXTERNALSYM DAUD_CHAN9_VOICE_PRIORITY_OFFSET}
  2048.   DAUD_CHAN10_VOICE_PRIORITY_OFFSET   = ($0000000F);
  2049.   {$EXTERNALSYM DAUD_CHAN10_VOICE_PRIORITY_OFFSET}
  2050.   DAUD_CHAN11_VOICE_PRIORITY_OFFSET   = ($00000005);
  2051.   {$EXTERNALSYM DAUD_CHAN11_VOICE_PRIORITY_OFFSET}
  2052.   DAUD_CHAN12_VOICE_PRIORITY_OFFSET   = ($00000004);
  2053.   {$EXTERNALSYM DAUD_CHAN12_VOICE_PRIORITY_OFFSET}
  2054.   DAUD_CHAN13_VOICE_PRIORITY_OFFSET   = ($00000003);
  2055.   {$EXTERNALSYM DAUD_CHAN13_VOICE_PRIORITY_OFFSET}
  2056.   DAUD_CHAN14_VOICE_PRIORITY_OFFSET   = ($00000002);
  2057.   {$EXTERNALSYM DAUD_CHAN14_VOICE_PRIORITY_OFFSET}
  2058.   DAUD_CHAN15_VOICE_PRIORITY_OFFSET   = ($00000001);
  2059.   {$EXTERNALSYM DAUD_CHAN15_VOICE_PRIORITY_OFFSET}
  2060.   DAUD_CHAN16_VOICE_PRIORITY_OFFSET   = ($00000000);
  2061.   {$EXTERNALSYM DAUD_CHAN16_VOICE_PRIORITY_OFFSET}
  2062.   DAUD_CHAN1_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN1_VOICE_PRIORITY_OFFSET);
  2063.   {$EXTERNALSYM DAUD_CHAN1_DEF_VOICE_PRIORITY}
  2064.   DAUD_CHAN2_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN2_VOICE_PRIORITY_OFFSET);
  2065.   {$EXTERNALSYM DAUD_CHAN2_DEF_VOICE_PRIORITY}
  2066.   DAUD_CHAN3_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN3_VOICE_PRIORITY_OFFSET);
  2067.   {$EXTERNALSYM DAUD_CHAN3_DEF_VOICE_PRIORITY}
  2068.   DAUD_CHAN4_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN4_VOICE_PRIORITY_OFFSET);
  2069.   {$EXTERNALSYM DAUD_CHAN4_DEF_VOICE_PRIORITY}
  2070.   DAUD_CHAN5_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN5_VOICE_PRIORITY_OFFSET);
  2071.   {$EXTERNALSYM DAUD_CHAN5_DEF_VOICE_PRIORITY}
  2072.   DAUD_CHAN6_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN6_VOICE_PRIORITY_OFFSET);
  2073.   {$EXTERNALSYM DAUD_CHAN6_DEF_VOICE_PRIORITY}
  2074.   DAUD_CHAN7_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN7_VOICE_PRIORITY_OFFSET);
  2075.   {$EXTERNALSYM DAUD_CHAN7_DEF_VOICE_PRIORITY}
  2076.   DAUD_CHAN8_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN8_VOICE_PRIORITY_OFFSET);
  2077.   {$EXTERNALSYM DAUD_CHAN8_DEF_VOICE_PRIORITY}
  2078.   DAUD_CHAN9_DEF_VOICE_PRIORITY   = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN9_VOICE_PRIORITY_OFFSET);
  2079.   {$EXTERNALSYM DAUD_CHAN9_DEF_VOICE_PRIORITY}
  2080.   DAUD_CHAN10_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN10_VOICE_PRIORITY_OFFSET);
  2081.   {$EXTERNALSYM DAUD_CHAN10_DEF_VOICE_PRIORITY}
  2082.   DAUD_CHAN11_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN11_VOICE_PRIORITY_OFFSET);
  2083.   {$EXTERNALSYM DAUD_CHAN11_DEF_VOICE_PRIORITY}
  2084.   DAUD_CHAN12_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN12_VOICE_PRIORITY_OFFSET);
  2085.   {$EXTERNALSYM DAUD_CHAN12_DEF_VOICE_PRIORITY}
  2086.   DAUD_CHAN13_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN13_VOICE_PRIORITY_OFFSET);
  2087.   {$EXTERNALSYM DAUD_CHAN13_DEF_VOICE_PRIORITY}
  2088.   DAUD_CHAN14_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN14_VOICE_PRIORITY_OFFSET);
  2089.   {$EXTERNALSYM DAUD_CHAN14_DEF_VOICE_PRIORITY}
  2090.   DAUD_CHAN15_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN15_VOICE_PRIORITY_OFFSET);
  2091.   {$EXTERNALSYM DAUD_CHAN15_DEF_VOICE_PRIORITY}
  2092.   DAUD_CHAN16_DEF_VOICE_PRIORITY  = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN16_VOICE_PRIORITY_OFFSET);
  2093.   {$EXTERNALSYM DAUD_CHAN16_DEF_VOICE_PRIORITY}
  2094. type
  2095.   IDirectMusicBuffer = interface;
  2096.   IDirectMusicPort = interface;
  2097.   PIReferenceClock = ^IReferenceClock;
  2098.   PIDirectSound = ^IDirectSound;
  2099.   PIDirectMusic = ^IDirectMusic;
  2100.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusic);'}
  2101.   {$EXTERNALSYM IDirectMusic}
  2102.   IDirectMusic = interface(IUnknown)
  2103.     ['{6536115a-7b2d-11d2-ba18-0000f875ac12}']
  2104.     (*  IDirectMusic *)
  2105.     function EnumPort(dwIndex: DWORD; var pPortCaps: TDMusPortCaps): HResult; stdcall;
  2106.     function CreateMusicBuffer(var pBufferDesc: TDMusBufferDesc;
  2107.       out ppBuffer: IDirectMusicBuffer; pUnkOuter: IUnknown): HResult; stdcall;
  2108.     function CreatePort(const rclsidPort: TGUID; const pPortParams: TDMusPortParams;
  2109.       out ppPort: IDirectMusicPort; pUnkOuter: IUnknown): HResult; stdcall;
  2110.     function EnumMasterClock(dwIndex: DWORD; var lpClockInfo: TDMusClockInfo): HResult; stdcall;
  2111.     function GetMasterClock(pguidClock: PGUID; ppReferenceClock: PIReferenceClock): HResult; stdcall;
  2112.     function SetMasterClock(const rguidClock: TGUID): HResult; stdcall;
  2113.     function Activate(fEnable: BOOL): HResult; stdcall;
  2114.     function GetDefaultPort(out pguidPort: TGUID): HResult; stdcall;
  2115.     function SetDirectSound(pDirectSound: IDirectSound; hWnd: HWND): HResult; stdcall;
  2116.   end;
  2117.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusic8);'}
  2118.   {$EXTERNALSYM IDirectMusic8}
  2119.   IDirectMusic8 = interface(IDirectMusic)
  2120.     ['{2d3629f7-813d-4939-8508-f05c6b75fd97}']
  2121.     (*  IDirectMusic8 *)
  2122.     function SetExternalMasterClock(pClock: IReferenceClock): HResult; stdcall;
  2123.   end;
  2124.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicBuffer);'}
  2125.   {$EXTERNALSYM IDirectMusicBuffer}
  2126.   IDirectMusicBuffer = interface(IUnknown)
  2127.     ['{d2ac2878-b39b-11d1-8704-00600893b1bd}']
  2128.     (*  IDirectMusicBuffer *)
  2129.     function Flush: HResult; stdcall;
  2130.     function TotalTime(out prtTime: TReferenceTime): HResult; stdcall;
  2131.     function PackStructured(const rt: TReferenceTime; dwChannelGroup: DWORD;
  2132.         dwChannelMessage: DWORD): HResult; stdcall;
  2133.     function PackUnstructured(const rt: TReferenceTime; dwChannelGroup: DWORD;
  2134.         cb: DWORD; const lpb): HResult; stdcall;
  2135.     function ResetReadPtr : HResult; stdcall;
  2136.     function GetNextEvent(out prt: TReferenceTime; out pdwChannelGroup: DWORD;
  2137.         out pdwLength: DWORD; out ppData: Pointer): HResult; stdcall;
  2138.     function GetRawBufferPtr(out ppData: Pointer): HResult; stdcall;
  2139.     function GetStartTime(out prt: TReferenceTime): HResult; stdcall;
  2140.     function GetUsedBytes(out pcb: DWORD): HResult; stdcall;
  2141.     function GetMaxBytes(out pcb: DWORD): HResult; stdcall;
  2142.     function GetBufferFormat(out pGuidFormat: TGUID): HResult; stdcall;
  2143.     function SetStartTime(const rt: TReferenceTime): HResult; stdcall;
  2144.     function SetUsedBytes(cb: DWORD): HResult; stdcall;
  2145.   end;
  2146.   IDirectMusicBuffer8 = IDirectMusicBuffer;
  2147.   {$NODEFINE IDirectMusicBuffer8}
  2148.   {$HPPEMIT 'typedef _di_IDirectMusicBuffer _di_IDirectMusicBuffer8;'}
  2149.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicInstrument);'}
  2150.   {$EXTERNALSYM IDirectMusicInstrument}
  2151.   IDirectMusicInstrument = interface(IUnknown)
  2152.     ['{d2ac287d-b39b-11d1-8704-00600893b1bd}']
  2153.     (* IDirectMusicInstrument *)
  2154.     function GetPatch(out pdwPatch: DWORD): HResult; stdcall;
  2155.     function SetPatch(dwPatch: DWORD): HResult; stdcall;
  2156.   end;
  2157.   IDirectMusicInstrument8 = IDirectMusicInstrument;
  2158.   {$NODEFINE IDirectMusicInstrument8}
  2159.   {$HPPEMIT 'typedef _di_IDirectMusicInstrument _di_IDirectMusicInstrument8;'}
  2160.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicDownloadedInstrument);'}
  2161.   {$EXTERNALSYM IDirectMusicDownloadedInstrument}
  2162.   IDirectMusicDownloadedInstrument = interface(IUnknown)
  2163.     ['{d2ac287e-b39b-11d1-8704-00600893b1bd}']
  2164.     (* IDirectMusicDownloadedInstrument *)
  2165.     (* None at this time *)
  2166.   end;
  2167.   IDirectMusicDownloadedInstrument8 = IDirectMusicDownloadedInstrument;
  2168.   {$NODEFINE IDirectMusicDownloadedInstrument8}
  2169.   {$HPPEMIT 'typedef _di_IDirectMusicDownloadedInstrument _di_IDirectMusicDownloadedInstrument8;'}
  2170.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicCollection);'}
  2171.   {$EXTERNALSYM IDirectMusicCollection}
  2172.   IDirectMusicCollection = interface(IUnknown)
  2173.     ['{d2ac287c-b39b-11d1-8704-00600893b1bd}']
  2174.     (* IDirectMusicCollection *)
  2175.     function GetInstrument(dwPatch: DWORD; out ppInstrument: IDirectMusicInstrument): HResult; stdcall;
  2176.     function EnumInstrument(dwIndex: DWORD; out pdwPatch: DWORD;
  2177.       pwszName: PWideChar; dwNameLen: DWORD): HResult; stdcall;
  2178.   end;
  2179.   IDirectMusicCollection8 = IDirectMusicCollection;
  2180.   {$NODEFINE IDirectMusicCollection8}
  2181.   {$HPPEMIT 'typedef _di_IDirectMusicCollection _di_IDirectMusicCollection8;'}
  2182.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicDownload);'}
  2183.   {$EXTERNALSYM IDirectMusicDownload}
  2184.   IDirectMusicDownload = interface(IUnknown)
  2185.     ['{d2ac287b-b39b-11d1-8704-00600893b1bd}']
  2186.     (* IDirectMusicDownload *)
  2187.     function GetBuffer(out ppvBuffer: Pointer; out pdwSize: DWORD): HResult; stdcall;
  2188.   end;
  2189.   IDirectMusicDownload8 = IDirectMusicDownload;
  2190.   {$NODEFINE IDirectMusicDownload8}
  2191.   {$HPPEMIT 'typedef _di_IDirectMusicDownload _di_IDirectMusicDownload8;'}
  2192.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicPortDownload);'}
  2193.   {$EXTERNALSYM IDirectMusicPortDownload}
  2194.   IDirectMusicPortDownload = interface(IUnknown)
  2195.     ['{d2ac287a-b39b-11d1-8704-00600893b1bd}']
  2196.     (* IDirectMusicPortDownload *)
  2197.     function GetBuffer(dwDLId: DWORD; out ppIDMDownload: IDirectMusicDownload): HResult; stdcall;
  2198.     function AllocateBuffer(dwSize: DWORD; out ppIDMDownload: IDirectMusicDownload): HResult; stdcall;
  2199.     function GetDLId(out pdwStartDLId: DWORD; dwCount: DWORD): HResult; stdcall;
  2200.     function GetAppend(out pdwAppend: DWORD): HResult; stdcall;
  2201.     function Download(pIDMDownload: IDirectMusicDownload): HResult; stdcall;
  2202.     function Unload(pIDMDownload: IDirectMusicDownload): HResult; stdcall;
  2203.   end;
  2204.   IDirectMusicPortDownload8 = IDirectMusicPortDownload;
  2205.   {$NODEFINE IDirectMusicPortDownload8}
  2206.   {$HPPEMIT 'typedef _di_IDirectMusicPortDownload _di_IDirectMusicPortDownload8;'}
  2207.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicPort);'}
  2208.   {$EXTERNALSYM IDirectMusicPort}
  2209.   IDirectMusicPort = interface(IUnknown)
  2210.     ['{08f2d8c9-37c2-11d2-b9f9-0000f875ac12}']
  2211.     (*  IDirectMusicPort *)
  2212.     function PlayBuffer(pBuffer: IDirectMusicBuffer): HResult; stdcall;
  2213.     function SetReadNotificationHandle(hEvent: THANDLE): HResult; stdcall;
  2214.     function Read(pBuffer: IDirectMusicBuffer): HResult; stdcall;
  2215.     function DownloadInstrument(pInstrument: IDirectMusicInstrument;
  2216.       out ppDownloadedInstrument: IDirectMusicDownloadedInstrument;
  2217.       pNoteRanges: PDMusNoteRange; dwNumNoteRanges: DWORD): HResult; stdcall;
  2218.     function UnloadInstrument(pDownloadedInstrument: IDirectMusicDownloadedInstrument): HResult; stdcall;
  2219.     function GetLatencyClock(out ppClock: IReferenceClock): HResult; stdcall;
  2220.     function GetRunningStats(var pStats: TDMusSynthStats): HResult; stdcall;
  2221.     function Compact: HResult; stdcall;
  2222.     function GetCaps(var pPortCaps: TDMusPortCaps): HResult; stdcall;
  2223.     function DeviceIoControl(dwIoControlCode: DWORD; const lpInBuffer; nInBufferSize: DWORD;
  2224.       out lpOutBuffer; nOutBufferSize: DWORD; out lpBytesReturned: DWORD;
  2225.       var lpOverlapped: TOVERLAPPED): HResult; stdcall;
  2226.     function SetNumChannelGroups(dwChannelGroups: DWORD): HResult; stdcall;
  2227.     function GetNumChannelGroups(out pdwChannelGroups: DWORD): HResult; stdcall;
  2228.     function Activate(fActive: BOOL): HResult; stdcall;
  2229.     function SetChannelPriority(dwChannelGroup, dwChannel, dwPriority: DWORD): HResult; stdcall;
  2230.     function GetChannelPriority(dwChannelGroup, dwChannel: DWORD; out pdwPriority: DWORD): HResult; stdcall;
  2231.     function SetDirectSound(pDirectSound: IDirectSound; pDirectSoundBuffer: IDirectSoundBuffer): HResult; stdcall;
  2232.     function GetFormat(pWaveFormatEx: PWaveFormatEx; var pdwWaveFormatExSize: DWORD;
  2233.       out pdwBufferSize: DWORD): HResult; stdcall;
  2234.   end;
  2235.   IDirectMusicPort8 = IDirectMusicPort;
  2236.   {$NODEFINE IDirectMusicPort8}
  2237.   {$HPPEMIT 'typedef _di_IDirectMusicPort _di_IDirectMusicPort8;'}
  2238.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicThru);'}
  2239.   {$EXTERNALSYM IDirectMusicThru}
  2240.   IDirectMusicThru = interface(IUnknown)
  2241.     ['{ced153e7-3606-11d2-b9f9-0000f875ac12}']
  2242.     (* IDirectMusicThru *)
  2243.     function ThruChannel(dwSourceChannelGroup, dwSourceChannel, dwDestinationChannelGroup,
  2244.       dwDestinationChannel: DWORD; pDestinationPort: IDirectMusicPort): HResult; stdcall;
  2245.   end;
  2246.   IDirectMusicThru8 = IDirectMusicThru;
  2247.   {$NODEFINE IDirectMusicThru8}
  2248.   {$HPPEMIT 'typedef _di_IDirectMusicThru _di_IDirectMusicThru8;'}
  2249. //Translator: IReferenceClock is already defined in DirectSound.pas
  2250.   IReferenceClock = DirectSound.IReferenceClock;
  2251.   {$NODEFINE IReferenceClock}
  2252. (*
  2253.   IReferenceClock = interface(IUnknown)
  2254.     ['{56a86897-0ad4-11ce-b03a-0020af0ba770}'] *) {
  2255.     (*  IReferenceClock *)
  2256.     (*  get the time now *)
  2257.     function GetTime(out pTime: TReferenceTime): HResult; stdcall;
  2258.     (*  ask for an async notification that a time has elapsed *)
  2259.     function AdviseTime(const baseTime,                  (*  base time *)
  2260.                         streamTime: TReferenceTime;      (*  stream offset time *)
  2261.                         hEvent: THANDLE;                 (*  advise via this event *)
  2262.                         var pdwAdviseCookie: DWORD): HResult; stdcall;   (*  where your cookie goes *)
  2263.     (*  ask for an async periodic notification that a time has elapsed *)
  2264.     function AdvisePeriodic(const startTime,                  (*  starting at this time *)
  2265.                             periodTime: TReferenceTime;       (*  time between notifications *)
  2266.                             hSemaphore: THANDLE;              (*  advise via a semaphore *)
  2267.                             var pdwAdviseCookie: DWORD): HResult; stdcall;   (*  where your cookie goes *)
  2268.     (*  cancel a request for notification *)
  2269.     function Unadvise(dwAdviseCookie: DWORD): HResult; stdcall;
  2270.   end;
  2271. }
  2272.   IID_IReferenceClock = IReferenceClock;
  2273.   {$EXTERNALSYM IID_IReferenceClock}
  2274. const
  2275.   CLSID_DirectMusic: TGUID = '{636b9f10-0c7d-11d1-95b2-0020afdc7421}';
  2276.   {$EXTERNALSYM CLSID_DirectMusic}
  2277.   CLSID_DirectMusicCollection: TGUID = '{480ff4b0-28b2-11d1-bef7-00c04fbf8fef}';
  2278.   {$EXTERNALSYM CLSID_DirectMusicCollection}
  2279.   CLSID_DirectMusicSynth: TGUID = '{58C2B4D0-46E7-11D1-89AC-00A0C9054129}';
  2280.   {$EXTERNALSYM CLSID_DirectMusicSynth}
  2281.   // Alternate interface ID for IID_IDirectMusic, available in DX7 release and after.
  2282.   IID_IDirectMusic2: TGUID = '{6fc2cae1-bc78-11d2-afa6-00aa0024d8b6}';
  2283.   {$EXTERNALSYM IID_IDirectMusic2}
  2284. type
  2285.   IID_IDirectMusic = IDirectMusic;
  2286.   {$EXTERNALSYM IID_IDirectMusic}
  2287.   IID_IDirectMusicBuffer = IDirectMusicBuffer;
  2288.   {$EXTERNALSYM IID_IDirectMusicBuffer}
  2289.   IID_IDirectMusicPort = IDirectMusicPort;
  2290.   {$EXTERNALSYM IID_IDirectMusicPort}
  2291.   IID_IDirectMusicThru = IDirectMusicThru;
  2292.   {$EXTERNALSYM IID_IDirectMusicThru}
  2293.   IID_IDirectMusicPortDownload = IDirectMusicPortDownload;
  2294.   {$EXTERNALSYM IID_IDirectMusicPortDownload}
  2295.   IID_IDirectMusicDownload = IDirectMusicDownload;
  2296.   {$EXTERNALSYM IID_IDirectMusicDownload}
  2297.   IID_IDirectMusicCollection = IDirectMusicCollection;
  2298.   {$EXTERNALSYM IID_IDirectMusicCollection}
  2299.   IID_IDirectMusicInstrument = IDirectMusicInstrument;
  2300.   {$EXTERNALSYM IID_IDirectMusicInstrument}
  2301.   IID_IDirectMusicDownloadedInstrument = IDirectMusicDownloadedInstrument;
  2302.   {$EXTERNALSYM IID_IDirectMusicDownloadedInstrument}
  2303.   IID_IDirectMusic8 = IDirectMusic8;
  2304.   {$EXTERNALSYM IID_IDirectMusic8}
  2305.   IID_IDirectMusicThru8 = IID_IDirectMusicThru;
  2306.   {$EXTERNALSYM IID_IDirectMusicThru8}
  2307.   IID_IDirectMusicPortDownload8 = IID_IDirectMusicPortDownload;
  2308.   {$EXTERNALSYM IID_IDirectMusicPortDownload8}
  2309.   IID_IDirectMusicDownload8 = IID_IDirectMusicDownload;
  2310.   {$EXTERNALSYM IID_IDirectMusicDownload8}
  2311.   IID_IDirectMusicCollection8 = IID_IDirectMusicCollection;
  2312.   {$EXTERNALSYM IID_IDirectMusicCollection8}
  2313.   IID_IDirectMusicInstrument8 = IID_IDirectMusicInstrument;
  2314.   {$EXTERNALSYM IID_IDirectMusicInstrument8}
  2315.   IID_IDirectMusicDownloadedInstrument8 = IID_IDirectMusicDownloadedInstrument;
  2316.   {$EXTERNALSYM IID_IDirectMusicDownloadedInstrument8}
  2317.   IID_IDirectMusicPort8 = IID_IDirectMusicPort;
  2318.   {$EXTERNALSYM IID_IDirectMusicPort8}
  2319. const   
  2320. (* Property Query GUID_DMUS_PROP_GM_Hardware - Local GM set, no need to download
  2321.  * Property Query GUID_DMUS_PROP_GS_Hardware - Local GS set, no need to download
  2322.  * Property Query GUID_DMUS_PROP_XG_Hardware - Local XG set, no need to download
  2323.  * Property Query GUID_DMUS_PROP_DLS1        - Support DLS level 1
  2324.  * Property Query GUID_DMUS_PROP_INSTRUMENT2 - Support new INSTRUMENT2 download format
  2325.  * Property Query GUID_DMUS_PROP_XG_Capable  - Support minimum requirements of XG
  2326.  * Property Query GUID_DMUS_PROP_GS_Capable  - Support minimum requirements of GS
  2327.  * Property Query GUID_DMUS_PROP_SynthSink_DSOUND - Synthsink talks to DSound
  2328.  * Property Query GUID_DMUS_PROP_SynthSink_WAVE - Synthsink talks to Wave device
  2329.  *
  2330.  * Item 0: Supported
  2331.  * Returns a DWORD which is non-zero if the feature is supported
  2332.  *)
  2333.   GUID_DMUS_PROP_GM_Hardware: TGUID = '{178f2f24-c364-11d1-a760-0000f875ac12}';
  2334.   {$EXTERNALSYM GUID_DMUS_PROP_GM_Hardware}
  2335.   GUID_DMUS_PROP_GS_Hardware: TGUID = '{178f2f25-c364-11d1-a760-0000f875ac12}';
  2336.   {$EXTERNALSYM GUID_DMUS_PROP_GS_Hardware}
  2337.   GUID_DMUS_PROP_XG_Hardware: TGUID = '{178f2f26-c364-11d1-a760-0000f875ac12}';
  2338.   {$EXTERNALSYM GUID_DMUS_PROP_XG_Hardware}
  2339.   GUID_DMUS_PROP_XG_Capable: TGUID = '{6496aba1-61b0-11d2-afa6-00aa0024d8b6}';
  2340.   {$EXTERNALSYM GUID_DMUS_PROP_XG_Capable}
  2341.   GUID_DMUS_PROP_GS_Capable: TGUID = '{6496aba2-61b0-11d2-afa6-00aa0024d8b6}';
  2342.   {$EXTERNALSYM GUID_DMUS_PROP_GS_Capable}
  2343.   GUID_DMUS_PROP_DLS1: TGUID = '{178f2f27-c364-11d1-a760-0000f875ac12}';
  2344.   {$EXTERNALSYM GUID_DMUS_PROP_DLS1}
  2345.   GUID_DMUS_PROP_DLS2: TGUID = '{f14599e5-4689-11d2-afa6-00aa0024d8b6}';
  2346.   {$EXTERNALSYM GUID_DMUS_PROP_DLS2}
  2347.   GUID_DMUS_PROP_INSTRUMENT2: TGUID = '{865fd372-9f67-11d2-872a-00600893b1bd}';
  2348.   {$EXTERNALSYM GUID_DMUS_PROP_INSTRUMENT2}
  2349.   GUID_DMUS_PROP_SynthSink_DSOUND: TGUID = '{0aa97844-c877-11d1-870c-00600893b1bd}';
  2350.   {$EXTERNALSYM GUID_DMUS_PROP_SynthSink_DSOUND}
  2351.   GUID_DMUS_PROP_SynthSink_WAVE: TGUID = '{0aa97845-c877-11d1-870c-00600893b1bd}';
  2352.   {$EXTERNALSYM GUID_DMUS_PROP_SynthSink_WAVE}
  2353.   GUID_DMUS_PROP_SampleMemorySize: TGUID = '{178f2f28-c364-11d1-a760-0000f875ac12}';
  2354.   {$EXTERNALSYM GUID_DMUS_PROP_SampleMemorySize}
  2355.   GUID_DMUS_PROP_SamplePlaybackRate: TGUID = '{2a91f713-a4bf-11d2-bbdf-00600833dbd8}';
  2356.   {$EXTERNALSYM GUID_DMUS_PROP_SamplePlaybackRate}
  2357. (* Property Get/Set GUID_DMUS_PROP_WriteLatency
  2358.  *
  2359.  * Item 0: Synth buffer write latency, in milliseconds
  2360.  * Get/Set SynthSink latency, the average time after the play head that the next buffer gets written.
  2361.  *)
  2362.   GUID_DMUS_PROP_WriteLatency: TGUID = '{268a0fa0-60f2-11d2-afa6-00aa0024d8b6}';
  2363.   {$EXTERNALSYM GUID_DMUS_PROP_WriteLatency}
  2364. (* Property Get/Set GUID_DMUS_PROP_WritePeriod
  2365.  *
  2366.  * Item 0: Synth buffer write period, in milliseconds
  2367.  * Get/Set SynthSink buffer write period, time span between successive writes.
  2368.  *)
  2369.   GUID_DMUS_PROP_WritePeriod: TGUID = '{268a0fa1-60f2-11d2-afa6-00aa0024d8b6}';
  2370.   {$EXTERNALSYM GUID_DMUS_PROP_WritePeriod}
  2371. (* Property Get GUID_DMUS_PROP_MemorySize