dmdls.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /************************************************************************
  2. *                                                                       *
  3. *   dmdls.h -- DLS download definitions for DirectMusic API's           *
  4. *                                                                       *
  5. *   Copyright (c) 1998-1999 Microsoft Corporation                       *
  6. *                                                                       *
  7. ************************************************************************/
  8. #ifndef _DMDLS_
  9. #define _DMDLS_
  10. #include "dls1.h"
  11. typedef long PCENT;     /* Pitch cents */
  12. typedef long GCENT;     /* Gain cents */
  13. typedef long TCENT;     /* Time cents */
  14. typedef long PERCENT;   /* Per.. cent! */
  15. typedef LONGLONG REFERENCE_TIME;
  16. typedef REFERENCE_TIME *LPREFERENCE_TIME;
  17. #ifndef MAKE_FOURCC
  18. #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              
  19.                 ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   
  20.                 ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  21. typedef DWORD           FOURCC;         /* a four character code */
  22. #endif
  23. typedef struct _DMUS_DOWNLOADINFO
  24. {
  25.     DWORD dwDLType;                     /* Instrument or Wave */
  26.     DWORD dwDLId;                       /* Unique identifier to tag this download. */
  27.     DWORD dwNumOffsetTableEntries;      /* Number of index in the offset address table. */
  28.     DWORD cbSize;                       /* Total size of this memory chunk. */
  29. } DMUS_DOWNLOADINFO;
  30. #define DMUS_DOWNLOADINFO_INSTRUMENT        1
  31. #define DMUS_DOWNLOADINFO_WAVE              2
  32. #define DMUS_DOWNLOADINFO_INSTRUMENT2       3   /* New version for better DLS2 support. */
  33. /* Support for oneshot and streaming wave data 
  34.  */
  35. #define DMUS_DOWNLOADINFO_WAVEARTICULATION  4   /* Wave articulation data */
  36. #define DMUS_DOWNLOADINFO_STREAMINGWAVE     5   /* One chunk of a streaming */
  37. #define DMUS_DOWNLOADINFO_ONESHOTWAVE       6
  38. #define DMUS_DEFAULT_SIZE_OFFSETTABLE   1
  39. /* Flags for DMUS_INSTRUMENT's ulFlags member */
  40.  
  41. #define DMUS_INSTRUMENT_GM_INSTRUMENT   (1 << 0)
  42. typedef struct _DMUS_OFFSETTABLE
  43. {
  44.     ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
  45. } DMUS_OFFSETTABLE;
  46. typedef struct _DMUS_INSTRUMENT
  47. {
  48.     ULONG           ulPatch;
  49.     ULONG           ulFirstRegionIdx;             
  50.     ULONG           ulGlobalArtIdx;         /* If zero the instrument does not have an articulation */
  51.     ULONG           ulFirstExtCkIdx;        /* If zero no 3rd party entenstion chunks associated with the instrument */
  52.     ULONG           ulCopyrightIdx;         /* If zero no Copyright information associated with the instrument */
  53.     ULONG           ulFlags;                        
  54. } DMUS_INSTRUMENT;
  55. typedef struct _DMUS_REGION
  56. {
  57.     RGNRANGE        RangeKey;
  58.     RGNRANGE        RangeVelocity;
  59.     USHORT          fusOptions;
  60.     USHORT          usKeyGroup;
  61.     ULONG           ulRegionArtIdx;         /* If zero the region does not have an articulation */
  62.     ULONG           ulNextRegionIdx;        /* If zero no more regions */
  63.     ULONG           ulFirstExtCkIdx;        /* If zero no 3rd party entenstion chunks associated with the region */
  64.     WAVELINK        WaveLink;
  65.     WSMPL           WSMP;                   /*  If WSMP.cSampleLoops > 1 then a WLOOP is included */
  66.     WLOOP           WLOOP[1];
  67. } DMUS_REGION;
  68. typedef struct _DMUS_LFOPARAMS
  69. {
  70.     PCENT       pcFrequency;
  71.     TCENT       tcDelay;
  72.     GCENT       gcVolumeScale;
  73.     PCENT       pcPitchScale;
  74.     GCENT       gcMWToVolume;
  75.     PCENT       pcMWToPitch;
  76. } DMUS_LFOPARAMS;
  77. typedef struct _DMUS_VEGPARAMS
  78. {
  79.     TCENT       tcAttack;
  80.     TCENT       tcDecay;
  81.     PERCENT     ptSustain;
  82.     TCENT       tcRelease;
  83.     TCENT       tcVel2Attack;
  84.     TCENT       tcKey2Decay;
  85. } DMUS_VEGPARAMS;
  86. typedef struct _DMUS_PEGPARAMS
  87. {
  88.     TCENT       tcAttack;
  89.     TCENT       tcDecay;
  90.     PERCENT     ptSustain;
  91.     TCENT       tcRelease;
  92.     TCENT       tcVel2Attack;
  93.     TCENT       tcKey2Decay;
  94.     PCENT       pcRange;
  95. } DMUS_PEGPARAMS;
  96. typedef struct _DMUS_MSCPARAMS
  97. {
  98.     PERCENT     ptDefaultPan;
  99. } DMUS_MSCPARAMS;
  100. typedef struct _DMUS_ARTICPARAMS
  101. {
  102.     DMUS_LFOPARAMS   LFO;
  103.     DMUS_VEGPARAMS   VolEG;
  104.     DMUS_PEGPARAMS   PitchEG;
  105.     DMUS_MSCPARAMS   Misc;
  106. } DMUS_ARTICPARAMS;
  107. typedef struct _DMUS_ARTICULATION           /* Articulation chunk for DMUS_DOWNLOADINFO_INSTRUMENT format. */
  108. {
  109.     ULONG           ulArt1Idx;              /* DLS Level 1 articulation chunk */
  110.     ULONG           ulFirstExtCkIdx;        /* 3rd party extenstion chunks associated with the articulation */
  111. } DMUS_ARTICULATION;
  112. typedef struct _DMUS_ARTICULATION2          /* Articulation chunk for DMUS_DOWNLOADINFO_INSTRUMENT2 format. */
  113. {
  114.     ULONG           ulArtIdx;               /* DLS Level 1/2 articulation chunk */
  115.     ULONG           ulFirstExtCkIdx;        /* 3rd party extenstion chunks associated with the articulation */
  116.     ULONG           ulNextArtIdx;           /* Additional articulation chunks */
  117. } DMUS_ARTICULATION2;
  118. #define DMUS_MIN_DATA_SIZE 4       
  119. /*  The actual number is determined by cbSize of struct _DMUS_EXTENSIONCHUNK */
  120. typedef struct _DMUS_EXTENSIONCHUNK
  121. {
  122.     ULONG           cbSize;                      /*  Size of extension chunk  */
  123.     ULONG           ulNextExtCkIdx;              /*  If zero no more 3rd party entenstion chunks */
  124.     FOURCC          ExtCkID;                                      
  125.     BYTE            byExtCk[DMUS_MIN_DATA_SIZE]; /*  The actual number that follows is determined by cbSize */
  126. } DMUS_EXTENSIONCHUNK;
  127. /*  The actual number is determined by cbSize of struct _DMUS_COPYRIGHT */
  128. typedef struct _DMUS_COPYRIGHT
  129. {
  130.     ULONG           cbSize;                             /*  Size of copyright information */
  131.     BYTE            byCopyright[DMUS_MIN_DATA_SIZE];    /*  The actual number that follows is determined by cbSize */
  132. } DMUS_COPYRIGHT;
  133. typedef struct _DMUS_WAVEDATA
  134. {
  135.     ULONG           cbSize;
  136.     BYTE            byData[DMUS_MIN_DATA_SIZE]; 
  137. } DMUS_WAVEDATA;
  138. typedef struct _DMUS_WAVE
  139. {
  140.     ULONG           ulFirstExtCkIdx;    /* If zero no 3rd party entenstion chunks associated with the wave */
  141.     ULONG           ulCopyrightIdx;     /* If zero no Copyright information associated with the wave */
  142.     ULONG           ulWaveDataIdx;      /* Location of actual wave data. */
  143.     WAVEFORMATEX    WaveformatEx;       
  144. } DMUS_WAVE;
  145. typedef struct _DMUS_NOTERANGE *LPDMUS_NOTERANGE;
  146. typedef struct _DMUS_NOTERANGE
  147. {
  148.     DWORD           dwLowNote;  /* Sets the low note for the range of MIDI note events to which the instrument responds.*/
  149.     DWORD           dwHighNote; /* Sets the high note for the range of MIDI note events to which the instrument responds.*/
  150. } DMUS_NOTERANGE;
  151. typedef struct _DMUS_WAVEARTDL
  152. {
  153.     ULONG               ulDownloadIdIdx;    /* Download ID's of each buffer */
  154.     ULONG               ulBus;              /* Playback bus */
  155.     ULONG               ulBuffers;          /* Buffers */
  156.     ULONG               ulMasterDLId;       /* Download ID of master voice of slave group */
  157.     USHORT              usOptions;          /* Same as DLS2 region options */
  158. }   DMUS_WAVEARTDL,
  159.     *LPDMUS_WAVEARTDL;
  160. typedef struct _DMUS_WAVEDL
  161. {
  162.     ULONG               cbWaveData;         /* Bytes of wave data */
  163. }   DMUS_WAVEDL,
  164.     *LPDMUS_WAVEDL;
  165. #endif