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