Allow play, loop and unlock to pass in a Runnable to be called when they're processed to match lock
git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@605 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
@@ -286,8 +286,17 @@ public class SoundManager
|
|||||||
*/
|
*/
|
||||||
public void unlock (String pkgPath, String... keys)
|
public void unlock (String pkgPath, String... keys)
|
||||||
{
|
{
|
||||||
for (int ii=0; ii < keys.length; ii++) {
|
unlock(pkgPath, null, keys);
|
||||||
enqueue(new SoundKey(UNLOCK, pkgPath, keys[ii], null), (ii == 0));
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Unlock the specified sounds so that its resources can be freed. <code>onUnlock</code> will
|
||||||
|
* be called on a spooler thread when unlocking is complete.
|
||||||
|
*/
|
||||||
|
public void unlock (String pkgPath, Runnable onUnlock, String... keys)
|
||||||
|
{
|
||||||
|
for (int ii = 0; ii < keys.length; ii++) {
|
||||||
|
enqueue(new SoundKey(UNLOCK, pkgPath, keys[ii], onUnlock), (ii == 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,13 +336,19 @@ public class SoundManager
|
|||||||
* @param pan a value from -1f (all left) to +1f (all right).
|
* @param pan a value from -1f (all left) to +1f (all right).
|
||||||
*/
|
*/
|
||||||
public void play (SoundType type, String pkgPath, String key, int delay, float pan)
|
public void play (SoundType type, String pkgPath, String key, int delay, float pan)
|
||||||
|
{
|
||||||
|
play(type, pkgPath, key, delay, pan, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void play (SoundType type, String pkgPath, String key, int delay, float pan,
|
||||||
|
Runnable onStop)
|
||||||
{
|
{
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
type = DEFAULT; // let the lazy kids play too
|
type = DEFAULT; // let the lazy kids play too
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_clipVol != 0f) && isEnabled(type)) {
|
if ((_clipVol != 0f) && isEnabled(type)) {
|
||||||
final SoundKey skey = new SoundKey(PLAY, pkgPath, key, delay, _clipVol, pan);
|
final SoundKey skey = new SoundKey(PLAY, pkgPath, key, delay, _clipVol, pan, onStop);
|
||||||
if (delay > 0) {
|
if (delay > 0) {
|
||||||
new Interval() {
|
new Interval() {
|
||||||
@Override
|
@Override
|
||||||
@@ -352,7 +367,7 @@ public class SoundManager
|
|||||||
*/
|
*/
|
||||||
public Frob loop (SoundType type, String pkgPath, String key)
|
public Frob loop (SoundType type, String pkgPath, String key)
|
||||||
{
|
{
|
||||||
return loop(type, pkgPath, key, PAN_CENTER, LOOP);
|
return loop(type, pkgPath, key, PAN_CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -360,7 +375,16 @@ public class SoundManager
|
|||||||
*/
|
*/
|
||||||
public Frob loop (SoundType type, String pkgPath, String key, float pan)
|
public Frob loop (SoundType type, String pkgPath, String key, float pan)
|
||||||
{
|
{
|
||||||
return loop(type, pkgPath, key, pan, LOOP);
|
return loop(type, pkgPath, key, pan, LOOP, null);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loop the specified sound, stopping as quickly as possible when stop is called.
|
||||||
|
*/
|
||||||
|
public Frob loop (SoundType type, String pkgPath, String key, float pan, Runnable onStop)
|
||||||
|
{
|
||||||
|
return loop(type, pkgPath, key, pan, LOOP, onStop);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,7 +394,16 @@ public class SoundManager
|
|||||||
*/
|
*/
|
||||||
public Frob loopToCompletion (SoundType type, String pkgPath, String key)
|
public Frob loopToCompletion (SoundType type, String pkgPath, String key)
|
||||||
{
|
{
|
||||||
return loop(type, pkgPath, key, PAN_CENTER, LOOP_TO_COMPLETION);
|
return loop(type, pkgPath, key, PAN_CENTER, LOOP_TO_COMPLETION, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loop the specified sound, stopping after the current iteration completes when stop is
|
||||||
|
* called.
|
||||||
|
*/
|
||||||
|
public Frob loopToCompletion (SoundType type, String pkgPath, String key, Runnable onStop)
|
||||||
|
{
|
||||||
|
return loop(type, pkgPath, key, PAN_CENTER, LOOP_TO_COMPLETION, onStop);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==== End of public methods ====
|
// ==== End of public methods ====
|
||||||
@@ -837,7 +870,8 @@ public class SoundManager
|
|||||||
/**
|
/**
|
||||||
* Loop the specified sound.
|
* Loop the specified sound.
|
||||||
*/
|
*/
|
||||||
protected Frob loop (SoundType type, String pkgPath, String key, float pan, byte cmd)
|
protected Frob loop (SoundType type, String pkgPath, String key, float pan, byte cmd,
|
||||||
|
Runnable onStop)
|
||||||
{
|
{
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
type = DEFAULT;
|
type = DEFAULT;
|
||||||
@@ -846,7 +880,7 @@ public class SoundManager
|
|||||||
if (!isEnabled(type)) {
|
if (!isEnabled(type)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
SoundKey skey = new SoundKey(cmd, pkgPath, key, 0, _clipVol, pan);
|
SoundKey skey = new SoundKey(cmd, pkgPath, key, 0, _clipVol, pan, onStop);
|
||||||
addToPlayQueue(skey);
|
addToPlayQueue(skey);
|
||||||
return skey; // it is a frob
|
return skey; // it is a frob
|
||||||
}
|
}
|
||||||
@@ -959,9 +993,9 @@ public class SoundManager
|
|||||||
* Constructor for a sound effect soundkey.
|
* Constructor for a sound effect soundkey.
|
||||||
*/
|
*/
|
||||||
public SoundKey (byte cmd, String pkgPath, String key, int delay, float volume,
|
public SoundKey (byte cmd, String pkgPath, String key, int delay, float volume,
|
||||||
float pan)
|
float pan, Runnable onProcessed)
|
||||||
{
|
{
|
||||||
this(cmd, pkgPath, key, null);
|
this(cmd, pkgPath, key, onProcessed);
|
||||||
|
|
||||||
stamp = System.currentTimeMillis() + delay;
|
stamp = System.currentTimeMillis() + delay;
|
||||||
setVolume(volume);
|
setVolume(volume);
|
||||||
|
|||||||
Reference in New Issue
Block a user