Home | History | Annotate | Download | only in lib_src
      1  /*
      2 
      3      dls.h
      4 
      5      Description:
      6 
      7      Interface defines and structures for the Instrument Collection Form
      8      RIFF DLS.
      9 
     10      Written by Sonic Foundry 1996.  Released for public use.
     11 
     12  */
     13 
     14  #ifndef _INC_DLS
     15  #define _INC_DLS
     16 
     17  /*
     18 
     19     Layout of an instrument collection:
     20 
     21 
     22     RIFF [] 'DLS ' [colh,INSTLIST,WAVEPOOL,INFOLIST]
     23 
     24     INSTLIST
     25     LIST [] 'lins'
     26                   LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST]
     27                   LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST]
     28                   LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST]
     29 
     30     RGNLIST
     31     LIST [] 'lrgn'
     32                   LIST [] 'rgn '  [rgnh,wsmp,wlnk,ARTLIST]
     33                   LIST [] 'rgn '  [rgnh,wsmp,wlnk,ARTLIST]
     34                   LIST [] 'rgn '  [rgnh,wsmp,wlnk,ARTLIST]
     35 
     36     ARTLIST
     37     LIST [] 'lart'
     38             'art1' level 1 Articulation connection graph
     39             'art2' level 2 Articulation connection graph
     40             '3rd1' Possible 3rd party articulation structure 1
     41             '3rd2' Possible 3rd party articulation structure 2 .... and so on
     42 
     43     WAVEPOOL
     44     ptbl [] [pool table]
     45     LIST [] 'wvpl'
     46                   [path],
     47                   [path],
     48                   LIST [] 'wave',RIFFWAVE
     49                   LIST [] 'wave',RIFFWAVE
     50                   LIST [] 'wave',RIFFWAVE
     51                   LIST [] 'wave',RIFFWAVE
     52                   LIST [] 'wave',RIFFWAVE
     53 
     54     INFOLIST
     55     LIST [] 'INFO'
     56                   'icmt' 'One of those crazy comments.'
     57                   'icop' 'Copyright (C) 1996 Sonic Foundry'
     58 
     59  */
     60 
     61 
     62  /*
     63     FOURCC's used in the DLS file
     64  */
     65 /* shree */
     66 //#define FAR
     67 
     68 /* shree
     69 
     70  #define FOURCC_DLS   mmioFOURCC('D','L','S',' ')
     71  #define FOURCC_COLH  mmioFOURCC('c','o','l','h')
     72  #define FOURCC_WVPL  mmioFOURCC('w','v','p','l')
     73  #define FOURCC_PTBL  mmioFOURCC('p','t','b','l')
     74  #define FOURCC_PATH  mmioFOURCC('p','a','t','h')
     75  #define FOURCC_wave  mmioFOURCC('w','a','v','e')
     76  #define FOURCC_LINS  mmioFOURCC('l','i','n','s')
     77  #define FOURCC_INS   mmioFOURCC('i','n','s',' ')
     78  #define FOURCC_INSH  mmioFOURCC('i','n','s','h')
     79  #define FOURCC_LRGN  mmioFOURCC('l','r','g','n')
     80  #define FOURCC_RGN   mmioFOURCC('r','g','n',' ')
     81  #define FOURCC_RGNH  mmioFOURCC('r','g','n','h')
     82  #define FOURCC_LART  mmioFOURCC('l','a','r','t')
     83  #define FOURCC_ART1  mmioFOURCC('a','r','t','1')
     84  #define FOURCC_WLNK  mmioFOURCC('w','l','n','k')
     85  #define FOURCC_WSMP  mmioFOURCC('w','s','m','p')
     86  #define FOURCC_VERS  mmioFOURCC('v','e','r','s')
     87 */
     88  /*
     89     Articulation connection graph definitions
     90  */
     91 
     92  /* Generic Sources */
     93  #define CONN_SRC_NONE              0x0000
     94  #define CONN_SRC_LFO               0x0001
     95  #define CONN_SRC_KEYONVELOCITY     0x0002
     96  #define CONN_SRC_KEYNUMBER         0x0003
     97  #define CONN_SRC_EG1               0x0004
     98  #define CONN_SRC_EG2               0x0005
     99  #define CONN_SRC_PITCHWHEEL        0x0006
    100 
    101  /* Midi Controllers 0-127 */
    102  #define CONN_SRC_CC1               0x0081
    103  #define CONN_SRC_CC7               0x0087
    104  #define CONN_SRC_CC10              0x008a
    105  #define CONN_SRC_CC11              0x008b
    106 
    107  /* Registered Parameter Numbers */
    108  #define CONN_SRC_RPN0             0x0100
    109  #define CONN_SRC_RPN1             0x0101
    110  #define CONN_SRC_RPN2             0x0102
    111 
    112  /* Generic Destinations */
    113  #define CONN_DST_NONE              0x0000
    114  #define CONN_DST_ATTENUATION       0x0001
    115  #define CONN_DST_RESERVED          0x0002
    116  #define CONN_DST_PITCH             0x0003
    117  #define CONN_DST_PAN               0x0004
    118 
    119  /* LFO Destinations */
    120  #define CONN_DST_LFO_FREQUENCY     0x0104
    121  #define CONN_DST_LFO_STARTDELAY    0x0105
    122 
    123  /* EG1 Destinations */
    124  #define CONN_DST_EG1_ATTACKTIME    0x0206
    125  #define CONN_DST_EG1_DECAYTIME     0x0207
    126  #define CONN_DST_EG1_RESERVED      0x0208
    127  #define CONN_DST_EG1_RELEASETIME   0x0209
    128  #define CONN_DST_EG1_SUSTAINLEVEL  0x020a
    129 
    130  /* EG2 Destinations */
    131  #define CONN_DST_EG2_ATTACKTIME    0x030a
    132  #define CONN_DST_EG2_DECAYTIME     0x030b
    133  #define CONN_DST_EG2_RESERVED      0x030c
    134  #define CONN_DST_EG2_RELEASETIME   0x030d
    135  #define CONN_DST_EG2_SUSTAINLEVEL  0x030e
    136 
    137  #define CONN_TRN_NONE              0x0000
    138  #define CONN_TRN_CONCAVE           0x0001
    139 
    140  typedef struct _DLSVERSION {
    141    DWORD    dwVersionMS;
    142    DWORD    dwVersionLS;
    143  }DLSVERSION, FAR *LPDLSVERSION;
    144 
    145 
    146  typedef struct _CONNECTION {
    147    USHORT   usSource;
    148    USHORT   usControl;
    149    USHORT   usDestination;
    150    USHORT   usTransform;
    151    LONG     lScale;
    152    }CONNECTION, FAR *LPCONNECTION;
    153 
    154 
    155  /* Level 1 Articulation Data */
    156 
    157  typedef struct _CONNECTIONLIST {
    158    ULONG    cbSize;            /* size of the connection list structure */
    159    ULONG    cConnections;      /* count of connections in the list */
    160    } CONNECTIONLIST, FAR *LPCONNECTIONLIST;
    161 
    162 
    163 
    164  /*
    165     Generic type defines for regions and instruments
    166  */
    167 
    168  typedef struct _RGNRANGE {
    169    USHORT usLow;
    170    USHORT usHigh;
    171  }RGNRANGE, FAR * LPRGNRANGE;
    172 
    173  #define F_INSTRUMENT_DRUMS      0x80000000
    174 
    175  typedef struct _MIDILOCALE {
    176    ULONG ulBank;
    177    ULONG ulInstrument;
    178  }MIDILOCALE, FAR *LPMIDILOCALE;
    179 
    180  /*
    181     Header structures found in an DLS file for collection, instruments, and
    182     regions.
    183  */
    184 
    185  #define F_RGN_OPTION_SELFNONEXCLUSIVE  0x0001
    186 
    187  typedef struct _RGNHEADER {
    188    RGNRANGE RangeKey;            /* Key range */
    189    RGNRANGE RangeVelocity;       /* Velocity Range */
    190    USHORT   fusOptions;          /* Synthesis options for this range */
    191    USHORT   usKeyGroup;          /* Key grouping for non simultaneous play
    192                                     0 = no group, 1 up is group
    193                                     for Level 1 only groups 1-15 are allowed */
    194  }RGNHEADER, FAR *LPRGNHEADER;
    195 
    196  typedef struct _INSTHEADER {
    197    ULONG      cRegions;          /* Count of regions in this instrument */
    198    MIDILOCALE Locale;            /* Intended MIDI locale of this instrument */
    199  }INSTHEADER, FAR *LPINSTHEADER;
    200 
    201  typedef struct _DLSHEADER {
    202    ULONG      cInstruments;      /* Count of instruments in the collection */
    203  }DLSHEADER, FAR *LPDLSHEADER;
    204 
    205  /*
    206     definitions for the Wave link structure
    207  */
    208 
    209  /*****  For level 1 only WAVELINK_CHANNEL_MONO is valid  ****
    210    ulChannel allows for up to 32 channels of audio with each bit position
    211    specifiying a channel of playback */
    212 
    213  #define WAVELINK_CHANNEL_LEFT    0x0001
    214  #define WAVELINK_CHANNEL_RIGHT   0x0002
    215 
    216  #define F_WAVELINK_PHASE_MASTER  0x0001
    217 
    218  typedef struct _WAVELINK { /* any paths or links are stored right after struct */
    219    USHORT   fusOptions;     /* options flags for this wave */
    220    USHORT   usPhaseGroup;   /* Phase grouping for locking channels */
    221    ULONG    ulChannel;      /* channel placement */
    222    ULONG    ulTableIndex;   /* index into the wave pool table, 0 based */
    223  }WAVELINK, FAR *LPWAVELINK;
    224 
    225  #define POOL_CUE_NULL  0xffffffff
    226 
    227  typedef struct _POOLCUE {
    228  //  ULONG    ulEntryIndex;   /* Index entry in the list */
    229    ULONG    ulOffset;       /* Offset to the entry in the list */
    230  }POOLCUE, FAR *LPPOOLCUE;
    231 
    232  typedef struct _POOLTABLE {
    233    ULONG    cbSize;            /* size of the pool table structure */
    234    ULONG    cCues;             /* count of cues in the list */
    235    } POOLTABLE, FAR *LPPOOLTABLE;
    236 
    237  /*
    238     Structures for the "wsmp" chunk
    239  */
    240 
    241  #define F_WSMP_NO_TRUNCATION     0x0001
    242  #define F_WSMP_NO_COMPRESSION    0x0002
    243 
    244 
    245  typedef struct _rwsmp {
    246    ULONG   cbSize;
    247    USHORT  usUnityNote;         /* MIDI Unity Playback Note */
    248    SHORT   sFineTune;           /* Fine Tune in log tuning */
    249    LONG    lAttenuation;        /* Overall Attenuation to be applied to data */
    250    ULONG   fulOptions;          /* Flag options */
    251    ULONG   cSampleLoops;        /* Count of Sample loops, 0 loops is one shot */
    252    } WSMPL, FAR *LPWSMPL;
    253 
    254 
    255  /* This loop type is a normal forward playing loop which is continually
    256     played until the envelope reaches an off threshold in the release
    257     portion of the volume envelope */
    258 
    259  #define WLOOP_TYPE_FORWARD   0
    260 
    261  typedef struct _rloop {
    262    ULONG cbSize;
    263    ULONG ulType;              /* Loop Type */
    264    ULONG ulStart;             /* Start of loop in samples */
    265    ULONG ulLength;            /* Length of loop in samples */
    266  } WLOOP, FAR *LPWLOOP;
    267 
    268  #endif /* _INC_DLS */
    269