1 module fmod.common;
2 
3 extern (C):
4 
5 // Functions and such
6 alias void function (FMOD_ASYNCREADINFO*, FMOD_RESULT) FMOD_FILE_ASYNCDONE;
7 alias FMOD_RESULT function (uint, const(char)*, int, const(char)*, const(char)*) FMOD_DEBUG_CALLBACK;
8 alias FMOD_RESULT function (FMOD_SYSTEM*, uint, void*, void*, void*) FMOD_SYSTEM_CALLBACK;
9 alias FMOD_RESULT function (FMOD_CHANNELCONTROL*, FMOD_CHANNELCONTROL_TYPE, FMOD_CHANNELCONTROL_CALLBACK_TYPE, void*, void*) FMOD_CHANNELCONTROL_CALLBACK;
10 alias FMOD_RESULT function (FMOD_SOUND*, FMOD_RESULT) FMOD_SOUND_NONBLOCK_CALLBACK;
11 alias FMOD_RESULT function (FMOD_SOUND*, void*, uint) FMOD_SOUND_PCMREAD_CALLBACK;
12 alias FMOD_RESULT function (FMOD_SOUND*, int, uint, uint) FMOD_SOUND_PCMSETPOS_CALLBACK;
13 alias FMOD_RESULT function (const(char)*, uint*, void**, void*) FMOD_FILE_OPEN_CALLBACK;
14 alias FMOD_RESULT function (void*, void*) FMOD_FILE_CLOSE_CALLBACK;
15 alias FMOD_RESULT function (void*, void*, uint, uint*, void*) FMOD_FILE_READ_CALLBACK;
16 alias FMOD_RESULT function (void*, uint, void*) FMOD_FILE_SEEK_CALLBACK;
17 alias FMOD_RESULT function (FMOD_ASYNCREADINFO*, void*) FMOD_FILE_ASYNCREAD_CALLBACK;
18 alias FMOD_RESULT function (FMOD_ASYNCREADINFO*, void*) FMOD_FILE_ASYNCCANCEL_CALLBACK;
19 alias void* function (uint, uint, const(char)*) FMOD_MEMORY_ALLOC_CALLBACK;
20 alias void* function (void*, uint, uint, const(char)*) FMOD_MEMORY_REALLOC_CALLBACK;
21 alias void function (void*, uint, const(char)*) FMOD_MEMORY_FREE_CALLBACK;
22 alias float function (FMOD_CHANNELCONTROL*, float) FMOD_3D_ROLLOFF_CALLBACK;
23 
24 enum FMOD_RESULT {
25 	OK = 0,
26 	ERR_BADCOMMAND = 1,
27 	ERR_CHANNEL_ALLOC = 2,
28 	ERR_CHANNEL_STOLEN = 3,
29 	ERR_DMA = 4,
30 	ERR_DSP_CONNECTION = 5,
31 	ERR_DSP_DONTPROCESS = 6,
32 	ERR_DSP_FORMAT = 7,
33 	ERR_DSP_INUSE = 8,
34 	ERR_DSP_NOTFOUND = 9,
35 	ERR_DSP_RESERVED = 10,
36 	ERR_DSP_SILENCE = 11,
37 	ERR_DSP_TYPE = 12,
38 	ERR_FILE_BAD = 13,
39 	ERR_FILE_COULDNOTSEEK = 14,
40 	ERR_FILE_DISKEJECTED = 15,
41 	ERR_FILE_EOF = 16,
42 	ERR_FILE_ENDOFDATA = 17,
43 	ERR_FILE_NOTFOUND = 18,
44 	ERR_FORMAT = 19,
45 	ERR_HEADER_MISMATCH = 20,
46 	ERR_HTTP = 21,
47 	ERR_HTTP_ACCESS = 22,
48 	ERR_HTTP_PROXY_AUTH = 23,
49 	ERR_HTTP_SERVER_ERROR = 24,
50 	ERR_HTTP_TIMEOUT = 25,
51 	ERR_INITIALIZATION = 26,
52 	ERR_INITIALIZED = 27,
53 	ERR_INTERNAL = 28,
54 	ERR_INVALID_FLOAT = 29,
55 	ERR_INVALID_HANDLE = 30,
56 	ERR_INVALID_PARAM = 31,
57 	ERR_INVALID_POSITION = 32,
58 	ERR_INVALID_SPEAKER = 33,
59 	ERR_INVALID_SYNCPOINT = 34,
60 	ERR_INVALID_THREAD = 35,
61 	ERR_INVALID_VECTOR = 36,
62 	ERR_MAXAUDIBLE = 37,
63 	ERR_MEMORY = 38,
64 	ERR_MEMORY_CANTPOINT = 39,
65 	ERR_NEEDS3D = 40,
66 	ERR_NEEDSHARDWARE = 41,
67 	ERR_NET_CONNECT = 42,
68 	ERR_NET_SOCKET_ERROR = 43,
69 	ERR_NET_URL = 44,
70 	ERR_NET_WOULD_BLOCK = 45,
71 	ERR_NOTREADY = 46,
72 	ERR_OUTPUT_ALLOCATED = 47,
73 	ERR_OUTPUT_CREATEBUFFER = 48,
74 	ERR_OUTPUT_DRIVERCALL = 49,
75 	ERR_OUTPUT_FORMAT = 50,
76 	ERR_OUTPUT_INIT = 51,
77 	ERR_OUTPUT_NODRIVERS = 52,
78 	ERR_PLUGIN = 53,
79 	ERR_PLUGIN_MISSING = 54,
80 	ERR_PLUGIN_RESOURCE = 55,
81 	ERR_PLUGIN_VERSION = 56,
82 	ERR_RECORD = 57,
83 	ERR_REVERB_CHANNELGROUP = 58,
84 	ERR_REVERB_INSTANCE = 59,
85 	ERR_SUBSOUNDS = 60,
86 	ERR_SUBSOUND_ALLOCATED = 61,
87 	ERR_SUBSOUND_CANTMOVE = 62,
88 	ERR_TAGNOTFOUND = 63,
89 	ERR_TOOMANYCHANNELS = 64,
90 	ERR_TRUNCATED = 65,
91 	ERR_UNIMPLEMENTED = 66,
92 	ERR_UNINITIALIZED = 67,
93 	ERR_UNSUPPORTED = 68,
94 	ERR_VERSION = 69,
95 	ERR_EVENT_ALREADY_LOADED = 70,
96 	ERR_EVENT_LIVEUPDATE_BUSY = 71,
97 	ERR_EVENT_LIVEUPDATE_MISMATCH = 72,
98 	ERR_EVENT_LIVEUPDATE_TIMEOUT = 73,
99 	ERR_EVENT_NOTFOUND = 74,
100 	ERR_STUDIO_UNINITIALIZED = 75,
101 	ERR_STUDIO_NOT_LOADED = 76,
102 	ERR_INVALID_STRING = 77,
103 	ERR_ALREADY_LOCKED = 78,
104 	ERR_NOT_LOCKED = 79,
105 	RESULT_FORCEINT = 65536
106 }
107 
108 enum FMOD_CHANNELCONTROL_TYPE {
109 	CHANNEL = 0,
110 	CHANNELGROUP = 1,
111 	FORCEINT = 65536
112 }
113 
114 enum FMOD_OUTPUTTYPE {
115 	AUTODETECT = 0,
116 	UNKNOWN = 1,
117 	NOSOUND = 2,
118 	WAVWRITER = 3,
119 	NOSOUND_NRT = 4,
120 	WAVWRITER_NRT = 5,
121 	DSOUND = 6,
122 	WINMM = 7,
123 	WASAPI = 8,
124 	ASIO = 9,
125 	PULSEAUDIO = 10,
126 	ALSA = 11,
127 	COREAUDIO = 12,
128 	XBOX360 = 13,
129 	PS3 = 14,
130 	AUDIOTRACK = 15,
131 	OPENSL = 16,
132 	WIIU = 17,
133 	AUDIOOUT = 18,
134 	MAX = 19,
135 	FORCEINT = 65536
136 }
137 
138 enum FMOD_DEBUG_MODE {
139 	TTY = 0,
140 	FILE = 1,
141 	CALLBACK = 2,
142 	FORCEINT = 65536
143 }
144 
145 enum FMOD_SPEAKERMODE {
146 	DEFAULT = 0,
147 	RAW = 1,
148 	MONO = 2,
149 	STEREO = 3,
150 	QUAD = 4,
151 	SURROUND = 5,
152 	FIVE_POINT1 = 6,
153 	SEVEN_POINT1 = 7,
154 	MAX = 8,
155 	FORCEINT = 65536
156 }
157 
158 enum FMOD_SPEAKER {
159 	FRONT_LEFT = 0,
160 	FRONT_RIGHT = 1,
161 	FRONT_CENTER = 2,
162 	LOW_FREQUENCY = 3,
163 	SURROUND_LEFT = 4,
164 	SURROUND_RIGHT = 5,
165 	BACK_LEFT = 6,
166 	BACK_RIGHT = 7,
167 	MAX = 8,
168 	FORCEINT = 65536
169 }
170 
171 enum FMOD_CHANNELORDER {
172 	DEFAULT = 0,
173 	WAVEFORMAT = 1,
174 	PROTOOLS = 2,
175 	ALLMONO = 3,
176 	ALLSTEREO = 4,
177 	ALSA = 5,
178 	MAX = 6,
179 	FORCEINT = 65536
180 }
181 
182 enum FMOD_PLUGINTYPE {
183 	OUTPUT = 0,
184 	CODEC = 1,
185 	DSP = 2,
186 	MAX = 3,
187 	FORCEINT = 65536
188 }
189 
190 enum FMOD_SOUND_TYPE {
191 	UNKNOWN = 0,
192 	AIFF = 1,
193 	ASF = 2,
194 	AT3 = 3,
195 	DLS = 4,
196 	FLAC = 5,
197 	FSB = 6,
198 	GCADPCM = 7,
199 	IT = 8,
200 	MIDI = 9,
201 	MOD = 10,
202 	MPEG = 11,
203 	OGGVORBIS = 12,
204 	PLAYLIST = 13,
205 	RAW = 14,
206 	S3M = 15,
207 	USER = 16,
208 	WAV = 17,
209 	XM = 18,
210 	XMA = 19,
211 	VAG = 20,
212 	AUDIOQUEUE = 21,
213 	XWMA = 22,
214 	BCWAV = 23,
215 	AT9 = 24,
216 	VORBIS = 25,
217 	MEDIA_FOUNDATION = 26,
218 	MEDIACODEC = 27,
219 	FADPCM = 28,
220 	MAX = 29,
221 	FORCEINT = 65536
222 }
223 
224 enum FMOD_SOUND_FORMAT {
225 	NONE = 0,
226 	PCM8 = 1,
227 	PCM16 = 2,
228 	PCM24 = 3,
229 	PCM32 = 4,
230 	PCMFLOAT = 5,
231 	GCADPCM = 6,
232 	IMAADPCM = 7,
233 	VAG = 8,
234 	HEVAG = 9,
235 	XMA = 10,
236 	MPEG = 11,
237 	CELT = 12,
238 	AT9 = 13,
239 	XWMA = 14,
240 	VORBIS = 15,
241 	FADPCM = 16,
242 	MAX = 17,
243 	FORCEINT = 65536
244 }
245 
246 enum FMOD_OPENSTATE {
247 	READY = 0,
248 	LOADING = 1,
249 	ERROR = 2,
250 	CONNECTING = 3,
251 	BUFFERING = 4,
252 	SEEKING = 5,
253 	PLAYING = 6,
254 	SETPOSITION = 7,
255 	MAX = 8,
256 	FORCEINT = 65536
257 }
258 
259 enum FMOD_SOUNDGROUP_BEHAVIOR {
260 	FAIL = 0,
261 	MUTE = 1,
262 	STEALLOWEST = 2,
263 	MAX = 3,
264 	FORCEINT = 65536
265 }
266 
267 enum FMOD_CHANNELCONTROL_CALLBACK_TYPE {
268 	END = 0,
269 	VIRTUALVOICE = 1,
270 	SYNCPOINT = 2,
271 	OCCLUSION = 3,
272 	MAX = 4,
273 	FORCEINT = 65536
274 }
275 
276 enum FMOD_CHANNELCONTROL_DSP {
277 	HEAD = -1,
278 	FADER = -2,
279 	PANNER = -3,
280 	TAIL = -4,
281 	FORCEINT = 65536
282 }
283 
284 enum FMOD_ERRORCALLBACK_INSTANCETYPE {
285 	NONE = 0,
286 	SYSTEM = 1,
287 	CHANNEL = 2,
288 	CHANNELGROUP = 3,
289 	CHANNELCONTROL = 4,
290 	SOUND = 5,
291 	SOUNDGROUP = 6,
292 	DSP = 7,
293 	DSPCONNECTION = 8,
294 	GEOMETRY = 9,
295 	REVERB3D = 10,
296 	STUDIO_SYSTEM = 11,
297 	STUDIO_EVENTDESCRIPTION = 12,
298 	STUDIO_EVENTINSTANCE = 13,
299 	STUDIO_PARAMETERINSTANCE = 14,
300 	STUDIO_CUEINSTANCE = 15,
301 	STUDIO_BUS = 16,
302 	STUDIO_VCA = 17,
303 	STUDIO_BANK = 18,
304 	STUDIO_COMMANDREPLAY = 19,
305 	FORCEINT = 65536
306 }
307 
308 enum FMOD_DSP_RESAMPLER {
309 	DEFAULT = 0,
310 	NOINTERP = 1,
311 	LINEAR = 2,
312 	CUBIC = 3,
313 	SPLINE = 4,
314 	MAX = 5,
315 	FORCEINT = 65536
316 }
317 
318 enum FMOD_DSPCONNECTION_TYPE {
319 	STANDARD = 0,
320 	SIDECHAIN = 1,
321 	SEND = 2,
322 	SEND_SIDECHAIN = 3,
323 	MAX = 4,
324 	FORCEINT = 65536
325 }
326 
327 enum FMOD_TAGTYPE {
328 	UNKNOWN = 0,
329 	ID3V1 = 1,
330 	ID3V2 = 2,
331 	VORBISCOMMENT = 3,
332 	SHOUTCAST = 4,
333 	ICECAST = 5,
334 	ASF = 6,
335 	MIDI = 7,
336 	PLAYLIST = 8,
337 	FMOD = 9,
338 	USER = 10,
339 	MAX = 11,
340 	FORCEINT = 65536
341 }
342 
343 enum FMOD_TAGDATATYPE {
344 	BINARY = 0,
345 	INT = 1,
346 	FLOAT = 2,
347 	STRING = 3,
348 	STRING_UTF16 = 4,
349 	STRING_UTF16BE = 5,
350 	STRING_UTF8 = 6,
351 	CDTOC = 7,
352 	MAX = 8,
353 	FORCEINT = 65536
354 }
355 
356 // TODO: finish this up
357 enum FMOD_INITFLAGS : uint {
358   NORMAL = 0,
359 }
360 
361 struct FMOD_VECTOR {
362 	float x;
363 	float y;
364 	float z;
365 }
366 
367 struct FMOD_3D_ATTRIBUTES {
368 	FMOD_VECTOR position;
369 	FMOD_VECTOR velocity;
370 	FMOD_VECTOR forward;
371 	FMOD_VECTOR up;
372 }
373 
374 struct FMOD_GUID {
375 	uint Data1;
376 	ushort Data2;
377 	ushort Data3;
378 	ubyte[8] Data4;
379 }
380 
381 struct FMOD_ASYNCREADINFO {
382 	void* handle;
383 	uint offset;
384 	uint sizebytes;
385 	int priority;
386 	void* userdata;
387 	void* buffer;
388 	uint bytesread;
389 	FMOD_FILE_ASYNCDONE done;
390 }
391 
392 struct FMOD_ERRORCALLBACK_INFO {
393 	FMOD_RESULT result;
394 	FMOD_ERRORCALLBACK_INSTANCETYPE instancetype;
395 	void* instance;
396 	const(char)* functionname;
397 	const(char)* functionparams;
398 }
399 
400 struct FMOD_TAG {
401 	FMOD_TAGTYPE type;
402 	FMOD_TAGDATATYPE datatype;
403 	char* name;
404 	void* data;
405 	uint datalen;
406 	int updated;
407 }
408 
409 struct FMOD_CREATESOUNDEXINFO {
410 	int cbsize;
411 	uint length;
412 	uint fileoffset;
413 	int numchannels;
414 	int defaultfrequency;
415 	FMOD_SOUND_FORMAT format;
416 	uint decodebuffersize;
417 	int initialsubsound;
418 	int numsubsounds;
419 	int* inclusionlist;
420 	int inclusionlistnum;
421 	FMOD_SOUND_PCMREAD_CALLBACK pcmreadcallback;
422 	FMOD_SOUND_PCMSETPOS_CALLBACK pcmsetposcallback;
423 	FMOD_SOUND_NONBLOCK_CALLBACK nonblockcallback;
424 	const(char)* dlsname;
425 	const(char)* encryptionkey;
426 	int maxpolyphony;
427 	void* userdata;
428 	FMOD_SOUND_TYPE suggestedsoundtype;
429 	FMOD_FILE_OPEN_CALLBACK fileuseropen;
430 	FMOD_FILE_CLOSE_CALLBACK fileuserclose;
431 	FMOD_FILE_READ_CALLBACK fileuserread;
432 	FMOD_FILE_SEEK_CALLBACK fileuserseek;
433 	FMOD_FILE_ASYNCREAD_CALLBACK fileuserasyncread;
434 	FMOD_FILE_ASYNCCANCEL_CALLBACK fileuserasynccancel;
435 	void* fileuserdata;
436 	FMOD_CHANNELORDER channelorder;
437 	uint channelmask;
438 	FMOD_SOUNDGROUP* initialsoundgroup;
439 	uint initialseekposition;
440 	uint initialseekpostype;
441 	int ignoresetfilesystem;
442 	uint audioqueuepolicy;
443 	uint minmidigranularity;
444 	int nonblockthreadid;
445 }
446 
447 struct FMOD_REVERB_PROPERTIES {
448 	float DecayTime;
449 	float EarlyDelay;
450 	float LateDelay;
451 	float HFReference;
452 	float HFDecayRatio;
453 	float Diffusion;
454 	float Density;
455 	float LowShelfFrequency;
456 	float LowShelfGain;
457 	float HighCut;
458 	float EarlyLateMix;
459 	float WetLevel;
460 }
461 
462 struct FMOD_ADVANCEDSETTINGS {
463 	int cbSize;
464 	int maxMPEGCodecs;
465 	int maxADPCMCodecs;
466 	int maxXMACodecs;
467 	int maxVorbisCodecs;
468 	int maxAT9Codecs;
469 	int maxFADPCMCodecs;
470 	int maxPCMCodecs;
471 	int ASIONumChannels;
472 	char** ASIOChannelList;
473 	FMOD_SPEAKER* ASIOSpeakerList;
474 	float HRTFMinAngle;
475 	float HRTFMaxAngle;
476 	float HRTFFreq;
477 	float vol0virtualvol;
478 	uint defaultDecodeBufferSize;
479 	ushort profilePort;
480 	uint geometryMaxFadeTime;
481 	float distanceFilterCenterFreq;
482 	int reverb3Dinstance;
483 	int DSPBufferPoolSize;
484 	uint stackSizeStream;
485 	uint stackSizeNonBlocking;
486 	uint stackSizeMixer;
487 	FMOD_DSP_RESAMPLER resamplerMethod;
488 	uint commandQueueSize;
489 	uint randomSeed;
490 }
491 
492 struct FMOD_SOUND;
493 struct FMOD_CHANNEL;
494 struct FMOD_DSPCONNECTION;
495 struct FMOD_CHANNELCONTROL;
496 struct FMOD_GEOMETRY;
497 struct FMOD_SYSTEM;
498 struct FMOD_REVERB3D;
499 struct FMOD_DSP;
500 struct FMOD_SYNCPOINT;
501 struct FMOD_CHANNELGROUP;
502 struct FMOD_SOUNDGROUP;
503 struct FMOD_POLYGON;
504