home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / audio / idfedit / oldidf.h < prev    next >
Text File  |  1997-10-05  |  13KB  |  422 lines

  1. //************************************************************************
  2. //**
  3. //**  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  4. //**  ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
  5. //**  TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR
  6. //**  A PARTICULAR PURPOSE.
  7. //**
  8. //**  Copyright (C) 1993 - 1997 Microsoft Corporation. All Rights Reserved.
  9. //**
  10. //**  IDF.h
  11. //**
  12. //**  DESCRIPTION:
  13. //**     This file contains the format of the .IDF files.
  14. //**
  15. //**  HISTORY:
  16. //**     04/29/93       created.
  17. //**     07/04/93       added UNICODE for displayable strings.
  18. //**     09/04/93       added keymaps.
  19. //**     09/05/93       added ID's for channel types.
  20. //**
  21. //************************************************************************
  22.  
  23. #if 0
  24.  
  25. /*
  26. @doc  EXTERNAL SDK
  27.  
  28. @types   IDFHEADER |
  29.    This is the format of the "hdr " chunk in a Microsoft IDF file.
  30.    This will be the first subchunk of a "MMAP" list chunk.  This will 
  31.    provide information on the IDF itself; what version, who created it,
  32.    and a unique ASCII ID for the instrument.
  33.  
  34. @field   DWORD | cbStruct |
  35.    This is the inclusive size of the header structure.
  36.  
  37. @field   DWORD | dwVersion |
  38.    This is the version of the IDF file.
  39.    under.
  40.  
  41. @field   DWORD | dwCreator |
  42.    This is the creator ID for the IDF.
  43.  
  44. @field   DWORD | cbInstID |
  45.    This is the size of the unique instrument identifier including the NULL.
  46.  
  47. @field   BYTE | abInstID[] |
  48.    This is the actual ASCII bytes of the unique instrument id. This _IS_ 
  49.    NULL terminated.  There is no UNICODE version of this since this will
  50.    only be used internally and not displayed to the user.
  51.  
  52. @othertype  IDFHEADER * | PIDFHEADER |
  53.    A memory model dependant pointer to the structure.
  54.  
  55. @othertype  IDFHEADER FAR* | LPIDFHEADER |
  56.    A far pointer to the structure.
  57. */
  58.  
  59. typedef struct tag_IDFHEADER
  60. {
  61.    DWORD cbStruct;
  62.  
  63.    DWORD dwVersion;
  64.    DWORD dwCreator;
  65.  
  66.    DWORD cbInstID;
  67.    BYTE  abInstID[1];
  68. } IDFHEADER, *PIDFHEADER, FAR *LPIDFHEADER;
  69.  
  70.  
  71. /*
  72. @doc  EXTERNAL SDK
  73.  
  74. @types   IDFINSTINFO |
  75.    This is the format of the "inst" chunk in a Microsoft IDF file.
  76.    This chunk will contain information on the instrument, e.g. who
  77.    manufactured it, the name of the instrument, it's manufacturer and
  78.    product id's and a revision number.
  79.  
  80. @field   DWORD | cbStruct |
  81.    This is the inclusive size of the instrument information structure.
  82.  
  83. @field   DWORD | dwManufactID |
  84.    Manufacturer's ID.
  85.  
  86. @field   DWORD | dwProductID |
  87.    Product's ID.
  88.  
  89. @field   DWORD | dwRevision |
  90.    Revision of the product.
  91.  
  92. @field   DWORD | cbManufactASCII |
  93.    Length of the ASCII version of the manufacturuers name.
  94.  
  95. @field   DWORD | cbManufactUNICODE |
  96.    Length of the UNICODE version of the manufacturuers name.
  97.  
  98. @field   DWORD | cbProductASCII |
  99.    Length of the ASCII version of the product name.
  100.  
  101. @field   DWORD | cbProductUNICODE |
  102.    Length of the UNICODE version of the product name.
  103.  
  104. @field   BYTE | abData[] |
  105.    Contains the ASCII and UNICODE strings for the manufacturer and product
  106.    names.  NOTE that all strings are separated by a NULL and the NULL IS
  107.    counted in the string lengths.
  108.  
  109. @othertype  IDFINSTINFO * | PIDFINSTINFO |
  110.    A memory model dependant pointer to the structure.
  111.  
  112. @othertype  IDFINSTINFO FAR * | LPIDFINSTINFO |
  113.    A far pointer to the structure.
  114.  
  115. @comm The idea is that the cbManufactXXXXX and cbProductXXXXX will be the
  116.       offsets into the bData array of bytes and it will contain a complete
  117.       string that you can strcpy out.  That is why the NULL is included in
  118.       the byte count and in the actual data.
  119. */
  120.  
  121. typedef struct tag_IDFINSTINFO
  122. {
  123.    DWORD cbStruct;
  124.  
  125.    DWORD dwManufactID;
  126.    DWORD dwProductID;
  127.    DWORD dwRevision;
  128.  
  129.    DWORD cbManufactASCII;
  130.    DWORD cbManufactUNICODE;
  131.    DWORD cbProductASCII;
  132.    DWORD cbProductUNICODE;
  133.  
  134.    BYTE  abData[1];
  135. } IDFINSTINFO, FAR *LPIDFINSTINFO;
  136.  
  137. /*
  138. @doc  EXTERNAL SDK
  139.  
  140. @types   IDFINSTCAPS |
  141.    This is the format of the "caps" chunk in a Microsoft IDF file.
  142.    This chunk will contain information on the MIDI capabilities of
  143.    the device. e.g. basic channel of the instrument, number of channels
  144.    that the instrument has available. the polyphony of the instrument, 
  145.    whether or not it supports General MIDI, etc....
  146.  
  147. @field   DWORD | cbStruct |
  148.    This is the size of the capabilities structure.
  149.  
  150. @field   DWORD | fdwFlags |
  151.    Flags specifiying additional capabilities of an instrument.
  152.  
  153. @flag IDFINSTCAPS_F_GENERAL_MIDI |
  154.    Instrument supports General MIDI.
  155.  
  156. @flag IDFINSTCAPS_F_SYSTEMEXCLUSIVE |
  157.    Instrument supports system exclusive messages
  158.  
  159. @field   DWORD | dwBasicChannel |
  160.    The basic channel for the instrument.
  161.  
  162. @field   DWORD | cNumChannels |
  163.    Number of channels that the instrument supports to.
  164.  
  165. @field   DWORD | cInstrumentPolyphony |
  166.    The total polyphony for the instrument.
  167.  
  168. @field   DWORD | cChannelPolyphony |
  169.    The polyphony per channel.
  170.  
  171. @othertype  IDFINSTCAPS * | PIDFINSTCAPS |
  172.    A memory model dependant pointer to the structure.
  173.  
  174. @othertype  IDFINSTCAPS FAR * | LPIDFINSTCAPS |
  175.    A far pointer to the structure.
  176. */
  177.  
  178. typedef struct tag_IDFINSTCAPS
  179. {
  180.    DWORD cbStruct;
  181.    DWORD fdwFlags;
  182.    DWORD dwBasicChannel;
  183.    DWORD cNumChannels;
  184.    DWORD cInstrumentPolyphony;
  185.    DWORD cChannelPolyphony;
  186. } IDFINSTCAPS, *PIDFINSTCAPS, FAR *LPIDFINSTCAPS;
  187.  
  188. #define  IDFINSTCAPS_F_GENERAL_MIDI       0x00000001
  189. #define  IDFINSTCAPS_F_SYSTEMEXCLUSIVE    0x00000002
  190.  
  191. #endif
  192.  
  193. /*
  194. @doc  EXTERNAL SDK
  195.  
  196. @types   IDFCHNLHDR |
  197.    This is the format of the "chnl" chunk in a Microsoft IDF file.
  198.    This contains a description on what "type" a channel is, i.e. 
  199.    is it a General MIDI channel, a drum channel, etc... Directly 
  200.    following this header is the actual data on each channel.
  201.  
  202. @field   DWORD | cbStruct |
  203.    This is the size of the channel header structure.
  204.  
  205. @field   DWORD | fdwFlags |
  206.    Flags describing the channel type information.
  207.  
  208. @flag IDFCHNLHDR_F_GENERAL_MIDI |
  209.    If this flag is set then any channels that are not defined in the 
  210.    IDF are General MIDI channel types.  If this flag is _NOT_ set then
  211.    any channels that are not defined in the IDF are undefined and should 
  212.    NOT be used in mapping.
  213.  
  214. @field   DWORD | cNumChannels |
  215.    This is the number of channels that follows the header.
  216.  
  217. @othertype  IDFCHNLHDR * | PIDFCHNLHDR |
  218.    A memory model dependant pointer to the structure.
  219.  
  220. @othertype  IDFCHNLHDR FAR * | LPIDFCHNLHDR |
  221.    A far pointer to the structure.
  222. */
  223.  
  224.  
  225. typedef struct tag_IDFCHNLHDR
  226. {
  227.    DWORD cbStruct;
  228.  
  229.    DWORD cNumChannels;
  230.    DWORD fdwFlags;
  231. } IDFCHNLHDR, *PIDFCHNLHDR, FAR *LPIDFCHNLHDR;
  232.  
  233. #define  IDFCHNLHDR_F_GENERAL_MIDI     0x00000001
  234.  
  235.  
  236. /*
  237. @doc  EXTERNAL SDK
  238.  
  239. @types    IDFCHNLINFO |
  240.    This is the format of the actual channel information for Microsoft
  241.    authored IDF files. This is the Microsoft supported format for
  242.    channel information.
  243.  
  244. @field   DWORD | dwChannel |
  245.    This is the channel number that the structure defines.
  246.  
  247. @field   DWORD | fdwChannel |
  248.    Defines the possible types this channel can be.
  249.  
  250.    @flag    IDFCHNLINFO_F_GENERAL_CHANNEL |
  251.        Indicates that this channel may be a general channel.
  252.  
  253.    @flag    IDFCHNLINFO_F_DRUM_CHANNEL |
  254.        Indicates that this channel may be a drum channel.
  255.  
  256. @field   DWORD | cbGeneralInitData |
  257.     Specifies the length of the data which should be sent to initialize
  258.     the channel to a general channel. This data will be sent whenever the
  259.     channel is allocated as a general channel. If no initialization data
  260.     is desired, this field should be set to zero. If more than one channel
  261.     type is specified in the <f fdwChannel> field, initialization data
  262.     must be specified and this field may not be zero.
  263.  
  264. @field   DWORD | cbDrumInitData |
  265.     Specifies the length of the data which should be sent to initialize
  266.     the channel to a drum channel. This data will be sent whenever the
  267.     channel is allocated as a drum channel. If no initialization data
  268.     is desired, this field should be set to zero. If more than one channel
  269.     type is specified in the <f fdwChannel> field, initialization data
  270.     must be specified and this field may not be zero.
  271.  
  272.  
  273. @field    BYTE | abData[] |
  274.     This field contains the actual initialization data to set the channel
  275.     to general or drum. <f abData> contains first the initialization
  276.     sequence to set the channel to a general channel, followed by
  277.     the sequence to initialize the channel to a drum channel.
  278.     <f cbGeneralInitData> and <f cbDrumInitData> should indicate the lengths
  279.     of these sequences, byte aligned. However, the actual sequence should
  280.     be padded so that it is actually DWORD aligned (i.e. even multiple
  281.     of four bytes). <f cbStruct> should reflect the padded length of
  282.     the sequences.
  283.         
  284. @othertype  IDFCHNLINFO * | PIDFCHNLINFO |
  285.    A memory model dependant pointer to the structure.
  286.  
  287. @othertype  IDFCHNLINFO FAR * | LPIDFCHNLINFO |
  288.    A far pointer to the structure.
  289. */
  290.  
  291. typedef struct tag_IDFCHNLINFO
  292. {
  293.    DWORD cbStruct;
  294.  
  295.    DWORD dwChannel;
  296.    DWORD fdwChannel;
  297.  
  298.    DWORD cbGeneralInitData;
  299.    DWORD cbDrumInitData;
  300.  
  301.    BYTE  abData[];
  302.  
  303. } IDFCHNLINFO, *PIDFCHNLINFO, FAR *LPIDFCHNLINFO;
  304.  
  305.  
  306. //
  307. // Currently defined channel types.
  308. //
  309. #define  IDFCHNLINFO_F_GENERAL_CHANNEL      0x00000001
  310. #define  IDFCHNLINFO_F_DRUM_CHANNEL         0x00000002
  311.  
  312. #if 0
  313.  
  314. /*
  315. @doc  EXTERNAL SDK
  316.  
  317. @types   IDFPATCHMAPHDR |
  318.    This is the format of the "map " chunk in a Microsoft IDF file.
  319.    This chunk contains information on the patch map used for the 
  320.    instrument. Directly following this header is the actual mapping 
  321.    information for each patch.
  322.  
  323. @field   DWORD | cbStruct |
  324.    This is the size of the patch map header structure.
  325.  
  326. @field   BYTE | abPatchMap[128] |
  327.    This array contains the actual patch map. The incoming patch is
  328.    used to index the array; the array contents are the new patch value
  329.    and must be in the range 0x00-0x7F. Patch maps will only apply to
  330.    channels of type general. If the instrument needs a patch change
  331.    on a drum channel, it should be included in the initialization data
  332.    in the IDFCHANNELINFO.
  333.  
  334. @othertype  IDFPATCHMAPHDR * | PIDFPATCHMAPHDR |
  335.    A memory model dependant pointer to the structure.
  336.  
  337. @othertype  IDFPATCHMAPHDR FAR * | LPIDFPATCHMAPHDR |
  338.    A far pointer to the structure.
  339. */
  340.  
  341. typedef struct tag_IDFPATCHMAPHDR
  342. {
  343.    DWORD cbStruct;
  344.    BYTE  abPatchMap[128];
  345.            
  346. } IDFPATCHMAPHDR, *PIDFPATCHMAPHDR, FAR *LPIDFPATCHMAPHDR;
  347.  
  348. #endif // 0
  349.  
  350. /*
  351. @doc  EXTERNAL SDK
  352.  
  353. @types   IDFKEYHDR |
  354.    This is the format of the "key " chunk in a Microsoft IDF file.
  355.    This chunk contains information on the all of the key maps used 
  356.    for a given instrument. The information that is in this structure
  357.    pertains to all of the key maps for the instrument.  It contains
  358.    the total number of key maps for the instrument and whether or not
  359.    the key maps are General MIDI.
  360.  
  361. @field   DWORD | cbStruct |
  362.    This is the size of the key map header structure.
  363.  
  364. @field   DWORD | cNumKeyMaps |
  365.    This is the number of key maps that follow the header.
  366.  
  367. @field   DWORD | cbKeyMap |
  368.    This is the size of each key map that follows the header.   
  369.  
  370. @othertype  IDFPATCHMAPHDR * | PIDFPATCHMAPHDR |
  371.    A memory model dependant pointer to the structure.
  372.  
  373. @othertype  IDFPATCHMAPHDR FAR * | LPIDFPATCHMAPHDR |
  374.    A far pointer to the structure.
  375. */
  376.  
  377. typedef struct tag_IDFKEYHDR
  378. {
  379.    DWORD cbStruct;
  380.    DWORD cNumKeyMaps;
  381.    DWORD cbKeyMap;
  382. } IDFKEYHDR, *PIDFKEYHDR, FAR *LPIDFKEYHDR;
  383.  
  384. /*
  385. @doc  EXTERNAL SDK
  386.  
  387. @types   IDFKEY |
  388.    This is a keymap that follows the key map header. 
  389.  
  390. @field   DWORD | cbStruct |
  391.    This is the size of the key map header structure.
  392.  
  393. @field   DWORD | fdwKeyMapType |
  394.    This field specifies the channel type this key map is valid for.
  395.  
  396. @flag IDFKEY_F_GENERAL_CHANNEL      0x00000001
  397. @flag IDFKEY_F_DRUM_CHANNEL         0x00000002
  398.  
  399. @field   BYTE | abKeyMap[128] |
  400.     This field contains the actual key map. The incoming key number from
  401.     a note on or note off message is used to index this array; the array
  402.     contents are the new key value. If the high bit it set in the new
  403.     key value, then the note on or note off will be ignore; otherwise,
  404.     it will be transmitted with the new key value.
  405.     
  406. @othertype  IDFKEY * | PIDFKEY |
  407.    A memory model dependant pointer to the structure.
  408.  
  409. @othertype  IDFKEY FAR * | LPIDFKEY |
  410.    A far pointer to the structure.
  411. */
  412.  
  413. typedef struct tag_IDFKEY
  414. {
  415.    DWORD cbStruct;
  416.    DWORD fdwKeyMap;
  417.    BYTE  abKeyMap[128];
  418. } IDFKEY, *PIDFKEY, FAR *LPIDFKEY;
  419.  
  420. #define IDFKEY_F_GENERAL_CHANNEL      0x00000001L
  421. #define IDFKEY_F_DRUM_CHANNEL         0x00000002L
  422.