diff --git a/lime/AudioHandler.hx b/lime/AudioHandler.hx new file mode 100644 index 000000000..c4b0bb954 --- /dev/null +++ b/lime/AudioHandler.hx @@ -0,0 +1,90 @@ +package lime; + +import lime.utils.Libs; +import nme.AssetData; + + +class SoundTransform { + public var pan:Float; + public var volume:Float; + + public function new(vol:Float = 1.0, panning:Float = 0.0) { + volume = vol; + pan = panning; + } + + public function clone() { + return new SoundTransform(volume, pan); + } +} + +class Sound { + public var handle : Dynamic; + public var sound : Dynamic; + + @:isVar public var volume(default, set) : Float = 1.0; + @:isVar public var pan(default, set) : Float = 0.0; + + private var _transform:SoundTransform; + + public function new(_handle:Dynamic, ?_sound:Dynamic = null){ + handle = _handle; + sound = _sound; + //reuse. + _transform = new SoundTransform(volume,pan); + } + + public function play(?_loops:Int = 0, ?_start:Float = 0.0) { + sound = null; + sound = nme_sound_channel_create(handle, _start, _loops, _transform); + } + + public function stop() { + if(sound != null) { + nme_sound_channel_stop(sound); + sound = null; + } + } + + public function set_volume(_v:Float) : Float { + _transform.volume = _v; + nme_sound_channel_set_transform(sound,_transform); + return volume = _v; + } + public function set_pan(_p:Float) : Float { + _transform.pan = _p; + nme_sound_channel_set_transform(sound,_transform); + return pan = _p; + } + + private static var nme_sound_channel_create = Libs.load("nme","nme_sound_channel_create", 4); + private static var nme_sound_channel_stop = Libs.load("nme","nme_sound_channel_stop", 1); + private static var nme_sound_channel_set_transform = Libs.load("nme","nme_sound_channel_set_transform", 2); +} + +class AudioHandler { + + public var lib : LiME; + public function new( _lib:LiME ) { lib = _lib; } + + public var sounds : Map; + public function startup() { + //test audio junks + + sounds = new Map(); + } + + public function create_sound(_name:String, _file:String ) { + if(sounds.exists(_name)) { + throw ">>> Named sounds are not allowed to have duplicate names"; + } + var _handle = nme_sound_from_file( nme.AssetData.path.get(_file), false); + var _sound = new Sound(_handle); + sounds.set(_name, _sound); + } + + + private static var nme_sound_from_file = Libs.load("nme","nme_sound_from_file", 2); + private static var nme_sound_from_data = Libs.load("nme","nme_sound_from_data", 3); + +} \ No newline at end of file diff --git a/lime/LiME.hx b/lime/LiME.hx index 5ad5ed2e6..4f234389f 100644 --- a/lime/LiME.hx +++ b/lime/LiME.hx @@ -4,6 +4,7 @@ import lime.utils.Libs; import lime.Constants; import lime.RenderHandler; +import lime.AudioHandler; import lime.InputHandler; import lime.WindowHandler; @@ -17,7 +18,8 @@ class LiME { public var config : Dynamic; //The handlers for the messages from NME - public var input : InputHandler; + public var audio : AudioHandler; + public var input : InputHandler; public var render : RenderHandler; public var window : WindowHandler; @@ -64,10 +66,17 @@ class LiME { //do any on ready initialization for the window window.ready(); + //For the asset class to keep lists and such + nme.AssetData.initialize(); + //Create our input message handler class input = new InputHandler( this ); input.startup(); + //Create our audio message handler class + audio = new AudioHandler( this ); + audio.startup(); + //Create our render message handler class render = new RenderHandler( this ); render.startup();