From c4bdcf03c88bf3660dd6a96c8190e485f072212d Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 30 Jul 2014 14:10:11 -0700 Subject: [PATCH] More audio context work --- lime/media/ALAudioContext.hx | 265 ++++++--------------- lime/media/ALCAudioContext.hx | 133 +++++++++++ lime/media/AudioBuffer.hx | 3 +- lime/media/AudioContext.hx | 2 +- lime/media/AudioManager.hx | 34 ++- lime/media/FlashAudioContext.hx | 3 +- lime/media/HTML5AudioContext.hx | 31 +-- lime/media/openal/AL.hx | 237 +++++++++++++++++- project/src/backend/sdl/SDLApplication.cpp | 25 +- 9 files changed, 500 insertions(+), 233 deletions(-) create mode 100644 lime/media/ALCAudioContext.hx diff --git a/lime/media/ALAudioContext.hx b/lime/media/ALAudioContext.hx index 19eb83804..31518ed38 100644 --- a/lime/media/ALAudioContext.hx +++ b/lime/media/ALAudioContext.hx @@ -2,83 +2,79 @@ package lime.media; import lime.media.openal.AL; -import lime.media.openal.ALC; -import lime.media.openal.ALContext; -import lime.media.openal.ALDevice; +import lime.utils.Float32Array; class ALAudioContext { - public inline var NONE:Int = 0; - public inline var FALSE:Int = 0; - public inline var TRUE:Int = 1; - public inline var SOURCE_RELATIVE:Int = 0x202; - public inline var CONE_INNER_ANGLE:Int = 0x1001; - public inline var CONE_OUTER_ANGLE:Int = 0x1002; - public inline var PITCH:Int = 0x1003; - public inline var POSITION:Int = 0x1004; - public inline var DIRECTION:Int = 0x1005; - public inline var VELOCITY:Int = 0x1006; - public inline var LOOPING:Int = 0x1007; - public inline var BUFFER:Int = 0x1009; - public inline var GAIN:Int = 0x100A; - public inline var MIN_GAIN:Int = 0x100D; - public inline var MAX_GAIN:Int = 0x100E; - public inline var ORIENTATION:Int = 0x100F; - public inline var SOURCE_STATE:Int = 0x1010; - public inline var INITIAL:Int = 0x1011; - public inline var PLAYING:Int = 0x1012; - public inline var PAUSED:Int = 0x1013; - public inline var STOPPED:Int = 0x1014; - public inline var BUFFERS_QUEUED:Int = 0x1015; - public inline var BUFFERS_PROCESSED:Int = 0x1016; - public inline var REFERENCE_DISTANCE:Int = 0x1020; - public inline var ROLLOFF_FACTOR:Int = 0x1021; - public inline var CONE_OUTER_GAIN:Int = 0x1022; - public inline var MAX_DISTANCE:Int = 0x1023; - public inline var SEC_OFFSET:Int = 0x1024; - public inline var SAMPLE_OFFSET:Int = 0x1025; - public inline var BYTE_OFFSET:Int = 0x1026; - public inline var SOURCE_TYPE:Int = 0x1027; - public inline var STATIC:Int = 0x1028; - public inline var STREAMING:Int = 0x1029; - public inline var UNDETERMINED:Int = 0x1030; - public inline var FORMAT_MONO8:Int = 0x1100; - public inline var FORMAT_MONO16:Int = 0x1101; - public inline var FORMAT_STEREO8:Int = 0x1102; - public inline var FORMAT_STEREO16:Int = 0x1103; - public inline var FREQUENCY:Int = 0x2001; - public inline var BITS:Int = 0x2002; - public inline var CHANNELS:Int = 0x2003; - public inline var SIZE:Int = 0x2004; - public inline var NO_ERROR:Int = 0; - public inline var INVALID_NAME:Int = 0xA001; - public inline var INVALID_ENUM:Int = 0xA002; - public inline var INVALID_VALUE:Int = 0xA003; - public inline var INVALID_OPERATION:Int = 0xA004; - public inline var OUT_OF_MEMORY:Int = 0xA005; - public inline var VENDOR:Int = 0xB001; - public inline var VERSION:Int = 0xB002; - public inline var RENDERER:Int = 0xB003; - public inline var EXTENSIONS:Int = 0xB004; - public inline var DOPPLER_FACTOR:Int = 0xC000; - public inline var SPEED_OF_SOUND:Int = 0xC003; - public inline var DOPPLER_VELOCITY:Int = 0xC001; - public inline var DISTANCE_MODEL:Int = 0xD000; - public inline var INVERSE_DISTANCE:Int = 0xD001; - public inline var INVERSE_DISTANCE_CLAMPED:Int = 0xD002; - public inline var LINEAR_DISTANCE:Int = 0xD003; - public inline var LINEAR_DISTANCE_CLAMPED:Int = 0xD004; - public inline var EXPONENT_DISTANCE:Int = 0xD005; - public inline var EXPONENT_DISTANCE_CLAMPED:Int = 0xD006; - - public var alc:ALAudioContext_ALC; + public var NONE:Int = 0; + public var FALSE:Int = 0; + public var TRUE:Int = 1; + public var SOURCE_RELATIVE:Int = 0x202; + public var CONE_INNER_ANGLE:Int = 0x1001; + public var CONE_OUTER_ANGLE:Int = 0x1002; + public var PITCH:Int = 0x1003; + public var POSITION:Int = 0x1004; + public var DIRECTION:Int = 0x1005; + public var VELOCITY:Int = 0x1006; + public var LOOPING:Int = 0x1007; + public var BUFFER:Int = 0x1009; + public var GAIN:Int = 0x100A; + public var MIN_GAIN:Int = 0x100D; + public var MAX_GAIN:Int = 0x100E; + public var ORIENTATION:Int = 0x100F; + public var SOURCE_STATE:Int = 0x1010; + public var INITIAL:Int = 0x1011; + public var PLAYING:Int = 0x1012; + public var PAUSED:Int = 0x1013; + public var STOPPED:Int = 0x1014; + public var BUFFERS_QUEUED:Int = 0x1015; + public var BUFFERS_PROCESSED:Int = 0x1016; + public var REFERENCE_DISTANCE:Int = 0x1020; + public var ROLLOFF_FACTOR:Int = 0x1021; + public var CONE_OUTER_GAIN:Int = 0x1022; + public var MAX_DISTANCE:Int = 0x1023; + public var SEC_OFFSET:Int = 0x1024; + public var SAMPLE_OFFSET:Int = 0x1025; + public var BYTE_OFFSET:Int = 0x1026; + public var SOURCE_TYPE:Int = 0x1027; + public var STATIC:Int = 0x1028; + public var STREAMING:Int = 0x1029; + public var UNDETERMINED:Int = 0x1030; + public var FORMAT_MONO8:Int = 0x1100; + public var FORMAT_MONO16:Int = 0x1101; + public var FORMAT_STEREO8:Int = 0x1102; + public var FORMAT_STEREO16:Int = 0x1103; + public var FREQUENCY:Int = 0x2001; + public var BITS:Int = 0x2002; + public var CHANNELS:Int = 0x2003; + public var SIZE:Int = 0x2004; + public var NO_ERROR:Int = 0; + public var INVALID_NAME:Int = 0xA001; + public var INVALID_ENUM:Int = 0xA002; + public var INVALID_VALUE:Int = 0xA003; + public var INVALID_OPERATION:Int = 0xA004; + public var OUT_OF_MEMORY:Int = 0xA005; + public var VENDOR:Int = 0xB001; + public var VERSION:Int = 0xB002; + public var RENDERER:Int = 0xB003; + public var EXTENSIONS:Int = 0xB004; + public var DOPPLER_FACTOR:Int = 0xC000; + public var SPEED_OF_SOUND:Int = 0xC003; + public var DOPPLER_VELOCITY:Int = 0xC001; + public var DISTANCE_MODEL:Int = 0xD000; + public var INVERSE_DISTANCE:Int = 0xD001; + public var INVERSE_DISTANCE_CLAMPED:Int = 0xD002; + public var LINEAR_DISTANCE:Int = 0xD003; + public var LINEAR_DISTANCE_CLAMPED:Int = 0xD004; + public var EXPONENT_DISTANCE:Int = 0xD005; + public var EXPONENT_DISTANCE_CLAMPED:Int = 0xD006; public function new () { - alc = new ALAudioContext_ALC (); + } @@ -106,7 +102,7 @@ class ALAudioContext { public function bufferf (buffer:Int, param:Int, value:Float):Void { - lime_al_bufferf (buffer, param, value); + AL.bufferf (buffer, param, value); } @@ -134,7 +130,7 @@ class ALAudioContext { public function deleteBuffer (buffer:Int):Void { - lime_al_delete_buffer (buffer); + AL.deleteBuffer (buffer); } @@ -561,7 +557,7 @@ class ALAudioContext { public function sourcePlayv (sources:Array):Void { - AL.sourcePlayv (sources.length, sources); + AL.sourcePlayv (sources); } @@ -643,131 +639,4 @@ class ALAudioContext { } -} - - -private class ALAudioContext_ALC { - - - public inline var FALSE:Int = 0; - public inline var TRUE:Int = 1; - public inline var FREQUENCY:Int = 0x1007; - public inline var REFRESH:Int = 0x1008; - public inline var SYNC:Int = 0x1009; - public inline var MONO_SOURCES:Int = 0x1010; - public inline var STEREO_SOURCES:Int = 0x1011; - public inline var NO_ERROR:Int = 0; - public inline var INVALID_DEVICE:Int = 0xA001; - public inline var INVALID_CONTEXT:Int = 0xA002; - public inline var INVALID_ENUM:Int = 0xA003; - public inline var INVALID_VALUE:Int = 0xA004; - public inline var OUT_OF_MEMORY:Int = 0xA005; - public inline var ATTRIBUTES_SIZE:Int = 0x1002; - public inline var ALL_ATTRIBUTES:Int = 0x1003; - public inline var DEFAULT_DEVICE_SPECIFIER:Int = 0x1004; - public inline var DEVICE_SPECIFIER:Int = 0x1005; - public inline var ALC_EXTENSIONS:Int = 0x1006; - public inline var ENUMERATE_ALL_EXT:Int = 1; - public inline var DEFAULT_ALL_DEVICES_SPECIFIER:Int = 0x1012; - public inline var ALL_DEVICES_SPECIFIER:Int = 0x1013; - - - public function new () { - - - - } - - - public function closeDevice (device:ALDevice):Bool { - - return ALC.closeDevice (device); - - } - - - public function createContext (device:ALDevice, attrlist:Array = null):ALContext { - - return ALC.createContext (device, attrlist); - - } - - - public function destroyContext (context:ALContext):Void { - - ALC.destroyContext (context); - - } - - - public function getContextsDevice (context:ALContext):ALDevice { - - return ALC.getContextsDevice (context); - - } - - - public function getCurrentContext ():ALContext { - - return ALC.getCurrentContext (); - - } - - - public function getError (device:ALDevice):Int { - - return ALC.getError (device); - - } - - - public function getErrorString (device:ALDevice):String { - - return ALC.getErrorString (device); - - } - - - public function getIntegerv (device:ALDevice, param:Int, count:Int = 1):Array { - - return ALC.getIntegerv (device, param, size); - - } - - - public function getString (device:ALDevice, param:Int):String { - - return ALC.getString (device, param); - - } - - - public function makeContextCurrent (context:ALContext):Bool { - - return ALC.makeContextCurrent (context); - - } - - - public function openDevice (deviceName:String = null):ALDevice { - - return ALC.openDevice (deviceName); - - } - - - public function processContext (context:ALContext):Void { - - ALC.processContext (context); - - } - - - public function suspendContext (context:ALContext):Void { - - ALC.suspendContext (context); - - } - - } \ No newline at end of file diff --git a/lime/media/ALCAudioContext.hx b/lime/media/ALCAudioContext.hx new file mode 100644 index 000000000..d6e6b9dd4 --- /dev/null +++ b/lime/media/ALCAudioContext.hx @@ -0,0 +1,133 @@ +package lime.media; + + +import lime.media.openal.ALC; +import lime.media.openal.ALContext; +import lime.media.openal.ALDevice; + + +class ALCAudioContext { + + + public var FALSE:Int = 0; + public var TRUE:Int = 1; + public var FREQUENCY:Int = 0x1007; + public var REFRESH:Int = 0x1008; + public var SYNC:Int = 0x1009; + public var MONO_SOURCES:Int = 0x1010; + public var STEREO_SOURCES:Int = 0x1011; + public var NO_ERROR:Int = 0; + public var INVALID_DEVICE:Int = 0xA001; + public var INVALID_CONTEXT:Int = 0xA002; + public var INVALID_ENUM:Int = 0xA003; + public var INVALID_VALUE:Int = 0xA004; + public var OUT_OF_MEMORY:Int = 0xA005; + public var ATTRIBUTES_SIZE:Int = 0x1002; + public var ALL_ATTRIBUTES:Int = 0x1003; + public var DEFAULT_DEVICE_SPECIFIER:Int = 0x1004; + public var DEVICE_SPECIFIER:Int = 0x1005; + public var EXTENSIONS:Int = 0x1006; + public var ENUMERATE_ALL_EXT:Int = 1; + public var DEFAULT_ALL_DEVICES_SPECIFIER:Int = 0x1012; + public var ALL_DEVICES_SPECIFIER:Int = 0x1013; + + + public function new () { + + + + } + + + public function closeDevice (device:ALDevice):Bool { + + return ALC.closeDevice (device); + + } + + + public function createContext (device:ALDevice, attrlist:Array = null):ALContext { + + return ALC.createContext (device, attrlist); + + } + + + public function destroyContext (context:ALContext):Void { + + ALC.destroyContext (context); + + } + + + public function getContextsDevice (context:ALContext):ALDevice { + + return ALC.getContextsDevice (context); + + } + + + public function getCurrentContext ():ALContext { + + return ALC.getCurrentContext (); + + } + + + public function getError (device:ALDevice):Int { + + return ALC.getError (device); + + } + + + public function getErrorString (device:ALDevice):String { + + return ALC.getErrorString (device); + + } + + + public function getIntegerv (device:ALDevice, param:Int, count:Int = 1):Array { + + return ALC.getIntegerv (device, param, count); + + } + + + public function getString (device:ALDevice, param:Int):String { + + return ALC.getString (device, param); + + } + + + public function makeContextCurrent (context:ALContext):Bool { + + return ALC.makeContextCurrent (context); + + } + + + public function openDevice (deviceName:String = null):ALDevice { + + return ALC.openDevice (deviceName); + + } + + + public function processContext (context:ALContext):Void { + + ALC.processContext (context); + + } + + + public function suspendContext (context:ALContext):Void { + + ALC.suspendContext (context); + + } + + +} \ No newline at end of file diff --git a/lime/media/AudioBuffer.hx b/lime/media/AudioBuffer.hx index f0b067d1b..d109c5ecd 100644 --- a/lime/media/AudioBuffer.hx +++ b/lime/media/AudioBuffer.hx @@ -3,6 +3,7 @@ package lime.media; import lime.system.System; import lime.utils.ByteArray; +import lime.utils.Float32Array; class AudioBuffer { @@ -10,7 +11,7 @@ class AudioBuffer { public var bitsPerSample:Int; public var channels:Int; - public var data:ByteArray; + public var data:Float32Array; public var sampleRate:Int; diff --git a/lime/media/AudioContext.hx b/lime/media/AudioContext.hx index 587bd71e4..6a6ad1897 100644 --- a/lime/media/AudioContext.hx +++ b/lime/media/AudioContext.hx @@ -9,7 +9,7 @@ import lime.media.WebAudioContext; enum AudioContext { - OPENAL (al:ALAudioContext); + OPENAL (alc:ALCAudioContext, al:ALAudioContext); HTML5 (context:HTML5AudioContext); WEB (context:WebAudioContext); FLASH (context:FlashAudioContext); diff --git a/lime/media/AudioManager.hx b/lime/media/AudioManager.hx index d6c11fd34..2d9cf7dec 100644 --- a/lime/media/AudioManager.hx +++ b/lime/media/AudioManager.hx @@ -1,15 +1,43 @@ package lime.media; +#if js +import js.Browser; +#end + + class AudioManager { - public var context:AudioContext; + public static var context:AudioContext; - public function new () { - + public static function init (context:AudioContext = null) { + if (context == null) { + + #if js + try { + + untyped __js__ ("window.AudioContext = window.AudioContext || window.webkitAudioContext;"); + context = WEB (cast untyped __js__ ("new AudioContext ()")); + + } catch (e:Dynamic) { + + context = HTML5 (new HTML5AudioContext ()); + + } + #elseif flash + context = FLASH (new FlashAudioContext ()); + #else + context = OPENAL (new ALCAudioContext (), new ALAudioContext ()); + #end + + } else { + + AudioManager.context = context; + + } } diff --git a/lime/media/FlashAudioContext.hx b/lime/media/FlashAudioContext.hx index 8bba450f5..8102073b3 100644 --- a/lime/media/FlashAudioContext.hx +++ b/lime/media/FlashAudioContext.hx @@ -1,5 +1,4 @@ package lime.media; -import openfl.utils.UInt; #if flash @@ -115,7 +114,7 @@ class FlashAudioContext { } #end - return false; + return 0; } diff --git a/lime/media/HTML5AudioContext.hx b/lime/media/HTML5AudioContext.hx index 85af94e6d..e8c2fffbd 100644 --- a/lime/media/HTML5AudioContext.hx +++ b/lime/media/HTML5AudioContext.hx @@ -9,15 +9,15 @@ import js.html.Audio; class HTML5AudioContext { - public inline var HAVE_CURRENT_DATA:Int = 2; - public inline var HAVE_ENOUGH_DATA:Int = 4; - public inline var HAVE_FUTURE_DATA:Int = 3; - public inline var HAVE_METADATA:Int = 1; - public inline var HAVE_NOTHING:Int = 0; - public inline var NETWORK_EMPTY:Int = 0; - public inline var NETWORK_IDLE:Int = 1; - public inline var NETWORK_LOADING:Int = 2; - public inline var NETWORK_NO_SOURCE:Int = 3; + public var HAVE_CURRENT_DATA:Int = 2; + public var HAVE_ENOUGH_DATA:Int = 4; + public var HAVE_FUTURE_DATA:Int = 3; + public var HAVE_METADATA:Int = 1; + public var HAVE_NOTHING:Int = 0; + public var NETWORK_EMPTY:Int = 0; + public var NETWORK_IDLE:Int = 1; + public var NETWORK_LOADING:Int = 2; + public var NETWORK_NO_SOURCE:Int = 3; public function new () { @@ -46,7 +46,8 @@ class HTML5AudioContext { #if js var source = new AudioSource (); - source.src = new Audio (urlString); + source.src = new Audio (); + source.src.src = urlString; return source; #else return null; @@ -185,7 +186,7 @@ class HTML5AudioContext { } #end - return 0; + return false; } @@ -325,7 +326,7 @@ class HTML5AudioContext { } - public function getPreload (source:AudioSource):Bool { + public function getPreload (source:AudioSource):String { #if js if (source.src != null) { @@ -335,7 +336,7 @@ class HTML5AudioContext { } #end - return false; + return null; } @@ -350,7 +351,7 @@ class HTML5AudioContext { } #end - return false; + return 0; } @@ -573,7 +574,7 @@ class HTML5AudioContext { } - public function setPreload (source:AudioSource, value:Bool):Void { + public function setPreload (source:AudioSource, value:String):Void { #if js if (source.src != null) { diff --git a/lime/media/openal/AL.hx b/lime/media/openal/AL.hx index e0b112630..cd7ac3a70 100644 --- a/lime/media/openal/AL.hx +++ b/lime/media/openal/AL.hx @@ -72,227 +72,322 @@ class AL { public static inline var EXPONENT_DISTANCE_CLAMPED:Int = 0xD006; - public static function bufferData (buffer:Int, format:Int, data:Float32Array, size:Int, freq:Int):Void { + #if (cpp || neko) lime_al_buffer_data (buffer, format, data.getByteBuffer (), size, freq); + #end } public static function buffer3f (buffer:Int, param:Int, value1:Float, value2:Float, value3:Float):Void { + #if (cpp || neko) lime_al_buffer3f (buffer, param, value1, value2, value3); + #end } public static function buffer3i (buffer:Int, param:Int, value1:Int, value2:Int, value3:Int):Void { + #if (cpp || neko) lime_al_buffer3i (buffer, param, value1, value2, value3); + #end } public static function bufferf (buffer:Int, param:Int, value:Float):Void { + #if (cpp || neko) lime_al_bufferf (buffer, param, value); + #end } public static function bufferfv (buffer:Int, param:Int, values:Array):Void { + #if (cpp || neko) lime_al_bufferfv (buffer, param, values); + #end } public static function bufferi (buffer:Int, param:Int, value:Int):Void { + #if (cpp || neko) lime_al_bufferi (buffer, param, value); + #end } public static function bufferiv (buffer:Int, param:Int, values:Array):Void { + #if (cpp || neko) lime_al_bufferiv (buffer, param, values); + #end } public static function deleteBuffer (buffer:Int):Void { + #if (cpp || neko) lime_al_delete_buffer (buffer); + #end } public static function deleteBuffers (buffers:Array):Void { + #if (cpp || neko) lime_al_delete_buffers (buffers.length, buffers); + #end } public static function deleteSource (source:Int):Void { + #if (cpp || neko) lime_al_delete_source (source); + #end } public static function deleteSources (sources:Array):Void { + #if (cpp || neko) lime_al_delete_sources (sources.length, sources); + #end } public static function disable (capability:Int):Void { + #if (cpp || neko) lime_al_disable (capability); + #end } public static function distanceModel (distanceModel:Int):Void { + #if (cpp || neko) lime_al_distance_model (distanceModel); + #end } public static function dopplerFactor (value:Float):Void { + #if (cpp || neko) lime_al_doppler_factor (value); + #end } public static function dopplerVelocity (value:Float):Void { + #if (cpp || neko) lime_al_doppler_velocity (value); + #end } public static function enable (capability:Int):Void { + #if (cpp || neko) lime_al_enable (capability); + #end } public static function genSource ():Int { + #if (cpp || neko) return lime_al_gen_source (); + #else + return 0; + #end } public static function genSources (n:Int):Array { + #if (cpp || neko) return lime_al_gen_sources (n); + #else + return null; + #end } public static function genBuffer ():Int { + #if (cpp || neko) return lime_al_gen_buffer (); + #else + return 0; + #end } public static function genBuffers (n:Int):Array { + #if (cpp || neko) return lime_al_gen_buffers (n); + #else + return null; + #end } public static function getBoolean (param:Int):Bool { + #if (cpp || neko) return lime_al_get_boolean (param); + #else + return false; + #end } public static function getBooleanv (param:Int, count:Int = 1 ):Array { + #if (cpp || neko) return lime_al_get_booleanv (param, count); + #else + return null; + #end } public static function getBuffer3f (buffer:Int, param:Int):Array { + #if (cpp || neko) return lime_al_get_buffer3f (buffer, param); + #else + return null; + #end } public static function getBuffer3i (buffer:Int, param:Int):Array { + #if (cpp || neko) return lime_al_get_buffer3i (buffer, param); + #else + return null; + #end } public static function getBufferf (buffer:Int, param:Int):Float { + #if (cpp || neko) return lime_al_get_bufferf (buffer, param); + #else + return 0; + #end } public static function getBufferfv (buffer:Int, param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_bufferfv (buffer, param, count); + #else + return null; + #end } public static function getBufferi (buffer:Int, param:Int):Int { + #if (cpp || neko) return lime_al_get_bufferi (buffer, param); + #else + return 0; + #end } public static function getBufferiv (buffer:Int, param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_bufferiv (buffer, param, count); + #else + return null; + #end } public static function getDouble (param:Int):Float { + #if (cpp || neko) return lime_al_get_double (param); + #else + return 0; + #end } public static function getDoublev (param:Int, count:Int = 1 ):Array { + #if (cpp || neko) return lime_al_get_doublev (param, count); + #else + return null; + #end } public static function getEnumValue (ename:String):Int { + #if (cpp || neko) return lime_al_get_enum_value (ename); + #else + return 0; + #end } public static function getError ():Int { + #if (cpp || neko) return lime_al_get_error (); + #else + return 0; + #end } @@ -315,70 +410,110 @@ class AL { public static function getFloat (param:Int):Float { + #if (cpp || neko) return lime_al_get_float (param); + #else + return 0; + #end } public static function getFloatv (param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_floatv (param, count); + #else + return null; + #end } public static function getInteger (param:Int):Int { + #if (cpp || neko) return lime_al_get_integer (param); + #else + return 0; + #end } public static function getIntegerv (param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_integerv (param, count); + #else + return null; + #end } public static function getListener3f (param:Int):Array { + #if (cpp || neko) return lime_al_get_listener3f (param); + #else + return null; + #end } public static function getListener3i (param:Int):Array { + #if (cpp || neko) return lime_al_get_listener3i (param); + #else + return null; + #end } public static function getListenerf (param:Int):Float { + #if (cpp || neko) return lime_al_get_listenerf (param); + #else + return 0; + #end } public static function getListenerfv (param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_listenerfv (param, count); + #else + return null; + #end } public static function getListeneri (param:Int):Int { + #if (cpp || neko) return lime_al_get_listeneri (param); + #else + return 0; + #end } public static function getListeneriv (param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_listeneriv (param, count); + #else + return null; + #end } @@ -392,257 +527,356 @@ class AL { public static function getSource3f (source:Int, param:Int):Array { + #if (cpp || neko) return lime_al_get_source3f (source, param); + #else + return null; + #end } public static function getSourcef (source:Int, param:Int):Float { + #if (cpp || neko) return lime_al_get_sourcef (source, param); + #else + return 0; + #end } public static function getSource3i (source:Int, param:Int):Array { + #if (cpp || neko) return lime_al_get_source3i (source, param); + #else + return null; + #end } public static function getSourcefv (source:Int, param:Int):Array { + #if (cpp || neko) return lime_al_get_sourcefv (source, param); + #else + return null; + #end } public static function getSourcei (source:Int, param:Int):Int { + #if (cpp || neko) return lime_al_get_sourcei (source, param); + #else + return 0; + #end } public static function getSourceiv (source:Int, param:Int, count:Int = 1):Array { + #if (cpp || neko) return lime_al_get_sourceiv (source, param, count); + #else + return null; + #end } public static function getString (param:Int):String { + #if (cpp || neko) return lime_al_get_string (param); + #else + return null; + #end } public static function isBuffer (buffer:Int):Bool { + #if (cpp || neko) return lime_al_is_buffer (buffer); + #else + return false; + #end } public static function isEnabled (capability:Int):Bool { + #if (cpp || neko) return lime_al_is_enabled (capability); + #else + return false; + #end } public static function isExtensionPresent (extname:String):Bool { + #if (cpp || neko) return lime_al_is_extension_present (extname); + #else + return false; + #end } public static function isSource (source:Int):Bool { + #if (cpp || neko) return lime_al_is_source (source); + #else + return false; + #end } public static function listener3f (param:Int, value1:Float, value2:Float, value3:Float):Void { + #if (cpp || neko) lime_al_listener3f (param, value1, value2, value3); + #end } public static function listener3i (param:Int, value1:Int, value2:Int, value3:Int):Void { + #if (cpp || neko) lime_al_listener3i (param, value1, value2, value3); + #end } public static function listenerf (param:Int, value:Float):Void { + #if (cpp || neko) lime_al_listenerf (param, value); + #end } public static function listenerfv (param:Int, values:Array):Void { + #if (cpp || neko) lime_al_listenerfv (param, values); + #end } public static function listeneri (param:Int, value:Int):Void { + #if (cpp || neko) lime_al_listeneri (param, value); + #end } public static function listeneriv (param:Int, values:Array):Void { + #if (cpp || neko) lime_al_listeneriv (param, values); + #end } public static function source3f (source:Int, param:Int, value1:Float, value2:Float, value3:Float):Void { + #if (cpp || neko) lime_al_source3f (source, param, value1, value2, value3); + #end } public static function source3i (source:Int, param:Int, value1:Int, value2:Int, value3:Int):Void { + #if (cpp || neko) lime_al_source3i (source, param, value1, value2, value3); + #end } public static function sourcef (source:Int, param:Int, value:Float):Void { + #if (cpp || neko) lime_al_sourcef (source, param, value); + #end } public static function sourcefv (source:Int, param:Int, values:Array):Void { + #if (cpp || neko) lime_al_sourcefv (source, param, values); + #end } public static function sourcei (source:Int, param:Int, value:Int):Void { + #if (cpp || neko) lime_al_sourcei (source, param, value); + #end } public static function sourceiv (source:Int, param:Int, values:Array):Void { + #if (cpp || neko) lime_al_sourceiv (source, param, values); + #end } public static function sourcePlay (source:Int):Void { + #if (cpp || neko) lime_al_source_play (source); + #end } public static function sourcePlayv (sources:Array):Void { + #if (cpp || neko) lime_al_source_playv (sources.length, sources); + #end } public static function sourceStop (source:Int):Void { + #if (cpp || neko) lime_al_source_stop (source); + #end } public static function sourceStopv (sources:Array):Void { + #if (cpp || neko) lime_al_source_stopv (sources.length, sources); + #end } public static function sourceRewind (source:Int):Void { + #if (cpp || neko) lime_al_source_rewind (source); + #end } public static function sourceRewindv (sources:Array):Void { + #if (cpp || neko) lime_al_source_rewindv (sources.length, sources); + #end } public static function sourcePause (source:Int):Void { + #if (cpp || neko) lime_al_source_pause (source); + #end } public static function sourcePausev (sources:Array):Void { + #if (cpp || neko) lime_al_source_pausev (sources.length, sources); + #end } public static function sourceQueueBuffer (source:Int, buffer:Int):Void { + #if (cpp || neko) lime_al_source_queue_buffers (source, 1, [ buffer ]); + #end } public static function sourceQueueBuffers (source:Int, nb:Int, buffers:Array):Void { + #if (cpp || neko) lime_al_source_queue_buffers (source, nb, buffers); + #end } public static function sourceUnqueueBuffer (source:Int):Int { + #if (cpp || neko) var res = lime_al_source_unqueue_buffers (source, 1); return res[0]; + #else + return 0; + #end } public static function sourceUnqueueBuffers (source:Int, nb:Int):Array { + #if (cpp || neko) return lime_al_source_unqueue_buffers (source, nb); + #else + return null; + #end } public static function speedOfSound (value:Float):Void { + #if (cpp || neko) lime_al_speed_of_sound (value); + #end } + #if (cpp || neko) private static var lime_al_buffer_data = System.load ("lime", "lime_al_buffer_data", 5); private static var lime_al_bufferf = System.load ("lime", "lime_al_bufferf", 3); private static var lime_al_buffer3f = System.load ("lime", "lime_al_buffer3f", 5); @@ -720,6 +954,7 @@ class AL { private static var lime_al_sourcei = System.load ("lime", "lime_al_sourcei", 3); private static var lime_al_sourceiv = System.load ("lime", "lime_al_sourceiv", 3); private static var lime_al_speed_of_sound = System.load ("lime", "lime_al_speed_of_sound", 1); + #end } \ No newline at end of file diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index 1d8625505..a7d7d66bd 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -22,18 +22,6 @@ namespace lime { SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER); - #ifdef HX_MACOS - // set working directory for OS X - CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL (CFBundleGetMainBundle ()); - char path[PATH_MAX]; - if (CFURLGetFileSystemRepresentation (resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) { - - chdir(path); - - } - CFRelease(resourcesURL); - #endif - currentUpdate = 0; lastUpdate = 0; nextUpdate = 0; @@ -45,6 +33,19 @@ namespace lime { UpdateEvent updateEvent; WindowEvent windowEvent; + #ifdef HX_MACOS + CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL (CFBundleGetMainBundle ()); + char path[PATH_MAX]; + + if (CFURLGetFileSystemRepresentation (resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) { + + chdir (path); + + } + + CFRelease (resourcesURL); + #endif + }