1 module fmod.fmod;
2 
3 public import fmod.common;
4 public import fmod.errors;
5 
6 extern (C) {
7   FMOD_RESULT FMOD_Memory_Initialize (void* poolmem, int poollen, FMOD_MEMORY_ALLOC_CALLBACK useralloc, FMOD_MEMORY_REALLOC_CALLBACK userrealloc, FMOD_MEMORY_FREE_CALLBACK userfree, uint memtypeflags);
8   FMOD_RESULT FMOD_Memory_GetStats (int* currentalloced, int* maxalloced, int blocking);
9   FMOD_RESULT FMOD_Debug_Initialize (uint flags, FMOD_DEBUG_MODE mode, FMOD_DEBUG_CALLBACK callback, const(char)* filename);
10   FMOD_RESULT FMOD_File_SetDiskBusy (int busy);
11   FMOD_RESULT FMOD_File_GetDiskBusy (int* busy);
12 
13   // FMOD_System
14   FMOD_RESULT FMOD_System_Create (FMOD_SYSTEM** system);
15   FMOD_RESULT FMOD_System_Release (FMOD_SYSTEM* system);
16   FMOD_RESULT FMOD_System_SetOutput (FMOD_SYSTEM* system, FMOD_OUTPUTTYPE output);
17   FMOD_RESULT FMOD_System_GetOutput (FMOD_SYSTEM* system, FMOD_OUTPUTTYPE* output);
18   FMOD_RESULT FMOD_System_GetNumDrivers (FMOD_SYSTEM* system, int* numdrivers);
19   FMOD_RESULT FMOD_System_GetDriverInfo (FMOD_SYSTEM* system, int id, char* name, int namelen, FMOD_GUID* guid, int* systemrate, FMOD_SPEAKERMODE* speakermode, int* speakermodechannels);
20   FMOD_RESULT FMOD_System_SetDriver (FMOD_SYSTEM* system, int driver);
21   FMOD_RESULT FMOD_System_GetDriver (FMOD_SYSTEM* system, int* driver);
22   FMOD_RESULT FMOD_System_SetSoftwareChannels (FMOD_SYSTEM* system, int numsoftwarechannels);
23   FMOD_RESULT FMOD_System_GetSoftwareChannels (FMOD_SYSTEM* system, int* numsoftwarechannels);
24   FMOD_RESULT FMOD_System_SetSoftwareFormat (FMOD_SYSTEM* system, int samplerate, FMOD_SPEAKERMODE speakermode, int numrawspeakers);
25   FMOD_RESULT FMOD_System_GetSoftwareFormat (FMOD_SYSTEM* system, int* samplerate, FMOD_SPEAKERMODE* speakermode, int* numrawspeakers);
26   FMOD_RESULT FMOD_System_SetFileSystem (FMOD_SYSTEM* system, FMOD_FILE_OPEN_CALLBACK useropen, FMOD_FILE_CLOSE_CALLBACK userclose, FMOD_FILE_READ_CALLBACK userread, FMOD_FILE_SEEK_CALLBACK userseek, FMOD_FILE_ASYNCREAD_CALLBACK userasyncread, FMOD_FILE_ASYNCCANCEL_CALLBACK userasynccancel, int blockalign);
27   FMOD_RESULT FMOD_System_AttachFileSystem (FMOD_SYSTEM* system, FMOD_FILE_OPEN_CALLBACK useropen, FMOD_FILE_CLOSE_CALLBACK userclose, FMOD_FILE_READ_CALLBACK userread, FMOD_FILE_SEEK_CALLBACK userseek);
28   FMOD_RESULT FMOD_System_SetAdvancedSettings (FMOD_SYSTEM* system, FMOD_ADVANCEDSETTINGS* settings);
29   FMOD_RESULT FMOD_System_GetAdvancedSettings (FMOD_SYSTEM* system, FMOD_ADVANCEDSETTINGS* settings);
30   FMOD_RESULT FMOD_System_SetCallback (FMOD_SYSTEM* system, FMOD_SYSTEM_CALLBACK callback, uint callbackmask);
31   FMOD_RESULT FMOD_System_SetPluginPath (FMOD_SYSTEM* system, const(char)* path);
32   FMOD_RESULT FMOD_System_LoadPlugin (FMOD_SYSTEM* system, const(char)* filename, uint* handle, uint priority);
33   FMOD_RESULT FMOD_System_UnloadPlugin (FMOD_SYSTEM* system, uint handle);
34   FMOD_RESULT FMOD_System_GetNumPlugins (FMOD_SYSTEM* system, FMOD_PLUGINTYPE plugintype, int* numplugins);
35   FMOD_RESULT FMOD_System_GetPluginHandle (FMOD_SYSTEM* system, FMOD_PLUGINTYPE plugintype, int index, uint* handle);
36   FMOD_RESULT FMOD_System_GetPluginInfo (FMOD_SYSTEM* system, uint handle, FMOD_PLUGINTYPE* plugintype, char* name, int namelen, uint* version_);
37   FMOD_RESULT FMOD_System_SetOutputByPlugin (FMOD_SYSTEM* system, uint handle);
38   FMOD_RESULT FMOD_System_GetOutputByPlugin (FMOD_SYSTEM* system, uint* handle);
39   FMOD_RESULT FMOD_System_Init (FMOD_SYSTEM* system, int maxchannels, uint flags, void* extradriverdata);
40   FMOD_RESULT FMOD_System_Close (FMOD_SYSTEM* system);
41   FMOD_RESULT FMOD_System_Update (FMOD_SYSTEM* system);
42   FMOD_RESULT FMOD_System_SetSpeakerPosition (FMOD_SYSTEM* system, FMOD_SPEAKER speaker, float x, float y, int active);
43   FMOD_RESULT FMOD_System_GetSpeakerPosition (FMOD_SYSTEM* system, FMOD_SPEAKER speaker, float* x, float* y, int* active);
44   FMOD_RESULT FMOD_System_SetStreamBufferSize (FMOD_SYSTEM* system, uint filebuffersize, uint filebuffersizetype);
45   FMOD_RESULT FMOD_System_GetStreamBufferSize (FMOD_SYSTEM* system, uint* filebuffersize, uint* filebuffersizetype);
46   FMOD_RESULT FMOD_System_Set3DSettings (FMOD_SYSTEM* system, float dopplerscale, float distancefactor, float rolloffscale);
47   FMOD_RESULT FMOD_System_Get3DSettings (FMOD_SYSTEM* system, float* dopplerscale, float* distancefactor, float* rolloffscale);
48   FMOD_RESULT FMOD_System_Set3DNumListeners (FMOD_SYSTEM* system, int numlisteners);
49   FMOD_RESULT FMOD_System_Get3DNumListeners (FMOD_SYSTEM* system, int* numlisteners);
50   FMOD_RESULT FMOD_System_CreateSound (FMOD_SYSTEM* system, const(char)* name_or_data, uint mode, FMOD_CREATESOUNDEXINFO* exinfo, FMOD_SOUND** sound);
51   FMOD_RESULT FMOD_System_PlaySound (FMOD_SYSTEM* system, FMOD_SOUND* sound, FMOD_CHANNELGROUP* channelgroup, int paused, FMOD_CHANNEL** channel);
52 
53   // TO BE IMPLEMENTTED:
54   FMOD_RESULT FMOD_System_Set3DListenerAttributes (FMOD_SYSTEM* system, int listener, const(FMOD_VECTOR)* pos, const(FMOD_VECTOR)* vel, const(FMOD_VECTOR)* forward, const(FMOD_VECTOR)* up);
55   FMOD_RESULT FMOD_System_Get3DListenerAttributes (FMOD_SYSTEM* system, int listener, FMOD_VECTOR* pos, FMOD_VECTOR* vel, FMOD_VECTOR* forward, FMOD_VECTOR* up);
56   FMOD_RESULT FMOD_System_Set3DRolloffCallback (FMOD_SYSTEM* system, FMOD_3D_ROLLOFF_CALLBACK callback);
57   FMOD_RESULT FMOD_System_MixerSuspend (FMOD_SYSTEM* system);
58   FMOD_RESULT FMOD_System_MixerResume (FMOD_SYSTEM* system);
59   FMOD_RESULT FMOD_System_GetDefaultMixMatrix (FMOD_SYSTEM* system, FMOD_SPEAKERMODE sourcespeakermode, FMOD_SPEAKERMODE targetspeakermode, float* matrix, int matrixhop);
60   FMOD_RESULT FMOD_System_GetSpeakerModeChannels (FMOD_SYSTEM* system, FMOD_SPEAKERMODE mode, int* channels);
61   FMOD_RESULT FMOD_System_GetVersion (FMOD_SYSTEM* system, uint* version_);
62   FMOD_RESULT FMOD_System_GetOutputHandle (FMOD_SYSTEM* system, void** handle);
63   FMOD_RESULT FMOD_System_GetChannelsPlaying (FMOD_SYSTEM* system, int* channels);
64   FMOD_RESULT FMOD_System_GetCPUUsage (FMOD_SYSTEM* system, float* dsp, float* stream, float* geometry, float* update, float* total);
65   FMOD_RESULT FMOD_System_GetSoundRAM (FMOD_SYSTEM* system, int* currentalloced, int* maxalloced, int* total);
66   FMOD_RESULT FMOD_System_CreateChannelGroup (FMOD_SYSTEM* system, const(char)* name, FMOD_CHANNELGROUP** channelgroup);
67   FMOD_RESULT FMOD_System_CreateSoundGroup (FMOD_SYSTEM* system, const(char)* name, FMOD_SOUNDGROUP** soundgroup);
68   FMOD_RESULT FMOD_System_CreateReverb3D (FMOD_SYSTEM* system, FMOD_REVERB3D** reverb);
69   FMOD_RESULT FMOD_System_CreateStream (FMOD_SYSTEM* system, const(char)* name_or_data, uint mode, FMOD_CREATESOUNDEXINFO* exinfo, FMOD_SOUND** sound);
70   FMOD_RESULT FMOD_System_GetChannel (FMOD_SYSTEM* system, int channelid, FMOD_CHANNEL** channel);
71   FMOD_RESULT FMOD_System_GetMasterChannelGroup (FMOD_SYSTEM* system, FMOD_CHANNELGROUP** channelgroup);
72   FMOD_RESULT FMOD_System_GetMasterSoundGroup (FMOD_SYSTEM* system, FMOD_SOUNDGROUP** soundgroup);
73   FMOD_RESULT FMOD_System_AttachChannelGroupToPort (FMOD_SYSTEM* system, uint portType, ulong portIndex, FMOD_CHANNELGROUP* channelgroup, int passThru);
74   FMOD_RESULT FMOD_System_DetachChannelGroupFromPort (FMOD_SYSTEM* system, FMOD_CHANNELGROUP* channelgroup);
75   FMOD_RESULT FMOD_System_SetReverbProperties (FMOD_SYSTEM* system, int instance, const(FMOD_REVERB_PROPERTIES)* prop);
76   FMOD_RESULT FMOD_System_GetReverbProperties (FMOD_SYSTEM* system, int instance, FMOD_REVERB_PROPERTIES* prop);
77   FMOD_RESULT FMOD_System_GetRecordNumDrivers (FMOD_SYSTEM* system, int* numdrivers, int* numconnected);
78   FMOD_RESULT FMOD_System_GetRecordDriverInfo (FMOD_SYSTEM* system, int id, char* name, int namelen, FMOD_GUID* guid, int* systemrate, FMOD_SPEAKERMODE* speakermode, int* speakermodechannels, uint* state);
79   FMOD_RESULT FMOD_System_GetRecordPosition (FMOD_SYSTEM* system, int id, uint* position);
80   FMOD_RESULT FMOD_System_RecordStart (FMOD_SYSTEM* system, int id, FMOD_SOUND* sound, int loop);
81   FMOD_RESULT FMOD_System_RecordStop (FMOD_SYSTEM* system, int id);
82   FMOD_RESULT FMOD_System_IsRecording (FMOD_SYSTEM* system, int id, int* recording);
83   FMOD_RESULT FMOD_System_CreateGeometry (FMOD_SYSTEM* system, int maxpolygons, int maxvertices, FMOD_GEOMETRY** geometry);
84   FMOD_RESULT FMOD_System_SetGeometrySettings (FMOD_SYSTEM* system, float maxworldsize);
85   FMOD_RESULT FMOD_System_GetGeometrySettings (FMOD_SYSTEM* system, float* maxworldsize);
86   FMOD_RESULT FMOD_System_LoadGeometry (FMOD_SYSTEM* system, const(void)* data, int datasize, FMOD_GEOMETRY** geometry);
87   FMOD_RESULT FMOD_System_GetGeometryOcclusion (FMOD_SYSTEM* system, const(FMOD_VECTOR)* listener, const(FMOD_VECTOR)* source, float* direct, float* reverb);
88   FMOD_RESULT FMOD_System_SetNetworkProxy (FMOD_SYSTEM* system, const(char)* proxy);
89   FMOD_RESULT FMOD_System_GetNetworkProxy (FMOD_SYSTEM* system, char* proxy, int proxylen);
90   FMOD_RESULT FMOD_System_SetNetworkTimeout (FMOD_SYSTEM* system, int timeout);
91   FMOD_RESULT FMOD_System_GetNetworkTimeout (FMOD_SYSTEM* system, int* timeout);
92   FMOD_RESULT FMOD_System_SetUserData (FMOD_SYSTEM* system, void* userdata);
93   FMOD_RESULT FMOD_System_GetUserData (FMOD_SYSTEM* system, void** userdata);
94   FMOD_RESULT FMOD_Sound_Release (FMOD_SOUND* sound);
95   FMOD_RESULT FMOD_Sound_GetSystemObject (FMOD_SOUND* sound, FMOD_SYSTEM** system);
96   FMOD_RESULT FMOD_Sound_Lock (FMOD_SOUND* sound, uint offset, uint length, void** ptr1, void** ptr2, uint* len1, uint* len2);
97   FMOD_RESULT FMOD_Sound_Unlock (FMOD_SOUND* sound, void* ptr1, void* ptr2, uint len1, uint len2);
98   FMOD_RESULT FMOD_Sound_SetDefaults (FMOD_SOUND* sound, float frequency, int priority);
99   FMOD_RESULT FMOD_Sound_GetDefaults (FMOD_SOUND* sound, float* frequency, int* priority);
100   FMOD_RESULT FMOD_Sound_Set3DMinMaxDistance (FMOD_SOUND* sound, float min, float max);
101   FMOD_RESULT FMOD_Sound_Get3DMinMaxDistance (FMOD_SOUND* sound, float* min, float* max);
102   FMOD_RESULT FMOD_Sound_Set3DConeSettings (FMOD_SOUND* sound, float insideconeangle, float outsideconeangle, float outsidevolume);
103   FMOD_RESULT FMOD_Sound_Get3DConeSettings (FMOD_SOUND* sound, float* insideconeangle, float* outsideconeangle, float* outsidevolume);
104   FMOD_RESULT FMOD_Sound_Set3DCustomRolloff (FMOD_SOUND* sound, FMOD_VECTOR* points, int numpoints);
105   FMOD_RESULT FMOD_Sound_Get3DCustomRolloff (FMOD_SOUND* sound, FMOD_VECTOR** points, int* numpoints);
106   FMOD_RESULT FMOD_Sound_SetSubSound (FMOD_SOUND* sound, int index, FMOD_SOUND* subsound);
107   FMOD_RESULT FMOD_Sound_GetSubSound (FMOD_SOUND* sound, int index, FMOD_SOUND** subsound);
108   FMOD_RESULT FMOD_Sound_GetSubSoundParent (FMOD_SOUND* sound, FMOD_SOUND** parentsound);
109   FMOD_RESULT FMOD_Sound_GetName (FMOD_SOUND* sound, char* name, int namelen);
110   FMOD_RESULT FMOD_Sound_GetLength (FMOD_SOUND* sound, uint* length, uint lengthtype);
111   FMOD_RESULT FMOD_Sound_GetFormat (FMOD_SOUND* sound, FMOD_SOUND_TYPE* type, FMOD_SOUND_FORMAT* format, int* channels, int* bits);
112   FMOD_RESULT FMOD_Sound_GetNumSubSounds (FMOD_SOUND* sound, int* numsubsounds);
113   FMOD_RESULT FMOD_Sound_GetNumTags (FMOD_SOUND* sound, int* numtags, int* numtagsupdated);
114   FMOD_RESULT FMOD_Sound_GetTag (FMOD_SOUND* sound, const(char)* name, int index, FMOD_TAG* tag);
115   FMOD_RESULT FMOD_Sound_GetOpenState (FMOD_SOUND* sound, FMOD_OPENSTATE* openstate, uint* percentbuffered, int* starving, int* diskbusy);
116   FMOD_RESULT FMOD_Sound_ReadData (FMOD_SOUND* sound, void* buffer, uint lenbytes, uint* read);
117   FMOD_RESULT FMOD_Sound_SeekData (FMOD_SOUND* sound, uint pcm);
118   FMOD_RESULT FMOD_Sound_SetSoundGroup (FMOD_SOUND* sound, FMOD_SOUNDGROUP* soundgroup);
119   FMOD_RESULT FMOD_Sound_GetSoundGroup (FMOD_SOUND* sound, FMOD_SOUNDGROUP** soundgroup);
120   FMOD_RESULT FMOD_Sound_GetNumSyncPoints (FMOD_SOUND* sound, int* numsyncpoints);
121   FMOD_RESULT FMOD_Sound_GetSyncPoint (FMOD_SOUND* sound, int index, FMOD_SYNCPOINT** point);
122   FMOD_RESULT FMOD_Sound_GetSyncPointInfo (FMOD_SOUND* sound, FMOD_SYNCPOINT* point, char* name, int namelen, uint* offset, uint offsettype);
123   FMOD_RESULT FMOD_Sound_AddSyncPoint (FMOD_SOUND* sound, uint offset, uint offsettype, const(char)* name, FMOD_SYNCPOINT** point);
124   FMOD_RESULT FMOD_Sound_DeleteSyncPoint (FMOD_SOUND* sound, FMOD_SYNCPOINT* point);
125   FMOD_RESULT FMOD_Sound_SetMode (FMOD_SOUND* sound, uint mode);
126   FMOD_RESULT FMOD_Sound_GetMode (FMOD_SOUND* sound, uint* mode);
127   FMOD_RESULT FMOD_Sound_SetLoopCount (FMOD_SOUND* sound, int loopcount);
128   FMOD_RESULT FMOD_Sound_GetLoopCount (FMOD_SOUND* sound, int* loopcount);
129   FMOD_RESULT FMOD_Sound_SetLoopPoints (FMOD_SOUND* sound, uint loopstart, uint loopstarttype, uint loopend, uint loopendtype);
130   FMOD_RESULT FMOD_Sound_GetLoopPoints (FMOD_SOUND* sound, uint* loopstart, uint loopstarttype, uint* loopend, uint loopendtype);
131   FMOD_RESULT FMOD_Sound_GetMusicNumChannels (FMOD_SOUND* sound, int* numchannels);
132   FMOD_RESULT FMOD_Sound_SetMusicChannelVolume (FMOD_SOUND* sound, int channel, float volume);
133   FMOD_RESULT FMOD_Sound_GetMusicChannelVolume (FMOD_SOUND* sound, int channel, float* volume);
134   FMOD_RESULT FMOD_Sound_SetMusicSpeed (FMOD_SOUND* sound, float speed);
135   FMOD_RESULT FMOD_Sound_GetMusicSpeed (FMOD_SOUND* sound, float* speed);
136   FMOD_RESULT FMOD_Sound_SetUserData (FMOD_SOUND* sound, void* userdata);
137   FMOD_RESULT FMOD_Sound_GetUserData (FMOD_SOUND* sound, void** userdata);
138   FMOD_RESULT FMOD_Channel_GetSystemObject (FMOD_CHANNEL* channel, FMOD_SYSTEM** system);
139   FMOD_RESULT FMOD_Channel_Stop (FMOD_CHANNEL* channel);
140   FMOD_RESULT FMOD_Channel_SetPaused (FMOD_CHANNEL* channel, int paused);
141   FMOD_RESULT FMOD_Channel_GetPaused (FMOD_CHANNEL* channel, int* paused);
142   FMOD_RESULT FMOD_Channel_SetVolume (FMOD_CHANNEL* channel, float volume);
143   FMOD_RESULT FMOD_Channel_GetVolume (FMOD_CHANNEL* channel, float* volume);
144   FMOD_RESULT FMOD_Channel_SetVolumeRamp (FMOD_CHANNEL* channel, int ramp);
145   FMOD_RESULT FMOD_Channel_GetVolumeRamp (FMOD_CHANNEL* channel, int* ramp);
146   FMOD_RESULT FMOD_Channel_GetAudibility (FMOD_CHANNEL* channel, float* audibility);
147   FMOD_RESULT FMOD_Channel_SetPitch (FMOD_CHANNEL* channel, float pitch);
148   FMOD_RESULT FMOD_Channel_GetPitch (FMOD_CHANNEL* channel, float* pitch);
149   FMOD_RESULT FMOD_Channel_SetMute (FMOD_CHANNEL* channel, int mute);
150   FMOD_RESULT FMOD_Channel_GetMute (FMOD_CHANNEL* channel, int* mute);
151   FMOD_RESULT FMOD_Channel_SetReverbProperties (FMOD_CHANNEL* channel, int instance, float wet);
152   FMOD_RESULT FMOD_Channel_GetReverbProperties (FMOD_CHANNEL* channel, int instance, float* wet);
153   FMOD_RESULT FMOD_Channel_SetLowPassGain (FMOD_CHANNEL* channel, float gain);
154   FMOD_RESULT FMOD_Channel_GetLowPassGain (FMOD_CHANNEL* channel, float* gain);
155   FMOD_RESULT FMOD_Channel_SetMode (FMOD_CHANNEL* channel, uint mode);
156   FMOD_RESULT FMOD_Channel_GetMode (FMOD_CHANNEL* channel, uint* mode);
157   FMOD_RESULT FMOD_Channel_SetCallback (FMOD_CHANNEL* channel, FMOD_CHANNELCONTROL_CALLBACK callback);
158   FMOD_RESULT FMOD_Channel_IsPlaying (FMOD_CHANNEL* channel, int* isplaying);
159   FMOD_RESULT FMOD_Channel_SetPan (FMOD_CHANNEL* channel, float pan);
160   FMOD_RESULT FMOD_Channel_SetMixLevelsOutput (FMOD_CHANNEL* channel, float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright);
161   FMOD_RESULT FMOD_Channel_SetMixLevelsInput (FMOD_CHANNEL* channel, float* levels, int numlevels);
162   FMOD_RESULT FMOD_Channel_SetMixMatrix (FMOD_CHANNEL* channel, float* matrix, int outchannels, int inchannels, int inchannel_hop);
163   FMOD_RESULT FMOD_Channel_GetMixMatrix (FMOD_CHANNEL* channel, float* matrix, int* outchannels, int* inchannels, int inchannel_hop);
164   FMOD_RESULT FMOD_Channel_SetDelay (FMOD_CHANNEL* channel, ulong dspclock_start, ulong dspclock_end, int stopchannels);
165   FMOD_RESULT FMOD_Channel_GetDelay (FMOD_CHANNEL* channel, ulong* dspclock_start, ulong* dspclock_end, int* stopchannels);
166   FMOD_RESULT FMOD_Channel_AddFadePoint (FMOD_CHANNEL* channel, ulong dspclock, float volume);
167   FMOD_RESULT FMOD_Channel_SetFadePointRamp (FMOD_CHANNEL* channel, ulong dspclock, float volume);
168   FMOD_RESULT FMOD_Channel_RemoveFadePoints (FMOD_CHANNEL* channel, ulong dspclock_start, ulong dspclock_end);
169   FMOD_RESULT FMOD_Channel_GetFadePoints (FMOD_CHANNEL* channel, uint* numpoints, ulong* point_dspclock, float* point_volume);
170   FMOD_RESULT FMOD_Channel_Set3DAttributes (FMOD_CHANNEL* channel, const(FMOD_VECTOR)* pos, const(FMOD_VECTOR)* vel, const(FMOD_VECTOR)* alt_pan_pos);
171   FMOD_RESULT FMOD_Channel_Get3DAttributes (FMOD_CHANNEL* channel, FMOD_VECTOR* pos, FMOD_VECTOR* vel, FMOD_VECTOR* alt_pan_pos);
172   FMOD_RESULT FMOD_Channel_Set3DMinMaxDistance (FMOD_CHANNEL* channel, float mindistance, float maxdistance);
173   FMOD_RESULT FMOD_Channel_Get3DMinMaxDistance (FMOD_CHANNEL* channel, float* mindistance, float* maxdistance);
174   FMOD_RESULT FMOD_Channel_Set3DConeSettings (FMOD_CHANNEL* channel, float insideconeangle, float outsideconeangle, float outsidevolume);
175   FMOD_RESULT FMOD_Channel_Get3DConeSettings (FMOD_CHANNEL* channel, float* insideconeangle, float* outsideconeangle, float* outsidevolume);
176   FMOD_RESULT FMOD_Channel_Set3DConeOrientation (FMOD_CHANNEL* channel, FMOD_VECTOR* orientation);
177   FMOD_RESULT FMOD_Channel_Get3DConeOrientation (FMOD_CHANNEL* channel, FMOD_VECTOR* orientation);
178   FMOD_RESULT FMOD_Channel_Set3DCustomRolloff (FMOD_CHANNEL* channel, FMOD_VECTOR* points, int numpoints);
179   FMOD_RESULT FMOD_Channel_Get3DCustomRolloff (FMOD_CHANNEL* channel, FMOD_VECTOR** points, int* numpoints);
180   FMOD_RESULT FMOD_Channel_Set3DOcclusion (FMOD_CHANNEL* channel, float directocclusion, float reverbocclusion);
181   FMOD_RESULT FMOD_Channel_Get3DOcclusion (FMOD_CHANNEL* channel, float* directocclusion, float* reverbocclusion);
182   FMOD_RESULT FMOD_Channel_Set3DSpread (FMOD_CHANNEL* channel, float angle);
183   FMOD_RESULT FMOD_Channel_Get3DSpread (FMOD_CHANNEL* channel, float* angle);
184   FMOD_RESULT FMOD_Channel_Set3DLevel (FMOD_CHANNEL* channel, float level);
185   FMOD_RESULT FMOD_Channel_Get3DLevel (FMOD_CHANNEL* channel, float* level);
186   FMOD_RESULT FMOD_Channel_Set3DDopplerLevel (FMOD_CHANNEL* channel, float level);
187   FMOD_RESULT FMOD_Channel_Get3DDopplerLevel (FMOD_CHANNEL* channel, float* level);
188   FMOD_RESULT FMOD_Channel_Set3DDistanceFilter (FMOD_CHANNEL* channel, int custom, float customLevel, float centerFreq);
189   FMOD_RESULT FMOD_Channel_Get3DDistanceFilter (FMOD_CHANNEL* channel, int* custom, float* customLevel, float* centerFreq);
190   FMOD_RESULT FMOD_Channel_SetUserData (FMOD_CHANNEL* channel, void* userdata);
191   FMOD_RESULT FMOD_Channel_GetUserData (FMOD_CHANNEL* channel, void** userdata);
192   FMOD_RESULT FMOD_Channel_SetFrequency (FMOD_CHANNEL* channel, float frequency);
193   FMOD_RESULT FMOD_Channel_GetFrequency (FMOD_CHANNEL* channel, float* frequency);
194   FMOD_RESULT FMOD_Channel_SetPriority (FMOD_CHANNEL* channel, int priority);
195   FMOD_RESULT FMOD_Channel_GetPriority (FMOD_CHANNEL* channel, int* priority);
196   FMOD_RESULT FMOD_Channel_SetPosition (FMOD_CHANNEL* channel, uint position, uint postype);
197   FMOD_RESULT FMOD_Channel_GetPosition (FMOD_CHANNEL* channel, uint* position, uint postype);
198   FMOD_RESULT FMOD_Channel_SetChannelGroup (FMOD_CHANNEL* channel, FMOD_CHANNELGROUP* channelgroup);
199   FMOD_RESULT FMOD_Channel_GetChannelGroup (FMOD_CHANNEL* channel, FMOD_CHANNELGROUP** channelgroup);
200   FMOD_RESULT FMOD_Channel_SetLoopCount (FMOD_CHANNEL* channel, int loopcount);
201   FMOD_RESULT FMOD_Channel_GetLoopCount (FMOD_CHANNEL* channel, int* loopcount);
202   FMOD_RESULT FMOD_Channel_SetLoopPoints (FMOD_CHANNEL* channel, uint loopstart, uint loopstarttype, uint loopend, uint loopendtype);
203   FMOD_RESULT FMOD_Channel_GetLoopPoints (FMOD_CHANNEL* channel, uint* loopstart, uint loopstarttype, uint* loopend, uint loopendtype);
204   FMOD_RESULT FMOD_Channel_IsVirtual (FMOD_CHANNEL* channel, int* isvirtual);
205   FMOD_RESULT FMOD_Channel_GetCurrentSound (FMOD_CHANNEL* channel, FMOD_SOUND** sound);
206   FMOD_RESULT FMOD_Channel_GetIndex (FMOD_CHANNEL* channel, int* index);
207   FMOD_RESULT FMOD_ChannelGroup_GetSystemObject (FMOD_CHANNELGROUP* channelgroup, FMOD_SYSTEM** system);
208   FMOD_RESULT FMOD_ChannelGroup_Stop (FMOD_CHANNELGROUP* channelgroup);
209   FMOD_RESULT FMOD_ChannelGroup_SetPaused (FMOD_CHANNELGROUP* channelgroup, int paused);
210   FMOD_RESULT FMOD_ChannelGroup_GetPaused (FMOD_CHANNELGROUP* channelgroup, int* paused);
211   FMOD_RESULT FMOD_ChannelGroup_SetVolume (FMOD_CHANNELGROUP* channelgroup, float volume);
212   FMOD_RESULT FMOD_ChannelGroup_GetVolume (FMOD_CHANNELGROUP* channelgroup, float* volume);
213   FMOD_RESULT FMOD_ChannelGroup_SetVolumeRamp (FMOD_CHANNELGROUP* channelgroup, int ramp);
214   FMOD_RESULT FMOD_ChannelGroup_GetVolumeRamp (FMOD_CHANNELGROUP* channelgroup, int* ramp);
215   FMOD_RESULT FMOD_ChannelGroup_GetAudibility (FMOD_CHANNELGROUP* channelgroup, float* audibility);
216   FMOD_RESULT FMOD_ChannelGroup_SetPitch (FMOD_CHANNELGROUP* channelgroup, float pitch);
217   FMOD_RESULT FMOD_ChannelGroup_GetPitch (FMOD_CHANNELGROUP* channelgroup, float* pitch);
218   FMOD_RESULT FMOD_ChannelGroup_SetMute (FMOD_CHANNELGROUP* channelgroup, int mute);
219   FMOD_RESULT FMOD_ChannelGroup_GetMute (FMOD_CHANNELGROUP* channelgroup, int* mute);
220   FMOD_RESULT FMOD_ChannelGroup_SetReverbProperties (FMOD_CHANNELGROUP* channelgroup, int instance, float wet);
221   FMOD_RESULT FMOD_ChannelGroup_GetReverbProperties (FMOD_CHANNELGROUP* channelgroup, int instance, float* wet);
222   FMOD_RESULT FMOD_ChannelGroup_SetLowPassGain (FMOD_CHANNELGROUP* channelgroup, float gain);
223   FMOD_RESULT FMOD_ChannelGroup_GetLowPassGain (FMOD_CHANNELGROUP* channelgroup, float* gain);
224   FMOD_RESULT FMOD_ChannelGroup_SetMode (FMOD_CHANNELGROUP* channelgroup, uint mode);
225   FMOD_RESULT FMOD_ChannelGroup_GetMode (FMOD_CHANNELGROUP* channelgroup, uint* mode);
226   FMOD_RESULT FMOD_ChannelGroup_SetCallback (FMOD_CHANNELGROUP* channelgroup, FMOD_CHANNELCONTROL_CALLBACK callback);
227   FMOD_RESULT FMOD_ChannelGroup_IsPlaying (FMOD_CHANNELGROUP* channelgroup, int* isplaying);
228   FMOD_RESULT FMOD_ChannelGroup_SetPan (FMOD_CHANNELGROUP* channelgroup, float pan);
229   FMOD_RESULT FMOD_ChannelGroup_SetMixLevelsOutput (FMOD_CHANNELGROUP* channelgroup, float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright);
230   FMOD_RESULT FMOD_ChannelGroup_SetMixLevelsInput (FMOD_CHANNELGROUP* channelgroup, float* levels, int numlevels);
231   FMOD_RESULT FMOD_ChannelGroup_SetMixMatrix (FMOD_CHANNELGROUP* channelgroup, float* matrix, int outchannels, int inchannels, int inchannel_hop);
232   FMOD_RESULT FMOD_ChannelGroup_GetMixMatrix (FMOD_CHANNELGROUP* channelgroup, float* matrix, int* outchannels, int* inchannels, int inchannel_hop);
233   FMOD_RESULT FMOD_ChannelGroup_SetDelay (FMOD_CHANNELGROUP* channelgroup, ulong dspclock_start, ulong dspclock_end, int stopchannels);
234   FMOD_RESULT FMOD_ChannelGroup_GetDelay (FMOD_CHANNELGROUP* channelgroup, ulong* dspclock_start, ulong* dspclock_end, int* stopchannels);
235   FMOD_RESULT FMOD_ChannelGroup_AddFadePoint (FMOD_CHANNELGROUP* channelgroup, ulong dspclock, float volume);
236   FMOD_RESULT FMOD_ChannelGroup_SetFadePointRamp (FMOD_CHANNELGROUP* channelgroup, ulong dspclock, float volume);
237   FMOD_RESULT FMOD_ChannelGroup_RemoveFadePoints (FMOD_CHANNELGROUP* channelgroup, ulong dspclock_start, ulong dspclock_end);
238   FMOD_RESULT FMOD_ChannelGroup_GetFadePoints (FMOD_CHANNELGROUP* channelgroup, uint* numpoints, ulong* point_dspclock, float* point_volume);
239   FMOD_RESULT FMOD_ChannelGroup_Set3DAttributes (FMOD_CHANNELGROUP* channelgroup, const(FMOD_VECTOR)* pos, const(FMOD_VECTOR)* vel, const(FMOD_VECTOR)* alt_pan_pos);
240   FMOD_RESULT FMOD_ChannelGroup_Get3DAttributes (FMOD_CHANNELGROUP* channelgroup, FMOD_VECTOR* pos, FMOD_VECTOR* vel, FMOD_VECTOR* alt_pan_pos);
241   FMOD_RESULT FMOD_ChannelGroup_Set3DMinMaxDistance (FMOD_CHANNELGROUP* channelgroup, float mindistance, float maxdistance);
242   FMOD_RESULT FMOD_ChannelGroup_Get3DMinMaxDistance (FMOD_CHANNELGROUP* channelgroup, float* mindistance, float* maxdistance);
243   FMOD_RESULT FMOD_ChannelGroup_Set3DConeSettings (FMOD_CHANNELGROUP* channelgroup, float insideconeangle, float outsideconeangle, float outsidevolume);
244   FMOD_RESULT FMOD_ChannelGroup_Get3DConeSettings (FMOD_CHANNELGROUP* channelgroup, float* insideconeangle, float* outsideconeangle, float* outsidevolume);
245   FMOD_RESULT FMOD_ChannelGroup_Set3DConeOrientation (FMOD_CHANNELGROUP* channelgroup, FMOD_VECTOR* orientation);
246   FMOD_RESULT FMOD_ChannelGroup_Get3DConeOrientation (FMOD_CHANNELGROUP* channelgroup, FMOD_VECTOR* orientation);
247   FMOD_RESULT FMOD_ChannelGroup_Set3DCustomRolloff (FMOD_CHANNELGROUP* channelgroup, FMOD_VECTOR* points, int numpoints);
248   FMOD_RESULT FMOD_ChannelGroup_Get3DCustomRolloff (FMOD_CHANNELGROUP* channelgroup, FMOD_VECTOR** points, int* numpoints);
249   FMOD_RESULT FMOD_ChannelGroup_Set3DOcclusion (FMOD_CHANNELGROUP* channelgroup, float directocclusion, float reverbocclusion);
250   FMOD_RESULT FMOD_ChannelGroup_Get3DOcclusion (FMOD_CHANNELGROUP* channelgroup, float* directocclusion, float* reverbocclusion);
251   FMOD_RESULT FMOD_ChannelGroup_Set3DSpread (FMOD_CHANNELGROUP* channelgroup, float angle);
252   FMOD_RESULT FMOD_ChannelGroup_Get3DSpread (FMOD_CHANNELGROUP* channelgroup, float* angle);
253   FMOD_RESULT FMOD_ChannelGroup_Set3DLevel (FMOD_CHANNELGROUP* channelgroup, float level);
254   FMOD_RESULT FMOD_ChannelGroup_Get3DLevel (FMOD_CHANNELGROUP* channelgroup, float* level);
255   FMOD_RESULT FMOD_ChannelGroup_Set3DDopplerLevel (FMOD_CHANNELGROUP* channelgroup, float level);
256   FMOD_RESULT FMOD_ChannelGroup_Get3DDopplerLevel (FMOD_CHANNELGROUP* channelgroup, float* level);
257   FMOD_RESULT FMOD_ChannelGroup_Set3DDistanceFilter (FMOD_CHANNELGROUP* channelgroup, int custom, float customLevel, float centerFreq);
258   FMOD_RESULT FMOD_ChannelGroup_Get3DDistanceFilter (FMOD_CHANNELGROUP* channelgroup, int* custom, float* customLevel, float* centerFreq);
259   FMOD_RESULT FMOD_ChannelGroup_SetUserData (FMOD_CHANNELGROUP* channelgroup, void* userdata);
260   FMOD_RESULT FMOD_ChannelGroup_GetUserData (FMOD_CHANNELGROUP* channelgroup, void** userdata);
261   FMOD_RESULT FMOD_ChannelGroup_Release (FMOD_CHANNELGROUP* channelgroup);
262   FMOD_RESULT FMOD_ChannelGroup_GetNumGroups (FMOD_CHANNELGROUP* channelgroup, int* numgroups);
263   FMOD_RESULT FMOD_ChannelGroup_GetGroup (FMOD_CHANNELGROUP* channelgroup, int index, FMOD_CHANNELGROUP** group);
264   FMOD_RESULT FMOD_ChannelGroup_GetParentGroup (FMOD_CHANNELGROUP* channelgroup, FMOD_CHANNELGROUP** group);
265   FMOD_RESULT FMOD_ChannelGroup_GetName (FMOD_CHANNELGROUP* channelgroup, char* name, int namelen);
266   FMOD_RESULT FMOD_ChannelGroup_GetNumChannels (FMOD_CHANNELGROUP* channelgroup, int* numchannels);
267   FMOD_RESULT FMOD_ChannelGroup_GetChannel (FMOD_CHANNELGROUP* channelgroup, int index, FMOD_CHANNEL** channel);
268   FMOD_RESULT FMOD_SoundGroup_Release (FMOD_SOUNDGROUP* soundgroup);
269   FMOD_RESULT FMOD_SoundGroup_GetSystemObject (FMOD_SOUNDGROUP* soundgroup, FMOD_SYSTEM** system);
270   FMOD_RESULT FMOD_SoundGroup_SetMaxAudible (FMOD_SOUNDGROUP* soundgroup, int maxaudible);
271   FMOD_RESULT FMOD_SoundGroup_GetMaxAudible (FMOD_SOUNDGROUP* soundgroup, int* maxaudible);
272   FMOD_RESULT FMOD_SoundGroup_SetMaxAudibleBehavior (FMOD_SOUNDGROUP* soundgroup, FMOD_SOUNDGROUP_BEHAVIOR behavior);
273   FMOD_RESULT FMOD_SoundGroup_GetMaxAudibleBehavior (FMOD_SOUNDGROUP* soundgroup, FMOD_SOUNDGROUP_BEHAVIOR* behavior);
274   FMOD_RESULT FMOD_SoundGroup_SetMuteFadeSpeed (FMOD_SOUNDGROUP* soundgroup, float speed);
275   FMOD_RESULT FMOD_SoundGroup_GetMuteFadeSpeed (FMOD_SOUNDGROUP* soundgroup, float* speed);
276   FMOD_RESULT FMOD_SoundGroup_SetVolume (FMOD_SOUNDGROUP* soundgroup, float volume);
277   FMOD_RESULT FMOD_SoundGroup_GetVolume (FMOD_SOUNDGROUP* soundgroup, float* volume);
278   FMOD_RESULT FMOD_SoundGroup_Stop (FMOD_SOUNDGROUP* soundgroup);
279   FMOD_RESULT FMOD_SoundGroup_GetName (FMOD_SOUNDGROUP* soundgroup, char* name, int namelen);
280   FMOD_RESULT FMOD_SoundGroup_GetNumSounds (FMOD_SOUNDGROUP* soundgroup, int* numsounds);
281   FMOD_RESULT FMOD_SoundGroup_GetSound (FMOD_SOUNDGROUP* soundgroup, int index, FMOD_SOUND** sound);
282   FMOD_RESULT FMOD_SoundGroup_GetNumPlaying (FMOD_SOUNDGROUP* soundgroup, int* numplaying);
283   FMOD_RESULT FMOD_SoundGroup_SetUserData (FMOD_SOUNDGROUP* soundgroup, void* userdata);
284   FMOD_RESULT FMOD_SoundGroup_GetUserData (FMOD_SOUNDGROUP* soundgroup, void** userdata);
285   FMOD_RESULT FMOD_Geometry_Release (FMOD_GEOMETRY* geometry);
286   FMOD_RESULT FMOD_Geometry_AddPolygon (FMOD_GEOMETRY* geometry, float directocclusion, float reverbocclusion, int doublesided, int numvertices, const(FMOD_VECTOR)* vertices, int* polygonindex);
287   FMOD_RESULT FMOD_Geometry_GetNumPolygons (FMOD_GEOMETRY* geometry, int* numpolygons);
288   FMOD_RESULT FMOD_Geometry_GetMaxPolygons (FMOD_GEOMETRY* geometry, int* maxpolygons, int* maxvertices);
289   FMOD_RESULT FMOD_Geometry_GetPolygonNumVertices (FMOD_GEOMETRY* geometry, int index, int* numvertices);
290   FMOD_RESULT FMOD_Geometry_SetPolygonVertex (FMOD_GEOMETRY* geometry, int index, int vertexindex, const(FMOD_VECTOR)* vertex);
291   FMOD_RESULT FMOD_Geometry_GetPolygonVertex (FMOD_GEOMETRY* geometry, int index, int vertexindex, FMOD_VECTOR* vertex);
292   FMOD_RESULT FMOD_Geometry_SetPolygonAttributes (FMOD_GEOMETRY* geometry, int index, float directocclusion, float reverbocclusion, int doublesided);
293   FMOD_RESULT FMOD_Geometry_GetPolygonAttributes (FMOD_GEOMETRY* geometry, int index, float* directocclusion, float* reverbocclusion, int* doublesided);
294   FMOD_RESULT FMOD_Geometry_SetActive (FMOD_GEOMETRY* geometry, int active);
295   FMOD_RESULT FMOD_Geometry_GetActive (FMOD_GEOMETRY* geometry, int* active);
296   FMOD_RESULT FMOD_Geometry_SetRotation (FMOD_GEOMETRY* geometry, const(FMOD_VECTOR)* forward, const(FMOD_VECTOR)* up);
297   FMOD_RESULT FMOD_Geometry_GetRotation (FMOD_GEOMETRY* geometry, FMOD_VECTOR* forward, FMOD_VECTOR* up);
298   FMOD_RESULT FMOD_Geometry_SetPosition (FMOD_GEOMETRY* geometry, const(FMOD_VECTOR)* position);
299   FMOD_RESULT FMOD_Geometry_GetPosition (FMOD_GEOMETRY* geometry, FMOD_VECTOR* position);
300   FMOD_RESULT FMOD_Geometry_SetScale (FMOD_GEOMETRY* geometry, const(FMOD_VECTOR)* scale);
301   FMOD_RESULT FMOD_Geometry_GetScale (FMOD_GEOMETRY* geometry, FMOD_VECTOR* scale);
302   FMOD_RESULT FMOD_Geometry_Save (FMOD_GEOMETRY* geometry, void* data, int* datasize);
303   FMOD_RESULT FMOD_Geometry_SetUserData (FMOD_GEOMETRY* geometry, void* userdata);
304   FMOD_RESULT FMOD_Geometry_GetUserData (FMOD_GEOMETRY* geometry, void** userdata);
305   FMOD_RESULT FMOD_Reverb3D_Release (FMOD_REVERB3D* reverb3d);
306   FMOD_RESULT FMOD_Reverb3D_Set3DAttributes (FMOD_REVERB3D* reverb3d, const(FMOD_VECTOR)* position, float mindistance, float maxdistance);
307   FMOD_RESULT FMOD_Reverb3D_Get3DAttributes (FMOD_REVERB3D* reverb3d, FMOD_VECTOR* position, float* mindistance, float* maxdistance);
308   FMOD_RESULT FMOD_Reverb3D_SetProperties (FMOD_REVERB3D* reverb3d, const(FMOD_REVERB_PROPERTIES)* properties);
309   FMOD_RESULT FMOD_Reverb3D_GetProperties (FMOD_REVERB3D* reverb3d, FMOD_REVERB_PROPERTIES* properties);
310   FMOD_RESULT FMOD_Reverb3D_SetActive (FMOD_REVERB3D* reverb3d, int active);
311   FMOD_RESULT FMOD_Reverb3D_GetActive (FMOD_REVERB3D* reverb3d, int* active);
312   FMOD_RESULT FMOD_Reverb3D_SetUserData (FMOD_REVERB3D* reverb3d, void* userdata);
313   FMOD_RESULT FMOD_Reverb3D_GetUserData (FMOD_REVERB3D* reverb3d, void** userdata);
314 }
315 
316 // Wraps SoftwareFormat calls
317 struct SoftwareFormat {
318   int samplerate;
319   int numrawspeakers;
320   FMOD_SPEAKERMODE speakermode;
321 }
322 
323 struct SpeakerPosition {
324   FMOD_SPEAKER speaker;
325   float x, y;
326   bool active;
327 }
328 
329 struct StreamBufferSize {
330   uint filebuffersize, filebuffersizetype;
331 }
332 
333 struct Settings3D {
334   float dopplerscale, distancefactor, rolloffscale;
335 }
336 
337 /*
338   Wraps the FMOD_System C struct
339 */
340 class System {
341   FMOD_SYSTEM *sys;
342 
343   this() {
344     assert(FMOD_System_Create(&this.sys) == FMOD_RESULT.OK);
345   }
346 
347   ~this() {
348     assert(FMOD_System_Release(this.sys) == FMOD_RESULT.OK);
349   }
350 
351   void SetOutput(FMOD_OUTPUTTYPE output) {
352     assert(FMOD_System_SetOutput(this.sys, output) == FMOD_RESULT.OK);
353   }
354 
355   FMOD_OUTPUTTYPE GetOutput() {
356     FMOD_OUTPUTTYPE output;
357     assert(FMOD_System_GetOutput(this.sys, &output) == FMOD_RESULT.OK);
358     return output;
359   }
360 
361   int GetNumDrivers() {
362     int num;
363     assert(FMOD_System_GetNumDrivers(this.sys, &num) == FMOD_RESULT.OK);
364     return num;
365   }
366 
367   void SetDriver(int driver) {
368     assert(FMOD_System_SetDriver(this.sys, driver) == FMOD_RESULT.OK);
369   }
370 
371   int GetDriver() {
372     int driver;
373     assert(FMOD_System_GetDriver(this.sys, &driver) == FMOD_RESULT.OK);
374     return driver;
375   }
376 
377   void SetSoftwareChannels(int num) {
378     assert(FMOD_System_SetSoftwareChannels(this.sys, num) == FMOD_RESULT.OK);
379   }
380 
381   int GetSoftwareChannels() {
382     int num;
383     assert(FMOD_System_GetSoftwareChannels(this.sys, &num) == FMOD_RESULT.OK);
384     return num;
385   }
386 
387   void SetSoftwareFormat(SoftwareFormat *fmt) {
388     assert(FMOD_System_SetSoftwareFormat(this.sys,
389         fmt.samplerate, fmt.speakermode, fmt.numrawspeakers) == FMOD_RESULT.OK);
390   }
391 
392   SoftwareFormat GetSoftwareFormat() {
393     SoftwareFormat fmt;
394     assert(FMOD_System_GetSoftwareFormat(this.sys,
395         &fmt.samplerate, &fmt.speakermode, &fmt.numrawspeakers) == FMOD_RESULT.OK);
396     return fmt;
397   }
398 
399   void SetAdvancedSettings(FMOD_ADVANCEDSETTINGS *settings) {
400     assert(FMOD_System_SetAdvancedSettings(this.sys, settings) == FMOD_RESULT.OK);
401   }
402 
403   FMOD_ADVANCEDSETTINGS GetAdvancedSettings() {
404     FMOD_ADVANCEDSETTINGS settings;
405     assert(FMOD_System_GetAdvancedSettings(this.sys, &settings) == FMOD_RESULT.OK);
406     return settings;
407   }
408 
409   void init(int maxchannels, uint flags, void *extradriverdata) {
410     assert(FMOD_System_Init(this.sys, maxchannels, flags, extradriverdata) == FMOD_RESULT.OK);
411   }
412 
413   void close() {
414     assert(FMOD_System_Close(this.sys) == FMOD_RESULT.OK);
415   }
416 
417   void update() {
418     assert(FMOD_System_Update(this.sys) == FMOD_RESULT.OK);
419   }
420 
421   void SetSpeakerPosition(SpeakerPosition *pos) {
422     assert(FMOD_System_SetSpeakerPosition(this.sys,
423         pos.speaker, pos.x, pos.y, cast(int)pos.active) == FMOD_RESULT.OK);
424   }
425 
426   SpeakerPosition GetSpeakerPosition() {
427     SpeakerPosition pos;
428     int active;
429 
430     assert(FMOD_System_GetSpeakerPosition(this.sys, pos.speaker, &pos.x, &pos.y, &active) == FMOD_RESULT.OK);
431     pos.active = cast(bool)active;
432     return pos;
433   }
434 
435   void SetStreamBufferSize(StreamBufferSize *size) {
436     assert(FMOD_System_SetStreamBufferSize(this.sys,
437         size.filebuffersize, size.filebuffersizetype) == FMOD_RESULT.OK);
438   }
439 
440   StreamBufferSize GetStreamBufferSize() {
441     StreamBufferSize size;
442     assert(FMOD_System_GetStreamBufferSize(this.sys,
443         &size.filebuffersize, &size.filebuffersizetype) == FMOD_RESULT.OK);
444     return size;
445   }
446 
447   void Set3DSettings(Settings3D *settings) {
448     assert(FMOD_System_Set3DSettings(this.sys,
449         settings.dopplerscale, settings.distancefactor, settings.rolloffscale) == FMOD_RESULT.OK);
450   }
451 
452   Settings3D Get3DSettings() {
453     Settings3D settings;
454     assert(FMOD_System_Get3DSettings(this.sys,
455         &settings.dopplerscale, &settings.distancefactor, &settings.rolloffscale) == FMOD_RESULT.OK);
456     return settings;
457   }
458 
459   void Set3DNumListeners(int num) {
460     assert(FMOD_System_Set3DNumListeners(this.sys, num) == FMOD_RESULT.OK);
461   }
462 
463   int Get3DNumListeners() {
464     int num;
465     assert(FMOD_System_Get3DNumListeners(this.sys, &num) == FMOD_RESULT.OK);
466     return num;
467   }
468 
469   Sound CreateSound(string name_or_data, uint mode=0, FMOD_CREATESOUNDEXINFO *exinfo=null) {
470     return new Sound(this, name_or_data, mode, exinfo);
471   }
472 }
473 
474 class Sound {
475   FMOD_SOUND *sound;
476   System sys;
477 
478   this(System sys, string name, uint mode, FMOD_CREATESOUNDEXINFO *exinfo) {
479     this.sys = sys;
480     assert(FMOD_System_CreateSound(this.sys.sys, name.ptr, mode, exinfo, &this.sound) == FMOD_RESULT.OK);
481   }
482 
483   void play(FMOD_CHANNELGROUP *group=null, bool paused=false, FMOD_CHANNEL *channel=null) {
484     assert(FMOD_System_PlaySound(this.sys.sys, this.sound, group, cast(int)paused, &channel) == FMOD_RESULT.OK);
485   }
486 }
487 
488 /*
489   FMOD_RESULT FMOD_System_SetDSPBufferSize (FMOD_SYSTEM* system, uint bufferlength, int numbuffers);
490   FMOD_RESULT FMOD_System_GetDSPBufferSize (FMOD_SYSTEM* system, uint* bufferlength, int* numbuffers);
491   FMOD_RESULT FMOD_System_CreateDSPByPlugin (FMOD_SYSTEM* system, uint handle, FMOD_DSP** dsp);
492   FMOD_RESULT FMOD_System_GetDSPInfoByPlugin (FMOD_SYSTEM* system, uint handle, const(FMOD_DSP_DESCRIPTION*)* description);
493   FMOD_RESULT FMOD_System_RegisterCodec (FMOD_SYSTEM* system, FMOD_CODEC_DESCRIPTION* description, uint* handle, uint priority);
494   FMOD_RESULT FMOD_System_RegisterDSP (FMOD_SYSTEM* system, const(FMOD_DSP_DESCRIPTION)* description, uint* handle);
495   FMOD_RESULT FMOD_System_RegisterOutput (FMOD_SYSTEM* system, const(FMOD_OUTPUT_DESCRIPTION)* description, uint* handle);
496   FMOD_RESULT FMOD_System_CreateDSP (FMOD_SYSTEM* system, const(FMOD_DSP_DESCRIPTION)* description, FMOD_DSP** dsp);
497   FMOD_RESULT FMOD_System_CreateDSPByType (FMOD_SYSTEM* system, FMOD_DSP_TYPE type, FMOD_DSP** dsp);
498   FMOD_RESULT FMOD_System_PlayDSP (FMOD_SYSTEM* system, FMOD_DSP* dsp, FMOD_CHANNELGROUP* channelgroup, int paused, FMOD_CHANNEL** channel);
499   FMOD_RESULT FMOD_System_LockDSP (FMOD_SYSTEM* system);
500   FMOD_RESULT FMOD_System_UnlockDSP (FMOD_SYSTEM* system);
501   FMOD_RESULT FMOD_Channel_GetDSPClock (FMOD_CHANNEL* channel, ulong* dspclock, ulong* parentclock);
502   FMOD_RESULT FMOD_Channel_GetDSP (FMOD_CHANNEL* channel, int index, FMOD_DSP** dsp);
503   FMOD_RESULT FMOD_Channel_AddDSP (FMOD_CHANNEL* channel, int index, FMOD_DSP* dsp);
504   FMOD_RESULT FMOD_Channel_RemoveDSP (FMOD_CHANNEL* channel, FMOD_DSP* dsp);
505   FMOD_RESULT FMOD_Channel_GetNumDSPs (FMOD_CHANNEL* channel, int* numdsps);
506   FMOD_RESULT FMOD_Channel_SetDSPIndex (FMOD_CHANNEL* channel, FMOD_DSP* dsp, int index);
507   FMOD_RESULT FMOD_Channel_GetDSPIndex (FMOD_CHANNEL* channel, FMOD_DSP* dsp, int* index);
508   FMOD_RESULT FMOD_Channel_OverridePanDSP (FMOD_CHANNEL* channel, FMOD_DSP* pan);
509   FMOD_RESULT FMOD_ChannelGroup_GetDSPClock (FMOD_CHANNELGROUP* channelgroup, ulong* dspclock, ulong* parentclock);
510   FMOD_RESULT FMOD_ChannelGroup_GetDSP (FMOD_CHANNELGROUP* channelgroup, int index, FMOD_DSP** dsp);
511   FMOD_RESULT FMOD_ChannelGroup_AddDSP (FMOD_CHANNELGROUP* channelgroup, int index, FMOD_DSP* dsp);
512   FMOD_RESULT FMOD_ChannelGroup_RemoveDSP (FMOD_CHANNELGROUP* channelgroup, FMOD_DSP* dsp);
513   FMOD_RESULT FMOD_ChannelGroup_GetNumDSPs (FMOD_CHANNELGROUP* channelgroup, int* numdsps);
514   FMOD_RESULT FMOD_ChannelGroup_SetDSPIndex (FMOD_CHANNELGROUP* channelgroup, FMOD_DSP* dsp, int index);
515   FMOD_RESULT FMOD_ChannelGroup_GetDSPIndex (FMOD_CHANNELGROUP* channelgroup, FMOD_DSP* dsp, int* index);
516   FMOD_RESULT FMOD_ChannelGroup_OverridePanDSP (FMOD_CHANNELGROUP* channelgroup, FMOD_DSP* pan);
517   FMOD_RESULT FMOD_ChannelGroup_AddGroup (FMOD_CHANNELGROUP* channelgroup, FMOD_CHANNELGROUP* group, int propagatedspclock, FMOD_DSPCONNECTION** connection);
518   FMOD_RESULT FMOD_DSP_Release (FMOD_DSP* dsp);
519   FMOD_RESULT FMOD_DSP_GetSystemObject (FMOD_DSP* dsp, FMOD_SYSTEM** system);
520   FMOD_RESULT FMOD_DSP_AddInput (FMOD_DSP* dsp, FMOD_DSP* input, FMOD_DSPCONNECTION** connection, FMOD_DSPCONNECTION_TYPE type);
521   FMOD_RESULT FMOD_DSP_DisconnectFrom (FMOD_DSP* dsp, FMOD_DSP* target, FMOD_DSPCONNECTION* connection);
522   FMOD_RESULT FMOD_DSP_DisconnectAll (FMOD_DSP* dsp, int inputs, int outputs);
523   FMOD_RESULT FMOD_DSP_GetNumInputs (FMOD_DSP* dsp, int* numinputs);
524   FMOD_RESULT FMOD_DSP_GetNumOutputs (FMOD_DSP* dsp, int* numoutputs);
525   FMOD_RESULT FMOD_DSP_GetInput (FMOD_DSP* dsp, int index, FMOD_DSP** input, FMOD_DSPCONNECTION** inputconnection);
526   FMOD_RESULT FMOD_DSP_GetOutput (FMOD_DSP* dsp, int index, FMOD_DSP** output, FMOD_DSPCONNECTION** outputconnection);
527   FMOD_RESULT FMOD_DSP_SetActive (FMOD_DSP* dsp, int active);
528   FMOD_RESULT FMOD_DSP_GetActive (FMOD_DSP* dsp, int* active);
529   FMOD_RESULT FMOD_DSP_SetBypass (FMOD_DSP* dsp, int bypass);
530   FMOD_RESULT FMOD_DSP_GetBypass (FMOD_DSP* dsp, int* bypass);
531   FMOD_RESULT FMOD_DSP_SetWetDryMix (FMOD_DSP* dsp, float prewet, float postwet, float dry);
532   FMOD_RESULT FMOD_DSP_GetWetDryMix (FMOD_DSP* dsp, float* prewet, float* postwet, float* dry);
533   FMOD_RESULT FMOD_DSP_SetChannelFormat (FMOD_DSP* dsp, uint channelmask, int numchannels, FMOD_SPEAKERMODE source_speakermode);
534   FMOD_RESULT FMOD_DSP_GetChannelFormat (FMOD_DSP* dsp, uint* channelmask, int* numchannels, FMOD_SPEAKERMODE* source_speakermode);
535   FMOD_RESULT FMOD_DSP_GetOutputChannelFormat (FMOD_DSP* dsp, uint inmask, int inchannels, FMOD_SPEAKERMODE inspeakermode, uint* outmask, int* outchannels, FMOD_SPEAKERMODE* outspeakermode);
536   FMOD_RESULT FMOD_DSP_Reset (FMOD_DSP* dsp);
537   FMOD_RESULT FMOD_DSP_SetParameterFloat (FMOD_DSP* dsp, int index, float value);
538   FMOD_RESULT FMOD_DSP_SetParameterInt (FMOD_DSP* dsp, int index, int value);
539   FMOD_RESULT FMOD_DSP_SetParameterBool (FMOD_DSP* dsp, int index, int value);
540   FMOD_RESULT FMOD_DSP_SetParameterData (FMOD_DSP* dsp, int index, void* data, uint length);
541   FMOD_RESULT FMOD_DSP_GetParameterFloat (FMOD_DSP* dsp, int index, float* value, char* valuestr, int valuestrlen);
542   FMOD_RESULT FMOD_DSP_GetParameterInt (FMOD_DSP* dsp, int index, int* value, char* valuestr, int valuestrlen);
543   FMOD_RESULT FMOD_DSP_GetParameterBool (FMOD_DSP* dsp, int index, int* value, char* valuestr, int valuestrlen);
544   FMOD_RESULT FMOD_DSP_GetParameterData (FMOD_DSP* dsp, int index, void** data, uint* length, char* valuestr, int valuestrlen);
545   FMOD_RESULT FMOD_DSP_GetNumParameters (FMOD_DSP* dsp, int* numparams);
546   FMOD_RESULT FMOD_DSP_GetParameterInfo (FMOD_DSP* dsp, int index, FMOD_DSP_PARAMETER_DESC** desc);
547   FMOD_RESULT FMOD_DSP_GetDataParameterIndex (FMOD_DSP* dsp, int datatype, int* index);
548   FMOD_RESULT FMOD_DSP_ShowConfigDialog (FMOD_DSP* dsp, void* hwnd, int show);
549   FMOD_RESULT FMOD_DSP_GetInfo (FMOD_DSP* dsp, char* name, uint* version_, int* channels, int* configwidth, int* configheight);
550   FMOD_RESULT FMOD_DSP_GetType (FMOD_DSP* dsp, FMOD_DSP_TYPE* type);
551   FMOD_RESULT FMOD_DSP_GetIdle (FMOD_DSP* dsp, int* idle);
552   FMOD_RESULT FMOD_DSP_SetUserData (FMOD_DSP* dsp, void* userdata);
553   FMOD_RESULT FMOD_DSP_GetUserData (FMOD_DSP* dsp, void** userdata);
554   FMOD_RESULT FMOD_DSP_SetMeteringEnabled (FMOD_DSP* dsp, int inputEnabled, int outputEnabled);
555   FMOD_RESULT FMOD_DSP_GetMeteringEnabled (FMOD_DSP* dsp, int* inputEnabled, int* outputEnabled);
556   FMOD_RESULT FMOD_DSP_GetMeteringInfo (FMOD_DSP* dsp, FMOD_DSP_METERING_INFO* inputInfo, FMOD_DSP_METERING_INFO* outputInfo);
557   FMOD_RESULT FMOD_DSPConnection_GetInput (FMOD_DSPCONNECTION* dspconnection, FMOD_DSP** input);
558   FMOD_RESULT FMOD_DSPConnection_GetOutput (FMOD_DSPCONNECTION* dspconnection, FMOD_DSP** output);
559   FMOD_RESULT FMOD_DSPConnection_SetMix (FMOD_DSPCONNECTION* dspconnection, float volume);
560   FMOD_RESULT FMOD_DSPConnection_GetMix (FMOD_DSPCONNECTION* dspconnection, float* volume);
561   FMOD_RESULT FMOD_DSPConnection_SetMixMatrix (FMOD_DSPCONNECTION* dspconnection, float* matrix, int outchannels, int inchannels, int inchannel_hop);
562   FMOD_RESULT FMOD_DSPConnection_GetMixMatrix (FMOD_DSPCONNECTION* dspconnection, float* matrix, int* outchannels, int* inchannels, int inchannel_hop);
563   FMOD_RESULT FMOD_DSPConnection_GetType (FMOD_DSPCONNECTION* dspconnection, FMOD_DSPCONNECTION_TYPE* type);
564   FMOD_RESULT FMOD_DSPConnection_SetUserData (FMOD_DSPCONNECTION* dspconnection, void* userdata);
565   FMOD_RESULT FMOD_DSPConnection_GetUserData (FMOD_DSPCONNECTION* dspconnection, void** userdata);
566 */