Only reapply the world, view or projection transform changes if we
[wine] / include / dmusicf.h
1 /*
2  *  DirectMusic File Formats
3  *
4  *  Copyright (C) 2003 Rok Mandeljc
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU Library General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19  */
20
21 #ifndef __WINE_DMUSIC_FILEFORMATS_H
22 #define __WINE_DMUSIC_FILEFORMATS_H
23
24 #include "objbase.h"
25 #include "mmsystem.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 /*****************************************************************************
32  * FOURCC Definitons
33  */
34 #define DMUS_FOURCC_GUID_CHUNK                      mmioFOURCC('g','u','i','d')
35 #define DMUS_FOURCC_INFO_LIST                       mmioFOURCC('I','N','F','O')
36 #define DMUS_FOURCC_UNFO_LIST                       mmioFOURCC('U','N','F','O')
37 #define DMUS_FOURCC_UNAM_CHUNK                      mmioFOURCC('U','N','A','M')
38 #define DMUS_FOURCC_UART_CHUNK                      mmioFOURCC('U','A','R','T')
39 #define DMUS_FOURCC_UCOP_CHUNK                      mmioFOURCC('U','C','O','P')
40 #define DMUS_FOURCC_USBJ_CHUNK                      mmioFOURCC('U','S','B','J')
41 #define DMUS_FOURCC_UCMT_CHUNK                      mmioFOURCC('U','C','M','T')
42 #define DMUS_FOURCC_CATEGORY_CHUNK                  mmioFOURCC('c','a','t','g')
43 #define DMUS_FOURCC_VERSION_CHUNK                   mmioFOURCC('v','e','r','s')
44
45 #define DMUS_FOURCC_STYLE_FORM                      mmioFOURCC('D','M','S','T')
46 #define DMUS_FOURCC_STYLE_CHUNK                     mmioFOURCC('s','t','y','h')
47 #define DMUS_FOURCC_PART_LIST                       mmioFOURCC('p','a','r','t')
48 #define DMUS_FOURCC_PART_CHUNK                      mmioFOURCC('p','r','t','h')
49 #define DMUS_FOURCC_NOTE_CHUNK                      mmioFOURCC('n','o','t','e')
50 #define DMUS_FOURCC_CURVE_CHUNK                     mmioFOURCC('c','r','v','e')
51 #define DMUS_FOURCC_MARKER_CHUNK                    mmioFOURCC('m','r','k','r')
52 #define DMUS_FOURCC_RESOLUTION_CHUNK                mmioFOURCC('r','s','l','n')
53 #define DMUS_FOURCC_ANTICIPATION_CHUNK              mmioFOURCC('a','n','p','n')
54 #define DMUS_FOURCC_PATTERN_LIST                    mmioFOURCC('p','t','t','n')
55 #define DMUS_FOURCC_PATTERN_CHUNK                   mmioFOURCC('p','t','n','h')
56 #define DMUS_FOURCC_RHYTHM_CHUNK                    mmioFOURCC('r','h','t','m')
57 #define DMUS_FOURCC_PARTREF_LIST                    mmioFOURCC('p','r','e','f')
58 #define DMUS_FOURCC_PARTREF_CHUNK                   mmioFOURCC('p','r','f','c')
59 #define DMUS_FOURCC_STYLE_PERS_REF_LIST             mmioFOURCC('p','r','r','f')
60 #define DMUS_FOURCC_MOTIFSETTINGS_CHUNK             mmioFOURCC('m','t','f','s')
61
62 #define DMUS_FOURCC_PATTERN_FORM                    mmioFOURCC('D','M','P','T')
63
64 #define DMUS_FOURCC_CHORDTRACK_LIST                 mmioFOURCC('c','o','r','d')
65 #define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK          mmioFOURCC('c','r','d','h')
66 #define DMUS_FOURCC_CHORDTRACKBODY_CHUNK            mmioFOURCC('c','r','d','b')
67
68 #define DMUS_FOURCC_COMMANDTRACK_CHUNK              mmioFOURCC('c','m','n','d')
69
70 #define DMUS_FOURCC_TOOLGRAPH_FORM                  mmioFOURCC('D','M','T','G')
71 #define DMUS_FOURCC_TOOL_LIST                       mmioFOURCC('t','o','l','l')
72 #define DMUS_FOURCC_TOOL_FORM                       mmioFOURCC('D','M','T','L')
73 #define DMUS_FOURCC_TOOL_CHUNK                      mmioFOURCC('t','o','l','h')
74
75 #define DMUS_FOURCC_AUDIOPATH_FORM                  mmioFOURCC('D','M','A','P')
76
77 #define DMUS_FOURCC_PORTCONFIGS_LIST                mmioFOURCC('p','c','s','l')
78 #define DMUS_FOURCC_PORTCONFIG_LIST                 mmioFOURCC('p','c','f','l')
79 #define DMUS_FOURCC_PORTCONFIG_ITEM                 mmioFOURCC('p','c','f','h')
80 #define DMUS_FOURCC_PORTPARAMS_ITEM                 mmioFOURCC('p','p','r','h')
81 #define DMUS_FOURCC_DSBUFFER_LIST                   mmioFOURCC('d','b','f','l')
82 #define DMUS_FOURCC_DSBUFFATTR_ITEM                 mmioFOURCC('d','d','a','h')
83 #define DMUS_FOURCC_PCHANNELS_LIST                  mmioFOURCC('p','c','h','l')
84 #define DMUS_FOURCC_PCHANNELS_ITEM                  mmioFOURCC('p','c','h','h')
85
86 #define DMUS_FOURCC_BANDTRACK_FORM                  mmioFOURCC('D','M','B','T')
87 #define DMUS_FOURCC_BANDTRACK_CHUNK                 mmioFOURCC('b','d','t','h')
88 #define DMUS_FOURCC_BANDS_LIST                      mmioFOURCC('l','b','d','l')
89 #define DMUS_FOURCC_BAND_LIST                       mmioFOURCC('l','b','n','d')
90 #define DMUS_FOURCC_BANDITEM_CHUNK                  mmioFOURCC('b','d','i','h')
91 #define DMUS_FOURCC_BANDITEM_CHUNK2                 mmioFOURCC('b','d','2','h')
92
93 #define DMUS_FOURCC_BAND_FORM                       mmioFOURCC('D','M','B','D')
94 #define DMUS_FOURCC_INSTRUMENTS_LIST                mmioFOURCC('l','b','i','l')
95 #define DMUS_FOURCC_INSTRUMENT_LIST                 mmioFOURCC('l','b','i','n')
96 #define DMUS_FOURCC_INSTRUMENT_CHUNK                mmioFOURCC('b','i','n','s')
97
98 #define DMUS_FOURCC_WAVEHEADER_CHUNK                mmioFOURCC('w','a','v','h')
99
100 #define DMUS_FOURCC_WAVETRACK_LIST                  mmioFOURCC('w','a','v','t')
101 #define DMUS_FOURCC_WAVETRACK_CHUNK                 mmioFOURCC('w','a','t','h')
102 #define DMUS_FOURCC_WAVEPART_LIST                   mmioFOURCC('w','a','v','p')
103 #define DMUS_FOURCC_WAVEPART_CHUNK                  mmioFOURCC('w','a','p','h')
104 #define DMUS_FOURCC_WAVEITEM_LIST                   mmioFOURCC('w','a','v','i')
105 #define DMUS_FOURCC_WAVE_LIST                       mmioFOURCC('w','a','v','e')
106 #define DMUS_FOURCC_WAVEITEM_CHUNK                  mmioFOURCC('w','a','i','h')
107
108 #define DMUS_FOURCC_CONTAINER_FORM                  mmioFOURCC('D','M','C','N')
109 #define DMUS_FOURCC_CONTAINER_CHUNK                 mmioFOURCC('c','o','n','h')
110 #define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK           mmioFOURCC('c','o','b','a')
111 #define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK          mmioFOURCC('c','o','b','h')
112 #define DMUS_FOURCC_CONTAINED_OBJECTS_LIST          mmioFOURCC('c','o','s','l')
113 #define DMUS_FOURCC_CONTAINED_OBJECT_LIST           mmioFOURCC('c','o','b','l')
114
115 #define DMUS_FOURCC_SEGMENT_FORM                    mmioFOURCC('D','M','S','G')
116 #define DMUS_FOURCC_SEGMENT_CHUNK                   mmioFOURCC('s','e','g','h')
117 #define DMUS_FOURCC_TRACK_LIST                      mmioFOURCC('t','r','k','l')
118 #define DMUS_FOURCC_TRACK_FORM                      mmioFOURCC('D','M','T','K')
119 #define DMUS_FOURCC_TRACK_CHUNK                     mmioFOURCC('t','r','k','h')
120 #define DMUS_FOURCC_TRACK_EXTRAS_CHUNK              mmioFOURCC('t','r','k','x')
121
122 #define DMUS_FOURCC_SONG_FORM                       mmioFOURCC('D','M','S','O')
123 #define DMUS_FOURCC_SONG_CHUNK                      mmioFOURCC('s','n','g','h')
124 #define DMUS_FOURCC_SONGSEGMENTS_LIST               mmioFOURCC('s','e','g','l')
125 #define DMUS_FOURCC_SONGSEGMENT_LIST                mmioFOURCC('s','s','g','l')
126 #define DMUS_FOURCC_TOOLGRAPHS_LIST                 mmioFOURCC('t','l','g','l')
127 #define DMUS_FOURCC_SEGREFS_LIST                    mmioFOURCC('s','r','s','l')
128 #define DMUS_FOURCC_SEGREF_LIST                     mmioFOURCC('s','g','r','l')
129 #define DMUS_FOURCC_SEGREF_CHUNK                    mmioFOURCC('s','g','r','h')
130 #define DMUS_FOURCC_SEGTRANS_CHUNK                  mmioFOURCC('s','t','r','h')
131 #define DMUS_FOURCC_TRACKREFS_LIST                  mmioFOURCC('t','r','s','l')
132 #define DMUS_FOURCC_TRACKREF_LIST                   mmioFOURCC('t','k','r','l')
133 #define DMUS_FOURCC_TRACKREF_CHUNK                  mmioFOURCC('t','k','r','h')
134
135 #define DMUS_FOURCC_REF_LIST                        mmioFOURCC('D','M','R','F')
136 #define DMUS_FOURCC_REF_CHUNK                       mmioFOURCC('r','e','f','h')
137 #define DMUS_FOURCC_DATE_CHUNK                      mmioFOURCC('d','a','t','e')
138 #define DMUS_FOURCC_NAME_CHUNK                      mmioFOURCC('n','a','m','e')
139 #define DMUS_FOURCC_FILE_CHUNK                      mmioFOURCC('f','i','l','e')
140
141 #define DMUS_FOURCC_CHORDMAP_FORM                   mmioFOURCC('D','M','P','R')
142 #define DMUS_FOURCC_IOCHORDMAP_CHUNK                mmioFOURCC('p','e','r','h')
143 #define DMUS_FOURCC_SUBCHORD_CHUNK                  mmioFOURCC('c','h','d','t')
144 #define DMUS_FOURCC_CHORDENTRY_CHUNK                mmioFOURCC('c','h','e','h')
145 #define DMUS_FOURCC_SUBCHORDID_CHUNK                mmioFOURCC('s','b','c','n')
146 #define DMUS_FOURCC_IONEXTCHORD_CHUNK               mmioFOURCC('n','c','r','d')
147 #define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK              mmioFOURCC('n','c','s','q')
148 #define DMUS_FOURCC_IOSIGNPOST_CHUNK                mmioFOURCC('s','p','s','h')
149 #define DMUS_FOURCC_CHORDNAME_CHUNK                 mmioFOURCC('I','N','A','M')
150
151 #define DMUS_FOURCC_CHORDENTRY_LIST                 mmioFOURCC('c','h','o','e')
152 #define DMUS_FOURCC_CHORDMAP_LIST                   mmioFOURCC('c','m','a','p')
153 #define DMUS_FOURCC_CHORD_LIST                      mmioFOURCC('c','h','r','d')
154 #define DMUS_FOURCC_CHORDPALETTE_LIST               mmioFOURCC('c','h','p','l')
155 #define DMUS_FOURCC_CADENCE_LIST                    mmioFOURCC('c','a','d','e')
156 #define DMUS_FOURCC_SIGNPOSTITEM_LIST               mmioFOURCC('s','p','s','t')
157
158 #define DMUS_FOURCC_SIGNPOST_LIST                   mmioFOURCC('s','p','s','q')
159
160 #define DMUS_FOURCC_SCRIPT_FORM                     mmioFOURCC('D','M','S','C')
161 #define DMUS_FOURCC_SCRIPT_CHUNK                    mmioFOURCC('s','c','h','d')
162 #define DMUS_FOURCC_SCRIPTVERSION_CHUNK             mmioFOURCC('s','c','v','e')
163 #define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK            mmioFOURCC('s','c','l','a')
164 #define DMUS_FOURCC_SCRIPTSOURCE_CHUNK              mmioFOURCC('s','c','s','r')
165
166 #define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK            mmioFOURCC('s','g','n','p')
167
168 #define DMUS_FOURCC_MUTE_CHUNK                      mmioFOURCC('m','u','t','e')
169
170 #define DMUS_FOURCC_TIME_STAMP_CHUNK                mmioFOURCC('s','t','m','p')
171
172 #define DMUS_FOURCC_STYLE_TRACK_LIST                mmioFOURCC('s','t','t','r')
173 #define DMUS_FOURCC_STYLE_REF_LIST                  mmioFOURCC('s','t','r','f')
174
175 #define DMUS_FOURCC_PERS_TRACK_LIST                 mmioFOURCC('p','f','t','r')
176 #define DMUS_FOURCC_PERS_REF_LIST                   mmioFOURCC('p','f','r','f')
177
178 #define DMUS_FOURCC_TEMPO_TRACK                     mmioFOURCC('t','e','t','r')
179
180 #define DMUS_FOURCC_SEQ_TRACK                       mmioFOURCC('s','e','q','t')
181 #define DMUS_FOURCC_SEQ_LIST                        mmioFOURCC('e','v','t','l')
182 #define DMUS_FOURCC_CURVE_LIST                      mmioFOURCC('c','u','r','l')
183
184 #define DMUS_FOURCC_SYSEX_TRACK                     mmioFOURCC('s','y','e','x')
185
186 #define DMUS_FOURCC_TIMESIGNATURE_TRACK             mmioFOURCC('t','i','m','s')
187
188 #define DMUS_FOURCC_TIMESIGTRACK_LIST               mmioFOURCC('T','I','M','S')
189 #define DMUS_FOURCC_TIMESIG_CHUNK                   DMUS_FOURCC_TIMESIGNATURE_TRACK
190
191 #define DMUS_FOURCC_MARKERTRACK_LIST                mmioFOURCC('M','A','R','K')
192 #define DMUS_FOURCC_VALIDSTART_CHUNK                mmioFOURCC('v','a','l','s')
193 #define DMUS_FOURCC_PLAYMARKER_CHUNK                mmioFOURCC('p','l','a','y')
194
195 #define DMUS_FOURCC_SEGTRACK_LIST                   mmioFOURCC('s','e','g','t')
196 #define DMUS_FOURCC_SEGTRACK_CHUNK                  mmioFOURCC('s','g','t','h')
197 #define DMUS_FOURCC_SEGMENTS_LIST                   mmioFOURCC('l','s','g','l')
198 #define DMUS_FOURCC_SEGMENT_LIST                    mmioFOURCC('l','s','e','g')
199 #define DMUS_FOURCC_SEGMENTITEM_CHUNK               mmioFOURCC('s','g','i','h')
200 #define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK           mmioFOURCC('s','n','a','m')
201
202 #define DMUS_FOURCC_SCRIPTTRACK_LIST                mmioFOURCC('s','c','r','t')
203 #define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST          mmioFOURCC('s','c','r','l')
204 #define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST           mmioFOURCC('s','c','r','e')
205 #define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK    mmioFOURCC('s','c','r','h')
206 #define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK      mmioFOURCC('s','c','r','n')
207
208 #define DMUS_FOURCC_LYRICSTRACK_LIST                mmioFOURCC('l','y','r','t')
209 #define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST          mmioFOURCC('l','y','r','l')
210 #define DMUS_FOURCC_LYRICSTRACKEVENT_LIST           mmioFOURCC('l','y','r','e')
211 #define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK    mmioFOURCC('l','y','r','h')
212 #define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK      mmioFOURCC('l','y','r','n')
213
214 #define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST    mmioFOURCC('p','r','m','t')
215 #define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST   mmioFOURCC('p','r','o','l')
216 #define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK  mmioFOURCC('p','r','o','h')
217 #define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST    mmioFOURCC('p','r','p','l')
218 #define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK   mmioFOURCC('p','r','p','h')
219 #define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK  mmioFOURCC('p','r','c','c')
220
221 #define DMUS_FOURCC_MELODYFORM_TRACK_LIST           mmioFOURCC('m','f','r','m')
222 #define DMUS_FOURCC_MELODYFORM_HEADER_CHUNK         mmioFOURCC('m','l','f','h')
223 #define DMUS_FOURCC_MELODYFORM_BODY_CHUNK           mmioFOURCC('m','l','f','b')
224
225 #define DMUS_FOURCC_DSBC_FORM                       mmioFOURCC('D','S','B','C')
226 #define DMUS_FOURCC_DSBD_CHUNK                      mmioFOURCC('d','s','b','d')
227 #define DMUS_FOURCC_BSID_CHUNK                      mmioFOURCC('b','s','i','d')
228 #define DMUS_FOURCC_DS3D_CHUNK                      mmioFOURCC('d','s','3','d')
229 #define DMUS_FOURCC_DSBC_LIST                       mmioFOURCC('f','x','l','s')
230 #define DMUS_FOURCC_DSFX_FORM                       mmioFOURCC('D','S','F','X')
231 #define DMUS_FOURCC_DSFX_CHUNK                      mmioFOURCC('f','x','h','r')
232 #define DMUS_FOURCC_DSFX_DATA                       mmioFOURCC('d','a','t','a')
233
234 /*****************************************************************************
235  * Definitons
236  */
237 #define DMUS_VARIATIONF_MAJOR                 0x0000007F
238 #define DMUS_VARIATIONF_MINOR                 0x00003F80
239 #define DMUS_VARIATIONF_OTHER                 0x001FC000
240 #define DMUS_VARIATIONF_ROOT_SCALE            0x00200000
241 #define DMUS_VARIATIONF_ROOT_FLAT             0x00400000
242 #define DMUS_VARIATIONF_ROOT_SHARP            0x00800000
243 #define DMUS_VARIATIONF_TYPE_TRIAD            0x01000000
244 #define DMUS_VARIATIONF_TYPE_6AND7            0x02000000
245 #define DMUS_VARIATIONF_TYPE_COMPLEX          0x04000000
246 #define DMUS_VARIATIONF_DEST_TO1              0x08000000
247 #define DMUS_VARIATIONF_DEST_TO5              0x10000000
248 #define DMUS_VARIATIONF_DEST_OTHER            0x40000000
249 #define DMUS_VARIATIONF_MODES                 0xE0000000
250 #define DMUS_VARIATIONF_MODES_EX              (0x20000000 | 0x80000000)
251 #define DMUS_VARIATIONF_IMA25_MODE            0x00000000
252 #define DMUS_VARIATIONF_DMUS_MODE             0x20000000
253
254 #define DMUS_PARTF_USE_MARKERS                0x1
255 #define DMUS_PARTF_ALIGN_CHORDS               0x2
256 #define DMUS_MARKERF_START                    0x1
257 #define DMUS_MARKERF_STOP                     0x2
258 #define DMUS_MARKERF_CHORD_ALIGN              0x4
259 #define DMUS_PATTERNF_PERSIST_CONTROL         0x1
260
261 #define DMUS_PORTCONFIGF_DRUMSON10            1
262 #define DMUS_PORTCONFIGF_USEDEFAULT           2
263
264 #define DMUS_BUFFERF_SHARED                   1
265 #define DMUS_BUFFERF_DEFINED                  2
266 #define DMUS_BUFFERF_MIXIN                    8
267
268 #define DMUS_IO_INST_PATCH                    1
269 #define DMUS_IO_INST_BANKSELECT               2
270 #define DMUS_IO_INST_ASSIGN_PATCH             8
271 #define DMUS_IO_INST_NOTERANGES               16
272 #define DMUS_IO_INST_PAN                      32
273 #define DMUS_IO_INST_VOLUME                   64
274 #define DMUS_IO_INST_TRANSPOSE                128
275 #define DMUS_IO_INST_GM                       256
276 #define DMUS_IO_INST_GS                       512
277 #define DMUS_IO_INST_XG                       1024
278 #define DMUS_IO_INST_CHANNEL_PRIORITY         2048
279 #define DMUS_IO_INST_USE_DEFAULT_GM_SET       4096
280 #define DMUS_IO_INST_PITCHBENDRANGE               8192
281
282 #define DMUS_WAVETRACKF_SYNC_VAR              0x1
283 #define DMUS_WAVETRACKF_PERSIST_CONTROL       0x2
284
285 #define DMUS_CONTAINED_OBJF_KEEP              1
286 #define DMUS_CONTAINER_NOLOADS                2
287
288 #define DMUS_SEGIOF_REFLENGTH                 1
289
290 #define DMUS_SONG_MAXSEGID                    0x7FFFFFFF
291 #define DMUS_SONG_ANYSEG                      0x80000000
292 #define DMUS_SONG_NOSEG                       0xFFFFFFFF
293 #define DMUS_SONG_NOFROMSEG                   0x80000001
294
295 #define DMUS_SIGNPOSTF_A                      1
296 #define DMUS_SIGNPOSTF_B                      2
297 #define DMUS_SIGNPOSTF_C                      4
298 #define DMUS_SIGNPOSTF_D                      8
299 #define DMUS_SIGNPOSTF_E                      0x10
300 #define DMUS_SIGNPOSTF_F                      0x20
301 #define DMUS_SIGNPOSTF_LETTER                (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
302 #define DMUS_SIGNPOSTF_1                      0x100
303 #define DMUS_SIGNPOSTF_2                      0x200
304 #define DMUS_SIGNPOSTF_3                      0x400
305 #define DMUS_SIGNPOSTF_4                      0x800
306 #define DMUS_SIGNPOSTF_5                      0x1000
307 #define DMUS_SIGNPOSTF_6                      0x2000
308 #define DMUS_SIGNPOSTF_7                      0x4000
309 #define DMUS_SIGNPOSTF_ROOT                   (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)
310 #define DMUS_SIGNPOSTF_CADENCE                0x8000
311
312 #define DMUS_CHORDMAPF_VERSION8               1
313
314 #define DMUS_SPOSTCADENCEF_1                  2
315 #define DMUS_SPOSTCADENCEF_2                  4
316
317
318 #define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT       1
319 #define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS  2
320
321 #define DMUS_SEGMENTTRACKF_MOTIF              1
322
323 #define DMUS_IO_SCRIPTTRACKF_PREPARE          1
324 #define DMUS_IO_SCRIPTTRACKF_QUEUE            2
325 #define DMUS_IO_SCRIPTTRACKF_ATTIME           4
326
327 /*****************************************************************************
328  * Structures
329  */
330 typedef struct _DMUS_IO_SEQ_ITEM
331 {
332     MUSIC_TIME    mtTime;
333     MUSIC_TIME    mtDuration;
334     DWORD         dwPChannel;
335     short         nOffset;
336     BYTE          bStatus;
337     BYTE          bByte1;
338     BYTE          bByte2;
339 } DMUS_IO_SEQ_ITEM;
340
341 typedef struct _DMUS_IO_CURVE_ITEM
342 {
343     MUSIC_TIME  mtStart;
344     MUSIC_TIME  mtDuration;
345     MUSIC_TIME  mtResetDuration;
346     DWORD       dwPChannel;
347     short       nOffset;
348     short       nStartValue;
349     short       nEndValue;
350     short       nResetValue;
351     BYTE        bType;
352     BYTE        bCurveShape;
353     BYTE        bCCData;
354     BYTE        bFlags;
355     WORD        wParamType;
356     WORD        wMergeIndex;
357 } DMUS_IO_CURVE_ITEM;
358
359 typedef struct _DMUS_IO_TEMPO_ITEM
360 {
361     MUSIC_TIME    lTime;
362     double        dblTempo;
363 } DMUS_IO_TEMPO_ITEM;
364
365 typedef struct _DMUS_IO_SYSEX_ITEM
366 {
367     MUSIC_TIME    mtTime;
368     DWORD         dwPChannel;
369     DWORD         dwSysExLength;
370 } DMUS_IO_SYSEX_ITEM;
371
372 typedef DMUS_CHORD_KEY DMUS_CHORD_PARAM;
373
374 typedef struct _DMUS_RHYTHM_PARAM
375 {
376     DMUS_TIMESIGNATURE  TimeSig;
377     DWORD               dwRhythmPattern;
378 } DMUS_RHYTHM_PARAM;
379
380 typedef struct _DMUS_TEMPO_PARAM
381 {
382     MUSIC_TIME  mtTime;
383     double      dblTempo;
384 } DMUS_TEMPO_PARAM;
385
386 typedef struct _DMUS_MUTE_PARAM
387 {
388     DWORD   dwPChannel;
389     DWORD   dwPChannelMap;
390     BOOL    fMute;
391 } DMUS_MUTE_PARAM;
392
393
394 typedef enum enumDMUS_VARIATIONT_TYPES
395 {
396     DMUS_VARIATIONT_SEQUENTIAL       = 0,
397     DMUS_VARIATIONT_RANDOM           = 1,
398     DMUS_VARIATIONT_RANDOM_START     = 2,
399     DMUS_VARIATIONT_NO_REPEAT        = 3,
400     DMUS_VARIATIONT_RANDOM_ROW       = 4
401 } DMUS_VARIATIONT_TYPES;
402
403 typedef struct _DMUS_IO_TIMESIG
404 {
405     BYTE    bBeatsPerMeasure;
406     BYTE    bBeat;
407     WORD    wGridsPerBeat;
408 } DMUS_IO_TIMESIG;
409
410 typedef struct _DMUS_IO_STYLE
411 {
412     DMUS_IO_TIMESIG     timeSig;
413     double              dblTempo;
414 } DMUS_IO_STYLE;
415
416 typedef struct _DMUS_IO_VERSION
417 {
418     DWORD               dwVersionMS;
419     DWORD               dwVersionLS;
420 } DMUS_IO_VERSION;
421
422 typedef struct _DMUS_IO_PATTERN
423 {
424     DMUS_IO_TIMESIG     timeSig;
425     BYTE                bGrooveBottom;
426     BYTE                bGrooveTop;
427     WORD                wEmbellishment;
428     WORD                wNbrMeasures;
429     BYTE                bDestGrooveBottom;
430     BYTE                bDestGrooveTop;
431     DWORD               dwFlags;
432 } DMUS_IO_PATTERN;
433
434 typedef struct _DMUS_IO_STYLEPART
435 {
436     DMUS_IO_TIMESIG     timeSig;
437     DWORD               dwVariationChoices[32];
438     GUID                guidPartID;
439     WORD                wNbrMeasures;
440     BYTE                bPlayModeFlags;
441     BYTE                bInvertUpper;
442     BYTE                bInvertLower;
443     BYTE                bPad[3];
444     DWORD               dwFlags;
445 } DMUS_IO_STYLEPART;
446
447 typedef struct _DMUS_IO_PARTREF
448 {
449     GUID    guidPartID;
450     WORD    wLogicalPartID;
451     BYTE    bVariationLockID;
452     BYTE    bSubChordLevel;
453     BYTE    bPriority;
454     BYTE    bRandomVariation;
455     WORD    wPad;
456     DWORD   dwPChannel;
457 } DMUS_IO_PARTREF;
458
459 typedef struct _DMUS_IO_STYLENOTE
460 {
461     MUSIC_TIME  mtGridStart;
462     DWORD       dwVariation;
463     MUSIC_TIME  mtDuration;
464     short       nTimeOffset;
465     WORD        wMusicValue;
466     BYTE        bVelocity;
467     BYTE        bTimeRange;
468     BYTE        bDurRange;
469     BYTE        bVelRange;
470     BYTE        bInversionID;
471     BYTE        bPlayModeFlags;
472     BYTE        bNoteFlags;
473 } DMUS_IO_STYLENOTE;
474
475 typedef struct _DMUS_IO_STYLECURVE
476 {
477     MUSIC_TIME  mtGridStart;
478     DWORD       dwVariation;
479     MUSIC_TIME  mtDuration;
480     MUSIC_TIME  mtResetDuration;
481     short       nTimeOffset;
482     short       nStartValue;
483     short       nEndValue;
484     short       nResetValue;
485     BYTE        bEventType;
486     BYTE        bCurveShape;
487     BYTE        bCCData;
488     BYTE        bFlags;
489     WORD        wParamType;
490     WORD        wMergeIndex;
491 } DMUS_IO_STYLECURVE;
492
493 typedef struct _DMUS_IO_STYLEMARKER
494 {
495     MUSIC_TIME  mtGridStart;
496     DWORD       dwVariation;
497     WORD        wMarkerFlags;
498 } DMUS_IO_STYLEMARKER;
499
500 typedef struct _DMUS_IO_STYLERESOLUTION
501 {
502     DWORD    dwVariation;
503     WORD     wMusicValue;
504     BYTE     bInversionID;
505     BYTE     bPlayModeFlags;
506 } DMUS_IO_STYLERESOLUTION;
507
508 typedef struct _DMUS_IO_STYLE_ANTICIPATION
509 {
510     MUSIC_TIME    mtGridStart;
511     DWORD         dwVariation;
512     short         nTimeOffset;
513     BYTE          bTimeRange;
514 } DMUS_IO_STYLE_ANTICIPATION;
515
516 typedef struct _DMUS_IO_MOTIFSETTINGS
517 {
518     DWORD       dwRepeats;
519     MUSIC_TIME  mtPlayStart;
520     MUSIC_TIME  mtLoopStart;
521     MUSIC_TIME  mtLoopEnd;
522     DWORD       dwResolution;
523 } DMUS_IO_MOTIFSETTINGS;
524
525
526 typedef enum enumDMUS_PATTERNT_TYPES
527 {
528     DMUS_PATTERNT_RANDOM           = 0,
529     DMUS_PATTERNT_REPEAT           = 1,
530     DMUS_PATTERNT_SEQUENTIAL       = 2,
531     DMUS_PATTERNT_RANDOM_START     = 3,
532     DMUS_PATTERNT_NO_REPEAT        = 4,
533     DMUS_PATTERNT_RANDOM_ROW       = 5
534 } DMUS_PATTERNT_TYPES;
535
536 typedef struct _DMUS_IO_CHORD
537 {
538     WCHAR       wszName[16];
539     MUSIC_TIME  mtTime;
540     WORD        wMeasure;
541     BYTE        bBeat;
542     BYTE        bFlags;
543 } DMUS_IO_CHORD;
544
545 typedef struct _DMUS_IO_SUBCHORD
546 {
547     DWORD   dwChordPattern;
548     DWORD   dwScalePattern;
549     DWORD   dwInversionPoints;
550     DWORD   dwLevels;
551     BYTE    bChordRoot;
552     BYTE    bScaleRoot;
553 } DMUS_IO_SUBCHORD;
554
555 typedef struct _DMUS_IO_COMMAND
556 {
557     MUSIC_TIME  mtTime;
558     WORD        wMeasure;
559     BYTE        bBeat;
560     BYTE        bCommand;
561     BYTE        bGrooveLevel;
562     BYTE        bGrooveRange;
563     BYTE        bRepeatMode;
564 } DMUS_IO_COMMAND;
565
566
567 typedef struct _DMUS_IO_TOOL_HEADER
568 {
569     GUID        guidClassID;
570     long        lIndex;
571     DWORD       cPChannels;
572     FOURCC      ckid;
573     FOURCC      fccType;
574     DWORD       dwPChannels[1];
575 } DMUS_IO_TOOL_HEADER;
576
577
578 typedef struct _DMUS_IO_PORTCONFIG_HEADER
579 {
580     GUID    guidPort;
581     DWORD   dwPChannelBase;
582     DWORD   dwPChannelCount;
583     DWORD   dwFlags;
584 } DMUS_IO_PORTCONFIG_HEADER;
585
586 typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER
587 {
588     DWORD   dwPChannelBase;
589     DWORD   dwPChannelCount;
590     DWORD   dwBufferCount;
591     DWORD   dwFlags;
592 } DMUS_IO_PCHANNELTOBUFFER_HEADER;
593
594 typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER
595 {
596     GUID    guidBufferID;
597     DWORD   dwFlags;
598 } DMUS_IO_BUFFER_ATTRIBUTES_HEADER;
599
600
601 typedef struct _DMUS_IO_BAND_TRACK_HEADER
602 {
603     BOOL bAutoDownload;
604 } DMUS_IO_BAND_TRACK_HEADER;
605
606 typedef struct _DMUS_IO_BAND_ITEM_HEADER
607 {
608     MUSIC_TIME lBandTime;
609 } DMUS_IO_BAND_ITEM_HEADER;
610
611 typedef struct _DMUS_IO_BAND_ITEM_HEADER2
612 {
613     MUSIC_TIME lBandTimeLogical;
614     MUSIC_TIME lBandTimePhysical;
615 } DMUS_IO_BAND_ITEM_HEADER2;
616
617
618 typedef struct _DMUS_IO_INSTRUMENT
619 {
620     DWORD   dwPatch;
621     DWORD   dwAssignPatch;
622     DWORD   dwNoteRanges[4];
623     DWORD   dwPChannel;
624     DWORD   dwFlags;
625     BYTE    bPan;
626     BYTE    bVolume;
627     short   nTranspose;
628     DWORD   dwChannelPriority;
629     short   nPitchBendRange;
630 } DMUS_IO_INSTRUMENT;
631
632
633 typedef struct _DMUS_IO_WAVE_HEADER
634 {
635     REFERENCE_TIME  rtReadAhead;
636     DWORD           dwFlags;
637 } DMUS_IO_WAVE_HEADER;
638
639
640 typedef struct _DMUS_IO_WAVE_TRACK_HEADER
641 {
642     long        lVolume;
643     DWORD       dwFlags;
644 } DMUS_IO_WAVE_TRACK_HEADER;
645
646 typedef struct _DMUS_IO_WAVE_PART_HEADER
647 {
648     long            lVolume;
649     DWORD           dwVariations;
650     DWORD           dwPChannel;
651     DWORD           dwLockToPart;
652     DWORD           dwFlags;
653     DWORD           dwIndex;
654 } DMUS_IO_WAVE_PART_HEADER;
655
656 typedef struct _DMUS_IO_WAVE_ITEM_HEADER
657 {
658     long            lVolume;
659     long            lPitch;
660     DWORD           dwVariations;
661     REFERENCE_TIME  rtTime;
662     REFERENCE_TIME  rtStartOffset;
663     REFERENCE_TIME  rtReserved;
664     REFERENCE_TIME  rtDuration;
665     MUSIC_TIME      mtLogicalTime;
666     DWORD           dwLoopStart;
667     DWORD           dwLoopEnd;
668     DWORD           dwFlags;
669 } DMUS_IO_WAVE_ITEM_HEADER;
670
671
672 typedef struct _DMUS_IO_CONTAINER_HEADER
673 {
674     DWORD       dwFlags;
675 } DMUS_IO_CONTAINER_HEADER;
676
677 typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER
678 {
679     GUID        guidClassID;
680     DWORD       dwFlags;
681     FOURCC      ckid;
682     FOURCC      fccType;
683 } DMUS_IO_CONTAINED_OBJECT_HEADER;
684
685
686 typedef struct _DMUS_IO_SEGMENT_HEADER
687 {
688     DWORD       dwRepeats;
689     MUSIC_TIME  mtLength;
690     MUSIC_TIME  mtPlayStart;
691     MUSIC_TIME  mtLoopStart;
692     MUSIC_TIME  mtLoopEnd;
693     DWORD       dwResolution;
694     REFERENCE_TIME rtLength;
695     DWORD       dwFlags;
696     DWORD       dwReserved;
697 } DMUS_IO_SEGMENT_HEADER;
698
699
700 typedef struct _DMUS_IO_TRACK_HEADER
701 {
702     GUID        guidClassID;
703     DWORD       dwPosition;
704     DWORD       dwGroup;
705     FOURCC      ckid;
706     FOURCC      fccType;
707 } DMUS_IO_TRACK_HEADER;
708
709 typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER
710 {
711     DWORD       dwFlags;
712     DWORD       dwPriority;
713 } DMUS_IO_TRACK_EXTRAS_HEADER;
714
715
716 typedef struct _DMUS_IO_SONG_HEADER
717 {
718     DWORD       dwFlags;
719     DWORD       dwStartSegID;
720 } DMUS_IO_SONG_HEADER;
721
722 typedef struct _DMUS_IO_SEGREF_HEADER
723 {
724     DWORD       dwID;
725     DWORD       dwSegmentID;
726     DWORD       dwToolGraphID;
727     DWORD       dwFlags;
728     DWORD       dwNextPlayID;
729 } DMUS_IO_SEGREF_HEADER;
730
731
732 typedef struct _DMUS_IO_TRACKREF_HEADER
733 {
734     DWORD       dwSegmentID;
735     DWORD       dwFlags;
736 } DMUS_IO_TRACKREF_HEADER;
737
738
739 typedef struct _DMUS_IO_TRANSITION_DEF
740 {
741     DWORD       dwSegmentID;
742     DWORD       dwTransitionID;
743     DWORD       dwPlayFlags;
744 } DMUS_IO_TRANSITION_DEF;
745
746
747 typedef struct _DMUS_IO_REFERENCE
748 {
749     GUID    guidClassID;
750     DWORD   dwValidData;
751 } DMUS_IO_REFERENCE;
752
753
754 typedef struct _DMUS_IO_CHORDMAP
755 {
756     WCHAR   wszLoadName[20];
757     DWORD   dwScalePattern;
758     DWORD   dwFlags;
759 } DMUS_IO_CHORDMAP;
760
761 typedef struct _DMUS_IO_CHORDMAP_SUBCHORD
762 {
763     DWORD   dwChordPattern;
764     DWORD   dwScalePattern;
765     DWORD   dwInvertPattern;
766     BYTE    bChordRoot;
767     BYTE    bScaleRoot;
768     WORD    wCFlags;
769     DWORD   dwLevels;
770 } DMUS_IO_CHORDMAP_SUBCHORD, DMUS_IO_PERS_SUBCHORD;
771
772 typedef struct _DMUS_IO_CHORDENTRY
773 {
774     DWORD   dwFlags;
775     WORD    wConnectionID;
776 } DMUS_IO_CHORDENTRY;
777
778 typedef struct _DMUS_IO_NEXTCHORD
779 {
780     DWORD   dwFlags;
781     WORD    nWeight;
782     WORD    wMinBeats;
783     WORD    wMaxBeats;
784     WORD    wConnectionID;
785 } DMUS_IO_NEXTCHORD;
786
787 typedef struct _DMUS_IO_CHORDMAP_SIGNPOST
788 {
789     DWORD   dwChords;
790     DWORD   dwFlags;
791 } DMUS_IO_CHORDMAP_SIGNPOST, DMUS_IO_PERS_SIGNPOST;
792
793
794 typedef struct _DMUS_IO_SCRIPT_HEADER
795 {
796     DWORD       dwFlags;
797 } DMUS_IO_SCRIPT_HEADER;
798
799
800 typedef struct _DMUS_IO_SIGNPOST
801 {
802     MUSIC_TIME  mtTime;
803     DWORD       dwChords;
804     WORD        wMeasure;
805 } DMUS_IO_SIGNPOST;
806
807
808 typedef struct _DMUS_IO_MUTE
809 {
810     MUSIC_TIME  mtTime;
811     DWORD       dwPChannel;
812     DWORD       dwPChannelMap;
813 } DMUS_IO_MUTE;
814
815
816 typedef struct _DMUS_IO_TIMESIGNATURE_ITEM
817 {
818     MUSIC_TIME    lTime;
819     BYTE          bBeatsPerMeasure;
820     BYTE          bBeat;
821     WORD          wGridsPerBeat;
822 } DMUS_IO_TIMESIGNATURE_ITEM;
823
824
825 typedef struct _DMUS_IO_VALID_START
826 {
827     MUSIC_TIME mtTime;
828 } DMUS_IO_VALID_START;
829
830 typedef struct _DMUS_IO_PLAY_MARKER
831 {
832     MUSIC_TIME mtTime;
833 } DMUS_IO_PLAY_MARKER;
834
835
836 typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER
837 {
838     DWORD dwFlags;
839 } DMUS_IO_SEGMENT_TRACK_HEADER;
840
841 typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER
842 {
843     MUSIC_TIME      lTimeLogical;
844     MUSIC_TIME      lTimePhysical;
845     DWORD           dwPlayFlags;
846     DWORD           dwFlags;
847 } DMUS_IO_SEGMENT_ITEM_HEADER;
848
849
850 typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER
851 {
852     DWORD dwFlags;
853     MUSIC_TIME lTimeLogical;
854     MUSIC_TIME lTimePhysical;
855 } DMUS_IO_SCRIPTTRACK_EVENTHEADER;
856
857
858 typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER
859 {
860     DWORD dwFlags;
861     DWORD dwTimingFlags;
862         MUSIC_TIME lTimeLogical;
863     MUSIC_TIME lTimePhysical;
864 } DMUS_IO_LYRICSTRACK_EVENTHEADER;
865
866
867 typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER
868 {
869     DWORD dwFlags;
870     GUID guidTimeFormat;
871     DWORD dwPChannel;
872     DWORD dwStage;
873     DWORD dwBuffer;
874     GUID guidObject;
875     DWORD dwIndex;
876 } DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
877
878 typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER
879 {
880     DWORD dwFlags;
881     DWORD dwIndex;
882 } DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
883
884 typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO
885 {
886     MUSIC_TIME  mtStartTime;
887     MUSIC_TIME  mtEndTime;
888     float       fltStartValue;
889     float       fltEndValue;
890     DWORD       dwCurveType;
891     DWORD       dwFlags;
892 } DMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
893
894
895 typedef DMUS_CONNECTION_RULE DMUS_IO_CONNECTION_RULE;
896
897 typedef DMUS_MELODY_FRAGMENT DMUS_IO_MELODY_FRAGMENT;
898
899 typedef struct _DMUS_IO_MELFORM
900 {
901     DWORD        dwPlaymode;
902 } DMUS_IO_MELFORM;
903
904
905 typedef struct _DSOUND_IO_DSBUFFERDESC
906 {
907     DWORD dwFlags;
908     WORD nChannels;
909     LONG lVolume;
910     LONG lPan;
911     DWORD dwReserved;
912 } DSOUND_IO_DSBUFFERDESC;
913
914 typedef struct _DSOUND_IO_DSBUSID
915 {
916     DWORD busid[1];
917 } DSOUND_IO_DSBUSID;
918
919 typedef struct _DSOUND_IO_3D
920 {
921     GUID guid3DAlgorithm;
922     DS3DBUFFER ds3d;
923 } DSOUND_IO_3D;
924
925 typedef struct _DSOUND_IO_DXDMO_HEADER
926 {
927     DWORD dwEffectFlags;
928     GUID guidDSFXClass;
929     GUID guidReserved;
930     GUID guidSendBuffer;
931     DWORD dwReserved;
932 } DSOUND_IO_DXDMO_HEADER;
933
934 typedef struct _DSOUND_IO_DXDMO_DATA
935 {
936     DWORD data[1];
937 } DSOUND_IO_DXDMO_DATA;
938
939 #ifdef __cplusplus
940 }
941 #endif
942
943 #endif /* __WINE_DMUSIC_FILEFORMATS_H */