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 */ 212