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

Delphi控件源码

开发平台:

Delphi

  1.     [<prrf-list>]...// Optional array of chord map references in the Style
  2. )
  3.     // <styh-ck>
  4.     styh
  5.     (
  6.         <DMUS_IO_STYLE>
  7.     )
  8.     // <guid-ck>
  9.     guid
  10.     (
  11.         <GUID>
  12.     )
  13.     // <vers-ck>
  14.     vers
  15.     (
  16.         <DMUS_IO_VERSION>
  17.     )
  18.     // <part-list>
  19.     LIST
  20.     (
  21.         'part'
  22.         <prth-ck>       // Part header chunk
  23.         [<UNFO-list>]   // Name, author, copyright info., comments
  24.         [<note-ck>]     // Optional chunk containing an array of notes in Part
  25.         [<crve-ck>]     // Optional chunk containing an array of curves in Part
  26.         [<mrkr-ck>]     // Optional chunk containing an array of markers in Part
  27.         [<rsln-ck>]     // Optional chunk containing an array of variation resolutions in Part
  28.         [<anpn-ck>]     // Optional chunk containing an array of resolution anticipations in Part
  29.     )
  30.         // <orth-ck>
  31.         prth
  32.         (
  33.             <DMUS_IO_STYLEPART>
  34.         )
  35.         // <note-ck>
  36.         'note'
  37.         (
  38.             // sizeof DMUS_IO_STYLENOTE:DWORD
  39.             <DMUS_IO_STYLENOTE>...
  40.         )
  41.         // <crve-ck>
  42.         'crve'
  43.         (
  44.             // sizeof DMUS_IO_STYLECURVE:DWORD
  45.             <DMUS_IO_STYLECURVE>...
  46.         )
  47.         // <mrkr-ck>
  48.         'mrkr'
  49.         (
  50.             // sizeof DMUS_IO_STYLEMARKER:DWORD
  51.             <DMUS_IO_STYLEMARKER>...
  52.         )
  53.         // <rsln-ck>
  54.         'rsln'
  55.         (
  56.             // sizeof DMUS_IO_STYLERESOLUTION:DWORD
  57.             <DMUS_IO_STYLERESOLUTION>...
  58.         )
  59.         // <anpn-ck>
  60.         'anpn'
  61.         (
  62.             // sizeof DMUS_IO_STYLE_ANTICIPATION:DWORD
  63.             <DMUS_IO_STYLE_ANTICIPATION>...
  64.         )
  65.     // <pttn-list>
  66.     LIST
  67.     (
  68.         'pttn'
  69.         <ptnh-ck>       // Pattern header chunk
  70.         <rhtm-ck>       // Chunk containing an array of rhythms for chord matching
  71.         [<UNFO-list>]   // Name, author, copyright info., comments
  72.         [<mtfs-ck>]     // Motif settings chunk
  73.         [<DMBD-form>]   // Optional band to be associated with the pattern (for motifs)
  74.         <pref-list>...  // Array of part reference id's
  75.     )
  76.         // <ptnh-ck>
  77.         ptnh
  78.         (
  79.             <DMUS_IO_PATTERN>
  80.         )
  81.         // <rhtm-ck>
  82.         'rhtm'
  83.         (
  84.             // DWORD's representing rhythms for chord matching based on number
  85.             // of measures in the pattern
  86.         )
  87.         // pref-list
  88.         LIST
  89.         (
  90.             'pref'
  91.             <prfc-ck>   // part ref chunk
  92.         )
  93.         // <prfc-ck>
  94.         prfc
  95.         (
  96.             <DMUS_IO_PARTREF>
  97.         )
  98.         // <mtfs-ck>
  99.         mtfs
  100.         (
  101.             <DMUS_IO_MOTIFSETTINGS>
  102.         )
  103.     // <prrf-list>
  104.     LIST
  105.     (
  106.         'prrf'
  107.         <DMRF-list>... // Array of Chordmap references
  108.     )
  109. *)
  110. const
  111.   (* Pattern chunk, for use in Pattern tracks *)
  112.   DMUS_FOURCC_PATTERN_FORM = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('P') shl 16) or (Byte('T') shl 24)); // mmioFOURCC('D','M','P','T')
  113.   {$EXTERNALSYM DMUS_FOURCC_PATTERN_FORM}
  114. (*
  115. RIFF
  116. (
  117.     'DMPT'          // Pattern
  118.     <styh-ck>       // Style header chunk
  119.     <pttn-list>     // The pattern, in single pattern format (includes DMUS_FOURCC_PART_LIST chunks)
  120. )
  121. *)
  122. (* Chord and command file formats *)
  123. type
  124.   (* These specify possible values for DMUS_IO_COMMAND.bRepeatMode (dx8) *)
  125.   enumDMUS_PATTERNT_TYPES = (
  126.     DMUS_PATTERNT_RANDOM           {= 0}, (* Play randomly. (dx7 behavior) *)
  127.     DMUS_PATTERNT_REPEAT           {= 1}, (* Repeat last pattern. *)
  128.     DMUS_PATTERNT_SEQUENTIAL       {= 2}, (* Play sequential starting with first matching pattern. *)
  129.     DMUS_PATTERNT_RANDOM_START     {= 3}, (* Play sequential starting with a random pattern. *)
  130.     DMUS_PATTERNT_NO_REPEAT        {= 4}, (* Play randomly, but don't play the same pattern twice. *)
  131.     DMUS_PATTERNT_RANDOM_ROW       {= 5}  (* Play randomly as a row: don't repeat any pattern until all have played. *)
  132.   );
  133.   {$EXTERNALSYM enumDMUS_PATTERNT_TYPES}
  134.   DMUS_PATTERNT_TYPES = enumDMUS_PATTERNT_TYPES;
  135.   {$EXTERNALSYM DMUS_PATTERNT_TYPES}
  136.   TDMusPatterntTypes = DMUS_PATTERNT_TYPES;
  137. const
  138.   DMUS_FOURCC_CHORDTRACK_LIST        = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('r') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('c','o','r','d')
  139.   {$EXTERNALSYM DMUS_FOURCC_CHORDTRACK_LIST}
  140.   DMUS_FOURCC_CHORDTRACKHEADER_CHUNK = DWORD(Byte('c') or (Byte('r') shl 8) or (Byte('d') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('c','r','d','h')
  141.   {$EXTERNALSYM DMUS_FOURCC_CHORDTRACKHEADER_CHUNK}
  142.   DMUS_FOURCC_CHORDTRACKBODY_CHUNK   = DWORD(Byte('c') or (Byte('r') shl 8) or (Byte('d') shl 16) or (Byte('b') shl 24)); // mmioFOURCC('c','r','d','b')
  143.   {$EXTERNALSYM DMUS_FOURCC_CHORDTRACKBODY_CHUNK}
  144.   DMUS_FOURCC_COMMANDTRACK_CHUNK     = DWORD(Byte('c') or (Byte('m') shl 8) or (Byte('n') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('c','m','n','d')
  145.   {$EXTERNALSYM DMUS_FOURCC_COMMANDTRACK_CHUNK}
  146. type
  147.   PDMusIoChord = ^TDMusIoChord;
  148.   _DMUS_IO_CHORD = packed record
  149.     wszName: array[0..15] of WideChar; (* Name of the chord *)
  150.     mtTime: TMusicTime;   (* Time of this chord *)
  151.     wMeasure: Word;       (* Measure this falls on *)
  152.     bBeat: Byte;          (* Beat this falls on *)
  153.     bFlags: Byte;         (* Various flags *)
  154.   end;
  155.   {$EXTERNALSYM _DMUS_IO_CHORD}
  156.   DMUS_IO_CHORD = _DMUS_IO_CHORD;
  157.   {$EXTERNALSYM DMUS_IO_CHORD}
  158.   TDMusIoChord = _DMUS_IO_CHORD;
  159.   PDMusIoSubChord = ^TDMusIoSubChord;
  160.   _DMUS_IO_SUBCHORD = packed record
  161.     dwChordPattern: DWORD;     (* Notes in the subchord *)
  162.     dwScalePattern: DWORD;     (* Notes in the scale *)
  163.     dwInversionPoints: DWORD;  (* Where inversions can occur *)
  164.     dwLevels: DWORD;           (* Which levels are supported by this subchord *)
  165.     bChordRoot: Byte;          (* Root of the subchord *)
  166.     bScaleRoot: Byte;          (* Root of the scale *)
  167.   end;
  168.   {$EXTERNALSYM _DMUS_IO_SUBCHORD}
  169.   DMUS_IO_SUBCHORD = _DMUS_IO_SUBCHORD;
  170.   {$EXTERNALSYM DMUS_IO_SUBCHORD}
  171.   TDMusIoSubChord = _DMUS_IO_SUBCHORD;
  172.   PDMusIoCommand = ^TDMusIoCommand;
  173.   _DMUS_IO_COMMAND = packed record
  174.     mtTime: TMusicTime;   (* Time of this command *)
  175.     wMeasure: Word;       (* Measure this falls on *)
  176.     bBeat: Byte;          (* Beat this falls on *)
  177.     bCommand: Byte;       (* Command type (see #defines below) *)
  178.     bGrooveLevel: Byte;   (* Groove level (0 if command is not a groove) *)
  179.     bGrooveRange: Byte;   (* Groove range  *)
  180.     bRepeatMode: Byte;    (* Used to control selection of patterns with same groove level  *)
  181.   end;
  182.   {$EXTERNALSYM _DMUS_IO_COMMAND}
  183.   DMUS_IO_COMMAND = _DMUS_IO_COMMAND;
  184.   {$EXTERNALSYM DMUS_IO_COMMAND}
  185.   TDMusIoCommand = _DMUS_IO_COMMAND;
  186. (*
  187.     // <cord-list>
  188.     LIST
  189.     (
  190.         'cord'
  191.         <crdh-ck>
  192.         <crdb-ck>...    // Chord body chunks
  193.     )
  194.         // <crdh-ck>
  195.         crdh
  196.         (
  197.             // Scale: dword (upper 8 bits for root, lower 24 for scale)
  198.         )
  199.         // <crdb-ck>
  200.         crdb
  201.         (
  202.             // sizeof DMUS_IO_CHORD:dword
  203.             <DMUS_IO_CHORD>
  204.             // # of DMUS_IO_SUBCHORDS:dword
  205.             // sizeof DMUS_IO_SUBCHORDS:dword
  206.             // a number of <DMUS_IO_SUBCHORD>
  207.         )
  208.     // <cmnd-list>
  209.     'cmnd'
  210.     (
  211.         //sizeof DMUS_IO_COMMAND: DWORD
  212.         <DMUS_IO_COMMAND>...
  213.     )
  214. *)
  215. (*  File io for DirectMusic Tool and ToolGraph objects
  216. *)
  217. const
  218.   (* RIFF ids: *)
  219.   DMUS_FOURCC_TOOLGRAPH_FORM = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('T') shl 16) or (Byte('G') shl 24)); // mmioFOURCC('D','M','T','G')
  220.   {$EXTERNALSYM DMUS_FOURCC_TOOLGRAPH_FORM}
  221.   DMUS_FOURCC_TOOL_LIST      = DWORD(Byte('t') or (Byte('o') shl 8) or (Byte('l') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('t','o','l','l')
  222.   {$EXTERNALSYM DMUS_FOURCC_TOOL_LIST}
  223.   DMUS_FOURCC_TOOL_FORM      = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('T') shl 16) or (Byte('L') shl 24)); // mmioFOURCC('D','M','T','L')
  224.   {$EXTERNALSYM DMUS_FOURCC_TOOL_FORM}
  225.   DMUS_FOURCC_TOOL_CHUNK     = DWORD(Byte('t') or (Byte('o') shl 8) or (Byte('l') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('t','o','l','h')
  226.   {$EXTERNALSYM DMUS_FOURCC_TOOL_CHUNK}
  227. type
  228.   (* io type = recordures: *)
  229.   PDMusIoToolHeader = ^TDMusIoToolHeader;
  230.   _DMUS_IO_TOOL_HEADER = packed record
  231.     guidClassID: TGUID;     (* Class id of tool. *)
  232.     lIndex: Longint;        (* Position in graph. *)
  233.     cPChannels: DWORD;      (* Number of items in channels array. *)
  234.     ckid: FOURCC;           (* chunk ID of tool's data chunk if 0 fccType valid. *)
  235.     fccType: FOURCC;        (* list type if NULL ckid valid. *)
  236.     dwPChannels: array[0..0] of DWORD; (* Array of PChannels, size determined by cPChannels. *)
  237.   end;
  238.   {$EXTERNALSYM _DMUS_IO_TOOL_HEADER}
  239.   DMUS_IO_TOOL_HEADER = _DMUS_IO_TOOL_HEADER;
  240.   {$EXTERNALSYM DMUS_IO_TOOL_HEADER}
  241.   TDMusIoToolHeader = _DMUS_IO_TOOL_HEADER;
  242. (*
  243. RIFF
  244. (
  245.     'DMTG'          // DirectMusic ToolGraph chunk
  246.     [<guid-ck>]     // GUID for ToolGraph
  247.     [<vers-ck>]     // Optional version info
  248.     [<UNFO-list>]   // Name, author, copyright info., comments
  249.     <toll-list>     // List of Tools
  250. )
  251.     // <guid-ck>
  252.     'guid'
  253.     (
  254.         <GUID>
  255.     )
  256.     // <vers-ck>
  257.     vers
  258.     (
  259.         <DMUS_IO_VERSION>
  260.     )
  261.     // <toll-list>
  262.     LIST
  263.     (
  264.         'toll'          // Array of tools
  265.         <DMTL-form>...  // Each tool is encapsulated in a RIFF chunk
  266.     )
  267. // <DMTL-form>      Tools are embedded in a graph. Theoretically, they can be saved as individual files too.
  268. RIFF
  269. (
  270.     'DMTL'
  271.     <tolh-ck>
  272.     [<data>]        // Tool data. Must be a RIFF readable chunk.
  273. )
  274.     // <tolh-ck>            // Tool header chunk
  275.     (
  276.         'tolh'
  277.         <DMUS_IO_TOOL_HEADER>   // Tool header
  278.     )
  279. *)
  280. (*  The AudioPath file carries everything for describing a specific audio path,
  281.     including Tool Graph and Buffer Descriptor.
  282.     This can even be used for configuring a complete performance.
  283. *)
  284. const
  285.   DMUS_FOURCC_AUDIOPATH_FORM = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('A') shl 16) or (Byte('P') shl 24)); // mmioFOURCC('D','M','A','P')
  286.   {$EXTERNALSYM DMUS_FOURCC_AUDIOPATH_FORM}
  287. (*
  288. RIFF
  289. (
  290.     'DMAP'          // DirectMusic AudioPath chunk
  291.     [<guid-ck>]     // GUID for this Audio Path configuration
  292.     [<vers-ck>]     // Optional version info
  293.     [<UNFO-list>]   // Name, author, copyright info., comments
  294.     [<DMTG-form>]   // Optional ToolGraph
  295.     [<pcsl-list>]   // Optional list of port configurations
  296.     [<dbfl-list>]...// Optional array of Dsound buffer descriptors
  297. )
  298. *)
  299.   DMUS_FOURCC_PORTCONFIGS_LIST = DWORD(Byte('p') or (Byte('c') shl 8) or (Byte('s') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('p','c','s','l')
  300.   {$EXTERNALSYM DMUS_FOURCC_PORTCONFIGS_LIST}
  301.   DMUS_FOURCC_PORTCONFIG_LIST  = DWORD(Byte('p') or (Byte('c') shl 8) or (Byte('f') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('p','c','f','l')
  302.   {$EXTERNALSYM DMUS_FOURCC_PORTCONFIG_LIST}
  303.   DMUS_FOURCC_PORTCONFIG_ITEM  = DWORD(Byte('p') or (Byte('c') shl 8) or (Byte('f') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','c','f','h')
  304.   {$EXTERNALSYM DMUS_FOURCC_PORTCONFIG_ITEM}
  305.   DMUS_FOURCC_PORTPARAMS_ITEM  = DWORD(Byte('p') or (Byte('p') shl 8) or (Byte('r') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','p','r','h')
  306.   {$EXTERNALSYM DMUS_FOURCC_PORTPARAMS_ITEM}
  307.   DMUS_FOURCC_DSBUFFER_LIST    = DWORD(Byte('d') or (Byte('b') shl 8) or (Byte('f') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('d','b','f','l')
  308.   {$EXTERNALSYM DMUS_FOURCC_DSBUFFER_LIST}
  309.   DMUS_FOURCC_DSBUFFATTR_ITEM  = DWORD(Byte('d') or (Byte('d') shl 8) or (Byte('a') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('d','d','a','h')
  310.   {$EXTERNALSYM DMUS_FOURCC_DSBUFFATTR_ITEM}
  311.   DMUS_FOURCC_PCHANNELS_LIST   = DWORD(Byte('p') or (Byte('c') shl 8) or (Byte('h') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('p','c','h','l')
  312.   {$EXTERNALSYM DMUS_FOURCC_PCHANNELS_LIST}
  313.   DMUS_FOURCC_PCHANNELS_ITEM   = DWORD(Byte('p') or (Byte('c') shl 8) or (Byte('h') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','c','h','h')
  314.   {$EXTERNALSYM DMUS_FOURCC_PCHANNELS_ITEM}
  315. type
  316.   PDMusIoPortConfigHeader = ^TDMusIoPortConfigHeader;
  317.   _DMUS_IO_PORTCONFIG_HEADER = packed record
  318.     guidPort: TGUID;           (* GUID of requested port. *)
  319.     dwPChannelBase: DWORD;     (* PChannel that this should start on. *)
  320.     dwPChannelCount: DWORD;    (* How many channels. *)
  321.     dwFlags: DWORD;            (* Various flags. *)
  322.   end;
  323.   {$EXTERNALSYM _DMUS_IO_PORTCONFIG_HEADER}
  324.   DMUS_IO_PORTCONFIG_HEADER = _DMUS_IO_PORTCONFIG_HEADER;
  325.   {$EXTERNALSYM DMUS_IO_PORTCONFIG_HEADER}
  326.   TDMusIoPortConfigHeader = _DMUS_IO_PORTCONFIG_HEADER;
  327. const
  328.   DMUS_PORTCONFIGF_DRUMSON10  = 1;   (* This port configured for drums on channel 10. *)
  329.   {$EXTERNALSYM DMUS_PORTCONFIGF_DRUMSON10}
  330.   DMUS_PORTCONFIGF_USEDEFAULT = 2;   (* Use the default port. *)
  331.   {$EXTERNALSYM DMUS_PORTCONFIGF_USEDEFAULT}
  332. (* Each portconfig has one or more pchannel to buffer mappings. Each buffer
  333.    is identified by a guid. Each pchannel can map to one or more buffers.
  334.    This is defined with one or more DMUS_IO_PCHANNELTOBUFFER_HEADER
  335.    structures. Each defines a range of PChannels and the set of buffers
  336.    that they connect to.
  337. *)
  338. type
  339.   PDMusIoPChannelToBufferHeader = ^TDMusIoPChannelToBufferHeader;
  340.   _DMUS_IO_PCHANNELTOBUFFER_HEADER = packed record
  341.     dwPChannelBase:   DWORD;     (* PChannel that this should start on. *)
  342.     dwPChannelCount:   DWORD;    (* How many PChannels. *)
  343.     dwBufferCount:   DWORD;      (* How many buffers do these connect to. *)
  344.     dwFlags:   DWORD;            (* Various flags. Currently reserved for future use. Must be 0. *)
  345.   end;
  346.   {$EXTERNALSYM _DMUS_IO_PCHANNELTOBUFFER_HEADER}
  347.   DMUS_IO_PCHANNELTOBUFFER_HEADER = _DMUS_IO_PCHANNELTOBUFFER_HEADER;
  348.   {$EXTERNALSYM DMUS_IO_PCHANNELTOBUFFER_HEADER}
  349.   TDMusIoPChannelToBufferHeader = _DMUS_IO_PCHANNELTOBUFFER_HEADER;
  350. (* Each buffer is represented by an DSBC form. This is wrapped by the
  351.    DMUS_IO_BUFFER_ATTRIBUTES_HEADER which identifies how to use the
  352.    buffer. In particular, it indicates whether this gets dynamically duplicated
  353.    or all references to this should share the same instance.
  354.    To resolve references, the unique GUID of the buffer is also stored
  355.    in this structure.
  356. *)
  357.   PDMusIoBufferAttributesHeader = ^TDMusIoBufferAttributesHeader;
  358.   _DMUS_IO_BUFFER_ATTRIBUTES_HEADER = packed record
  359.     guidBufferID: TGUID;       (* Each buffer config has a unique ID. *)
  360.     dwFlags: DWORD;            (* Various flags. *)
  361.   end;
  362.   {$EXTERNALSYM _DMUS_IO_BUFFER_ATTRIBUTES_HEADER}
  363.   DMUS_IO_BUFFER_ATTRIBUTES_HEADER = _DMUS_IO_BUFFER_ATTRIBUTES_HEADER;
  364.   {$EXTERNALSYM DMUS_IO_BUFFER_ATTRIBUTES_HEADER}
  365.   TDMusIoBufferAttributesHeader = _DMUS_IO_BUFFER_ATTRIBUTES_HEADER;
  366. const
  367.   (* DMUS_IO_BUFFER_ATTRIBUTES_HEADER.dwFlags: *)
  368.   DMUS_BUFFERF_SHARED     = 1;   (* Share this with other audio paths, instead of creating unique copies. *)
  369.   {$EXTERNALSYM DMUS_BUFFERF_SHARED}
  370.   DMUS_BUFFERF_DEFINED    = 2;   (* Use one of the standard predefined buffers (see GUID_Buffer... in dmusici.h.) *)
  371.   {$EXTERNALSYM DMUS_BUFFERF_DEFINED}
  372.   DMUS_BUFFERF_MIXIN      = 8;   (* This is a mixin buffer. *)
  373.   {$EXTERNALSYM DMUS_BUFFERF_MIXIN}
  374. (*
  375. LIST
  376. (
  377.     'pcsl'          // Array of port configurations
  378.     <pcfl-list>...  // One or more port configurations, each in a list chunk
  379. )
  380. LIST
  381. (
  382.     'pcfl'          // List container for one port configuration.
  383.     <pcfh-ck>       // Portconfig header chunk.
  384.     <pprh-ck>       // Port params, to be used to create the port.
  385.     [<dbfl-list>]...// Optional array of Dsound buffer descriptors
  386.     [<pchl-list>]   // Optional list of pchannel to buffer assignments
  387. )
  388.     // <pcfh-ck>            // Port config header chunk
  389.     (
  390.         'pcfh'
  391.         <DMUS_IO_PORTCONFIG_HEADER>   // Port config header
  392.     )
  393.     // <pprh-ck>            // Port params header chunk
  394.     (
  395.         'pprh'
  396.         <DMUS_PORTPARAMS8>   // Port params header
  397.     )
  398. LIST
  399. (
  400.     'pchl'          // List container for one or more pchannel to buffer assignments.
  401.     <pchh-ck>...    // One or more pchannel to buffer assignment headers and data.
  402.     // <pchh-ck>
  403.     (
  404.         'pchh'
  405.         <DMUS_IO_PCHANNELTOBUFFER_HEADER>   // Description of PChannels
  406.         <GUID>...                           // Array of GUIDs defining the buffers they all connect to.
  407.     )
  408. )
  409. LIST
  410. (
  411.     'dbfl'          // List container for one buffer and buffer attributes header.
  412.     <ddah-ck>       // Buffer attributes header. 
  413.     [<DSBC-form>]   // Buffer configuration. Not required when header uses a predefined buffer type.
  414.     // <ddah-ck>
  415.     (
  416.         'ddah'
  417.         <DMUS_IO_BUFFER_ATTRIBUTES_HEADER>   // Buffer attributes.
  418.     )
  419. )
  420. *)
  421. (*  File io for DirectMusic Band Track object *)
  422. const
  423.   (* RIFF ids: *)
  424.   DMUS_FOURCC_BANDTRACK_FORM  = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('B') shl 16) or (Byte('T') shl 24)); // mmioFOURCC('D','M','B','T')
  425.   {$EXTERNALSYM DMUS_FOURCC_BANDTRACK_FORM}
  426.   DMUS_FOURCC_BANDTRACK_CHUNK = DWORD(Byte('b') or (Byte('d') shl 8) or (Byte('t') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('b','d','t','h')
  427.   {$EXTERNALSYM DMUS_FOURCC_BANDTRACK_CHUNK}
  428.   DMUS_FOURCC_BANDS_LIST      = DWORD(Byte('l') or (Byte('b') shl 8) or (Byte('d') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('l','b','d','l')
  429.   {$EXTERNALSYM DMUS_FOURCC_BANDS_LIST}
  430.   DMUS_FOURCC_BAND_LIST       = DWORD(Byte('l') or (Byte('b') shl 8) or (Byte('n') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('l','b','n','d')
  431.   {$EXTERNALSYM DMUS_FOURCC_BAND_LIST}
  432.   DMUS_FOURCC_BANDITEM_CHUNK  = DWORD(Byte('b') or (Byte('d') shl 8) or (Byte('i') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('b','d','i','h')
  433.   {$EXTERNALSYM DMUS_FOURCC_BANDITEM_CHUNK}
  434.   DMUS_FOURCC_BANDITEM_CHUNK2 = DWORD(Byte('b') or (Byte('d') shl 8) or (Byte('2') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('b','d','2','h')
  435.   {$EXTERNALSYM DMUS_FOURCC_BANDITEM_CHUNK2}
  436. type
  437.   (* io structures *)
  438.   PDMusIoBandTrackHeader = ^TDMusIoBandTrackHeader;
  439.   _DMUS_IO_BAND_TRACK_HEADER = packed record
  440.     bAutoDownload: BOOL;     (* Determines if Auto-Download is enabled. *)
  441.   end;
  442.   {$EXTERNALSYM _DMUS_IO_BAND_TRACK_HEADER}
  443.   DMUS_IO_BAND_TRACK_HEADER = _DMUS_IO_BAND_TRACK_HEADER;
  444.   {$EXTERNALSYM DMUS_IO_BAND_TRACK_HEADER}
  445.   TDMusIoBandTrackHeader = _DMUS_IO_BAND_TRACK_HEADER;
  446.   PDMusIoBandItemHeader = ^TDMusIoBandItemHeader;
  447.   _DMUS_IO_BAND_ITEM_HEADER = packed record
  448.     lBandTime: TMusicTime;   (* Position in track list. *)
  449.   end;
  450.   {$EXTERNALSYM _DMUS_IO_BAND_ITEM_HEADER}
  451.   DMUS_IO_BAND_ITEM_HEADER = _DMUS_IO_BAND_ITEM_HEADER;
  452.   {$EXTERNALSYM DMUS_IO_BAND_ITEM_HEADER}
  453.   TDMusIoBandItemHeader = _DMUS_IO_BAND_ITEM_HEADER;
  454.   PDMusIoBandItemHeader2 = ^TDMusIoBandItemHeader2;
  455.   _DMUS_IO_BAND_ITEM_HEADER2 = packed record
  456.     lBandTimeLogical: TMusicTime;   (* Position in track list. Time in the music with which band change is associated. *)
  457.     lBandTimePhysical: TMusicTime;  (* Precise time band change will take effect. Should be close to logical time. *)
  458.   end;
  459.   {$EXTERNALSYM _DMUS_IO_BAND_ITEM_HEADER2}
  460.   DMUS_IO_BAND_ITEM_HEADER2 = _DMUS_IO_BAND_ITEM_HEADER2;
  461.   {$EXTERNALSYM DMUS_IO_BAND_ITEM_HEADER2}
  462.   TDMusIoBandItemHeader2 = _DMUS_IO_BAND_ITEM_HEADER2;
  463. (*
  464. RIFF
  465. (
  466.     'DMBT'          // DirectMusic Band Track form-type
  467.     [<bdth-ck>]     // Band track header
  468.     [<guid-ck>]     // GUID for band track
  469.     [<vers-ck>]     // Optional version info
  470.     [<UNFO-list>]   // Name, author, copyright info., comments
  471.     <lbdl-list>     // List of Band items
  472. )
  473.     // <bnth-ck>
  474.     'bdth'
  475.     (
  476.         <DMUS_IO_BAND_TRACK_HEADER>
  477.     )
  478.     // <guid-ck>
  479.     'guid'
  480.     (
  481.         <GUID>
  482.     )
  483.     // <vers-ck>
  484.     vers
  485.     (
  486.         <DMUS_IO_VERSION>
  487.     )
  488.     // <lbdl-list>
  489.     LIST
  490.     (
  491.         'lbdl'
  492.         <lbnd-list>...  // Array of bands, each encapsulated in a list chunk
  493.     )
  494.         // <lbnd-list>
  495.         LIST
  496.         (
  497.             'lbnd'
  498.             <bdih-ck> or <bd2h-ck>  // bdih is a legacy format.  bd2h is preferred for new content.
  499.             <DMBD-form> // Band
  500.         )
  501.             // <bdih-ck> or <bd2h-ck>       // band item header
  502.             (
  503.                 <DMUS_IO_BAND_ITEM_HEADER> or <DMUS_IO_BAND_ITEM_HEADER2> // Band item header
  504.             )
  505. *)
  506. (*  File io for DirectMusic Band object
  507. *)
  508. const
  509.   (* RIFF ids: *)
  510.   DMUS_FOURCC_BAND_FORM        = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('B') shl 16) or (Byte('D') shl 24)); // mmioFOURCC('D','M','B','D')
  511.   {$EXTERNALSYM DMUS_FOURCC_BAND_FORM}
  512.   DMUS_FOURCC_INSTRUMENTS_LIST = DWORD(Byte('l') or (Byte('b') shl 8) or (Byte('i') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('l','b','i','l')
  513.   {$EXTERNALSYM DMUS_FOURCC_INSTRUMENTS_LIST}
  514.   DMUS_FOURCC_INSTRUMENT_LIST  = DWORD(Byte('l') or (Byte('b') shl 8) or (Byte('i') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('l','b','i','n')
  515.   {$EXTERNALSYM DMUS_FOURCC_INSTRUMENT_LIST}
  516.   DMUS_FOURCC_INSTRUMENT_CHUNK = DWORD(Byte('b') or (Byte('i') shl 8) or (Byte('n') shl 16) or (Byte('s') shl 24)); // mmioFOURCC('b','i','n','s')
  517.   {$EXTERNALSYM DMUS_FOURCC_INSTRUMENT_CHUNK}
  518. (* Flags for DMUS_IO_INSTRUMENT
  519.  *)
  520.   DMUS_IO_INST_PATCH          = (1 shl 0);        (* dwPatch is valid. *)
  521.   {$EXTERNALSYM DMUS_IO_INST_PATCH}
  522.   DMUS_IO_INST_BANKSELECT     = (1 shl 1);        (* dwPatch contains a valid Bank Select MSB and LSB part *)
  523.   {$EXTERNALSYM DMUS_IO_INST_BANKSELECT}
  524.   DMUS_IO_INST_ASSIGN_PATCH   = (1 shl 3);        (* dwAssignPatch is valid *)
  525.   {$EXTERNALSYM DMUS_IO_INST_ASSIGN_PATCH}
  526.   DMUS_IO_INST_NOTERANGES     = (1 shl 4);        (* dwNoteRanges is valid *)
  527.   {$EXTERNALSYM DMUS_IO_INST_NOTERANGES}
  528.   DMUS_IO_INST_PAN            = (1 shl 5);        (* bPan is valid *)
  529.   {$EXTERNALSYM DMUS_IO_INST_PAN}
  530.   DMUS_IO_INST_VOLUME         = (1 shl 6);        (* bVolume is valid *)
  531.   {$EXTERNALSYM DMUS_IO_INST_VOLUME}
  532.   DMUS_IO_INST_TRANSPOSE      = (1 shl 7);        (* nTranspose is valid *)
  533.   {$EXTERNALSYM DMUS_IO_INST_TRANSPOSE}
  534.   DMUS_IO_INST_GM             = (1 shl 8);        (* Instrument is from GM collection *)
  535.   {$EXTERNALSYM DMUS_IO_INST_GM}
  536.   DMUS_IO_INST_GS             = (1 shl 9);        (* Instrument is from GS collection *)
  537.   {$EXTERNALSYM DMUS_IO_INST_GS}
  538.   DMUS_IO_INST_XG             = (1 shl 10);       (* Instrument is from XG collection *)
  539.   {$EXTERNALSYM DMUS_IO_INST_XG}
  540.   DMUS_IO_INST_CHANNEL_PRIORITY = (1 shl 11);     (* dwChannelPriority is valid *)
  541.   {$EXTERNALSYM DMUS_IO_INST_CHANNEL_PRIORITY}
  542.   DMUS_IO_INST_USE_DEFAULT_GM_SET = (1 shl 12);   (* Always use the default GM set for this patch,  *)
  543.   {$EXTERNALSYM DMUS_IO_INST_USE_DEFAULT_GM_SET}
  544.                                                   (* don't rely on the synth caps stating GM or GS in hardware. *)
  545.   DMUS_IO_INST_PITCHBENDRANGE = (1 shl 13);       (* nPitchBendRange is valid *)
  546.   {$EXTERNALSYM DMUS_IO_INST_PITCHBENDRANGE}
  547. type
  548.   (* io structures *)
  549.   PDMusIoInstrument = ^TDMusIoInstrument;
  550.   _DMUS_IO_INSTRUMENT = packed record
  551.     dwPatch: DWORD;            (* MSB, LSB and Program change to define instrument *)
  552.     dwAssignPatch: DWORD;      (* MSB, LSB and Program change to assign to instrument when downloading *)
  553.     dwNoteRanges: array[0..3] of DWORD; (* 128 bits; one for each MIDI note instrument needs to able to play *)
  554.     dwPChannel: DWORD;         (* PChannel instrument plays on *)
  555.     dwFlags: DWORD;            (* DMUS_IO_INST_ flags *)
  556.     bPan: Byte;                (* Pan for instrument *)
  557.     bVolume: Byte;             (* Volume for instrument *)
  558.     nTranspose: Smallint;      (* Number of semitones to transpose notes *)
  559.     dwChannelPriority: DWORD;  (* Channel priority *)
  560.     nPitchBendRange: Smallint; (* Number of semitones shifted by pitch bend *)
  561.   end;
  562.   {$EXTERNALSYM _DMUS_IO_INSTRUMENT}
  563.   DMUS_IO_INSTRUMENT = _DMUS_IO_INSTRUMENT;
  564.   {$EXTERNALSYM DMUS_IO_INSTRUMENT}
  565.   TDMusIoInstrument = _DMUS_IO_INSTRUMENT;
  566. (*
  567. // <DMBD-form> bands can be embedded in other forms
  568. RIFF
  569. (
  570.     'DMBD'          // DirectMusic Band chunk
  571.     [<guid-ck>]     // GUID for band
  572.     [<vers-ck>]     // Optional version info
  573.     [<UNFO-list>]   // Name, author, copyright info., comments
  574.     <lbil-list>     // List of Instruments
  575. )
  576.     // <guid-ck>
  577.     'guid'
  578.     (
  579.         <GUID>
  580.     )
  581.     // <vers-ck>
  582.     vers
  583.     (
  584.         <DMUS_IO_VERSION>
  585.     )
  586.     // <lbil-list>
  587.     LIST
  588.     (
  589.         'lbil'          // Array of instruments
  590.         <lbin-list>...  // Each instrument is encapsulated in a list
  591.     )
  592.         // <lbin-list>
  593.         LIST
  594.         (
  595.             'lbin'
  596.             <bins-ck>
  597.             [<DMRF-list>]       // Optional reference to DLS Collection file.
  598.         )
  599.             // <bins-ck>            // Instrument chunk
  600.             (
  601.                 'bins'
  602.                 <DMUS_IO_INSTRUMENT>    // Instrument header
  603.             )
  604. *)
  605. (* This RIFF id and io struct have been added to allow wave files (and the wave object) to
  606.    differentiate between streaming and one-shot waves, and to give a prefetch for streaming
  607.    waves  *)
  608. const
  609.   DMUS_FOURCC_WAVEHEADER_CHUNK = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('v') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('w','a','v','h')
  610.   {$EXTERNALSYM DMUS_FOURCC_WAVEHEADER_CHUNK}
  611. type
  612.   PDMusIoWaveHeader = ^TDMusIoWaveHeader;
  613.   _DMUS_IO_WAVE_HEADER = packed record
  614.     rtReadAhead: TReferenceTime; (* How far ahead in the stream wave data will be read (in REFERENCE_TIME).  Ignored for one-shot waves. *)
  615.     dwFlags: DWORD;              (* Various flags, including whether this is a streaming wave and whether it can be invalidated. *)
  616.   end;
  617.   {$EXTERNALSYM _DMUS_IO_WAVE_HEADER}
  618.   DMUS_IO_WAVE_HEADER = _DMUS_IO_WAVE_HEADER;
  619.   {$EXTERNALSYM DMUS_IO_WAVE_HEADER}
  620.   TDMusIoWaveHeader = _DMUS_IO_WAVE_HEADER;
  621. (*  File io for Wave track *)
  622. const
  623. (* RIFF ids: *)
  624.   DMUS_FOURCC_WAVETRACK_LIST  = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('v') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('w','a','v','t')
  625.   {$EXTERNALSYM DMUS_FOURCC_WAVETRACK_LIST}
  626.   DMUS_FOURCC_WAVETRACK_CHUNK = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('t') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('w','a','t','h')
  627.   {$EXTERNALSYM DMUS_FOURCC_WAVETRACK_CHUNK}
  628.   DMUS_FOURCC_WAVEPART_LIST   = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('v') shl 16) or (Byte('p') shl 24)); // mmioFOURCC('w','a','v','p')
  629.   {$EXTERNALSYM DMUS_FOURCC_WAVEPART_LIST}
  630.   DMUS_FOURCC_WAVEPART_CHUNK  = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('p') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('w','a','p','h')
  631.   {$EXTERNALSYM DMUS_FOURCC_WAVEPART_CHUNK}
  632.   DMUS_FOURCC_WAVEITEM_LIST   = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('v') shl 16) or (Byte('i') shl 24)); // mmioFOURCC('w','a','v','i')
  633.   {$EXTERNALSYM DMUS_FOURCC_WAVEITEM_LIST}
  634.   DMUS_FOURCC_WAVE_LIST       = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('v') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('w','a','v','e')
  635.   {$EXTERNALSYM DMUS_FOURCC_WAVE_LIST}
  636.   DMUS_FOURCC_WAVEITEM_CHUNK  = DWORD(Byte('w') or (Byte('a') shl 8) or (Byte('i') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('w','a','i','h')
  637.   {$EXTERNALSYM DMUS_FOURCC_WAVEITEM_CHUNK}
  638. (* This flag is included in DMUS_IO_WAVE_TRACK_HEADER.dwFlags.  If set, the track will get its
  639.    variations from a pattern track, via GetParam(GUID_Variations). *)
  640.   DMUS_WAVETRACKF_SYNC_VAR   = $1;
  641.   {$EXTERNALSYM DMUS_WAVETRACKF_SYNC_VAR}
  642. (* This is also included in DMUS_IO_WAVE_TRACK_HEADER.dwFlags.  If set, variation control
  643.    information will persist from one playback instance to the next.*)
  644.   DMUS_WAVETRACKF_PERSIST_CONTROL = $2;
  645.   {$EXTERNALSYM DMUS_WAVETRACKF_PERSIST_CONTROL}
  646. type
  647.   PDMusIoWaveTrackHeader = ^TDMusIoWaveTrackHeader;
  648.   _DMUS_IO_WAVE_TRACK_HEADER = packed record
  649.     lVolume: Longint;      (* Gain, in 1/100th of dB, to be applied to all waves.  Note:  All gain values should be negative. *)
  650.     dwFlags: DWORD;        (* Flags, including whether this track syncs to a pattern track for its variations. *)
  651.   end;
  652.   {$EXTERNALSYM _DMUS_IO_WAVE_TRACK_HEADER}
  653.   DMUS_IO_WAVE_TRACK_HEADER = _DMUS_IO_WAVE_TRACK_HEADER;
  654.   {$EXTERNALSYM DMUS_IO_WAVE_TRACK_HEADER}
  655.   TDMusIoWaveTrackHeader = _DMUS_IO_WAVE_TRACK_HEADER;
  656.   PDMusIoWavePartHeader = ^TDMusIoWavePartHeader;
  657.   _DMUS_IO_WAVE_PART_HEADER = packed record
  658.     lVolume: Longint;      (* Gain, in 1/100th of dB, to be applied to all waves in wave part.  Note:  All gain values should be negative. *)
  659.     dwVariations: DWORD;   (* Variation mask for which of 32 variations *)
  660.     dwPChannel: DWORD;     (* PChannel *)
  661.     dwLockToPart: DWORD;   (* Part ID to lock to. *)
  662.     dwFlags: DWORD;        (* Flags, including stuff for managing how variations are chosen (in low-order nibble) *)
  663.     dwIndex: DWORD;        (* Index for distinguishing multiple parts on the same PChannel*)
  664.   end;
  665.   {$EXTERNALSYM _DMUS_IO_WAVE_PART_HEADER}
  666.   DMUS_IO_WAVE_PART_HEADER = _DMUS_IO_WAVE_PART_HEADER;
  667.   {$EXTERNALSYM DMUS_IO_WAVE_PART_HEADER}
  668.   TDMusIoWavePartHeader = _DMUS_IO_WAVE_PART_HEADER;
  669.   PDMusIoWaveItemHeader = ^TDMusIoWaveItemHeader;
  670.   _DMUS_IO_WAVE_ITEM_HEADER = packed record
  671.     lVolume: Longint;               (* Gain, in 1/100th of dB.  Note:  All gain values should be negative. *)
  672.     lPitch: Longint;                (* Pitch offset in 1/100th of a semitone. *)
  673.     dwVariations: DWORD;            (* Variation flags for which of 32 variations this wave belongs to. *)
  674.     rtTime: TReferenceTime;         (* Start time, in REFERENCE_TIME, if clock time track, or MUSIC_TIME for music time track. *)
  675.     rtStartOffset: TReferenceTime;  (* Distance into wave to start playback, in reference time units. *)
  676.     rtReserved: TReferenceTime;     (* Reserved field. *)
  677.     rtDuration: TReferenceTime;     (* Duration, in REFERENCE_TIME or MUSIC_TIME, depending on track timing format. *)
  678.     mtLogicalTime: TMusicTime;      (* If in music track format, this indicates the musical boundary where this belongs. Otherwise, ignored. *)
  679.     dwLoopStart: DWORD;             (* Start point for a looping wave. *)
  680.     dwLoopEnd: DWORD;               (* End point for a looping wave. *)
  681.     dwFlags: DWORD;                 (* Various flags, including whether this is a streaming wave and whether it can be invalidated. *)
  682.     wVolumeRange: Word;             (* Random range for volume. *)
  683.     wPitchRange: Word;              (* Random range for pitch. *)
  684.   end;
  685.   {$EXTERNALSYM _DMUS_IO_WAVE_ITEM_HEADER}
  686.   DMUS_IO_WAVE_ITEM_HEADER = _DMUS_IO_WAVE_ITEM_HEADER;
  687.   {$EXTERNALSYM DMUS_IO_WAVE_ITEM_HEADER}
  688.   TDMusIoWaveItemHeader = _DMUS_IO_WAVE_ITEM_HEADER;
  689. (*
  690. LIST
  691. {
  692.     'wavt'          // Wave track chunk
  693.     <wath-ck>       // Wave track header
  694.     <wavp-list>...  // Array of Wave Parts
  695. }
  696.     // <wath-ck>
  697.     'wath'
  698.     {
  699.         <DMUS_IO_WAVE_TRACK_HEADER>
  700.     }
  701.     //  <wavp-list>
  702.     LIST
  703.     {
  704.         'wavp'
  705.         <waph-ck>       //  Wave Part Header
  706.         <wavi-list>     //  List of wave items
  707.     }
  708.         //  <waph-ck>
  709.         'waph'
  710.         {
  711.             <DMUS_IO_WAVE_PART_HEADER>
  712.         }
  713.         //  <wavi-list>
  714.         LIST
  715.         {
  716.             'wavi'
  717.             <wave-list>...  //  Array of waves; each wave is encapsulated in a list
  718.         }
  719.             //  <wave-list>
  720.             LIST
  721.             {
  722.                 'wave'
  723.                 <waih-ck>       //  Wave item header
  724.                 <DMRF-list>     //  Reference to wave object
  725.             }
  726.                 //  <waih-ck>
  727.                 'waih'
  728.                 {
  729.                     <DMUS_IO_WAVE_ITEM_HEADER>
  730.                 }
  731. *)
  732. (*  File io for DirectMusic Container file. This embeds a set of related files. And,
  733.     in turn, it can be embedded within a segment or script file.
  734. *)
  735. const
  736.   DMUS_FOURCC_CONTAINER_FORM         = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('C') shl 16) or (Byte('N') shl 24)); // mmioFOURCC('D','M','C','N')
  737.   {$EXTERNALSYM DMUS_FOURCC_CONTAINER_FORM}
  738.   DMUS_FOURCC_CONTAINER_CHUNK        = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('n') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('c','o','n','h')
  739.   {$EXTERNALSYM DMUS_FOURCC_CONTAINER_CHUNK}
  740.   DMUS_FOURCC_CONTAINED_ALIAS_CHUNK  = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('b') shl 16) or (Byte('a') shl 24)); // mmioFOURCC('c','o','b','a')
  741.   {$EXTERNALSYM DMUS_FOURCC_CONTAINED_ALIAS_CHUNK}
  742.   DMUS_FOURCC_CONTAINED_OBJECT_CHUNK = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('b') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('c','o','b','h')
  743.   {$EXTERNALSYM DMUS_FOURCC_CONTAINED_OBJECT_CHUNK}
  744.   DMUS_FOURCC_CONTAINED_OBJECTS_LIST = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('s') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('c','o','s','l')
  745.   {$EXTERNALSYM DMUS_FOURCC_CONTAINED_OBJECTS_LIST}
  746.   DMUS_FOURCC_CONTAINED_OBJECT_LIST  = DWORD(Byte('c') or (Byte('o') shl 8) or (Byte('b') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('c','o','b','l')
  747.   {$EXTERNALSYM DMUS_FOURCC_CONTAINED_OBJECT_LIST}
  748. type
  749.   PDMusIoContainerHeader = ^TDMusIoContainerHeader;
  750.   _DMUS_IO_CONTAINER_HEADER = packed record
  751.     dwFlags: DWORD;        (* Flags. *)
  752.   end;
  753.   {$EXTERNALSYM _DMUS_IO_CONTAINER_HEADER}
  754.   DMUS_IO_CONTAINER_HEADER = _DMUS_IO_CONTAINER_HEADER;
  755.   {$EXTERNALSYM DMUS_IO_CONTAINER_HEADER}
  756.   TDMusIoContainerHeader = _DMUS_IO_CONTAINER_HEADER;
  757. const
  758.   DMUS_CONTAINER_NOLOADS  = (1 shl 1);  (* Contained items are not loaded when the container is loaded.
  759.                                            Entries will be created in the loader (via SetObject) but
  760.                                            the actual objects will not be created until they are
  761.                                            specifically loaded at a later time. *)
  762.   {$EXTERNALSYM DMUS_CONTAINER_NOLOADS}
  763. type
  764.   PDMusIoContainedObjectHeader = ^TDMusIoContainedObjectHeader;
  765.   _DMUS_IO_CONTAINED_OBJECT_HEADER = packed record
  766.     guidClassID: TGUID;    (* Class id of object. *)
  767.     dwFlags: DWORD;        (* Flags, for example DMUS_CONTAINED_OBJF_KEEP. *)
  768.     ckid: FOURCC;          (* chunk ID of track's data chunk if 0 fccType valid. *)
  769.     fccType: FOURCC;       (* list type if NULL ckid valid */
  770.         (* Note that LIST:DMRF may be used for ckid and fccType in order to reference an
  771.            object instead of embedding it within the container. *)
  772.   end;
  773.   {$EXTERNALSYM _DMUS_IO_CONTAINED_OBJECT_HEADER}
  774.   DMUS_IO_CONTAINED_OBJECT_HEADER = _DMUS_IO_CONTAINED_OBJECT_HEADER;
  775.   {$EXTERNALSYM DMUS_IO_CONTAINED_OBJECT_HEADER}
  776.   TDMusIoContainedObjectHeader = _DMUS_IO_CONTAINED_OBJECT_HEADER;
  777. const
  778.   DMUS_CONTAINED_OBJF_KEEP    = 1;   (* Keep the object cached in the loader after the container is released. *)
  779.   {$EXTERNALSYM DMUS_CONTAINED_OBJF_KEEP}
  780. (*
  781. RIFF
  782. (
  783.     'DMCN'          // DirectMusic Container chunk
  784.     <conh-ck>       // Container header chunk
  785.     [<guid-ck>]     // GUID for container
  786.     [<vers-ck>]     // Optional version info
  787.     [<UNFO-list>]   // Name, author, copyright info., comments
  788.     <cosl-list>     // List of objects.
  789. )
  790.     // <conh-ck>
  791.     'conh'
  792.     (
  793.         <DMUS_IO_CONTAINER_HEADER>
  794.     )
  795.     // <guid-ck>
  796.     'guid'
  797.     (
  798.         <GUID>
  799.     )
  800.     // <vers-ck>
  801.     vers
  802.     (
  803.         <DMUS_IO_VERSION>
  804.     )
  805.     LIST
  806.     (
  807.         'cosl'          // Array of embedded objects.
  808.         <cobl-list>...  // Each object is encapsulated in a LIST chunk
  809.     )
  810.     // <cobl-list>      // Encapsulates one object
  811.     LIST
  812.     (
  813.         'cobl'
  814.         [<coba-ck>]         // Alias.  An alternative name by which this object is known
  815.                             // within the container.
  816.         <cobh-ck>           // Required header, includes CLASS ID for object.
  817.         [<data>] or <DMRF>  // Object data of the type specified in <cobh-ck>.
  818.                             // If DMRF, it is a reference of where to find the object.
  819.                             // Otherwise, it could be any RIFF readable chunk in the
  820.                             //    exact same format as a file.  The object will load
  821.                             //    itself from this data.
  822.     )
  823.     // <coba-ck>
  824.     'coba'
  825.     (
  826.         // Alias, stored as NULL terminated string of WCHARs
  827.     )
  828.     // <cobh-ck>
  829.     'cobh'
  830.     (
  831.         <DMUS_IO_CONTAINED_OBJECT_HEADER>
  832.     )
  833. *)
  834. (*  File io for DirectMusic Segment object *)
  835. (* RIFF ids: *)
  836. const
  837.   DMUS_FOURCC_SEGMENT_FORM  = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('S') shl 16) or (Byte('G') shl 24)); // mmioFOURCC('D','M','S','G')
  838.   {$EXTERNALSYM DMUS_FOURCC_SEGMENT_FORM}
  839.   DMUS_FOURCC_SEGMENT_CHUNK = DWORD(Byte('s') or (Byte('e') shl 8) or (Byte('g') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('s','e','g','h')
  840.   {$EXTERNALSYM DMUS_FOURCC_SEGMENT_CHUNK}
  841.   DMUS_FOURCC_TRACK_LIST    = DWORD(Byte('t') or (Byte('r') shl 8) or (Byte('k') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('t','r','k','l')
  842.   {$EXTERNALSYM DMUS_FOURCC_TRACK_LIST}
  843.   DMUS_FOURCC_TRACK_FORM    = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('T') shl 16) or (Byte('K') shl 24)); // mmioFOURCC('D','M','T','K')
  844.   {$EXTERNALSYM DMUS_FOURCC_TRACK_FORM}
  845.   DMUS_FOURCC_TRACK_CHUNK   = DWORD(Byte('t') or (Byte('r') shl 8) or (Byte('k') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('t','r','k','h')
  846.   {$EXTERNALSYM DMUS_FOURCC_TRACK_CHUNK}
  847.   DMUS_FOURCC_TRACK_EXTRAS_CHUNK = DWORD(Byte('t') or (Byte('r') shl 8) or (Byte('k') shl 16) or (Byte('x') shl 24)); // mmioFOURCC('t','r','k','x')
  848.   {$EXTERNALSYM DMUS_FOURCC_TRACK_EXTRAS_CHUNK}
  849.   (* io structures:*)
  850. type
  851.   PDMusIoSegmentHeader = ^TDMusIoSegmentHeader;
  852.   _DMUS_IO_SEGMENT_HEADER = packed record
  853.     dwRepeats: DWORD;           (* Number of repeats. By default, 0. *)
  854.     mtLength: TMusicTime;       (* Length, in music time. *)
  855.     mtPlayStart: TMusicTime;    (* Start of playback. By default, 0. *)
  856.     mtLoopStart: TMusicTime;    (* Start of looping portion. By default, 0. *)
  857.     mtLoopEnd: TMusicTime;      (* End of loop. Must be greater than dwPlayStart. Or, 0, indicating loop full segment. *)
  858.     dwResolution: DWORD;        (* Default resolution. *)
  859.     // Following added for DX8:
  860.     rtLength: TReferenceTime;   (* Length, in reference time (overrides music time length.) *)
  861.     dwFlags: DWORD;
  862.     dwReserved: DWORD;          (* Reserved. *)
  863.     // Added for DX9.
  864.     rtLoopStart: TReferenceTime; (* Clock time loop start. *)
  865.     rtLoopEnd: TReferenceTime;   (* Clock time loop end. *)
  866.     rtPlayStart: TReferenceTime; (* Start of playback in clock time. *) 
  867.   end;
  868.   {$EXTERNALSYM _DMUS_IO_SEGMENT_HEADER}
  869.   DMUS_IO_SEGMENT_HEADER = _DMUS_IO_SEGMENT_HEADER;
  870.   {$EXTERNALSYM DMUS_IO_SEGMENT_HEADER}
  871.   TDMusIoSegmentHeader = _DMUS_IO_SEGMENT_HEADER;
  872. const
  873.   DMUS_SEGIOF_REFLENGTH = 1;  // Use the time in rtLength for the segment length.
  874.   {$EXTERNALSYM DMUS_SEGIOF_REFLENGTH}
  875.   DMUS_SEGIOF_CLOCKTIME = 2;  // This is a clock time segment.
  876.   {$EXTERNALSYM DMUS_SEGIOF_CLOCKTIME}
  877. type
  878.   PDMusIoTrackHeader = ^TDMusIoTrackHeader;
  879.   _DMUS_IO_TRACK_HEADER = packed record
  880.     guidClassID: TGUID;    (* Class id of track. *)
  881.     dwPosition: DWORD;     (* Position in track list. *)
  882.     dwGroup: DWORD;        (* Group bits for track. *)
  883.     ckid: FOURCC;          (* chunk ID of track's data chunk. *)
  884.     fccType: FOURCC;       (* list type if ckid is RIFF or LIST *)
  885.   end;
  886.   {$EXTERNALSYM _DMUS_IO_TRACK_HEADER}
  887.   DMUS_IO_TRACK_HEADER = _DMUS_IO_TRACK_HEADER;
  888.   {$EXTERNALSYM DMUS_IO_TRACK_HEADER}
  889.   TDMusIoTrackHeader = _DMUS_IO_TRACK_HEADER;
  890. (*  Additional parameters for the track header chunk, introduced in DX8 and
  891.     on, are stored in a separate chunk. *)
  892.   PDMusIoTrackExtrasHeader = ^TDMusIoTrackExtrasHeader;
  893.   _DMUS_IO_TRACK_EXTRAS_HEADER = packed record
  894.     dwFlags: DWORD;        (* DX8 Added flags for control tracks. *)
  895.     dwPriority: DWORD;     (* Priority for composition. *)
  896.   end;
  897.   {$EXTERNALSYM _DMUS_IO_TRACK_EXTRAS_HEADER}
  898.   DMUS_IO_TRACK_EXTRAS_HEADER = _DMUS_IO_TRACK_EXTRAS_HEADER;
  899.   {$EXTERNALSYM DMUS_IO_TRACK_EXTRAS_HEADER}
  900.   TDMusIoTrackExtrasHeader = _DMUS_IO_TRACK_EXTRAS_HEADER;
  901. (*
  902. RIFF
  903. (
  904.     'DMSG'          // DirectMusic Segment chunk
  905.     <segh-ck>       // Segment header chunk
  906.     [<guid-ck>]     // GUID for segment
  907.     [<vers-ck>]     // Optional version info
  908.     [<UNFO-list>]   // Name, author, copyright info., comments
  909.     [<DMCN-form>]   // Optional container of objects embedded in file. Must precede tracklist.
  910.     <trkl-list>     // List of Tracks
  911.     [<DMTG-form>]   // Optional ToolGraph
  912.     [<DMAP-form>]   // Optional Audio Path
  913. )
  914.     // <segh-ck>        
  915.     'segh'
  916.     (
  917.         <DMUS_IO_SEGMENT_HEADER>
  918.     )
  919.     
  920.     // <guid-ck>
  921.     'guid'
  922.     (
  923.         <GUID>
  924.     )
  925.     // <vers-ck>
  926.     vers
  927.     (
  928.         <DMUS_IO_VERSION>
  929.     )
  930.     // <trkl-list>
  931.     LIST
  932.     (
  933.         'trkl'          // Array of tracks
  934.         <DMTK-form>...  // Each track is encapsulated in a RIFF chunk
  935.     )
  936.     // <DMTK-form>      // Tracks can be embedded in a segment or stored as separate files.
  937.     RIFF
  938.     (
  939.         'DMTK'
  940.         <trkh-ck>
  941.         [<trkx-ck>]     // Optional track flags.
  942.         [<guid-ck>]     // Optional GUID for track object instance (not to be confused with Class id in track header)
  943.         [<vers-ck>]     // Optional version info
  944.         [<UNFO-list>]   // Optional name, author, copyright info., comments
  945.         [<data>]        // Track data. Must be a RIFF readable chunk.
  946.     )
  947.     // <trkh-ck>            // Track header chunk
  948.     (
  949.         'trkh'
  950.         <DMUS_IO_TRACK_HEADER>  // Track header
  951.     )
  952.     // <trkx-ck>            // Track flags chunk
  953.     (
  954.         'trkx'
  955.         <DMUS_IO_TRACK_EXTRAS_HEADER>  // DX8 Track flags header
  956.     )
  957. *)
  958. (*  File io for DirectMusic reference chunk.
  959.     This is used to embed a reference to an object.
  960. *)
  961. const
  962.   (*  RIFF ids: *)
  963.   DMUS_FOURCC_REF_LIST   = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('R') shl 16) or (Byte('F') shl 24)); // mmioFOURCC('D','M','R','F')
  964.   {$EXTERNALSYM DMUS_FOURCC_REF_LIST}
  965.   DMUS_FOURCC_REF_CHUNK  = DWORD(Byte('r') or (Byte('e') shl 8) or (Byte('f') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('r','e','f','h')
  966.   {$EXTERNALSYM DMUS_FOURCC_REF_CHUNK}
  967.   DMUS_FOURCC_DATE_CHUNK = DWORD(Byte('d') or (Byte('a') shl 8) or (Byte('t') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('d','a','t','e')
  968.   {$EXTERNALSYM DMUS_FOURCC_DATE_CHUNK}
  969.   DMUS_FOURCC_NAME_CHUNK = DWORD(Byte('n') or (Byte('a') shl 8) or (Byte('m') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('n','a','m','e')
  970.   {$EXTERNALSYM DMUS_FOURCC_NAME_CHUNK}
  971.   DMUS_FOURCC_FILE_CHUNK = DWORD(Byte('f') or (Byte('i') shl 8) or (Byte('l') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('f','i','l','e')
  972.   {$EXTERNALSYM DMUS_FOURCC_FILE_CHUNK}
  973. type
  974.   PDMusIoReference = ^TDMusIoReference;
  975.   _DMUS_IO_REFERENCE = packed record
  976.     guidClassID: TGUID;    (* Class id is always required. *)
  977.     dwValidData: DWORD;    (* Flags. *)
  978.   end;
  979.   {$EXTERNALSYM _DMUS_IO_REFERENCE}
  980.   DMUS_IO_REFERENCE = _DMUS_IO_REFERENCE;
  981.   {$EXTERNALSYM DMUS_IO_REFERENCE}
  982.   TDMusIoReference = _DMUS_IO_REFERENCE;
  983. (*
  984. LIST
  985. (
  986.     'DMRF'          // DirectMusic Reference chunk
  987.     <refh-ck>       // Reference header chunk
  988.     [<guid-ck>]     // Optional object GUID.
  989.     [<date-ck>]     // Optional file date.
  990.     [<name-ck>]     // Optional name.
  991.     [<file-ck>]     // Optional file name.
  992.     [<catg-ck>]     // Optional category name.
  993.     [<vers-ck>]     // Optional version info.
  994. )
  995.     // <refh-ck>
  996.     'refh'
  997.     (
  998.         <DMUS_IO_REFERENCE>
  999.     )
  1000.     // <guid-ck>
  1001.     'guid'
  1002.     (
  1003.         <GUID>
  1004.     )
  1005.     // <date-ck>
  1006.     date
  1007.     (
  1008.         <FILETIME>
  1009.     )
  1010.     // <name-ck>
  1011.     name
  1012.     (
  1013.         // Name, stored as NULL terminated string of WCHARs
  1014.     )
  1015.     // <file-ck>
  1016.     file
  1017.     (
  1018.         // File name, stored as NULL terminated string of WCHARs
  1019.     )
  1020.     // <catg-ck>
  1021.     catg
  1022.     (
  1023.         // Category name, stored as NULL terminated string of WCHARs
  1024.     )
  1025.     // <vers-ck>
  1026.     vers
  1027.     (
  1028.         <DMUS_IO_VERSION>
  1029.     )
  1030. *)
  1031. const
  1032.   (* Chord Maps *)
  1033.   (* runtime chunks *)
  1034.   DMUS_FOURCC_CHORDMAP_FORM      = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('P') shl 16) or (Byte('R') shl 24)); // mmioFOURCC('D','M','P','R')
  1035.   {$EXTERNALSYM DMUS_FOURCC_CHORDMAP_FORM}
  1036.   DMUS_FOURCC_IOCHORDMAP_CHUNK   = DWORD(Byte('p') or (Byte('e') shl 8) or (Byte('r') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','e','r','h')
  1037.   {$EXTERNALSYM DMUS_FOURCC_IOCHORDMAP_CHUNK}
  1038.   DMUS_FOURCC_SUBCHORD_CHUNK     = DWORD(Byte('c') or (Byte('h') shl 8) or (Byte('d') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('c','h','d','t')
  1039.   {$EXTERNALSYM DMUS_FOURCC_SUBCHORD_CHUNK}
  1040.   DMUS_FOURCC_CHORDENTRY_CHUNK   = DWORD(Byte('c') or (Byte('h') shl 8) or (Byte('e') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('c','h','e','h')
  1041.   {$EXTERNALSYM DMUS_FOURCC_CHORDENTRY_CHUNK}
  1042.   DMUS_FOURCC_SUBCHORDID_CHUNK   = DWORD(Byte('s') or (Byte('b') shl 8) or (Byte('c') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('s','b','c','n')
  1043.   {$EXTERNALSYM DMUS_FOURCC_SUBCHORDID_CHUNK}
  1044.   DMUS_FOURCC_IONEXTCHORD_CHUNK  = DWORD(Byte('n') or (Byte('c') shl 8) or (Byte('r') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('n','c','r','d')
  1045.   {$EXTERNALSYM DMUS_FOURCC_IONEXTCHORD_CHUNK}
  1046.   DMUS_FOURCC_NEXTCHORDSEQ_CHUNK = DWORD(Byte('n') or (Byte('c') shl 8) or (Byte('s') shl 16) or (Byte('q') shl 24)); // mmioFOURCC('n','c','s','q')
  1047.   {$EXTERNALSYM DMUS_FOURCC_NEXTCHORDSEQ_CHUNK}
  1048.   DMUS_FOURCC_IOSIGNPOST_CHUNK   = DWORD(Byte('s') or (Byte('p') shl 8) or (Byte('s') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('s','p','s','h')
  1049.   {$EXTERNALSYM DMUS_FOURCC_IOSIGNPOST_CHUNK}
  1050.   DMUS_FOURCC_CHORDNAME_CHUNK    = DWORD(Byte('I') or (Byte('N') shl 8) or (Byte('A') shl 16) or (Byte('M') shl 24)); // mmioFOURCC('I','N','A','M')
  1051.   {$EXTERNALSYM DMUS_FOURCC_CHORDNAME_CHUNK}
  1052.   (* runtime list chunks *)
  1053.   DMUS_FOURCC_CHORDENTRY_LIST    = DWORD(Byte('c') or (Byte('h') shl 8) or (Byte('o') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('c','h','o','e')
  1054.   {$EXTERNALSYM DMUS_FOURCC_CHORDENTRY_LIST}
  1055.   DMUS_FOURCC_CHORDMAP_LIST      = DWORD(Byte('c') or (Byte('m') shl 8) or (Byte('a') shl 16) or (Byte('p') shl 24)); // mmioFOURCC('c','m','a','p')
  1056.   {$EXTERNALSYM DMUS_FOURCC_CHORDMAP_LIST}
  1057.   DMUS_FOURCC_CHORD_LIST         = DWORD(Byte('c') or (Byte('h') shl 8) or (Byte('r') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('c','h','r','d')
  1058.   {$EXTERNALSYM DMUS_FOURCC_CHORD_LIST}
  1059.   DMUS_FOURCC_CHORDPALETTE_LIST  = DWORD(Byte('c') or (Byte('h') shl 8) or (Byte('p') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('c','h','p','l')
  1060.   {$EXTERNALSYM DMUS_FOURCC_CHORDPALETTE_LIST}
  1061.   DMUS_FOURCC_CADENCE_LIST       = DWORD(Byte('c') or (Byte('a') shl 8) or (Byte('d') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('c','a','d','e')
  1062.   {$EXTERNALSYM DMUS_FOURCC_CADENCE_LIST}
  1063.   DMUS_FOURCC_SIGNPOSTITEM_LIST  = DWORD(Byte('s') or (Byte('p') shl 8) or (Byte('s') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('s','p','s','t')
  1064.   {$EXTERNALSYM DMUS_FOURCC_SIGNPOSTITEM_LIST}
  1065.   DMUS_FOURCC_SIGNPOST_LIST      = DWORD(Byte('s') or (Byte('p') shl 8) or (Byte('s') shl 16) or (Byte('q') shl 24)); // mmioFOURCC('s','p','s','q')
  1066.   {$EXTERNALSYM DMUS_FOURCC_SIGNPOST_LIST}
  1067.   (* values for dwChord field of DMUS_IO_PERS_SIGNPOST *)
  1068.   (* DMUS_SIGNPOSTF_ flags are also used in templates (DMUS_IO_SIGNPOST) *)
  1069.   DMUS_SIGNPOSTF_A        = 1;
  1070.   {$EXTERNALSYM DMUS_SIGNPOSTF_A}
  1071.   DMUS_SIGNPOSTF_B        = 2;
  1072.   {$EXTERNALSYM DMUS_SIGNPOSTF_B}
  1073.   DMUS_SIGNPOSTF_C        = 4;
  1074.   {$EXTERNALSYM DMUS_SIGNPOSTF_C}
  1075.   DMUS_SIGNPOSTF_D        = 8;
  1076.   {$EXTERNALSYM DMUS_SIGNPOSTF_D}
  1077.   DMUS_SIGNPOSTF_E        = $10;
  1078.   {$EXTERNALSYM DMUS_SIGNPOSTF_E}
  1079.   DMUS_SIGNPOSTF_F        = $20;
  1080.   {$EXTERNALSYM DMUS_SIGNPOSTF_F}
  1081.   DMUS_SIGNPOSTF_LETTER   = (DMUS_SIGNPOSTF_A or DMUS_SIGNPOSTF_B or DMUS_SIGNPOSTF_C or DMUS_SIGNPOSTF_D or DMUS_SIGNPOSTF_E or DMUS_SIGNPOSTF_F);
  1082.   {$EXTERNALSYM DMUS_SIGNPOSTF_LETTER}
  1083.   DMUS_SIGNPOSTF_1        = $100;
  1084.   {$EXTERNALSYM DMUS_SIGNPOSTF_1}
  1085.   DMUS_SIGNPOSTF_2        = $200;
  1086.   {$EXTERNALSYM DMUS_SIGNPOSTF_2}
  1087.   DMUS_SIGNPOSTF_3        = $400;
  1088.   {$EXTERNALSYM DMUS_SIGNPOSTF_3}
  1089.   DMUS_SIGNPOSTF_4        = $800;
  1090.   {$EXTERNALSYM DMUS_SIGNPOSTF_4}
  1091.   DMUS_SIGNPOSTF_5        = $1000;
  1092.   {$EXTERNALSYM DMUS_SIGNPOSTF_5}
  1093.   DMUS_SIGNPOSTF_6        = $2000;
  1094.   {$EXTERNALSYM DMUS_SIGNPOSTF_6}
  1095.   DMUS_SIGNPOSTF_7        = $4000;
  1096.   {$EXTERNALSYM DMUS_SIGNPOSTF_7}
  1097.   DMUS_SIGNPOSTF_ROOT     = (DMUS_SIGNPOSTF_1 or DMUS_SIGNPOSTF_2 or DMUS_SIGNPOSTF_3 or DMUS_SIGNPOSTF_4 or DMUS_SIGNPOSTF_5 or DMUS_SIGNPOSTF_6 or DMUS_SIGNPOSTF_7);
  1098.   {$EXTERNALSYM DMUS_SIGNPOSTF_ROOT}
  1099.   DMUS_SIGNPOSTF_CADENCE  = $8000;
  1100.   {$EXTERNALSYM DMUS_SIGNPOSTF_CADENCE}
  1101.   // values for dwFlags field of DMUS_IO_CHORDMAP
  1102.   DMUS_CHORDMAPF_VERSION8  = 1;   // Chordmap is version 8 or above.
  1103.   {$EXTERNALSYM DMUS_CHORDMAPF_VERSION8}
  1104.   // values for dwChord field of DMUS_IO_PERS_SIGNPOST
  1105.   DMUS_SPOSTCADENCEF_1  = 2;   // Use the first cadence chord.
  1106.   {$EXTERNALSYM DMUS_SPOSTCADENCEF_1}
  1107.   DMUS_SPOSTCADENCEF_2  = 4;   // Use the second cadence chord.
  1108.   {$EXTERNALSYM DMUS_SPOSTCADENCEF_2}
  1109. type  
  1110.   // run time data structs
  1111.   PDMusIoChordMap = ^TDMusIoChordMap;
  1112.   _DMUS_IO_CHORDMAP = packed record
  1113.     wszLoadName: array[0..19] of WideChar;
  1114.     dwScalePattern: DWORD;
  1115.     dwFlags: DWORD;           // Various flags. Only lower 16 bits are significant.
  1116.   end;
  1117.   {$EXTERNALSYM _DMUS_IO_CHORDMAP}
  1118.   DMUS_IO_CHORDMAP = _DMUS_IO_CHORDMAP;
  1119.   {$EXTERNALSYM DMUS_IO_CHORDMAP}
  1120.   TDMusIoChordMap = _DMUS_IO_CHORDMAP;
  1121.   PDMusIoChordmapSubChord = ^TDMusIoChordmapSubChord;
  1122.   _DMUS_IO_CHORDMAP_SUBCHORD = packed record
  1123.     dwChordPattern: DWORD;
  1124.     dwScalePattern: DWORD;
  1125.     dwInvertPattern: DWORD;
  1126.     bChordRoot: Byte;
  1127.     bScaleRoot: Byte;
  1128.     wCFlags: Word;
  1129.     dwLevels: DWORD;   // parts or which subchord levels this chord supports 
  1130.   end;
  1131.   {$EXTERNALSYM _DMUS_IO_CHORDMAP_SUBCHORD}
  1132.   DMUS_IO_CHORDMAP_SUBCHORD = _DMUS_IO_CHORDMAP_SUBCHORD;
  1133.   {$EXTERNALSYM DMUS_IO_CHORDMAP_SUBCHORD}
  1134.   TDMusIoChordmapSubChord = _DMUS_IO_CHORDMAP_SUBCHORD;
  1135.   // Legacy name...
  1136.   DMUS_IO_PERS_SUBCHORD = DMUS_IO_CHORDMAP_SUBCHORD;
  1137.   {$EXTERNALSYM DMUS_IO_PERS_SUBCHORD}
  1138.   PDMusIoChordEntry = ^TDMusIoChordEntry;
  1139.   _DMUS_IO_CHORDENTRY = packed record
  1140.     dwFlags: DWORD;
  1141.     wConnectionID: Word;  // replaces runtime "pointer to this"
  1142.   end;
  1143.   {$EXTERNALSYM _DMUS_IO_CHORDENTRY}
  1144.   DMUS_IO_CHORDENTRY = _DMUS_IO_CHORDENTRY;
  1145.   {$EXTERNALSYM DMUS_IO_CHORDENTRY}
  1146.   TDMusIoChordEntry = _DMUS_IO_CHORDENTRY;
  1147.   PDMusIoNextChord = ^TDMusIoNextChord;
  1148.   _DMUS_IO_NEXTCHORD = packed record
  1149.     dwFlags: DWORD;
  1150.     nWeight: Word;
  1151.     wMinBeats: Word;
  1152.     wMaxBeats: Word;
  1153.     wConnectionID: Word;  // points to an ioChordEntry
  1154.   end;
  1155.   {$EXTERNALSYM _DMUS_IO_NEXTCHORD}
  1156.   DMUS_IO_NEXTCHORD = _DMUS_IO_NEXTCHORD;
  1157.   {$EXTERNALSYM DMUS_IO_NEXTCHORD}
  1158.   TDMusIoNextChord = _DMUS_IO_NEXTCHORD;
  1159.   PDMusIoChordMapSignPost = ^TDMusIoChordMapSignPost;
  1160.   _DMUS_IO_CHORDMAP_SIGNPOST = packed record
  1161.     dwChords: DWORD;   // 1bit per group
  1162.     dwFlags: DWORD;
  1163.   end;
  1164.   {$EXTERNALSYM _DMUS_IO_CHORDMAP_SIGNPOST}
  1165.   DMUS_IO_CHORDMAP_SIGNPOST = _DMUS_IO_CHORDMAP_SIGNPOST;
  1166.   {$EXTERNALSYM DMUS_IO_CHORDMAP_SIGNPOST}
  1167.   TDMusIoChordMapSignPost = _DMUS_IO_CHORDMAP_SIGNPOST;
  1168.   // Legacy name...
  1169.   DMUS_IO_PERS_SIGNPOST = DMUS_IO_CHORDMAP_SIGNPOST;
  1170.   {$EXTERNALSYM DMUS_IO_PERS_SIGNPOST}
  1171. (*
  1172. RIFF
  1173. (
  1174.     'DMPR'
  1175.     <perh-ck>           // Chord map header chunk
  1176.     [<guid-ck>]         // guid chunk
  1177.     [<vers-ck>]         // version chunk (two DWORDS)
  1178.     [<UNFO-list>]       // Unfo chunk
  1179.     <chdt-ck>           // subchord database
  1180.     <chpl-list>         // chord palette
  1181.     <cmap-list>         // chord map
  1182.     <spsq-list>         // signpost list
  1183.  )
  1184. <cmap-list> ::= LIST('cmap' <choe-list> )
  1185. <choe-list> ::= LIST('choe'
  1186.                                 <cheh-ck>   // chord entry data
  1187.                                 <chrd-list> // chord definition
  1188.                                 <ncsq-ck>   // connecting(next) chords
  1189.                      )
  1190. <chrd-list> ::= LIST('chrd' 
  1191.                                 <INAM-ck>   // name of chord in wide char format
  1192.                                 <sbcn-ck>   // list of subchords composing chord
  1193.                     )
  1194. <chpl-list> ::= LIST('chpl' 
  1195.                                 <chrd-list> ... // chord definition
  1196.                     )
  1197. <spsq-list> ::== LIST('spsq' <spst-list> ... )
  1198. <spst-list> ::= LIST('spst'
  1199.                              <spsh-ck>
  1200.                              <chrd-list>
  1201.                              [<cade-list>]
  1202.                     )
  1203. <cade-list> ::= LIST('cade' <chrd-list> ...)
  1204. <perh-ck> ::= perh(<DMUS_IO_CHORDMAP>)
  1205. <chdt-ck> ::= chdt(<cbChordSize::WORD>
  1206.                    <DMUS_IO_PERS_SUBCHORD> ... )
  1207. <cheh-ck> ::= cheh(<DMUS_IO_CHORDENTRY>)
  1208. <sbcn-ck> ::= sbcn(<cSubChordID:WORD> ...)
  1209. <ncsq-ck> ::= ncsq(<wNextChordSize:WORD>
  1210.                    <DMUS_IO_NEXTCHORD>...)
  1211. <spsh-ck> ::= spsh(<DMUS_IO_PERS_SIGNPOST>)
  1212. *)
  1213. (*  File io for DirectMusic Script object *)
  1214. const
  1215.   (* RIFF ids: *)
  1216.   DMUS_FOURCC_SCRIPT_FORM          = DWORD(Byte('D') or (Byte('M') shl 8) or (Byte('S') shl 16) or (Byte('C') shl 24)); // mmioFOURCC('D','M','S','C')
  1217.   {$EXTERNALSYM DMUS_FOURCC_SCRIPT_FORM}
  1218.   DMUS_FOURCC_SCRIPT_CHUNK         = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('h') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('s','c','h','d')
  1219.   {$EXTERNALSYM DMUS_FOURCC_SCRIPT_CHUNK}
  1220.   DMUS_FOURCC_SCRIPTVERSION_CHUNK  = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('v') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('s','c','v','e')
  1221.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTVERSION_CHUNK}
  1222.   DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('l') shl 16) or (Byte('a') shl 24)); // mmioFOURCC('s','c','l','a')
  1223.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK}
  1224.   DMUS_FOURCC_SCRIPTSOURCE_CHUNK   = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('s') shl 16) or (Byte('r') shl 24)); // mmioFOURCC('s','c','s','r')
  1225.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTSOURCE_CHUNK}
  1226. type
  1227.   (* io structures: *)
  1228.   PDMusIoScriptHeader = ^TDMusIoScriptHeader;
  1229.   _DMUS_IO_SCRIPT_HEADER = packed record
  1230.     dwFlags: DWORD; // DMUS_SCRIPTIOF_ flags
  1231.   end;
  1232.   {$EXTERNALSYM _DMUS_IO_SCRIPT_HEADER}
  1233.   DMUS_IO_SCRIPT_HEADER = _DMUS_IO_SCRIPT_HEADER;
  1234.   {$EXTERNALSYM DMUS_IO_SCRIPT_HEADER}
  1235.   TDMusIoScriptHeader = _DMUS_IO_SCRIPT_HEADER;
  1236. const
  1237.   DMUS_SCRIPTIOF_LOAD_ALL_CONTENT       = (1 shl 0);
  1238.   {$EXTERNALSYM DMUS_SCRIPTIOF_LOAD_ALL_CONTENT}
  1239.     // If set, when the script loads it will also load all the content in its container.
  1240.   DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS  = (1 shl 1);
  1241.   {$EXTERNALSYM DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS}
  1242.     (* If set and LOAD_ALL_CONTENT is also set, when the script initializes it will also download all the segments in its container.
  1243.        If set and LOAD_ALL_CONTENT is not set, when the script calls segment.Load on a segment then the segment will also be downloaded.
  1244.        If not set, the script must manually download and unload by calling segment.DownloadSoundData and segment.UnloadSoundData. *)
  1245. (*
  1246. RIFF
  1247. (
  1248.     'DMSC'              // DirectMusic Script chunk
  1249.     <schd-ck>           // Script header chunk
  1250.     [<guid-ck>]         // GUID for script
  1251.     [<vers-ck>]         // Optional version info
  1252.     [<UNFO-list>]       // Name, author, copyright info., comments
  1253.     <scve-ck>           // Version of DirectMusic this script was authored to run against
  1254.     <DMCN-form>         // Container of content referenced by the script.
  1255.     <scla-ck>           // ActiveX scripting language in which the script is written
  1256.     <scsr-ck> or <DMRF> // The script's source code.
  1257.                         // If scsr-ck, the source is embedding in the chunk.
  1258.                         // If DMRF, it is a reference of where to find a text file with the source.
  1259.                         //    Class id (guidClassID in DMUS_IO_REFERENCE) must be GUID_NULL because
  1260.                         //    this text file is not a DirectMusic object in its own right.
  1261. )
  1262.     // <schd-ck>
  1263.     'schd'
  1264.     (
  1265.         <DMUS_FOURCC_SCRIPT_CHUNK>
  1266.     )
  1267.     // <guid-ck>
  1268.     'guid'
  1269.     (
  1270.         <GUID>
  1271.     )
  1272.     // <vers-ck>
  1273.     vers
  1274.     (
  1275.         <DMUS_IO_VERSION>
  1276.     )
  1277.     // <scve-ck>
  1278.     scve
  1279.     (
  1280.         <DMUS_IO_VERSION>
  1281.     )
  1282.     'scla'
  1283.     (
  1284.         // Language name, stored as NULL terminated string of WCHARs
  1285.     )
  1286.     'scsr'
  1287.     (
  1288.         // Source code, stored as NULL terminated string of WCHARs
  1289.     )
  1290. *)
  1291. const
  1292.   (* Signpost tracks *)
  1293.   DMUS_FOURCC_SIGNPOST_TRACK_CHUNK = DWORD(Byte('s') or (Byte('g') shl 8) or (Byte('n') shl 16) or (Byte('p') shl 24)); // mmioFOURCC('s','g','n','p')
  1294.   {$EXTERNALSYM DMUS_FOURCC_SIGNPOST_TRACK_CHUNK}
  1295. type
  1296.   PDMusIoSignPost = ^TDMusIoSignPost;
  1297.   _DMUS_IO_SIGNPOST = packed record
  1298.     mtTime: TMusicTime;
  1299.     dwChords: DWORD;
  1300.     wMeasure: Word;
  1301.   end;
  1302.   {$EXTERNALSYM _DMUS_IO_SIGNPOST}
  1303.   DMUS_IO_SIGNPOST = _DMUS_IO_SIGNPOST;
  1304.   {$EXTERNALSYM DMUS_IO_SIGNPOST}
  1305.   TDMusIoSignPost = _DMUS_IO_SIGNPOST;
  1306. (*
  1307.     // <sgnp-list>
  1308.     'sgnp'
  1309.     (
  1310.         //sizeof DMUS_IO_SIGNPOST: DWORD
  1311.         <DMUS_IO_SIGNPOST>...
  1312.     )
  1313. *)
  1314. const
  1315.   DMUS_FOURCC_MUTE_CHUNK = DWORD(Byte('m') or (Byte('u') shl 8) or (Byte('t') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('m','u','t','e')
  1316.   {$EXTERNALSYM DMUS_FOURCC_MUTE_CHUNK}
  1317. type
  1318.   PDMusIoMute = ^TDMusIoMute;
  1319.   _DMUS_IO_MUTE = packed record
  1320.     mtTime: TMusicTime;
  1321.     dwPChannel: DWORD;
  1322.     dwPChannelMap: DWORD;
  1323.   end;
  1324.   {$EXTERNALSYM _DMUS_IO_MUTE}
  1325.   DMUS_IO_MUTE = _DMUS_IO_MUTE;
  1326.   {$EXTERNALSYM DMUS_IO_MUTE}
  1327.   TDMusIoMute = _DMUS_IO_MUTE;
  1328. (*
  1329.     // <mute-list>
  1330.     'mute'
  1331.     (
  1332.         //sizeof DMUS_IO_MUTE:DWORD
  1333.         <DMUS_IO_MUTE>...
  1334.     )
  1335. *)
  1336. const
  1337.   (* Used for both style and chord map tracks *)
  1338.   DMUS_FOURCC_TIME_STAMP_CHUNK = DWORD(Byte('s') or (Byte('t') shl 8) or (Byte('m') shl 16) or (Byte('p') shl 24)); // mmioFOURCC('s','t','m','p')
  1339.   {$EXTERNALSYM DMUS_FOURCC_TIME_STAMP_CHUNK}
  1340.   (* Style tracks *)
  1341.   DMUS_FOURCC_STYLE_TRACK_LIST = DWORD(Byte('s') or (Byte('t') shl 8) or (Byte('t') shl 16) or (Byte('r') shl 24)); // mmioFOURCC('s','t','t','r')
  1342.   {$EXTERNALSYM DMUS_FOURCC_STYLE_TRACK_LIST}
  1343.   DMUS_FOURCC_STYLE_REF_LIST = DWORD(Byte('s') or (Byte('t') shl 8) or (Byte('r') shl 16) or (Byte('f') shl 24)); // mmioFOURCC('s','t','r','f')
  1344.   {$EXTERNALSYM DMUS_FOURCC_STYLE_REF_LIST}
  1345. (*
  1346.     // <sttr-list>
  1347.     LIST('sttr'
  1348.     (
  1349.         <strf-list>...  // Array of Style references
  1350.     )
  1351.     // <strf-list>
  1352.     LIST('strf'
  1353.     (
  1354.         <stmp-ck>
  1355.         <DMRF>
  1356.     )
  1357.   // <stmp-ck>
  1358.   'stmp'
  1359.   (
  1360.     // time:DWORD
  1361.   )
  1362. *)
  1363. const
  1364.   (* Chord map tracks *)
  1365.   DMUS_FOURCC_PERS_TRACK_LIST = DWORD(Byte('p') or (Byte('f') shl 8) or (Byte('t') shl 16) or (Byte('r') shl 24)); // mmioFOURCC('p','f','t','r')
  1366.   {$EXTERNALSYM DMUS_FOURCC_PERS_TRACK_LIST}
  1367.   DMUS_FOURCC_PERS_REF_LIST   = DWORD(Byte('p') or (Byte('f') shl 8) or (Byte('r') shl 16) or (Byte('f') shl 24)); // mmioFOURCC('p','f','r','f')
  1368.   {$EXTERNALSYM DMUS_FOURCC_PERS_REF_LIST}
  1369. (*
  1370.     // <pftr-list>
  1371.     LIST('pftr'
  1372.     (
  1373.         <pfrf-list>...  // Array of Chord map references
  1374.     )
  1375.     // <pfrf-list>
  1376.     LIST('pfrf'
  1377.     (
  1378.         <stmp-ck>
  1379.         <DMRF>
  1380.     )
  1381.   // <stmp-ck>
  1382.   'stmp'
  1383.   (
  1384.     // time:DWORD
  1385.   )
  1386. *)
  1387.   DMUS_FOURCC_TEMPO_TRACK = DWORD(Byte('t') or (Byte('e') shl 8) or (Byte('t') shl 16) or (Byte('r') shl 24)); // mmioFOURCC('t','e','t','r')
  1388.   {$EXTERNALSYM DMUS_FOURCC_TEMPO_TRACK}
  1389. (*
  1390.     // tempo array
  1391.     'tetr'
  1392.     (
  1393.         // sizeof DMUS_IO_TEMPO_ITEM: DWORD
  1394.         <DMUS_IO_TEMPO_ITEM>...
  1395.     )
  1396.  *)
  1397.   DMUS_FOURCC_SEQ_TRACK  = DWORD(Byte('s') or (Byte('e') shl 8) or (Byte('q') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('s','e','q','t')
  1398.   {$EXTERNALSYM DMUS_FOURCC_SEQ_TRACK}
  1399.   DMUS_FOURCC_SEQ_LIST   = DWORD(Byte('e') or (Byte('v') shl 8) or (Byte('t') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('e','v','t','l')
  1400.   {$EXTERNALSYM DMUS_FOURCC_SEQ_LIST}
  1401.   DMUS_FOURCC_CURVE_LIST = DWORD(Byte('c') or (Byte('u') shl 8) or (Byte('r') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('c','u','r','l')
  1402.   {$EXTERNALSYM DMUS_FOURCC_CURVE_LIST}
  1403. (*
  1404.     // sequence track
  1405.     'seqt'
  1406.     (
  1407.         // sequence array
  1408.         'evtl'
  1409.         (
  1410.             // sizeof DMUS_IO_SEQ_ITEM: DWORD
  1411.             <DMUS_IO_SEQ_ITEM>...
  1412.         )
  1413.         // curve array
  1414.         'curl'
  1415.         (
  1416.             // sizeof DMUS_IO_CURVE_ITEM: DWORD
  1417.             <DMUS_IO_CURVE_ITEM>...
  1418.         )
  1419.     )
  1420. *)
  1421.   DMUS_FOURCC_SYSEX_TRACK = DWORD(Byte('s') or (Byte('y') shl 8) or (Byte('e') shl 16) or (Byte('x') shl 24)); // mmioFOURCC('s','y','e','x')
  1422.   {$EXTERNALSYM DMUS_FOURCC_SYSEX_TRACK}
  1423. (*
  1424.     // sysex track
  1425.     'syex'
  1426.     (
  1427.         {
  1428.             <DMUS_IO_SYSEX_ITEM>
  1429.             <BYTE>...    // Array of bytes, length defined in the DMUS_IO_SYSEXITEM structure
  1430.         }...
  1431.     )
  1432. *)
  1433.   DMUS_FOURCC_TIMESIGNATURE_TRACK = DWORD(Byte('t') or (Byte('i') shl 8) or (Byte('m') shl 16) or (Byte('s') shl 24)); // mmioFOURCC('t','i','m','s')
  1434.   {$EXTERNALSYM DMUS_FOURCC_TIMESIGNATURE_TRACK}
  1435. type
  1436.   PDMusIoTimeSignatureItem = ^TDMusIoTimeSignatureItem;
  1437.   _DMUS_IO_TIMESIGNATURE_ITEM = packed record
  1438.     lTime: TMusicTime;
  1439.     bBeatsPerMeasure: Byte;   // beats per measure (top of time sig)
  1440.     bBeat: Byte;              // what note receives the beat (bottom of time sig.)
  1441.                               // we can assume that 0 means 256th note
  1442.     wGridsPerBeat: Word;      // grids per beat
  1443.   end;
  1444.   {$EXTERNALSYM _DMUS_IO_TIMESIGNATURE_ITEM}
  1445.   DMUS_IO_TIMESIGNATURE_ITEM = _DMUS_IO_TIMESIGNATURE_ITEM;
  1446.   {$EXTERNALSYM DMUS_IO_TIMESIGNATURE_ITEM}
  1447.   TDMusIoTimeSignatureItem = _DMUS_IO_TIMESIGNATURE_ITEM;
  1448. (*  DX6 time signature track
  1449.     'tims'
  1450.     (
  1451.         // size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD
  1452.         <DMUS_IO_TIMESIGNATURE_ITEM>...
  1453.     )
  1454. *)
  1455. (*  DX8 Time signature track. The track has been updated from DX7 to support a list of
  1456.     RIFF chunks. This will allow the time signature track to expand in the future.
  1457. *)
  1458. const
  1459.   DMUS_FOURCC_TIMESIGTRACK_LIST = DWORD(Byte('T') or (Byte('I') shl 8) or (Byte('M') shl 16) or (Byte('S') shl 24)); // mmioFOURCC('T','I','M','S')
  1460.   {$EXTERNALSYM DMUS_FOURCC_TIMESIGTRACK_LIST}
  1461.   DMUS_FOURCC_TIMESIG_CHUNK     = DMUS_FOURCC_TIMESIGNATURE_TRACK;
  1462.   {$EXTERNALSYM DMUS_FOURCC_TIMESIG_CHUNK}
  1463. (*
  1464. LIST
  1465. (
  1466.     'TIMS'          // Time Signature Track list-type
  1467.     <tims-ck>       // Chunk containing an array of time signatures
  1468. )
  1469.     'tims'
  1470.     (
  1471.         // size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD
  1472.         <DMUS_IO_TIMESIGNATURE_ITEM>...
  1473.     )
  1474. *)
  1475. (*  DX8 Marker track. This is used to store valid start points and other
  1476.     flow control parameters that may come later. For example, if we want
  1477.     to implement more sophisticated looping and branching constructs, they
  1478.     would live in this track.
  1479. *)
  1480. const
  1481.   DMUS_FOURCC_MARKERTRACK_LIST = DWORD(Byte('M') or (Byte('A') shl 8) or (Byte('R') shl 16) or (Byte('K') shl 24)); // mmioFOURCC('M','A','R','K')
  1482.   {$EXTERNALSYM DMUS_FOURCC_MARKERTRACK_LIST}
  1483.   DMUS_FOURCC_VALIDSTART_CHUNK = DWORD(Byte('v') or (Byte('a') shl 8) or (Byte('l') shl 16) or (Byte('s') shl 24)); // mmioFOURCC('v','a','l','s')
  1484.   {$EXTERNALSYM DMUS_FOURCC_VALIDSTART_CHUNK}
  1485.   DMUS_FOURCC_PLAYMARKER_CHUNK = DWORD(Byte('p') or (Byte('l') shl 8) or (Byte('a') shl 16) or (Byte('y') shl 24)); // mmioFOURCC('p','l','a','y')
  1486.   {$EXTERNALSYM DMUS_FOURCC_PLAYMARKER_CHUNK}
  1487. type
  1488.   (* io structures *)
  1489.   PDMusIoValidStart = ^TDMusIoValidStart;
  1490.   _DMUS_IO_VALID_START = packed record
  1491.     mtTime: TMusicTime;      // Time of a legal start.
  1492.   end;
  1493.   {$EXTERNALSYM _DMUS_IO_VALID_START}
  1494.   DMUS_IO_VALID_START = _DMUS_IO_VALID_START;
  1495.   {$EXTERNALSYM DMUS_IO_VALID_START}
  1496.   TDMusIoValidStart = _DMUS_IO_VALID_START;
  1497.   PDMusIoPlayMarker = ^TDMusIoPlayMarker;
  1498.   _DMUS_IO_PLAY_MARKER = packed record
  1499.     mtTime: TMusicTime;      // Time of a next legal play point marker.
  1500.   end;
  1501.   {$EXTERNALSYM _DMUS_IO_PLAY_MARKER}
  1502.   DMUS_IO_PLAY_MARKER = _DMUS_IO_PLAY_MARKER;
  1503.   {$EXTERNALSYM DMUS_IO_PLAY_MARKER}
  1504.   TDMusIoPlayMarker = _DMUS_IO_PLAY_MARKER;
  1505. (*
  1506. LIST
  1507. (
  1508.     'MARK'          // Marker Track list-type
  1509.     [<vals-ck>]     // Chunk containing an array of start points
  1510.     [<play-ck>]     // Chunk containing an array of play start markers
  1511. )
  1512.     'vals'
  1513.     (
  1514.         // size of DMUS_IO_VALID_START : DWORD
  1515.         <DMUS_IO_VALID_START>...
  1516.     )
  1517.     'play'
  1518.     (
  1519.         // size of DMUS_IO_PLAY_MARKER : DWORD
  1520.         <DMUS_IO_PLAY_MARKER>...
  1521.     )
  1522. *)
  1523. (* segment trigger tracks *)
  1524. const
  1525.   (* RIFF ids: *)
  1526.   DMUS_FOURCC_SEGTRACK_LIST = DWORD(Byte('s') or (Byte('e') shl 8) or (Byte('g') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('s','e','g','t')
  1527.   {$EXTERNALSYM DMUS_FOURCC_SEGTRACK_LIST}
  1528.   DMUS_FOURCC_SEGTRACK_CHUNK = DWORD(Byte('s') or (Byte('g') shl 8) or (Byte('t') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('s','g','t','h')
  1529.   {$EXTERNALSYM DMUS_FOURCC_SEGTRACK_CHUNK}
  1530.   DMUS_FOURCC_SEGMENTS_LIST = DWORD(Byte('l') or (Byte('s') shl 8) or (Byte('g') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('l','s','g','l')
  1531.   {$EXTERNALSYM DMUS_FOURCC_SEGMENTS_LIST}
  1532.   DMUS_FOURCC_SEGMENT_LIST = DWORD(Byte('l') or (Byte('s') shl 8) or (Byte('e') shl 16) or (Byte('g') shl 24)); // mmioFOURCC('l','s','e','g')
  1533.   {$EXTERNALSYM DMUS_FOURCC_SEGMENT_LIST}
  1534.   DMUS_FOURCC_SEGMENTITEM_CHUNK = DWORD(Byte('s') or (Byte('g') shl 8) or (Byte('i') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('s','g','i','h')
  1535.   {$EXTERNALSYM DMUS_FOURCC_SEGMENTITEM_CHUNK}
  1536.   DMUS_FOURCC_SEGMENTITEMNAME_CHUNK = DWORD(Byte('s') or (Byte('n') shl 8) or (Byte('a') shl 16) or (Byte('m') shl 24)); // mmioFOURCC('s','n','a','m')
  1537.   {$EXTERNALSYM DMUS_FOURCC_SEGMENTITEMNAME_CHUNK}
  1538. type
  1539.   (* io structures *)
  1540.   PDMusIoSegmentTrackHeader = ^TDMusIoSegmentTrackHeader;
  1541.   _DMUS_IO_SEGMENT_TRACK_HEADER = packed record
  1542.     dwFlags: DWORD; // Reserved leave as 0.
  1543.   end;
  1544.   {$EXTERNALSYM _DMUS_IO_SEGMENT_TRACK_HEADER}
  1545.   DMUS_IO_SEGMENT_TRACK_HEADER = _DMUS_IO_SEGMENT_TRACK_HEADER;
  1546.   {$EXTERNALSYM DMUS_IO_SEGMENT_TRACK_HEADER}
  1547.   TDMusIoSegmentTrackHeader = _DMUS_IO_SEGMENT_TRACK_HEADER;
  1548.   PDMusIoSegmentItemHeader = ^TDMusIoSegmentItemHeader;
  1549.   _DMUS_IO_SEGMENT_ITEM_HEADER = packed record
  1550.     lTimeLogical: TMusicTime;    // Position in track list. Time in the music with which the event is associated.
  1551.     lTimePhysical: TMusicTime;   // Precise time event will be triggered. Should be close to logical time.
  1552.     dwPlayFlags: DWORD;           // Flags for PlaySegment().
  1553.     dwFlags: DWORD;               // Flags.
  1554.   end;
  1555.   {$EXTERNALSYM _DMUS_IO_SEGMENT_ITEM_HEADER}
  1556.   DMUS_IO_SEGMENT_ITEM_HEADER = _DMUS_IO_SEGMENT_ITEM_HEADER;
  1557.   {$EXTERNALSYM DMUS_IO_SEGMENT_ITEM_HEADER}
  1558.   TDMusIoSegmentItemHeader = _DMUS_IO_SEGMENT_ITEM_HEADER;
  1559. const
  1560.   (* values for dwflags field of DMUS_IO_SEGMENT_ITEM_HEADER *)
  1561.   DMUS_SEGMENTTRACKF_MOTIF = 1; // interpret DMRF as link to style, and use snam as the name of a motif within the style
  1562.   {$EXTERNALSYM DMUS_SEGMENTTRACKF_MOTIF}
  1563. (*
  1564. LIST
  1565. (
  1566.     'segt'          // DirectMusic Segment Trigger Track form-type
  1567.     [<sgth-ck>]     // Segment track header
  1568.     <lsgl-list>     // List of Segment Lists
  1569. )
  1570.     // <sgth-ck>
  1571.     'sgth'
  1572.     (
  1573.         <DMUS_IO_SEGMENT_TRACK_HEADER>
  1574.     )
  1575.     // <lsgl-list>
  1576.     LIST
  1577.     (
  1578.         'lsgl'          // Array of segments
  1579.         <lseg-list>...  // Each segment is encapsulated in a list (that way it can still be riff parsed.)
  1580.     )
  1581.         // <lseg-list>
  1582.         LIST
  1583.         (
  1584.             'lseg'
  1585.             <sgih-ck>
  1586.             <DMRF-list>    // Link to a segment or style file.
  1587.             [<snam-ck>]    // Name field.  Used with DMUS_SEGMENTTRACKF_MOTIF flag.
  1588.         )
  1589.             // <sgih-ck>            // segment item header
  1590.             (
  1591.                 <DMUS_IO_SEGMENT_ITEM_HEADER>  // Segment item header
  1592.             )
  1593.             // <snam-ck>
  1594.             (
  1595.                 // Name, stored as NULL terminated string of WCHARs
  1596.             )
  1597. *)
  1598. (* Script track. *)
  1599. const
  1600.   (* RIFF ids: *)
  1601.   DMUS_FOURCC_SCRIPTTRACK_LIST = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('r') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('s','c','r','t')
  1602.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTTRACK_LIST}
  1603.   DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('r') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('s','c','r','l')
  1604.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST}
  1605.   DMUS_FOURCC_SCRIPTTRACKEVENT_LIST = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('r') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('s','c','r','e')
  1606.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTTRACKEVENT_LIST}
  1607.   DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('r') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('s','c','r','h')
  1608.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK}
  1609.   DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK = DWORD(Byte('s') or (Byte('c') shl 8) or (Byte('r') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('s','c','r','n')
  1610.   {$EXTERNALSYM DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK}
  1611. (* Flags for DMUS_IO_SCRIPTTRACK_TIMING
  1612.  *)
  1613.   DMUS_IO_SCRIPTTRACKF_PREPARE = (1 shl 0);  (* Fire event in advance of time stamp, at Prepare time.  This is the default because it leaves the script time to change the music happening at the target time. *)
  1614.   {$EXTERNALSYM DMUS_IO_SCRIPTTRACKF_PREPARE}
  1615.   DMUS_IO_SCRIPTTRACKF_QUEUE   = (1 shl 1);  (* Fire event just before time stamp, at Queue time. *)
  1616.   {$EXTERNALSYM DMUS_IO_SCRIPTTRACKF_QUEUE}
  1617.   DMUS_IO_SCRIPTTRACKF_ATTIME  = (1 shl 2);  (* Fire event right at the time stamp. *)
  1618.   {$EXTERNALSYM DMUS_IO_SCRIPTTRACKF_ATTIME}
  1619. type
  1620.   PDMusIoScriptTrackEventHeader = ^TDMusIoScriptTrackEventHeader;
  1621.   _DMUS_IO_SCRIPTTRACK_EVENTHEADER = packed record
  1622.     dwFlags: DWORD;              (* various bits ( see DMUS_IO_SCRIPTTRACKF_* ) *)
  1623.     lTimeLogical: TMusicTime;    (* Position in track list. Time in the music with which the event is associated. *)
  1624.     lTimePhysical: TMusicTime;   (* Precise time event will be triggered. Should be close to logical time. *)
  1625.   end;
  1626.   {$EXTERNALSYM _DMUS_IO_SCRIPTTRACK_EVENTHEADER}
  1627.   DMUS_IO_SCRIPTTRACK_EVENTHEADER = _DMUS_IO_SCRIPTTRACK_EVENTHEADER;
  1628.   {$EXTERNALSYM DMUS_IO_SCRIPTTRACK_EVENTHEADER}
  1629.   TDMusIoScriptTrackEventHeader = _DMUS_IO_SCRIPTTRACK_EVENTHEADER;
  1630. (*
  1631.     // Script Track
  1632.     // <scrt-list>
  1633.     LIST
  1634.     (
  1635.         <scrl-list>       // List of script events
  1636.     )
  1637.         // <scrl-list>
  1638.         LIST
  1639.         (
  1640.             <scre-list>...    // Array of event descriptions
  1641.         )
  1642.             // <scre-list>
  1643.             LIST
  1644.             (
  1645.                 <scrh-ck>         // Event header chunk
  1646.                 <DMRF>
  1647.                 <scrn-ck>         // Routine name
  1648.             )
  1649.                 'scrh'
  1650.                 (
  1651.                     <DMUS_IO_SCRIPTTRACK_EVENTHEADER>
  1652.                 )
  1653.                 'scrn'
  1654.                 (
  1655.                     // Name, stored as NULL terminated string of WCHARs
  1656.                 )
  1657. *)
  1658. (* Lyrics/Notification track. *)
  1659. const
  1660.   (* RIFF ids: *)
  1661.   DMUS_FOURCC_LYRICSTRACK_LIST             = DWORD(Byte('l') or (Byte('y') shl 8) or (Byte('r') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('l','y','r','t')
  1662.   {$EXTERNALSYM DMUS_FOURCC_LYRICSTRACK_LIST}
  1663.   DMUS_FOURCC_LYRICSTRACKEVENTS_LIST       = DWORD(Byte('l') or (Byte('y') shl 8) or (Byte('r') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('l','y','r','l')
  1664.   {$EXTERNALSYM DMUS_FOURCC_LYRICSTRACKEVENTS_LIST}
  1665.   DMUS_FOURCC_LYRICSTRACKEVENT_LIST        = DWORD(Byte('l') or (Byte('y') shl 8) or (Byte('r') shl 16) or (Byte('e') shl 24)); // mmioFOURCC('l','y','r','e')
  1666.   {$EXTERNALSYM DMUS_FOURCC_LYRICSTRACKEVENT_LIST}
  1667.   DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK = DWORD(Byte('l') or (Byte('y') shl 8) or (Byte('r') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('l','y','r','h')
  1668.   {$EXTERNALSYM DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK}
  1669.   DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK   = DWORD(Byte('l') or (Byte('y') shl 8) or (Byte('r') shl 16) or (Byte('n') shl 24)); // mmioFOURCC('l','y','r','n')
  1670.   {$EXTERNALSYM DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK}
  1671. type
  1672.   PDMusIoLyricsTrackEventHeader = ^TDMusIoLyricStrackEventHeader;
  1673.   _DMUS_IO_LYRICSTRACK_EVENTHEADER = packed record
  1674.     dwFlags: DWORD;              (* Reserved leave as 0. *)
  1675.     dwTimingFlags: DWORD;        (* Combination DMUS_PMSGF_TOOL_* flags.  Determines the precise timing of when the notification happens. Invalid with the flag DMUS_PMSGF_REFTIME, DMUS_PMSGF_MUSICTIME, DMUS_PMSGF_TOOL_FLUSH, or DMUS_PMSGF_LOCKTOREFTIME. *)
  1676.     lTimeLogical: TMusicTime;    (* Position in track list. Time in the music with which the event is associated. *)
  1677.     lTimePhysical: TMusicTime;   (* Precise time event will be triggered. Should be close to logical time. *)
  1678.   end;
  1679.   {$EXTERNALSYM _DMUS_IO_LYRICSTRACK_EVENTHEADER}
  1680.   DMUS_IO_LYRICSTRACK_EVENTHEADER = _DMUS_IO_LYRICSTRACK_EVENTHEADER;
  1681.   {$EXTERNALSYM DMUS_IO_LYRICSTRACK_EVENTHEADER}
  1682.   TDMusIoLyricsTrackEventHeader = _DMUS_IO_LYRICSTRACK_EVENTHEADER;
  1683. (*
  1684.     // Lyrics/Notification Track
  1685.     // <lyrt-list>
  1686.     LIST
  1687.     (
  1688.         <lyrl-list>       // List of notification events
  1689.     )
  1690.         // <lyrl-list>
  1691.         LIST
  1692.         (
  1693.             <lyre-list>...    // Array of event descriptions
  1694.         )
  1695.             // <lyre-list>
  1696.             LIST
  1697.             (
  1698.                 <lyrh-ck>         // Event header chunk
  1699.                 <lyrn-ck>         // Notification text
  1700.             )
  1701.                 'lyrh'
  1702.                 (
  1703.                     <DMUS_IO_LYRICSTRACK_EVENTHEADER>
  1704.                 )
  1705.                 'lyrn'
  1706.                 (
  1707.                     // Name, stored as NULL terminated string of WCHARs
  1708.                 )
  1709. *)
  1710. (* Parameter control track *)
  1711. const
  1712.   (* RIFF ids: *)
  1713.   DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('m') shl 16) or (Byte('t') shl 24)); // mmioFOURCC('p','r','m','t')
  1714.   {$EXTERNALSYM DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST}
  1715.   DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('o') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('p','r','o','l')
  1716.   {$EXTERNALSYM DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST}
  1717.   DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('o') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','r','o','h')
  1718.   {$EXTERNALSYM DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK}
  1719.   DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('p') shl 16) or (Byte('l') shl 24)); // mmioFOURCC('p','r','p','l')
  1720.   {$EXTERNALSYM DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST}
  1721.   DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('p') shl 16) or (Byte('h') shl 24)); // mmioFOURCC('p','r','p','h')
  1722.   {$EXTERNALSYM DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK}
  1723.   DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK = DWORD(Byte('p') or (Byte('r') shl 8) or (Byte('c') shl 16) or (Byte('c') shl 24)); // mmioFOURCC('p','r','c','c')
  1724.   {$EXTERNALSYM DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK}
  1725. type
  1726.   PDMusIoParamControlTrackObjectHeader = ^TDMusIoParamControlTrackObjectHeader;
  1727.   _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER = packed record
  1728.     dwFlags: DWORD;              (* Reserved.  Must be zero. *)
  1729.     guidTimeFormat: TGUID;        (* Time format to set the object to.  Must be GUID_TIME_REFERNCE or GUID_TIME_MUSIC from medparam.h. *)
  1730.     (* Path for finding the object. These fields correspond to the first five parameters of IDirectMusicSegmentState::GetObjectInPath. *)
  1731.     dwPChannel: DWORD;
  1732.     dwStage: DWORD;
  1733.     dwBuffer: DWORD;
  1734.     guidObject: TGUID;
  1735.     dwIndex: DWORD;
  1736.   end;
  1737.   {$EXTERNALSYM _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER}
  1738.   DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER = _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
  1739.   {$EXTERNALSYM DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER}
  1740.   TDMusIoParamControlTrackObjectHeader = _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
  1741.   PDMusIoParamControlTrackParamHeader = ^TDMusIoParamControlTrackParamHeader;
  1742.   _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER = packed record
  1743.     dwFlags: DWORD;              (* Reserved.  Must be zero. *)
  1744.     dwIndex: DWORD;              (* Index number of the parameter on the object *)
  1745.   end;
  1746.   {$EXTERNALSYM _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER}
  1747.   DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER = _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
  1748.   {$EXTERNALSYM DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER}
  1749.   TDMusIoParamControlTrackParamHeader = _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
  1750.   PDMusIoParamControlTrackCurveInfo = ^TDMusIoParamControlTrackCurveInfo;
  1751.   _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO = packed record
  1752.     mtStartTime: TMusicTime;
  1753.     mtEndTime: TMusicTime;
  1754.     fltStartValue: Single;
  1755.     fltEndValue: Single;
  1756.     dwCurveType: DWORD;   (* One of the items from the MP_CURVE_TYPE enum in medparam.h *)
  1757.     dwFlags: DWORD;       (* A combination of the MPF_ENVLP_* constants in medparam.h *)
  1758.   end;
  1759.   {$EXTERNALSYM _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO}
  1760.   DMUS_IO_PARAMCONTROLTRACK_CURVEINFO = _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
  1761.   {$EXTERNALSYM DMUS_IO_PARAMCONTROLTRACK_CURVEINFO}
  1762.   TDMusIoParamControlTrackCurveInfo = _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
  1763. (*
  1764.     // <prmt-list>
  1765.     LIST
  1766.     (
  1767.         <prol-list>...   // one for each object
  1768.     )
  1769.         // <prol-list>
  1770.         LIST
  1771.         (
  1772.             <proh-ck>       // object header chunk
  1773.             <prpl-list>...  // one for each parameter
  1774.         )
  1775.             // <proh-ck>
  1776.             proh
  1777.             (
  1778.                 <DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER>
  1779.             )
  1780.             // <prpl-list>
  1781.             LIST
  1782.             (
  1783.                 <prph-ck>       // parameter header chunk
  1784.                 <prcc-ck>       // chunk containing an array of curves
  1785.             )
  1786.                 // <prph-ck>
  1787.                 prph
  1788.                 (
  1789.                     <DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER>
  1790.                 )
  1791.                 // <prcc-ck>
  1792.                 prcc
  1793.                 (
  1794.                     // sizeof DMUS_IO_PARAMCONTROLTRACK_CURVEINFO:DWORD
  1795.                     <DMUS_IO_PARAMCONTROLTRACK_CURVEINFO>... // curves, sorted in order of mtTime
  1796.                 )
  1797. *)
  1798. (* DirectSoundBufferConfig FX Map *)
  1799. const
  1800.   (* RIFF ids: *)
  1801.   DMUS_FOURCC_DSBC_FORM  = DWORD(Byte('D') or (Byte('S') shl 8) or (Byte('B') shl 16) or (Byte('C') shl 24)); // mmioFOURCC('D','S','B','C')
  1802.   {$EXTERNALSYM DMUS_FOURCC_DSBC_FORM}
  1803.   DMUS_FOURCC_DSBD_CHUNK = DWORD(Byte('d') or (Byte('s') shl 8) or (Byte('b') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('d','s','b','d')
  1804.   {$EXTERNALSYM DMUS_FOURCC_DSBD_CHUNK}
  1805.   DMUS_FOURCC_BSID_CHUNK = DWORD(Byte('b') or (Byte('s') shl 8) or (Byte('i') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('b','s','i','d')
  1806.   {$EXTERNALSYM DMUS_FOURCC_BSID_CHUNK}
  1807.   DMUS_FOURCC_DS3D_CHUNK = DWORD(Byte('d') or (Byte('s') shl 8) or (Byte('3') shl 16) or (Byte('d') shl 24)); // mmioFOURCC('d','s','3','d')
  1808.   {$EXTERNALSYM DMUS_FOURCC_DS3D_CHUNK}
  1809.   DMUS_FOURCC_DSBC_LIST  = DWORD(Byte('f') or (Byte('x') shl 8) or (Byte('l') shl 16) or (Byte('s') shl 24)); // mmioFOURCC('f','x','l','s')
  1810.   {$EXTERNALSYM DMUS_FOURCC_DSBC_LIST}
  1811.   DMUS_FOURCC_DSFX_FORM  = DWORD(Byte('D') or (Byte('S') shl 8) or (Byte('F') shl 16) or (Byte('X') shl 24)); // mmioFOURCC('D','S','F','X')
  1812.   {$EXTERNALSYM DMUS_FOURCC_DSFX_FORM}
  1813.   DMUS_FOURCC_DSFX_CHUNK = DWORD(Byte('f') or (Byte('x') shl 8) or (Byte('h') shl 16) or (Byte('r') shl 24)); // mmioFOURCC('f','x','h','r')
  1814.   {$EXTERNALSYM DMUS_FOURCC_DSFX_CHUNK}
  1815.   DMUS_FOURCC_DSFX_DATA  = DWORD(Byte('d') or (Byte('a') shl 8) or (Byte('t') shl 16) or (Byte('a') shl 24)); // mmioFOURCC('d','a','t','a')
  1816.   {$EXTERNALSYM DMUS_FOURCC_DSFX_DATA}
  1817. (* io structures *)
  1818. type
  1819.   PDSoundIoDSBufferDesc = ^TDSoundIoDSBufferDesc;
  1820.   _DSOUND_IO_DSBUFFERDESC = packed record
  1821.     dwFlags: DWORD;        (* DirectSound buffer creation flags *)
  1822.     nChannels: Word;       (* No. of channels (rest of buffer format is determined by owning sink) *)
  1823.     lVolume: Longint;      (* Initial pan; only used if CTRLVOLUME is specified *)
  1824.     lPan: Longint;         (* Initial pan; only used if CTRLPAN is specified *)
  1825.     dwReserved: DWORD;     (* Reserved - must be 0 *)
  1826.   end;
  1827.   {$EXTERNALSYM _DSOUND_IO_DSBUFFERDESC}
  1828.   DSOUND_IO_DSBUFFERDESC = _DSOUND_IO_DSBUFFERDESC;
  1829.   {$EXTERNALSYM DSOUND_IO_DSBUFFERDESC}
  1830.   TDSoundIoDSBufferDesc = _DSOUND_IO_DSBUFFERDESC;
  1831.   PDSoundIoDSBusID = ^TDSoundIoDSBusID;
  1832.   _DSOUND_IO_DSBUSID = packed record
  1833.     busid: array[0..0] of DWORD;       (* Array size determined from chunk size *)
  1834.   end;
  1835.   {$EXTERNALSYM _DSOUND_IO_DSBUSID}
  1836.   DSOUND_IO_DSBUSID = _DSOUND_IO_DSBUSID;
  1837.   {$EXTERNALSYM DSOUND_IO_DSBUSID}
  1838.   TDSoundIoDSBusID = _DSOUND_IO_DSBUSID;
  1839.   PDSoundIo3D = ^TDSoundIo3D;
  1840.   _DSOUND_IO_3D = packed record
  1841.     guid3DAlgorithm: TGUID; (* GUID identifying the 3D algorithm to use (defined in dsound.h) *)
  1842.     ds3d: DS3DBUFFER;       (* Initial 3D parameters *)
  1843.   end;
  1844.   {$EXTERNALSYM _DSOUND_IO_3D}
  1845.   DSOUND_IO_3D = _DSOUND_IO_3D;
  1846.   {$EXTERNALSYM DSOUND_IO_3D}
  1847.   TDSoundIo3D = _DSOUND_IO_3D;
  1848.   PDSoundIoDXDMOHeader = ^TDSoundIoDXDMOHeader;
  1849.   _DSOUND_IO_DXDMO_HEADER = packed record
  1850.     dwEffectFlags: DWORD;  (* Effect creation flags - equivalent to DSEFFECTDESC::dwFlags *)
  1851.     guidDSFXClass: TGUID;   (* GUID identifying the effect to use - corresponds to a COM CLSID *)
  1852.     guidReserved: TGUID;    (* Reserved - must be the null GUID *)
  1853.     guidSendBuffer: TGUID;  (* GUID identifying the buffer to send to if this is a send effect *)
  1854.     dwReserved: DWORD;     (* Reserved - must be 0 *)
  1855.   end;
  1856.   {$EXTERNALSYM _DSOUND_IO_DXDMO_HEADER}
  1857.   DSOUND_IO_DXDMO_HEADER = _DSOUND_IO_DXDMO_HEADER;
  1858.   {$EXTERNALSYM DSOUND_IO_DXDMO_HEADER}
  1859.   TDSoundIoDXDMOHeader = _DSOUND_IO_DXDMO_HEADER;
  1860.   PDSoundIoDXDMOData = ^TDSoundIoDXDMOData;
  1861.   _DSOUND_IO_DXDMO_DATA= packed record
  1862.     data: array[0..0] of DWORD;      (* Array size determined by the DMO involved *)
  1863.   end;
  1864.   {$EXTERNALSYM _DSOUND_IO_DXDMO_DATA}
  1865.   DSOUND_IO_DXDMO_DATA = _DSOUND_IO_DXDMO_DATA;
  1866.   {$EXTERNALSYM DSOUND_IO_DXDMO_DATA}
  1867.   TDSoundIoDXDMOData = _DSOUND_IO_DXDMO_DATA;
  1868. (*
  1869. RIFF
  1870. (
  1871.     'DSBC'          // DirectSoundBufferConfig chunk
  1872.     [<guid-ck>]     // GUID identifier for this DirectSoundBufferConfig
  1873.     [<vers-ck>]     // Optional version info
  1874.     [<UNFO-list>]   // Name, author, copyright info., comments
  1875.     <dsbd-ck>       // DirectSound Buffer descriptor chunk
  1876.     [<bsid-ck>]     // Optional bus id array
  1877.     [<ds3d-ck>]     // Optional 3d Parameters
  1878.     [<fxls-list>]   // Optional list of FX descriptors
  1879. )
  1880.     // <guid-ck>
  1881.     'guid'
  1882.     (
  1883.         <GUID>
  1884.     )
  1885.     // <vers-ck>
  1886.     'vers'
  1887.     (
  1888.         <DMUS_IO_VERSION>
  1889.     )
  1890.     // <dsbd-ck>
  1891.     'dsbd'
  1892.     (
  1893.         <DSOUND_IO_DSBUFFERDESC>  // Creation parameters and initial settings for the buffer
  1894.     )
  1895.     // <bsid-ck>
  1896.     'bsid'
  1897.     (
  1898.         <DSOUND_IO_DSBUSID>  // The size of DSOUND_IO_DSBUSID is determined by the chunk size
  1899.     )
  1900.     // <ds3d-ck>
  1901.     'ds3d'
  1902.     (
  1903.         <DSOUND_IO_3D>  // Initial 3D buffer parameters: position, etc.
  1904.     )
  1905.     // <fx-list>
  1906.     LIST
  1907.     (
  1908.         'fxls'          // Array of DMO creation parameter blocks
  1909.         <DSFX-form>...  // Each DMO is encapsulated in a RIFF chunk
  1910.     )
  1911. // <DSFX-form>          // DMOs can be embedded in a buffer configuration or stored as separate files
  1912. RIFF
  1913. (
  1914.     'DSFX'
  1915.     <fxhr-ck>           // FX header chunk
  1916.     [<data-ck>]         // FX initial settings chunk
  1917. )
  1918.     // <fxhr-ck>
  1919.     'fxhr'
  1920.     (
  1921.         <DSOUND_IO_DXDMO_HEADER>
  1922.     )
  1923.     // <data-ck>
  1924.     'data'
  1925.     (
  1926.         <DSOUND_IO_DXDMO_DATA>  // Opaque data block used by the DMO to load itself.
  1927.         // For our standard included DMOs, this is simply the structure accepted by
  1928.         // the DMO's SetAllParameters() method - e.g. struct DSFXChorus for Chorus.
  1929.     )
  1930. *)
  1931. (***************************************************************************
  1932. *                                                                          *
  1933. *   DMusBuff.h -- This module defines the buffer format for DirectMusic    *
  1934. *                 Shared file between user mode and kernel mode components *
  1935. *                                                                          *
  1936. *   Copyright (c) 1998, Microsoft Corp. All rights reserved.               *
  1937. *                                                                          *
  1938. ***************************************************************************)
  1939. (* Format of DirectMusic events in a buffer
  1940.  *
  1941.  * A buffer contains 1 or more events, each with the following header.
  1942.  * Immediately following the header is the event data. The header+data
  1943.  * size is rounded to the nearest quadword (8 bytes).
  1944.  *)
  1945. type
  1946.   PDMusEventHeader = ^TDMusEventHeader;
  1947.   _DMUS_EVENTHEADER = packed record
  1948.     cbEvent: DWORD;                (* Unrounded bytes in event *)
  1949.     dwChannelGroup: DWORD;         (* Channel group of event *)
  1950.     rtDelta: TReferenceTime;       (* Delta from start time of entire buffer *)
  1951.     dwFlags: DWORD;                (* Flags DMUS_EVENT_xxx *)
  1952.   end;
  1953.   {$EXTERNALSYM _DMUS_EVENTHEADER}
  1954.   DMUS_EVENTHEADER = _DMUS_EVENTHEADER;
  1955.   {$EXTERNALSYM DMUS_EVENTHEADER}
  1956.   TDMusEventHeader = _DMUS_EVENTHEADER;
  1957. const
  1958.   DMUS_EVENT_STRUCTURED   = $00000001;  (* Unstructured data (SysEx, etc.) *)
  1959.   {$EXTERNALSYM DMUS_EVENT_STRUCTURED}
  1960. (* The number of bytes to allocate for an event with 'cb' data bytes.
  1961.  *)
  1962. // #define QWORD_ALIGN(x) (((x) + 7) & ~7)
  1963. function QWORD_ALIGN(x: DWORD): DWORD;
  1964. {$EXTERNALSYM QWORD_ALIGN}
  1965. // #define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
  1966. function DMUS_EVENT_SIZE(cb: DWORD): DWORD;
  1967. {$EXTERNALSYM DMUS_EVENT_SIZE}
  1968. (************************************************************************
  1969. *                                                                       *
  1970. *   dmplugin.h -- This module contains the API for plugins for the      *
  1971. *                 DirectMusic performance layer                         *
  1972. *                                                                       *
  1973. *   Copyright (c) Microsoft Corporation.  All rights reserved.          *
  1974. *                                                                       *
  1975. ************************************************************************)
  1976. // Translator: only part of this header located below, other definitions
  1977. // can be found above
  1978. const
  1979.   // Registry location for tools
  1980.   DMUS_REGSTR_PATH_TOOLS  = 'SoftwareMicrosoftDirectMusicTools';
  1981.   {$EXTERNALSYM DMUS_REGSTR_PATH_TOOLS}
  1982. (*////////////////////////////////////////////////////////////////////
  1983. // IDirectMusicTool8 *)
  1984. type
  1985.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicTool8);'}
  1986.   {$EXTERNALSYM IDirectMusicTool8}
  1987.   IDirectMusicTool8 = interface(IDirectMusicTool)
  1988.     (*  IDirectMusicTool8 *)
  1989.     ['{0e674303-3b05-11d3-9bd1-f9e7f0a01536}']
  1990.     function Clone(out ppTool: IDirectMusicTool): HResult; stdcall;
  1991.   end;
  1992. (* The following flags are sent in the IDirectMusicTrack.Play() method *)
  1993. (* inside the dwFlags parameter *)
  1994. type
  1995.   enumDMUS_TRACKF_FLAGS = DWORD;
  1996.   DMUS_TRACKF_FLAGS = enumDMUS_TRACKF_FLAGS;
  1997.   {$EXTERNALSYM DMUS_TRACKF_FLAGS}
  1998.   TDMusTrackfFlags = DMUS_TRACKF_FLAGS;
  1999.   PDMusTrackfFlags = ^TDMusTrackfFlags;
  2000. const
  2001.   DMUS_TRACKF_SEEK            = 1;      (* set on a seek *)
  2002.   {$EXTERNALSYM DMUS_TRACKF_SEEK}
  2003.   DMUS_TRACKF_LOOP            = 2;      (* set on a loop (repeat) *)
  2004.   {$EXTERNALSYM DMUS_TRACKF_LOOP}
  2005.   DMUS_TRACKF_START           = 4;      (* set on first call to Play *)
  2006.   {$EXTERNALSYM DMUS_TRACKF_START}
  2007.   DMUS_TRACKF_FLUSH           = 8;      (* set when this call is in response to a flush on the perfomance *)
  2008.   {$EXTERNALSYM DMUS_TRACKF_FLUSH}
  2009.   DMUS_TRACKF_DIRTY           = $10;   (* set when the track should consider any cached values from a previous call to GetParam to be invalidated *)
  2010.   {$EXTERNALSYM DMUS_TRACKF_DIRTY}
  2011.   // The following flags are DX8 only.
  2012.   DMUS_TRACKF_NOTIFY_OFF      = $20;   (* tells track not to send notifications. *)
  2013.   {$EXTERNALSYM DMUS_TRACKF_NOTIFY_OFF}
  2014.   DMUS_TRACKF_PLAY_OFF        = $40;   (* tells track not to play anything (but can still send notifications.) *)
  2015.   {$EXTERNALSYM DMUS_TRACKF_PLAY_OFF}
  2016.   DMUS_TRACKF_LOOPEND         = $80;   (* set when the end of range is also a loop end. *)
  2017.   {$EXTERNALSYM DMUS_TRACKF_LOOPEND}
  2018.   DMUS_TRACKF_STOP            = $100;  (* set when the end of range is also end of playing this segment. *)
  2019.   {$EXTERNALSYM DMUS_TRACKF_STOP}
  2020.   DMUS_TRACKF_RECOMPOSE       = $200;  (* set to indicate the track should compose. *)
  2021.   {$EXTERNALSYM DMUS_TRACKF_RECOMPOSE}
  2022.   DMUS_TRACKF_CLOCK           = $400;  (* set when time parameters are in reference (clock) time. Only valid for PlayEx(). *)
  2023.   {$EXTERNALSYM DMUS_TRACKF_CLOCK}
  2024.   (* The following flags are sent in the IDirectMusicTrack8::GetParamEx() and SetParamEx() methods *)
  2025.   (* inside the dwFlags parameter *)
  2026.   DMUS_TRACK_PARAMF_CLOCK  = $01;       (* set when the time is measured is in reference (clock) time *)
  2027.   {$EXTERNALSYM DMUS_TRACK_PARAMF_CLOCK}
  2028. (*)///////////////////////////////////////////////////////////////////
  2029. // IDirectMusicTrack8 *)
  2030. type
  2031.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectMusicTrack8);'}
  2032.   {$EXTERNALSYM IDirectMusicTrack8}
  2033.   IDirectMusicTrack8 = interface(IDirectMusicTrack)
  2034.     (* IDirectMusicTrack8 *)
  2035.     ['{0e674304-3b05-11d3-9bd1-f9e7f0a01536}']
  2036.     function PlayEx(pStateData: Pointer; rtStart, rtEnd, rtOffset: TReferenceTime;
  2037.       dwFlags: DWORD; pPerf: IDirectMusicPerformance;
  2038.       pSegSt: IDirectMusicSegmentState; dwVirtualID: DWORD): HResult; stdcall;
  2039.     function GetParamEx(const rguidType: TGUID; rtTime: TReferenceTime;
  2040.       out prtNext: TReferenceTime; pParam, pStateData: pointer; dwFlags: DWORD): HResult; stdcall;
  2041.     function SetParamEx(const rguidType: TGUID; rtTime: TReferenceTime;
  2042.       pParam, pStateData: pointer; dwFlags: DWORD): HResult; stdcall;
  2043.     function Compose(pContext: IUnknown; dwTrackGroup: DWORD;
  2044.       out ppResultTrack: IDirectMusicTrack): HResult; stdcall;
  2045.     function Join(pNewTrack: IDirectMusicTrack; mtJoin: TMusicTime;
  2046.       pContext: IUnknown; dwTrackGroup: DWORD;
  2047.       out ppResultTrack: IDirectMusicTrack): HResult; stdcall;
  2048.   end;
  2049. const
  2050.   (* CLSID's *)
  2051.   CLSID_DirectMusicTempoTrack    : TGUID = '{d2ac2885-b39b-11d1-8704-00600893b1bd}';
  2052.   {$EXTERNALSYM CLSID_DirectMusicTempoTrack}
  2053.   CLSID_DirectMusicSeqTrack      : TGUID = '{d2ac2886-b39b-11d1-8704-00600893b1bd}';
  2054.   {$EXTERNALSYM CLSID_DirectMusicSeqTrack}
  2055.   CLSID_DirectMusicSysExTrack    : TGUID = '{d2ac2887-b39b-11d1-8704-00600893b1bd}';
  2056.   {$EXTERNALSYM CLSID_DirectMusicSysExTrack}
  2057.   CLSID_DirectMusicTimeSigTrack  : TGUID = '{d2ac2888-b39b-11d1-8704-00600893b1bd}';
  2058.   {$EXTERNALSYM CLSID_DirectMusicTimeSigTrack}
  2059.   CLSID_DirectMusicChordTrack    : TGUID = '{d2ac288b-b39b-11d1-8704-00600893b1bd}';
  2060.   {$EXTERNALSYM CLSID_DirectMusicChordTrack}
  2061.   CLSID_DirectMusicCommandTrack  : TGUID = '{d2ac288c-b39b-11d1-8704-00600893b1bd}';
  2062.   {$EXTERNALSYM CLSID_DirectMusicCommandTrack}
  2063.   CLSID_DirectMusicStyleTrack    : TGUID = '{d2ac288d-b39b-11d1-8704-00600893b1bd}';
  2064.   {$EXTERNALSYM CLSID_DirectMusicStyleTrack}
  2065.   CLSID_DirectMusicMotifTrack    : TGUID = '{d2ac288e-b39b-11d1-8704-00600893b1bd}';
  2066.   {$EXTERNALSYM CLSID_DirectMusicMotifTrack}
  2067.   CLSID_DirectMusicSignPostTrack : TGUID = '{f17e8672-c3b4-11d1-870b-00600893b1bd}';
  2068.   {$EXTERNALSYM CLSID_DirectMusicSignPostTrack}
  2069.   CLSID_DirectMusicBandTrack     : TGUID = '{d2ac2894-b39b-11d1-8704-00600893b1bd}';
  2070.   {$EXTERNALSYM CLSID_DirectMusicBandTrack}
  2071.   CLSID_DirectMusicChordMapTrack : TGUID = '{d2ac2896-b39b-11d1-8704-00600893b1bd}';
  2072.   {$EXTERNALSYM CLSID_DirectMusicChordMapTrack}
  2073.   CLSID_DirectMusicMuteTrack     : TGUID = '{d2ac2898-b39b-11d1-8704-00600893b1bd}';
  2074.   {$EXTERNALSYM CLSID_DirectMusicMuteTrack}
  2075.   (* New CLSID's for DX8 *)
  2076.   CLSID_DirectMusicScriptTrack: TGUID = '{4108fa85-3586-11d3-8bd7-00600893b1b6}'; (* {4108FA85-3586-11d3-8BD7-00600893B1B6} *)
  2077.   {$EXTERNALSYM CLSID_DirectMusicScriptTrack}
  2078.   CLSID_DirectMusicMarkerTrack: TGUID = '{55a8fd00-4288-11d3-9bd1-8a0d61c88835}';
  2079.   {$EXTERNALSYM CLSID_DirectMusicMarkerTrack}
  2080.   CLSID_DirectMusicSegmentTriggerTrack: TGUID = '{bae4d665-4ea1-11d3-8bda-00600893b1b6}'; (* {BAE4D665-4EA1-11d3-8BDA-00600893B1B6} *)
  2081.   {$EXTERNALSYM CLSID_DirectMusicSegmentTriggerTrack}
  2082.   CLSID_DirectMusicLyricsTrack: TGUID = '{995c1cf5-54ff-11d3-8bda-00600893b1b6}'; (* {995C1CF5-54FF-11d3-8BDA-00600893B1B6} *)
  2083.   {$EXTERNALSYM CLSID_DirectMusicLyricsTrack}
  2084.   CLSID_DirectMusicParamControlTrack: TGUID = '{4be0537b-5c19-11d3-8bdc-00600893b1b6}'; (* {4BE0537B-5C19-11d3-8BDC-00600893B1B6} *)
  2085.   {$EXTERNALSYM CLSID_DirectMusicParamControlTrack}
  2086.   CLSID_DirectMusicWaveTrack: TGUID = '{eed36461-9ea5-11d3-9bd1-0080c7150a74}';
  2087.   {$EXTERNALSYM CLSID_DirectMusicWaveTrack}
  2088. type
  2089.   (* IID's *)
  2090.   IID_IDirectMusicTrack = IDirectMusicTrack;
  2091.   {$EXTERNALSYM IID_IDirectMusicTrack}
  2092.   IID_IDirectMusicTool = IDirectMusicTool;
  2093.   {$EXTERNALSYM IID_IDirectMusicTool}
  2094.   // Interface IDs for DX8
  2095.   // changed interfaces (GUID only)
  2096.   IID_IDirectMusicTool8 = IDirectMusicTool8;
  2097.   {$EXTERNALSYM IID_IDirectMusicTool8}
  2098.   IID_IDirectMusicTrack8 = IDirectMusicTrack8;
  2099.   {$EXTERNALSYM IID_IDirectMusicTrack8}
  2100. // Translator: Types below are declared to compatibility with previous -
  2101. // non borland compliant - conversions of DirectMusic.
  2102. type
  2103.   PDMus_Downloadinfo = PDMusDownloadInfo;
  2104.   TDMus_Downloadinfo = TDMusDownloadInfo;
  2105.   PDMus_Offsettable = PDMusOffsetTable;
  2106.   TDMus_Offsettable = TDMusOffsetTable;
  2107.   PDMus_Instrument = PDMusInstrument;
  2108.   TDMus_Instrument = TDMusInstrument;
  2109.   PDMus_Region = PDMusRegion;
  2110.   TDMus_Region = TDMusRegion;
  2111.   PDMus_Lfoparams = PDMusLFOParams;
  2112.   TDMus_Lfoparams = TDMusLFOParams;
  2113.   PDMus_Vegparams = PDMusVEGParams;
  2114.   TDMus_Vegparams = TDMusVEGParams;
  2115.   PDMus_Pegparams = PDMusPEGParams;
  2116.   TDMus_Pegparams = TDMusPEGParams;
  2117.   PDMus_Mscparams = PDMusMSCParams;
  2118.   TDMus_Mscparams = TDMusMSCParams;
  2119.   PDMus_Articparams = PDMusArticParams;
  2120.   TDMus_Articparams = TDMusArticParams;
  2121.   PDMus_Articulation = PDMusArticulation;
  2122.   TDMus_Articulation = TDMusArticulation;
  2123.   PDMus_Articulation2 = PDMusArticulation2;
  2124.   TDMus_Articulation2 = TDMusArticulation2;
  2125.   PDMus_Extensionchunk = PDMusExtensionChunk;
  2126.   TDMus_Extensionchunk = TDMusExtensionChunk;
  2127.   PDMus_Copyright = PDMusCopyright;
  2128.   TDMus_Copyright = TDMusCopyright;
  2129.   PDMus_Wavedata = PDMusWaveData;
  2130.   TDMus_Wavedata = TDMusWaveData;
  2131.   PDMus_Wave = PDMusWave;
  2132.   TDMus_Wave = TDMusWave;
  2133.   PDMus_Noterange = PDMusNoteRange;
  2134.   TDMus_Noterange = TDMusNoteRange;
  2135.   PDMus_Waveartdl = PDMusWaveArtDL;
  2136.   TDMus_Waveartdl = TDMusWaveArtDL;
  2137.   PDMus_Wavedl = PDMusWaveDL;
  2138.   TDMus_Wavedl = TDMusWaveDL;
  2139.   PDMus_Bufferdesc = PDMusBufferDesc;
  2140.   TDMus_Bufferdesc = TDMusBufferDesc;
  2141.   PDMus_Portcaps = PDMusPortCaps;
  2142.   TDMus_Portcaps = TDMusPortCaps;
  2143.   PDMus_Portparams = PDMusPortParams;
  2144.   TDMus_Portparams = TDMusPortParams;
  2145.   PDMus_Portparams8 = PDMusPortParams8;
  2146.   TDMus_Portparams8 = TDMusPortParams8;
  2147.   PDMus_Synthstats = PDMusSynthStats;
  2148.   TDMus_Synthstats = TDMusSynthStats;
  2149.   PDMus_Synthstats8 = PDMusSynthStats8;
  2150.   TDMus_Synthstats8 = TDMusSynthStats8;
  2151.   PDMus_Waves_Reverb_Params = PDMusWavesReverbParams;
  2152.   TDMus_Waves_Reverb_Params = TDMusWavesReverbParams;
  2153.   PDMus_Clockinfo7 = PDMusClockInfo7;
  2154.   TDMus_Clockinfo7 = TDMusClockInfo7;
  2155.   PDMus_Clockinfo8 = PDMusClockInfo8;
  2156.   TDMus_Clockinfo8 = TDMusClockInfo8;
  2157.   PDMus_Audioparams = PDMusAudioParams;
  2158.   TDMus_Audioparams = TDMusAudioParams;
  2159.   PDMus_Subchord = PDMusSubChord;
  2160.   TDMus_Subchord = TDMusSubChord;
  2161.   PDMus_Chord_Key = PDMusChordKey;
  2162.   TDMus_Chord_Key = TDMusChordKey;
  2163.   PDMus_Version = PDMusVersion;
  2164.   TDMus_Version = TDMusVersion;
  2165.   PDMus_Timesignature = PDMusTimeSignature;
  2166.   TDMus_Timesignature = TDMusTimeSignature;
  2167.   PDMus_Valid_Start_Param = PDMusValidStartParam;
  2168.   TDMus_Valid_Start_Param = TDMusValidStartParam;
  2169.   PDMus_Play_Marker_Param = PDMusPlayMarkerParam;
  2170.   TDMus_Play_Marker_Param = TDMusPlayMarkerParam;
  2171.   PDMus_Objectdesc = PDMusObjectDesc;
  2172.   TDMus_Objectdesc = TDMusObjectDesc;
  2173.   PDMus_Script_Errorinfo = PDMusScriptErrorInfo;
  2174.   TDMus_Script_Errorinfo = TDMusScriptErrorInfo;
  2175.   PDMus_Command_Param = PDMusCommandParam;
  2176.   TDMus_Command_Param = TDMusCommandParam;
  2177.   PDMus_Command_Param_2 = PDMusCommandParam2;
  2178.   TDMus_Command_Param_2 = TDMusCommandParam2;
  2179.   PDMus_Pmsg = PDMusPMsg;
  2180.   TDMus_Pmsg = TDMusPMsg;
  2181.   PDMus_Note_Pmsg = PDMusNotePMsg;
  2182.   TDMus_Note_Pmsg = TDMusNotePMsg;
  2183.   PDMus_Midi_Pmsg = PDMusMidiPMsg;
  2184.   TDMus_Midi_Pmsg = TDMusMidiPMsg;
  2185.   PDMus_Patch_Pmsg = PDMusPatchPMsg;
  2186.   TDMus_Patch_Pmsg = TDMusPatchPMsg;
  2187.   PDMus_Transpose_Pmsg = PDMusTransposePMsg;
  2188.   TDMus_Transpose_Pmsg = TDMusTransposePMsg;
  2189.   PDMus_Channel_Priority_Pmsg = PDMusChannelPriorityPMsg;
  2190.   TDMus_Channel_Priority_Pmsg = TDMusChannelPriorityPMsg;
  2191.   PDMus_Tempo_Pmsg = PDMusTempoPMsg;
  2192.   TDMus_Tempo_Pmsg = TDMusTempoPMsg;
  2193.   PDMus_Sysex_Pmsg = PDMusSysexPMsg;
  2194.   TDMus_Sysex_Pmsg = TDMusSysexPMsg;
  2195.   PDMus_Curve_Pmsg = PDMusCurvePMsg;
  2196.   TDMus_Curve_Pmsg = TDMusCurvePMsg;
  2197.   PDMus_Timesig_Pmsg = PDMusTimeSigPMsg;
  2198.   TDMus_Timesig_Pmsg = TDMusTimeSigPMsg;
  2199.   PDMus_Notification_Pmsg = PDMusNotificationPMsg;
  2200.   TDMus_Notification_Pmsg = TDMusNotificationPMsg;
  2201.   PDMus_Wave_Pmsg = PDMusWavePMsg;
  2202.   TDMus_Wave_Pmsg = TDMusWavePMsg;
  2203.   PDMus_Lyric_Pmsg = PDMusLyricPMsg;
  2204.   TDMus_Lyric_Pmsg = TDMusLyricPMsg;
  2205.   PDMus_Band_Param = PDMusBandParam;
  2206.   TDMus_Band_Param = TDMusBandParam;
  2207.   PDMus_Variations_Param = PDMusVariationsParam;
  2208.   TDMus_Variations_Param = TDMusVariationsParam;
  2209.   PDMus_Io_Seq_Item = PDMusIoSeqItem;
  2210.   TDMus_Io_Seq_Item = TDMusIoSeqItem;
  2211.   PDMus_Io_Curve_Item = PDMusIoCurveItem;
  2212.   TDMus_Io_Curve_Item = TDMusIoCurveItem;
  2213.   PDMus_Io_Tempo_Item = PDMusIoTempoItem;
  2214.   TDMus_Io_Tempo_Item = TDMusIoTempoItem;
  2215.   PDMus_Io_Sysex_Item = PDMusIoSysexItem;
  2216.   TDMus_Io_Sysex_Item = TDMusIoSysexItem;
  2217.   PDMus_Rhythm_Param = PDMusRhythmParam;
  2218.   TDMus_Rhythm_Param = TDMusRhythmParam;
  2219.   PDMus_Tempo_Param = PDMusTempoParam;
  2220.   TDMus_Tempo_Param = TDMusTempoParam;
  2221.   PDMus_Mute_Param = PDMusMuteParam;
  2222.   TDMus_Mute_Param = TDMusMuteParam;
  2223.   PDMus_Io_Timesig = PDMusIoTimesig;
  2224.   TDMus_Io_Timesig = TDMusIoTimesig;
  2225.   PDMus_Io_Style = PDMusIoStyle;
  2226.   TDMus_Io_Style = TDMusIoStyle;
  2227.   PDMus_Io_Version = PDMusIoVersion;
  2228.   TDMus_Io_Version = TDMusIoVersion;
  2229.   PDMus_Io_Pattern = PDMusIoPattern;
  2230.   TDMus_Io_Pattern = TDMusIoPattern;
  2231.   PDMus_Io_Stylepart = PDMusIoStylepart;
  2232.   TDMus_Io_Stylepart = TDMusIoStylepart;
  2233.   PDMus_Io_Partref = PDMusIoPartref;
  2234.   TDMus_Io_Partref = TDMusIoPartref;
  2235.   PDMus_Io_Stylenote = PDMusIoStyleNote;
  2236.   TDMus_Io_Stylenote = TDMusIoStyleNote;
  2237.   PDMus_Io_Stylecurve = PDMusIoStyleCurve;
  2238.   TDMus_Io_Stylecurve = TDMusIoStyleCurve;
  2239.   PDMus_Io_Stylemarker = PDMusIoStyleMarker;
  2240.   TDMus_Io_Stylemarker = TDMusIoStyleMarker;
  2241.   PDMus_Io_Styleresolution = PDMusIoStyleResolution;
  2242.   TDMus_Io_Styleresolution = TDMusIoStyleResolution;
  2243.   PDMus_Io_Style_Anticipation = PDMusIoStyleAnticipation;
  2244.   TDMus_Io_Style_Anticipation = TDMusIoStyleAnticipation;
  2245.   PDMus_Io_Motifsettings = PDMusIoMotifSettings;
  2246.   TDMus_Io_Motifsettings = TDMusIoMotifSettings;
  2247.   PDMus_Io_Chord = PDMusIoChord;
  2248.   TDMus_Io_Chord = TDMusIoChord;
  2249.   PDMus_Io_Subchord = PDMusIoSubChord;
  2250.   TDMus_Io_Subchord = TDMusIoSubChord;
  2251.   PDMus_Io_Command = PDMusIoCommand;
  2252.   TDMus_Io_Command = TDMusIoCommand;
  2253.   PDMus_Io_Tool_Header = PDMusIoToolHeader;
  2254.   TDMus_Io_Tool_Header = TDMusIoToolHeader;
  2255.   PDMus_Io_Portconfig_Header = PDMusIoPortconfigHeader;
  2256.   TDMus_Io_Portconfig_Header = TDMusIoPortconfigHeader;
  2257.   PDMus_Io_Pchanneltobuffer_Header = PDMusIoPchanneltobufferHeader;
  2258.   TDMus_Io_Pchanneltobuffer_Header = TDMusIoPchanneltobufferHeader;
  2259.   PDMus_Io_Buffer_Attributes_Header = PDMusIoBufferAttributesHeader;
  2260.   TDMus_Io_Buffer_Attributes_Header = TDMusIoBufferAttributesHeader;
  2261.   PDMus_Io_Band_Track_Header = PDMusIoBandTrackHeader;
  2262.   TDMus_Io_Band_Track_Header = TDMusIoBandTrackHeader;
  2263.   PDMus_Io_Band_Item_Header = PDMusIoBandItemHeader;
  2264.   TDMus_Io_Band_Item_Header = TDMusIoBandItemHeader;
  2265.   PDMus_Io_Band_Item_Header2 = PDMusIoBandItemHeader2;
  2266.   TDMus_Io_Band_Item_Header2 = TDMusIoBandItemHeader2;
  2267.   PDMus_Io_Instrument = PDMusIoInstrument;
  2268.   TDMus_Io_Instrument = TDMusIoInstrument;
  2269.   PDMus_Io_Wave_Header = PDMusIoWaveHeader;
  2270.   TDMus_Io_Wave_Header = TDMusIoWaveHeader;
  2271.   PDMus_Io_Wave_Track_Header = PDMusIoWaveTrackHeader;
  2272.   TDMus_Io_Wave_Track_Header = TDMusIoWaveTrackHeader;
  2273.   PDMus_Io_Wave_Part_Header = PDMusIoWavePartHeader;
  2274.   TDMus_Io_Wave_Part_Header = TDMusIoWavePartHeader;
  2275.   PDMus_Io_Wave_Item_Header = PDMusIoWaveItemHeader;
  2276.   TDMus_Io_Wave_Item_Header = TDMusIoWaveItemHeader;
  2277.   PDMus_Io_Container_Header = PDMusIoContainerHeader;
  2278.   TDMus_Io_Container_Header = TDMusIoContainerHeader;
  2279.   PDMus_Io_Contained_Object_Header = PDMusIoContainedObjectHeader;
  2280.   TDMus_Io_Contained_Object_Header = TDMusIoContainedObjectHeader;
  2281.   PDMus_Io_Segment_Header = PDMusIoSegmentHeader;
  2282.   TDMus_Io_Segment_Header = TDMusIoSegmentHeader;
  2283.   PDMus_Io_Track_Header = PDMusIoTrackHeader;
  2284.   TDMus_Io_Track_Header = TDMusIoTrackHeader;
  2285.   PDMus_Io_Track_Extras_Header = PDMusIoTrackExtrasHeader;
  2286.   TDMus_Io_Track_Extras_Header = TDMusIoTrackExtrasHeader;
  2287.   PDMus_Io_Reference = PDMusIoReference;
  2288.   TDMus_Io_Reference = TDMusIoReference;
  2289.   PDMus_Io_Chordmap = PDMusIoChordmap;
  2290.   TDMus_Io_Chordmap = TDMusIoChordmap;
  2291.   PDMus_Io_Chordmap_Subchord = PDMusIoChordmapSubChord;
  2292.   TDMus_Io_Chordmap_Subchord = TDMusIoChordmapSubChord;
  2293.   PDMus_Io_Chordentry = PDMusIoChordEntry;
  2294.   TDMus_Io_Chordentry = TDMusIoChordEntry;
  2295.   PDMus_Io_Nextchord = PDMusIoNextChord;
  2296.   TDMus_Io_Nextchord = TDMusIoNextChord;
  2297.   PDMus_Io_Chordmap_Signpost = PDMusIoChordMapSignPost;
  2298.   TDMus_Io_Chordmap_Signpost = TDMusIoChordMapSignPost;
  2299.   PDMus_Io_Script_Header = PDMusIoScriptHeader;
  2300.   TDMus_Io_Script_Header = TDMusIoScriptHeader;
  2301.   PDMus_Io_Signpost = PDMusIoSignPost;
  2302.   TDMus_Io_Signpost = TDMusIoSignPost;
  2303.   PDMus_Io_Mute = PDMusIoMute;
  2304.   TDMus_Io_Mute = TDMusIoMute;
  2305.   PDMus_Io_Timesignature_Item = PDMusIoTimesignatureItem;
  2306.   TDMus_Io_Timesignature_Item = TDMusIoTimesignatureItem;
  2307.   PDMus_Io_Valid_Start = PDMusIoValidStart;
  2308.   TDMus_Io_Valid_Start = TDMusIoValidStart;
  2309.   PDMus_Io_Play_Marker = PDMusIoPlayMarker;
  2310.   TDMus_Io_Play_Marker = TDMusIoPlayMarker;
  2311.   PDMus_Io_Segment_Track_Header = PDMusIoSegmentTrackHeader;
  2312.   TDMus_Io_Segment_Track_Header = TDMusIoSegmentTrackHeader;
  2313.   PDMus_Io_Segment_Item_Header = PDMusIoSegmentItemHeader;
  2314.   TDMus_Io_Segment_Item_Header = TDMusIoSegmentItemHeader;
  2315.   PDMus_Io_Scripttrack_Eventheader = PDMusIoScriptTrackEventHeader;
  2316.   TDMus_Io_Scripttrack_Eventheader = TDMusIoScriptTrackEventHeader;
  2317.   PDMus_Io_Lyricstrack_Eventheader = PDMusIoLyricsTrackEventHeader;
  2318.   TDMus_Io_Lyricstrack_Eventheader = TDMusIoLyricsTrackEventHeader;
  2319.   PDMus_Io_Paramcontroltrack_Objectheader = PDMusIoParamControlTrackObjectHeader;
  2320.   TDMus_Io_Paramcontroltrack_Objectheader = TDMusIoParamControlTrackObjectHeader;
  2321.   PDMus_Io_Paramcontroltrack_Paramheader = PDMusIoParamControlTrackParamHeader;
  2322.   TDMus_Io_Paramcontroltrack_Paramheader = TDMusIoParamControlTrackParamHeader;
  2323.   PDMus_Io_Paramcontroltrack_Curveinfo = PDMusIoParamControlTrackCurveInfo;
  2324.   TDMus_Io_Paramcontroltrack_Curveinfo = TDMusIoParamControlTrackCurveInfo;
  2325.   PDMus_Eventheader = PDMusEventHeader;
  2326.   TDMus_Eventheader = TDMusEventHeader;
  2327.   PDSound_Io_Dsbufferdesc = PDSoundIoDSBufferDesc;
  2328.   TDSound_Io_Dsbufferdesc = TDSoundIoDSBufferDesc;
  2329.   PDSound_Io_Dsbusid = PDSoundIoDSBusID;
  2330.   TDSound_Io_Dsbusid = TDSoundIoDSBusID;
  2331.   PDSound_Io_3d = PDSoundIo3D;
  2332.   TDSound_Io_3d = TDSoundIo3D;
  2333.   PDSound_Io_Dxdmo_Header = PDSoundIoDXDMOHeader;
  2334.   TDSound_Io_Dxdmo_Header = TDSoundIoDXDMOHeader;
  2335.   PDSound_Io_Dxdmo_Data = PDSoundIoDXDMOData;
  2336.   TDSound_Io_Dxdmo_Data = TDSoundIoDXDMOData;
  2337. implementation
  2338. // #define MAKE_DMHRESULTSUCCESS(code)     MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
  2339. function MAKE_DMHRESULTSUCCESS(Code: DWord): DWord;
  2340. begin
  2341.   Result:= (0 shl 31) or (FACILITY_DIRECTMUSIC shl 16) or (DMUS_ERRBASE + Code);
  2342. end;
  2343. // #define MAKE_DMHRESULTERROR(code)       MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
  2344. function MAKE_DMHRESULTERROR(Code: DWord): DWord;
  2345. begin
  2346.   Result:= DWORD((1 shl 31) or (FACILITY_DIRECTMUSIC shl 16)) or (DMUS_ERRBASE + Code);
  2347. end;
  2348. // #define DSBUSID_IS_SPKR_LOC(id) ( ((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC) )
  2349. function DSBUSID_IS_SPKR_LOC(id: Integer): Boolean;
  2350. begin
  2351.   Result := (id >= DSBUSID_FIRST_SPKR_LOC) and (id <= DSBUSID_LAST_SPKR_LOC);
  2352. end;
  2353. function QWORD_ALIGN(x: DWORD): DWORD;
  2354. begin
  2355.   Result := (x + 7) and (not 7); //  (((x) + 7) & ~7)
  2356. end;
  2357. function DMUS_EVENT_SIZE(cb: DWORD): DWORD;
  2358. begin
  2359.   Result := QWORD_ALIGN(SizeOf(TDMusEventHeader) + cb); // QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
  2360. end;
  2361. end.