master
  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 */
 28typedef LONG GCENT;
 29typedef LONG PCENT;
 30typedef LONG PERCENT;
 31typedef LONG TCENT;
 32
 33typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;
 34
 35/*****************************************************************************
 36 * FOURCC definition
 37 */
 38#ifndef mmioFOURCC
 39typedef 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 */
 65typedef struct _DMUS_DOWNLOADINFO   DMUS_DOWNLOADINFO,   *LPDMUS_DOWNLOADINFO;
 66typedef struct _DMUS_OFFSETTABLE    DMUS_OFFSETTABLE,    *LPDMUS_OFFSETTABLE;
 67typedef struct _DMUS_INSTRUMENT     DMUS_INSTRUMENT,     *LPDMUS_INSTRUMENT;
 68typedef struct _DMUS_REGION         DMUS_REGION,         *LPDMUS_REGION;
 69typedef struct _DMUS_LFOPARAMS      DMUS_LFOPARAMS,      *LPDMUS_LFOPARAMS;
 70typedef struct _DMUS_VEGPARAMS      DMUS_VEGPARAMS,      *LPDMUS_VEGPARAMS;
 71typedef struct _DMUS_PEGPARAMS      DMUS_PEGPARAMS,      *LPDMUS_PEGPARAMS;
 72typedef struct _DMUS_MSCPARAMS      DMUS_MSCPARAMS,      *LPDMUS_MSCPARAMS;
 73typedef struct _DMUS_ARTICPARAMS    DMUS_ARTICPARAMS,    *LPDMUS_ARTICPARAMS;
 74typedef struct _DMUS_ARTICULATION   DMUS_ARTICULATION,   *LPDMUS_ARTICULATION;
 75typedef struct _DMUS_ARTICULATION2  DMUS_ARTICULATION2,  *LPDMUS_ARTICULATION2;
 76typedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK;
 77typedef struct _DMUS_COPYRIGHT      DMUS_COPYRIGHT,      *LPDMUS_COPYRIGHT;
 78typedef struct _DMUS_WAVEDATA       DMUS_WAVEDATA,       *LPDMUS_WAVEDATA;
 79typedef struct _DMUS_WAVE           DMUS_WAVE,           *LPDMUS_WAVE;
 80typedef struct _DMUS_NOTERANGE      DMUS_NOTERANGE,      *LPDMUS_NOTERANGE;
 81typedef struct _DMUS_WAVEARTDL      DMUS_WAVEARTDL,      *LPDMUS_WAVEARTDL;
 82typedef struct _DMUS_WAVEDL         DMUS_WAVEDL,         *LPDMUS_WAVEDL;
 83
 84/* actual structures */
 85struct _DMUS_DOWNLOADINFO {
 86	DWORD dwDLType;
 87	DWORD dwDLId;
 88	DWORD dwNumOffsetTableEntries;
 89	DWORD cbSize;
 90};
 91
 92struct _DMUS_OFFSETTABLE {
 93	ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
 94};
 95
 96struct _DMUS_INSTRUMENT {
 97	ULONG ulPatch;
 98	ULONG ulFirstRegionIdx;             
 99	ULONG ulGlobalArtIdx;
100	ULONG ulFirstExtCkIdx;
101	ULONG ulCopyrightIdx;
102	ULONG ulFlags;                        
103};
104
105struct _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 is typedef'ed as struct _rloop in dls1.h. Changed type of
116 * WLOOP[1] from WLOOP to struct _rloop for __cplusplus compat. */
117	struct _rloop   WLOOP[1];
118};
119
120struct _DMUS_LFOPARAMS {
121	PCENT pcFrequency;
122	TCENT tcDelay;
123	GCENT gcVolumeScale;
124	PCENT pcPitchScale;
125	GCENT gcMWToVolume;
126	PCENT pcMWToPitch;
127};
128
129struct _DMUS_VEGPARAMS {
130	TCENT   tcAttack;
131	TCENT   tcDecay;
132	PERCENT ptSustain;
133	TCENT   tcRelease;
134	TCENT   tcVel2Attack;
135	TCENT   tcKey2Decay;
136};
137
138struct _DMUS_PEGPARAMS {
139	TCENT   tcAttack;
140	TCENT   tcDecay;
141	PERCENT ptSustain;
142	TCENT   tcRelease;
143	TCENT   tcVel2Attack;
144	TCENT   tcKey2Decay;
145	PCENT   pcRange;
146};
147
148struct _DMUS_MSCPARAMS {
149	PERCENT ptDefaultPan;
150};
151
152struct _DMUS_ARTICPARAMS {
153	DMUS_LFOPARAMS LFO;
154	DMUS_VEGPARAMS VolEG;
155	DMUS_PEGPARAMS PitchEG;
156	DMUS_MSCPARAMS Misc;
157};
158
159struct _DMUS_ARTICULATION {
160	ULONG ulArt1Idx;
161	ULONG ulFirstExtCkIdx;
162};
163
164struct _DMUS_ARTICULATION2 {
165	ULONG ulArtIdx;
166	ULONG ulFirstExtCkIdx;
167	ULONG ulNextArtIdx;
168};
169
170struct _DMUS_EXTENSIONCHUNK {
171	ULONG  cbSize;
172	ULONG  ulNextExtCkIdx;
173	FOURCC ExtCkID;                                      
174	BYTE   byExtCk[DMUS_MIN_DATA_SIZE];
175};
176
177struct _DMUS_COPYRIGHT {
178	ULONG cbSize;
179	BYTE  byCopyright[DMUS_MIN_DATA_SIZE];
180};
181
182struct _DMUS_WAVEDATA {
183	ULONG cbSize;
184	BYTE  byData[DMUS_MIN_DATA_SIZE]; 
185};
186
187struct _DMUS_WAVE {
188	ULONG        ulFirstExtCkIdx;
189	ULONG        ulCopyrightIdx;
190	ULONG        ulWaveDataIdx;
191	WAVEFORMATEX WaveformatEx;
192};
193
194struct _DMUS_NOTERANGE {
195	DWORD dwLowNote;
196	DWORD dwHighNote;
197};
198
199struct _DMUS_WAVEARTDL {
200	ULONG  ulDownloadIdIdx;
201	ULONG  ulBus;
202	ULONG  ulBuffers;
203	ULONG  ulMasterDLId;
204	USHORT usOptions;
205};
206
207struct _DMUS_WAVEDL {
208	ULONG cbWaveData;
209};
210
211#endif /* __WINE_DMUSIC_DLS_H */