Skip to content

Commit

Permalink
Bug fixes, added support for seamless loops
Browse files Browse the repository at this point in the history
  • Loading branch information
esDotDev committed May 15, 2013
1 parent d305cd2 commit 6add0e6
Show file tree
Hide file tree
Showing 47 changed files with 132 additions and 83 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
CHANGELOG
=========
####May 15, 2013
* Bug Fixes
* Added support for seamless looping (when instance.enableSeamlessLooping == true)

####May 5, 2013
* Added support for Groups
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ The goal of SoundAS is to simplifying playback of your audio files, with a focus

#Features
* Clean modern API
* Easy memory management
* API Chaining: SoundAS.play("music").fadeTo(0);
* Supports groups of sounds
* Supports seamless looping
* Supports workaround for the 'looping bug' (http://www.stevensacks.net/2008/08/07/as3-sound-channel-bug/)
* Built-in Tweening system, no dependancies
* Modular API. If all you need is a nice wrapper around the Sound object, use SoundInstance directly and ignore the rest.
* Modular API: Use SoundInstance directly and ignore the rest.
* Non-restrictive and unambigous license

#API Overview
Expand All @@ -33,9 +34,9 @@ Loading / Unloading:
Playback:

* **SoundAS.getSound**(type:String, forceNew:Boolean = false):SoundInstance
* **SoundAS.play**(type:String, volume:Number = 1, startTime:Number = 0, loops:int = 0, allowMultiple:Boolean = false, allowInterrupt:Boolean = true):SoundInstance
* **SoundAS.play**(type:String, volume:Number = 1, startTime:Number = 0, loops:int = 0, allowMultiple:Boolean = false, allowInterrupt:Boolean = true, enableSeamlessLoops:Boolean = false):SoundInstance
* **SoundAS.playFx**(type:String, volume:Number = 1, startTime:Number = 0, loops:int = 0):SoundInstance
* **SoundAS.playLoop**(type:String, volume:Number = 1, startTime:Number = 0):SoundInstance
* **SoundAS.playLoop**(type:String, volume:Number = 1, startTime:Number = 0, enableSeamlessLoops:Boolean = true):SoundInstance
* **SoundAS.resume**(type:String, volume:Number = 1, startTime:Number = 0, loops:int = 0):SoundInstance
* **SoundAS.resumeAll**():void
* **SoundAS.pause**(type:String):SoundInstance
Expand Down
Binary file added demo/src/Loop.mp3
Binary file not shown.
2 changes: 1 addition & 1 deletion demo/src/SoundAS_Demo-app.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/3.7">
<application xmlns="http://ns.adobe.com/air/application/3.8">

<!-- Adobe AIR Application Descriptor File Template.
Expand Down
17 changes: 17 additions & 0 deletions demo/src/SoundAS_Demo.as
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,14 @@ package

public function SoundAS_Demo(){

SoundAS.loadSound("Loop.mp3", "loop");
SoundAS.loadSound("Click.mp3", CLICK);
SoundAS.loadSound("Music.mp3", MUSIC, 100);
SoundAS.loadSound("Solo1.mp3", SOLO1, 100);
SoundAS.loadSound("Solo2.mp3", SOLO2, 100);

//SoundAS.playLoop("loop", 1, 10000);

stage.addEventListener(MouseEvent.CLICK, function(){
var click:SoundInstance = SoundAS.playFx(CLICK);
trace("Click.oldChannels.length = " + click.oldChannels.length);
Expand Down Expand Up @@ -161,6 +164,7 @@ package
var solo:SoundInstance = SoundAS.play(SOLO1, volume, 0, 2);
solo.soundCompleted.add(playPause);
playPause(solo);

function playPause(si:SoundInstance):void {
if(solo.loopsRemaining == -1){
trace("INFINITE LOOP: 5 seconds of repeating Clicks");
Expand Down Expand Up @@ -246,6 +250,19 @@ package
SoundAS.groups[i].stopAll();
}
}, 9000);

break;

case Keyboard.NUMBER_7:
trace("Loop - Seamless");
SoundAS.playLoop("loop", volume, 0, true);
setTimeout(function(){
trace("Loop - Non-Seamless");
SoundAS.stopAll();
SoundAS.play("loop", volume, 0, 2);

}, 15000);

}

});
Expand Down
2 changes: 1 addition & 1 deletion docs/all-classes.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ <h3><a href="class-summary.html" target="classFrame" style="color:black">All Cla
</table>
</body>
</html>
<!--A modern AS3 SoundManager<br/>Mon May 13 2013, 03:37 PM -06:00 -->
<!--A modern AS3 SoundManager<br/>Wed May 15 2013, 11:49 AM -06:00 -->
2 changes: 1 addition & 1 deletion docs/all-index-A.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
-->
</script><div class="MainContent"><br><table border="0" cellspacing="0" cellpadding="0"><tr><td colspan="2"><a name="A"></a><font color="black" size="10px" style="bold">A</font>&nbsp;&nbsp;<a href="all-index-B.html" onclick="javascript:loadClassListFrame('index-list.html');">B</a>&nbsp;&nbsp;<a href="all-index-C.html" onclick="javascript:loadClassListFrame('index-list.html');">C</a>&nbsp;&nbsp;<a href="all-index-D.html" onclick="javascript:loadClassListFrame('index-list.html');">D</a>&nbsp;&nbsp;<a href="all-index-E.html" onclick="javascript:loadClassListFrame('index-list.html');">E</a>&nbsp;&nbsp;<a href="all-index-F.html" onclick="javascript:loadClassListFrame('index-list.html');">F</a>&nbsp;&nbsp;<a href="all-index-G.html" onclick="javascript:loadClassListFrame('index-list.html');">G</a>&nbsp;&nbsp;<a href="all-index-H.html" onclick="javascript:loadClassListFrame('index-list.html');">H</a>&nbsp;&nbsp;<a href="all-index-I.html" onclick="javascript:loadClassListFrame('index-list.html');">I</a>&nbsp;&nbsp;<a href="all-index-J.html" onclick="javascript:loadClassListFrame('index-list.html');">J</a>&nbsp;&nbsp;<a href="all-index-K.html" onclick="javascript:loadClassListFrame('index-list.html');">K</a>&nbsp;&nbsp;<a href="all-index-L.html" onclick="javascript:loadClassListFrame('index-list.html');">L</a>&nbsp;&nbsp;<a href="all-index-M.html" onclick="javascript:loadClassListFrame('index-list.html');">M</a>&nbsp;&nbsp;<a href="all-index-N.html" onclick="javascript:loadClassListFrame('index-list.html');">N</a>&nbsp;&nbsp;<a href="all-index-O.html" onclick="javascript:loadClassListFrame('index-list.html');">O</a>&nbsp;&nbsp;<a href="all-index-P.html" onclick="javascript:loadClassListFrame('index-list.html');">P</a>&nbsp;&nbsp;<a href="all-index-Q.html" onclick="javascript:loadClassListFrame('index-list.html');">Q</a>&nbsp;&nbsp;<a href="all-index-R.html" onclick="javascript:loadClassListFrame('index-list.html');">R</a>&nbsp;&nbsp;<a href="all-index-S.html" onclick="javascript:loadClassListFrame('index-list.html');">S</a>&nbsp;&nbsp;<a href="all-index-T.html" onclick="javascript:loadClassListFrame('index-list.html');">T</a>&nbsp;&nbsp;<a href="all-index-U.html" onclick="javascript:loadClassListFrame('index-list.html');">U</a>&nbsp;&nbsp;<a href="all-index-V.html" onclick="javascript:loadClassListFrame('index-list.html');">V</a>&nbsp;&nbsp;<a href="all-index-W.html" onclick="javascript:loadClassListFrame('index-list.html');">W</a>&nbsp;&nbsp;<a href="all-index-X.html" onclick="javascript:loadClassListFrame('index-list.html');">X</a>&nbsp;&nbsp;<a href="all-index-Y.html" onclick="javascript:loadClassListFrame('index-list.html');">Y</a>&nbsp;&nbsp;<a href="all-index-Z.html" onclick="javascript:loadClassListFrame('index-list.html');">Z</a>&nbsp;&nbsp;</td></tr><tr><td class="idxrow" colspan="2"><a href="treefortress/sound/SoundManager.html#activeTweens" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">activeTweens</a> &mdash; Property, class treefortress.sound.<a href="treefortress/sound/SoundManager.html" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">SoundManager</a></td></tr><tr><td width="20"></td><td></td></tr><tr><td class="idxrow" colspan="2"><a href="treefortress/sound/SoundManager.html#addInstance()" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">addInstance</a>(si:<a href="treefortress/sound/SoundInstance.html" onclick="javascript:loadClassListFrame('treefortress/sound./class-list.html');">treefortress.sound:SoundInstance</a>) &mdash; method, class treefortress.sound.<a href="treefortress/sound/SoundManager.html" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">SoundManager</a></td></tr><tr><td width="20"></td><td></td></tr><tr><td class="idxrow" colspan="2"><a href="treefortress/sound/SoundManager.html#addMasterTween()" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">addMasterTween</a>(startVolume:Number, endVolume:Number, duration:Number) &mdash; method, class treefortress.sound.<a href="treefortress/sound/SoundManager.html" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">SoundManager</a></td></tr><tr><td width="20"></td><td></td></tr><tr><td class="idxrow" colspan="2"><a href="treefortress/sound/SoundManager.html#addSound()" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">addSound</a>(type:String, sound:flash.media:Sound) &mdash; method, class treefortress.sound.<a href="treefortress/sound/SoundManager.html" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">SoundManager</a></td></tr><tr><td width="20"></td><td>
Inject a sound that has already been loaded.</td></tr><tr><td class="idxrow" colspan="2"><a href="treefortress/sound/SoundManager.html#addTween()" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">addTween</a>(type:String, startVolume:Number, endVolume:Number, duration:Number) &mdash; method, class treefortress.sound.<a href="treefortress/sound/SoundManager.html" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">SoundManager</a></td></tr><tr><td width="20"></td><td></td></tr><tr><td class="idxrow" colspan="2"><a href="treefortress/sound/SoundInstance.html#allowMultiple" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">allowMultiple</a> &mdash; Property, class treefortress.sound.<a href="treefortress/sound/SoundInstance.html" onclick="javascript:loadClassListFrame('treefortress/sound/class-list.html');">SoundInstance</a></td></tr><tr><td width="20"></td><td>
Allow multiple concurrent instances of this Sound.</td></tr><tr><td colspan="2" style="padding-bottom:20px"></td></tr><tr><td colspan="2"><font color="black" size="10px" style="bold">A</font>&nbsp;&nbsp;<a href="all-index-B.html" onclick="javascript:loadClassListFrame('index-list.html');">B</a>&nbsp;&nbsp;<a href="all-index-C.html" onclick="javascript:loadClassListFrame('index-list.html');">C</a>&nbsp;&nbsp;<a href="all-index-D.html" onclick="javascript:loadClassListFrame('index-list.html');">D</a>&nbsp;&nbsp;<a href="all-index-E.html" onclick="javascript:loadClassListFrame('index-list.html');">E</a>&nbsp;&nbsp;<a href="all-index-F.html" onclick="javascript:loadClassListFrame('index-list.html');">F</a>&nbsp;&nbsp;<a href="all-index-G.html" onclick="javascript:loadClassListFrame('index-list.html');">G</a>&nbsp;&nbsp;<a href="all-index-H.html" onclick="javascript:loadClassListFrame('index-list.html');">H</a>&nbsp;&nbsp;<a href="all-index-I.html" onclick="javascript:loadClassListFrame('index-list.html');">I</a>&nbsp;&nbsp;<a href="all-index-J.html" onclick="javascript:loadClassListFrame('index-list.html');">J</a>&nbsp;&nbsp;<a href="all-index-K.html" onclick="javascript:loadClassListFrame('index-list.html');">K</a>&nbsp;&nbsp;<a href="all-index-L.html" onclick="javascript:loadClassListFrame('index-list.html');">L</a>&nbsp;&nbsp;<a href="all-index-M.html" onclick="javascript:loadClassListFrame('index-list.html');">M</a>&nbsp;&nbsp;<a href="all-index-N.html" onclick="javascript:loadClassListFrame('index-list.html');">N</a>&nbsp;&nbsp;<a href="all-index-O.html" onclick="javascript:loadClassListFrame('index-list.html');">O</a>&nbsp;&nbsp;<a href="all-index-P.html" onclick="javascript:loadClassListFrame('index-list.html');">P</a>&nbsp;&nbsp;<a href="all-index-Q.html" onclick="javascript:loadClassListFrame('index-list.html');">Q</a>&nbsp;&nbsp;<a href="all-index-R.html" onclick="javascript:loadClassListFrame('index-list.html');">R</a>&nbsp;&nbsp;<a href="all-index-S.html" onclick="javascript:loadClassListFrame('index-list.html');">S</a>&nbsp;&nbsp;<a href="all-index-T.html" onclick="javascript:loadClassListFrame('index-list.html');">T</a>&nbsp;&nbsp;<a href="all-index-U.html" onclick="javascript:loadClassListFrame('index-list.html');">U</a>&nbsp;&nbsp;<a href="all-index-V.html" onclick="javascript:loadClassListFrame('index-list.html');">V</a>&nbsp;&nbsp;<a href="all-index-W.html" onclick="javascript:loadClassListFrame('index-list.html');">W</a>&nbsp;&nbsp;<a href="all-index-X.html" onclick="javascript:loadClassListFrame('index-list.html');">X</a>&nbsp;&nbsp;<a href="all-index-Y.html" onclick="javascript:loadClassListFrame('index-list.html');">Y</a>&nbsp;&nbsp;<a href="all-index-Z.html" onclick="javascript:loadClassListFrame('index-list.html');">Z</a>&nbsp;&nbsp;</td></tr></table><p></p><center class="copyright"><footer>A modern AS3 SoundManager</footer><br/>Mon May 13 2013, 03:37 PM -06:00 </center></div></body></html><!--A modern AS3 SoundManager<br/>Mon May 13 2013, 03:37 PM -06:00 -->
Allow multiple concurrent instances of this Sound.</td></tr><tr><td colspan="2" style="padding-bottom:20px"></td></tr><tr><td colspan="2"><font color="black" size="10px" style="bold">A</font>&nbsp;&nbsp;<a href="all-index-B.html" onclick="javascript:loadClassListFrame('index-list.html');">B</a>&nbsp;&nbsp;<a href="all-index-C.html" onclick="javascript:loadClassListFrame('index-list.html');">C</a>&nbsp;&nbsp;<a href="all-index-D.html" onclick="javascript:loadClassListFrame('index-list.html');">D</a>&nbsp;&nbsp;<a href="all-index-E.html" onclick="javascript:loadClassListFrame('index-list.html');">E</a>&nbsp;&nbsp;<a href="all-index-F.html" onclick="javascript:loadClassListFrame('index-list.html');">F</a>&nbsp;&nbsp;<a href="all-index-G.html" onclick="javascript:loadClassListFrame('index-list.html');">G</a>&nbsp;&nbsp;<a href="all-index-H.html" onclick="javascript:loadClassListFrame('index-list.html');">H</a>&nbsp;&nbsp;<a href="all-index-I.html" onclick="javascript:loadClassListFrame('index-list.html');">I</a>&nbsp;&nbsp;<a href="all-index-J.html" onclick="javascript:loadClassListFrame('index-list.html');">J</a>&nbsp;&nbsp;<a href="all-index-K.html" onclick="javascript:loadClassListFrame('index-list.html');">K</a>&nbsp;&nbsp;<a href="all-index-L.html" onclick="javascript:loadClassListFrame('index-list.html');">L</a>&nbsp;&nbsp;<a href="all-index-M.html" onclick="javascript:loadClassListFrame('index-list.html');">M</a>&nbsp;&nbsp;<a href="all-index-N.html" onclick="javascript:loadClassListFrame('index-list.html');">N</a>&nbsp;&nbsp;<a href="all-index-O.html" onclick="javascript:loadClassListFrame('index-list.html');">O</a>&nbsp;&nbsp;<a href="all-index-P.html" onclick="javascript:loadClassListFrame('index-list.html');">P</a>&nbsp;&nbsp;<a href="all-index-Q.html" onclick="javascript:loadClassListFrame('index-list.html');">Q</a>&nbsp;&nbsp;<a href="all-index-R.html" onclick="javascript:loadClassListFrame('index-list.html');">R</a>&nbsp;&nbsp;<a href="all-index-S.html" onclick="javascript:loadClassListFrame('index-list.html');">S</a>&nbsp;&nbsp;<a href="all-index-T.html" onclick="javascript:loadClassListFrame('index-list.html');">T</a>&nbsp;&nbsp;<a href="all-index-U.html" onclick="javascript:loadClassListFrame('index-list.html');">U</a>&nbsp;&nbsp;<a href="all-index-V.html" onclick="javascript:loadClassListFrame('index-list.html');">V</a>&nbsp;&nbsp;<a href="all-index-W.html" onclick="javascript:loadClassListFrame('index-list.html');">W</a>&nbsp;&nbsp;<a href="all-index-X.html" onclick="javascript:loadClassListFrame('index-list.html');">X</a>&nbsp;&nbsp;<a href="all-index-Y.html" onclick="javascript:loadClassListFrame('index-list.html');">Y</a>&nbsp;&nbsp;<a href="all-index-Z.html" onclick="javascript:loadClassListFrame('index-list.html');">Z</a>&nbsp;&nbsp;</td></tr></table><p></p><center class="copyright"><footer>A modern AS3 SoundManager</footer><br/>Wed May 15 2013, 11:49 AM -06:00 </center></div></body></html><!--A modern AS3 SoundManager<br/>Wed May 15 2013, 11:49 AM -06:00 -->
Loading

0 comments on commit 6add0e6

Please sign in to comment.