1 /* Defines and Structures for Instrument Collection Form RIFF DLS1
2  *
3  * Copyright (C) 2003-2004 Rok Mandeljc
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19 
20 #ifndef __WINE_INCLUDE_DLS1_H
21 #define __WINE_INCLUDE_DLS1_H
22 
23 /*****************************************************************************
24  * FOURCCs
25  */
26 #define FOURCC_DLS   mmioFOURCC('D','L','S',' ')
27 #define FOURCC_DLID  mmioFOURCC('d','l','i','d')
28 #define FOURCC_COLH  mmioFOURCC('c','o','l','h')
29 #define FOURCC_WVPL  mmioFOURCC('w','v','p','l')
30 #define FOURCC_PTBL  mmioFOURCC('p','t','b','l')
31 #define FOURCC_PATH  mmioFOURCC('p','a','t','h')
32 #define FOURCC_wave  mmioFOURCC('w','a','v','e')
33 #define FOURCC_LINS  mmioFOURCC('l','i','n','s')
34 #define FOURCC_INS   mmioFOURCC('i','n','s',' ')
35 #define FOURCC_INSH  mmioFOURCC('i','n','s','h')
36 #define FOURCC_LRGN  mmioFOURCC('l','r','g','n')
37 #define FOURCC_RGN   mmioFOURCC('r','g','n',' ')
38 #define FOURCC_RGNH  mmioFOURCC('r','g','n','h')
39 #define FOURCC_LART  mmioFOURCC('l','a','r','t')
40 #define FOURCC_ART1  mmioFOURCC('a','r','t','1')
41 #define FOURCC_WLNK  mmioFOURCC('w','l','n','k')
42 #define FOURCC_WSMP  mmioFOURCC('w','s','m','p')
43 #define FOURCC_VERS  mmioFOURCC('v','e','r','s')
44 
45 /*****************************************************************************
46  * Flags
47  */
48 
49 #define CONN_DST_NONE             0x000
50 #define CONN_DST_ATTENUATION      0x001
51 #define CONN_DST_PITCH            0x003
52 #define CONN_DST_PAN              0x004
53 
54 #define CONN_DST_LFO_FREQUENCY    0x104
55 #define CONN_DST_LFO_STARTDELAY   0x105
56 
57 #define CONN_DST_EG1_ATTACKTIME   0x206
58 #define CONN_DST_EG1_DECAYTIME    0x207
59 #define CONN_DST_EG1_RELEASETIME  0x209
60 #define CONN_DST_EG1_SUSTAINLEVEL 0x20A
61 
62 #define CONN_DST_EG2_ATTACKTIME   0x30A
63 #define CONN_DST_EG2_DECAYTIME    0x30B
64 #define CONN_DST_EG2_RELEASETIME  0x30D
65 #define CONN_DST_EG2_SUSTAINLEVEL 0x30E
66 
67 #define CONN_SRC_NONE             0x000
68 #define CONN_SRC_LFO              0x001
69 #define CONN_SRC_KEYONVELOCITY    0x002
70 #define CONN_SRC_KEYNUMBER        0x003
71 #define CONN_SRC_EG1              0x004
72 #define CONN_SRC_EG2              0x005
73 #define CONN_SRC_PITCHWHEEL       0x006
74 
75 #define CONN_SRC_CC1              0x081
76 #define CONN_SRC_CC7              0x087
77 #define CONN_SRC_CC10             0x08A
78 #define CONN_SRC_CC11             0x08B
79 
80 #define CONN_TRN_NONE             0x000
81 #define CONN_TRN_CONCAVE          0x001
82 
83 #define F_INSTRUMENT_DRUMS 0x80000000
84 
85 #define F_RGN_OPTION_SELFNONEXCLUSIVE 0x1
86 
87 #define F_WAVELINK_PHASE_MASTER 0x1
88 
89 #define F_WSMP_NO_TRUNCATION  0x1
90 #define F_WSMP_NO_COMPRESSION 0x2
91 
92 #define POOL_CUE_NULL 0xFFFFFFFF
93 
94 #define WAVELINK_CHANNEL_LEFT  0x1
95 #define WAVELINK_CHANNEL_RIGHT 0x2
96 
97 #define WLOOP_TYPE_FORWARD 0x0
98 
99 /*****************************************************************************
100  * Structures
101  */
102 /* typedef definitions */
103 typedef struct _DLSID          DLSID,          *LPDLSID;
104 typedef struct _DLSVERSION     DLSVERSION,     *LPDLSVERSION;
105 typedef struct _CONNECTION     CONNECTION,     *LPCONNECTION;
106 typedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST;
107 typedef struct _RGNRANGE       RGNRANGE,       *LPRGNRANGE;
108 typedef struct _MIDILOCALE     MIDILOCALE,     *LPMIDILOCALE;
109 typedef struct _RGNHEADER      RGNHEADER,      *LPRGNHEADER;
110 typedef struct _INSTHEADER     INSTHEADER,     *LPINSTHEADER;
111 typedef struct _DLSHEADER      DLSHEADER,      *LPDLSHEADER;
112 typedef struct _WAVELINK       WAVELINK,       *LPWAVELINK;
113 typedef struct _POOLCUE        POOLCUE,        *LPPOOLCUE;
114 typedef struct _POOLTABLE      POOLTABLE,      *LPPOOLTABLE;
115 typedef struct _rwsmp          WSMPL,          *LPWSMPL;
116 typedef struct _rloop          WLOOP,          *LPWLOOP;
117 
118 /* actual structures */
119 struct _DLSID {
120 	ULONG  ulData1;
121 	USHORT usData2;
122 	USHORT usData3;
123 	BYTE   abData4[8];
124 };
125 
126 struct _DLSVERSION {
127 	DWORD dwVersionMS;
128 	DWORD dwVersionLS;
129 };
130 
131 struct _CONNECTION {
132 	USHORT usSource;
133 	USHORT usControl;
134 	USHORT usDestination;
135 	USHORT usTransform;
136 	LONG   lScale;
137 };
138 
139 struct _CONNECTIONLIST {
140 	ULONG cbSize;
141 	ULONG cConnections;
142 };
143 
144 struct _RGNRANGE {
145 	USHORT usLow;
146 	USHORT usHigh;
147 };
148 
149 struct _MIDILOCALE {
150 	ULONG ulBank;
151 	ULONG ulInstrument;
152 };
153 
154 struct _RGNHEADER {
155 	RGNRANGE RangeKey;
156 	RGNRANGE RangeVelocity;
157 	USHORT   fusOptions;
158 	USHORT   usKeyGroup;
159 };
160 
161 struct _INSTHEADER {
162 	ULONG      cRegions;
163 	MIDILOCALE Locale;
164 };
165 
166 struct _DLSHEADER {
167 	ULONG cInstruments;
168 };
169 
170 struct _WAVELINK {
171 	USHORT fusOptions;
172 	USHORT usPhaseGroup;
173 	ULONG  ulChannel;
174 	ULONG  ulTableIndex;
175 };
176 
177 struct _POOLCUE {
178 	ULONG ulOffset;
179 };
180 
181 struct _POOLTABLE {
182 	ULONG cbSize;
183 	ULONG cCues;
184 };
185 
186 struct _rwsmp {
187 	ULONG  cbSize;
188 	USHORT usUnityNote;
189 	SHORT  sFineTune;
190 	LONG   lAttenuation;
191 	ULONG  fulOptions;
192 	ULONG  cSampleLoops;
193 };
194 
195 struct _rloop {
196 	ULONG cbSize;
197 	ULONG ulType;
198 	ULONG ulStart;
199 	ULONG ulLength;
200 };
201 
202 #endif /* __WINE_INCLUDE_DLS1_H */
203