From f257968e9a3afb1ea752fee14ec29c04fb093035 Mon Sep 17 00:00:00 2001 From: Richard Olsson Date: Tue, 19 Jun 2012 12:18:24 +0200 Subject: [PATCH] Sound3D now dispatches Event.SOUND_COMPLETE. Closes #41 --- src/away3d/audio/Sound3D.as | 15 ++++++++++++++- src/away3d/audio/drivers/AbstractSound3DDriver.as | 3 ++- src/away3d/audio/drivers/ISound3DDriver.as | 3 ++- src/away3d/audio/drivers/SimplePanVolumeDriver.as | 11 ++++++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/away3d/audio/Sound3D.as b/src/away3d/audio/Sound3D.as index 733ab58b2..b573d52ab 100644 --- a/src/away3d/audio/Sound3D.as +++ b/src/away3d/audio/Sound3D.as @@ -2,9 +2,15 @@ package away3d.audio { import away3d.audio.drivers.*; import away3d.containers.ObjectContainer3D; - + + import flash.events.Event; import flash.geom.*; import flash.media.*; + + /** + * Dispatched when end of sound stream is reached (bubbled from the internal sound object). + */ + [Event(name="soundComplete", type="flash.events.Event")] /** *

A sound source/emitter object that can be positioned in 3D space, and from which all audio @@ -50,6 +56,7 @@ package away3d.audio _driver.sourceSound = _sound; _driver.volume = volume; _driver.scale = scale; + _driver.addEventListener(Event.SOUND_COMPLETE, onSoundComplete); _refv = new Vector3D; _inv_ref_mtx = new Matrix3D; @@ -215,5 +222,11 @@ package away3d.audio _driver.updateReferenceVector(_refv); } */ + + + private function onSoundComplete(ev : Event) : void + { + dispatchEvent(ev.clone()); + } } } \ No newline at end of file diff --git a/src/away3d/audio/drivers/AbstractSound3DDriver.as b/src/away3d/audio/drivers/AbstractSound3DDriver.as index 7305b7e00..cdde1772a 100644 --- a/src/away3d/audio/drivers/AbstractSound3DDriver.as +++ b/src/away3d/audio/drivers/AbstractSound3DDriver.as @@ -1,9 +1,10 @@ package away3d.audio.drivers { + import flash.events.EventDispatcher; import flash.geom.*; import flash.media.*; - public class AbstractSound3DDriver + public class AbstractSound3DDriver extends EventDispatcher { protected var _ref_v:Vector3D; protected var _src:Sound; diff --git a/src/away3d/audio/drivers/ISound3DDriver.as b/src/away3d/audio/drivers/ISound3DDriver.as index 2b128e367..a18674717 100644 --- a/src/away3d/audio/drivers/ISound3DDriver.as +++ b/src/away3d/audio/drivers/ISound3DDriver.as @@ -1,9 +1,10 @@ package away3d.audio.drivers { + import flash.events.IEventDispatcher; import flash.geom.*; import flash.media.*; - public interface ISound3DDriver + public interface ISound3DDriver extends IEventDispatcher { /** * The sound object (flash.media.Sound) to play at the point of the sound diff --git a/src/away3d/audio/drivers/SimplePanVolumeDriver.as b/src/away3d/audio/drivers/SimplePanVolumeDriver.as index a59f56703..c02bb2210 100644 --- a/src/away3d/audio/drivers/SimplePanVolumeDriver.as +++ b/src/away3d/audio/drivers/SimplePanVolumeDriver.as @@ -1,7 +1,8 @@ package away3d.audio.drivers { import away3d.audio.SoundTransform3D; - + + import flash.events.Event; import flash.geom.*; import flash.media.*; @@ -43,6 +44,7 @@ package away3d.audio.drivers // start from beginning of file. pos = _paused? _pause_position : 0; _sound_chan = _src.play(pos, 0, _st3D.soundTransform); + _sound_chan.addEventListener(Event.SOUND_COMPLETE, onSoundComplete); } @@ -51,12 +53,14 @@ package away3d.audio.drivers _paused = true; _pause_position = _sound_chan.position; _sound_chan.stop(); + _sound_chan.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete); } public function stop() : void { _sound_chan.stop(); + _sound_chan.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete); } @@ -98,5 +102,10 @@ package away3d.audio.drivers _sound_chan.soundTransform = _st3D.soundTransform; } + + private function onSoundComplete(ev : Event) : void + { + this.dispatchEvent(ev.clone()); + } } } \ No newline at end of file