diff --git a/src/java/com/threerings/openal/Sound.java b/src/java/com/threerings/openal/Sound.java index a6126eaa..a6f837c2 100644 --- a/src/java/com/threerings/openal/Sound.java +++ b/src/java/com/threerings/openal/Sound.java @@ -393,7 +393,7 @@ public class Sound protected void updateSourceGain () { if (_source != null) { - _source.setGain(_gain * _group.getBaseGain()); + _source.setGain(_gain * _group.getInheritedBaseGain()); } } diff --git a/src/java/com/threerings/openal/SoundGroup.java b/src/java/com/threerings/openal/SoundGroup.java index 9dd65e36..18fd91de 100644 --- a/src/java/com/threerings/openal/SoundGroup.java +++ b/src/java/com/threerings/openal/SoundGroup.java @@ -35,6 +35,25 @@ import static com.threerings.openal.Log.log; */ public class SoundGroup { + /** + * Sets the base gain for this group, or -1 to inherit from the manager (the default). + */ + public void setBaseGain (float gain) + { + if (_baseGain != gain) { + _baseGain = gain; + baseGainChanged(); + } + } + + /** + * Returns the base gain for this group, or -1 if inherited from the manager. + */ + public float getBaseGain () + { + return _baseGain; + } + /** * Queues up the specified sound clip for pre-loading into the cache. */ @@ -140,15 +159,15 @@ public class SoundGroup /** * Used to pass the base gain through to sound effects. */ - protected float getBaseGain () + protected float getInheritedBaseGain () { - return _manager.getBaseGain(); + return (_baseGain < 0f) ? _manager.getBaseGain() : _baseGain; } /** * Called by the manager when the base gain has changed. */ - protected void baseGainChanged (float gain) + protected void baseGainChanged () { // notify any sound currently holding a source for (int ii = 0, nn = _sources.size(); ii < nn; ii++) { @@ -170,4 +189,7 @@ public class SoundGroup protected ClipProvider _provider; protected ArrayList _sources = Lists.newArrayList(); + + /** The base gain, or -1 to inherit from the manager. */ + protected float _baseGain = -1f; } diff --git a/src/java/com/threerings/openal/SoundManager.java b/src/java/com/threerings/openal/SoundManager.java index 40e99ca5..9df21836 100644 --- a/src/java/com/threerings/openal/SoundManager.java +++ b/src/java/com/threerings/openal/SoundManager.java @@ -120,9 +120,12 @@ public class SoundManager } _baseGain = gain; - // alert the groups + // alert the groups that inherite the gain for (int ii = 0, nn = _groups.size(); ii < nn; ii++) { - _groups.get(ii).baseGainChanged(gain); + SoundGroup group = _groups.get(ii); + if (group.getBaseGain() < 0f) { + group.baseGainChanged(); + } } }