oleaut32: Introduce a new helper function, TLB_FreeCustData, for freeing custom data.
[wine] / include / dmdls.h
1 /* DirectMusic DLS Download Definitions
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_DMUSIC_DLS_H
21 #define __WINE_DMUSIC_DLS_H
22
23 #include <dls1.h>
24
25 /*****************************************************************************
26  * Typedef definitions
27  */
28 typedef long GCENT;
29 typedef long PCENT;
30 typedef long PERCENT;
31 typedef long TCENT;
32
33 typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;
34
35 /*****************************************************************************
36  * FOURCC definition
37  */
38 #ifndef mmioFOURCC
39 typedef DWORD FOURCC;
40 #define mmioFOURCC(ch0,ch1,ch2,ch3) \
41         ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
42         ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
43 #endif
44
45 /*****************************************************************************
46  * Flags
47  */
48 #define DMUS_DEFAULT_SIZE_OFFSETTABLE 0x1
49
50 #define DMUS_DOWNLOADINFO_INSTRUMENT       0x1
51 #define DMUS_DOWNLOADINFO_WAVE             0x2
52 #define DMUS_DOWNLOADINFO_INSTRUMENT2      0x3
53 #define DMUS_DOWNLOADINFO_WAVEARTICULATION 0x4
54 #define DMUS_DOWNLOADINFO_STREAMINGWAVE    0x5
55 #define DMUS_DOWNLOADINFO_ONESHOTWAVE      0x6
56
57 #define DMUS_INSTRUMENT_GM_INSTRUMENT 0x1
58
59 #define DMUS_MIN_DATA_SIZE 0x4       
60
61 /*****************************************************************************
62  * Structures
63  */
64 /* typedef definitions */
65 typedef struct _DMUS_DOWNLOADINFO   DMUS_DOWNLOADINFO,   *LPDMUS_DOWNLOADINFO;
66 typedef struct _DMUS_OFFSETTABLE    DMUS_OFFSETTABLE,    *LPDMUS_OFFSETTABLE;
67 typedef struct _DMUS_INSTRUMENT     DMUS_INSTRUMENT,     *LPDMUS_INSTRUMENT;
68 typedef struct _DMUS_REGION         DMUS_REGION,         *LPDMUS_REGION;
69 typedef struct _DMUS_LFOPARAMS      DMUS_LFOPARAMS,      *LPDMUS_LFOPARAMS;
70 typedef struct _DMUS_VEGPARAMS      DMUS_VEGPARAMS,      *LPDMUS_VEGPARAMS;
71 typedef struct _DMUS_PEGPARAMS      DMUS_PEGPARAMS,      *LPDMUS_PEGPARAMS;
72 typedef struct _DMUS_MSCPARAMS      DMUS_MSCPARAMS,      *LPDMUS_MSCPARAMS;
73 typedef struct _DMUS_ARTICPARAMS    DMUS_ARTICPARAMS,    *LPDMUS_ARTICPARAMS;
74 typedef struct _DMUS_ARTICULATION   DMUS_ARTICULATION,   *LPDMUS_ARTICULATION;
75 typedef struct _DMUS_ARTICULATION2  DMUS_ARTICULATION2,  *LPDMUS_ARTICULATION2;
76 typedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK;
77 typedef struct _DMUS_COPYRIGHT      DMUS_COPYRIGHT,      *LPDMUS_COPYRIGHT;
78 typedef struct _DMUS_WAVEDATA       DMUS_WAVEDATA,       *LPDMUS_WAVEDATA;
79 typedef struct _DMUS_WAVE           DMUS_WAVE,           *LPDMUS_WAVE;
80 typedef struct _DMUS_NOTERANGE      DMUS_NOTERANGE,      *LPDMUS_NOTERANGE;
81 typedef struct _DMUS_WAVEARTDL      DMUS_WAVEARTDL,      *LPDMUS_WAVEARTDL;
82 typedef struct _DMUS_WAVEDL         DMUS_WAVEDL,         *LPDMUS_WAVEDL;
83
84 /* actual structures */
85 struct _DMUS_DOWNLOADINFO {
86         DWORD dwDLType;
87         DWORD dwDLId;
88         DWORD dwNumOffsetTableEntries;
89         DWORD cbSize;
90 };
91
92 struct _DMUS_OFFSETTABLE {
93         ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
94 };
95
96 struct _DMUS_INSTRUMENT {
97         ULONG ulPatch;
98         ULONG ulFirstRegionIdx;             
99         ULONG ulGlobalArtIdx;
100         ULONG ulFirstExtCkIdx;
101         ULONG ulCopyrightIdx;
102         ULONG ulFlags;                        
103 };
104
105 struct _DMUS_REGION {
106         RGNRANGE RangeKey;
107         RGNRANGE RangeVelocity;
108         USHORT   fusOptions;
109         USHORT   usKeyGroup;
110         ULONG    ulRegionArtIdx;
111         ULONG    ulNextRegionIdx;
112         ULONG    ulFirstExtCkIdx;
113         WAVELINK WaveLink;
114         WSMPL    WSMP;
115         WLOOP    WLOOP[1];
116 };
117
118 struct _DMUS_LFOPARAMS {
119         PCENT pcFrequency;
120         TCENT tcDelay;
121         GCENT gcVolumeScale;
122         PCENT pcPitchScale;
123         GCENT gcMWToVolume;
124         PCENT pcMWToPitch;
125 };
126
127 struct _DMUS_VEGPARAMS {
128         TCENT   tcAttack;
129         TCENT   tcDecay;
130         PERCENT ptSustain;
131         TCENT   tcRelease;
132         TCENT   tcVel2Attack;
133         TCENT   tcKey2Decay;
134 };
135
136 struct _DMUS_PEGPARAMS {
137         TCENT   tcAttack;
138         TCENT   tcDecay;
139         PERCENT ptSustain;
140         TCENT   tcRelease;
141         TCENT   tcVel2Attack;
142         TCENT   tcKey2Decay;
143         PCENT   pcRange;
144 };
145
146 struct _DMUS_MSCPARAMS {
147         PERCENT ptDefaultPan;
148 };
149
150 struct _DMUS_ARTICPARAMS {
151         DMUS_LFOPARAMS LFO;
152         DMUS_VEGPARAMS VolEG;
153         DMUS_PEGPARAMS PitchEG;
154         DMUS_MSCPARAMS Misc;
155 };
156
157 struct _DMUS_ARTICULATION {
158         ULONG ulArt1Idx;
159         ULONG ulFirstExtCkIdx;
160 };
161
162 struct _DMUS_ARTICULATION2 {
163         ULONG ulArtIdx;
164         ULONG ulFirstExtCkIdx;
165         ULONG ulNextArtIdx;
166 };
167
168 struct _DMUS_EXTENSIONCHUNK {
169         ULONG  cbSize;
170         ULONG  ulNextExtCkIdx;
171         FOURCC ExtCkID;                                      
172         BYTE   byExtCk[DMUS_MIN_DATA_SIZE];
173 };
174
175 struct _DMUS_COPYRIGHT {
176         ULONG cbSize;
177         BYTE  byCopyright[DMUS_MIN_DATA_SIZE];
178 };
179
180 struct _DMUS_WAVEDATA {
181         ULONG cbSize;
182         BYTE  byData[DMUS_MIN_DATA_SIZE]; 
183 };
184
185 struct _DMUS_WAVE {
186         ULONG        ulFirstExtCkIdx;
187         ULONG        ulCopyrightIdx;
188         ULONG        ulWaveDataIdx;
189         WAVEFORMATEX WaveformatEx;
190 };
191
192 struct _DMUS_NOTERANGE {
193         DWORD dwLowNote;
194         DWORD dwHighNote;
195 };
196
197 struct _DMUS_WAVEARTDL {
198         ULONG  ulDownloadIdIdx;
199         ULONG  ulBus;
200         ULONG  ulBuffers;
201         ULONG  ulMasterDLId;
202         USHORT usOptions;
203 };
204
205 struct _DMUS_WAVEDL {
206         ULONG cbWaveData;
207 };
208
209 #endif /* __WINE_DMUSIC_DLS_H */