1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 module derelict.alure.alure; 29 30 private { 31 import derelict.util.loader; 32 import derelict.util.system; 33 34 static if( Derelict_OS_Windows ) 35 enum libNames = "ALURE32.dll"; 36 else static if( Derelict_OS_Mac ) 37 enum libNames = "libalure.dylib"; 38 else static if( Derelict_OS_Posix ) 39 enum libNames = "libalure.so, libalure.so.1"; 40 else 41 static assert( 0, "Need to implement ALURE libNames for this operating system." ); 42 } 43 44 public import derelict.openal.al; 45 46 enum ALURE_VERSION_1_2 = true; 47 48 alias alureInt64 = long; 49 50 struct alureStream; 51 52 extern( C ) { 53 alias alureInstallDecodeCallbacks_open_file = void* function( ALchar* ); 54 alias alureInstallDecodeCallbacks_open_memory = void* function( ALubyte*, ALuint ); 55 alias alureInstallDecodeCallbacks_get_format = ALboolean function( void*, ALenum*, ALuint*, ALuint* ); 56 alias alureInstallDecodeCallbacks_decode = ALuint function( void*, ALubyte*, ALuint ); 57 alias alureInstallDecodeCallbacks_rewind = ALboolean function( void* ); 58 alias alureInstallDecodeCallbacks_close = void function( void* ); 59 60 alias alureCreateStreamFromCallback_callback = ALuint function( void*, ALubyte*, ALuint ); 61 62 alias alureSetIOCallbacks_open_callback = void* function( char*, ALuint ); 63 alias alureSetIOCallbacks_close_callback = void function( char* ); 64 alias alureSetIOCallbacks_read_callback = ALsizei function( void*, ALubyte*, ALuint ); 65 alias alureSetIOCallbacks_write_callback = ALsizei function( void*, ALubyte*, ALuint ); 66 alias alureSetIOCallbacks_seek_callback = alureInt64 function( void*, alureInt64, int ); 67 68 alias alurePlaySourceStream_eos_callback = void function( void*, ALuint ); 69 alias alurePlaySource_callback = void function( void*, ALuint ); 70 } 71 72 extern( C ) nothrow { 73 alias da_alureGetVersion = void function( ALuint*, ALuint* ); 74 alias da_alureGetErrorString = ALchar* function(); 75 alias da_alureGetDeviceNames = ALCchar** function( ALCboolean all, ALCsizei* ); 76 alias da_alureFreeDeviceNames = void function( ALCchar** ); 77 alias da_alureInitDevice = ALCboolean function( ALCchar*, ALCint* ); 78 alias da_alureShutdownDevice = ALCboolean function(); 79 alias da_alureGetSampleFormat = ALenum function( ALuint, ALuint, ALuint ); 80 alias da_alureInstallDecodeCallbacks = ALboolean function( ALint, 81 alureInstallDecodeCallbacks_open_file, 82 alureInstallDecodeCallbacks_open_memory, 83 alureInstallDecodeCallbacks_get_format, 84 alureInstallDecodeCallbacks_decode, 85 alureInstallDecodeCallbacks_rewind, alureInstallDecodeCallbacks_close ); 86 alias da_alureSleep = ALboolean function( ALfloat ); 87 alias da_alureGetProcAddress = void* function( ALchar* ); 88 89 alias da_alureCreateBufferFromFile = ALuint function( ALchar* ); 90 alias da_alureCreateBufferFromMemory = ALuint function( ALubyte*, ALsizei ); 91 alias da_alureBufferDataFromFile = ALboolean function( ALchar*, ALuint ); 92 alias da_alureBufferDataFromMemory = ALboolean function( ALubyte*, ALsizei, ALuint ); 93 94 alias da_alureStreamSizeIsMicroSec = ALboolean function( ALboolean ); 95 alias da_alureCreateStreamFromFile = alureStream* function( ALchar*, ALsizei, ALsizei, ALuint* ); 96 alias da_alureCreateStreamFromMemory = alureStream* function( ALubyte*, ALuint, ALsizei, ALsizei, ALuint* ); 97 alias da_alureCreateStreamFromStaticMemory = alureStream* function( ALubyte*, ALuint, ALsizei, ALsizei, ALuint* ); 98 alias da_alureCreateStreamFromCallback = alureStream* function( alureCreateStreamFromCallback_callback, 99 void*, ALenum, ALuint,ALsizei, ALsizei, ALuint* ); 100 alias da_alureGetStreamFrequency = ALsizei function( alureStream* ); 101 alias da_alureBufferDataFromStream = ALsizei function( alureStream*, ALsizei, ALuint* ); 102 alias da_alureRewindStream = ALboolean function( alureStream*, ALsizei ); 103 alias da_alureSetStreamOrder = ALboolean function( alureStream*, ALuint ); 104 alias da_alureSetStreamPatchset = ALboolean function( alureStream*, ALchar* ); 105 alias da_alureGetStreamLength = alureInt64 function( alureStream* ); 106 alias da_alureDestroyStream = ALboolean function( alureStream*, ALsizei, ALuint* ); 107 108 alias da_alureSetIOCallbacks = ALboolean function( alureSetIOCallbacks_open_callback, 109 alureSetIOCallbacks_close_callback, 110 alureSetIOCallbacks_read_callback, 111 alureSetIOCallbacks_write_callback, alureSetIOCallbacks_seek_callback ); 112 113 alias da_alurePlaySourceStream = ALboolean function( ALuint, alureStream*, ALsizei, ALsizei, alurePlaySourceStream_eos_callback, void* ); 114 alias da_alurePlaySource = ALboolean function( ALuint, alurePlaySource_callback, void* ); 115 alias da_alureStopSource = ALboolean function( ALuint, ALboolean ); 116 alias da_alurePauseSource = ALboolean function( ALuint ); 117 alias da_alureResumeSource = ALboolean function( ALuint ); 118 alias da_alureUpdate = void function(); 119 alias da_alureUpdateInterval = ALboolean function( ALfloat ); 120 } 121 122 __gshared { 123 da_alureGetVersion alureGetVersion; 124 da_alureGetErrorString alureGetErrorString; 125 da_alureGetDeviceNames alureGetDeviceNames; 126 da_alureFreeDeviceNames alureFreeDeviceNames; 127 da_alureInitDevice alureInitDevice; 128 da_alureShutdownDevice alureShutdownDevice; 129 da_alureGetSampleFormat alureGetSampleFormat; 130 da_alureInstallDecodeCallbacks alureInstallDecodeCallbacks; 131 da_alureSleep alureSleep; 132 da_alureGetProcAddress alureGetProcAddress; 133 134 da_alureCreateBufferFromFile alureCreateBufferFromFile; 135 da_alureCreateBufferFromMemory alureCreateBufferFromMemory; 136 da_alureBufferDataFromFile alureBufferDataFromFile; 137 da_alureBufferDataFromMemory alureBufferDataFromMemory; 138 139 da_alureStreamSizeIsMicroSec alureStreamSizeIsMicroSec ; 140 da_alureCreateStreamFromFile alureCreateStreamFromFile; 141 da_alureCreateStreamFromMemory alureCreateStreamFromMemory; 142 da_alureCreateStreamFromStaticMemory alureCreateStreamFromStaticMemory; 143 da_alureCreateStreamFromCallback alureCreateStreamFromCallback; 144 da_alureGetStreamFrequency alureGetStreamFrequency; 145 da_alureBufferDataFromStream alureBufferDataFromStream; 146 da_alureRewindStream alureRewindStream; 147 da_alureSetStreamOrder alureSetStreamOrder; 148 da_alureSetStreamPatchset alureSetStreamPatchset; 149 da_alureGetStreamLength alureGetStreamLength; 150 da_alureDestroyStream alureDestroyStream; 151 152 da_alureSetIOCallbacks alureSetIOCallbacks; 153 154 da_alurePlaySourceStream alurePlaySourceStream; 155 da_alurePlaySource alurePlaySource; 156 da_alureStopSource alureStopSource; 157 da_alurePauseSource alurePauseSource; 158 da_alureResumeSource alureResumeSource; 159 da_alureUpdate alureUpdate; 160 da_alureUpdateInterval alureUpdateInterval; 161 } 162 163 class DerelictALURELoader : SharedLibLoader { 164 protected override void loadSymbols() { 165 bindFunc( cast( void** )&alureGetVersion, "alureGetVersion" ); 166 bindFunc( cast( void** )&alureGetErrorString, "alureGetErrorString" ); 167 bindFunc( cast( void** )&alureGetDeviceNames, "alureGetDeviceNames" ); 168 bindFunc( cast( void** )&alureFreeDeviceNames, "alureFreeDeviceNames" ); 169 bindFunc( cast( void** )&alureInitDevice, "alureInitDevice" ); 170 bindFunc( cast( void** )&alureShutdownDevice, "alureShutdownDevice" ); 171 bindFunc( cast( void** )&alureGetSampleFormat, "alureGetSampleFormat" ); 172 bindFunc( cast( void** )&alureInstallDecodeCallbacks, "alureInstallDecodeCallbacks" ); 173 bindFunc( cast( void** )&alureSleep, "alureSleep" ); 174 bindFunc( cast( void** )&alureGetProcAddress, "alureGetProcAddress" ); 175 176 bindFunc( cast( void** )&alureCreateBufferFromFile, "alureCreateBufferFromFile" ); 177 bindFunc( cast( void** )&alureCreateBufferFromMemory, "alureCreateBufferFromMemory" ); 178 bindFunc( cast( void** )&alureBufferDataFromFile, "alureBufferDataFromFile" ); 179 bindFunc( cast( void** )&alureBufferDataFromMemory, "alureBufferDataFromMemory" ); 180 181 bindFunc( cast( void** )&alureStreamSizeIsMicroSec, "alureStreamSizeIsMicroSec" ); 182 bindFunc( cast( void** )&alureCreateStreamFromFile, "alureCreateStreamFromFile" ); 183 bindFunc( cast( void** )&alureCreateStreamFromMemory, "alureCreateStreamFromMemory" ); 184 bindFunc( cast( void** )&alureCreateStreamFromStaticMemory, "alureCreateStreamFromStaticMemory" ); 185 bindFunc( cast( void** )&alureCreateStreamFromCallback, "alureCreateStreamFromCallback" ); 186 bindFunc( cast( void** )&alureGetStreamFrequency, "alureGetStreamFrequency" ); 187 bindFunc( cast( void** )&alureBufferDataFromStream, "alureBufferDataFromStream" ); 188 bindFunc( cast( void** )&alureRewindStream, "alureRewindStream" ); 189 bindFunc( cast( void** )&alureSetStreamOrder, "alureSetStreamOrder" ); 190 bindFunc( cast( void** )&alureSetStreamPatchset, "alureSetStreamPatchset" ); 191 bindFunc( cast( void** )&alureGetStreamLength, "alureGetStreamLength" ); 192 bindFunc( cast( void** )&alureDestroyStream, "alureDestroyStream" ); 193 194 bindFunc( cast( void** )&alureSetIOCallbacks, "alureSetIOCallbacks" ); 195 196 bindFunc( cast( void** )&alurePlaySourceStream, "alurePlaySourceStream" ); 197 bindFunc( cast( void** )&alurePlaySource, "alurePlaySource" ); 198 bindFunc( cast( void** )&alureStopSource, "alureStopSource" ); 199 bindFunc( cast( void** )&alurePauseSource, "alurePauseSource" ); 200 bindFunc( cast( void** )&alureResumeSource, "alureResumeSource" ); 201 bindFunc( cast( void** )&alureUpdate, "alureUpdate" ); 202 bindFunc( cast( void** )&alureUpdateInterval, "alureUpdateInterval" ); 203 } 204 205 public this() { 206 super( libNames ); 207 } 208 } 209 210 __gshared DerelictALURELoader DerelictALURE; 211 212 shared static this() { 213 DerelictALURE = new DerelictALURELoader(); 214 }