1 /* 2 ALmixer: A library to make playing pre-loaded sounds and streams easier 3 with high performance and potential access to OpenAL effects. 4 Copyright 2002, 2010 Eric Wing <ewing . public @ playcontrol.net> 5 6 This library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Library General Public 8 License as published by the Free Software Foundation; either 9 version 2 of the License, or (at your option) any later version. 10 11 This library 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 GNU 14 Library General Public License for more details. 15 16 You should have received a copy of the GNU Library General Public 17 License along with this library; if not, write to the Free 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 module dalmixer; 22 23 import derelict.openal.al; 24 import derelict.util.loader; 25 import derelict.util.system; 26 27 private { 28 static if( Derelict_OS_Windows ) 29 enum libNames = "ALmixer.dll, libALmixer"; 30 /*else static if( Derelict_OS_Mac ) 31 enum libNames = "../Frameworks/OpenAL.framework/OpenAL, /Library/Frameworks/OpenAL.framework/OpenAL, /System/Library/Frameworks/OpenAL.framework/OpenAL"; 32 else static if( Derelict_OS_Posix ) 33 enum libNames = "libal.so, libAL.so, libopenal.so, libopenal.so.1, libopenal.so.0";*/ 34 else 35 static assert( 0, "Need to implement OpenAL libNames for this operating system." ); 36 } 37 38 struct ALmixer_Data; 39 struct ALmixer_RWops; 40 41 struct ALmixer_AudioInfo 42 { 43 ALushort format; 44 ALubyte channels; 45 ALuint rate; 46 }; 47 48 struct ALmixer_version 49 { 50 ALubyte major; 51 ALubyte minor; 52 ALubyte patch; 53 }; 54 55 enum 56 { 57 int ALMIXER_MAJOR_VERSION = 0, 58 int ALMIXER_MINOR_VERSION = 4, 59 int ALMIXER_PATCHLEVEL = 0, 60 61 int ALMIXER_DEFAULT_FREQUENCY = 0, 62 int ALMIXER_DEFAULT_REFRESH = 0, 63 int ALMIXER_DEFAULT_NUM_CHANNELS = 32, 64 int ALMIXER_DEFAULT_NUM_SOURCES = ALMIXER_DEFAULT_NUM_CHANNELS, 65 66 int ALMIXER_DEFAULT_BUFFERSIZE = 8192, 67 int ALMIXER_DEFAULT_PREDECODED_BUFFERSIZE = 4096, 68 int ALMIXER_DEFAULT_QUEUE_BUFFERS = 12, 69 int ALMIXER_DEFAULT_STARTUP_BUFFERS = 4, 70 int ALMIXER_DEFAULT_BUFFERS_TO_QUEUE_PER_UPDATE_PASS = 2 71 } 72 73 74 //extern ALMIXER_DECLSPEC void ALMIXER_CALL ALmixer_SetPlaybackFinishedCallback(void (*playback_finished_callback)(ALint which_channel, ALuint al_source, ALmixer_Data* almixer_data, ALboolean finished_naturally, void* user_data), void* user_data); 75 76 77 //alias dal_ALmixer_Init = function(); 78 79 extern( C ) @nogc nothrow { 80 81 ///CoreOperation Initialization, Tear-down, and Core Operational Commands 82 83 alias dal_ALmixer_GetLinkedVersion = const ALmixer_version* function(); 84 alias dal_ALmixer_GetError = const char* function(); 85 alias dal_ALmixer_SetError = void function(const char *fmt, ...); 86 alias dal_ALmixer_GetTicks = ALuint function(); 87 alias dal_ALmixer_Delay = void function(ALuint milliseconds_delay); 88 alias dal_ALmixer_Init = ALboolean function( ALuint playback_frequency, ALuint num_sources, ALuint refresh_rate ); 89 alias dal_ALmixer_InitContext = ALboolean function(ALuint playback_frequency, ALuint refresh_rate); 90 alias dal_ALmixer_InitMixer = ALboolean function(ALuint num_sources); 91 alias dal_ALmixer_BeginInterruption = void function(); 92 alias dal_ALmixer_EndInterruption = void function(); 93 alias dal_ALmixer_IsInInterruption = ALboolean function(); 94 alias dal_ALmixer_SuspendUpdates = void function(); 95 alias dal_ALmixer_ResumeUpdates = void function(); 96 alias dal_ALmixer_AreUpdatesSuspended = ALboolean function(); 97 alias dal_ALmixer_SuspendPlayingState = void function(); 98 alias dal_ALmixer_ResumePlayingState = void function(); 99 alias dal_ALmixer_IsPlayingStateSuspended = ALboolean function(); 100 alias dal_ALmixer_Quit = void function(); 101 alias dal_ALmixer_QuitWithoutFreeData = void function(); 102 alias dal_ALmixer_IsInitialized = ALboolean function(); 103 alias dal_ALmixer_GetFrequency = ALuint function(); 104 alias dal_ALmixer_AllocateChannels = ALint function(ALint num_chans); 105 alias dal_ALmixer_ReserveChannels = ALint function(ALint number_of_reserve_channels); 106 alias dal_ALmixer_Update = ALint function(); 107 108 ///LoadAPI Load Audio Functions 109 110 alias dal_ALmixer_LoadSample_RW = ALmixer_Data* function(ALmixer_RWops* rw_ops, const char* file_ext, ALuint buffer_size, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 111 alias dal_ALmixer_LoadStream_RW = ALmixer_Data* function(ALmixer_RWops* rw_ops, const char* file_ext, ALuint buffer_size, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 112 alias dal_ALmixer_LoadAll_RW = ALmixer_Data* function(ALmixer_RWops* rw_ops, const char* file_ext, ALuint access_data); 113 alias dal_ALmixer_LoadSample = ALmixer_Data * function(const char* file_name, ALuint buffer_size, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 114 alias dal_ALmixer_LoadStream = ALmixer_Data* function(const char* file_name, ALuint buffer_size, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 115 alias dal_ALmixer_LoadAll = ALmixer_Data* function(const char* file_name, ALuint access_data); 116 alias dal_ALmixer_LoadSample_RAW_RW = ALmixer_Data* function(ALmixer_RWops* rw_ops, const char* file_ext, ALmixer_AudioInfo* desired_format, ALuint buffer_size, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 117 alias dal_ALmixer_LoadStream_RAW_RW = ALmixer_Data* function(ALmixer_RWops* rw_ops, const char* file_ext, ALmixer_AudioInfo* desired_format, ALuint buffer_size, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 118 alias dal_ALmixer_LoadAll_RAW_RW = ALmixer_Data* function(ALmixer_RWops* rw_ops, const char* file_ext, ALmixer_AudioInfo* desired_format, ALuint access_data); 119 alias dal_ALmixer_LoadSample_RAW = ALmixer_Data* function(const char* file_name, ALmixer_AudioInfo* desired_format, ALuint buffer_size, ALboolean decode_mode_is_predecoded, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 120 alias dal_ALmixer_LoadStream_RAW = ALmixer_Data* function(const char* file_name, ALmixer_AudioInfo* desired_format, ALuint buffer_size, ALuint max_queue_buffers, ALuint num_startup_buffers, ALuint suggested_number_of_buffers_to_queue_per_update_pass, ALuint access_data); 121 alias dal_ALmixer_LoadAll_RAW = ALmixer_Data* function(const char* file_name, ALmixer_AudioInfo* desired_format, ALuint access_data); 122 alias dal_ALmixer_FreeData = void function(ALmixer_Data* functionalmixer_data); 123 alias dal_ALmixer_IsPredecoded = ALboolean function(ALmixer_Data* functionalmixer_data); 124 125 ///CallbackAPI Callbacks 126 127 alias void function(ALint which_channel, ALuint al_source, ALmixer_Data* almixer_data, ALboolean finished_naturally, void* ALmixer_SetPlaybackFinishedCallbackContainer)playback_finished_callback; 128 alias dal_ALmixer_SetPlaybackFinishedCallback = void function(void function(ALint which_channel, ALuint al_source, ALmixer_Data* almixer_data, ALboolean finished_naturally, void* user_data)playback_finished_callback, void* user_data); 129 alias dal_ALmixer_SetPlaybackDataCallback = void function(void function(ALint which_channel, ALuint al_source, ALbyte* pcm_data, ALuint num_bytes, ALuint frequency, ALubyte num_channels_in_sample, ALubyte bit_depth, ALboolean is_unsigned, ALboolean decode_mode_is_predecoded, ALuint length_in_msec, void* user_data), void* user_data); 130 131 ///PlayAPI Functions useful for playback. 132 133 alias dal_ALmixer_GetTotalTime = ALint function(ALmixer_Data* almixer_data); 134 alias dal_ALmixer_GetSource = ALuint function(ALint which_channel); 135 alias dal_ALmixer_GetChannel = ALint function(ALuint al_source); 136 alias dal_ALmixer_FindFreeChannel = ALint function(ALint start_channel); 137 alias dal_ALmixer_PlayChannelTimed = ALint function(ALint which_channel, ALmixer_Data* almixer_data, ALint number_of_loops, ALint number_of_milliseconds); 138 alias dal_ALmixer_PlayChannel = ALint function(ALint which_channel, ALmixer_Data* almixer_data, ALint number_of_loops); 139 alias dal_ALmixer_PlaySourceTimed = ALuint function(ALuint al_source, ALmixer_Data* almixer_data, ALint number_of_loops, ALint number_of_milliseconds); 140 alias dal_ALmixer_PlaySource = ALuint function(ALuint al_source, ALmixer_Data* almixer_data, ALint number_of_loops); 141 alias dal_ALmixer_HaltChannel = ALint function(ALint which_channel); 142 alias dal_ALmixer_HaltSource = ALint function(ALuint al_source); 143 alias dal_ALmixer_RewindData = ALboolean function(ALmixer_Data* almixer_data); 144 alias dal_ALmixer_RewindChannel = ALint function(ALint which_channel); 145 alias dal_ALmixer_RewindSource = ALint function(ALuint al_source); 146 alias dal_ALmixer_SeekData = ALboolean function(ALmixer_Data* almixer_data, ALuint msec_pos); 147 alias dal_ALmixer_SeekChannel = ALint function(ALint which_channel, ALuint msec_pos); 148 alias dal_ALmixer_SeekSource = ALint function(ALuint al_source, ALuint msec_pos); 149 alias dal_ALmixer_PauseChannel = ALint function(ALint which_channel); 150 alias dal_ALmixer_PauseSource = ALint function(ALuint al_source); 151 alias dal_ALmixer_ResumeChannel = ALint function(ALint which_channel); 152 alias dal_ALmixer_ResumeSource = ALint function(ALuint al_source); 153 alias dal_ALmixer_ExpireChannel = ALint function(ALint which_channel, ALint number_of_milliseconds); 154 alias dal_ALmixer_ExpireSource = ALint function(ALuint al_source, ALint number_of_milliseconds); 155 156 ///VolumeAPI Volume and Fading 157 158 alias dal_ALmixer_FadeInChannelTimed = ALint function(ALint which_channel, ALmixer_Data* almixer_data, ALint number_of_loops, ALuint fade_ticks, ALint expire_ticks); 159 alias dal_ALmixer_FadeInChannel = ALint function(ALint which_channel, ALmixer_Data* almixer_data, ALint number_of_loops, ALuint fade_ticks); 160 alias dal_ALmixer_FadeInSourceTimed = ALuint function(ALuint al_source, ALmixer_Data* almixer_data, ALint number_of_loops, ALuint fade_ticks, ALint expire_ticks); 161 alias dal_ALmixer_FadeInSource = ALuint function(ALuint al_source, ALmixer_Data* almixer_data, ALint number_of_loops, ALuint fade_ticks); 162 alias dal_ALmixer_FadeOutChannel = ALint function(ALint which_channel, ALuint fade_ticks); 163 alias dal_ALmixer_FadeOutSource = ALint function(ALuint al_source, ALuint fade_ticks); 164 alias dal_ALmixer_FadeChannel = ALint function(ALint which_channel, ALuint fade_ticks, ALfloat volume); 165 alias dal_ALmixer_FadeSource = ALint function(ALuint al_source, ALuint fade_ticks, ALfloat volume); 166 alias dal_ALmixer_SetVolumeChannel = ALboolean function(ALint which_channel, ALfloat volume); 167 alias dal_ALmixer_SetVolumeSource = ALboolean function(ALuint al_source, ALfloat volume); 168 alias dal_ALmixer_GetVolumeChannel = ALfloat function(ALint which_channel); 169 alias dal_ALmixer_GetVolumeSource = ALfloat function(ALuint al_source); 170 alias dal_ALmixer_SetMaxVolumeChannel = ALboolean function(ALint which_channel, ALfloat volume); 171 alias dal_ALmixer_SetMaxVolumeSource = ALboolean function(ALuint al_source, ALfloat volume); 172 alias dal_ALmixer_GetMaxVolumeChannel = ALfloat function(ALint which_channel); 173 alias dal_ALmixer_GetMaxVolumeSource = ALfloat function(ALuint al_source); 174 alias dal_ALmixer_SetMinVolumeChannel = ALboolean function(ALint which_channel, ALfloat volume); 175 alias dal_ALmixer_SetMinVolumeSource = ALboolean function(ALuint al_source, ALfloat volume); 176 alias dal_ALmixer_GetMinVolumeChannel = ALfloat function(ALint which_channel); 177 alias dal_ALmixer_GetMinVolumeSource = ALfloat function(ALuint al_source); 178 alias dal_ALmixer_SetMasterVolume = ALboolean function(ALfloat new_volume); 179 alias dal_ALmixer_GetMasterVolume = ALfloat function(); 180 181 ///QueryAPI Query APIs 182 183 /* 184 alias dal_ALmixer_IsActiveSource = ALint function(ALuint al_source); 185 alias dal_ALmixer_IsPlayingChannel = ALint function(ALint which_channel); 186 alias dal_ALmixer_IsPlayingSource = ALint function(ALuint al_source); 187 alias dal_ALmixer_IsPausedChannel = ALint function(ALint which_channel); 188 alias dal_ALmixer_IsPausedSource = ALint function(ALuint al_source); 189 alias dal_ALmixer_CountAllFreeChannels = ALuint function(); 190 alias dal_ALmixer_CountUnreservedFreeChannels = ALuint function(); 191 alias dal_ALmixer_CountAllUsedChannels = ALuint function(); 192 alias dal_ALmixer_CountUnreservedUsedChannels = ALuint function(); 193 alias dal_ALmixer_CountTotalChannels = ALuint function(); 194 alias dal_ALmixer_CountReservedChannels = ALuint function(); 195 */ 196 197 ///DebugAPI Debug APIs 198 199 /* 200 alias dal_ALmixer_OutputDecoders = void function(); 201 alias dal_ALmixer_OutputOpenALInfo = void function(); 202 alias dal_ALmixer_CompiledWithThreadBackend = ALboolean function(); 203 */ 204 } 205 206 __gshared { 207 208 ///CoreOperation Initialization, Tear-down, and Core Operational Commands 209 210 dal_ALmixer_GetLinkedVersion ALmixer_GetLinkedVersion; 211 dal_ALmixer_GetError ALmixer_GetError; 212 dal_ALmixer_SetError ALmixer_SetError; 213 dal_ALmixer_GetTicks ALmixer_GetTicks; 214 dal_ALmixer_Delay ALmixer_Delay; 215 dal_ALmixer_Init ALmixer_Init; 216 dal_ALmixer_InitContext ALmixer_InitContext; 217 dal_ALmixer_InitMixer ALmixer_InitMixer; 218 dal_ALmixer_BeginInterruption ALmixer_BeginInterruption; 219 dal_ALmixer_EndInterruption ALmixer_EndInterruption; 220 dal_ALmixer_IsInInterruption ALmixer_IsInInterruption; 221 dal_ALmixer_SuspendUpdates ALmixer_SuspendUpdates; 222 dal_ALmixer_ResumeUpdates ALmixer_ResumeUpdates; 223 dal_ALmixer_AreUpdatesSuspended ALmixer_AreUpdatesSuspended; 224 dal_ALmixer_SuspendPlayingState ALmixer_SuspendPlayingState; 225 dal_ALmixer_ResumePlayingState ALmixer_ResumePlayingState; 226 dal_ALmixer_IsPlayingStateSuspended ALmixer_IsPlayingStateSuspended; 227 dal_ALmixer_Quit ALmixer_Quit; 228 dal_ALmixer_QuitWithoutFreeData ALmixer_QuitWithoutFreeData; 229 dal_ALmixer_IsInitialized ALmixer_IsInitialized; 230 dal_ALmixer_GetFrequency ALmixer_GetFrequency; 231 dal_ALmixer_AllocateChannels ALmixer_AllocateChannels; 232 dal_ALmixer_ReserveChannels ALmixer_ReserveChannels; 233 dal_ALmixer_Update ALmixer_Update; 234 235 ///LoadAPI Load Audio Functions 236 237 dal_ALmixer_LoadSample_RW ALmixer_LoadSample_RW; 238 dal_ALmixer_LoadStream_RW ALmixer_LoadStream_RW; 239 dal_ALmixer_LoadAll_RW ALmixer_LoadAll_RW; 240 dal_ALmixer_LoadSample ALmixer_LoadSample; 241 dal_ALmixer_LoadStream ALmixer_LoadStream; 242 dal_ALmixer_LoadAll ALmixer_LoadAll; 243 dal_ALmixer_LoadSample_RAW_RW ALmixer_LoadSample_RAW_RW; 244 dal_ALmixer_LoadStream_RAW_RW ALmixer_LoadStream_RAW_RW; 245 dal_ALmixer_LoadAll_RAW_RW ALmixer_LoadAll_RAW_RW; 246 dal_ALmixer_LoadSample_RAW ALmixer_LoadSample_RAW; 247 dal_ALmixer_LoadStream_RAW ALmixer_LoadStream_RAW; 248 dal_ALmixer_LoadAll_RAW ALmixer_LoadAll_RAW; 249 dal_ALmixer_FreeData ALmixer_FreeData; 250 dal_ALmixer_IsPredecoded ALmixer_IsPredecoded; 251 252 ///CallbackAPI Callbacks 253 254 dal_ALmixer_SetPlaybackFinishedCallback ALmixer_SetPlaybackFinishedCallback; 255 dal_ALmixer_SetPlaybackDataCallback ALmixer_SetPlaybackDataCallback; 256 257 ///PlayAPI Functions useful for playback. 258 259 dal_ALmixer_GetTotalTime ALmixer_GetTotalTime; 260 dal_ALmixer_GetSource ALmixer_GetSource; 261 dal_ALmixer_GetChannel ALmixer_GetChannel; 262 dal_ALmixer_FindFreeChannel ALmixer_FindFreeChannel; 263 dal_ALmixer_PlayChannelTimed ALmixer_PlayChannelTimed; 264 dal_ALmixer_PlayChannel ALmixer_PlayChannel; 265 dal_ALmixer_PlaySourceTimed ALmixer_PlaySourceTimed; 266 dal_ALmixer_PlaySource ALmixer_PlaySource; 267 dal_ALmixer_HaltChannel ALmixer_HaltChannel; 268 dal_ALmixer_HaltSource ALmixer_HaltSource; 269 dal_ALmixer_RewindData ALmixer_RewindData; 270 dal_ALmixer_RewindChannel ALmixer_RewindChannel; 271 dal_ALmixer_RewindSource ALmixer_RewindSource; 272 dal_ALmixer_SeekData ALmixer_SeekData; 273 dal_ALmixer_SeekChannel ALmixer_SeekChannel; 274 dal_ALmixer_SeekSource ALmixer_SeekSource; 275 dal_ALmixer_PauseChannel ALmixer_PauseChannel; 276 dal_ALmixer_PauseSource ALmixer_PauseSource; 277 dal_ALmixer_ResumeChannel ALmixer_ResumeChannel; 278 dal_ALmixer_ResumeSource ALmixer_ResumeSource; 279 dal_ALmixer_ExpireChannel ALmixer_ExpireChannel; 280 dal_ALmixer_ExpireSource ALmixer_ExpireSource; 281 282 ///VolumeAPI Volume and Fading 283 284 dal_ALmixer_FadeInChannelTimed ALmixer_FadeInChannelTimed; 285 dal_ALmixer_FadeInChannel ALmixer_FadeInChannel; 286 dal_ALmixer_FadeInSourceTimed ALmixer_FadeInSourceTimed; 287 dal_ALmixer_FadeInSource ALmixer_FadeInSource; 288 dal_ALmixer_FadeOutChannel ALmixer_FadeOutChannel; 289 dal_ALmixer_FadeOutSource ALmixer_FadeOutSource; 290 dal_ALmixer_FadeChannel ALmixer_FadeChannel; 291 dal_ALmixer_FadeSource ALmixer_FadeSource; 292 dal_ALmixer_SetVolumeChannel ALmixer_SetVolumeChannel; 293 dal_ALmixer_SetVolumeSource ALmixer_SetVolumeSource; 294 dal_ALmixer_GetVolumeChannel ALmixer_GetVolumeChannel; 295 dal_ALmixer_GetVolumeSource ALmixer_GetVolumeSource; 296 dal_ALmixer_SetMaxVolumeChannel ALmixer_SetMaxVolumeChannel; 297 dal_ALmixer_SetMaxVolumeSource ALmixer_SetMaxVolumeSource; 298 dal_ALmixer_GetMaxVolumeChannel ALmixer_GetMaxVolumeChannel; 299 dal_ALmixer_GetMaxVolumeSource ALmixer_GetMaxVolumeSource; 300 dal_ALmixer_SetMinVolumeChannel ALmixer_SetMinVolumeChannel; 301 dal_ALmixer_SetMinVolumeSource ALmixer_SetMinVolumeSource; 302 dal_ALmixer_GetMinVolumeChannel ALmixer_GetMinVolumeChannel; 303 dal_ALmixer_GetMinVolumeSource ALmixer_GetMinVolumeSource; 304 dal_ALmixer_SetMasterVolume ALmixer_SetMasterVolume; 305 dal_ALmixer_GetMasterVolume ALmixer_GetMasterVolume; 306 307 ///QueryAPI Query APIs 308 309 ///DebugAPI Debug APIs 310 } 311 312 class DerelictDALmixerLoader : SharedLibLoader { 313 public this() { 314 super( libNames ); 315 } 316 317 protected override void loadSymbols() { 318 ///CoreOperation Initialization, Tear-down, and Core Operational Commands 319 bindFunc( cast( void** )&ALmixer_GetLinkedVersion, "ALmixer_GetLinkedVersion" ); 320 bindFunc( cast( void** )&ALmixer_GetError, "ALmixer_GetError" ); 321 bindFunc( cast( void** )&ALmixer_SetError, "ALmixer_SetError" ); 322 bindFunc( cast( void** )&ALmixer_GetTicks, "ALmixer_GetTicks" ); 323 bindFunc( cast( void** )&ALmixer_Delay, "ALmixer_Delay" ); 324 bindFunc( cast( void** )&ALmixer_Init, "ALmixer_Init" ); 325 bindFunc( cast( void** )&ALmixer_InitContext, "ALmixer_InitContext" ); 326 bindFunc( cast( void** )&ALmixer_InitMixer, "ALmixer_InitMixer" ); 327 bindFunc( cast( void** )&ALmixer_BeginInterruption, "ALmixer_BeginInterruption" ); 328 bindFunc( cast( void** )&ALmixer_EndInterruption, "ALmixer_EndInterruption" ); 329 bindFunc( cast( void** )&ALmixer_IsInInterruption, "ALmixer_IsInInterruption" ); 330 bindFunc( cast( void** )&ALmixer_SuspendUpdates, "ALmixer_SuspendUpdates" ); 331 bindFunc( cast( void** )&ALmixer_ResumeUpdates, "ALmixer_ResumeUpdates" ); 332 bindFunc( cast( void** )&ALmixer_AreUpdatesSuspended, "ALmixer_AreUpdatesSuspended" ); 333 bindFunc( cast( void** )&ALmixer_SuspendPlayingState, "ALmixer_SuspendPlayingState" ); 334 bindFunc( cast( void** )&ALmixer_ResumePlayingState, "ALmixer_ResumePlayingState" ); 335 bindFunc( cast( void** )&ALmixer_IsPlayingStateSuspended, "ALmixer_IsPlayingStateSuspended" ); 336 bindFunc( cast( void** )&ALmixer_Quit, "ALmixer_Quit" ); 337 bindFunc( cast( void** )&ALmixer_QuitWithoutFreeData, "ALmixer_QuitWithoutFreeData" ); 338 bindFunc( cast( void** )&ALmixer_IsInitialized, "ALmixer_IsInitialized" ); 339 bindFunc( cast( void** )&ALmixer_GetFrequency, "ALmixer_GetFrequency" ); 340 bindFunc( cast( void** )&ALmixer_AllocateChannels, "ALmixer_AllocateChannels" ); 341 bindFunc( cast( void** )&ALmixer_ReserveChannels, "ALmixer_ReserveChannels" ); 342 bindFunc( cast( void** )&ALmixer_Update, "ALmixer_Update" ); 343 ///LoadAPI Load Audio Functions 344 bindFunc( cast( void** )&ALmixer_LoadSample_RW, "ALmixer_LoadSample_RW" ); 345 bindFunc( cast( void** )&ALmixer_LoadStream_RW, "ALmixer_LoadStream_RW" ); 346 bindFunc( cast( void** )&ALmixer_LoadAll_RW, "ALmixer_LoadAll_RW" ); 347 bindFunc( cast( void** )&ALmixer_LoadSample, "ALmixer_LoadSample" ); 348 bindFunc( cast( void** )&ALmixer_LoadStream, "ALmixer_LoadStream" ); 349 bindFunc( cast( void** )&ALmixer_LoadAll, "ALmixer_LoadAll" ); 350 bindFunc( cast( void** )&ALmixer_LoadSample_RAW_RW, "ALmixer_LoadSample_RAW_RW" ); 351 bindFunc( cast( void** )&ALmixer_LoadStream_RAW_RW, "ALmixer_LoadStream_RAW_RW" ); 352 bindFunc( cast( void** )&ALmixer_LoadAll_RAW_RW, "ALmixer_LoadAll_RAW_RW" ); 353 bindFunc( cast( void** )&ALmixer_LoadSample_RAW, "ALmixer_LoadSample_RAW" ); 354 bindFunc( cast( void** )&ALmixer_LoadStream_RAW, "ALmixer_LoadStream_RAW" ); 355 bindFunc( cast( void** )&ALmixer_LoadAll_RAW, "ALmixer_LoadAll_RAW" ); 356 bindFunc( cast( void** )&ALmixer_FreeData, "ALmixer_FreeData" ); 357 bindFunc( cast( void** )&ALmixer_IsPredecoded, "ALmixer_IsPredecoded" ); 358 ///CallbackAPI Callbacks 359 bindFunc( cast( void** )&ALmixer_SetPlaybackFinishedCallback, "ALmixer_SetPlaybackFinishedCallback" ); 360 bindFunc( cast( void** )&ALmixer_SetPlaybackDataCallback, "ALmixer_SetPlaybackDataCallback" ); 361 ///PlayAPI Functions useful for playback. 362 bindFunc( cast( void** )&ALmixer_GetTotalTime, "ALmixer_GetTotalTime" ); 363 bindFunc( cast( void** )&ALmixer_GetSource, "ALmixer_GetSource" ); 364 bindFunc( cast( void** )&ALmixer_GetChannel, "ALmixer_GetChannel" ); 365 bindFunc( cast( void** )&ALmixer_FindFreeChannel, "ALmixer_FindFreeChannel" ); 366 bindFunc( cast( void** )&ALmixer_PlayChannelTimed, "ALmixer_PlayChannelTimed" ); 367 bindFunc( cast( void** )&ALmixer_PlayChannel, "ALmixer_PlayChannel" ); 368 bindFunc( cast( void** )&ALmixer_PlaySourceTimed, "ALmixer_PlaySourceTimed" ); 369 bindFunc( cast( void** )&ALmixer_PlaySource, "ALmixer_PlaySource" ); 370 bindFunc( cast( void** )&ALmixer_HaltChannel, "ALmixer_HaltChannel" ); 371 bindFunc( cast( void** )&ALmixer_HaltSource, "ALmixer_HaltSource" ); 372 bindFunc( cast( void** )&ALmixer_RewindData, "ALmixer_RewindData" ); 373 bindFunc( cast( void** )&ALmixer_RewindChannel, "ALmixer_RewindChannel" ); 374 bindFunc( cast( void** )&ALmixer_RewindSource, "ALmixer_RewindSource" ); 375 bindFunc( cast( void** )&ALmixer_SeekData, "ALmixer_SeekData" ); 376 bindFunc( cast( void** )&ALmixer_SeekChannel, "ALmixer_SeekChannel" ); 377 bindFunc( cast( void** )&ALmixer_SeekSource, "ALmixer_SeekSource" ); 378 bindFunc( cast( void** )&ALmixer_PauseChannel, "ALmixer_PauseChannel" ); 379 bindFunc( cast( void** )&ALmixer_PauseSource, "ALmixer_PauseSource" ); 380 bindFunc( cast( void** )&ALmixer_ResumeChannel, "ALmixer_ResumeChannel" ); 381 bindFunc( cast( void** )&ALmixer_ResumeSource, "ALmixer_ResumeSource" ); 382 bindFunc( cast( void** )&ALmixer_ExpireChannel, "ALmixer_ExpireChannel" ); 383 bindFunc( cast( void** )&ALmixer_ExpireSource, "ALmixer_ExpireSource" ); 384 ///VolumeAPI Volume and Fading 385 bindFunc( cast( void** )&ALmixer_FadeInChannelTimed, "ALmixer_FadeInChannelTimed" ); 386 bindFunc( cast( void** )&ALmixer_FadeInChannel, "ALmixer_FadeInChannel" ); 387 bindFunc( cast( void** )&ALmixer_FadeInSourceTimed, "ALmixer_FadeInSourceTimed" ); 388 bindFunc( cast( void** )&ALmixer_FadeInSource, "ALmixer_FadeInSource" ); 389 bindFunc( cast( void** )&ALmixer_FadeOutChannel, "ALmixer_FadeOutChannel" ); 390 bindFunc( cast( void** )&ALmixer_FadeOutSource, "ALmixer_FadeOutSource" ); 391 bindFunc( cast( void** )&ALmixer_FadeChannel, "ALmixer_FadeChannel" ); 392 bindFunc( cast( void** )&ALmixer_FadeSource, "ALmixer_FadeSource" ); 393 bindFunc( cast( void** )&ALmixer_SetVolumeChannel, "ALmixer_SetVolumeChannel" ); 394 bindFunc( cast( void** )&ALmixer_SetVolumeSource, "ALmixer_SetVolumeSource" ); 395 bindFunc( cast( void** )&ALmixer_GetVolumeChannel, "ALmixer_GetVolumeChannel" ); 396 bindFunc( cast( void** )&ALmixer_GetVolumeSource, "ALmixer_GetVolumeSource" ); 397 bindFunc( cast( void** )&ALmixer_SetMaxVolumeChannel, "ALmixer_SetMaxVolumeChannel" ); 398 bindFunc( cast( void** )&ALmixer_SetMaxVolumeSource, "ALmixer_SetMaxVolumeSource" ); 399 bindFunc( cast( void** )&ALmixer_GetMaxVolumeChannel, "ALmixer_GetMaxVolumeChannel" ); 400 bindFunc( cast( void** )&ALmixer_GetMaxVolumeSource, "ALmixer_GetMaxVolumeSource" ); 401 bindFunc( cast( void** )&ALmixer_SetMinVolumeChannel, "ALmixer_SetMinVolumeChannel" ); 402 bindFunc( cast( void** )&ALmixer_SetMinVolumeSource, "ALmixer_SetMinVolumeSource" ); 403 bindFunc( cast( void** )&ALmixer_GetMinVolumeChannel, "ALmixer_GetMinVolumeChannel" ); 404 bindFunc( cast( void** )&ALmixer_GetMinVolumeSource, "ALmixer_GetMinVolumeSource" ); 405 bindFunc( cast( void** )&ALmixer_SetMasterVolume, "ALmixer_SetMasterVolume" ); 406 bindFunc( cast( void** )&ALmixer_GetMasterVolume, "ALmixer_GetMasterVolume" ); 407 ///QueryAPI Query APIs 408 409 ///DebugAPI Debug APIs 410 } 411 } 412 413 __gshared DerelictDALmixerLoader DALmixer; 414 415 shared static this() { 416 DALmixer = new DerelictDALmixerLoader(); 417 }