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

Delphi控件源码

开发平台:

Delphi

  1.  *
  2.  * Item 0: Memory size
  3.  * Returns a DWORD containing the total number of bytes of sample RAM
  4.  *)
  5.   GUID_DMUS_PROP_MemorySize: TGUID = '{178f2f28-c364-11d1-a760-0000f875ac12}';
  6.   {$EXTERNALSYM GUID_DMUS_PROP_MemorySize}
  7. (* Property Set GUID_DMUS_PROP_WavesReverb
  8.  *
  9.  * Item 0: DMUS_WAVES_REVERB structure
  10.  * Sets reverb parameters
  11.  *)
  12.   GUID_DMUS_PROP_WavesReverb: TGUID = '{04cb5622-32e5-11d2-afa6-00aa0024d8b6}';
  13.   {$EXTERNALSYM GUID_DMUS_PROP_WavesReverb}
  14. (* Property Set GUID_DMUS_PROP_Effects
  15.  *
  16.  * Item 0: DWORD with effects flags.
  17.  * Get/Set effects bits, same as dwEffectFlags in DMUS_PORTPARAMS and DMUS_PORTCAPS:
  18.  * DMUS_EFFECT_NONE
  19.  * DMUS_EFFECT_REVERB
  20.  * DMUS_EFFECT_CHORUS
  21.  *)
  22.   GUID_DMUS_PROP_Effects: TGUID = '{cda8d611-684a-11d2-871e-00600893b1bd}';
  23.   {$EXTERNALSYM GUID_DMUS_PROP_Effects}
  24. (* Property Set GUID_DMUS_PROP_LegacyCaps
  25.  *
  26.  * Item 0: The MIDINCAPS or MIDIOUTCAPS which describes the port's underlying WinMM device. This property is only supported
  27.  * by ports which wrap WinMM devices.
  28.  *)
  29.   GUID_DMUS_PROP_LegacyCaps: TGUID = '{cfa7cdc2-00a1-11d2-aad5-0000f875ac12}';
  30.   {$EXTERNALSYM GUID_DMUS_PROP_LegacyCaps}
  31. (* Property Set GUID_DMUS_PROP_Volume
  32.  *
  33.  * Item 0: A long which contains an offset, in 1/100 dB, to be added to the final volume
  34.  *
  35.  *)
  36.   GUID_DMUS_PROP_Volume: TGUID = '{fedfae25-e46e-11d1-aace-0000f875ac12}';
  37.   {$EXTERNALSYM GUID_DMUS_PROP_Volume}
  38.   // Min and Max values for setting volume with GUID_DMUS_PROP_Volume
  39.   DMUS_VOLUME_MAX     = 2000;        (* +20 dB *)
  40.   {$EXTERNALSYM DMUS_VOLUME_MAX}
  41.   DMUS_VOLUME_MIN   = -20000;        (* -200 dB *)
  42.   {$EXTERNALSYM DMUS_VOLUME_MIN}
  43. (************************************************************************
  44. *                                                                       *
  45. *   dmusici.h -- This module contains the API for the                   *
  46. *                DirectMusic performance layer                          *
  47. *                                                                       *
  48. *   Copyright (c) Microsoft Corporation.  All rights reserved.          *
  49. *                                                                       *
  50. ************************************************************************)
  51. type
  52.   TRANSITION_TYPE = Word;
  53.   {$EXTERNALSYM TRANSITION_TYPE}
  54.   PMusicTime = ^TMusicTime;
  55.   MUSIC_TIME = Longint;
  56.   {$EXTERNALSYM MUSIC_TIME}
  57.   TMusicTime = MUSIC_TIME;
  58. const
  59.   MT_MIN          = $80000000;  // Minimum music time value.
  60.   {$EXTERNALSYM MT_MIN}
  61.   MT_MAX          = $7FFFFFFF;  // Maximum music time value.
  62.   {$EXTERNALSYM MT_MAX}
  63.   DMUS_PPQ        = 768;     // parts per quarter note
  64.   {$EXTERNALSYM DMUS_PPQ}
  65. type
  66.   PDMusStyletTypes = ^TDMusStyletTypes;
  67.   enumDMUS_STYLET_TYPES = (
  68.     DMUS_STYLET_PATTERN         {= 0},
  69.     DMUS_STYLET_MOTIF           {= 1}
  70.   );
  71.   {$EXTERNALSYM enumDMUS_STYLET_TYPES}
  72.   DMUS_STYLET_TYPES = enumDMUS_STYLET_TYPES;
  73.   {$EXTERNALSYM DMUS_STYLET_TYPES}
  74.   TDMusStyletTypes = DMUS_STYLET_TYPES;
  75.   enumDMUS_COMMANDT_TYPES = (
  76.     DMUS_COMMANDT_GROOVE            {= 0},
  77.     DMUS_COMMANDT_FILL              {= 1},
  78.     DMUS_COMMANDT_INTRO             {= 2},
  79.     DMUS_COMMANDT_BREAK             {= 3},
  80.     DMUS_COMMANDT_END               {= 4},
  81.     DMUS_COMMANDT_ENDANDINTRO       {= 5}
  82.   );
  83.   {$EXTERNALSYM enumDMUS_COMMANDT_TYPES}
  84.   DMUS_COMMANDT_TYPES = enumDMUS_COMMANDT_TYPES;
  85.   {$EXTERNALSYM DMUS_COMMANDT_TYPES}
  86.   TDMusCommandtTypes = DMUS_COMMANDT_TYPES;
  87.   PDMusCommandtTypes = ^TDMusCommandtTypes;
  88.   PDMusShapetTypes = ^TDMusShapetTypes;
  89.   enumDMUS_SHAPET_TYPES = (
  90.     DMUS_SHAPET_FALLING             {= 0},
  91.     DMUS_SHAPET_LEVEL               {= 1},
  92.     DMUS_SHAPET_LOOPABLE            {= 2},
  93.     DMUS_SHAPET_LOUD                {= 3},
  94.     DMUS_SHAPET_QUIET               {= 4},
  95.     DMUS_SHAPET_PEAKING             {= 5},
  96.     DMUS_SHAPET_RANDOM              {= 6},
  97.     DMUS_SHAPET_RISING              {= 7},
  98.     DMUS_SHAPET_SONG                {= 8}
  99.   );
  100.   {$EXTERNALSYM enumDMUS_SHAPET_TYPES}
  101.   DMUS_SHAPET_TYPES = enumDMUS_SHAPET_TYPES;
  102.   {$EXTERNALSYM DMUS_SHAPET_TYPES}
  103.   TDMusShapetTypes = DMUS_SHAPET_TYPES;
  104.   enumDMUS_COMPOSEF_FLAGS = DWORD;
  105.   {$EXTERNALSYM enumDMUS_COMPOSEF_FLAGS}
  106.   DMUS_COMPOSEF_FLAGS = enumDMUS_COMPOSEF_FLAGS;
  107.   {$EXTERNALSYM DMUS_COMPOSEF_FLAGS}
  108.   TDMusComposefFlags = DMUS_COMPOSEF_FLAGS;
  109.   PDMusComposefFlags = ^TDMusComposefFlags;
  110. const
  111.   DMUS_COMPOSEF_NONE              = 0;
  112.   {$EXTERNALSYM DMUS_COMPOSEF_NONE}
  113.   DMUS_COMPOSEF_ALIGN             = $1;
  114.   {$EXTERNALSYM DMUS_COMPOSEF_ALIGN}
  115.   DMUS_COMPOSEF_OVERLAP           = $2;
  116.   {$EXTERNALSYM DMUS_COMPOSEF_OVERLAP}
  117.   DMUS_COMPOSEF_IMMEDIATE         = $4;
  118.   {$EXTERNALSYM DMUS_COMPOSEF_IMMEDIATE}
  119.   DMUS_COMPOSEF_GRID              = $8;
  120.   {$EXTERNALSYM DMUS_COMPOSEF_GRID}
  121.   DMUS_COMPOSEF_BEAT              = $10;
  122.   {$EXTERNALSYM DMUS_COMPOSEF_BEAT}
  123.   DMUS_COMPOSEF_MEASURE           = $20;
  124.   {$EXTERNALSYM DMUS_COMPOSEF_MEASURE}
  125.   DMUS_COMPOSEF_AFTERPREPARETIME  = $40;
  126.   {$EXTERNALSYM DMUS_COMPOSEF_AFTERPREPARETIME}
  127.   DMUS_COMPOSEF_VALID_START_BEAT  = $80;   (* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any beat. *)
  128.   {$EXTERNALSYM DMUS_COMPOSEF_VALID_START_BEAT}
  129.   DMUS_COMPOSEF_VALID_START_GRID  = $100;  (* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any grid. *)
  130.   {$EXTERNALSYM DMUS_COMPOSEF_VALID_START_GRID}
  131.   DMUS_COMPOSEF_VALID_START_TICK  = $200;  (* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur any time. *)
  132.   {$EXTERNALSYM DMUS_COMPOSEF_VALID_START_TICK}
  133.   DMUS_COMPOSEF_SEGMENTEND        = $400;  (* Play the transition at the end of the current segment. *)
  134.   {$EXTERNALSYM DMUS_COMPOSEF_SEGMENTEND}
  135.   DMUS_COMPOSEF_MARKER            = $800;  (* Play the transition at the next marker in the current segment. *)
  136.   {$EXTERNALSYM DMUS_COMPOSEF_MARKER}
  137.   DMUS_COMPOSEF_MODULATE          = $1000;
  138.   {$EXTERNALSYM DMUS_COMPOSEF_MODULATE}
  139.   DMUS_COMPOSEF_LONG              = $2000;
  140.   {$EXTERNALSYM DMUS_COMPOSEF_LONG}
  141.   DMUS_COMPOSEF_ENTIRE_TRANSITION = $4000;    (* play the entire transition pattern *)
  142.   {$EXTERNALSYM DMUS_COMPOSEF_ENTIRE_TRANSITION}
  143.   DMUS_COMPOSEF_1BAR_TRANSITION   = $8000;    (* play one bar of the transition pattern *)
  144.   {$EXTERNALSYM DMUS_COMPOSEF_1BAR_TRANSITION}
  145.   DMUS_COMPOSEF_ENTIRE_ADDITION   = $10000;   (* play the additional pattern in its entirety *)
  146.   {$EXTERNALSYM DMUS_COMPOSEF_ENTIRE_ADDITION}
  147.   DMUS_COMPOSEF_1BAR_ADDITION     = $20000;   (* play one bar of the additional pattern *)
  148.   {$EXTERNALSYM DMUS_COMPOSEF_1BAR_ADDITION}
  149.   DMUS_COMPOSEF_VALID_START_MEASURE = $40000; (* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any bar. *)
  150.   {$EXTERNALSYM DMUS_COMPOSEF_VALID_START_MEASURE}
  151.   DMUS_COMPOSEF_DEFAULT           = $80000;   (* Use segment's default boundary *)
  152.   {$EXTERNALSYM DMUS_COMPOSEF_DEFAULT}
  153.   DMUS_COMPOSEF_NOINVALIDATE      = $100000;  (* Play without invalidating the currently playing segment(s) *)
  154.   {$EXTERNALSYM DMUS_COMPOSEF_NOINVALIDATE}
  155.   DMUS_COMPOSEF_USE_AUDIOPATH     = $200000;  (* Uses the audio paths that are embedded in the segments *)
  156.   {$EXTERNALSYM DMUS_COMPOSEF_USE_AUDIOPATH}
  157.   DMUS_COMPOSEF_INVALIDATE_PRI    = $400000;  (* Invalidate only the current primary seg state *)
  158.   {$EXTERNALSYM DMUS_COMPOSEF_INVALIDATE_PRI}
  159. const
  160.   DMUS_PCHANNEL_BROADCAST_PERFORMANCE = $FFFFFFFF;  // PMsg is sent on all PChannels of the performance.
  161.   {$EXTERNALSYM DMUS_PCHANNEL_BROADCAST_PERFORMANCE}
  162.   DMUS_PCHANNEL_BROADCAST_AUDIOPATH   = $FFFFFFFE;  // PMsg is sent on all PChannels of the audio path.
  163.   {$EXTERNALSYM DMUS_PCHANNEL_BROADCAST_AUDIOPATH}
  164.   DMUS_PCHANNEL_BROADCAST_SEGMENT     = $FFFFFFFD;  // PMsg is sent on all PChannels of the segment.
  165.   {$EXTERNALSYM DMUS_PCHANNEL_BROADCAST_SEGMENT}
  166.   DMUS_PCHANNEL_BROADCAST_GROUPS      = $FFFFFFFC;  // A duplicate PMsg is for each Channels Groups in the performance.
  167.   {$EXTERNALSYM DMUS_PCHANNEL_BROADCAST_GROUPS}
  168. (*  The DMUS_PATH constants are used in conjunction with GetObjectInPath to find a requested
  169.     interface at a particular stage in the audio path.
  170. *)
  171.   DMUS_PATH_SEGMENT          = $1000;      // Get the segment itself (from a segment state.)
  172.   {$EXTERNALSYM DMUS_PATH_SEGMENT}
  173.   DMUS_PATH_SEGMENT_TRACK    = $1100;      // Look in Track List of Segment.
  174.   {$EXTERNALSYM DMUS_PATH_SEGMENT_TRACK}
  175.   DMUS_PATH_SEGMENT_GRAPH    = $1200;      // Get the segment's tool graph.
  176.   {$EXTERNALSYM DMUS_PATH_SEGMENT_GRAPH}
  177.   DMUS_PATH_SEGMENT_TOOL     = $1300;      // Look in Tool Graph of Segment.
  178.   {$EXTERNALSYM DMUS_PATH_SEGMENT_TOOL}
  179.   DMUS_PATH_AUDIOPATH        = $2000;      // Get the audiopath itself (from a segment state.)
  180.   {$EXTERNALSYM DMUS_PATH_AUDIOPATH}
  181.   DMUS_PATH_AUDIOPATH_GRAPH  = $2200;      // Get the audiopath's tool graph.
  182.   {$EXTERNALSYM DMUS_PATH_AUDIOPATH_GRAPH}
  183.   DMUS_PATH_AUDIOPATH_TOOL   = $2300;      // Look in Tool Graph of Audio Path.
  184.   {$EXTERNALSYM DMUS_PATH_AUDIOPATH_TOOL}
  185.   DMUS_PATH_PERFORMANCE      = $3000;      // Access the performance.
  186.   {$EXTERNALSYM DMUS_PATH_PERFORMANCE}
  187.   DMUS_PATH_PERFORMANCE_GRAPH = $3200;     // Get the performance's tool graph.
  188.   {$EXTERNALSYM DMUS_PATH_PERFORMANCE_GRAPH}
  189.   DMUS_PATH_PERFORMANCE_TOOL = $3300;      // Look in Tool Graph of Performance.
  190.   {$EXTERNALSYM DMUS_PATH_PERFORMANCE_TOOL}
  191.   DMUS_PATH_PORT             = $4000;      // Access the synth.
  192.   {$EXTERNALSYM DMUS_PATH_PORT}
  193.   DMUS_PATH_BUFFER           = $6000;      // Look in DirectSoundBuffer.
  194.   {$EXTERNALSYM DMUS_PATH_BUFFER}
  195.   DMUS_PATH_BUFFER_DMO       = $6100;      // Access a DMO in the buffer.
  196.   {$EXTERNALSYM DMUS_PATH_BUFFER_DMO}
  197.   DMUS_PATH_MIXIN_BUFFER     = $7000;      // Look in a global mixin buffer.
  198.   {$EXTERNALSYM DMUS_PATH_MIXIN_BUFFER}
  199.   DMUS_PATH_MIXIN_BUFFER_DMO = $7100;      // Access a DMO in a global mixin buffer.
  200.   {$EXTERNALSYM DMUS_PATH_MIXIN_BUFFER_DMO}
  201.   DMUS_PATH_PRIMARY_BUFFER   = $8000;      // Access the primary buffer.
  202.   {$EXTERNALSYM DMUS_PATH_PRIMARY_BUFFER}
  203. (*  To ignore PChannels when calling GetObjectInPath(), use the DMUS_PCHANNEL_ALL constant. *)
  204.   DMUS_PCHANNEL_ALL           = $FFFFFFFB;
  205.   {$EXTERNALSYM DMUS_PCHANNEL_ALL}
  206. (*  The DMUS_APATH types are used in conjunction with CreateStandardAudioPath to
  207.     build default path types. _SHARED_ means the same buffer is shared across multiple
  208.     instantiations of the audiopath type. _DYNAMIC_ means a unique buffer is created
  209.     every time.
  210. *)
  211.   DMUS_APATH_SHARED_STEREOPLUSREVERB   = 1;       // A standard music set up with stereo outs and reverb.
  212.   {$EXTERNALSYM DMUS_APATH_SHARED_STEREOPLUSREVERB}
  213.   DMUS_APATH_DYNAMIC_3D                = 6;       // An audio path with one dynamic bus from the synth feeding to a dynamic 3d buffer. Does not send to env reverb.
  214.   {$EXTERNALSYM DMUS_APATH_DYNAMIC_3D}
  215.   DMUS_APATH_DYNAMIC_MONO              = 7;       // An audio path with one dynamic bus from the synth feeding to a dynamic mono buffer.
  216.   {$EXTERNALSYM DMUS_APATH_DYNAMIC_MONO}
  217.   DMUS_APATH_DYNAMIC_STEREO            = 8;       // An audio path with two dynamic buses from the synth feeding to a dynamic stereo buffer.
  218.   {$EXTERNALSYM DMUS_APATH_DYNAMIC_STEREO}
  219. type
  220.   PDMusAudioParams = ^TDMusAudioParams;
  221.   _DMUS_AUDIOPARAMS = packed record
  222.     dwSize: DWORD;             // Size of this structure.
  223.     fInitNow: BOOL;            // If true, the sink and synth are created immediately and results returned in this structure.
  224.     dwValidData: DWORD;        // Flags indicating which fields below are valid.
  225.     dwFeatures: DWORD;         // Required DMUS_AUDIOF features.
  226.     dwVoices: DWORD;           // Required number of voices.
  227.     dwSampleRate: DWORD;       // Sample rate of synths and sink.
  228.     clsidDefaultSynth: TGUID; // Class ID of default synthesizer.
  229.   end;
  230.   {$EXTERNALSYM _DMUS_AUDIOPARAMS}
  231.   DMUS_AUDIOPARAMS = _DMUS_AUDIOPARAMS;
  232.   {$EXTERNALSYM DMUS_AUDIOPARAMS}
  233.   TDMusAudioParams = _DMUS_AUDIOPARAMS;
  234. const
  235.   (* dwFeatures flags. These indicate which features are required for the audio environment. *)
  236.   DMUS_AUDIOF_3D          = $1;   // Require 3D buffers.
  237.   {$EXTERNALSYM DMUS_AUDIOF_3D}
  238.   DMUS_AUDIOF_ENVIRON     = $2;   // Require environmental modeling.
  239.   {$EXTERNALSYM DMUS_AUDIOF_ENVIRON}
  240.   DMUS_AUDIOF_EAX         = $4;   // Require use of EAX effects.
  241.   {$EXTERNALSYM DMUS_AUDIOF_EAX}
  242.   DMUS_AUDIOF_DMOS        = $8;   // Require use of additional DMOs.
  243.   {$EXTERNALSYM DMUS_AUDIOF_DMOS}
  244.   DMUS_AUDIOF_STREAMING   = $10;  // Require support for streaming waves.
  245.   {$EXTERNALSYM DMUS_AUDIOF_STREAMING}
  246.   DMUS_AUDIOF_BUFFERS     = $20;  // Require support for multiple buffers (all above cases need this.)
  247.   {$EXTERNALSYM DMUS_AUDIOF_BUFFERS}
  248.   DMUS_AUDIOF_ALL         = $3F;  // Requires everything.
  249.   {$EXTERNALSYM DMUS_AUDIOF_ALL}
  250.   (* dwValidData flags. These indicate which fields in DMUS_AUDIOPARAMS have been filled in. If fInitNow is set, these also return what was allocated. *)
  251.   DMUS_AUDIOPARAMS_FEATURES       = $00000001;
  252.   {$EXTERNALSYM DMUS_AUDIOPARAMS_FEATURES}
  253.   DMUS_AUDIOPARAMS_VOICES         = $00000002;
  254.   {$EXTERNALSYM DMUS_AUDIOPARAMS_VOICES}
  255.   DMUS_AUDIOPARAMS_SAMPLERATE     = $00000004;
  256.   {$EXTERNALSYM DMUS_AUDIOPARAMS_SAMPLERATE}
  257.   DMUS_AUDIOPARAMS_DEFAULTSYNTH   = $00000008;
  258.   {$EXTERNALSYM DMUS_AUDIOPARAMS_DEFAULTSYNTH}
  259. (* DMUS_PMSGF_FLAGS fill the DMUS_PMSG's dwFlags member *)
  260. type
  261.   enumDMUS_PMSGF_FLAGS = DWORD;
  262.   {$EXTERNALSYM enumDMUS_PMSGF_FLAGS}
  263.   DMUS_PMSGF_FLAGS = enumDMUS_PMSGF_FLAGS;
  264.   {$EXTERNALSYM DMUS_PMSGF_FLAGS}
  265.   TDMusPmsgfFlags = DMUS_PMSGF_FLAGS;
  266.   PDMusPmsgfFlags = ^TDMusPmsgfFlags;
  267. const
  268.   DMUS_PMSGF_REFTIME          = 1;      // if rtTime is valid
  269.   {$EXTERNALSYM DMUS_PMSGF_REFTIME}
  270.   DMUS_PMSGF_MUSICTIME        = 2;      // if mtTime is valid
  271.   {$EXTERNALSYM DMUS_PMSGF_MUSICTIME}
  272.   DMUS_PMSGF_TOOL_IMMEDIATE   = 4;      // if PMSG should be processed immediately
  273.   {$EXTERNALSYM DMUS_PMSGF_TOOL_IMMEDIATE}
  274.   DMUS_PMSGF_TOOL_QUEUE       = 8;      // if PMSG should be processed a little early, at Queue time
  275.   {$EXTERNALSYM DMUS_PMSGF_TOOL_QUEUE}
  276.   DMUS_PMSGF_TOOL_ATTIME      = $10;    // if PMSG should be processed at the time stamp
  277.   {$EXTERNALSYM DMUS_PMSGF_TOOL_ATTIME}
  278.   DMUS_PMSGF_TOOL_FLUSH       = $20;    // if PMSG is being flushed
  279.   {$EXTERNALSYM DMUS_PMSGF_TOOL_FLUSH}
  280.   DMUS_PMSGF_LOCKTOREFTIME    = $40;    // if rtTime can not be overriden by a tempo change.
  281.   {$EXTERNALSYM DMUS_PMSGF_LOCKTOREFTIME}
  282.   DMUS_PMSGF_DX8              = $80;    // if the message has DX8 or later extensions.
  283.   {$EXTERNALSYM DMUS_PMSGF_DX8}
  284.   // The values of DMUS_TIME_RESOLVE_FLAGS may also be used inside the
  285.   // DMUS_PMSG's dwFlags member.
  286. (* DMUS_PMSGT_TYPES fill the DMUS_PMSG's dwType member *)
  287. type
  288.   enumDMUS_PMSGT_TYPES = DWORD;
  289.   {$EXTERNALSYM enumDMUS_PMSGT_TYPES}
  290.   DMUS_PMSGT_TYPES = enumDMUS_PMSGT_TYPES;
  291.   {$EXTERNALSYM DMUS_PMSGT_TYPES}
  292.   TDMusPmsgtTypes = DMUS_PMSGT_TYPES;
  293.   PDMusPmsgtTypes = ^TDMusPmsgtTypes;
  294. const
  295.   DMUS_PMSGT_MIDI             = 0;      // MIDI short message
  296.   {$EXTERNALSYM DMUS_PMSGT_MIDI}
  297.   DMUS_PMSGT_NOTE             = 1;      // Interactive Music Note
  298.   {$EXTERNALSYM DMUS_PMSGT_NOTE}
  299.   DMUS_PMSGT_SYSEX            = 2;      // MIDI long message (system exclusive message)
  300.   {$EXTERNALSYM DMUS_PMSGT_SYSEX}
  301.   DMUS_PMSGT_NOTIFICATION     = 3;      // Notification message
  302.   {$EXTERNALSYM DMUS_PMSGT_NOTIFICATION}
  303.   DMUS_PMSGT_TEMPO            = 4;      // Tempo message
  304.   {$EXTERNALSYM DMUS_PMSGT_TEMPO}
  305.   DMUS_PMSGT_CURVE            = 5;      // Control change / pitch bend, etc. curve
  306.   {$EXTERNALSYM DMUS_PMSGT_CURVE}
  307.   DMUS_PMSGT_TIMESIG          = 6;      // Time signature
  308.   {$EXTERNALSYM DMUS_PMSGT_TIMESIG}
  309.   DMUS_PMSGT_PATCH            = 7;      // Patch changes
  310.   {$EXTERNALSYM DMUS_PMSGT_PATCH}
  311.   DMUS_PMSGT_TRANSPOSE        = 8;      // Transposition messages
  312.   {$EXTERNALSYM DMUS_PMSGT_TRANSPOSE}
  313.   DMUS_PMSGT_CHANNEL_PRIORITY = 9;      // Channel priority
  314.   {$EXTERNALSYM DMUS_PMSGT_CHANNEL_PRIORITY}
  315.   DMUS_PMSGT_STOP             = 10;     // Stop message
  316.   {$EXTERNALSYM DMUS_PMSGT_STOP}
  317.   DMUS_PMSGT_DIRTY            = 11;     // Tells Tools that cache GetParam() info to refresh
  318.   {$EXTERNALSYM DMUS_PMSGT_DIRTY}
  319.   DMUS_PMSGT_WAVE             = 12;     // Carries control information for playing a wave.
  320.   {$EXTERNALSYM DMUS_PMSGT_WAVE}
  321.   DMUS_PMSGT_LYRIC            = 13;     // Lyric message from lyric track.
  322.   {$EXTERNALSYM DMUS_PMSGT_LYRIC}
  323.   DMUS_PMSGT_SCRIPTLYRIC      = 14;     // Lyric message sent by a script with the Trace function.
  324.   {$EXTERNALSYM DMUS_PMSGT_SCRIPTLYRIC}
  325.   DMUS_PMSGT_USER             = 255;    // User message
  326.   {$EXTERNALSYM DMUS_PMSGT_USER}
  327. type
  328.   (* DMUS_SEGF_FLAGS correspond to IDirectMusicPerformance::PlaySegment, and other API *)
  329.   enumDMUS_SEGF_FLAGS = DWORD;
  330.   DMUS_SEGF_FLAGS = enumDMUS_SEGF_FLAGS;
  331.   {$EXTERNALSYM DMUS_SEGF_FLAGS}
  332.   TDMusSegfFlags = DMUS_SEGF_FLAGS;
  333.   PDMusSegfFlags = ^TDMusSegfFlags;
  334. const
  335.   DMUS_SEGF_REFTIME           = 1 shr 6;   // 0x40 Time parameter is in reference time
  336.   {$EXTERNALSYM DMUS_SEGF_REFTIME}
  337.   DMUS_SEGF_SECONDARY         = 1 shr 7;   // 0x80 Secondary segment
  338.   {$EXTERNALSYM DMUS_SEGF_SECONDARY}
  339.   DMUS_SEGF_QUEUE             = 1 shr 8;   // 0x100 Queue at the end of the primary segment queue (primary only)
  340.   {$EXTERNALSYM DMUS_SEGF_QUEUE}
  341.   DMUS_SEGF_CONTROL           = 1 shr 9;   // 0x200 Play as a control track (secondary segments only)
  342.   {$EXTERNALSYM DMUS_SEGF_CONTROL}
  343.   DMUS_SEGF_AFTERPREPARETIME  = 1 shr 10;  // 0x400 Play after the prepare time (See IDirectMusicPerformance::GetPrepareTime)
  344.   {$EXTERNALSYM DMUS_SEGF_AFTERPREPARETIME}
  345.   DMUS_SEGF_GRID              = 1 shr 11;  // 0x800 Play on grid boundary
  346.   {$EXTERNALSYM DMUS_SEGF_GRID}
  347.   DMUS_SEGF_BEAT              = 1 shr 12;  // 0x1000 Play on beat boundary
  348.   {$EXTERNALSYM DMUS_SEGF_BEAT}
  349.   DMUS_SEGF_MEASURE           = 1 shr 13;  // 0x2000 Play on measure boundary
  350.   {$EXTERNALSYM DMUS_SEGF_MEASURE}
  351.   DMUS_SEGF_DEFAULT           = 1 shr 14;  // 0x4000 Use segment's default boundary
  352.   {$EXTERNALSYM DMUS_SEGF_DEFAULT}
  353.   DMUS_SEGF_NOINVALIDATE      = 1 shr 15;  // 0x8000 Play without invalidating the currently playing segment(s)
  354.   {$EXTERNALSYM DMUS_SEGF_NOINVALIDATE}
  355.   DMUS_SEGF_ALIGN             = 1 shr 16;  // 0x10000 Align segment with requested boundary, but switch at first valid point
  356.   {$EXTERNALSYM DMUS_SEGF_ALIGN}
  357.   DMUS_SEGF_VALID_START_BEAT  = 1 shr 17;  // 0x20000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any beat.
  358.   {$EXTERNALSYM DMUS_SEGF_VALID_START_BEAT}
  359.   DMUS_SEGF_VALID_START_GRID  = 1 shr 18;  // 0x40000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any grid.
  360.   {$EXTERNALSYM DMUS_SEGF_VALID_START_GRID}
  361.   DMUS_SEGF_VALID_START_TICK  = 1 shr 19;  // 0x80000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur any time.
  362.   {$EXTERNALSYM DMUS_SEGF_VALID_START_TICK}
  363.   DMUS_SEGF_AUTOTRANSITION    = 1 shr 20;  // 0x100000 Compose and play a transition segment, using the transition template. 
  364.   {$EXTERNALSYM DMUS_SEGF_AUTOTRANSITION}
  365.   DMUS_SEGF_AFTERQUEUETIME    = 1 shr 21;  // 0x200000 Make sure to play after the queue time. This is default for primary segments
  366.   {$EXTERNALSYM DMUS_SEGF_AFTERQUEUETIME}
  367.   DMUS_SEGF_AFTERLATENCYTIME  = 1 shr 22;  // 0x400000 Make sure to play after the latency time. This is true for all segments, so this is a nop
  368.   {$EXTERNALSYM DMUS_SEGF_AFTERLATENCYTIME}
  369.   DMUS_SEGF_SEGMENTEND        = 1 shr 23;  // 0x800000 Play at the next end of segment.
  370.   {$EXTERNALSYM DMUS_SEGF_SEGMENTEND}
  371.   DMUS_SEGF_MARKER            = 1 shr 24;  // 0x1000000 Play at next marker in the primary segment. If there are no markers, default to any other resolution requests.
  372.   {$EXTERNALSYM DMUS_SEGF_MARKER}
  373.   DMUS_SEGF_TIMESIG_ALWAYS    = 1 shr 25;  // 0x2000000 Even if there is no primary segment, align start time with current time signature.
  374.   {$EXTERNALSYM DMUS_SEGF_TIMESIG_ALWAYS}
  375.   DMUS_SEGF_USE_AUDIOPATH     = 1 shr 26;  // 0x4000000 Uses the audio path that is embedded in the segment.
  376.   {$EXTERNALSYM DMUS_SEGF_USE_AUDIOPATH}
  377.   DMUS_SEGF_VALID_START_MEASURE = 1 shr 27; // 0x8000000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any bar.
  378.   {$EXTERNALSYM DMUS_SEGF_VALID_START_MEASURE}
  379.   DMUS_SEGF_INVALIDATE_PRI    = 1 shr 28;  // 0x10000000 invalidate only the current primary seg state
  380.   {$EXTERNALSYM DMUS_SEGF_INVALIDATE_PRI}
  381.   DMUS_SEG_REPEAT_INFINITE    = $FFFFFFFF;  // For IDirectMusicSegment::SetRepeat
  382.   {$EXTERNALSYM DMUS_SEG_REPEAT_INFINITE}
  383.   DMUS_SEG_ALLTRACKS          = $80000000;  // For IDirectMusicSegment::SetParam() and SetTrackConfig() - selects all tracks instead on nth index.
  384.   {$EXTERNALSYM DMUS_SEG_ALLTRACKS}
  385.   DMUS_SEG_ANYTRACK           = $80000000;  // For IDirectMusicSegment::GetParam() - checks each track until it finds one that returns data (not DMUS_E_NOT_FOUND.)
  386.   {$EXTERNALSYM DMUS_SEG_ANYTRACK}
  387. // DMUS_TIME_RESOLVE_FLAGS correspond to IDirectMusicPerformance::GetResolvedTime, and can
  388. // also be used interchangeably with the corresponding DMUS_SEGF_FLAGS, since their values
  389. // are intentionally the same
  390. type
  391.   enumDMUS_TIME_RESOLVE_FLAGS = DWORD;
  392.   {$EXTERNALSYM enumDMUS_TIME_RESOLVE_FLAGS}
  393.   DMUS_TIME_RESOLVE_FLAGS = enumDMUS_TIME_RESOLVE_FLAGS;
  394.   {$EXTERNALSYM DMUS_TIME_RESOLVE_FLAGS}
  395.   TDMusTimeResolveFlags = DMUS_TIME_RESOLVE_FLAGS;
  396.   PDMusTimeResolveFlags = ^TDMusTimeResolveFlags;
  397. const
  398.   DMUS_TIME_RESOLVE_AFTERPREPARETIME  = DMUS_SEGF_AFTERPREPARETIME;
  399.   {$EXTERNALSYM DMUS_TIME_RESOLVE_AFTERPREPARETIME}
  400.   DMUS_TIME_RESOLVE_AFTERQUEUETIME    = DMUS_SEGF_AFTERQUEUETIME;
  401.   {$EXTERNALSYM DMUS_TIME_RESOLVE_AFTERQUEUETIME}
  402.   DMUS_TIME_RESOLVE_AFTERLATENCYTIME  = DMUS_SEGF_AFTERLATENCYTIME;
  403.   {$EXTERNALSYM DMUS_TIME_RESOLVE_AFTERLATENCYTIME}
  404.   DMUS_TIME_RESOLVE_GRID              = DMUS_SEGF_GRID;
  405.   {$EXTERNALSYM DMUS_TIME_RESOLVE_GRID}
  406.   DMUS_TIME_RESOLVE_BEAT              = DMUS_SEGF_BEAT;
  407.   {$EXTERNALSYM DMUS_TIME_RESOLVE_BEAT}
  408.   DMUS_TIME_RESOLVE_MEASURE           = DMUS_SEGF_MEASURE;
  409.   {$EXTERNALSYM DMUS_TIME_RESOLVE_MEASURE}
  410.   DMUS_TIME_RESOLVE_MARKER            = DMUS_SEGF_MARKER;
  411.   {$EXTERNALSYM DMUS_TIME_RESOLVE_MARKER}
  412.   DMUS_TIME_RESOLVE_SEGMENTEND        = DMUS_SEGF_SEGMENTEND;
  413.   {$EXTERNALSYM DMUS_TIME_RESOLVE_SEGMENTEND}
  414. type
  415.   (* The following flags are sent inside the DMUS_CHORD_KEY.dwFlags parameter *)
  416.   enumDMUS_CHORDKEYF_FLAGS = DWORD;
  417.   {$EXTERNALSYM enumDMUS_CHORDKEYF_FLAGS}
  418.   DMUS_CHORDKEYF_FLAGS = enumDMUS_CHORDKEYF_FLAGS;
  419.   {$EXTERNALSYM DMUS_CHORDKEYF_FLAGS}
  420.   TDMusChordkeyfFlags = DMUS_CHORDKEYF_FLAGS;
  421.   PDMusChordkeyfFlags = ^TDMusChordkeyfFlags;
  422. const
  423.   DMUS_CHORDKEYF_SILENT            = 1;      // is the chord silent?
  424.   {$EXTERNALSYM DMUS_CHORDKEYF_SILENT}
  425.   DMUS_MAXSUBCHORD = 8;
  426.   {$EXTERNALSYM DMUS_MAXSUBCHORD}
  427. type
  428.   PDMusSubChord = ^TDMusSubChord;
  429.   _DMUS_SUBCHORD = packed record
  430.     dwChordPattern: DWORD;     // Notes in the subchord
  431.     dwScalePattern: DWORD;     // Notes in the scale
  432.     dwInversionPoints: DWORD;  // Where inversions can occur
  433.     dwLevels: DWORD;           // Which levels are supported by this subchord
  434.     bChordRoot: Byte;          // Root of the subchord
  435.     bScaleRoot: Byte;          // Root of the scale
  436.   end;
  437.   {$EXTERNALSYM _DMUS_SUBCHORD}
  438.   DMUS_SUBCHORD = _DMUS_SUBCHORD;
  439.   {$EXTERNALSYM DMUS_SUBCHORD}
  440.   TDMusSubChord = _DMUS_SUBCHORD;
  441.   PDMusChordKey = ^TDMusChordKey;
  442.   _DMUS_CHORD_KEY = packed record
  443.     wszName: array [0..15] of WideChar;   // Name of the chord
  444.     wMeasure: Word;           // Measure this falls on
  445.     bBeat: Byte;              // Beat this falls on
  446.     bSubChordCount: Byte;     // Number of chords in the list of subchords
  447.     SubChordList: array[0..DMUS_MAXSUBCHORD-1] of TDMUSSUBCHORD; // List of sub chords
  448.     dwScale: DWORD;            // Scale underlying the entire chord
  449.     bKey: Byte;               // Key underlying the entire chord
  450.     bFlags: Byte;             // Miscelaneous flags
  451.   end;
  452.   {$EXTERNALSYM _DMUS_CHORD_KEY}
  453.   DMUS_CHORD_KEY = _DMUS_CHORD_KEY;
  454.   {$EXTERNALSYM DMUS_CHORD_KEY}
  455.   TDMusChordKey = _DMUS_CHORD_KEY;
  456.   enumDMUS_NOTEF_FLAGS = DWORD;
  457.   {$EXTERNALSYM enumDMUS_NOTEF_FLAGS}
  458.   DMUS_NOTEF_FLAGS = enumDMUS_NOTEF_FLAGS;
  459.   {$EXTERNALSYM DMUS_NOTEF_FLAGS}
  460.   TDMusNotefFlags = DMUS_NOTEF_FLAGS;
  461.   PDMusNotefFlags = ^TDMusNotefFlags;
  462. const
  463.   DMUS_NOTEF_NOTEON = 1;              // Set if this is a MIDI Note On. Otherwise, it is MIDI Note Off
  464.   {$EXTERNALSYM DMUS_NOTEF_NOTEON}
  465.   // DX8 flags: 
  466.   DMUS_NOTEF_NOINVALIDATE = 2;        // Don't invalidate this note off.
  467.   {$EXTERNALSYM DMUS_NOTEF_NOINVALIDATE}
  468.   DMUS_NOTEF_NOINVALIDATE_INSCALE = 4;// Don't invalidate if still within the scale.
  469.   {$EXTERNALSYM DMUS_NOTEF_NOINVALIDATE_INSCALE}
  470.   DMUS_NOTEF_NOINVALIDATE_INCHORD = 8;// Don't invalidate if still within the chord.
  471.   {$EXTERNALSYM DMUS_NOTEF_NOINVALIDATE_INCHORD}
  472.   DMUS_NOTEF_REGENERATE = #10;        // Regenerate the note on an invalidate.
  473.   {$EXTERNALSYM DMUS_NOTEF_REGENERATE}
  474. type
  475. (* The DMUS_PLAYMODE_FLAGS are used to determine how to convert wMusicValue
  476.    into the appropriate bMidiValue.
  477. *)
  478.   enumDMUS_PLAYMODE_FLAGS = Byte;
  479.   DMUS_PLAYMODE_FLAGS = enumDMUS_PLAYMODE_FLAGS;
  480. const
  481.   DMUS_PLAYMODE_KEY_ROOT          = 1;  // Transpose on top of the key root.
  482.   {$EXTERNALSYM DMUS_PLAYMODE_KEY_ROOT}
  483.   DMUS_PLAYMODE_CHORD_ROOT        = 2;  // Transpose on top of the chord root.
  484.   {$EXTERNALSYM DMUS_PLAYMODE_CHORD_ROOT}
  485.   DMUS_PLAYMODE_SCALE_INTERVALS   = 4;  // Use scale intervals from scale pattern.
  486.   {$EXTERNALSYM DMUS_PLAYMODE_SCALE_INTERVALS}
  487.   DMUS_PLAYMODE_CHORD_INTERVALS   = 8;  // Use chord intervals from chord pattern.
  488.   {$EXTERNALSYM DMUS_PLAYMODE_CHORD_INTERVALS}
  489.   DMUS_PLAYMODE_NONE              = 16; // No mode. Indicates the parent part's mode should be used.
  490.   {$EXTERNALSYM DMUS_PLAYMODE_NONE}
  491. (* The following are playback modes that can be created by combining the DMUS_PLAYMODE_FLAGS
  492.    in various ways:
  493. *)
  494. (* Fixed. wMusicValue holds final MIDI note value. This is used for drums, sound effects, and sequenced
  495.    notes that should not be transposed by the chord or scale.
  496. *)
  497.   DMUS_PLAYMODE_FIXED             = 0;
  498.   {$EXTERNALSYM DMUS_PLAYMODE_FIXED}
  499. (* In fixed to key, the musicvalue is again a fixed MIDI value, but it
  500.    is transposed on top of the key root.
  501. *)
  502.   DMUS_PLAYMODE_FIXEDTOKEY        = DMUS_PLAYMODE_KEY_ROOT;
  503.   {$EXTERNALSYM DMUS_PLAYMODE_FIXEDTOKEY}
  504. (* In fixed to chord, the musicvalue is also a fixed MIDI value, but it
  505.    is transposed on top of the chord root.
  506. *)
  507.   DMUS_PLAYMODE_FIXEDTOCHORD      = DMUS_PLAYMODE_CHORD_ROOT;
  508.   {$EXTERNALSYM DMUS_PLAYMODE_FIXEDTOCHORD}
  509. (* In Pedalpoint, the key root is used and the notes only track the intervals in
  510.    the scale. The chord root and intervals are completely ignored. This is useful
  511.    for melodic lines that play relative to the key root.
  512. *)
  513.   DMUS_PLAYMODE_PEDALPOINT        = (DMUS_PLAYMODE_KEY_ROOT or DMUS_PLAYMODE_SCALE_INTERVALS);
  514.   {$EXTERNALSYM DMUS_PLAYMODE_PEDALPOINT}
  515. (* In the Melodic mode, the chord root is used but the notes only track the intervals in
  516.    the scale. The key root and chord intervals are completely ignored. This is useful
  517.    for melodic lines that play relative to the chord root.
  518. *)
  519.   DMUS_PLAYMODE_MELODIC           = (DMUS_PLAYMODE_CHORD_ROOT or DMUS_PLAYMODE_SCALE_INTERVALS);
  520.   {$EXTERNALSYM DMUS_PLAYMODE_MELODIC}
  521. (* Normal chord mode is the prevalent playback mode.
  522.    The notes track the intervals in the chord, which is based on the chord root.
  523.    If there is a scale component to the MusicValue, the additional intervals
  524.    are pulled from the scale and added.
  525.    If the chord does not have an interval to match the chord component of
  526.    the MusicValue, the note is silent.
  527. *)
  528.   DMUS_PLAYMODE_NORMALCHORD       = (DMUS_PLAYMODE_CHORD_ROOT or DMUS_PLAYMODE_CHORD_INTERVALS);
  529.   {$EXTERNALSYM DMUS_PLAYMODE_NORMALCHORD}
  530. (* If it is desirable to play a note that is above the top of the chord, the
  531.    always play mode (known as "purpleized" in a former life) finds a position
  532.    for the note by using intervals from the scale. Essentially, this mode is
  533.    a combination of the Normal and Melodic playback modes, where a failure
  534.    in Normal causes a second try in Melodic mode.
  535. *)
  536.   DMUS_PLAYMODE_ALWAYSPLAY        = (DMUS_PLAYMODE_MELODIC or DMUS_PLAYMODE_NORMALCHORD);
  537.   {$EXTERNALSYM DMUS_PLAYMODE_ALWAYSPLAY}
  538. (* These playmodes are new for dx8. *)
  539. (* In PedalpointChord, the key root is used and the notes only track the intervals in
  540.    the chord. The chord root and scale intervals are completely ignored. This is useful
  541.    for chordal lines that play relative to the key root.
  542. *)
  543.   DMUS_PLAYMODE_PEDALPOINTCHORD   = (DMUS_PLAYMODE_KEY_ROOT or DMUS_PLAYMODE_CHORD_INTERVALS);
  544.   {$EXTERNALSYM DMUS_PLAYMODE_PEDALPOINTCHORD}
  545. (* For completeness, here's a mode that tries for pedalpointchord, but if it fails
  546.    uses scale intervals
  547. *)
  548.   DMUS_PLAYMODE_PEDALPOINTALWAYS  = (DMUS_PLAYMODE_PEDALPOINT or DMUS_PLAYMODE_PEDALPOINTCHORD);
  549.   {$EXTERNALSYM DMUS_PLAYMODE_PEDALPOINTALWAYS}
  550.   (*  Legacy names for modes... *)
  551.   DMUS_PLAYMODE_PURPLEIZED        = DMUS_PLAYMODE_ALWAYSPLAY;
  552.   {$EXTERNALSYM DMUS_PLAYMODE_PURPLEIZED}
  553.   DMUS_PLAYMODE_SCALE_ROOT        = DMUS_PLAYMODE_KEY_ROOT;
  554.   {$EXTERNALSYM DMUS_PLAYMODE_SCALE_ROOT}
  555.   DMUS_PLAYMODE_FIXEDTOSCALE      = DMUS_PLAYMODE_FIXEDTOKEY;
  556.   {$EXTERNALSYM DMUS_PLAYMODE_FIXEDTOSCALE}
  557. const
  558.   DMUS_TEMPO_MAX          = 1000;
  559.   {$EXTERNALSYM DMUS_TEMPO_MAX}
  560.   DMUS_TEMPO_MIN          = 1;
  561.   {$EXTERNALSYM DMUS_TEMPO_MIN}
  562.   DMUS_MASTERTEMPO_MAX    = 100.0;
  563.   {$EXTERNALSYM DMUS_MASTERTEMPO_MAX}
  564.   DMUS_MASTERTEMPO_MIN    = 0.01;
  565.   {$EXTERNALSYM DMUS_MASTERTEMPO_MIN}
  566. const
  567.   DMUS_CURVE_RESET = 1;              (* When set, the nResetValue must be sent when the
  568.                                         time is reached or an invalidate occurs because
  569.                                         of a transition. If not set, the curve stays
  570.                                         permanently stuck at the new value. *)
  571.   {$EXTERNALSYM DMUS_CURVE_RESET}
  572.   DMUS_CURVE_START_FROM_CURRENT = 2; (* Ignore Start, start the curve at the current value.
  573.                                         This only works for volume, expression, and pitchbend. *)
  574.   {$EXTERNALSYM DMUS_CURVE_START_FROM_CURRENT}
  575.   (* Curve shapes *)
  576.   DMUS_CURVES_LINEAR  = 0;
  577.   {$EXTERNALSYM DMUS_CURVES_LINEAR}
  578.   DMUS_CURVES_INSTANT = 1;
  579.   {$EXTERNALSYM DMUS_CURVES_INSTANT}
  580.   DMUS_CURVES_EXP     = 2;
  581.   {$EXTERNALSYM DMUS_CURVES_EXP}
  582.   DMUS_CURVES_LOG     = 3;
  583.   {$EXTERNALSYM DMUS_CURVES_LOG}
  584.   DMUS_CURVES_SINE    = 4;
  585.   {$EXTERNALSYM DMUS_CURVES_SINE}
  586.   (* curve types *)
  587.   DMUS_CURVET_PBCURVE      = $03;   // Pitch bend curve.
  588.   {$EXTERNALSYM DMUS_CURVET_PBCURVE}
  589.   DMUS_CURVET_CCCURVE      = $04;   // Control change curve.
  590.   {$EXTERNALSYM DMUS_CURVET_CCCURVE}
  591.   DMUS_CURVET_MATCURVE     = $05;   // Mono aftertouch curve.
  592.   {$EXTERNALSYM DMUS_CURVET_MATCURVE}
  593.   DMUS_CURVET_PATCURVE     = $06;   // Poly aftertouch curve.
  594.   {$EXTERNALSYM DMUS_CURVET_PATCURVE}
  595.   DMUS_CURVET_RPNCURVE     = $07;   // RPN curve with curve type in wParamType.
  596.   {$EXTERNALSYM DMUS_CURVET_RPNCURVE}
  597.   DMUS_CURVET_NRPNCURVE    = $08;   // NRPN curve with curve type in wParamType.
  598.   {$EXTERNALSYM DMUS_CURVET_NRPNCURVE}
  599. const
  600. (* notification type values *)
  601.   (* The following correspond to GUID_NOTIFICATION_SEGMENT *)
  602.   DMUS_NOTIFICATION_SEGSTART       = 0;
  603.   {$EXTERNALSYM DMUS_NOTIFICATION_SEGSTART}
  604.   DMUS_NOTIFICATION_SEGEND         = 1;
  605.   {$EXTERNALSYM DMUS_NOTIFICATION_SEGEND}
  606.   DMUS_NOTIFICATION_SEGALMOSTEND   = 2;
  607.   {$EXTERNALSYM DMUS_NOTIFICATION_SEGALMOSTEND}
  608.   DMUS_NOTIFICATION_SEGLOOP        = 3;
  609.   {$EXTERNALSYM DMUS_NOTIFICATION_SEGLOOP}
  610.   DMUS_NOTIFICATION_SEGABORT       = 4;
  611.   {$EXTERNALSYM DMUS_NOTIFICATION_SEGABORT}
  612.   (* The following correspond to GUID_NOTIFICATION_PERFORMANCE *)
  613.   DMUS_NOTIFICATION_MUSICSTARTED   = 0;
  614.   {$EXTERNALSYM DMUS_NOTIFICATION_MUSICSTARTED}
  615.   DMUS_NOTIFICATION_MUSICSTOPPED   = 1;
  616.   {$EXTERNALSYM DMUS_NOTIFICATION_MUSICSTOPPED}
  617.   DMUS_NOTIFICATION_MUSICALMOSTEND = 2;
  618.   {$EXTERNALSYM DMUS_NOTIFICATION_MUSICALMOSTEND}
  619.   (* The following corresponds to GUID_NOTIFICATION_MEASUREANDBEAT *)
  620.   DMUS_NOTIFICATION_MEASUREBEAT    = 0;
  621.   {$EXTERNALSYM DMUS_NOTIFICATION_MEASUREBEAT}
  622.   (* The following corresponds to GUID_NOTIFICATION_CHORD *)
  623.   DMUS_NOTIFICATION_CHORD          = 0;
  624.   {$EXTERNALSYM DMUS_NOTIFICATION_CHORD}
  625.   (* The following correspond to GUID_NOTIFICATION_COMMAND *)
  626.   DMUS_NOTIFICATION_GROOVE         = 0;
  627.   {$EXTERNALSYM DMUS_NOTIFICATION_GROOVE}
  628.   DMUS_NOTIFICATION_EMBELLISHMENT  = 1;
  629.   {$EXTERNALSYM DMUS_NOTIFICATION_EMBELLISHMENT}
  630.   (* The following corresponds to GUID_NOTIFICATION_RECOMPOSE *)
  631.   DMUS_NOTIFICATION_RECOMPOSE          = 0;
  632.   {$EXTERNALSYM DMUS_NOTIFICATION_RECOMPOSE}
  633. const
  634.   DMUS_WAVEF_OFF           = 1;       // If wave is playing and this is the off message.
  635.   {$EXTERNALSYM DMUS_WAVEF_OFF}
  636.   DMUS_WAVEF_STREAMING     = 2;       // If wave is streaming.
  637.   {$EXTERNALSYM DMUS_WAVEF_STREAMING}
  638.   DMUS_WAVEF_NOINVALIDATE  = 4;       // Don't invalidate this wave.
  639.   {$EXTERNALSYM DMUS_WAVEF_NOINVALIDATE}
  640.   DMUS_WAVEF_NOPREROLL     = 8;       // Don't preroll any wave data.
  641.   {$EXTERNALSYM DMUS_WAVEF_NOPREROLL}
  642.   DMUS_WAVEF_IGNORELOOPS   = $20;     // Ignore segment looping.
  643.   {$EXTERNALSYM DMUS_WAVEF_IGNORELOOPS}
  644. const
  645.   DMUS_MAX_NAME           = 64;         (* Maximum object name length. *)
  646.   {$EXTERNALSYM DMUS_MAX_NAME}
  647.   DMUS_MAX_CATEGORY       = 64;         (* Maximum object category name length. *)
  648.   {$EXTERNALSYM DMUS_MAX_CATEGORY}
  649.   DMUS_MAX_FILENAME       = MAX_PATH;
  650.   {$EXTERNALSYM DMUS_MAX_FILENAME}
  651. type
  652.   PDMusVersion = ^TDMusVersion;
  653.   _DMUS_VERSION = packed record
  654.     dwVersionMS: DWORD;
  655.     dwVersionLS: DWORD;
  656.   end;
  657.   {$EXTERNALSYM _DMUS_VERSION}
  658.   DMUS_VERSION = _DMUS_VERSION;
  659.   {$EXTERNALSYM DMUS_VERSION}
  660.   TDMusVersion = _DMUS_VERSION;
  661.   // Time Signature structure, used by IDirectMusicStyle
  662.   // Also used as a parameter for GetParam() and SetParam
  663.   PDMusTimeSignature = ^TDMusTimeSignature;
  664.   _DMUS_TIMESIGNATURE = packed record
  665.     mtTime: TMusicTime;
  666.     bBeatsPerMeasure: Byte;       (* beats per measure (top of time sig) *)
  667.     bBeat: Byte;                  (* what note receives the beat (bottom of time sig.) *)
  668.                                   (* we can assume that 0 means 256th note *)
  669.     wGridsPerBeat: Word;          (* grids per beat *)
  670.   end;
  671.   {$EXTERNALSYM _DMUS_TIMESIGNATURE}
  672.   DMUS_TIMESIGNATURE = _DMUS_TIMESIGNATURE;
  673.   {$EXTERNALSYM DMUS_TIMESIGNATURE}
  674.   TDMusTimeSignature = _DMUS_TIMESIGNATURE;
  675.   PDMusValidStartParam = ^TDMusValidStartParam;
  676.   _DMUS_VALID_START_PARAM = packed record
  677.     mtTime: TMUSICTIME;                     (* Time of the first legal start
  678.                                                point after (or including) the requested time.
  679.                                                This is a returned value.
  680.                                                Time format is the relative offset from requested time. *)
  681.   end;
  682.   {$EXTERNALSYM _DMUS_VALID_START_PARAM}
  683.   DMUS_VALID_START_PARAM = _DMUS_VALID_START_PARAM;
  684.   {$EXTERNALSYM DMUS_VALID_START_PARAM}
  685.   TDMusValidStartParam = _DMUS_VALID_START_PARAM;
  686.   PDMusPlayMarkerParam = ^TDMusPlayMarkerParam;
  687.   _DMUS_PLAY_MARKER_PARAM = packed record
  688.     mtTime: TMusicTime;                     (* Time of the first legal segment play
  689.                                                marker before (or including) the requested time.
  690.                                                This is a returned value.
  691.                                                Time format is the relative offset from requested time. *)
  692.   end;
  693.   {$EXTERNALSYM _DMUS_PLAY_MARKER_PARAM}
  694.   DMUS_PLAY_MARKER_PARAM = _DMUS_PLAY_MARKER_PARAM;
  695.   {$EXTERNALSYM DMUS_PLAY_MARKER_PARAM}
  696.   TDMusPlayMarkerParam = _DMUS_PLAY_MARKER_PARAM;
  697. //      The DMUSOBJECTDESC structure is used to communicate everything you could
  698. //      possibly use to describe a DirectMusic object.
  699.   PDMusObjectDesc = ^TDMusObjectDesc;
  700.   _DMUS_OBJECTDESC = packed record
  701.     dwSize: DWORD;                 (* Size of this structure. *)
  702.     dwValidData: DWORD;            (* Flags indicating which fields below are valid. *)
  703.     guidObject: TGUID;             (* Unique ID for this object. *)
  704.     guidClass: TGUID;              (* GUID for the class of object. *)
  705.     ftDate: TFileTime;             (* Last edited date of object. *)
  706.     vVersion: TDMusVersion;        (* Version. *)
  707.     wszName: array[0..DMUS_MAX_NAME-1] of WideChar; (* Name of object. *)
  708.     wszCategory: array[0..DMUS_MAX_CATEGORY-1] of WideChar; (* Category for object (optional). *)
  709.     wszFileName: array[0..DMUS_MAX_FILENAME-1] of WideChar; (* File path. *)
  710.     llMemLength: LONGLONG;         (* Size of Memory data. *)
  711.     pbMemData: PByte;              (* Memory pointer for data. *)
  712.     pStream: IStream;              (* Stream with data. *)
  713.   end;
  714.   {$EXTERNALSYM _DMUS_OBJECTDESC}
  715.   DMUS_OBJECTDESC = _DMUS_OBJECTDESC;
  716.   {$EXTERNALSYM DMUS_OBJECTDESC}
  717.   TDMusObjectDesc = _DMUS_OBJECTDESC;
  718. //      Flags for dwValidData. When set, a flag indicates that the
  719. //      corresponding field in DMUSOBJECTDESC holds valid data.
  720. const
  721.   DMUS_OBJ_OBJECT         = (1 shl 0);     (* Object GUID is valid. *)
  722.   {$EXTERNALSYM DMUS_OBJ_OBJECT}
  723.   DMUS_OBJ_CLASS          = (1 shl 1);     (* Class GUID is valid. *)
  724.   {$EXTERNALSYM DMUS_OBJ_CLASS}
  725.   DMUS_OBJ_NAME           = (1 shl 2);     (* Name is valid. *)
  726.   {$EXTERNALSYM DMUS_OBJ_NAME}
  727.   DMUS_OBJ_CATEGORY       = (1 shl 3);     (* Category is valid. *)
  728.   {$EXTERNALSYM DMUS_OBJ_CATEGORY}
  729.   DMUS_OBJ_FILENAME       = (1 shl 4);     (* File path is valid. *)
  730.   {$EXTERNALSYM DMUS_OBJ_FILENAME}
  731.   DMUS_OBJ_FULLPATH       = (1 shl 5);     (* Path is full path. *)
  732.   {$EXTERNALSYM DMUS_OBJ_FULLPATH}
  733.   DMUS_OBJ_URL            = (1 shl 6);     (* Path is URL. *)
  734.   {$EXTERNALSYM DMUS_OBJ_URL}
  735.   DMUS_OBJ_VERSION        = (1 shl 7);     (* Version is valid. *)
  736.   {$EXTERNALSYM DMUS_OBJ_VERSION}
  737.   DMUS_OBJ_DATE           = (1 shl 8);     (* Date is valid. *)
  738.   {$EXTERNALSYM DMUS_OBJ_DATE}
  739.   DMUS_OBJ_LOADED         = (1 shl 9);     (* Object is currently loaded in memory. *)
  740.   {$EXTERNALSYM DMUS_OBJ_LOADED}
  741.   DMUS_OBJ_MEMORY         = (1 shl 10);    (* Object is pointed to by pbMemData. *)
  742.   {$EXTERNALSYM DMUS_OBJ_MEMORY}
  743.   DMUS_OBJ_STREAM         = (1 shl 11);    (* Object is stored in pStream. *)
  744.   {$EXTERNALSYM DMUS_OBJ_STREAM}
  745. type
  746. (*      The DMUS_SCRIPT_ERRORINFO structure describes an error that occurred in a script.
  747.         It is returned by methods in IDirectMusicScript. *)
  748.   PDMusScriptErrorInfo = ^TDMusScriptErrorInfo;
  749.   _DMUS_SCRIPT_ERRORINFO = packed record
  750.     dwSize: DWORD; (* Size of this structure. *)
  751.     hr: HRESULT;
  752.     ulLineNumber: Cardinal;
  753.     ichCharPosition: Longint;
  754.     wszSourceFile: array[0..DMUS_MAX_FILENAME-1] of WideChar;
  755.     wszSourceComponent: array[0..DMUS_MAX_FILENAME-1] of WideChar;
  756.     wszDescription: array[0..DMUS_MAX_FILENAME-1] of WideChar;
  757.     wszSourceLineText: array[0..DMUS_MAX_FILENAME-1] of WideChar;
  758.   end;
  759.   {$EXTERNALSYM _DMUS_SCRIPT_ERRORINFO}
  760.   DMUS_SCRIPT_ERRORINFO = _DMUS_SCRIPT_ERRORINFO;
  761.   {$EXTERNALSYM DMUS_SCRIPT_ERRORINFO}
  762.   TDMusScriptErrorInfo = _DMUS_SCRIPT_ERRORINFO;
  763. (*  Track configuration flags, used with IDirectMusicSegment8::SetTrackConfig() *)
  764. const
  765.   DMUS_TRACKCONFIG_OVERRIDE_ALL           = 1;   (* This track should get parameters from this segment before controlling and primary tracks. *)
  766.   {$EXTERNALSYM DMUS_TRACKCONFIG_OVERRIDE_ALL}
  767.   DMUS_TRACKCONFIG_OVERRIDE_PRIMARY       = 2;   (* This track should get parameters from this segment before the primary segment tracks. *)
  768.   {$EXTERNALSYM DMUS_TRACKCONFIG_OVERRIDE_PRIMARY}
  769.   DMUS_TRACKCONFIG_FALLBACK               = 4;     (* This track should get parameters from this segment if the primary and controlling segments don't succeed. *)
  770.   {$EXTERNALSYM DMUS_TRACKCONFIG_FALLBACK}
  771.   DMUS_TRACKCONFIG_CONTROL_ENABLED        = 8;     (* GetParam() enabled for this track. *)
  772.   {$EXTERNALSYM DMUS_TRACKCONFIG_CONTROL_ENABLED}
  773.   DMUS_TRACKCONFIG_PLAY_ENABLED           = $10;  (* Play() enabled for this track. *)
  774.   {$EXTERNALSYM DMUS_TRACKCONFIG_PLAY_ENABLED}
  775.   DMUS_TRACKCONFIG_NOTIFICATION_ENABLED   = $20;  (* Notifications enabled for this track. *)
  776.   {$EXTERNALSYM DMUS_TRACKCONFIG_NOTIFICATION_ENABLED}
  777.   DMUS_TRACKCONFIG_PLAY_CLOCKTIME         = $40;  (* This track plays in clock time, not music time. *)
  778.   {$EXTERNALSYM DMUS_TRACKCONFIG_PLAY_CLOCKTIME}
  779.   DMUS_TRACKCONFIG_PLAY_COMPOSE          = $80;  (* This track should regenerate data each time it starts playing. *)
  780.   {$EXTERNALSYM DMUS_TRACKCONFIG_PLAY_COMPOSE}
  781.   DMUS_TRACKCONFIG_LOOP_COMPOSE           = $100; (* This track should regenerate data each time it repeats. *)
  782.   {$EXTERNALSYM DMUS_TRACKCONFIG_LOOP_COMPOSE}
  783.   DMUS_TRACKCONFIG_COMPOSING              = $200; (* This track is used to compose other tracks. *)
  784.   {$EXTERNALSYM DMUS_TRACKCONFIG_COMPOSING}
  785.   DMUS_TRACKCONFIG_CONTROL_PLAY           = $10000; (* This track, when played in a controlling segment, overrides playback of primary segment tracks. *)
  786.   {$EXTERNALSYM DMUS_TRACKCONFIG_CONTROL_PLAY}
  787.   DMUS_TRACKCONFIG_CONTROL_NOTIFICATION   = $20000; (* This track, when played in a controlling segment, overrides notification of primary segment tracks. *)
  788.   {$EXTERNALSYM DMUS_TRACKCONFIG_CONTROL_NOTIFICATION}
  789. (* Additional track config flags for composing transitions *)
  790.   DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART    = $400;  (* Get track info from start of From segment *)
  791.   {$EXTERNALSYM DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART}
  792.   DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT  = $800;  (* Get track info from current place in From segment *)
  793.   {$EXTERNALSYM DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT}
  794.   DMUS_TRACKCONFIG_TRANS1_TOSEGSTART      = $1000; (* Get track info from start of To segment *)
  795.   {$EXTERNALSYM DMUS_TRACKCONFIG_TRANS1_TOSEGSTART}
  796.   DMUS_TRACKCONFIG_DEFAULT    = (DMUS_TRACKCONFIG_CONTROL_ENABLED or DMUS_TRACKCONFIG_PLAY_ENABLED or DMUS_TRACKCONFIG_NOTIFICATION_ENABLED);
  797.   {$EXTERNALSYM DMUS_TRACKCONFIG_DEFAULT}
  798. type
  799.   // Get/SetParam structs for commands
  800.   // PARAM structures, used by GetParam() and SetParam()
  801.   PDMusCommandParam = ^TDMusCommandParam;
  802.   _DMUS_COMMAND_PARAM = packed record
  803.     bCommand: Byte;
  804.     bGrooveLevel: Byte;
  805.     bGrooveRange: Byte;
  806.     bRepeatMode: Byte;
  807.   end;
  808.   {$EXTERNALSYM _DMUS_COMMAND_PARAM}
  809.   DMUS_COMMAND_PARAM = _DMUS_COMMAND_PARAM;
  810.   {$EXTERNALSYM DMUS_COMMAND_PARAM}
  811.   TDMusCommandParam = _DMUS_COMMAND_PARAM;
  812.   PDMusCommandParam2 = ^TDMusCommandParam2;
  813.   _DMUS_COMMAND_PARAM_2 = packed record
  814.     mtTime: TMusicTime;
  815.     bCommand: Byte;
  816.     bGrooveLevel: Byte;
  817.     bGrooveRange: Byte;
  818.     bRepeatMode: Byte;
  819.   end;
  820.   {$EXTERNALSYM _DMUS_COMMAND_PARAM_2}
  821.   DMUS_COMMAND_PARAM_2 = _DMUS_COMMAND_PARAM_2;
  822.   {$EXTERNALSYM DMUS_COMMAND_PARAM_2}
  823.   TDMusCommandParam2 = _DMUS_COMMAND_PARAM_2;
  824. const
  825.   DMUSB_LOADED    = (1 shl 0);        (* Set when band has been loaded *)
  826.   {$EXTERNALSYM DMUSB_LOADED}
  827.   DMUSB_DEFAULT   = (1 shl 1);        (* Set when band is default band for a style *)
  828.   {$EXTERNALSYM DMUSB_DEFAULT}
  829.   
  830. type
  831.   IDirectMusicTrack = interface;
  832.   IDirectMusicSegment = interface;
  833.   IDirectMusicSegmentState = interface;
  834.   IDirectMusicGraph = interface;
  835.   IDirectMusicPerformance = interface;
  836.   IDirectMusicTool = interface;
  837.   IDirectMusicChordMap = interface;
  838.   PIDirectMusicSegmentState = ^IDirectMusicSegmentState;
  839. // Translator: Structure declarations below (until interface declaration) were
  840. // moved here from above of header due to refereces to IDirectMusicTool and
  841. // IDirectMusicGraph interfaces
  842. {
  843. //Translator: this '#define' will be used later is several places
  844. //#define DMUS_PMSG_PART
  845.     dwSize: DWORD;
  846.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  847.     mtTime: TMusicTime;        (* music time *)
  848.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  849.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  850.                                (* use this to determine the port/channel. *)
  851.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  852.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  853.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  854.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  855.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  856.                                (* identify a specific event. For DirectX 6.0, *)
  857.                                (* this field should always be 0. *)
  858.     dwGroupID: DWORD;          (* Track group id *)
  859.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  860. }
  861. (* every DMUS_PMSG is based off of this structure. The Performance needs
  862.    to access these members consistently in every PMSG that goes through it. *)
  863.   PDMusPMsg = ^TDMusPMsg;
  864.   _DMUS_PMSG = packed record
  865.     (* begin DMUS_PMSG_PART *)
  866.     dwSize: DWORD;
  867.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  868.     mtTime: TMusicTime;        (* music time *)
  869.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  870.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  871.                                (* use this to determine the port/channel. *)
  872.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  873.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  874.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  875.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  876.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  877.                                (* identify a specific event. For DirectX 6.0, *)
  878.                                (* this field should always be 0. *)
  879.     dwGroupID: DWORD;          (* Track group id *)
  880.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  881.     (* end DMUS_PMSG_PART *)
  882.   end;
  883.   {$EXTERNALSYM _DMUS_PMSG}
  884.   DMUS_PMSG = _DMUS_PMSG;
  885.   {$EXTERNALSYM DMUS_PMSG}
  886.   TDMusPMsg = _DMUS_PMSG;
  887.   (* DMUS_NOTE_PMSG *)
  888.   PDMusNotePMsg = ^TDMusNotePMsg;
  889.   _DMUS_NOTE_PMSG = packed record
  890.     (* begin DMUS_PMSG_PART *)
  891.     dwSize: DWORD;
  892.     rtTime: TReferenceTime;    // real time (in 100 nanosecond increments)
  893.     mtTime: TMusicTime;        // music time
  894.     dwFlags: DWORD;            // various bits (see DMUS_PMSGF_FLAGS enumeration)
  895.     dwPChannel: DWORD;         // Performance Channel. The Performance can
  896.                                // use this to determine the port/channel.
  897.     dwVirtualTrackID: DWORD;   // virtual track ID
  898.     pTool: IDirectMusicTool;   // tool interface pointer
  899.     pGraph: IDirectMusicGraph; // tool graph interface pointer
  900.     dwType: DWORD;             // PMSG type (see DMUS_PMSGT_TYPES defines)
  901.     dwVoiceID: DWORD;          // unique voice id which allows synthesizers to
  902.                                // identify a specific event. For DirectX 6.0,
  903.                                // this field should always be 0.
  904.     dwGroupID: DWORD;          // Track group id
  905.     punkUser: IUnknown;        // user com pointer, auto released upon PMSG free
  906.     (* end DMUS_PMSG_PART *)
  907.     mtDuration: TMusicTime;     // duration
  908.     wMusicValue: Word;          // Description of note in chord and key.
  909.     wMeasure: Word;             // Measure in which this note occurs
  910.     nOffset: Smallint;              // Offset from grid at which this note occurs
  911.     bBeat: Byte;                // Beat (in measure) at which this note occurs
  912.     bGrid: Byte;                // Grid offset from beat at which this note occurs
  913.     bVelocity: Byte;            // Note velocity
  914.     bFlags: Byte;               // see DMUS_NOTEF_FLAGS
  915.     bTimeRange: Byte;           // Range to randomize time.
  916.     bDurRange: Byte;            // Range to randomize duration.
  917.     bVelRange: Byte;            // Range to randomize velocity.
  918.     bPlayModeFlags: Byte;       // Play mode
  919.     bSubChordLevel: Byte;       // Which subchord level this note uses.
  920.     bMidiValue: Byte;           // The MIDI note value, converted from wMusicValue
  921.     cTranspose: Char;           // Transposition to add to midi note value after converted from wMusicValue.
  922.   end;
  923.   {$EXTERNALSYM _DMUS_NOTE_PMSG}
  924.   DMUS_NOTE_PMSG = _DMUS_NOTE_PMSG;
  925.   {$EXTERNALSYM DMUS_NOTE_PMSG}
  926.   TDMusNotePMsg = _DMUS_NOTE_PMSG;
  927.   (* DMUS_MIDI_PMSG *)
  928.   PDMusMidiPMsg = ^TDMusMidiPMsg;
  929.   _DMUS_MIDI_PMSG = packed record
  930.     (* begin DMUS_PMSG_PART *)
  931.     dwSize: DWORD;
  932.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  933.     mtTime: TMusicTime;        (* music time *)
  934.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  935.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  936.                                (* use this to determine the port/channel. *)
  937.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  938.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  939.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  940.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  941.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  942.                                (* identify a specific event. For DirectX 6.0, *)
  943.                                (* this field should always be 0. *)
  944.     dwGroupID: DWORD;          (* Track group id *)
  945.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  946.     (* end DMUS_PMSG_PART *)
  947.     bStatus: Byte;
  948.     bByte1: Byte;
  949.     bByte2: Byte;
  950.     bPad: array[0..0] of Byte;
  951.   end;
  952.   {$EXTERNALSYM _DMUS_MIDI_PMSG}
  953.   DMUS_MIDI_PMSG = _DMUS_MIDI_PMSG;
  954.   {$EXTERNALSYM DMUS_MIDI_PMSG}
  955.   TDMusMidiPMsg = _DMUS_MIDI_PMSG;
  956.   (* DMUS_PATCH_PMSG *)
  957.   PDMusPatchPMsg = ^TDMusPatchPMsg;
  958.   _DMUS_PATCH_PMSG = packed record
  959.     (* begin DMUS_PMSG_PART *)
  960.     dwSize: DWORD;
  961.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  962.     mtTime: TMusicTime;        (* music time *)
  963.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  964.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  965.                                (* use this to determine the port/channel. *)
  966.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  967.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  968.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  969.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  970.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  971.                                (* identify a specific event. For DirectX 6.0, *)
  972.                                (* this field should always be 0. *)
  973.     dwGroupID: DWORD;          (* Track group id *)
  974.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  975.     (* end DMUS_PMSG_PART *)
  976.     byInstrument: Byte;
  977.     byMSB: Byte;
  978.     byLSB: Byte;
  979.     byPad: array[0..0] of Byte;
  980.   end;
  981.   {$EXTERNALSYM _DMUS_PATCH_PMSG}
  982.   DMUS_PATCH_PMSG = _DMUS_PATCH_PMSG;
  983.   {$EXTERNALSYM DMUS_PATCH_PMSG}
  984.   TDMusPatchPMsg = _DMUS_PATCH_PMSG;
  985.   (* DMUS_TRANSPOSE_PMSG *)
  986.   PDMusTransposePMsg = ^TDMusTransposePMsg;
  987.   _DMUS_TRANSPOSE_PMSG = packed record
  988.     (* begin DMUS_PMSG_PART *)
  989.     dwSize: DWORD;
  990.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  991.     mtTime: TMusicTime;        (* music time *)
  992.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  993.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  994.                                (* use this to determine the port/channel. *)
  995.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  996.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  997.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *) 
  998.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  999.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1000.                                (* identify a specific event. For DirectX 6.0, *)
  1001.                                (* this field should always be 0. *)
  1002.     dwGroupID: DWORD;          (* Track group id *)
  1003.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1004.     (* end DMUS_PMSG_PART *)
  1005.     nTranspose: Smallint;
  1006.     (* Following exists only under DX8 and on (check dwFlags for DMUS_PMSGF_DX8) *)
  1007.     wMergeIndex: Word;     (* Allows multiple parameters to be merged (pitchbend, volume, and expression.)*)
  1008.   end;
  1009.   {$EXTERNALSYM _DMUS_TRANSPOSE_PMSG}
  1010.   DMUS_TRANSPOSE_PMSG = _DMUS_TRANSPOSE_PMSG;
  1011.   {$EXTERNALSYM DMUS_TRANSPOSE_PMSG}
  1012.   TDMusTransposePMsg = _DMUS_TRANSPOSE_PMSG;
  1013.   (* DMUS_CHANNEL_PRIORITY_PMSG *)
  1014.   PDMusChannelPriorityPMsg = ^TDMusChannelPriorityPMsg;
  1015.   _DMUS_CHANNEL_PRIORITY_PMSG = packed record
  1016.     (* begin DMUS_PMSG_PART *)
  1017.     dwSize: DWORD;
  1018.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1019.     mtTime: TMusicTime;        (* music time *)
  1020.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1021.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1022.                                (* use this to determine the port/channel. *)
  1023.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1024.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1025.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  1026.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1027.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1028.                                (* identify a specific event. For DirectX 6.0, *)
  1029.                                (* this field should always be 0. *)
  1030.     dwGroupID: DWORD;          (* Track group id *)
  1031.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1032.     (* end DMUS_PMSG_PART *)
  1033.     dwChannelPriority:   DWORD;
  1034.   end;
  1035.   {$EXTERNALSYM _DMUS_CHANNEL_PRIORITY_PMSG}
  1036.   DMUS_CHANNEL_PRIORITY_PMSG = _DMUS_CHANNEL_PRIORITY_PMSG;
  1037.   {$EXTERNALSYM DMUS_CHANNEL_PRIORITY_PMSG}
  1038.   TDMusChannelPriorityPMsg = _DMUS_CHANNEL_PRIORITY_PMSG;
  1039.   (* DMUS_TEMPO_PMSG *)
  1040.   PDMusTempoPMsg = ^TDMusTempoPMsg;
  1041.   _DMUS_TEMPO_PMSG = packed record
  1042.     (* begin DMUS_PMSG_PART *)
  1043.     dwSize: DWORD;
  1044.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1045.     mtTime: TMusicTime;        (* music time *)
  1046.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1047.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1048.                                (* use this to determine the port/channel. *)
  1049.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1050.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1051.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  1052.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1053.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1054.                                (* identify a specific event. For DirectX 6.0, *)
  1055.                                (* this field should always be 0. *)
  1056.     dwGroupID: DWORD;          (* Track group id *)
  1057.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1058.     (* end DMUS_PMSG_PART *)
  1059.     dblTempo: Double;                       (* the tempo *)
  1060.   end;
  1061.   {$EXTERNALSYM _DMUS_TEMPO_PMSG}
  1062.   DMUS_TEMPO_PMSG = _DMUS_TEMPO_PMSG;
  1063.   {$EXTERNALSYM DMUS_TEMPO_PMSG}
  1064.   TDMusTempoPMsg = _DMUS_TEMPO_PMSG;
  1065.   (* DMUS_SYSEX_PMSG *)
  1066.   PDMusSysexPMsg = ^TDMusSysexPMsg;
  1067.   _DMUS_SYSEX_PMSG = packed record
  1068.     (* begin DMUS_PMSG_PART *)
  1069.     dwSize: DWORD;
  1070.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1071.     mtTime: TMusicTime;        (* music time *)
  1072.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1073.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1074.                                (* use this to determine the port/channel. *)
  1075.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1076.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1077.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *) 
  1078.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1079.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1080.                                (* identify a specific event. For DirectX 6.0, *)
  1081.                                (* this field should always be 0. *)
  1082.     dwGroupID: DWORD;          (* Track group id *)
  1083.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1084.     (* end DMUS_PMSG_PART *)
  1085.     dwLen: DWORD;                 // length of the data
  1086.     abData: array[0..0] of Byte;  // array of data, length equal to dwLen
  1087.   end;
  1088.   {$EXTERNALSYM _DMUS_SYSEX_PMSG}
  1089.   DMUS_SYSEX_PMSG = _DMUS_SYSEX_PMSG;
  1090.   {$EXTERNALSYM DMUS_SYSEX_PMSG}
  1091.   TDMusSysexPMsg = _DMUS_SYSEX_PMSG;
  1092.   (* DMUS_CURVE_PMSG *)
  1093.   PDMusCurvePMsg = ^TDMusCurvePMsg;
  1094.   _DMUS_CURVE_PMSG = packed record
  1095.     (* begin DMUS_PMSG_PART *)
  1096.     dwSize: DWORD;
  1097.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1098.     mtTime: TMusicTime;        (* music time *)
  1099.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1100.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1101.                                (* use this to determine the port/channel. *)
  1102.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1103.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1104.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *) 
  1105.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1106.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1107.                                (* identify a specific event. For DirectX 6.0, *)
  1108.                                (* this field should always be 0. *)
  1109.     dwGroupID: DWORD;          (* Track group id *)
  1110.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1111.     (* end DMUS_PMSG_PART *)
  1112.     mtDuration: TMusicTime;      // how long this curve lasts
  1113.     mtOriginalStart: TMusicTime; // must be set to either zero when this PMSG is created or to the original mtTime of the curve
  1114.     mtResetDuration: TMusicTime; (* how long after the curve is finished to allow a flush or
  1115.                                         invalidation to reset to the reset value, nResetValue *)
  1116.     nStartValue: Smallint;       // curve's start value
  1117.     nEndValue: Smallint;         // curve's end value
  1118.     nResetValue: Smallint;       (* curve's reset value, set when a flush or invalidation
  1119.                                         occurs within mtDuration + mtResetDuration *)
  1120.     wMeasure: Word;              // Measure in which this curve occurs
  1121.     nOffset: Smallint;           // Offset from grid at which this curve occurs
  1122.     bBeat: Byte;                 // Beat (in measure) at which this curve occurs
  1123.     bGrid: Byte;                 // Grid offset from beat at which this curve occurs
  1124.     bType: Byte;                 // type of curve
  1125.     bCurveShape: Byte;           // shape of curve
  1126.     bCCData: Byte;               // CC# if this is a control change type
  1127.     bFlags: Byte;                // Curve reset and start from current value flags.
  1128.     // Following exists only under DX8 and on (check dwFlags for DMUS_PMSGF_DX8)
  1129.     wParamType: Word;            // RPN or NRPN parameter number.
  1130.     wMergeIndex: Word;           // Allows multiple parameters to be merged (pitchbend, volume, and expression.)*/
  1131.   end;
  1132.   {$EXTERNALSYM _DMUS_CURVE_PMSG}
  1133.   DMUS_CURVE_PMSG = _DMUS_CURVE_PMSG;
  1134.   {$EXTERNALSYM DMUS_CURVE_PMSG}
  1135.   TDMusCurvePMsg = _DMUS_CURVE_PMSG;
  1136.   enumDMUS_CURVE_FLAGS = DWORD;
  1137.   DMUS_CURVE_FLAGS = enumDMUS_CURVE_FLAGS;
  1138.   {$EXTERNALSYM DMUS_CURVE_FLAGS}
  1139.   TDMusCurveFlags = DMUS_CURVE_FLAGS;
  1140.   PDMusCurveFlags = ^TDMusCurveFlags;
  1141.   (* DMUS_TIMESIG_PMSG *)
  1142.   PDMusTimeSigPMsg = ^TDMusTimesigPMsg;
  1143.   _DMUS_TIMESIG_PMSG = packed record
  1144.     (* begin DMUS_PMSG_PART *)
  1145.     dwSize: DWORD;
  1146.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1147.     mtTime: TMusicTime;        (* music time *)
  1148.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1149.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1150.                                (* use this to determine the port/channel. *)
  1151.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1152.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1153.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  1154.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1155.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1156.                                (* identify a specific event. For DirectX 6.0, *)
  1157.                                (* this field should always be 0. *)
  1158.     dwGroupID: DWORD;          (* Track group id *)
  1159.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1160.     (* end DMUS_PMSG_PART *)
  1161.     // Time signatures define how many beats per measure, which note receives
  1162.     // the beat, and the grid resolution.
  1163.     bBeatsPerMeasure: Byte;       // beats per measure (top of time sig)
  1164.     bBeat: Byte;                  // what note receives the beat (bottom of time sig.)
  1165.                                   // we can assume that 0 means 256th note
  1166.     wGridsPerBeat: Word;          // grids per beat
  1167.   end;
  1168.   {$EXTERNALSYM _DMUS_TIMESIG_PMSG}
  1169.   DMUS_TIMESIG_PMSG = _DMUS_TIMESIG_PMSG;
  1170.   {$EXTERNALSYM DMUS_TIMESIG_PMSG}
  1171.   TDMusTimeSigPMsg = _DMUS_TIMESIG_PMSG;
  1172.   (* DMUS_NOTIFICATION_PMSG *)
  1173.   PDMusNotificationPMsg = ^TDMusNotificationPMsg;
  1174.   _DMUS_NOTIFICATION_PMSG = packed record
  1175.     (* begin DMUS_PMSG_PART *)
  1176.     dwSize: DWORD;
  1177.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1178.     mtTime: TMusicTime;        (* music time *)
  1179.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1180.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1181.                                (* use this to determine the port/channel. *)
  1182.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1183.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1184.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  1185.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1186.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1187.                                (* identify a specific event. For DirectX 6.0, *)
  1188.                                (* this field should always be 0. *)
  1189.     dwGroupID: DWORD;          (* Track group id *)
  1190.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1191.     (* end DMUS_PMSG_PART *)
  1192.     guidNotificationType: TGUID;
  1193.     dwNotificationOption: DWORD;
  1194.     dwField1: DWORD;
  1195.     dwField2: DWORD;
  1196.   end;
  1197.   {$EXTERNALSYM _DMUS_NOTIFICATION_PMSG}
  1198.   DMUS_NOTIFICATION_PMSG = _DMUS_NOTIFICATION_PMSG;
  1199.   {$EXTERNALSYM DMUS_NOTIFICATION_PMSG}
  1200.   TDMusNotificationPMsg = _DMUS_NOTIFICATION_PMSG;
  1201.   (* DMUS_WAVE_PMSG *)
  1202.   PDMusWavePMsg = ^TDMusWavePMsg;
  1203.   _DMUS_WAVE_PMSG = packed record
  1204.     (* begin DMUS_PMSG_PART *)
  1205.     dwSize: DWORD;
  1206.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1207.     mtTime: TMusicTime;        (* music time *)
  1208.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1209.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1210.                                (* use this to determine the port/channel. *)
  1211.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1212.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1213.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  1214.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1215.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1216.                                (* identify a specific event. For DirectX 6.0, *)
  1217.                                (* this field should always be 0. *)
  1218.     dwGroupID: DWORD;          (* Track group id *)
  1219.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1220.     (* end DMUS_PMSG_PART *)
  1221.     rtStartOffset: TReferenceTime;   (* How far into the wave to start, in reference time units only. *)
  1222.     rtDuration: TReferenceTime;      (* Duration of the wave, in either reference time or music time. *)
  1223.     lOffset: Longint;                (* Offset from actual time to logical time, in music or ref time. *)
  1224.     lVolume: Longint;                (* Initial volume, in 100ths of a dB. *)
  1225.     lPitch: Longint;                 (* Initial pitch, in 100ths of a semitone. *)
  1226.     bFlags: Byte;                    (* Flags, including DMUS_WAVEF_OFF... *)
  1227.   end;
  1228.   {$EXTERNALSYM _DMUS_WAVE_PMSG}
  1229.   DMUS_WAVE_PMSG = _DMUS_WAVE_PMSG;
  1230.   {$EXTERNALSYM DMUS_WAVE_PMSG}
  1231.   TDMusWavePMsg = _DMUS_WAVE_PMSG;
  1232.   (* DMUS_LYRIC_PMSG *)
  1233.   PDMusLyricPMsg = ^TDMusLyricPMsg;
  1234.   _DMUS_LYRIC_PMSG = packed record
  1235.     (* begin DMUS_PMSG_PART *)
  1236.     dwSize: DWORD;
  1237.     rtTime: TReferenceTime;    (* real time (in 100 nanosecond increments) *)
  1238.     mtTime: TMusicTime;        (* music time *)
  1239.     dwFlags: DWORD;            (* various bits (see DMUS_PMSGF_FLAGS enumeration) *)
  1240.     dwPChannel: DWORD;         (* Performance Channel. The Performance can *)
  1241.                                (* use this to determine the port/channel. *)
  1242.     dwVirtualTrackID: DWORD;   (* virtual track ID *)
  1243.     pTool: IDirectMusicTool;   (* tool interface pointer *)
  1244.     pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
  1245.     dwType: DWORD;             (* PMSG type (see DMUS_PMSGT_TYPES defines) *)
  1246.     dwVoiceID: DWORD;          (* unique voice id which allows synthesizers to *)
  1247.                                (* identify a specific event. For DirectX 6.0, *)
  1248.                                (* this field should always be 0. *)
  1249.     dwGroupID: DWORD;          (* Track group id *)
  1250.     punkUser: IUnknown;        (* user com pointer, auto released upon PMSG free *)
  1251.     (* end DMUS_PMSG_PART *)
  1252.     wszString: array[0..0] of WideChar;      (* null-terminated Unicode lyric string (structure is actually larger than size 1) *)
  1253.   end;
  1254.   {$EXTERNALSYM _DMUS_LYRIC_PMSG}
  1255.   DMUS_LYRIC_PMSG = _DMUS_LYRIC_PMSG;
  1256.   {$EXTERNALSYM DMUS_LYRIC_PMSG}
  1257.   TDMusLyricPMsg = _DMUS_LYRIC_PMSG;
  1258. (*)///////////////////////////////////////////////////////////////////
  1259. // IDirectMusicBand *)
  1260.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicBand);'}
  1261.   {$EXTERNALSYM IDirectMusicBand}
  1262.   IDirectMusicBand = interface(IUnknown)
  1263.     ['{d2ac28c0-b39b-11d1-8704-00600893b1bd}']
  1264.     (* IDirectMusicBand *)
  1265.     function CreateSegment(out ppSegment: IDirectMusicSegment): HResult; stdcall;
  1266.     function Download(pPerformance: IDirectMusicPerformance): HResult; stdcall;
  1267.     function Unload(pPerformance: IDirectMusicPerformance): HResult; stdcall;
  1268.   end;
  1269.   IDirectMusicBand8 = IDirectMusicBand;
  1270.   {$NODEFINE IDirectMusicBand8}
  1271.   {$HPPEMIT 'typedef _di_IDirectMusicBand _di_IDirectMusicBand8;'}
  1272. (*////////////////////////////////////////////////////////////////////
  1273. // IDirectMusicObject *)
  1274.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicObject);'}
  1275.   {$EXTERNALSYM IDirectMusicObject}
  1276.   IDirectMusicObject = interface(IUnknown)
  1277.     ['{d2ac28b5-b39b-11d1-8704-00600893b1bd}']
  1278.     (* IDirectMusicObject *)
  1279.     function GetDescriptor(out pDesc: TDMusObjectDesc): HResult; stdcall;
  1280.     function SetDescriptor(const pDesc: TDMusObjectDesc): HResult; stdcall;
  1281.     function ParseDescriptor(var pStream; out pDesc: TDMusObjectDesc): HResult; stdcall;
  1282.   end;
  1283.   IDirectMusicObject8 = IDirectMusicObject;
  1284.   {$NODEFINE IDirectMusicObject8}
  1285.   {$HPPEMIT 'typedef _di_IDirectMusicObject _di_IDirectMusicObject8;'}
  1286. (*////////////////////////////////////////////////////////////////////
  1287. // IDirectMusicLoader *)
  1288.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicLoader);'}
  1289.   {$EXTERNALSYM IDirectMusicLoader}
  1290.   IDirectMusicLoader = interface(IUnknown)
  1291.     ['{2ffaaca2-5dca-11d2-afa6-00aa0024d8b6}']
  1292.     (* IDirectMusicLoader *)
  1293.     function GetObject(const pDesc: TDMusObjectDesc; const riid : TGUID;
  1294.       out ppv): HResult; stdcall;
  1295.     function SetObject(const pDesc: TDMusObjectDesc): HResult; stdcall;
  1296.     function SetSearchDirectory(const rguidClass: TGUID; pwzPath: PWideChar;
  1297.       fClear: BOOL): HResult; stdcall;
  1298.     function ScanDirectory(const rguidClass: TGUID; pwzFileExtension,
  1299.       pwzScanFileName: PWideChar): HResult; stdcall;
  1300.     function CacheObject(pObject: IDirectMusicObject): HResult; stdcall;
  1301.     function ReleaseObject(pObject: IDirectMusicObject): HResult; stdcall;
  1302.     function ClearCache(const rguidClass: TGUID): HResult; stdcall;
  1303.     function EnableCache(const rguidClass: TGUID; fEnable: BOOL): HResult; stdcall;
  1304.     function EnumObject(const rguidClass: TGUID; dwIndex: DWORD;
  1305.       const pDesc: TDMusObjectDesc): HResult; stdcall;
  1306.   end;
  1307. (*////////////////////////////////////////////////////////////////////
  1308. // IDirectMusicLoader8 *)
  1309.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicLoader8);'}
  1310.   {$EXTERNALSYM IDirectMusicLoader8}
  1311.   IDirectMusicLoader8 = interface(IDirectMusicLoader)
  1312.     ['{19e7c08c-0a44-4e6a-a116-595a7cd5de8c}']
  1313.     (* IDirectMusicLoader8 *)
  1314.     function CollectGarbage: HResult; stdcall;
  1315.     function ReleaseObjectByUnknown(pObject: IUnknown): HResult; stdcall;
  1316.     function LoadObjectFromFile(const rguidClassID: TGUID; const iidInterfaceID: TGUID;
  1317.       pwzFilePath: PWideChar; out ppObject): HResult; stdcall;
  1318.   end;
  1319. (*  Stream object supports IDirectMusicGetLoader interface to access loader while file parsing. *)
  1320.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicGetLoader);'}
  1321.   {$EXTERNALSYM IDirectMusicGetLoader}
  1322.   IDirectMusicGetLoader = interface(IUnknown)
  1323.     ['{68a04844-d13d-11d1-afa6-00aa0024d8b6}']
  1324.     (* IDirectMusicGetLoader *)
  1325.     function GetLoader(out ppLoader: IDirectMusicLoader): HResult; stdcall;
  1326.   end;
  1327.   IDirectMusicGetLoader8 = IDirectMusicGetLoader;
  1328.   {$NODEFINE IDirectMusicGetLoader8}
  1329.   {$HPPEMIT 'typedef _di_IDirectMusicGetLoader _di_IDirectMusicGetLoader8;'}
  1330. (*////////////////////////////////////////////////////////////////////
  1331. // IDirectMusicSegment *)
  1332.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicSegment);'}
  1333.   {$EXTERNALSYM IDirectMusicSegment}
  1334.   IDirectMusicSegment = interface(IUnknown)
  1335.     ['{f96029a2-4282-11d2-8717-00600893b1bd}']
  1336.     (*  IDirectMusicSegment *)
  1337.     function GetLength(out pmtLength: TMusicTime): HResult; stdcall;
  1338.     function SetLength(mtLength: TMusicTime): HResult; stdcall;
  1339.     function GetRepeats(out pdwRepeats: DWORD): HResult; stdcall;
  1340.     function SetRepeats(dwRepeats: DWORD): HResult; stdcall;
  1341.     function GetDefaultResolution(out pdwResolution: DWORD): HResult; stdcall;
  1342.     function SetDefaultResolution(dwResolution: DWORD): HResult; stdcall;
  1343.     function GetTrack(const rguidType: TGUID; dwGroupBits, dwIndex: DWORD;
  1344.       out ppTrack: IDirectMusicTrack): HResult; stdcall;
  1345.     function GetTrackGroup(pTrack: IDirectMusicTrack; out pdwGroupBits: DWORD): HResult; stdcall;
  1346.     function InsertTrack(pTrack: IDirectMusicTrack; dwGroupBits: DWORD): HResult; stdcall;
  1347.     function RemoveTrack(pTrack: IDirectMusicTrack): HResult; stdcall;
  1348.     function InitPlay(out ppSegState: IDirectMusicSegmentState;
  1349.       pPerformance: IDirectMusicPerformance; dwFlags: DWORD): HResult; stdcall;
  1350.     function GetGraph(out ppGraph: IDirectMusicGraph): HResult; stdcall;
  1351.     function SetGraph(pGraph: IDirectMusicGraph): HResult; stdcall;
  1352.     function AddNotificationType(const rguidNotificationType: TGUID): HResult; stdcall;
  1353.     function RemoveNotificationType(const rguidNotificationType: TGUID): HResult; stdcall;
  1354.     function GetParam(const rguidType: TGUID; dwGroupBits, dwIndex: DWORD;
  1355.       mtTime: TMusicTime; out pmtNext: TMusicTime; pParam: Pointer): HResult; stdcall;
  1356.     function SetParam(const rguidType: TGUID; dwGroupBits, dwIndex: DWORD;
  1357.       mtTime: TMusicTime; pParam: Pointer): HResult; stdcall;
  1358.     function Clone(mtStart: TMusicTime; mtEnd: TMusicTime;
  1359.       out ppSegment: IDirectMusicSegment): HResult; stdcall;
  1360.     function SetStartPoint(mtStart: TMusicTime): HResult; stdcall;
  1361.     function GetStartPoint(out pmtStart: TMusicTime): HResult; stdcall;
  1362.     function SetLoopPoints(mtStart: TMusicTime; mtEnd: TMusicTime): HResult; stdcall;
  1363.     function GetLoopPoints(out pmtStart, pmtEnd: TMusicTime): HResult; stdcall;
  1364.     function SetPChannelsUsed(dwNumPChannels: DWORD; var paPChannels: DWORD): HResult; stdcall;
  1365.   end;
  1366. (*////////////////////////////////////////////////////////////////////
  1367. // IDirectMusicSegment8 *)
  1368.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicSegment8);'}
  1369.   {$EXTERNALSYM IDirectMusicSegment8}
  1370.   IDirectMusicSegment8 = interface(IDirectMusicSegment)
  1371.     ['{c6784488-41a3-418f-aa15-b35093ba42d4}']
  1372.     (*  IDirectMusicSegment8 *)
  1373.     function SetTrackConfig(const rguidTrackClassID: TGUID;
  1374.       dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff: DWORD): HResult; stdcall;
  1375.     function GetAudioPathConfig(out ppAudioPathConfig: IUnknown): HResult; stdcall;
  1376.     function Compose(mtTime: TMusicTime; pFromSegment, pToSegment: IDirectMusicSegment;
  1377.       out ppComposedSegment: IDirectMusicSegment): HResult; stdcall;
  1378.     function Download(pAudioPath: IUnknown): HResult; stdcall;
  1379.     function Unload(pAudioPath: IUnknown): HResult; stdcall;
  1380.   end;
  1381. (*/////////////////////////////////////////////////////////////////////
  1382. // IDirectMusicSegmentState *)
  1383.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicSegmentState);'}
  1384.   {$EXTERNALSYM IDirectMusicSegmentState}
  1385.   IDirectMusicSegmentState = interface(IUnknown)
  1386.     ['{a3afdcc7-d3ee-11d1-bc8d-00a0c922e6eb}']
  1387.     (*  IDirectMusicSegmentState *)
  1388.     function GetRepeats(out pdwRepeats: DWORD): HResult; stdcall;
  1389.     function GetSegment(out ppSegment: IDirectMusicSegment): HResult; stdcall;
  1390.     function GetStartTime(out pmtStart: TMusicTime): HResult; stdcall;
  1391.     function GetSeek(out pmtSeek: TMusicTime): HResult; stdcall;
  1392.     function GetStartPoint(out pmtStart: TMusicTime): HResult; stdcall;
  1393.   end;
  1394. (*/////////////////////////////////////////////////////////////////////
  1395. // IDirectMusicSegmentState8 *)
  1396.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicSegmentState8);'}
  1397.   {$EXTERNALSYM IDirectMusicSegmentState8}
  1398.   IDirectMusicSegmentState8 = interface(IDirectMusicSegmentState)
  1399.     ['{a50e4730-0ae4-48a7-9839-bc04bfe07772}']
  1400.     (* IDirectMusicSegmentState8 *)
  1401.     function SetTrackConfig(
  1402.       const rguidTrackClassID: TGUID;        // Class ID of the type of track on which to set the configuration flags.
  1403.       dwGroupBits,                           // Group bits.
  1404.       dwIndex,                               // Nth track (or DMUS_SEG_ALLTRACKS) that matches class id and group id.
  1405.       dwFlagsOn,                             // DMUS_TRACKCONFIG_ flags to enable.
  1406.       dwFlagsOff: DWORD): HResult; stdcall;  // DMUS_TRACKCONFIG_ flags to disable.
  1407.     function GetObjectInPath(
  1408.       dwPChannel,                            // PChannel to search.
  1409.       dwStage,                               // Which stage in the path.
  1410.       dwBuffer: DWORD;                       // Which buffer to address, if more than one.
  1411.       const guidObject: TGUID;               // ClassID of object.
  1412.       dwIndex: DWORD;                        // Which object of that class.
  1413.       const iidInterface: TGUID;             // Requested COM interface.
  1414.       out ppObject): HResult; stdcall;       // Pointer to interface.
  1415.   end;
  1416. (*////////////////////////////////////////////////////////////////////
  1417. // IDirectMusicAudioPath *)
  1418.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicAudioPath);'}
  1419.   {$EXTERNALSYM IDirectMusicAudioPath}
  1420.   IDirectMusicAudioPath = interface(IUnknown)
  1421.     ['{c87631f5-23be-4986-8836-05832fcc48f9}']
  1422.     (*  IDirectMusicAudioPath *)
  1423.     function GetObjectInPath(
  1424.       dwPChannel,                         // PChannel to search.
  1425.       dwStage,                            // Which stage in the path.
  1426.       dwBuffer: DWORD;                    // Which buffer to address, if more than one.
  1427.       const guidObject: TGUID;            // ClassID of object.
  1428.       dwIndex: DWORD;                     // Which object of that class.
  1429.       const iidInterface: TGUID;          // Requested COM interface.
  1430.       out ppObject): HResult; stdcall;    // Pointer to interface.
  1431.     function Activate(fActivate: BOOL): HResult; stdcall; // True to activate, False to deactivate.
  1432.     function SetVolume(lVolume: Longint;    // Gain, in 100ths of a dB. This must be negative (0 represents full volume.)
  1433.       dwDuration: DWORD): HResult; stdcall; // Duration of volume ramp in  milliseconds. Note that 0 is more efficient.
  1434.     function ConvertPChannel (dwPChannelIn: DWORD;   // Pchannel of source.
  1435.       var pdwPChannelOut: DWORD): HResult; stdcall;  // Equivalent pchannel on performance.
  1436.   end;
  1437.   IDirectMusicAudioPath8 = IDirectMusicAudioPath;
  1438.   {$NODEFINE IDirectMusicAudioPath8}
  1439.   {$HPPEMIT 'typedef _di_IDirectMusicAudioPath _di_IDirectMusicAudioPath8;'}
  1440. (*////////////////////////////////////////////////////////////////////
  1441. // IDirectMusicPerformance *)
  1442.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicPerformance);'}
  1443.   {$EXTERNALSYM IDirectMusicPerformance}
  1444.   IDirectMusicPerformance = interface(IUnknown)
  1445.     ['{07d43d03-6523-11d2-871d-00600893b1bd}']
  1446.     (*  IDirectMusicPerformance *)
  1447.     function Init(var ppDirectMusic: IDirectMusic;
  1448.       pDirectSound: IDirectSound; hWnd: HWND): HResult; stdcall;
  1449.     function PlaySegment(pSegment: IDirectMusicSegment; dwFlags: DWORD;
  1450.       i64StartTime: LongLong; ppSegmentState: PIDirectMusicSegmentState): HResult; stdcall;
  1451.     function Stop(pSegment: IDirectMusicSegment; pSegmentState: IDirectMusicSegmentState;
  1452.       mtTime: TMusicTime; dwFlags: DWORD): HResult; stdcall;
  1453.     function GetSegmentState(out ppSegmentState: IDirectMusicSegmentState;
  1454.       mtTime: TMusicTime): HResult; stdcall;
  1455.     function SetPrepareTime(dwMilliSeconds: DWORD): HResult; stdcall;
  1456.     function GetPrepareTime(out pdwMilliSeconds: DWORD): HResult; stdcall;
  1457.     function SetBumperLength(dwMilliSeconds: DWORD): HResult; stdcall;
  1458.     function GetBumperLength(out pdwMilliSeconds: DWORD): HResult; stdcall;
  1459.     function SendPMsg(pPMSG: PDMusPMsg): HResult; stdcall;
  1460.     function MusicToReferenceTime(mtTime: TMusicTime; out prtTime: TReferenceTime): HResult; stdcall;
  1461.     function ReferenceToMusicTime(rtTime: TReferenceTime; out pmtTime: TMusicTime): HResult; stdcall;
  1462.     function IsPlaying(pSegment: IDirectMusicSegment; pSegState: IDirectMusicSegmentState): HResult; stdcall;
  1463.     function GetTime(prtNow: PReference_Time; pmtNow: PMusicTime): HResult; stdcall;
  1464.     function AllocPMsg(cb: ULONG; out ppPMSG: PDMusPMsg): HResult; stdcall;
  1465.     function FreePMsg(pPMSG: PDMusPMsg): HResult; stdcall;
  1466.     function GetGraph(out ppGraph: IDirectMusicGraph): HResult; stdcall;
  1467.     function SetGraph(pGraph: IDirectMusicGraph): HResult; stdcall;
  1468.     function SetNotificationHandle(hNotification: THANDLE; rtMinimum: TReferenceTime): HResult; stdcall;
  1469.     function GetNotificationPMsg(out ppNotificationPMsg: PDMusNotificationPMsg): HResult; stdcall;
  1470.     function AddNotificationType(const rguidNotificationType: TGUID): HResult; stdcall;
  1471.     function RemoveNotificationType(const rguidNotificationType: TGUID): HResult; stdcall;
  1472.     function AddPort(pPort: IDirectMusicPort): HResult; stdcall; 
  1473.     function RemovePort(pPort: IDirectMusicPort): HResult; stdcall;
  1474.     function AssignPChannelBlock(dwBlockNum: DWORD; pPort: IDirectMusicPort;
  1475.       dwGroup: DWORD): HResult; stdcall;
  1476.     function AssignPChannel(dwPChannel: DWORD; pPort: IDirectMusicPort;
  1477.       dwGroup, dwMChannel: DWORD): HResult; stdcall;
  1478.     function PChannelInfo(dwPChannel: DWORD; out ppPort: IDirectMusicPort;
  1479.       out pdwGroup, pdwMChannel: DWORD ): HResult; stdcall;
  1480.     function DownloadInstrument(pInst: IDirectMusicInstrument; dwPChannel: DWORD;
  1481.       out ppDownInst: IDirectMusicDownloadedInstrument; var pNoteRanges: TDMusNoteRange;
  1482.       dwNumNoteRanges: DWORD; out ppPort: IDirectMusicPort;
  1483.       out pdwGroup, pdwMChannel: DWORD): HResult; stdcall;
  1484.     function Invalidate(mtTime: TMusicTime; dwFlags: DWORD): HResult; stdcall;
  1485.     function GetParam(const rguidType: TGUID; dwGroupBits, dwIndex: DWORD;
  1486.       mtTime: TMusicTime; out pmtNext: TMusicTime; pParam: Pointer): HResult; stdcall;
  1487.     function SetParam(const rguidType: TGUID; dwGroupBits, dwIndex: DWORD;
  1488.       mtTime: TMusicTime; pParam: Pointer): HResult; stdcall;
  1489.     function GetGlobalParam(const rguidType: TGUID; pParam: Pointer;
  1490.       dwSize: DWORD): HResult; stdcall;
  1491.     function SetGlobalParam(const rguidType: TGUID; pParam: Pointer;
  1492.       dwSize: DWORD): HResult; stdcall;
  1493.     function GetLatencyTime(out prtTime: TReferenceTime): HResult; stdcall;
  1494.     function GetQueueTime(out prtTime: TReferenceTime): HResult; stdcall;
  1495.     function AdjustTime(rtAmount: TReferenceTime): HResult; stdcall;
  1496.     function CloseDown : HResult; stdcall;
  1497.     function GetResolvedTime(rtTime: TReferenceTime; out prtResolved: TReferenceTime;
  1498.       dwTimeResolveFlags: DWORD): HResult; stdcall;
  1499.     function MIDIToMusic(bMIDIValue: Byte; const pChord: TDMusChordKey;
  1500.       bPlayMode, bChordLevel: Byte; out pwMusicValue: Word): HResult; stdcall;
  1501.     function MusicToMIDI(wMusicValue: Word; const pChord: TDMusChordKey;
  1502.       bPlayMode, bChordLevel: Byte; out pbMIDIValue: Byte): HResult; stdcall;
  1503.     function TimeToRhythm(mtTime: TMusicTime; const pTimeSig: TDMusTimeSignature;
  1504.       out pwMeasure: Word; out pbBeat, pbGrid: Byte;
  1505.       out pnOffset: SmallInt): HResult; stdcall;
  1506.     function RhythmToTime(wMeasure: Word; bBeat, bGrid: Byte; nOffset: Smallint;
  1507.       const pTimeSig: TDMusTimeSignature; out pmtTime: TMusicTime): HResult; stdcall;
  1508.   end;
  1509. (*////////////////////////////////////////////////////////////////////
  1510. // IDirectMusicPerformance8 *)
  1511.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicPerformance8);'}
  1512.   {$EXTERNALSYM IDirectMusicPerformance8}
  1513.   IDirectMusicPerformance8 = interface(IDirectMusicPerformance)
  1514.     ['{679c4137-c62e-4147-b2b4-9d569acb254c}']
  1515.     (*  IDirectMusicPerformance8 *)
  1516.     function InitAudio(
  1517.       ppDirectMusic: PIDirectMusic;                  // Optional DMusic pointer.
  1518.       ppDirectSound: PIDirectSound;                  // Optional DSound pointer.
  1519.       hWnd: hWnd;                                    // HWND for DSound.
  1520.       dwDefaultPathType,                             // Requested default audio path type, also optional.
  1521.       dwPChannelCount,                               // Number of PChannels, if default audio path to be created.
  1522.       dwFlags: DWORD;                                // DMUS_AUDIOF flags, if no pParams structure.
  1523.       pParams: PDMUSAudioParams): HResult; stdcall;  // Optional initialization structure, defining required voices, buffers, etc. 
  1524.     function PlaySegmentEx(
  1525.       pSource: IUnknown;                             // Segment to play.
  1526.       pwzSegmentName: PWideChar;                     // Not supported in DX8.
  1527.       pTransition: IUnknown;                         // Optional template segment to compose transition with. 
  1528.       dwFlags: DWORD;                                // DMUS_SEGF_ flags. 
  1529.       i64StartTime: Int64;                           // Time to start playback. 
  1530.       out ppSegmentState: IDirectMusicSegmentState;  // Returned Segment State. 
  1531.       pFrom,                                         // Optional segmentstate or audiopath to replace. 
  1532.       pAudioPath: IUnknown): HResult; stdcall;       // Optional audioPath to play on.
  1533.     function StopEx(pObjectToStop: IUnknown;         // Segstate, AudioPath, or Segment.
  1534.       i64StopTime: int64; dwFlags: DWORD): HResult; stdcall;
  1535.     function ClonePMsg(pSourcePMSG: TDMusPMsg;
  1536.       var ppCopyPMSG: TDMusPMsg): HResult; stdcall;
  1537.     function CreateAudioPath(
  1538.       pSourceConfig: IUnknown;                       // Source configuration, from AudioPathConfig file. 
  1539.       fActivate: BOOL;                               // TRUE to activate on creation. 
  1540.       out ppNewPath: IDirectMusicAudioPath): HResult; stdcall; // Returns created audiopath. 
  1541.     function CreateStandardAudioPath(
  1542.       dwType,                                        // Type of path to create. 
  1543.       dwPChannelCount: DWORD;                        // How many PChannels to allocate for it. 
  1544.       fActivate: BOOL;                               // TRUE to activate on creation. 
  1545.       out ppNewPath: IDirectMusicAudioPath): HResult; stdcall; // Returns created audiopath. 
  1546.     function SetDefaultAudioPath(pAudioPath: IDirectMusicAudioPath): HResult; stdcall;
  1547.     function GetDefaultAudioPath(out ppAudioPath: IDirectMusicAudioPath): HResult; stdcall;
  1548.     function GetParamEx(
  1549.       const rguidType: TGUID;                        // GetParam command ID. 
  1550.       dwTrackID,                                     // Virtual track ID of caller. 
  1551.       dwGroupBits,                                   // Group bits of caller. 
  1552.       dwIndex: DWORD;                                // Index to Nth parameter. 
  1553.       mtTime,                                        // Time of requested parameter. 
  1554.       pmtNext: TMusicTime;                           // Returned delta to next parameter. 
  1555.       pParam: Pointer): HResult; stdcall;            // Data structure to fill with parameter. 
  1556.   end;
  1557. (*////////////////////////////////////////////////////////////////////
  1558. // IDirectMusicGraph *)
  1559.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicGraph);'}
  1560.   {$EXTERNALSYM IDirectMusicGraph}
  1561.   IDirectMusicGraph = interface(IUnknown)
  1562.     ['{2befc277-5497-11d2-bccb-00a0c922e6eb}']
  1563.     (*  IDirectMusicGraph *)
  1564.     function StampPMsg(var pPMSG: TDMusPMsg): HResult; stdcall;
  1565.     function InsertTool(pTool: IDirectMusicTool; var pdwPChannels: DWORD;
  1566.       cPChannels: DWORD; lIndex: LongInt): HResult; stdcall;
  1567.     function GetTool(dwIndex: DWORD; out ppTool: IDirectMusicTool): HResult; stdcall;
  1568.     function RemoveTool(pTool: IDirectMusicTool): HResult; stdcall;
  1569.   end;
  1570.   IDirectMusicGraph8 = IDirectMusicGraph;
  1571.   {$NODEFINE IDirectMusicGraph8}
  1572.   {$HPPEMIT 'typedef _di_IDirectMusicGraph _di_IDirectMusicGraph8;'}
  1573. (*////////////////////////////////////////////////////////////////////
  1574. // IDirectMusicTool *)
  1575.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicTool);'}
  1576.   {$EXTERNALSYM IDirectMusicTool}
  1577.   IDirectMusicTool = interface(IUnknown)
  1578.     ['{d2ac28ba-b39b-11d1-8704-00600893b1bd}']
  1579.     (*  IDirectMusicTool *)
  1580.     function Init(pGraph: IDirectMusicGraph): HResult; stdcall;
  1581.     function GetMsgDeliveryType(out pdwDeliveryType: DWORD): HResult; stdcall;
  1582.     function GetMediaTypeArraySize(out pdwNumElements: DWORD): HResult; stdcall;
  1583.     function GetMediaTypes(out padwMediaTypes: PDWORD; dwNumElements: DWORD): HResult; stdcall;
  1584.     function ProcessPMsg(pPerf: IDirectMusicPerformance; pPMSG: PDMusPMsg): HResult; stdcall;
  1585.     function Flush(pPerf: IDirectMusicPerformance; const pPMSG: TDMusPMsg;
  1586.       rtTime: TReferenceTime): HResult; stdcall;
  1587.   end;
  1588. (*/////////////////////////////////////////////////////////////////////
  1589. // IDirectMusicStyle *)
  1590.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicStyle);'}
  1591.   {$EXTERNALSYM IDirectMusicStyle}
  1592.   IDirectMusicStyle = interface(IUnknown)
  1593.     ['{d2ac28bd-b39b-11d1-8704-00600893b1bd}']
  1594.     (*  IDirectMusicStyle *)
  1595.     function GetBand(pwszName: PWideChar; out ppBand: IDirectMusicBand): HResult; stdcall;
  1596.     function EnumBand(dwIndex: DWORD; pwszName: PWideChar): HResult; stdcall;
  1597.     function GetDefaultBand(out ppBand: IDirectMusicBand): HResult; stdcall;
  1598.     function EnumMotif(dwIndex: DWORD; pwszName: PWideChar): HResult; stdcall;
  1599.     function GetMotif(pwszName: PWideChar; out ppSegment: IDirectMusicSegment): HResult; stdcall;
  1600.     function GetDefaultChordMap(out ppChordMap: IDirectMusicChordMap): HResult; stdcall;
  1601.     function EnumChordMap(dwIndex: DWORD; pwszName: PWideChar): HResult; stdcall;
  1602.     function GetChordMap(pwszName: PWideChar; out ppChordMap: IDirectMusicChordMap): HResult; stdcall;
  1603.     function GetTimeSignature(out pTimeSig: TDMusTimeSignature): HResult; stdcall;
  1604.     function GetEmbellishmentLength(dwType, dwLevel: DWORD; out pdwMin, pdwMax: DWORD): HResult; stdcall;
  1605.     function GetTempo(out pTempo: Double): HResult; stdcall;
  1606.   end;
  1607. (*/////////////////////////////////////////////////////////////////////
  1608. // IDirectMusicStyle8 *)
  1609.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicStyle8);'}
  1610.   {$EXTERNALSYM IDirectMusicStyle8}
  1611.   IDirectMusicStyle8 = interface(IDirectMusicStyle)
  1612.     ['{fd24ad8a-a260-453d-bf50-6f9384f70985}']
  1613.     (*  IDirectMusicStyle8 *)
  1614.     function EnumPattern(dwIndex, dwPatternType: DWORD; pwszName: PWideChar): HResult; stdcall;
  1615.   end;
  1616. (*/////////////////////////////////////////////////////////////////////
  1617. // IDirectMusicChordMap *)
  1618.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicChordMap);'}
  1619.   {$EXTERNALSYM IDirectMusicChordMap}
  1620.   IDirectMusicChordMap = interface(IUnknown)
  1621.     ['{d2ac28be-b39b-11d1-8704-00600893b1bd}']
  1622.     (*  IDirectMusicChordMap *)
  1623.     function GetScale(out pdwScale: DWORD): HResult; stdcall;
  1624.   end;
  1625.   IDirectMusicChordMap8 = IDirectMusicChordMap;
  1626.   {$NODEFINE IDirectMusicChordMap8}
  1627.   {$HPPEMIT 'typedef _di_IDirectMusicChordMap _di_IDirectMusicChordMap8;'}
  1628. (*/////////////////////////////////////////////////////////////////////
  1629. // IDirectMusicComposer *)
  1630.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicComposer);'}
  1631.   {$EXTERNALSYM IDirectMusicComposer}
  1632.   IDirectMusicComposer = interface(IUnknown)
  1633.     ['{d2ac28bf-b39b-11d1-8704-00600893b1bd}']
  1634.     (*  IDirectMusicComposer *)
  1635.     function ComposeSegmentFromTemplate(pStyle: IDirectMusicStyle;
  1636.       pTempSeg: IDirectMusicSegment; wActivity: Word;
  1637.       pChordMap: IDirectMusicChordMap; out ppSectionSeg: IDirectMusicSegment): HResult; stdcall;
  1638.     function ComposeSegmentFromShape(pStyle: IDirectMusicStyle; wNumMeasures,
  1639.       wShape, wActivity: Word; fIntro: BOOL; fEnd: BOOL;
  1640.       pChordMap: IDirectMusicChordMap; out ppSectionSeg: IDirectMusicSegment): HResult; stdcall;
  1641.     function ComposeTransition(pFromSeg: IDirectMusicSegment; pToSeg: IDirectMusicSegment;
  1642.       mtTime: TMusicTime; wCommand: Word; dwFlags: DWORD; pChordMap: IDirectMusicChordMap;
  1643.       out ppSectionSeg: IDirectMusicSegment): HResult; stdcall;
  1644.     function AutoTransition(pPerformance: IDirectMusicPerformance;
  1645.       pToSeg: IDirectMusicSegment; wCommand: Word; dwFlags: DWORD;
  1646.       pChordMap: IDirectMusicChordMap; out ppTransSeg: IDirectMusicSegment;
  1647.       out ppToSegState: IDirectMusicSegmentState; out ppTransSegState: IDirectMusicSegmentState): HResult; stdcall;
  1648.     function ComposeTemplateFromShape(wNumMeasures: Word; wShape: Word; fIntro: BOOL;
  1649.       fEnd: BOOL; wEndLength: Word; out ppTempSeg:IDirectMusicSegment): HResult; stdcall;
  1650.     function ChangeChordMap(pSectionSeg: IDirectMusicSegment;
  1651.       fTrackScale: BOOL; pChordMap: IDirectMusicChordMap): HResult; stdcall;
  1652.   end;
  1653.   IDirectMusicComposer8 = IDirectMusicComposer;
  1654.   {$NODEFINE IDirectMusicComposer8}
  1655.   {$HPPEMIT 'typedef _di_IDirectMusicComposer _di_IDirectMusicComposer8;'}
  1656. (*/////////////////////////////////////////////////////////////////////
  1657. // IDirectMusicPatternTrack *)
  1658.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicPatternTrack);'}
  1659.   {$EXTERNALSYM IDirectMusicPatternTrack}
  1660.   IDirectMusicPatternTrack = interface(IUnknown)
  1661.     ['{51c22e10-b49f-46fc-bec2-e6288fb9ede6}']
  1662.     (*  IDirectMusicPatternTrack *)
  1663.     function CreateSegment(pStyle: IDirectMusicStyle;
  1664.       out ppSegment: IDirectMusicSegment): HResult; stdcall;
  1665.     function SetVariation(pSegState: IDirectMusicSegmentState;
  1666.       dwVariationFlags, dwPart: DWORD): HResult; stdcall;
  1667.     function SetPatternByName(pSegState: IDirectMusicSegmentState;
  1668.       wszName: PWideChar; pStyle: IDirectMusicStyle; dwPatternType: DWORD;
  1669.       var pdwLength: DWORD): HResult; stdcall;
  1670.   end;
  1671.   IDirectMusicPatternTrack8 = IDirectMusicPatternTrack;
  1672.   {$NODEFINE IDirectMusicPatternTrack8}
  1673.   {$HPPEMIT 'typedef _di_IDirectMusicPatternTrack _di_IDirectMusicPatternTrack8;'}
  1674. (*/////////////////////////////////////////////////////////////////////
  1675. // IDirectMusicScript *)
  1676.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicScript);'}
  1677.   {$EXTERNALSYM IDirectMusicScript}
  1678.   IDirectMusicScript = interface(IUnknown)
  1679.     ['{2252373a-5814-489b-8209-31fedebaf137}']
  1680.     (*  IDirectMusicScript *)
  1681.     function Init(pPerformance: IDirectMusicPerformance;
  1682.       pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1683.     function CallRoutine(pwszRoutineName: PWideChar;
  1684.       pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1685.     function SetVariableVariant(pwszVariableName: PWideChar; varValue: Variant;
  1686.       fSetRef: BOOL; pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1687.     function GetVariableVariant(pwszVariableName: PWideChar; var pvarValue: Variant;
  1688.       pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1689.     function SetVariableNumber(pwszVariableName: PWideChar; lValue: Longint;
  1690.       pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1691.     function GetVariableNumber(pwszVariableName: PWideChar; var plValue: Longint;
  1692.       pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1693.     function SetVariableObject(pwszVariableName: PWideChar; punkValue: IUnknown;
  1694.       pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1695.     function GetVariableObject(pwszVariableName: PWideChar; const riid: TGUID;
  1696.       out ppv; pErrorInfo: PDMusScriptErrorInfo): HResult; stdcall;
  1697.     function EnumRoutine(dwIndex: DWORD; pwszName: PWideChar): HResult; stdcall;
  1698.     function EnumVariable(dwIndex: DWORD; pwszName: PWideChar): HResult; stdcall;
  1699.   end;
  1700.   IDirectMusicScript8 = IDirectMusicScript;
  1701.   {$NODEFINE IDirectMusicScript8}
  1702.   {$HPPEMIT 'typedef _di_IDirectMusicScript _di_IDirectMusicScript8;'}
  1703. (*/////////////////////////////////////////////////////////////////////
  1704. // IDirectMusicContainer *)
  1705.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicContainer);'}
  1706.   {$EXTERNALSYM IDirectMusicContainer}
  1707.   IDirectMusicContainer = interface(IUnknown)
  1708.     ['{9301e386-1f22-11d3-8226-d2fa76255d47}']
  1709.     (*  IDirectMusicContainer *)
  1710.     function EnumObject(const rguidClass: TGUID; dwIndex: DWORD;
  1711.       pDesc: PDMusObjectDesc; pwszAlias: PWideChar): HResult; stdcall;
  1712.   end;
  1713.   IDirectMusicContainer8 = IDirectMusicContainer;
  1714.   {$NODEFINE IDirectMusicContainer8}
  1715.   {$HPPEMIT 'typedef _di_IDirectMusicContainer _di_IDirectMusicContainer8;'}
  1716. (*////////////////////////////////////////////////////////////////////
  1717. // IDirectMusicTrack *)
  1718.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicTrack);'}
  1719.   {$EXTERNALSYM IDirectMusicTrack}
  1720.   IDirectMusicTrack = interface(IUnknown)
  1721.     ['{f96029a1-4282-11d2-8717-00600893b1bd}']
  1722.     (*  IDirectMusicTrack *)
  1723.     function Init(pSegment: IDirectMusicSegment): HResult; stdcall;
  1724.     function InitPlay(pSegmentState: IDirectMusicSegmentState;
  1725.       pPerformance: IDirectMusicPerformance; out ppStateData: Pointer;
  1726.       dwVirtualTrackID, dwFlags: DWORD): HResult; stdcall;
  1727.     function EndPlay(pStateData: Pointer): HResult; stdcall;
  1728.     function Play(pStateData: Pointer; mtStart, mtEnd, mtOffset: TMusicTime;
  1729.       dwFlags: DWORD; pPerf: IDirectMusicPerformance;
  1730.       pSegSt: IDirectMusicSegmentState; dwVirtualID: DWORD): HResult; stdcall;
  1731.     function GetParam (const rguidType: TGUID; mtTime: TMusicTime; out pmtNext: TMusicTime;
  1732.       pParam: Pointer): HResult; stdcall;
  1733.     function SetParam(const rguidType: TGUID; mtTime: TMusicTime; pParam: Pointer): HResult; stdcall;
  1734.     function IsParamSupported(const rguidType: TGUID): HResult; stdcall;
  1735.     function AddNotificationType(const rguidNotificationType: TGUID): HResult; stdcall;
  1736.     function RemoveNotificationType(const rguidNotificationType: TGUID): HResult; stdcall;
  1737.     function Clone(mtStart: TMusicTime; mtEnd: TMusicTime; out ppTrack: IDirectMusicTrack): HResult; stdcall;
  1738.   end;
  1739. const
  1740.   (* CLSID's *)
  1741.   CLSID_DirectMusicPerformance: TGUID = '{d2ac2881-b39b-11d1-8704-00600893b1bd}';
  1742.   {$EXTERNALSYM CLSID_DirectMusicPerformance}
  1743.   CLSID_DirectMusicSegment: TGUID = '{d2ac2882-b39b-11d1-8704-00600893b1bd}';
  1744.   {$EXTERNALSYM CLSID_DirectMusicSegment}
  1745.   CLSID_DirectMusicSegmentState: TGUID = '{d2ac2883-b39b-11d1-8704-00600893b1bd}';
  1746.   {$EXTERNALSYM CLSID_DirectMusicSegmentState}
  1747.   CLSID_DirectMusicGraph: TGUID = '{d2ac2884-b39b-11d1-8704-00600893b1bd}';
  1748.   {$EXTERNALSYM CLSID_DirectMusicGraph}
  1749.   CLSID_DirectMusicStyle: TGUID = '{d2ac288a-b39b-11d1-8704-00600893b1bd}';
  1750.   {$EXTERNALSYM CLSID_DirectMusicStyle}
  1751.   CLSID_DirectMusicChordMap: TGUID = '{d2ac288f-b39b-11d1-8704-00600893b1bd}';
  1752.   {$EXTERNALSYM CLSID_DirectMusicChordMap}
  1753.   CLSID_DirectMusicComposer: TGUID = '{d2ac2890-b39b-11d1-8704-00600893b1bd}';
  1754.   {$EXTERNALSYM CLSID_DirectMusicComposer}
  1755.   CLSID_DirectMusicLoader: TGUID = '{d2ac2892-b39b-11d1-8704-00600893b1bd}';
  1756.   {$EXTERNALSYM CLSID_DirectMusicLoader}
  1757.   CLSID_DirectMusicBand: TGUID = '{79ba9e00-b6ee-11d1-86be-00c04fbf8fef}';
  1758.   {$EXTERNALSYM CLSID_DirectMusicBand}
  1759.   (* New CLSID's for DX8 *)
  1760.   CLSID_DirectMusicPatternTrack: TGUID = '{d2ac2897-b39b-11d1-8704-00600893b1bd}';
  1761.   {$EXTERNALSYM CLSID_DirectMusicPatternTrack}
  1762.   CLSID_DirectMusicScript: TGUID = '{810b5013-e88d-11d2-8bc1-00600893b1b6}'; (* {810B5013-E88D-11d2-8BC1-00600893B1B6} *)
  1763.   {$EXTERNALSYM CLSID_DirectMusicScript}
  1764.   CLSID_DirectMusicContainer: TGUID = '{9301e380-1f22-11d3-8226-d2fa76255d47}';
  1765.   {$EXTERNALSYM CLSID_DirectMusicContainer}
  1766.   CLSID_DirectSoundWave: TGUID = '{8a667154-f9cb-11d2-ad8a-0060b0575abc}';
  1767.   {$EXTERNALSYM CLSID_DirectSoundWave}
  1768.   CLSID_DirectMusicAudioPathConfig: TGUID = '{ee0b9ca0-a81e-11d3-9bd1-0080c7150a74}';
  1769.   {$EXTERNALSYM CLSID_DirectMusicAudioPathConfig}
  1770.   (* Special GUID for all object types. This is used by the loader. *)
  1771.   GUID_DirectMusicAllTypes: TGUID = '{d2ac2893-b39b-11d1-8704-00600893b1bd}';
  1772.   {$EXTERNALSYM GUID_DirectMusicAllTypes}
  1773.   (* Notification guids *)
  1774.   GUID_NOTIFICATION_SEGMENT: TGUID = '{d2ac2899-b39b-11d1-8704-00600893b1bd}';
  1775.   {$EXTERNALSYM GUID_NOTIFICATION_SEGMENT}
  1776.   GUID_NOTIFICATION_PERFORMANCE: TGUID = '{81f75bc5-4e5d-11d2-bcc7-00a0c922e6eb}';
  1777.   {$EXTERNALSYM GUID_NOTIFICATION_PERFORMANCE}
  1778.   GUID_NOTIFICATION_MEASUREANDBEAT: TGUID = '{d2ac289a-b39b-11d1-8704-00600893b1bd}';
  1779.   {$EXTERNALSYM GUID_NOTIFICATION_MEASUREANDBEAT}
  1780.   GUID_NOTIFICATION_CHORD: TGUID = '{d2ac289b-b39b-11d1-8704-00600893b1bd}';
  1781.   {$EXTERNALSYM GUID_NOTIFICATION_CHORD}
  1782.   GUID_NOTIFICATION_COMMAND: TGUID = '{d2ac289c-b39b-11d1-8704-00600893b1bd}';
  1783.   {$EXTERNALSYM GUID_NOTIFICATION_COMMAND}
  1784.   GUID_NOTIFICATION_RECOMPOSE: TGUID = '{d348372b-945b-45ae-a522-450f125b84a5}';
  1785.   {$EXTERNALSYM GUID_NOTIFICATION_RECOMPOSE}
  1786.   (* Track param type guids *)
  1787.   (* Use to get/set a DMUS_COMMAND_PARAM param in the Command track *)
  1788.   GUID_CommandParam: TGUID = '{d2ac289d-b39b-11d1-8704-00600893b1bd}';
  1789.   {$EXTERNALSYM GUID_CommandParam}
  1790.   (* Use to get a DMUS_COMMAND_PARAM_2 param in the Command track *)
  1791.   GUID_CommandParam2: TGUID = '{28f97ef7-9538-11d2-97a9-00c04fa36e58}';
  1792.   {$EXTERNALSYM GUID_CommandParam2}
  1793.   (* Use to get/set a DMUS_COMMAND_PARAM_2 param to be used as the command following all commands in
  1794.   the Command track (this information can't be saved) *)
  1795.   GUID_CommandParamNext: TGUID = '{472afe7a-281b-11d3-817d-00c04fa36e58}';
  1796.   {$EXTERNALSYM GUID_CommandParamNext}
  1797.   (* Use to get/set a DMUS_CHORD_PARAM param in the Chord track *)
  1798.   GUID_ChordParam: TGUID = '{d2ac289e-b39b-11d1-8704-00600893b1bd}';
  1799.   {$EXTERNALSYM GUID_ChordParam}
  1800.   (* Use to get a DMUS_RHYTHM_PARAM param in the Chord track *)
  1801.   GUID_RhythmParam: TGUID = '{d2ac289f-b39b-11d1-8704-00600893b1bd}';
  1802.   {$EXTERNALSYM GUID_RhythmParam}
  1803.   (* Use to get/set an IDirectMusicStyle param in the Style track *)
  1804.   GUID_IDirectMusicStyle: TGUID = '{d2ac28a1-b39b-11d1-8704-00600893b1bd}';
  1805.   {$EXTERNALSYM GUID_IDirectMusicStyle}
  1806.   (* Use to get a DMUS_TIMESIGNATURE param in the Style and TimeSig tracks *)
  1807.   GUID_TimeSignature: TGUID = '{d2ac28a4-b39b-11d1-8704-00600893b1bd}';
  1808.   {$EXTERNALSYM GUID_TimeSignature}
  1809.   (* Use to get/set a DMUS_TEMPO_PARAM param in the Tempo track *)
  1810.   GUID_TempoParam: TGUID = '{d2ac28a5-b39b-11d1-8704-00600893b1bd}';
  1811.   {$EXTERNALSYM GUID_TempoParam}
  1812.   (* Use to get the next valid point in a segment at which it may start *)
  1813.   GUID_Valid_Start_Time: TGUID = '{7f6b1760-1fdb-11d3-8226-444553540000}';
  1814.   {$EXTERNALSYM GUID_Valid_Start_Time}
  1815.   (* Use to get the next point in the currently playing primary segment at which a new segment may start *)
  1816.   GUID_Play_Marker: TGUID = '{d8761a41-801a-11d3-9bd1-daf7e1c3d834}';
  1817.   {$EXTERNALSYM GUID_Play_Marker}
  1818.   (* Use to get (GetParam) or add (SetParam) bands in the Band track *)
  1819.   GUID_BandParam: TGUID = '{02bb1938-cb8b-11d2-8bb9-00600893b1b6}';
  1820.   {$EXTERNALSYM GUID_BandParam}
  1821. type
  1822.   _DMUS_BAND_PARAM = packed record
  1823.     mtTimePhysical:  MUSIC_TIME; // Note: If this is a clock-time track, then this field is interpreted in the track's internal time format, which is the number of milliseconds after the beginning of playback.
  1824.     pBand: IDirectMusicBand;
  1825.   end;
  1826.   {$EXTERNALSYM _DMUS_BAND_PARAM}
  1827.   DMUS_BAND_PARAM = _DMUS_BAND_PARAM;
  1828.   {$EXTERNALSYM DMUS_BAND_PARAM}
  1829.   TDMusBandParam = _DMUS_BAND_PARAM;
  1830.   PDMusBandParam = ^TDMusBandParam;
  1831. const
  1832.   (* Obsolete -- doesn't distinguish physical and logical time.  Use GUID_BandParam instead. *)
  1833.   GUID_IDirectMusicBand: TGUID = '{d2ac28ac-b39b-11d1-8704-00600893b1bd}';
  1834.   {$EXTERNALSYM GUID_IDirectMusicBand}
  1835.   (* Use to get/set an IDirectMusicChordMap param in the ChordMap track *)
  1836.   GUID_IDirectMusicChordMap: TGUID = '{d2ac28ad-b39b-11d1-8704-00600893b1bd}';
  1837.   {$EXTERNALSYM GUID_IDirectMusicChordMap}
  1838.   (* Use to get/set a DMUS_MUTE_PARAM param in the Mute track *)
  1839.   GUID_MuteParam: TGUID = '{d2ac28af-b39b-11d1-8704-00600893b1bd}';
  1840.   {$EXTERNALSYM GUID_MuteParam}
  1841.   (* These guids are used in IDirectMusicSegment::SetParam to tell the band track to perform various actions.
  1842.      Some of these guids (where noted) also apply to wave tracks.
  1843.    *)
  1844.   (* Download bands/waves for the IDirectMusicSegment *)
  1845.   GUID_Download: TGUID = '{d2ac28a7-b39b-11d1-8704-00600893b1bd}';
  1846.   {$EXTERNALSYM GUID_Download}
  1847.   (* Unload bands/waves for the IDirectMusicSegment *)
  1848.   GUID_Unload: TGUID = '{d2ac28a8-b39b-11d1-8704-00600893b1bd}';
  1849.   {$EXTERNALSYM GUID_Unload}
  1850.   (* Connect segment's bands to an IDirectMusicCollection *)
  1851.   GUID_ConnectToDLSCollection: TGUID = '{1db1ae6b-e92e-11d1-a8c5-00c04fa3726e}';
  1852.   {$EXTERNALSYM GUID_ConnectToDLSCollection}
  1853.   (* Enable/disable autodownloading of bands/waves *)
  1854.   GUID_Enable_Auto_Download: TGUID = '{d2ac28a9-b39b-11d1-8704-00600893b1bd}';
  1855.   {$EXTERNALSYM GUID_Enable_Auto_Download}
  1856.   GUID_Disable_Auto_Download: TGUID = '{d2ac28aa-b39b-11d1-8704-00600893b1bd}';
  1857.   {$EXTERNALSYM GUID_Disable_Auto_Download}
  1858.   (* Clear all bands *)
  1859.   GUID_Clear_All_Bands: TGUID = '{d2ac28ab-b39b-11d1-8704-00600893b1bd}';
  1860.   {$EXTERNALSYM GUID_Clear_All_Bands}
  1861.   (* Set segment to manage all program changes, bank selects, etc. for simple playback of a standard MIDI file *)
  1862.   GUID_StandardMIDIFile: TGUID = '{06621075-e92e-11d1-a8c5-00c04fa3726e}';
  1863.   {$EXTERNALSYM GUID_StandardMIDIFile}
  1864.   (* For compatibility with beta releases... *)
  1865.   GUID_IgnoreBankSelectForGM: TGUID = '{06621075-e92e-11d1-a8c5-00c04fa3726e}'; // = GUID_StandardMIDIFile;
  1866.   {$EXTERNALSYM GUID_IgnoreBankSelectForGM}
  1867.   (* Disable/enable param guids. Use these in SetParam calls to disable or enable sending
  1868.    * specific PMsg types.
  1869.    *)
  1870.   GUID_DisableTimeSig: TGUID = '{45fc707b-1db4-11d2-bcac-00a0c922e6eb}';
  1871.   {$EXTERNALSYM GUID_DisableTimeSig}
  1872.   GUID_EnableTimeSig: TGUID = '{45fc707c-1db4-11d2-bcac-00a0c922e6eb}';
  1873.   {$EXTERNALSYM GUID_EnableTimeSig}
  1874.   GUID_DisableTempo: TGUID = '{45fc707d-1db4-11d2-bcac-00a0c922e6eb}';
  1875.   {$EXTERNALSYM GUID_DisableTempo}
  1876.   GUID_EnableTempo: TGUID = '{45fc707e-1db4-11d2-bcac-00a0c922e6eb}';
  1877.   {$EXTERNALSYM GUID_EnableTempo}
  1878.   (* Used in SetParam calls for pattern-based tracks.  A nonzero value seeds the random number
  1879.   generator for variation selection; a value of zero reverts to the default behavior of
  1880.   getting the seed from the system clock.
  1881.   *)
  1882.   GUID_SeedVariations: TGUID = '{65b76fa5-ff37-11d2-814e-00c04fa36e58}';
  1883.   {$EXTERNALSYM GUID_SeedVariations}
  1884.   (* Used to get the variations currently in effect across PChannels *)
  1885.   GUID_Variations: TGUID = '{11f72cce-26e6-4ecd-af2e-d668e66707d8}';
  1886.   {$EXTERNALSYM GUID_Variations}
  1887. type
  1888.   PDMusVariationsParam = ^TDMusVariationsParam;
  1889.   _DMUS_VARIATIONS_PARAM = packed record
  1890.     dwPChannelsUsed: DWORD;  // number of PChannels in use
  1891.     padwPChannels: PDWORD;   // array of PChannels in use
  1892.     padwVariations: PDWORD;  // array of variations in effect for each PChannel
  1893.   end;
  1894.   {$EXTERNALSYM _DMUS_VARIATIONS_PARAM}
  1895.   DMUS_VARIATIONS_PARAM = _DMUS_VARIATIONS_PARAM;
  1896.   {$EXTERNALSYM DMUS_VARIATIONS_PARAM}
  1897.   TDMusVariationsParam = _DMUS_VARIATIONS_PARAM;
  1898. const  
  1899.   (* Download bands/waves for the IDirectMusicSegment, passed an IDirectMusicAudioPath instead of an IDirectMusicPerformance *)
  1900.   GUID_DownloadToAudioPath: TGUID = '{9f2c0341-c5c4-11d3-9bd1-444553540000}';
  1901.   {$EXTERNALSYM GUID_DownloadToAudioPath}
  1902.   (* Unload bands/waves for the IDirectMusicSegment, passed an IDirectMusicAudioPath instead of an IDirectMusicPerformance *)
  1903.   GUID_UnloadFromAudioPath: TGUID = '{9f2c0342-c5c4-11d3-9bd1-444553540000}';
  1904.   {$EXTERNALSYM GUID_UnloadFromAudioPath}
  1905.   (* Global data guids *)
  1906.   GUID_PerfMasterTempo: TGUID = '{d2ac28b0-b39b-11d1-8704-00600893b1bd}';
  1907.   {$EXTERNALSYM GUID_PerfMasterTempo}
  1908.   GUID_PerfMasterVolume: TGUID = '{d2ac28b1-b39b-11d1-8704-00600893b1bd}';
  1909.   {$EXTERNALSYM GUID_PerfMasterVolume}
  1910.   GUID_PerfMasterGrooveLevel: TGUID = '{d2ac28b2-b39b-11d1-8704-00600893b1bd}';
  1911.   {$EXTERNALSYM GUID_PerfMasterGrooveLevel}
  1912.   GUID_PerfAutoDownload: TGUID = '{fb09565b-3631-11d2-bcb8-00a0c922e6eb}';
  1913.   {$EXTERNALSYM GUID_PerfAutoDownload}
  1914.   (* GUID for default GM/GS dls collection. *)
  1915.   GUID_DefaultGMCollection: TGUID = '{f17e8673-c3b4-11d1-870b-00600893b1bd}';
  1916.   {$EXTERNALSYM GUID_DefaultGMCollection}
  1917.   (* GUID to define default synth, placed in AudioPath configuration file. *)
  1918.   GUID_Synth_Default: TGUID = '{26bb9432-45fe-48d3-a375-2472c5e3e786}';
  1919.   {$EXTERNALSYM GUID_Synth_Default}
  1920.   (* GUIDs to define default buffer configurations to place in AudioPath configuration file. *)
  1921.   GUID_Buffer_Reverb: TGUID = '{186cc541-db29-11d3-9bd1-0080c7150a74}';
  1922.   {$EXTERNALSYM GUID_Buffer_Reverb}
  1923.   GUID_Buffer_EnvReverb: TGUID = '{186cc542-db29-11d3-9bd1-0080c7150a74}';
  1924.   {$EXTERNALSYM GUID_Buffer_EnvReverb}
  1925.   GUID_Buffer_Stereo: TGUID = '{186cc545-db29-11d3-9bd1-0080c7150a74}';
  1926.   {$EXTERNALSYM GUID_Buffer_Stereo}
  1927.   GUID_Buffer_3D_Dry: TGUID = '{186cc546-db29-11d3-9bd1-0080c7150a74}';
  1928.   {$EXTERNALSYM GUID_Buffer_3D_Dry}
  1929.   GUID_Buffer_Mono: TGUID = '{186cc547-db29-11d3-9bd1-0080c7150a74}';
  1930.   {$EXTERNALSYM GUID_Buffer_Mono}
  1931. type
  1932.   (* IID's *)
  1933.   IID_IDirectMusicLoader = IDirectMusicLoader;
  1934.   {$EXTERNALSYM IID_IDirectMusicLoader}
  1935.   IID_IDirectMusicGetLoader = IDirectMusicGetLoader;
  1936.   {$EXTERNALSYM IID_IDirectMusicGetLoader}
  1937.   IID_IDirectMusicObject = IDirectMusicObject;
  1938.   {$EXTERNALSYM IID_IDirectMusicObject}
  1939.   IID_IDirectMusicSegment = IDirectMusicSegment;
  1940.   {$EXTERNALSYM IID_IDirectMusicSegment}
  1941.   IID_IDirectMusicSegmentState = IDirectMusicSegmentState;
  1942.   {$EXTERNALSYM IID_IDirectMusicSegmentState}
  1943.   IID_IDirectMusicPerformance = IDirectMusicPerformance;
  1944.   {$EXTERNALSYM IID_IDirectMusicPerformance}
  1945.   IID_IDirectMusicGraph = IDirectMusicGraph;
  1946.   {$EXTERNALSYM IID_IDirectMusicGraph}
  1947.   IID_IDirectMusicStyle = IDirectMusicStyle;
  1948.   {$EXTERNALSYM IID_IDirectMusicStyle}
  1949.   IID_IDirectMusicChordMap = IDirectMusicChordMap;
  1950.   {$EXTERNALSYM IID_IDirectMusicChordMap}
  1951.   IID_IDirectMusicComposer = IDirectMusicComposer;
  1952.   {$EXTERNALSYM IID_IDirectMusicComposer}
  1953.   IID_IDirectMusicBand = IDirectMusicBand;
  1954.   {$EXTERNALSYM IID_IDirectMusicBand}
  1955. const
  1956.   (* Alternate interface IDs, available in DX7 release and after. *)
  1957.   IID_IDirectMusicPerformance2: TGUID = '{6fc2cae0-bc78-11d2-afa6-00aa0024d8b6}';
  1958.   {$EXTERNALSYM IID_IDirectMusicPerformance2}
  1959.   IID_IDirectMusicSegment2: TGUID = '{d38894d1-c052-11d2-872f-00600893b1bd}';
  1960.   {$EXTERNALSYM IID_IDirectMusicSegment2}
  1961. type
  1962.   (* Interface IDs for DX8 *)
  1963.   (* changed interfaces (GUID only) *)
  1964.   IID_IDirectMusicLoader8 = IDirectMusicLoader8;
  1965.   {$EXTERNALSYM IID_IDirectMusicLoader8}
  1966.   IID_IDirectMusicPerformance8 = IDirectMusicPerformance8;
  1967.   {$EXTERNALSYM IID_IDirectMusicPerformance8}
  1968.   IID_IDirectMusicSegment8 = IDirectMusicSegment8;
  1969.   {$EXTERNALSYM IID_IDirectMusicSegment8}
  1970.   IID_IDirectMusicSegmentState8 = IDirectMusicSegmentState8;
  1971.   {$EXTERNALSYM IID_IDirectMusicSegmentState8}
  1972.   IID_IDirectMusicStyle8 = IDirectMusicStyle8;
  1973.   {$EXTERNALSYM IID_IDirectMusicStyle8}
  1974.   (* new interfaces (GUID + alias) *)
  1975.   IID_IDirectMusicPatternTrack = IDirectMusicPatternTrack;
  1976.   {$EXTERNALSYM IID_IDirectMusicPatternTrack}
  1977.   IID_IDirectMusicScript = IDirectMusicScript; (* {2252373A-5814-489b-8209-31FEDEBAF137} *)
  1978.   {$EXTERNALSYM IID_IDirectMusicScript}
  1979.   IID_IDirectMusicContainer = IDirectMusicContainer;
  1980.   {$EXTERNALSYM IID_IDirectMusicContainer}
  1981.   IID_IDirectMusicAudioPath = IDirectMusicAudioPath;
  1982.   {$EXTERNALSYM IID_IDirectMusicAudioPath}
  1983.   IID_IDirectMusicPatternTrack8 = IID_IDirectMusicPatternTrack;
  1984.   {$EXTERNALSYM IID_IDirectMusicPatternTrack8}
  1985.   IID_IDirectMusicScript8 = IID_IDirectMusicScript;
  1986.   {$EXTERNALSYM IID_IDirectMusicScript8}
  1987.   IID_IDirectMusicContainer8 = IID_IDirectMusicContainer;
  1988.   {$EXTERNALSYM IID_IDirectMusicContainer8}
  1989.   IID_IDirectMusicAudioPath8 = IID_IDirectMusicAudioPath;
  1990.   {$EXTERNALSYM IID_IDirectMusicAudioPath8}
  1991.   (* unchanged interfaces (alias only) *)
  1992.   IID_IDirectMusicGetLoader8 = IID_IDirectMusicGetLoader;
  1993.   {$EXTERNALSYM IID_IDirectMusicGetLoader8}
  1994.   IID_IDirectMusicChordMap8 = IID_IDirectMusicChordMap;
  1995.   {$EXTERNALSYM IID_IDirectMusicChordMap8}
  1996.   IID_IDirectMusicGraph8 = IID_IDirectMusicGraph;
  1997.   {$EXTERNALSYM IID_IDirectMusicGraph8}
  1998.   IID_IDirectMusicBand8 = IID_IDirectMusicBand;
  1999.   {$EXTERNALSYM IID_IDirectMusicBand8}
  2000.   IID_IDirectMusicObject8 = IID_IDirectMusicObject;
  2001.   {$EXTERNALSYM IID_IDirectMusicObject8}
  2002.   IID_IDirectMusicComposer8 = IID_IDirectMusicComposer;
  2003.   {$EXTERNALSYM IID_IDirectMusicComposer8}
  2004. (************************************************************************
  2005. *                                                                       *
  2006. *   dmusicf.h -- This module defines the DirectMusic file formats       *
  2007. *                                                                       *
  2008. *   Copyright (c) Microsoft Corporation.  All rights reserved.          *
  2009. *                                                                       *
  2010. ************************************************************************)
  2011. const
  2012.   // Common chunks
  2013.   DMUS_FOURCC_GUID_CHUNK = DWORD(Byte('g') or (Byte('u') shl 8) or (Byte('i') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('g','u','i','d')
  2014.   {$EXTERNALSYM DMUS_FOURCC_GUID_CHUNK}
  2015.   DMUS_FOURCC_INFO_LIST  = DWORD(Byte('I') or (Byte('N') shl 8) or (Byte('F') shl 16) or (Byte('O') shl 24)); // mmioFOURCC('I','N','F','O')
  2016.   {$EXTERNALSYM DMUS_FOURCC_INFO_LIST}
  2017.   DMUS_FOURCC_UNFO_LIST  = DWORD(Byte('U') or (Byte('N') shl 8) or (Byte('F') shl 16) or (Byte('O') shl 24)); // mmioFOURCC('U','N','F','O')
  2018.   {$EXTERNALSYM DMUS_FOURCC_UNFO_LIST}
  2019.   DMUS_FOURCC_UNAM_CHUNK = DWORD(Byte('U') or (Byte('N') shl 8) or (Byte('A') shl 16) or (Byte('M') shl 24)); // mmioFOURCC('U','N','A','M')
  2020.   {$EXTERNALSYM DMUS_FOURCC_UNAM_CHUNK}
  2021.   DMUS_FOURCC_UART_CHUNK = DWORD(Byte('U') or (Byte('A') shl 8) or (Byte('R') shl 16) or (Byte('T') shl 24)); // mmioFOURCC('U','A','R','T')
  2022.   {$EXTERNALSYM DMUS_FOURCC_UART_CHUNK}
  2023.   DMUS_FOURCC_UCOP_CHUNK = DWORD(Byte('U') or (Byte('C') shl 8) or (Byte('O') shl 16) or (Byte('P') shl 24)); // mmioFOURCC('U','C','O','P')
  2024.   {$EXTERNALSYM DMUS_FOURCC_UCOP_CHUNK}
  2025.   DMUS_FOURCC_USBJ_CHUNK = DWORD(Byte('U') or (Byte('S') shl 8) or (Byte('B') shl 16) or (Byte('J') shl 24)); // mmioFOURCC('U','S','B','J')
  2026.   {$EXTERNALSYM DMUS_FOURCC_USBJ_CHUNK}
  2027.   DMUS_FOURCC_UCMT_CHUNK = DWORD(Byte('U') or (Byte('C') shl 8) or (Byte('M') shl 16) or (Byte('T') shl 24)); // mmioFOURCC('U','C','M','T')
  2028.   {$EXTERNALSYM DMUS_FOURCC_UCMT_CHUNK}
  2029.   DMUS_FOURCC_CATEGORY_CHUNK = DWORD(Byte('c') or (Byte('a') shl 8) or (Byte('t') shl 16) or (Byte('g') shl 24)); // mmioFOURCC('c','a','t','g')
  2030.   {$EXTERNALSYM DMUS_FOURCC_CATEGORY_CHUNK}
  2031.   DMUS_FOURCC_VERSION_CHUNK  = DWORD(Byte('v') or (Byte('e') shl 8) or (Byte('r') shl 16) or (Byte('s') shl 24)); // mmioFOURCC('v','e','r','s')
  2032.   {$EXTERNALSYM DMUS_FOURCC_VERSION_CHUNK}
  2033. type
  2034.   // The following structures are used by the Tracks, and are the packed structures
  2035.   // that are passed to the Tracks inside the IStream.
  2036.   PDMusIoSeqItem = ^TDMusIoSeqItem;
  2037.   _DMUS_IO_SEQ_ITEM = packed record
  2038.     mtTime: TMusicTime;
  2039.     mtDuration: TMusicTime;
  2040.     dwPChannel: DWORD;
  2041.     nOffset: Smallint;
  2042.     bStatus: Byte;
  2043.     bByte1: Byte;
  2044.     bByte2: Byte;
  2045.   end;
  2046.   {$EXTERNALSYM _DMUS_IO_SEQ_ITEM}
  2047.   DMUS_IO_SEQ_ITEM = _DMUS_IO_SEQ_ITEM;
  2048.   {$EXTERNALSYM DMUS_IO_SEQ_ITEM}
  2049.   TDMusIoSeqItem = _DMUS_IO_SEQ_ITEM;
  2050.   PDMusIoCurveItem = ^TDMusIoCurveItem;
  2051.   _DMUS_IO_CURVE_ITEM = packed record
  2052.     mtStart: TMusicTime;
  2053.     mtDuration: TMusicTime;
  2054.     mtResetDuration: TMusicTime;
  2055.     dwPChannel: DWORD;
  2056.     nOffset: Smallint;
  2057.     nStartValue: Smallint;
  2058.     nEndValue: Smallint;
  2059.     nResetValue: Smallint;
  2060.     bType: Byte;
  2061.     bCurveShape: Byte;
  2062.     bCCData: Byte;
  2063.     bFlags: Byte;
  2064.     // Following was added for DX8.
  2065.     wParamType: Word;      // RPN or NRPN parameter number.
  2066.     wMergeIndex: Word;     // Allows multiple parameters to be merged (pitchbend, volume, and expression.)
  2067.   end;
  2068.   {$EXTERNALSYM _DMUS_IO_CURVE_ITEM}
  2069.   DMUS_IO_CURVE_ITEM = _DMUS_IO_CURVE_ITEM;
  2070.   {$EXTERNALSYM DMUS_IO_CURVE_ITEM}
  2071.   TDMusIoCurveItem = _DMUS_IO_CURVE_ITEM;
  2072.   PDMusIoTempoItem = ^TDMusIoTempoItem;
  2073.   _DMUS_IO_TEMPO_ITEM = packed record
  2074.     lTime: TMusicTime;
  2075.     dblTempo: Double;
  2076.   end;
  2077.   {$EXTERNALSYM _DMUS_IO_TEMPO_ITEM}
  2078.   DMUS_IO_TEMPO_ITEM = _DMUS_IO_TEMPO_ITEM;
  2079.   {$EXTERNALSYM DMUS_IO_TEMPO_ITEM}
  2080.   TDMusIoTempoItem = _DMUS_IO_TEMPO_ITEM;
  2081.   PDMusIoSysExItem = ^TDMusIoSysExItem;
  2082.   _DMUS_IO_SYSEX_ITEM = packed record
  2083.     mtTime: TMusicTime;
  2084.     dwPChannel: DWORD;
  2085.     dwSysExLength: DWORD;
  2086.   end;
  2087.   {$EXTERNALSYM _DMUS_IO_SYSEX_ITEM}
  2088.   DMUS_IO_SYSEX_ITEM = _DMUS_IO_SYSEX_ITEM;
  2089.   {$EXTERNALSYM DMUS_IO_SYSEX_ITEM}
  2090.   TDMusIoSysExItem = _DMUS_IO_SYSEX_ITEM;
  2091.   DMUS_CHORD_PARAM = DMUS_CHORD_KEY; (* DMUS_CHORD_KEY defined in dmusici.h *)
  2092.   {$EXTERNALSYM DMUS_CHORD_PARAM}
  2093.   TDMusChordParam = DMUS_CHORD_PARAM;
  2094.   PDMusChordParam = ^TDMusChordParam;
  2095.   _DMUS_RHYTHM_PARAM = packed record
  2096.     TimeSig:  TDMusTimeSignature;
  2097.     dwRhythmPattern: DWORD;
  2098.   end;
  2099.   {$EXTERNALSYM _DMUS_RHYTHM_PARAM}
  2100.   DMUS_RHYTHM_PARAM = _DMUS_RHYTHM_PARAM;
  2101.   {$EXTERNALSYM DMUS_RHYTHM_PARAM}
  2102.   TDMusRhythmParam = _DMUS_RHYTHM_PARAM;
  2103.   PDMusRhythmParam = ^TDMusRhythmParam;
  2104.   PDMusTempoParam = ^TDMusTempoParam;
  2105.   _DMUS_TEMPO_PARAM = packed record
  2106.     mtTime:  TMusicTime;
  2107.     dblTempo: Double;
  2108.   end;
  2109.   {$EXTERNALSYM _DMUS_TEMPO_PARAM}
  2110.   DMUS_TEMPO_PARAM = _DMUS_TEMPO_PARAM;
  2111.   {$EXTERNALSYM DMUS_TEMPO_PARAM}
  2112.   TDMusTempoParam = _DMUS_TEMPO_PARAM;
  2113.   PDMusMuteParam = ^TDMusMuteParam;
  2114.   _DMUS_MUTE_PARAM = packed record
  2115.     dwPChannel: DWORD;
  2116.     dwPChannelMap: DWORD;
  2117.     fMute: BOOL;
  2118.   end;
  2119.   {$EXTERNALSYM _DMUS_MUTE_PARAM}
  2120.   DMUS_MUTE_PARAM = _DMUS_MUTE_PARAM;
  2121.   {$EXTERNALSYM DMUS_MUTE_PARAM}
  2122.   TDMusMuteParam = _DMUS_MUTE_PARAM;
  2123. const
  2124.   (* Style chunks *)
  2125.   DMUS_FOURCC_STYLE_FORM          = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('S') shl 16) or (Byte('T') shl 24)); // mmioFOURCC('D','M','S','T')
  2126.   {$EXTERNALSYM DMUS_FOURCC_STYLE_FORM}
  2127.   DMUS_FOURCC_STYLE_CHUNK         = DWORD(Byte('s') or (Byte('t') shl 8) or (Byte('y') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('s','t','y','h')
  2128.   {$EXTERNALSYM DMUS_FOURCC_STYLE_CHUNK}
  2129.   DMUS_FOURCC_PART_LIST           = DWORD(Byte('p') or (Byte('a') shl 8) or (Byte('r') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('p','a','r','t')
  2130.   {$EXTERNALSYM DMUS_FOURCC_PART_LIST}
  2131.   DMUS_FOURCC_PART_CHUNK          = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('t') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','r','t','h')
  2132.   {$EXTERNALSYM DMUS_FOURCC_PART_CHUNK}
  2133.   DMUS_FOURCC_NOTE_CHUNK          = DWORD(Byte('n') or (Byte('o') shl 8) or (Byte('t') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('n','o','t','e')
  2134.   {$EXTERNALSYM DMUS_FOURCC_NOTE_CHUNK}
  2135.   DMUS_FOURCC_CURVE_CHUNK         = DWORD(Byte('c') or (Byte('r') shl 8) or (Byte('v') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('c','r','v','e')
  2136.   {$EXTERNALSYM DMUS_FOURCC_CURVE_CHUNK}
  2137.   DMUS_FOURCC_MARKER_CHUNK        = DWORD(Byte('m') or (Byte('r') shl 8) or (Byte('k') shl 16) or (Byte('r') shl 24)); // mmioFOURCC('m','r','k','r')
  2138.   {$EXTERNALSYM DMUS_FOURCC_MARKER_CHUNK}
  2139.   DMUS_FOURCC_RESOLUTION_CHUNK    = DWORD(Byte('r') or (Byte('s') shl 8) or (Byte('l') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('r','s','l','n')
  2140.   {$EXTERNALSYM DMUS_FOURCC_RESOLUTION_CHUNK}
  2141.   DMUS_FOURCC_ANTICIPATION_CHUNK  = DWORD(Byte('a') or (Byte('n') shl 8) or (Byte('p') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('a','n','p','n')
  2142.   {$EXTERNALSYM DMUS_FOURCC_ANTICIPATION_CHUNK}
  2143.   DMUS_FOURCC_PATTERN_LIST        = DWORD(Byte('p') or (Byte('t') shl 8) or (Byte('t') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('p','t','t','n')
  2144.   {$EXTERNALSYM DMUS_FOURCC_PATTERN_LIST}
  2145.   DMUS_FOURCC_PATTERN_CHUNK       = DWORD(Byte('p') or (Byte('t') shl 8) or (Byte('n') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','t','n','h')
  2146.   {$EXTERNALSYM DMUS_FOURCC_PATTERN_CHUNK}
  2147.   DMUS_FOURCC_RHYTHM_CHUNK        = DWORD(Byte('r') or (Byte('h') shl 8) or (Byte('t') shl 16) or (Byte('m') shl 24)); // mmioFOURCC('r','h','t','m')
  2148.   {$EXTERNALSYM DMUS_FOURCC_RHYTHM_CHUNK}
  2149.   DMUS_FOURCC_PARTREF_LIST        = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('e') shl 16) or (Byte('f') shl 24)); // mmioFOURCC('p','r','e','f')
  2150.   {$EXTERNALSYM DMUS_FOURCC_PARTREF_LIST}
  2151.   DMUS_FOURCC_PARTREF_CHUNK       = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('f') shl 16) or (Byte('c') shl 24)); // mmioFOURCC('p','r','f','c')
  2152.   {$EXTERNALSYM DMUS_FOURCC_PARTREF_CHUNK}
  2153.   DMUS_FOURCC_STYLE_PERS_REF_LIST = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('r') shl 16) or (Byte('f') shl 24)); // mmioFOURCC('p','r','r','f')
  2154.   {$EXTERNALSYM DMUS_FOURCC_STYLE_PERS_REF_LIST}
  2155.   DMUS_FOURCC_MOTIFSETTINGS_CHUNK = DWORD(Byte('m') or (Byte('t') shl 8) or (Byte('f') shl 16) or (Byte('s') shl 24)); // mmioFOURCC('m','t','f','s')
  2156.   {$EXTERNALSYM DMUS_FOURCC_MOTIFSETTINGS_CHUNK}
  2157.   (* Flags used by variations: these make up the DWORDs in dwVariationChoices.               *)
  2158.   (* These flags determine the types of chords supported by a given variation in DirectMusic *)
  2159.   (* mode.  The first seven flags (bits 1-7) are set if the variation supports major chords  *)
  2160.   (* rooted in scale positions, so, e.g., if bits 1, 2, and 4 are set, the variation         *)
  2161.   (* supports major chords rooted in the tonic, second, and fourth scale positions.  The     *)
  2162.   (* next seven flags serve the same purpose, but for minor chords, and the following seven  *)
  2163.   (* flags serve the same purpose for chords that are not major or minor (e.g., SUS 4        *)
  2164.   (* chords).  Bits 22, 23, and 24 are set if the variation supports chords rooted in the    *)
  2165.   (* scale, chords rooted sharp of scale tones, and chords rooted flat of scale tones,       *)
  2166.   (* respectively.  For example, to support a C# minor chord in the scale of C Major,        *)
  2167.   (* bits 8 (for tonic minor) and 24 (for sharp) need to be set.  Bits 25, 26, an 27 handle  *)
  2168.   (* chords that are triads, 6th or 7th chords, and chords with extensions, respectively.    *)
  2169.   (* bits 28 and 29 handle chords that are followed by tonic and dominant chords,            *)
  2170.   (* respectively.                                                                           *)
  2171.   DMUS_VARIATIONF_MAJOR        = $0000007F; (* Seven positions in the scale - major chords. *)
  2172.   {$EXTERNALSYM DMUS_VARIATIONF_MAJOR}
  2173.   DMUS_VARIATIONF_MINOR        = $00003F80; (* Seven positions in the scale - minor chords. *)
  2174.   {$EXTERNALSYM DMUS_VARIATIONF_MINOR}
  2175.   DMUS_VARIATIONF_OTHER        = $001FC000; (* Seven positions in the scale - other chords. *)
  2176.   {$EXTERNALSYM DMUS_VARIATIONF_OTHER}
  2177.   DMUS_VARIATIONF_ROOT_SCALE   = $00200000; (* Handles chord roots in the scale. *)
  2178.   {$EXTERNALSYM DMUS_VARIATIONF_ROOT_SCALE}
  2179.   DMUS_VARIATIONF_ROOT_FLAT    = $00400000; (* Handles flat chord roots (based on scale notes). *)
  2180.   {$EXTERNALSYM DMUS_VARIATIONF_ROOT_FLAT}
  2181.   DMUS_VARIATIONF_ROOT_SHARP   = $00800000; (* Handles sharp chord roots (based on scale notes). *)
  2182.   {$EXTERNALSYM DMUS_VARIATIONF_ROOT_SHARP}
  2183.   DMUS_VARIATIONF_TYPE_TRIAD   = $01000000; (* Handles simple chords - triads. *)
  2184.   {$EXTERNALSYM DMUS_VARIATIONF_TYPE_TRIAD}
  2185.   DMUS_VARIATIONF_TYPE_6AND7   = $02000000; (* Handles simple chords - 6 and 7. *)
  2186.   {$EXTERNALSYM DMUS_VARIATIONF_TYPE_6AND7}
  2187.   DMUS_VARIATIONF_TYPE_COMPLEX = $04000000; (* Handles complex chords. *)
  2188.   {$EXTERNALSYM DMUS_VARIATIONF_TYPE_COMPLEX}
  2189.   DMUS_VARIATIONF_DEST_TO1     = $08000000; (* Handles transitions to 1 chord. *)
  2190.   {$EXTERNALSYM DMUS_VARIATIONF_DEST_TO1}
  2191.   DMUS_VARIATIONF_DEST_TO5     = $10000000; (* Handles transitions to 5 chord. *)
  2192.   {$EXTERNALSYM DMUS_VARIATIONF_DEST_TO5}
  2193.   DMUS_VARIATIONF_DEST_OTHER   = $40000000; (* Handles transitions to chords other than 1 . *)
  2194.   {$EXTERNALSYM DMUS_VARIATIONF_DEST_OTHER}
  2195.   (* legacy mask for variation modes *)
  2196.   DMUS_VARIATIONF_MODES        = $E0000000;
  2197.   {$EXTERNALSYM DMUS_VARIATIONF_MODES}
  2198.   (* Bits 29 and 31 of the variation flags are the Mode bits.  If both are 0, it's IMA. *)
  2199.   (* If bit 29 is 1, it's Direct Music. *)
  2200.   DMUS_VARIATIONF_MODES_EX     = ($20000000 or $80000000);
  2201.   {$EXTERNALSYM DMUS_VARIATIONF_MODES_EX}
  2202.   DMUS_VARIATIONF_IMA25_MODE   = $00000000;
  2203.   {$EXTERNALSYM DMUS_VARIATIONF_IMA25_MODE}
  2204.   DMUS_VARIATIONF_DMUS_MODE    = $20000000;
  2205.   {$EXTERNALSYM DMUS_VARIATIONF_DMUS_MODE}
  2206.   (* Set this if the part uses marker events *)
  2207.   DMUS_PARTF_USE_MARKERS       = $1;
  2208.   {$EXTERNALSYM DMUS_PARTF_USE_MARKERS}
  2209.   (* Set this if the part is allowed to switch only on chord-aligned markers *)
  2210.   DMUS_PARTF_ALIGN_CHORDS      = $2;
  2211.   {$EXTERNALSYM DMUS_PARTF_ALIGN_CHORDS}
  2212.   (* These specify if the marker event signals whether to stop a variation or start a
  2213.   pattern/variation (or both), and whether new variations must align with a chord *)
  2214.   DMUS_MARKERF_START            = $1;
  2215.   {$EXTERNALSYM DMUS_MARKERF_START}
  2216.   DMUS_MARKERF_STOP             = $2;
  2217.   {$EXTERNALSYM DMUS_MARKERF_STOP}
  2218.   DMUS_MARKERF_CHORD_ALIGN      = $4;
  2219.   {$EXTERNALSYM DMUS_MARKERF_CHORD_ALIGN}
  2220.   (* if this flag is set, variation settings in a playing pattern-based track's state data will
  2221.   persist in the track after it stops playing *)
  2222.   DMUS_PATTERNF_PERSIST_CONTROL = $1;
  2223.   {$EXTERNALSYM DMUS_PATTERNF_PERSIST_CONTROL}
  2224.   (* These specify possible values for DMUS_IO_PATTERN.wEmbellishment (dx8) *)
  2225.   DMUS_EMBELLISHT_NORMAL          = 0;
  2226.   {$EXTERNALSYM DMUS_EMBELLISHT_NORMAL}
  2227.   DMUS_EMBELLISHT_FILL            = 1;
  2228.   {$EXTERNALSYM DMUS_EMBELLISHT_FILL}
  2229.   DMUS_EMBELLISHT_BREAK           = 2;
  2230.   {$EXTERNALSYM DMUS_EMBELLISHT_BREAK}
  2231.   DMUS_EMBELLISHT_INTRO           = 4;
  2232.   {$EXTERNALSYM DMUS_EMBELLISHT_INTRO}
  2233.   DMUS_EMBELLISHT_END             = 8;
  2234.   {$EXTERNALSYM DMUS_EMBELLISHT_END}
  2235.   DMUS_EMBELLISHT_MOTIF           = 16;
  2236.   {$EXTERNALSYM DMUS_EMBELLISHT_MOTIF}
  2237.   DMUS_EMBELLISHT_ALL             = $FFFF;
  2238.   {$EXTERNALSYM DMUS_EMBELLISHT_ALL}
  2239. type
  2240.   (* These specify possible values for DMUS_IO_PATTERN.wEmbellishment (dx8) *)
  2241.   enumDMUS_EMBELLISHT_TYPES = Word; 
  2242.   DMUS_EMBELLISHT_TYPES = enumDMUS_EMBELLISHT_TYPES;
  2243.   {$EXTERNALSYM DMUS_EMBELLISHT_TYPES}
  2244.   TDMusEmbellishtTypes = DMUS_EMBELLISHT_TYPES;
  2245. {$IFNDEF COMPILER6_UP}
  2246.   Byte2 = Word;
  2247. {$ELSE}{$ALIGN 2}
  2248. {$ENDIF}
  2249.   (* These specify possible values for DMUS_IO_PARTREF.bRandomVariation
  2250.    all but DMUS_VARIATIONT_SEQUENTIAL and DMUS_VARIATIONT_RANDOM are dx8. *)
  2251. {$IFNDEF COMPILER6_UP}{$MINENUMSIZE 2}{$ENDIF}
  2252.   enumDMUS_VARIATIONT_TYPES = (
  2253.     DMUS_VARIATIONT_SEQUENTIAL       {= 0}, (* Play sequential starting with variation 1. *)
  2254.     DMUS_VARIATIONT_RANDOM           {= 1}, (* Play randomly. *)
  2255.     DMUS_VARIATIONT_RANDOM_START     {= 2}, (* Play sequential starting with a random variation. *)
  2256.     DMUS_VARIATIONT_NO_REPEAT        {= 3}, (* Play randomly, but don't play the same variation twice. *)
  2257.     DMUS_VARIATIONT_RANDOM_ROW       {= 4}  (* Play randomly as a row: don't repeat any variation until all have played. *)
  2258.   );
  2259.   {$EXTERNALSYM enumDMUS_VARIATIONT_TYPES}
  2260.   DMUS_VARIATIONT_TYPES = enumDMUS_VARIATIONT_TYPES;
  2261.   {$EXTERNALSYM DMUS_VARIATIONT_TYPES}
  2262.   TDMusVariationtTypes = DMUS_VARIATIONT_TYPES;
  2263.   PDMusVariationtTypes = ^TDMusVariationtTypes;
  2264. {$IFNDEF COMPILER6_UP}{$MINENUMSIZE 1}{$ENDIF}
  2265.   PDMusIoTimesig = ^TDMusIoTimesig;
  2266.   _DMUS_IO_TIMESIG = record
  2267.     (* Time signatures define how many beats per measure, which note receives *)
  2268.     (* the beat, and the grid resolution. *)
  2269.     bBeatsPerMeasure: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};   // beats per measure (top of time sig)
  2270.     bBeat: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};              // what note receives the beat (bottom of time sig.)
  2271.                               // we can assume that 0 means 256th note
  2272.     wGridsPerBeat: Word;      // grids per beat
  2273.   end;
  2274.   {$EXTERNALSYM _DMUS_IO_TIMESIG}
  2275.   DMUS_IO_TIMESIG = _DMUS_IO_TIMESIG;
  2276.   {$EXTERNALSYM DMUS_IO_TIMESIG}
  2277.   TDMusIoTimesig = _DMUS_IO_TIMESIG;
  2278.   PDMusIoStyle = ^TDMusIoStyle;
  2279.   _DMUS_IO_STYLE = record
  2280.     timeSig: TDMusIoTimesig;        // Styles have a default Time Signature
  2281.     dblTempo: Double;
  2282.   end;
  2283.   {$EXTERNALSYM _DMUS_IO_STYLE}
  2284.   DMUS_IO_STYLE = _DMUS_IO_STYLE;
  2285.   {$EXTERNALSYM DMUS_IO_STYLE}
  2286.   TDMusIoStyle = _DMUS_IO_STYLE;
  2287.   PDMusIoVersion = ^TDMusIoVersion;
  2288.   _DMUS_IO_VERSION = record
  2289.     dwVersionMS: DWORD;        // Version # high-order 32 bits
  2290.     dwVersionLS: DWORD;        // Version # low-order 32 bits
  2291.   end;
  2292.   {$EXTERNALSYM _DMUS_IO_VERSION}
  2293.   DMUS_IO_VERSION = _DMUS_IO_VERSION;
  2294.   {$EXTERNALSYM DMUS_IO_VERSION}
  2295.   TDMusIoVersion = _DMUS_IO_VERSION;
  2296.   PDMusIoPattern = ^TDMusIoPattern;
  2297.   _DMUS_IO_PATTERN = record
  2298.     timeSig: TDMusIoTimesig; // Patterns can override the Style's Time sig.
  2299.     bGrooveBottom: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};     // bottom of groove range
  2300.     bGrooveTop: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};        // top of groove range
  2301.     wEmbellishment: TDMusEmbellishtTypes; // Fill, Break, Intro, End, Normal, Motif
  2302.     wNbrMeasures: Word;      // length in measures
  2303.     bDestGrooveBottom: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF}; // bottom of groove range for next pattern
  2304.     bDestGrooveTop: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};    // top of groove range for next pattern
  2305.     dwFlags: DWORD;          // various flags
  2306.   end;
  2307.   {$EXTERNALSYM _DMUS_IO_PATTERN}
  2308.   DMUS_IO_PATTERN = _DMUS_IO_PATTERN;
  2309.   {$EXTERNALSYM DMUS_IO_PATTERN}
  2310.   TDMusIoPattern = _DMUS_IO_PATTERN;
  2311.   PDMusIoStylePart = ^TDMusIoStylePart;
  2312.   _DMUS_IO_STYLEPART = record
  2313.     timeSig: TDMusIoTimesig;        // can override pattern's
  2314.     dwVariationChoices: array[0..31] of DWORD; // MOAW choice bitfield
  2315.     guidPartID: TGUID;              // identifies the part
  2316.     wNbrMeasures: Word;             // length of the Part
  2317.     bPlayModeFlags: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};           // see PLAYMODE flags
  2318.     bInvertUpper: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};             // inversion upper limit
  2319.     bInvertLower: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};             // inversion lower limit
  2320.     bPad: array[0..2] of Byte;      // for DWORD alignment
  2321.     dwFlags: DWORD;                 // various flags
  2322.   end;
  2323.   {$EXTERNALSYM _DMUS_IO_STYLEPART}
  2324.   DMUS_IO_STYLEPART = _DMUS_IO_STYLEPART;
  2325.   {$EXTERNALSYM DMUS_IO_STYLEPART}
  2326.   TDMusIoStylePart = _DMUS_IO_STYLEPART;
  2327.   PDMusIoPartRef = ^TDMusIoPartRef;
  2328.   _DMUS_IO_PARTREF = record
  2329.     guidPartID: TGUID;        (* unique ID for matching up with parts *)
  2330.     wLogicalPartID: Word;     (* corresponds to port/device/midi channel OBSOLETE *)
  2331.     bVariationLockID: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};   (* parts with the same ID lock variations. *)
  2332.                               (* high bit is used to identify master Part *)
  2333.     bSubChordLevel: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};     (* tells which sub chord level this part wants *)
  2334.     bPriority: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};          (* 256 priority levels. Parts with lower priority *)
  2335.                               (* aren't played first when a device runs out of *)
  2336.                               (* notes *)
  2337.     bRandomVariation: TDMusVariationtTypes; (* when set, matching variations play in random order *)
  2338.                               (* when clear, matching variations play sequentially *)
  2339.     wPad: Word;               (* not used *)
  2340.     dwPChannel: DWORD;        (* replaces wLogicalPartID *)
  2341.   end;
  2342.   {$EXTERNALSYM _DMUS_IO_PARTREF}
  2343.   DMUS_IO_PARTREF = _DMUS_IO_PARTREF;
  2344.   {$EXTERNALSYM DMUS_IO_PARTREF}
  2345.   TDMusIoPartRef = _DMUS_IO_PARTREF;
  2346.   PDMusIoStyleNote = ^TDMusIoStyleNote;
  2347.   _DMUS_IO_STYLENOTE = record
  2348.     mtGridStart: TMusicTime; (* when this note occurs *)
  2349.     dwVariation: DWORD;      (* variation bits *)
  2350.     mtDuration: TMusicTime;  (* how long this note lasts *)
  2351.     nTimeOffset: Smallint;   (* offset from mtGridStart *)
  2352.     wMusicValue: Word;       (* Position in scale. *)
  2353.     bVelocity: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};         (* Note velocity. *)
  2354.     bTimeRange: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};        (* Range to randomize start time. *)
  2355.     bDurRange: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};         (* Range to randomize duration. *)
  2356.     bVelRange: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};         (* Range to randomize velocity. *)
  2357.     bInversionID: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};      (* Identifies inversion group to which this note belongs *)
  2358.     bPlayModeFlags: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};    (* Can override part *)
  2359.     (* Following exists only under DX8 and on *)
  2360.     bNoteFlags: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};        (* values from DMUS_NOTEF_FLAGS *)
  2361.   end;
  2362.   {$EXTERNALSYM _DMUS_IO_STYLENOTE}
  2363.   DMUS_IO_STYLENOTE = _DMUS_IO_STYLENOTE;
  2364.   {$EXTERNALSYM DMUS_IO_STYLENOTE}
  2365.   TDMusIoStyleNote = _DMUS_IO_STYLENOTE;
  2366.   PDMusIoStyleCurve = ^TDMusIoStyleCurve;
  2367.   _DMUS_IO_STYLECURVE = record
  2368.     mtGridStart: TMusicTime;     (* when this curve occurs *)
  2369.     dwVariation: DWORD;          (* variation bits *)
  2370.     mtDuration: TMusicTime;      (* how long this curve lasts *)
  2371.     mtResetDuration: TMusicTime; (* how long after the end of the curve to reset the curve *)
  2372.     nTimeOffset: Smallint;       (* offset from mtGridStart *)
  2373.     nStartValue: Smallint;       (* curve's start value *)
  2374.     nEndValue: Smallint;         (* curve's end value *)
  2375.     nResetValue: Smallint;       (* the value to which to reset the curve *)
  2376.     bEventType: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};            (* type of curve *)
  2377.     bCurveShape: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};           (* shape of curve *)
  2378.     bCCData: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};               (* CC# *)
  2379.     bFlags: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};                (* Bit 1=TRUE means to send nResetValue. Otherwise, don't.
  2380.                                     Other bits are reserved. *)
  2381.     (*  Following was added for DX8. *)
  2382.     wParamType: Word;            (* RPN or NRPN parameter number. *)
  2383.     wMergeIndex: Word;           (* Allows multiple parameters to be merged (pitchbend, volume, and expression.) *)
  2384.   end;
  2385.   {$EXTERNALSYM _DMUS_IO_STYLECURVE}
  2386.   DMUS_IO_STYLECURVE = _DMUS_IO_STYLECURVE;
  2387.   {$EXTERNALSYM DMUS_IO_STYLECURVE}
  2388.   TDMusIoStyleCurve = _DMUS_IO_STYLECURVE;
  2389.   PDMusIoStyleMarker = ^TDMusIoStyleMarker;
  2390.   _DMUS_IO_STYLEMARKER = record
  2391.     mtGridStart: TMusicTime; (* when this marker occurs *)
  2392.     dwVariation: DWORD;      (* variation bits *)
  2393.     wMarkerFlags: Word;      (* how the marker is used *)
  2394.   end;
  2395.   {$EXTERNALSYM _DMUS_IO_STYLEMARKER}
  2396.   DMUS_IO_STYLEMARKER = _DMUS_IO_STYLEMARKER;
  2397.   {$EXTERNALSYM DMUS_IO_STYLEMARKER}
  2398.   TDMusIoStyleMarker = _DMUS_IO_STYLEMARKER;
  2399.   PDMusIoStyleResolution = ^TDMusIoStyleResolution;
  2400.   _DMUS_IO_STYLERESOLUTION = record
  2401.     dwVariation: DWORD;      (* variation bits *)
  2402.     wMusicValue: Word;       (* Position in scale. *)
  2403.     bInversionID: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};      (* Identifies inversion group to which this note belongs *)
  2404.     bPlayModeFlags: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};    (* Can override part *)
  2405.   end;
  2406.   {$EXTERNALSYM _DMUS_IO_STYLERESOLUTION}
  2407.   DMUS_IO_STYLERESOLUTION = _DMUS_IO_STYLERESOLUTION;
  2408.   {$EXTERNALSYM DMUS_IO_STYLERESOLUTION}
  2409.   TDMusIoStyleResolution = _DMUS_IO_STYLERESOLUTION;
  2410.   PDMusIoStyleAnticipation = ^TDMusIoStyleAnticipation;
  2411.   _DMUS_IO_STYLE_ANTICIPATION = record
  2412.     mtGridStart: TMusicTime; (* when this anticipation occurs *)
  2413.     dwVariation: DWORD;      (* variation bits *)
  2414.     nTimeOffset: Smallint;   (* offset from mtGridStart *)
  2415.     bTimeRange: {$IFNDEF COMPILER6_UP}Byte2{$ELSE}Byte{$ENDIF};        (* Range to randomize start time. *)
  2416.   end;
  2417.   {$EXTERNALSYM _DMUS_IO_STYLE_ANTICIPATION}
  2418.   DMUS_IO_STYLE_ANTICIPATION = _DMUS_IO_STYLE_ANTICIPATION;
  2419.   {$EXTERNALSYM DMUS_IO_STYLE_ANTICIPATION}
  2420.   TDMusIoStyleAnticipation = _DMUS_IO_STYLE_ANTICIPATION;
  2421.   PDMusIoMotifSettings = ^TDMusIoMotifSettings;
  2422.   _DMUS_IO_MOTIFSETTINGS = record
  2423.     dwRepeats: DWORD;           (* Number of repeats. By default, 0. *)
  2424.     mtPlayStart: TMusicTime;    (* Start of playback. By default, 0. *)
  2425.     mtLoopStart: TMusicTime;    (* Start of looping portion. By default, 0. *)
  2426.     mtLoopEnd: TMusicTime;      (* End of loop. Must be greater than mtLoopStart. Or, 0, indicating loop full motif.  *)
  2427.     dwResolution: DWORD;        (* Default resolution. *)
  2428.   end;
  2429.   {$EXTERNALSYM _DMUS_IO_MOTIFSETTINGS}
  2430.   DMUS_IO_MOTIFSETTINGS = _DMUS_IO_MOTIFSETTINGS;
  2431.   {$EXTERNALSYM DMUS_IO_MOTIFSETTINGS}
  2432.   TDMusIoMotifSettings = _DMUS_IO_MOTIFSETTINGS;
  2433. {$ALIGN ON}
  2434. (*
  2435. RIFF
  2436. (
  2437.     'DMST'          // Style
  2438.     <styh-ck>       // Style header chunk
  2439.     <guid-ck>       // Every Style has a GUID
  2440.     [<UNFO-list>]   // Name, author, copyright info., comments
  2441.     [<vers-ck>]     // version chunk
  2442.     <part-list>...  // Array of parts in the Style, used by patterns
  2443.     <pttn-list>...  // Array of patterns in the Style
  2444.     <DMBD-form>...  // Array of bands in the Style