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 */
103typedef struct _DLSID          DLSID,          *LPDLSID;
104typedef struct _DLSVERSION     DLSVERSION,     *LPDLSVERSION;
105typedef struct _CONNECTION     CONNECTION,     *LPCONNECTION;
106typedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST;
107typedef struct _RGNRANGE       RGNRANGE,       *LPRGNRANGE;
108typedef struct _MIDILOCALE     MIDILOCALE,     *LPMIDILOCALE;
109typedef struct _RGNHEADER      RGNHEADER,      *LPRGNHEADER;
110typedef struct _INSTHEADER     INSTHEADER,     *LPINSTHEADER;
111typedef struct _DLSHEADER      DLSHEADER,      *LPDLSHEADER;
112typedef struct _WAVELINK       WAVELINK,       *LPWAVELINK;
113typedef struct _POOLCUE        POOLCUE,        *LPPOOLCUE;
114typedef struct _POOLTABLE      POOLTABLE,      *LPPOOLTABLE;
115typedef struct _rwsmp          WSMPL,          *LPWSMPL;
116typedef struct _rloop          WLOOP,          *LPWLOOP;
117
118/* actual structures */
119struct _DLSID {
120	ULONG  ulData1;
121	USHORT usData2;
122	USHORT usData3;
123	BYTE   abData4[8];
124};
125
126struct _DLSVERSION {
127	DWORD dwVersionMS;
128	DWORD dwVersionLS;
129};
130
131struct _CONNECTION {
132	USHORT usSource;
133	USHORT usControl;
134	USHORT usDestination;
135	USHORT usTransform;
136	LONG   lScale;
137};
138
139struct _CONNECTIONLIST {
140	ULONG cbSize;
141	ULONG cConnections;
142};
143
144struct _RGNRANGE {
145	USHORT usLow;
146	USHORT usHigh;
147};
148
149struct _MIDILOCALE {
150	ULONG ulBank;
151	ULONG ulInstrument;
152};
153
154struct _RGNHEADER {
155	RGNRANGE RangeKey;
156	RGNRANGE RangeVelocity;
157	USHORT   fusOptions;
158	USHORT   usKeyGroup;
159};
160
161struct _INSTHEADER {
162	ULONG      cRegions;
163	MIDILOCALE Locale;
164};
165
166struct _DLSHEADER {
167	ULONG cInstruments;
168};
169
170struct _WAVELINK {
171	USHORT fusOptions;
172	USHORT usPhaseGroup;
173	ULONG  ulChannel;
174	ULONG  ulTableIndex;
175};
176
177struct _POOLCUE {
178	ULONG ulOffset;
179};
180
181struct _POOLTABLE {
182	ULONG cbSize;
183	ULONG cCues;
184};
185
186struct _rwsmp {
187	ULONG  cbSize;
188	USHORT usUnityNote;
189	SHORT  sFineTune;
190	LONG   lAttenuation;
191	ULONG  fulOptions;
192	ULONG  cSampleLoops;
193};
194
195struct _rloop {
196	ULONG cbSize;
197	ULONG ulType;
198	ULONG ulStart;
199	ULONG ulLength;
200};
201
202#endif /* __WINE_INCLUDE_DLS1_H */
203